molstar
Version:
A comprehensive macromolecular library.
73 lines (72 loc) • 3.58 kB
JavaScript
/**
* 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;
;