UNPKG

molstar

Version:

A comprehensive macromolecular library.

215 lines 10.9 kB
"use strict"; /** * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.G3dLabelProvider = exports.g3dRegionQuery = exports.g3dChromosomeQuery = exports.g3dHaplotypeQuery = exports.G3dInfoDataProperty = exports.G3dSymbols = exports.trajectoryFromG3D = void 0; var tslib_1 = require("tslib"); var db_1 = require("../../mol-data/db"); var int_1 = require("../../mol-data/int"); var linear_algebra_1 = require("../../mol-math/linear-algebra"); var parser_1 = require("../../mol-model-formats/structure/basic/parser"); var schema_1 = require("../../mol-model-formats/structure/basic/schema"); var entity_1 = require("../../mol-model-formats/structure/common/entity"); var loci_1 = require("../../mol-model/loci"); var structure_1 = require("../../mol-model/structure"); var builder_1 = require("../../mol-script/language/builder"); var symbol_1 = require("../../mol-script/language/symbol"); var type_1 = require("../../mol-script/language/type"); var base_1 = require("../../mol-script/runtime/query/base"); var mol_task_1 = require("../../mol-task"); var object_1 = require("../../mol-util/object"); var property_1 = require("../../mol-model-formats/structure/common/property"); function getColumns(block) { var data = block.data; var size = 0; (0, object_1.objectForEach)(data, function (h) { return (0, object_1.objectForEach)(h, function (g) { return size += g.start.length; }); }); var normalized = { entity_id: new Array(size), chromosome: new Array(size), seq_id_begin: new Int32Array(size), seq_id_end: new Int32Array(size), start: new Int32Array(size), x: new Float32Array(size), y: new Float32Array(size), z: new Float32Array(size), r: new Float32Array(size), haplotype: new Array(size) }; var p = [(0, linear_algebra_1.Vec3)(), (0, linear_algebra_1.Vec3)(), (0, linear_algebra_1.Vec3)()]; var o = 0; (0, object_1.objectForEach)(data, function (hs, h) { (0, object_1.objectForEach)(hs, function (chs, ch) { var entity_id = ch + "-" + h; var l = chs.start.length; if (l === 0) return; var x = chs.x[0]; var y = chs.y[0]; var z = chs.z[0]; linear_algebra_1.Vec3.set(p[0], x, y, z); linear_algebra_1.Vec3.set(p[2], x, y, z); for (var i = 0; i < l; i++) { normalized.entity_id[o] = entity_id; normalized.chromosome[o] = ch; normalized.start[o] = chs.start[i]; normalized.seq_id_begin[o] = o; normalized.seq_id_end[o] = o; x = chs.x[i]; y = chs.y[i]; z = chs.z[i]; linear_algebra_1.Vec3.set(p[1], x, y, z); if (i + 1 < l) linear_algebra_1.Vec3.set(p[2], chs.x[i + 1], chs.y[i + 1], chs.z[i + 1]); else linear_algebra_1.Vec3.set(p[2], x, y, z); normalized.x[o] = x; normalized.y[o] = y; normalized.z[o] = z; normalized.r[o] = 2 / 3 * Math.min(linear_algebra_1.Vec3.distance(p[0], p[1]), linear_algebra_1.Vec3.distance(p[1], p[2])); normalized.haplotype[o] = h; var _p = p[0]; p[0] = p[1]; p[1] = _p; o++; } if (l === 1) { normalized.r[o - 1] = 1; } }); }); return normalized; } function getTraj(ctx, data) { return (0, tslib_1.__awaiter)(this, void 0, void 0, function () { var normalized, rowCount, entityIds, entityBuilder, eName, i, e, entityId, ihm_sphere_obj_site, basic, models; return (0, tslib_1.__generator)(this, function (_a) { switch (_a.label) { case 0: normalized = getColumns(data); rowCount = normalized.seq_id_begin.length; entityIds = new Array(rowCount); entityBuilder = new entity_1.EntityBuilder(); eName = { customName: '' }; for (i = 0; i < rowCount; ++i) { e = normalized.entity_id[i]; eName.customName = e; entityId = entityBuilder.getEntityId(e, 7 /* DNA */, e, eName); entityIds[i] = entityId; } ihm_sphere_obj_site = db_1.Table.ofPartialColumns(schema_1.BasicSchema.ihm_sphere_obj_site, { id: db_1.Column.range(0, rowCount), entity_id: db_1.Column.ofStringArray(entityIds), seq_id_begin: db_1.Column.ofIntArray(normalized.seq_id_begin), seq_id_end: db_1.Column.ofIntArray(normalized.seq_id_end), asym_id: db_1.Column.ofStringArray(normalized.chromosome), Cartn_x: db_1.Column.ofFloatArray(normalized.x), Cartn_y: db_1.Column.ofFloatArray(normalized.y), Cartn_z: db_1.Column.ofFloatArray(normalized.z), object_radius: db_1.Column.ofFloatArray(normalized.r), rmsf: db_1.Column.ofConst(0, rowCount, db_1.Column.Schema.float), model_id: db_1.Column.ofConst(1, rowCount, db_1.Column.Schema.int), }, rowCount); basic = (0, schema_1.createBasic)({ entity: entityBuilder.getEntityTable(), ihm_model_list: db_1.Table.ofPartialColumns(schema_1.BasicSchema.ihm_model_list, { model_id: db_1.Column.ofIntArray([1]), model_name: db_1.Column.ofStringArray(['G3D Model']), }, 1), ihm_sphere_obj_site: ihm_sphere_obj_site }); return [4 /*yield*/, (0, parser_1.createModels)(basic, { kind: 'g3d', name: 'G3D', data: data }, ctx)]; case 1: models = _a.sent(); exports.G3dInfoDataProperty.set(models.representative, { haplotypes: Object.keys(data.data), haplotype: normalized.haplotype, resolution: data.resolution, start: normalized.start, chroms: normalized.chromosome, }); return [2 /*return*/, models]; } }); }); } function trajectoryFromG3D(data) { var _this = this; return mol_task_1.Task.create('Parse G3D', function (ctx) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { return [2 /*return*/, getTraj(ctx, data)]; }); }); }); } exports.trajectoryFromG3D = trajectoryFromG3D; exports.G3dSymbols = { haplotype: base_1.QuerySymbolRuntime.Dynamic((0, symbol_1.CustomPropSymbol)('g3d', 'haplotype', type_1.Type.Str), function (ctx) { if (structure_1.Unit.isAtomic(ctx.element.unit)) return ''; var info = exports.G3dInfoDataProperty.get(ctx.element.unit.model); if (!info) return ''; var seqId = ctx.element.unit.model.coarseHierarchy.spheres.seq_id_begin.value(ctx.element.element); return info.haplotype[seqId] || ''; }), chromosome: base_1.QuerySymbolRuntime.Dynamic((0, symbol_1.CustomPropSymbol)('g3d', 'chromosome', type_1.Type.Str), function (ctx) { if (structure_1.Unit.isAtomic(ctx.element.unit)) return ''; var asym_id = ctx.element.unit.model.coarseHierarchy.spheres.asym_id; return asym_id.value(ctx.element.element) || ''; }), region: base_1.QuerySymbolRuntime.Dynamic((0, symbol_1.CustomPropSymbol)('g3d', 'region', type_1.Type.Num), function (ctx) { if (structure_1.Unit.isAtomic(ctx.element.unit)) return ''; var info = exports.G3dInfoDataProperty.get(ctx.element.unit.model); if (!info) return 0; var seqId = ctx.element.unit.model.coarseHierarchy.spheres.seq_id_begin.value(ctx.element.element); return info.start[seqId] || 0; }) }; exports.G3dInfoDataProperty = property_1.FormatPropertyProvider.create({ name: 'g3d_info' }); function g3dHaplotypeQuery(haplotype) { return builder_1.MolScriptBuilder.struct.generator.atomGroups({ 'chain-test': builder_1.MolScriptBuilder.core.rel.eq([exports.G3dSymbols.haplotype.symbol(), haplotype]), }); } exports.g3dHaplotypeQuery = g3dHaplotypeQuery; function g3dChromosomeQuery(chr) { return builder_1.MolScriptBuilder.struct.generator.atomGroups({ 'chain-test': builder_1.MolScriptBuilder.core.logic.and([ builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.ammp('objectPrimitive'), 'sphere']), builder_1.MolScriptBuilder.core.rel.eq([exports.G3dSymbols.chromosome.symbol(), chr]) ]) }); } exports.g3dChromosomeQuery = g3dChromosomeQuery; function g3dRegionQuery(chr, start, end) { return builder_1.MolScriptBuilder.struct.generator.atomGroups({ 'chain-test': builder_1.MolScriptBuilder.core.logic.and([ builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.ammp('objectPrimitive'), 'sphere']), builder_1.MolScriptBuilder.core.rel.eq([exports.G3dSymbols.chromosome.symbol(), chr]) ]), 'residue-test': builder_1.MolScriptBuilder.core.rel.inRange([exports.G3dSymbols.region.symbol(), start, end]) }); } exports.g3dRegionQuery = g3dRegionQuery; ; exports.G3dLabelProvider = { label: function (e) { if (e.kind !== 'element-loci' || loci_1.Loci.isEmpty(e)) return; var first = e.elements[0]; if (e.elements.length !== 1 || structure_1.Unit.isAtomic(first.unit)) return; var info = exports.G3dInfoDataProperty.get(first.unit.model); if (!info) return; var eI = first.unit.elements[int_1.OrderedSet.getAt(first.indices, 0)]; var seqId = first.unit.model.coarseHierarchy.spheres.seq_id_begin.value(eI); return "<b>Start:</b> " + info.start[seqId] + " <small>| resolution " + info.resolution + "<small>"; } }; //# sourceMappingURL=model.js.map