pdbe-molstar-3dbionotes
Version:
Molstar implementation for PDBe
248 lines • 15.2 kB
JavaScript
;
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