/**
 * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { AssemblySymmetryQuery } from '../graphql/types';
import { ParamDefinition as PD } from '../../../mol-util/param-definition';
import { Structure } from '../../../mol-model/structure';
import { CustomProperty } from '../../../mol-model-props/common/custom-property';
import { NonNullableArray } from '../../../mol-util/type-helpers';
import { CustomStructureProperty } from '../../../mol-model-props/common/custom-structure-property';
import { ReadonlyVec3 } from '../../../mol-math/linear-algebra/3d/vec3';
export declare function isBiologicalAssembly(structure: Structure): boolean;
export declare namespace AssemblySymmetry {
    enum Tag {
        Cluster = "rcsb-assembly-symmetry-cluster",
        Representation = "rcsb-assembly-symmetry-3d"
    }
    const DefaultServerUrl = "https://data.rcsb.org/graphql";
    function isApplicable(structure?: Structure): boolean;
    function fetch(ctx: CustomProperty.Context, structure: Structure, props: AssemblySymmetryDataProps): Promise<CustomProperty.Data<AssemblySymmetryDataValue>>;
    /** Returns the index of the first non C1 symmetry or -1 */
    function firstNonC1(assemblySymmetryData: AssemblySymmetryDataValue): number;
    type RotationAxes = ReadonlyArray<{
        order: number;
        start: ReadonlyVec3;
        end: ReadonlyVec3;
    }>;
    function isRotationAxes(x: AssemblySymmetryValue['rotation_axes']): x is RotationAxes;
    function getAsymIds(assemblySymmetry: AssemblySymmetryValue): string[];
    /** Returns structure limited to all cluster member chains */
    function getStructure(structure: Structure, assemblySymmetry: AssemblySymmetryValue): Structure;
}
export declare function getSymmetrySelectParam(structure?: Structure): PD.Select<number>;
export declare const AssemblySymmetryDataParams: {
    serverUrl: PD.Text<string>;
};
export declare type AssemblySymmetryDataParams = typeof AssemblySymmetryDataParams;
export declare type AssemblySymmetryDataProps = PD.Values<AssemblySymmetryDataParams>;
export declare type AssemblySymmetryDataValue = NonNullableArray<NonNullable<NonNullable<AssemblySymmetryQuery['assembly']>['rcsb_struct_symmetry']>>;
export declare const AssemblySymmetryDataProvider: CustomStructureProperty.Provider<AssemblySymmetryDataParams, AssemblySymmetryDataValue>;
export declare const AssemblySymmetryParams: {
    symmetryIndex: PD.Select<number>;
    serverUrl: PD.Text<string>;
};
export declare type AssemblySymmetryParams = typeof AssemblySymmetryParams;
export declare type AssemblySymmetryProps = PD.Values<AssemblySymmetryParams>;
export declare type AssemblySymmetryValue = AssemblySymmetryDataValue[0];
export declare const AssemblySymmetryProvider: CustomStructureProperty.Provider<AssemblySymmetryParams, AssemblySymmetryValue>;
