/**
 * Copyright (c) 2021-24 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 * @author David Sehnal <david.sehnal@gmail.com>
 */
import { CifFrame } from '../../../mol-io/reader/cif.js';
import { mmCIF_Schema } from '../../../mol-io/reader/cif/schema/mmcif.js';
import { CustomModelProperty } from '../../../mol-model-props/common/custom-model-property.js';
import { CustomProperty } from '../../../mol-model-props/common/custom-property.js';
import { Model, ResidueIndex } from '../../../mol-model/structure/model.js';
import { QuerySymbolRuntime } from '../../../mol-script/runtime/query/compiler.js';
import { ParamDefinition, ParamDefinition as PD } from '../../../mol-util/param-definition.js';
export { QualityAssessment };
interface QualityAssessment {
    local: QualityAssessment.Local[];
    /** id -> metric info */
    localMap: Map<number, QualityAssessment.Local>;
    /** default pLDDT metric */
    pLDDT?: Map<ResidueIndex, number>;
    /** default qmean metric */
    qmean?: Map<ResidueIndex, number>;
    /**
     * @deprecated
     * NOTE: Keeping this around in case someone is using it
     * TODO: Remove in Mol* 5.0
     */
    localMetrics: Map<string, Map<ResidueIndex, number>>;
}
declare namespace QualityAssessment {
    interface Local {
        id: number;
        kind?: 'pLDDT' | 'qmean';
        type: mmCIF_Schema['ma_qa_metric']['type']['T'];
        name: string;
        domain?: [number, number];
        valueRange: [number, number];
        values: Map<ResidueIndex, number>;
    }
    interface Pairwise {
        id: number;
        name: string;
        residueRange: [ResidueIndex, ResidueIndex];
        valueRange: [number, number];
        values: Record<ResidueIndex, Record<ResidueIndex, number | undefined> | undefined>;
    }
    function isApplicable(model?: Model, localMetricName?: 'pLDDT' | 'qmean'): boolean;
    function getLocalOptions(model: Model | undefined, kind: 'pLDDT' | 'qmean'): ParamDefinition.Select<number> | ParamDefinition.Select<undefined>;
    function obtain(ctx: CustomProperty.Context, model: Model, props: QualityAssessmentProps): Promise<CustomProperty.Data<QualityAssessment>>;
    function findModelArchiveCIFPAEMetrics(frame: CifFrame): {
        id: number;
        name: string;
    }[];
    function pairwiseMetricFromModelArchiveCIF(model: Model, frame: CifFrame, metricId: number): Pairwise | undefined;
    const symbols: {
        pLDDT: QuerySymbolRuntime;
        qmean: QuerySymbolRuntime;
    };
}
export declare const QualityAssessmentParams: {};
export type QualityAssessmentParams = typeof QualityAssessmentParams;
export type QualityAssessmentProps = PD.Values<QualityAssessmentParams>;
export declare const QualityAssessmentProvider: CustomModelProperty.Provider<QualityAssessmentParams, QualityAssessment>;
