UNPKG

@rcsb/rcsb-saguaro-3d

Version:
70 lines (69 loc) 4.34 kB
"use strict"; /* * 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 }; }) });