UNPKG

molstar

Version:

A comprehensive macromolecular library.

113 lines 5.49 kB
"use strict"; /** * Copyright (c) 2018-2019 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.StructureSequence = void 0; var db_1 = require("../../../../mol-data/db"); var sequence_1 = require("../../../sequence"); var StructureSequence; (function (StructureSequence) { var Empty = { byEntityKey: {}, sequences: [] }; function merge() { var entitySeqs = []; for (var _i = 0; _i < arguments.length; _i++) { entitySeqs[_i] = arguments[_i]; } var sequences = []; var byEntityKey = {}; for (var i = 0, il = entitySeqs.length; i < il; ++i) { sequences.push.apply(sequences, entitySeqs[i].sequences); Object.assign(byEntityKey, entitySeqs[i].byEntityKey); } return { sequences: sequences, byEntityKey: byEntityKey }; } function fromHierarchy(entities, atomicHierarchy, coarseHierarchy) { var atomic = fromAtomicHierarchy(entities, atomicHierarchy); var coarse = coarseHierarchy.isDefined ? fromCoarseHierarchy(entities, coarseHierarchy) : Empty; return merge(atomic, coarse); } StructureSequence.fromHierarchy = fromHierarchy; function fromAtomicHierarchy(entities, hierarchy) { var label_comp_id = hierarchy.atoms.label_comp_id; var label_seq_id = hierarchy.residues.label_seq_id; var chainAtomSegments = hierarchy.chainAtomSegments, residueAtomSegments = hierarchy.residueAtomSegments; var count = chainAtomSegments.count, offsets = chainAtomSegments.offsets; var byEntityKey = {}; var sequences = []; // check if chain segments are empty if (count === 1 && offsets[0] === 0 && offsets[1] === 0) { return { byEntityKey: byEntityKey, sequences: sequences }; } for (var cI = 0, _cI = hierarchy.chains._rowCount; cI < _cI; cI++) { var entityKey = hierarchy.index.getEntityFromChain(cI); // Only for polymers, trying to mirror _entity_poly_seq if (byEntityKey[entityKey] !== void 0 || entities.data.type.value(entityKey) !== 'polymer') continue; var start = cI; cI++; while (cI < _cI && entityKey === hierarchy.index.getEntityFromChain(cI) && entities.data.type.value(entityKey) !== 'polymer') { cI++; } cI--; var rStart = residueAtomSegments.index[offsets[start]]; var rEnd = residueAtomSegments.index[offsets[cI + 1] - 1] + 1; var seqId = db_1.Column.window(label_seq_id, rStart, rEnd); var _compId = []; for (var rI = rStart; rI < rEnd; ++rI) { _compId.push(label_comp_id.value(residueAtomSegments.offsets[rI])); } var compId = db_1.Column.ofStringArray(_compId); byEntityKey[entityKey] = { entityId: entities.data.id.value(entityKey), sequence: sequence_1.Sequence.ofResidueNames(compId, seqId) }; sequences.push(byEntityKey[entityKey]); } return { byEntityKey: byEntityKey, sequences: sequences }; } StructureSequence.fromAtomicHierarchy = fromAtomicHierarchy; function fromCoarseHierarchy(entities, hierarchy) { var spheres = fromCoarseElements(entities, hierarchy.spheres); var gaussians = fromCoarseElements(entities, hierarchy.gaussians); return merge(spheres, gaussians); } StructureSequence.fromCoarseHierarchy = fromCoarseHierarchy; function fromCoarseElements(entities, elements) { var chainElementSegments = elements.chainElementSegments, seq_id_begin = elements.seq_id_begin, seq_id_end = elements.seq_id_end; var count = chainElementSegments.count, offsets = chainElementSegments.offsets; var byEntityKey = {}; var sequences = []; // check if chain segments are empty if (count === 1 && offsets[0] === 0 && offsets[1] === 0) { return { byEntityKey: byEntityKey, sequences: sequences }; } for (var cI = 0, _cI = count; cI < _cI; cI++) { var eK = elements.getEntityFromChain(cI); if (byEntityKey[eK] !== void 0) continue; var start = cI; cI++; while (cI < _cI && eK === elements.getEntityFromChain(cI)) { cI++; } cI--; var eStart = offsets[start]; var eEnd = offsets[cI + 1] - 1; var seqIdBegin = db_1.Column.window(seq_id_begin, eStart, eEnd); var seqIdEnd = db_1.Column.window(seq_id_end, eStart, eEnd); byEntityKey[eK] = { entityId: entities.data.id.value(eK), sequence: sequence_1.Sequence.ofSequenceRanges(seqIdBegin, seqIdEnd) }; sequences.push(byEntityKey[eK]); } return { byEntityKey: byEntityKey, sequences: sequences }; } StructureSequence.fromCoarseElements = fromCoarseElements; })(StructureSequence || (StructureSequence = {})); exports.StructureSequence = StructureSequence; //# sourceMappingURL=sequence.js.map