molstar
Version:
A comprehensive macromolecular library.
165 lines • 10.5 kB
JavaScript
"use strict";
/**
* Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
* @author Alexander Rose <alexander.rose@weirdbyte.de>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.AssignColorVolume = exports.DownloadDensity = void 0;
var tslib_1 = require("tslib");
var mol_state_1 = require("../../mol-state");
var mol_task_1 = require("../../mol-task");
var file_info_1 = require("../../mol-util/file-info");
var param_definition_1 = require("../../mol-util/param-definition");
var objects_1 = require("../objects");
var assets_1 = require("../../mol-util/assets");
var transforms_1 = require("../transforms");
var DownloadDensity = mol_state_1.StateAction.build({
from: objects_1.PluginStateObject.Root,
display: { name: 'Download Density', description: 'Load a density from the provided source and create its default visual.' },
params: function (a, ctx) {
var options = ctx.dataFormats.options;
return {
source: param_definition_1.ParamDefinition.MappedStatic('pdb-xray', {
'pdb-xray': param_definition_1.ParamDefinition.Group({
provider: param_definition_1.ParamDefinition.Group({
id: param_definition_1.ParamDefinition.Text('1tqn', { label: 'Id' }),
server: param_definition_1.ParamDefinition.Select('rcsb', [['pdbe', 'PDBe'], ['rcsb', 'RCSB PDB']]),
}, { pivot: 'id' }),
type: param_definition_1.ParamDefinition.Select('2fofc', [['2fofc', '2Fo-Fc'], ['fofc', 'Fo-Fc']]),
}, { isFlat: true }),
'pdb-xray-ds': param_definition_1.ParamDefinition.Group({
provider: param_definition_1.ParamDefinition.Group({
id: param_definition_1.ParamDefinition.Text('1tqn', { label: 'Id' }),
server: param_definition_1.ParamDefinition.Select('pdbe', [['pdbe', 'PDBe'], ['rcsb', 'RCSB PDB']]),
}, { pivot: 'id' }),
detail: param_definition_1.ParamDefinition.Numeric(3, { min: 0, max: 6, step: 1 }, { label: 'Detail' }),
}, { isFlat: true }),
'pdb-emd-ds': param_definition_1.ParamDefinition.Group({
provider: param_definition_1.ParamDefinition.Group({
id: param_definition_1.ParamDefinition.Text('emd-8004', { label: 'Id' }),
server: param_definition_1.ParamDefinition.Select('pdbe', [['pdbe', 'PDBe'], ['rcsb', 'RCSB PDB']]),
}, { pivot: 'id' }),
detail: param_definition_1.ParamDefinition.Numeric(3, { min: 0, max: 6, step: 1 }, { label: 'Detail' }),
}, { isFlat: true }),
'url': param_definition_1.ParamDefinition.Group({
url: param_definition_1.ParamDefinition.Url(''),
isBinary: param_definition_1.ParamDefinition.Boolean(false),
format: param_definition_1.ParamDefinition.Select('auto', options),
}, { isFlat: true })
}, {
options: [
['pdb-xray', 'PDB X-ray maps'],
['pdb-emd-ds', 'PDB EMD Density Server'],
['pdb-xray-ds', 'PDB X-ray Density Server'],
['url', 'URL']
]
})
};
}
})(function (_a, plugin) {
var params = _a.params;
return mol_task_1.Task.create('Download Density', function (taskCtx) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var src, downloadParams, provider, data, entryId, volumes;
var _a, _b;
return (0, tslib_1.__generator)(this, function (_c) {
switch (_c.label) {
case 0:
src = params.source;
switch (src.name) {
case 'url':
downloadParams = src.params;
break;
case 'pdb-xray':
downloadParams = src.params.provider.server === 'pdbe' ? {
url: assets_1.Asset.Url(src.params.type === '2fofc'
? "http://www.ebi.ac.uk/pdbe/coordinates/files/" + src.params.provider.id.toLowerCase() + ".ccp4"
: "http://www.ebi.ac.uk/pdbe/coordinates/files/" + src.params.provider.id.toLowerCase() + "_diff.ccp4"),
isBinary: true,
label: "PDBe X-ray map: " + src.params.provider.id
} : {
url: assets_1.Asset.Url(src.params.type === '2fofc'
? "https://edmaps.rcsb.org/maps/" + src.params.provider.id.toLowerCase() + "_2fofc.dsn6"
: "https://edmaps.rcsb.org/maps/" + src.params.provider.id.toLowerCase() + "_fofc.dsn6"),
isBinary: true,
label: "RCSB X-ray map: " + src.params.provider.id
};
break;
case 'pdb-emd-ds':
downloadParams = src.params.provider.server === 'pdbe' ? {
url: assets_1.Asset.Url("https://www.ebi.ac.uk/pdbe/densities/emd/" + src.params.provider.id.toLowerCase() + "/cell?detail=" + src.params.detail),
isBinary: true,
label: "PDBe EMD Density Server: " + src.params.provider.id
} : {
url: assets_1.Asset.Url("https://maps.rcsb.org/em/" + src.params.provider.id.toLowerCase() + "/cell?detail=" + src.params.detail),
isBinary: true,
label: "RCSB PDB EMD Density Server: " + src.params.provider.id
};
break;
case 'pdb-xray-ds':
downloadParams = src.params.provider.server === 'pdbe' ? {
url: assets_1.Asset.Url("https://www.ebi.ac.uk/pdbe/densities/x-ray/" + src.params.provider.id.toLowerCase() + "/cell?detail=" + src.params.detail),
isBinary: true,
label: "PDBe X-ray Density Server: " + src.params.provider.id
} : {
url: assets_1.Asset.Url("https://maps.rcsb.org/x-ray/" + src.params.provider.id.toLowerCase() + "/cell?detail=" + src.params.detail),
isBinary: true,
label: "RCSB PDB X-ray Density Server: " + src.params.provider.id
};
break;
default: throw new Error(src.name + " not supported.");
}
return [4 /*yield*/, plugin.builders.data.download(downloadParams)];
case 1:
data = _c.sent();
entryId = undefined;
switch (src.name) {
case 'url':
downloadParams = src.params;
provider = src.params.format === 'auto' ? plugin.dataFormats.auto((0, file_info_1.getFileInfo)(assets_1.Asset.getUrl(downloadParams.url)), (_a = data.cell) === null || _a === void 0 ? void 0 : _a.obj) : plugin.dataFormats.get(src.params.format);
break;
case 'pdb-xray':
entryId = src.params.provider.id;
provider = src.params.provider.server === 'pdbe'
? plugin.dataFormats.get('ccp4')
: plugin.dataFormats.get('dsn6');
break;
case 'pdb-emd-ds':
case 'pdb-xray-ds':
entryId = src.params.provider.id;
provider = plugin.dataFormats.get('dscif');
break;
default: throw new Error(src.name + " not supported.");
}
if (!provider) {
plugin.log.warn('DownloadDensity: Format provider not found.');
return [2 /*return*/];
}
return [4 /*yield*/, provider.parse(plugin, data, { entryId: entryId })];
case 2:
volumes = _c.sent();
return [4 /*yield*/, ((_b = provider.visuals) === null || _b === void 0 ? void 0 : _b.call(provider, plugin, volumes))];
case 3:
_c.sent();
return [2 /*return*/];
}
});
}); });
});
exports.DownloadDensity = DownloadDensity;
exports.AssignColorVolume = mol_state_1.StateAction.build({
display: { name: 'Assign Volume Colors', description: 'Assigns another volume to be available for coloring.' },
from: objects_1.PluginStateObject.Volume.Data,
isApplicable: function (a) { return !a.data.colorVolume; },
params: function (a, plugin) {
var cells = plugin.state.data.select(mol_state_1.StateSelection.Generators.root.subtree().ofType(objects_1.PluginStateObject.Volume.Data).filter(function (cell) { var _a; return !!cell.obj && !((_a = cell.obj) === null || _a === void 0 ? void 0 : _a.data.colorVolume) && cell.obj !== a; }));
if (cells.length === 0)
return { ref: param_definition_1.ParamDefinition.Text('', { isHidden: true, label: 'Volume' }) };
return { ref: param_definition_1.ParamDefinition.Select(cells[0].transform.ref, cells.map(function (c) { return [c.transform.ref, c.obj.label]; }), { label: 'Volume' }) };
}
})(function (_a, plugin) {
var ref = _a.ref, params = _a.params, state = _a.state;
return plugin.build().to(ref).apply(transforms_1.StateTransforms.Volume.AssignColorVolume, { ref: params.ref }, { dependsOn: [params.ref] }).commit();
});
//# sourceMappingURL=volume.js.map