UNPKG

molstar

Version:

A comprehensive macromolecular library.

127 lines (126 loc) 6.8 kB
/** * Copyright (c) 2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ import { __assign, __awaiter, __generator } from "tslib"; import { ParamDefinition as PD } from '../../../mol-util/param-definition'; import { Unit } from '../../../mol-model/structure'; import { CustomModelProperty } from '../../../mol-model-props/common/custom-model-property'; import { QuerySymbolRuntime } from '../../../mol-script/runtime/query/compiler'; import { CustomPropSymbol } from '../../../mol-script/language/symbol'; import { Type } from '../../../mol-script/language/type'; import { CustomPropertyDescriptor } from '../../../mol-model/custom-property'; import { MmcifFormat } from '../../../mol-model-formats/structure/mmcif'; export { QualityAssessment }; var QualityAssessment; (function (QualityAssessment) { var Empty = { value: { localMetrics: new Map() } }; function isApplicable(model, localMetricName) { if (!model || !MmcifFormat.is(model.sourceData)) return false; var db = model.sourceData.data.db; var hasLocalMetric = (db.ma_qa_metric.id.isDefined && db.ma_qa_metric_local.ordinal_id.isDefined); if (localMetricName && hasLocalMetric) { for (var i = 0, il = db.ma_qa_metric._rowCount; i < il; i++) { if (db.ma_qa_metric.mode.value(i) !== 'local') continue; if (localMetricName === db.ma_qa_metric.name.value(i)) return true; } return false; } else { return hasLocalMetric; } } QualityAssessment.isApplicable = isApplicable; function obtain(ctx, model, props) { return __awaiter(this, void 0, void 0, function () { var _a, ma_qa_metric, ma_qa_metric_local, model_id, label_asym_id, label_seq_id, metric_id, metric_value, index, localMetrics, localNames, i, il, name_1, i, il, labelAsymId, entityIndex, rI, name_2; return __generator(this, function (_b) { if (!model || !MmcifFormat.is(model.sourceData)) return [2 /*return*/, Empty]; _a = model.sourceData.data.db, ma_qa_metric = _a.ma_qa_metric, ma_qa_metric_local = _a.ma_qa_metric_local; model_id = ma_qa_metric_local.model_id, label_asym_id = ma_qa_metric_local.label_asym_id, label_seq_id = ma_qa_metric_local.label_seq_id, metric_id = ma_qa_metric_local.metric_id, metric_value = ma_qa_metric_local.metric_value; index = model.atomicHierarchy.index; localMetrics = new Map(); localNames = new Map(); for (i = 0, il = ma_qa_metric._rowCount; i < il; i++) { if (ma_qa_metric.mode.value(i) !== 'local') continue; name_1 = ma_qa_metric.name.value(i); if (localMetrics.has(name_1)) { console.warn("local ma_qa_metric with name '".concat(name_1, "' already added")); continue; } localMetrics.set(name_1, new Map()); localNames.set(ma_qa_metric.id.value(i), name_1); } for (i = 0, il = ma_qa_metric_local._rowCount; i < il; i++) { if (model_id.value(i) !== model.modelNum) continue; labelAsymId = label_asym_id.value(i); entityIndex = index.findEntity(labelAsymId); rI = index.findResidue(model.entities.data.id.value(entityIndex), labelAsymId, label_seq_id.value(i)); name_2 = localNames.get(metric_id.value(i)); localMetrics.get(name_2).set(rI, metric_value.value(i)); } return [2 /*return*/, { value: { localMetrics: localMetrics, pLDDT: localMetrics.get('pLDDT'), qmean: localMetrics.get('qmean'), } }]; }); }); } QualityAssessment.obtain = obtain; QualityAssessment.symbols = { pLDDT: QuerySymbolRuntime.Dynamic(CustomPropSymbol('ma', 'quality-assessment.pLDDT', Type.Num), function (ctx) { var _a, _b; var _c = ctx.element, unit = _c.unit, element = _c.element; if (!Unit.isAtomic(unit)) return -1; var qualityAssessment = QualityAssessmentProvider.get(unit.model).value; return (_b = (_a = qualityAssessment === null || qualityAssessment === void 0 ? void 0 : qualityAssessment.pLDDT) === null || _a === void 0 ? void 0 : _a.get(unit.model.atomicHierarchy.residueAtomSegments.index[element])) !== null && _b !== void 0 ? _b : -1; }), qmean: QuerySymbolRuntime.Dynamic(CustomPropSymbol('ma', 'quality-assessment.qmean', Type.Num), function (ctx) { var _a, _b; var _c = ctx.element, unit = _c.unit, element = _c.element; if (!Unit.isAtomic(unit)) return -1; var qualityAssessment = QualityAssessmentProvider.get(unit.model).value; return (_b = (_a = qualityAssessment === null || qualityAssessment === void 0 ? void 0 : qualityAssessment.qmean) === null || _a === void 0 ? void 0 : _a.get(unit.model.atomicHierarchy.residueAtomSegments.index[element])) !== null && _b !== void 0 ? _b : -1; }), }; })(QualityAssessment || (QualityAssessment = {})); export var QualityAssessmentParams = {}; export var QualityAssessmentProvider = CustomModelProperty.createProvider({ label: 'QualityAssessment', descriptor: CustomPropertyDescriptor({ name: 'ma_quality_assessment', symbols: QualityAssessment.symbols }), type: 'static', defaultParams: QualityAssessmentParams, getParams: function (data) { return QualityAssessmentParams; }, isApplicable: function (data) { return QualityAssessment.isApplicable(data); }, obtain: function (ctx, data, props) { return __awaiter(void 0, void 0, void 0, function () { var p; return __generator(this, function (_a) { switch (_a.label) { case 0: p = __assign(__assign({}, PD.getDefaultValues(QualityAssessmentParams)), props); return [4 /*yield*/, QualityAssessment.obtain(ctx, data, p)]; case 1: return [2 /*return*/, _a.sent()]; } }); }); } });