UNPKG

molstar

Version:

A comprehensive macromolecular library.

56 lines (55 loc) 2.4 kB
/** * Copyright (c) 2019-2022 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> */ import { pdbToMmCif } from './pdb/to-cif'; import { Task } from '../../mol-task'; import { MmcifFormat } from './mmcif'; import { createModels } from './basic/parser'; import { Column } from '../../mol-data/db'; import { AtomPartialCharge } from './property/partial-charge'; import { createBasic } from './basic/schema'; export { PdbFormat }; var PdbFormat; (function (PdbFormat) { function is(x) { return (x === null || x === void 0 ? void 0 : x.kind) === 'pdb'; } PdbFormat.is = is; function create(pdb) { return { kind: 'pdb', name: pdb.id || '', data: pdb }; } PdbFormat.create = create; })(PdbFormat || (PdbFormat = {})); export function trajectoryFromPDB(pdb) { return Task.create('Parse PDB', async (ctx) => { var _a; await ctx.update('Converting to mmCIF'); const cif = await pdbToMmCif(pdb); const format = MmcifFormat.fromFrame(cif, undefined, PdbFormat.create(pdb)); const basic = createBasic(format.data.db, true); const models = await createModels(basic, format, ctx); const partial_charge = (_a = cif.categories['atom_site']) === null || _a === void 0 ? void 0 : _a.getField('partial_charge'); if (partial_charge) { // TODO works only for single, unsorted model, to work generally // would need to do model splitting again if (models.frameCount === 1) { const first = models.representative; const srcIndex = first.atomicHierarchy.atomSourceIndex; const isIdentity = Column.isIdentity(srcIndex); const srcIndexArray = isIdentity ? void 0 : srcIndex.toArray({ array: Int32Array }); const q = partial_charge.toFloatArray(); const partialCharge = srcIndexArray ? Column.ofFloatArray(Column.mapToArray(srcIndex, i => q[i], Float32Array)) : Column.ofFloatArray(q); AtomPartialCharge.Provider.set(first, { data: partialCharge, type: 'GASTEIGER' // from PDBQT }); } } return models; }); }