molstar
Version:
A comprehensive macromolecular library.
232 lines • 11.3 kB
JavaScript
/**
* Copyright (c) 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.G3DFormat = exports.LoadG3D = exports.G3DTrajectory = exports.G3DHeaderFromUrl = exports.G3DHeaderFromFile = exports.G3dHeaderObject = exports.G3dProvider = void 0;
var tslib_1 = require("tslib");
var trajectory_1 = require("../../mol-plugin-state/formats/trajectory");
var objects_1 = require("../../mol-plugin-state/objects");
var behavior_1 = require("../../mol-plugin/behavior");
var base_1 = require("../../mol-script/runtime/query/base");
var mol_state_1 = require("../../mol-state");
var mol_task_1 = require("../../mol-task");
var param_definition_1 = require("../../mol-util/param-definition");
var data_1 = require("./data");
var model_1 = require("./model");
var transforms_1 = require("../../mol-plugin-state/transforms");
var structure_representation_params_1 = require("../../mol-plugin-state/helpers/structure-representation-params");
var string_1 = require("../../mol-util/string");
var object_1 = require("../../mol-util/object");
exports.G3dProvider = {
label: 'G3D',
description: 'G3D',
category: trajectory_1.TrajectoryFormatCategory,
binaryExtensions: ['g3d'],
parse: function (plugin, data) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var trajectory;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, plugin.state.data.build()
.to(data)
.apply(exports.G3DHeaderFromFile, {}, { state: { isGhost: true } })
.apply(exports.G3DTrajectory)
.commit()];
case 1:
trajectory = _a.sent();
return [2 /*return*/, { trajectory: trajectory }];
}
});
}); },
visuals: defaultStructure
};
function defaultStructure(plugin, data) {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var builder, model, structure, info, components, repr, _i, _a, h;
return (0, tslib_1.__generator)(this, function (_b) {
switch (_b.label) {
case 0:
builder = plugin.builders.structure;
return [4 /*yield*/, builder.createModel(data.trajectory)];
case 1:
model = _b.sent();
if (!model)
return [2 /*return*/];
return [4 /*yield*/, builder.createStructure(model)];
case 2:
structure = _b.sent();
info = model_1.G3dInfoDataProperty.get(model.data);
if (!info)
return [2 /*return*/];
components = plugin.build().to(structure);
repr = (0, structure_representation_params_1.createStructureRepresentationParams)(plugin, void 0, {
type: 'cartoon',
color: 'polymer-index',
size: 'uniform',
sizeParams: { value: 0.25 }
});
for (_i = 0, _a = info.haplotypes; _i < _a.length; _i++) {
h = _a[_i];
components
.apply(transforms_1.StateTransforms.Model.StructureSelectionFromExpression, { expression: (0, model_1.g3dHaplotypeQuery)(h), label: (0, string_1.stringToWords)(h) })
.apply(transforms_1.StateTransforms.Representation.StructureRepresentation3D, repr);
}
return [4 /*yield*/, components.commit()];
case 3:
_b.sent();
return [2 /*return*/];
}
});
});
}
var G3dHeaderObject = /** @class */ (function (_super) {
(0, tslib_1.__extends)(G3dHeaderObject, _super);
function G3dHeaderObject() {
return _super !== null && _super.apply(this, arguments) || this;
}
return G3dHeaderObject;
}(objects_1.PluginStateObject.Create({ name: 'G3D Header', typeClass: 'Data' })));
exports.G3dHeaderObject = G3dHeaderObject;
exports.G3DHeaderFromFile = objects_1.PluginStateTransform.BuiltIn({
name: 'g3d-header-from-file',
display: { name: 'G3D Header', description: 'Parse G3D Header' },
from: objects_1.PluginStateObject.Data.Binary,
to: G3dHeaderObject
})({
apply: function (_a, plugin) {
var _this = this;
var a = _a.a;
return mol_task_1.Task.create('Parse G3D', function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var header;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, data_1.getG3dHeader)(plugin, a.data)];
case 1:
header = _a.sent();
return [2 /*return*/, new G3dHeaderObject({ header: header, urlOrData: a.data, cache: {} }, { label: header.name, description: header.genome })];
}
});
}); });
}
});
exports.G3DHeaderFromUrl = objects_1.PluginStateTransform.BuiltIn({
name: 'g3d-header-from-url',
display: { name: 'G3D Header', description: 'Parse G3D Header' },
params: { url: param_definition_1.ParamDefinition.Text('') },
from: objects_1.PluginStateObject.Root,
to: G3dHeaderObject
})({
apply: function (_a, plugin) {
var _this = this;
var params = _a.params;
return mol_task_1.Task.create('Parse G3D', function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var header;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, (0, data_1.getG3dHeader)(plugin, params.url)];
case 1:
header = _a.sent();
return [2 /*return*/, new G3dHeaderObject({ header: header, urlOrData: params.url, cache: {} }, { label: header.name, description: header.genome })];
}
});
}); });
}
});
exports.G3DTrajectory = objects_1.PluginStateTransform.BuiltIn({
name: 'g3d-trajecotry',
display: { name: 'G3D Trajectory', description: 'Create G3D Trajectory' },
params: function (a) {
if (!a)
return { resolution: param_definition_1.ParamDefinition.Numeric(200000) };
var rs = a.data.header.resolutions;
return {
resolution: param_definition_1.ParamDefinition.Select(rs[rs.length - 1], rs.map(function (r) { return [r, '' + r]; }))
};
},
from: G3dHeaderObject,
to: objects_1.PluginStateObject.Molecule.Trajectory
})({
apply: function (_a, plugin) {
var _this = this;
var a = _a.a, params = _a.params;
return mol_task_1.Task.create('G3D Trajectory', function (ctx) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
var data, traj;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
if (a.data.cache[params.resolution]) {
return [2 /*return*/, new objects_1.PluginStateObject.Molecule.Trajectory(a.data.cache[params.resolution], { label: a.label, description: a.description })];
}
return [4 /*yield*/, (0, data_1.getG3dDataBlock)(plugin, a.data.header, a.data.urlOrData, params.resolution)];
case 1:
data = _a.sent();
return [4 /*yield*/, (0, model_1.trajectoryFromG3D)(data).runInContext(ctx)];
case 2:
traj = _a.sent();
a.data.cache[params.resolution] = traj;
return [2 /*return*/, new objects_1.PluginStateObject.Molecule.Trajectory(traj, { label: a.label, description: a.description })];
}
});
}); });
}
});
exports.LoadG3D = mol_state_1.StateAction.build({
display: { name: 'Load Genome 3D (G3D)', description: 'Load G3D file from the specified URL.' },
from: objects_1.PluginStateObject.Root,
params: { url: param_definition_1.ParamDefinition.Text('') }
})(function (_a, ctx) {
var params = _a.params, state = _a.state;
return mol_task_1.Task.create('Genome3D', function (taskCtx) {
return state.transaction(function () { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () {
var trajectory;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
if (params.url.trim().length === 0) {
throw new Error('Specify URL');
}
ctx.behaviors.layout.leftPanelTabName.next('data');
return [4 /*yield*/, state.build().toRoot()
.apply(exports.G3DHeaderFromUrl, { url: params.url })
.apply(exports.G3DTrajectory)
.commit()];
case 1:
trajectory = _a.sent();
return [4 /*yield*/, defaultStructure(ctx, { trajectory: trajectory })];
case 2:
_a.sent();
return [2 /*return*/];
}
});
}); }).runInContext(taskCtx);
});
});
exports.G3DFormat = behavior_1.PluginBehavior.create({
name: 'g3d',
category: 'misc',
display: {
name: 'G3D',
description: 'G3D Format Support'
},
ctor: /** @class */ (function (_super) {
(0, tslib_1.__extends)(class_1, _super);
function class_1() {
return _super !== null && _super.apply(this, arguments) || this;
}
class_1.prototype.register = function () {
this.ctx.state.data.actions.add(exports.LoadG3D);
(0, object_1.objectForEach)(model_1.G3dSymbols, function (s) { return base_1.DefaultQueryRuntimeTable.addSymbol(s); });
this.ctx.managers.lociLabels.addProvider(model_1.G3dLabelProvider);
};
class_1.prototype.unregister = function () {
this.ctx.state.data.actions.remove(exports.LoadG3D);
(0, object_1.objectForEach)(model_1.G3dSymbols, function (s) { return base_1.DefaultQueryRuntimeTable.removeSymbol(s); });
this.ctx.managers.lociLabels.removeProvider(model_1.G3dLabelProvider);
};
return class_1;
}(behavior_1.PluginBehavior.Handler))
});
//# sourceMappingURL=format.js.map
;