molstar
Version:
A comprehensive macromolecular library.
106 lines • 5.46 kB
JavaScript
/**
* Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { __awaiter, __generator } from "tslib";
import { ModelSymmetry } from '../../mol-model-formats/structure/property/symmetry';
export var ModelInfo;
(function (ModelInfo) {
function getPreferredAssembly(ctx, model) {
return __awaiter(this, void 0, void 0, function () {
var id, src, json, data, assemblies, _i, assemblies_1, asm, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (model.entryId.length <= 3)
return [2 /*return*/, void 0];
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
id = model.entryId.toLowerCase();
return [4 /*yield*/, ctx.runTask(ctx.fetch({ url: "https://www.ebi.ac.uk/pdbe/api/pdb/entry/summary/" + id }))];
case 2:
src = _a.sent();
json = JSON.parse(src);
data = json && json[id];
assemblies = data[0] && data[0].assemblies;
if (!assemblies || !assemblies.length)
return [2 /*return*/, void 0];
for (_i = 0, assemblies_1 = assemblies; _i < assemblies_1.length; _i++) {
asm = assemblies_1[_i];
if (asm.preferred) {
return [2 /*return*/, asm.assembly_id];
}
}
return [2 /*return*/, void 0];
case 3:
e_1 = _a.sent();
console.warn('getPreferredAssembly', e_1);
return [3 /*break*/, 4];
case 4: return [2 /*return*/];
}
});
});
}
function get(ctx, model, checkPreferred) {
return __awaiter(this, void 0, void 0, function () {
var residueCount, residueOffsets, chainIndex, pref, hetResidues, hetMap, rI, cI, eI, entityType, comp_id, lig, preferredAssemblyId, symmetry;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
residueCount = model.atomicHierarchy.residues._rowCount;
residueOffsets = model.atomicHierarchy.residueAtomSegments.offsets;
chainIndex = model.atomicHierarchy.chainAtomSegments.index;
pref = checkPreferred
? getPreferredAssembly(ctx, model)
: void 0;
hetResidues = [];
hetMap = new Map();
for (rI = 0; rI < residueCount; rI++) {
cI = chainIndex[residueOffsets[rI]];
eI = model.atomicHierarchy.index.getEntityFromChain(cI);
entityType = model.entities.data.type.value(eI);
if (entityType !== 'non-polymer' && entityType !== 'branched')
continue;
comp_id = model.atomicHierarchy.atoms.label_comp_id.value(residueOffsets[rI]);
lig = hetMap.get(comp_id);
if (!lig) {
lig = { name: comp_id, indices: [] };
hetResidues.push(lig);
hetMap.set(comp_id, lig);
}
lig.indices.push(rI);
}
return [4 /*yield*/, pref];
case 1:
preferredAssemblyId = _a.sent();
symmetry = ModelSymmetry.Provider.get(model);
return [2 /*return*/, {
hetResidues: hetResidues,
assemblies: symmetry ? symmetry.assemblies.map(function (a) { return ({ id: a.id, details: a.details, isPreferred: a.id === preferredAssemblyId }); }) : [],
preferredAssemblyId: preferredAssemblyId
}];
}
});
});
}
ModelInfo.get = get;
})(ModelInfo || (ModelInfo = {}));
export var StateElements;
(function (StateElements) {
StateElements["Model"] = "model";
StateElements["ModelProps"] = "model-props";
StateElements["Assembly"] = "assembly";
StateElements["VolumeStreaming"] = "volume-streaming";
StateElements["Sequence"] = "sequence";
StateElements["SequenceVisual"] = "sequence-visual";
StateElements["Het"] = "het";
StateElements["HetVisual"] = "het-visual";
StateElements["Het3DSNFG"] = "het-3dsnfg";
StateElements["Water"] = "water";
StateElements["WaterVisual"] = "water-visual";
StateElements["HetGroupFocus"] = "het-group-focus";
StateElements["HetGroupFocusGroup"] = "het-group-focus-group";
})(StateElements || (StateElements = {}));
//# sourceMappingURL=helpers.js.map