@rcsb/rcsb-saguaro-3d
Version:
RCSB Molstar/Saguaro Web App
70 lines (69 loc) • 4.34 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.FlexibleAlignmentRepresentationPresetProvider = void 0;
const tslib_1 = require("tslib");
const representation_preset_1 = require("molstar/lib/mol-plugin-state/builder/structure/representation-preset");
const mol_state_1 = require("molstar/lib/mol-state");
const structure_1 = require("molstar/lib/mol-model/structure");
const builder_1 = require("molstar/lib/mol-script/language/builder");
const uniqid_1 = tslib_1.__importDefault(require("uniqid"));
const plddt_1 = require("molstar/lib/extensions/model-archive/quality-assessment/color/plddt");
var reprBuilder = representation_preset_1.StructureRepresentationPresetProvider.reprBuilder;
const TagDelimiter_1 = require("@rcsb/rcsb-api-tools/lib/RcsbUtils/TagDelimiter");
exports.FlexibleAlignmentRepresentationPresetProvider = (0, representation_preset_1.StructureRepresentationPresetProvider)({
id: 'alignment-to-reference',
display: {
name: 'Alignment to Reference'
},
isApplicable: (structureRef, plugin) => true,
params: (structureRef, plugin) => undefined,
apply: (structureRef, params, plugin) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
const structureCell = mol_state_1.StateObjectRef.resolveAndCheck(plugin.state.data, structureRef);
if (!structureCell)
return {};
const componentMap = {};
const representationMap = {};
if (structureCell.obj)
structureCell.obj.label = "Adios :(";
const structure = structureCell.obj.data;
const l = structure_1.StructureElement.Location.create(structure);
const unit = structure.units[0];
structure_1.StructureElement.Location.set(l, structure, unit, unit.elements[0]);
const entryId = structure_1.StructureProperties.unit.model_entry_id(l);
const alignedEntityId = structure_1.StructureProperties.chain.label_entity_id(l);
const alignedAsymId = structure_1.StructureProperties.chain.label_asym_id(l);
const alignedOperatorName = structure_1.StructureProperties.unit.operator_name(l);
const alignedOperators = structure_1.StructureProperties.unit.pdbx_struct_oper_list_ids(l);
if (alignedOperators.length == 0)
alignedOperators.push("0");
const alignedType = structure_1.StructureProperties.entity.type(l);
const comp = yield plugin.builders.structure.tryCreateComponentFromExpression(structureCell, builder_1.MolScriptBuilder.struct.generator.atomGroups({
'chain-test': builder_1.MolScriptBuilder.core.logic.and([
builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.ammp('label_asym_id'), alignedAsymId]),
builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.acp('operatorName'), alignedOperatorName])
])
}), (0, uniqid_1.default)(`${entryId}${TagDelimiter_1.TagDelimiter.entity}${alignedEntityId}${TagDelimiter_1.TagDelimiter.instance}${alignedAsymId}${TagDelimiter_1.TagDelimiter.assembly}${alignedOperators.join(",")}${TagDelimiter_1.TagDelimiter.assembly}${alignedType}`), {
label: `${entryId}${TagDelimiter_1.TagDelimiter.entity}${alignedEntityId}${TagDelimiter_1.TagDelimiter.instance}${alignedAsymId}${TagDelimiter_1.TagDelimiter.assembly}${alignedOperators.join(",")}${TagDelimiter_1.TagDelimiter.assembly}${alignedType}`
});
componentMap["aligned"] = comp;
//TODO This needs to be called after tryCreateComponentFromExpression
const { update, builder } = reprBuilder(plugin, {
ignoreHydrogens: true,
ignoreLight: false,
quality: "auto"
});
representationMap["aligned"] = builder.buildRepresentation(update, comp, {
color: plddt_1.PLDDTConfidenceColorThemeProvider.isApplicable({ structure }) ? plddt_1.PLDDTConfidenceColorThemeProvider.name : "chain-id",
type: "cartoon"
});
yield update.commit({ revertOnError: false });
return {
components: componentMap,
representations: representationMap
};
})
});