@rcsb/rcsb-saguaro-3d
Version:
RCSB Molstar/Saguaro Web App
81 lines (80 loc) • 4.28 kB
JavaScript
;
/*
* Copyright (c) 2021 RCSB PDB and contributors, licensed under MIT, See LICENSE file for more info.
* @author Joan Segura Mora <joan.segura@rcsb.org>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.FlexibleAlignmentTrajectoryPresetProvider = void 0;
const tslib_1 = require("tslib");
const hierarchy_preset_1 = require("molstar/lib/mol-plugin-state/builder/structure/hierarchy-preset");
const param_definition_1 = require("molstar/lib/mol-util/param-definition");
const structure_1 = require("molstar/lib/mol-model/structure");
const FlexibleAlignmentRepresentationPresetProvider_1 = require("./FlexibleAlignmentRepresentationPresetProvider");
const FlexibleAlignmentBuiltIn_1 = require("./FlexibleAlignmentBuiltIn");
exports.FlexibleAlignmentTrajectoryPresetProvider = (0, hierarchy_preset_1.TrajectoryHierarchyPresetProvider)({
id: 'alignment-to-reference',
display: {
name: 'Alignment to Reference'
},
isApplicable: (trajectory, plugin) => true,
params: (trajectory, plugin) => ({
pdb: param_definition_1.ParamDefinition.Value(undefined),
modelIndex: param_definition_1.ParamDefinition.Value(0),
transform: param_definition_1.ParamDefinition.Value(undefined),
targetAlignment: param_definition_1.ParamDefinition.Value(undefined),
}),
apply: (trajectory, params, plugin) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
if (!params.pdb)
return {};
const modelParams = { modelIndex: params.modelIndex || 0 };
const builder = plugin.builders.structure;
const model = yield builder.createModel(trajectory, modelParams);
const modelProperties = yield builder.insertModelProperties(model);
let structure;
let assemblyId = 1;
let entityCheck = false;
do {
const structureParams = {
name: 'assembly',
params: { id: (assemblyId++).toString() }
};
structure = yield builder.createStructure(modelProperties || model, structureParams);
const cell = structure.cell;
if (cell) {
const units = (_b = (_a = structure.cell) === null || _a === void 0 ? void 0 : _a.obj) === null || _b === void 0 ? void 0 : _b.data.units;
const strData = cell.obj.data;
if (units) {
const l = structure_1.StructureElement.Location.create(strData);
for (const unit of units) {
structure_1.StructureElement.Location.set(l, strData, unit, unit.elements[0]);
entityCheck = (structure_1.StructureProperties.chain.label_entity_id(l) == ("entityId" in params.pdb ? params.pdb.entityId : undefined) || structure_1.StructureProperties.chain.label_asym_id(l) == ("instanceId" in params.pdb ? params.pdb.instanceId : undefined));
if (entityCheck)
break;
}
}
}
if (!entityCheck)
plugin.managers.structure.hierarchy.remove([
plugin.managers.structure.hierarchy.current.structures[plugin.managers.structure.hierarchy.current.structures.length - 1]
]);
} while (!entityCheck);
plugin.managers.structure.hierarchy.remove([
plugin.managers.structure.hierarchy.current.structures[plugin.managers.structure.hierarchy.current.structures.length - 1]
]);
structure = yield plugin.state.data.build().to(modelProperties).apply(FlexibleAlignmentBuiltIn_1.FlexibleAlignmentBuiltIn, {
pdb: params.pdb,
transform: params.transform
}).commit();
const structureProperties = yield builder.insertStructureProperties(structure);
const representation = yield plugin.builders.structure.representation.applyPreset(structure, FlexibleAlignmentRepresentationPresetProvider_1.FlexibleAlignmentRepresentationPresetProvider);
//TODO what is the purpose of this return?
return {
model,
modelProperties,
structure,
structureProperties,
representation
};
})
});