UNPKG

molstar

Version:

A comprehensive macromolecular library.

190 lines 9.08 kB
"use strict"; /** * Copyright (c) 2018-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> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ModelSecondaryStructure = void 0; var types_1 = require("../../../mol-model/structure/model/types"); var atomic_1 = require("../../../mol-model/structure/model/properties/atomic"); var seconday_structure_1 = require("../../../mol-model/structure/model/properties/seconday-structure"); var property_1 = require("../common/property"); var ModelSecondaryStructure; (function (ModelSecondaryStructure) { ModelSecondaryStructure.Descriptor = { name: 'model_secondary_structure', }; ModelSecondaryStructure.Provider = property_1.FormatPropertyProvider.create(ModelSecondaryStructure.Descriptor); function fromStruct(conf, sheetRange, hierarchy) { var map = new Map(); var elements = [{ kind: 'none' }]; var coordinates = getCoordinateType(conf, sheetRange); addHelices(conf, coordinates, map, elements); // must add Helices 1st because of 'key' value assignment. addSheets(sheetRange, coordinates, map, conf._rowCount, elements); var n = hierarchy.residues._rowCount; var getIndex = function (rI) { return rI; }; var secStruct = { type: new Int32Array(n), key: new Int32Array(n), elements: elements }; if (map.size > 0) assignSecondaryStructureRanges(hierarchy, coordinates, map, secStruct); return (0, seconday_structure_1.SecondaryStructure)(secStruct.type, secStruct.key, secStruct.elements, getIndex); } ModelSecondaryStructure.fromStruct = fromStruct; })(ModelSecondaryStructure || (ModelSecondaryStructure = {})); exports.ModelSecondaryStructure = ModelSecondaryStructure; function getCoordinateType(conf, sheetRange) { if (conf._rowCount > 0) { if (conf.beg_label_seq_id.valueKind(0) !== 0 /* Present */ || conf.end_label_seq_id.valueKind(0) !== 0 /* Present */) return 'auth'; } else if (sheetRange) { if (sheetRange.beg_label_seq_id.valueKind(0) !== 0 /* Present */ || sheetRange.end_label_seq_id.valueKind(0) !== 0 /* Present */) return 'auth'; } return 'label'; } function addHelices(cat, coordinates, map, elements) { if (!cat._rowCount) return; var beg_label_asym_id = cat.beg_label_asym_id, beg_label_seq_id = cat.beg_label_seq_id, beg_auth_seq_id = cat.beg_auth_seq_id, pdbx_beg_PDB_ins_code = cat.pdbx_beg_PDB_ins_code; var end_label_seq_id = cat.end_label_seq_id, end_auth_seq_id = cat.end_auth_seq_id, pdbx_end_PDB_ins_code = cat.pdbx_end_PDB_ins_code; var pdbx_PDB_helix_class = cat.pdbx_PDB_helix_class, conf_type_id = cat.conf_type_id, details = cat.details; var beg_seq_id = coordinates === 'label' ? beg_label_seq_id : beg_auth_seq_id; var end_seq_id = coordinates === 'label' ? end_label_seq_id : end_auth_seq_id; for (var i = 0, _i = cat._rowCount; i < _i; i++) { var type = types_1.SecondaryStructureType.create(pdbx_PDB_helix_class.valueKind(i) === 0 /* Present */ ? types_1.SecondaryStructureType.SecondaryStructurePdb[pdbx_PDB_helix_class.value(i)] : conf_type_id.valueKind(i) === 0 /* Present */ ? types_1.SecondaryStructureType.SecondaryStructureMmcif[conf_type_id.value(i)] : 536870912 /* NA */); var element = { kind: 'helix', flags: type, type_id: conf_type_id.valueKind(i) === 0 /* Present */ ? conf_type_id.value(i) : 'HELIX_P', helix_class: pdbx_PDB_helix_class.value(i), details: details.valueKind(i) === 0 /* Present */ ? details.value(i) : void 0 }; var entry = { startSeqId: beg_seq_id.value(i), startInsCode: pdbx_beg_PDB_ins_code.value(i), endSeqId: end_seq_id.value(i), endInsCode: pdbx_end_PDB_ins_code.value(i), type: type, key: elements.length }; elements[elements.length] = element; var asymId = beg_label_asym_id.value(i); if (map.has(asymId)) { var entries = map.get(asymId); if (entries.has(entry.startSeqId)) { entries.get(entry.startSeqId).push(entry); } else { entries.set(entry.startSeqId, [entry]); } } else { map.set(asymId, new Map([[entry.startSeqId, [entry]]])); } } } function addSheets(cat, coordinates, map, sheetCount, elements) { if (!cat._rowCount) return; var beg_label_asym_id = cat.beg_label_asym_id, beg_label_seq_id = cat.beg_label_seq_id, beg_auth_seq_id = cat.beg_auth_seq_id, pdbx_beg_PDB_ins_code = cat.pdbx_beg_PDB_ins_code; var end_label_seq_id = cat.end_label_seq_id, end_auth_seq_id = cat.end_auth_seq_id, pdbx_end_PDB_ins_code = cat.pdbx_end_PDB_ins_code; var sheet_id = cat.sheet_id; var beg_seq_id = coordinates === 'label' ? beg_label_seq_id : beg_auth_seq_id; var end_seq_id = coordinates === 'label' ? end_label_seq_id : end_auth_seq_id; var sheet_id_key = new Map(); var currentKey = sheetCount + 1; for (var i = 0, _i = cat._rowCount; i < _i; i++) { var id = sheet_id.value(i); var key = void 0; if (sheet_id_key.has(id)) key = sheet_id_key.get(id); else { key = currentKey++; sheet_id_key.set(id, key); } var type = types_1.SecondaryStructureType.create(4 /* Beta */ | 8388608 /* BetaSheet */); var element = { kind: 'sheet', flags: type, sheet_id: id, symmetry: void 0 }; var entry = { startSeqId: beg_seq_id.value(i), startInsCode: pdbx_beg_PDB_ins_code.value(i), endSeqId: end_seq_id.value(i), endInsCode: pdbx_end_PDB_ins_code.value(i), type: type, key: elements.length }; elements[elements.length] = element; var asymId = beg_label_asym_id.value(i); if (map.has(asymId)) { var entries = map.get(asymId); if (entries.has(entry.startSeqId)) { entries.get(entry.startSeqId).push(entry); } else { entries.set(entry.startSeqId, [entry]); } } else { map.set(asymId, new Map([[entry.startSeqId, [entry]]])); } } return; } function assignSecondaryStructureEntry(hierarchy, coordinates, entry, resStart, resEnd, data) { var _a = hierarchy.residues, auth_seq_id = _a.auth_seq_id, label_seq_id = _a.label_seq_id, pdbx_PDB_ins_code = _a.pdbx_PDB_ins_code; var endSeqId = entry.endSeqId, endInsCode = entry.endInsCode, key = entry.key, type = entry.type; var seq_id = coordinates === 'label' ? label_seq_id : auth_seq_id; var rI = resStart; while (rI < resEnd) { var seqNumber = seq_id.value(rI); data.type[rI] = type; data.key[rI] = key; if ((seqNumber > endSeqId) || (seqNumber === endSeqId && pdbx_PDB_ins_code.value(rI) === endInsCode)) { break; } rI++; } } function assignSecondaryStructureRanges(hierarchy, coordinates, map, data) { var chainCount = hierarchy.chainAtomSegments.count; var label_asym_id = hierarchy.chains.label_asym_id; var _a = hierarchy.residues, auth_seq_id = _a.auth_seq_id, label_seq_id = _a.label_seq_id, pdbx_PDB_ins_code = _a.pdbx_PDB_ins_code; var seq_id = coordinates === 'label' ? label_seq_id : auth_seq_id; for (var cI = 0; cI < chainCount; cI++) { var resStart = atomic_1.AtomicHierarchy.chainStartResidueIndex(hierarchy, cI), resEnd = atomic_1.AtomicHierarchy.chainEndResidueIndexExcl(hierarchy, cI); var asymId = label_asym_id.value(cI); if (map.has(asymId)) { var entries = map.get(asymId); for (var rI = resStart; rI < resEnd; rI++) { var seqId = seq_id.value(rI); if (entries.has(seqId)) { var entryList = entries.get(seqId); for (var _b = 0, entryList_1 = entryList; _b < entryList_1.length; _b++) { var entry = entryList_1[_b]; var insCode = pdbx_PDB_ins_code.value(rI); if (entry.startInsCode !== insCode) continue; assignSecondaryStructureEntry(hierarchy, coordinates, entry, rI, resEnd, data); } } } } } } //# sourceMappingURL=secondary-structure.js.map