molstar
Version:
A comprehensive macromolecular library.
113 lines • 5.49 kB
JavaScript
"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