UNPKG

molstar

Version:

A comprehensive macromolecular library.

125 lines (124 loc) 5.29 kB
/** * Copyright (c) 2017-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> */ import { Table } from '../../../mol-data/db'; import { getDefaultChemicalComponent, getMoleculeType } from '../../../mol-model/structure/model/types'; import { SaccharideCompIdMap, SaccharidesSnfgMap, UnknownSaccharideComponent } from '../../../mol-model/structure/structure/carbohydrates/constants'; import { memoize1 } from '../../../mol-util/memoize'; export function getMissingResidues(data) { var map = new Map(); var getKey = function (model_num, asym_id, seq_id) { return "".concat(model_num, "|").concat(asym_id, "|").concat(seq_id); }; var c = data.pdbx_unobs_or_zero_occ_residues; for (var i = 0, il = c._rowCount; i < il; ++i) { var key = getKey(c.PDB_model_num.value(i), c.label_asym_id.value(i), c.label_seq_id.value(i)); map.set(key, { polymer_flag: c.polymer_flag.value(i), occupancy_flag: c.occupancy_flag.value(i) }); } return { has: function (model_num, asym_id, seq_id) { return map.has(getKey(model_num, asym_id, seq_id)); }, get: function (model_num, asym_id, seq_id) { return map.get(getKey(model_num, asym_id, seq_id)); }, size: map.size }; } export function getChemicalComponentMap(data) { var map = new Map(); if (data.chem_comp._rowCount > 0) { var id = data.chem_comp.id; for (var i = 0, il = id.rowCount; i < il; ++i) { map.set(id.value(i), Table.getRow(data.chem_comp, i)); } } else { var uniqueNames = getUniqueComponentNames(data); uniqueNames.forEach(function (n) { map.set(n, getDefaultChemicalComponent(n)); }); } return map; } export function getSaccharideComponentMap(data) { var map = new Map(); if (data.pdbx_chem_comp_identifier._rowCount > 0) { // note that `pdbx_chem_comp_identifier` does not contain // a 'SNFG CARBOHYDRATE SYMBOL' entry for 'Unknown' saccharide components // so we always need to check `chem_comp` for those var _a = data.pdbx_chem_comp_identifier, comp_id = _a.comp_id, type = _a.type, identifier = _a.identifier; for (var i = 0, il = comp_id.rowCount; i < il; ++i) { if (type.value(i) === 'SNFG CARBOHYDRATE SYMBOL' || type.value(i) === 'SNFG CARB SYMBOL' // legacy, to be removed from mmCIF dictionary ) { var snfgName = identifier.value(i); var saccharideComp = SaccharidesSnfgMap.get(snfgName); if (saccharideComp) { map.set(comp_id.value(i), saccharideComp); } else { console.warn("Unknown SNFG name '".concat(snfgName, "'")); } } } } if (data.chem_comp._rowCount > 0) { var _b = data.chem_comp, id = _b.id, type = _b.type; for (var i = 0, il = id.rowCount; i < il; ++i) { var _id = id.value(i); if (map.has(_id)) continue; var _type = type.value(i); if (SaccharideCompIdMap.has(_id)) { map.set(_id, SaccharideCompIdMap.get(_id)); } else if (getMoleculeType(_type, _id) === 9 /* MoleculeType.Saccharide */) { map.set(_id, UnknownSaccharideComponent); } } } else { var uniqueNames_1 = getUniqueComponentNames(data); SaccharideCompIdMap.forEach(function (v, k) { if (!map.has(k) && uniqueNames_1.has(k)) map.set(k, v); }); } return map; } var getUniqueComponentNames = memoize1(function (data) { var uniqueNames = new Set(); var _a = data.atom_site, label_comp_id = _a.label_comp_id, auth_comp_id = _a.auth_comp_id; var comp_id = label_comp_id.isDefined ? label_comp_id : auth_comp_id; for (var i = 0, il = comp_id.rowCount; i < il; ++i) { uniqueNames.add(comp_id.value(i)); } return uniqueNames; }); export function getStructAsymMap(atomic, data) { var map = new Map(); var _a = atomic.chains, auth_asym_id = _a.auth_asym_id, label_asym_id = _a.label_asym_id, label_entity_id = _a.label_entity_id; for (var i = 0, _i = atomic.chains._rowCount; i < _i; i++) { var id = label_asym_id.value(i); map.set(id, { id: id, auth_id: auth_asym_id.value(i), entity_id: label_entity_id.value(i) }); } // to get asym mapping for coarse/ihm data if (data === null || data === void 0 ? void 0 : data.struct_asym._rowCount) { var _b = data.struct_asym, id = _b.id, entity_id = _b.entity_id; for (var i = 0, il = id.rowCount; i < il; ++i) { var _id = id.value(i); if (!map.has(_id)) { map.set(_id, { id: _id, auth_id: '', entity_id: entity_id.value(i) }); } } } return map; }