UNPKG

pdbe-molstar-3dbionotes

Version:
248 lines 15.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModelInfo = exports.QueryHelper = exports.LigandView = exports.PDBeVolumes = void 0; var tslib_1 = require("tslib"); var commands_1 = require("Molstar/mol-plugin/commands"); var builder_1 = require("Molstar/mol-script/language/builder"); var mol_state_1 = require("Molstar/mol-state"); var structure_1 = require("Molstar/mol-model/structure"); var transformers_1 = require("Molstar/mol-plugin/behavior/dynamic/volume-streaming/transformers"); // import { VolumeStreaming } from '../../mol-plugin/behavior/dynamic/volume-streaming/behavior'; var compiler_1 = require("Molstar/mol-script/runtime/query/compiler"); var PDBeVolumes; (function (PDBeVolumes) { function mapParams(defaultParams, mapParams, ref) { var pdbeParams = tslib_1.__assign({}, defaultParams); pdbeParams.options.behaviorRef = 'volume-streaming' + '' + Math.floor(Math.random() * Math.floor(100)); pdbeParams.options.emContourProvider = 'pdbe'; pdbeParams.options.serverUrl = 'https://www.ebi.ac.uk/pdbe/densities'; pdbeParams.options.channelParams['em'] = { opacity: (mapParams && mapParams.em && mapParams.em.opacity) ? mapParams.em.opacity : 0.49, wireframe: (mapParams && mapParams.em && mapParams.em.wireframe) ? mapParams.em.wireframe : false }; pdbeParams.options.channelParams['2fo-fc'] = { opacity: (mapParams && mapParams['2fo-fc'] && mapParams['2fo-fc'].opacity) ? mapParams['2fo-fc'].opacity : 0.49, wireframe: (mapParams && mapParams['2fo-fc'] && mapParams['2fo-fc'].wireframe) ? mapParams['2fo-fc'].wireframe : false }; pdbeParams.options.channelParams['fo-fc(+ve)'] = { opacity: (mapParams && mapParams['fo-fc(+ve)'] && mapParams['fo-fc(+ve)'].opacity) ? mapParams['fo-fc(+ve)'].opacity : 0.3, wireframe: (mapParams && mapParams['fo-fc(+ve)'] && mapParams['fo-fc(+ve)'].wireframe) ? mapParams['fo-fc(+ve)'].wireframe : true }; pdbeParams.options.channelParams['fo-fc(-ve)'] = { opacity: (mapParams && mapParams['fo-fc(-ve)'] && mapParams['fo-fc(-ve)'].opacity) ? mapParams['fo-fc(-ve)'].opacity : 0.3, wireframe: (mapParams && mapParams['fo-fc(-ve)'] && mapParams['fo-fc(-ve)'].wireframe) ? mapParams['fo-fc(-ve)'].wireframe : true }; return pdbeParams; } PDBeVolumes.mapParams = mapParams; function displayUsibilityMessage(plugin) { commands_1.PluginCommands.Toast.Show(plugin, { title: 'Volume', message: 'Streaming enabled, click on a residue or an atom to view the data.', key: 'toast-1', timeoutMs: 7000 }); } PDBeVolumes.displayUsibilityMessage = displayUsibilityMessage; function toggle(plugin) { var state = plugin.state.data; var streamingState = state.select(mol_state_1.StateSelection.Generators.ofTransformer(transformers_1.CreateVolumeStreamingInfo))[0]; if (streamingState) { commands_1.PluginCommands.State.ToggleVisibility(plugin, { state: state, ref: streamingState.transform.ref }); return; } } PDBeVolumes.toggle = toggle; })(PDBeVolumes = exports.PDBeVolumes || (exports.PDBeVolumes = {})); var LigandView; (function (LigandView) { function query(ligandViewParams) { var atomGroupsParams = { 'group-by': builder_1.MolScriptBuilder.core.str.concat([builder_1.MolScriptBuilder.struct.atomProperty.core.operatorName(), builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.residueKey()]) }; // Residue Param var residueParam; if (ligandViewParams.auth_seq_id) { residueParam = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.auth_seq_id(), ligandViewParams.auth_seq_id]); } else if (ligandViewParams.label_comp_id) { residueParam = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.label_comp_id(), ligandViewParams.label_comp_id]); } if (residueParam) atomGroupsParams['residue-test'] = residueParam; // Chain Param if (ligandViewParams.auth_asym_id) { atomGroupsParams['chain-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.auth_asym_id(), ligandViewParams.auth_asym_id]); } else if (ligandViewParams.struct_asym_id) { atomGroupsParams['chain-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.label_asym_id(), ligandViewParams.struct_asym_id]); } // Construct core query var core = builder_1.MolScriptBuilder.struct.filter.first([ builder_1.MolScriptBuilder.struct.generator.atomGroups(atomGroupsParams) ]); // Construct surroundings query var surroundings = builder_1.MolScriptBuilder.struct.modifier.includeSurroundings({ 0: core, radius: 5, 'as-whole-residues': true }); return { core: core, surroundings: surroundings }; } LigandView.query = query; function branchedQuery(params) { var entityObjArray = []; params.atom_site.forEach(function (param) { var qEntities = { 'group-by': builder_1.MolScriptBuilder.core.str.concat([builder_1.MolScriptBuilder.struct.atomProperty.core.operatorName(), builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.residueKey()]), 'residue-test': builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.auth_seq_id(), param.auth_seq_id]) }; entityObjArray.push(qEntities); }); var atmGroupsQueries = []; entityObjArray.forEach(function (entityObj) { atmGroupsQueries.push(builder_1.MolScriptBuilder.struct.generator.atomGroups(entityObj)); }); var core = builder_1.MolScriptBuilder.struct.modifier.union([ atmGroupsQueries.length === 1 ? atmGroupsQueries[0] // Need to union before merge for fast performance : builder_1.MolScriptBuilder.struct.combinator.merge(atmGroupsQueries.map(function (q) { return builder_1.MolScriptBuilder.struct.modifier.union([q]); })) ]); // Construct surroundings query var surroundings = builder_1.MolScriptBuilder.struct.modifier.includeSurroundings({ 0: core, radius: 5, 'as-whole-residues': true }); return { core: core, surroundings: surroundings }; } LigandView.branchedQuery = branchedQuery; })(LigandView = exports.LigandView || (exports.LigandView = {})); var QueryHelper; (function (QueryHelper) { function getQueryObject(params) { var selections = []; params.forEach(function (param) { var selection = {}; // entity if (param.entity_id) selection['entity-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.label_entity_id(), param.entity_id]); // chain if (param.struct_asym_id) { selection['chain-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.label_asym_id(), param.struct_asym_id]); } else if (param.auth_asym_id) { selection['chain-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.auth_asym_id(), param.auth_asym_id]); } // residues if (param.label_comp_id) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.label_comp_id(), param.label_comp_id]); } else if (param.residue_number) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.label_seq_id(), param.residue_number]); } else if ((param.start_residue_number && param.end_residue_number) && (param.end_residue_number > param.start_residue_number)) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.inRange([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.label_seq_id(), param.start_residue_number, param.end_residue_number]); } else if ((param.start_residue_number && param.end_residue_number) && (param.end_residue_number === param.start_residue_number)) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.label_seq_id(), param.start_residue_number]); } else if (param.auth_seq_id) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.auth_seq_id(), param.auth_seq_id]); } else if (param.auth_residue_number && !param.auth_ins_code_id) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.auth_seq_id(), param.auth_residue_number]); } else if (param.auth_residue_number && param.auth_ins_code_id) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.eq([ builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.authResidueId(), builder_1.MolScriptBuilder.struct.type.authResidueId([undefined, param.auth_residue_number, param.auth_ins_code_id]) ]); } else if ((param.start_auth_residue_number && param.end_auth_residue_number) && (param.end_auth_residue_number > param.start_auth_residue_number)) { if (param.start_auth_ins_code_id && param.end_auth_ins_code_id) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.inRange([ builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.authResidueId(), builder_1.MolScriptBuilder.struct.type.authResidueId([undefined, param.start_auth_residue_number, param.start_auth_ins_code_id]), builder_1.MolScriptBuilder.struct.type.authResidueId([undefined, param.start_auth_residue_number, param.start_auth_ins_code_id]) ]); } else { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.inRange([ builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.auth_seq_id(), param.start_auth_residue_number, param.end_auth_residue_number ]); } } else if ((param.start_auth_residue_number && param.end_auth_residue_number) && (param.end_auth_residue_number === param.start_auth_residue_number)) { if (param.start_auth_ins_code_id) { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.eq([ builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.authResidueId(), builder_1.MolScriptBuilder.struct.type.authResidueId([undefined, param.start_auth_residue_number, param.start_auth_ins_code_id]) ]); } else { selection['residue-test'] = builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.struct.atomProperty.macromolecular.auth_seq_id(), param.start_auth_residue_number]); } } // atoms if (param.atoms) { var atomsArr_1 = []; param.atoms.forEach(function (atom) { atomsArr_1.push(builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.ammp('label_atom_id'), atom])); }); selection['atom-test'] = builder_1.MolScriptBuilder.core.logic.or(atomsArr_1); } selections.push(selection); }); var atmGroupsQueries = []; selections.forEach(function (selection) { atmGroupsQueries.push(builder_1.MolScriptBuilder.struct.generator.atomGroups(selection)); }); return builder_1.MolScriptBuilder.struct.modifier.union([ atmGroupsQueries.length === 1 ? atmGroupsQueries[0] : builder_1.MolScriptBuilder.struct.combinator.merge(atmGroupsQueries.map(function (q) { return builder_1.MolScriptBuilder.struct.modifier.union([q]); })) ]); } QueryHelper.getQueryObject = getQueryObject; function getInteractivityLoci(params, contextData) { var query = compiler_1.compile(QueryHelper.getQueryObject(params)); var sel = query(new structure_1.QueryContext(contextData)); return structure_1.StructureSelection.toLociWithSourceUnits(sel); } QueryHelper.getInteractivityLoci = getInteractivityLoci; function getHetLoci(queryExp, contextData) { var query = compiler_1.compile(queryExp); var sel = query(new structure_1.QueryContext(contextData)); return structure_1.StructureSelection.toLociWithSourceUnits(sel); } QueryHelper.getHetLoci = getHetLoci; })(QueryHelper = exports.QueryHelper || (exports.QueryHelper = {})); var ModelInfo; (function (ModelInfo) { function get(model) { return tslib_1.__awaiter(this, void 0, void 0, function () { var residueCount, residueOffsets, chainIndex, hetNames, rI, cI, eI, entityType, comp_id; return tslib_1.__generator(this, function (_a) { residueCount = model.atomicHierarchy.residues._rowCount; residueOffsets = model.atomicHierarchy.residueAtomSegments.offsets; chainIndex = model.atomicHierarchy.chainAtomSegments.index; hetNames = []; 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]); if (hetNames.indexOf(comp_id) === -1) hetNames.push(comp_id); } return [2 /*return*/, { hetNames: hetNames }]; }); }); } ModelInfo.get = get; })(ModelInfo = exports.ModelInfo || (exports.ModelInfo = {})); //# sourceMappingURL=helpers.js.map