UNPKG

molstar

Version:

A comprehensive macromolecular library.

117 lines (116 loc) 5.3 kB
"use strict"; /** * Copyright (c) 2024 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author David Sehnal <david.sehnal@gmail.com> * @author Ludovic Autin <ludovic.autin@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LammpsDataFormat = void 0; exports.trajectoryFromLammpsData = trajectoryFromLammpsData; const db_1 = require("../../mol-data/db"); const schema_1 = require("../../mol-io/reader/lammps/schema"); const structure_1 = require("../../mol-model/structure"); const types_1 = require("../../mol-model/structure/model/types"); const mol_task_1 = require("../../mol-task"); const parser_1 = require("./basic/parser"); const schema_2 = require("./basic/schema"); const component_1 = require("./common/component"); const entity_1 = require("./common/entity"); const index_pair_1 = require("./property/bonds/index-pair"); const partial_charge_1 = require("./property/partial-charge"); async function getModels(mol, ctx, unitsStyle = 'real') { const { atoms, bonds } = mol; const models = []; const count = atoms.count; const scale = schema_1.lammpsUnitStyles[unitsStyle].scale; const type_symbols = new Array(count); const id = new Int32Array(count); const cx = new Float32Array(count); const cy = new Float32Array(count); const cz = new Float32Array(count); const model_num = new Int32Array(count); let offset = 0; for (let j = 0; j < count; j++) { type_symbols[offset] = atoms.atomType.value(j).toString(); cx[offset] = atoms.x.value(j) * scale; cy[offset] = atoms.y.value(j) * scale; cz[offset] = atoms.z.value(j) * scale; id[offset] = atoms.atomId.value(j) - 1; model_num[offset] = 0; offset++; } const MOL = db_1.Column.ofConst('MOL', count, db_1.Column.Schema.str); const asym_id = db_1.Column.ofLambda({ value: (row) => atoms.moleculeId.value(row).toString(), rowCount: count, schema: db_1.Column.Schema.str, }); const seq_id = db_1.Column.ofConst(1, count, db_1.Column.Schema.int); const type_symbol = db_1.Column.ofStringArray(type_symbols); const atom_site = db_1.Table.ofPartialColumns(schema_2.BasicSchema.atom_site, { auth_asym_id: asym_id, auth_atom_id: type_symbol, auth_comp_id: MOL, auth_seq_id: seq_id, Cartn_x: db_1.Column.ofFloatArray(cx), Cartn_y: db_1.Column.ofFloatArray(cy), Cartn_z: db_1.Column.ofFloatArray(cz), id: db_1.Column.ofIntArray(id), label_asym_id: asym_id, label_atom_id: type_symbol, label_comp_id: MOL, label_seq_id: seq_id, label_entity_id: db_1.Column.ofConst('1', count, db_1.Column.Schema.str), occupancy: db_1.Column.ofConst(1, count, db_1.Column.Schema.float), type_symbol, pdbx_PDB_model_num: db_1.Column.ofIntArray(model_num), }, count); const entityBuilder = new entity_1.EntityBuilder(); entityBuilder.setNames([['MOL', 'Unknown Entity']]); entityBuilder.getEntityId('MOL', types_1.MoleculeType.Unknown, 'A'); const componentBuilder = new component_1.ComponentBuilder(seq_id, type_symbol); componentBuilder.setNames([['MOL', 'Unknown Molecule']]); componentBuilder.add('MOL', 0); const basic = (0, schema_2.createBasic)({ entity: entityBuilder.getEntityTable(), chem_comp: componentBuilder.getChemCompTable(), atom_site }); const _models = await (0, parser_1.createModels)(basic, LammpsDataFormat.create(mol), ctx); if (_models.frameCount > 0) { const first = _models.representative; if (bonds.count !== 0) { const indexA = db_1.Column.ofIntArray(db_1.Column.mapToArray(bonds.atomIdA, x => x - 1, Int32Array)); const indexB = db_1.Column.ofIntArray(db_1.Column.mapToArray(bonds.atomIdB, x => x - 1, Int32Array)); const key = bonds.bondId; const order = db_1.Column.ofConst(1, bonds.count, db_1.Column.Schema.int); const flag = db_1.Column.ofConst(types_1.BondType.Flag.Covalent, bonds.count, db_1.Column.Schema.int); const pairBonds = index_pair_1.IndexPairBonds.fromData({ pairs: { key, indexA, indexB, order, flag }, count: atoms.count }, { maxDistance: Infinity }); index_pair_1.IndexPairBonds.Provider.set(first, pairBonds); } partial_charge_1.AtomPartialCharge.Provider.set(first, { data: atoms.charge, type: 'NO_CHARGES' }); models.push(first); } return new structure_1.ArrayTrajectory(models); } var LammpsDataFormat; (function (LammpsDataFormat) { function is(x) { return (x === null || x === void 0 ? void 0 : x.kind) === 'data'; } LammpsDataFormat.is = is; function create(mol) { return { kind: 'data', name: 'data', data: mol }; } LammpsDataFormat.create = create; })(LammpsDataFormat || (exports.LammpsDataFormat = LammpsDataFormat = {})); function trajectoryFromLammpsData(mol, unitsStyle) { if (unitsStyle === void 0) unitsStyle = 'real'; return mol_task_1.Task.create('Parse Lammps Data', ctx => getModels(mol, ctx, unitsStyle)); }