UNPKG

molstar

Version:

A comprehensive macromolecular library.

73 lines (72 loc) 3.58 kB
"use strict"; /** * 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> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.trajectoryFromPDB = exports.PdbFormat = void 0; var tslib_1 = require("tslib"); var to_cif_1 = require("./pdb/to-cif"); var mol_task_1 = require("../../mol-task"); var mmcif_1 = require("./mmcif"); var parser_1 = require("./basic/parser"); var db_1 = require("../../mol-data/db"); var partial_charge_1 = require("./property/partial-charge"); var schema_1 = require("./basic/schema"); 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 = {})); exports.PdbFormat = PdbFormat; function trajectoryFromPDB(pdb) { var _this = this; return mol_task_1.Task.create('Parse PDB', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var cif, format, basic, models, partial_charge, first, srcIndex, isIdentity, srcIndexArray, q_1, partialCharge; var _a; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: return [4 /*yield*/, ctx.update('Converting to mmCIF')]; case 1: _b.sent(); return [4 /*yield*/, (0, to_cif_1.pdbToMmCif)(pdb)]; case 2: cif = _b.sent(); format = mmcif_1.MmcifFormat.fromFrame(cif, undefined, PdbFormat.create(pdb)); basic = (0, schema_1.createBasic)(format.data.db, true); return [4 /*yield*/, (0, parser_1.createModels)(basic, format, ctx)]; case 3: models = _b.sent(); 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) { first = models.representative; srcIndex = first.atomicHierarchy.atomSourceIndex; isIdentity = db_1.Column.isIdentity(srcIndex); srcIndexArray = isIdentity ? void 0 : srcIndex.toArray({ array: Int32Array }); q_1 = partial_charge.toFloatArray(); partialCharge = srcIndexArray ? db_1.Column.ofFloatArray(db_1.Column.mapToArray(srcIndex, function (i) { return q_1[i]; }, Float32Array)) : db_1.Column.ofFloatArray(q_1); partial_charge_1.AtomPartialCharge.Provider.set(first, { data: partialCharge, type: 'GASTEIGER' // from PDBQT }); } } return [2 /*return*/, models]; } }); }); }); } exports.trajectoryFromPDB = trajectoryFromPDB;