UNPKG

molstar

Version:

A comprehensive macromolecular library.

232 lines 11.3 kB
"use strict"; /** * 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