UNPKG

molstar

Version:

A comprehensive macromolecular library.

85 lines 3.96 kB
/** * Copyright (c) 2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { __awaiter, __generator } from "tslib"; import { MmcifFormat } from '../../mol-model-formats/structure/mmcif'; import { CustomPropertyDescriptor } from '../../mol-model/custom-property'; import { CustomModelProperty } from '../common/custom-model-property'; export { BestDatabaseSequenceMapping }; var BestDatabaseSequenceMapping; (function (BestDatabaseSequenceMapping) { var _this = this; BestDatabaseSequenceMapping.Provider = CustomModelProperty.createProvider({ label: 'Best Database Sequence Mapping', descriptor: CustomPropertyDescriptor({ name: 'molstar_best_database_sequence_mapping' }), type: 'static', defaultParams: {}, getParams: function () { return ({}); }, isApplicable: function (data) { var _a, _b; return MmcifFormat.is(data.sourceData) && ((_b = (_a = data.sourceData.data.frame.categories) === null || _a === void 0 ? void 0 : _a.atom_site) === null || _b === void 0 ? void 0 : _b.fieldNames.indexOf('db_name')) >= 0; }, obtain: function (ctx, data) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, { value: fromCif(data) }]; }); }); } }); function getKey(loc) { var model = loc.unit.model; var data = BestDatabaseSequenceMapping.Provider.get(model).value; if (!data) return ''; var eI = loc.unit.elements[loc.element]; var rI = model.atomicHierarchy.residueAtomSegments.offsets[eI]; return data.accession[rI]; } BestDatabaseSequenceMapping.getKey = getKey; function getLabel(loc) { var model = loc.unit.model; var data = BestDatabaseSequenceMapping.Provider.get(model).value; if (!data) return; var eI = loc.unit.elements[loc.element]; var rI = model.atomicHierarchy.residueAtomSegments.offsets[eI]; var dbName = data.dbName[rI]; if (!dbName) return; return dbName + " " + data.accession[rI] + " " + data.num[rI] + " " + data.residue[rI]; } BestDatabaseSequenceMapping.getLabel = getLabel; function fromCif(model) { if (!MmcifFormat.is(model.sourceData)) return; var atom_site = model.sourceData.data.frame.categories.atom_site; var db_name = atom_site.getField('db_name'); var db_acc = atom_site.getField('db_acc'); var db_num = atom_site.getField('db_num'); var db_res = atom_site.getField('db_res'); if (!db_name || !db_acc || !db_num || !db_res) return; var atomSourceIndex = model.atomicHierarchy.atomSourceIndex; var _a = model.atomicHierarchy.residueAtomSegments, count = _a.count, residueOffsets = _a.offsets; var dbName = new Array(count); var accession = new Array(count); var num = new Array(count); var residue = new Array(count); for (var i = 0; i < count; i++) { var row = atomSourceIndex.value(residueOffsets[i]); if (db_name.valueKind(row) !== 0 /* Present */) { dbName[row] = ''; accession[row] = ''; num[row] = 0; residue[row] = ''; continue; } dbName[row] = db_name.str(row); accession[row] = db_acc.str(row); num[row] = db_num.int(row); residue[row] = db_res.str(row); } return { dbName: dbName, accession: accession, num: num, residue: residue }; } })(BestDatabaseSequenceMapping || (BestDatabaseSequenceMapping = {})); //# sourceMappingURL=best-database-mapping.js.map