UNPKG

molstar

Version:

A comprehensive macromolecular library.

144 lines 6.17 kB
/** * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ import { __awaiter, __generator } from "tslib"; import { CIF } from '../../mol-io/reader/cif'; import { parsePDB } from '../../mol-io/reader/pdb/parser'; import { Asset } from '../../mol-util/assets'; import { Vec3 } from '../../mol-math/linear-algebra'; export function parseCif(plugin, data) { return __awaiter(this, void 0, void 0, function () { var comp, parsed; return __generator(this, function (_a) { switch (_a.label) { case 0: comp = CIF.parse(data); return [4 /*yield*/, plugin.runTask(comp)]; case 1: parsed = _a.sent(); if (parsed.isError) throw parsed; return [2 /*return*/, parsed.result]; } }); }); } export function parsePDBfile(plugin, data, id) { return __awaiter(this, void 0, void 0, function () { var comp, parsed; return __generator(this, function (_a) { switch (_a.label) { case 0: comp = parsePDB(data, id); return [4 /*yield*/, plugin.runTask(comp)]; case 1: parsed = _a.sent(); if (parsed.isError) throw parsed; return [2 /*return*/, parsed.result]; } }); }); } function downloadCif(plugin, url, isBinary, assetManager) { return __awaiter(this, void 0, void 0, function () { var type, asset; var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: type = isBinary ? 'binary' : 'string'; return [4 /*yield*/, plugin.runTask(assetManager.resolve(Asset.getUrlAsset(assetManager, url), type))]; case 1: asset = _b.sent(); _a = {}; return [4 /*yield*/, parseCif(plugin, asset.data)]; case 2: return [2 /*return*/, (_a.cif = _b.sent(), _a.asset = asset, _a)]; } }); }); } function downloadPDB(plugin, url, id, assetManager) { return __awaiter(this, void 0, void 0, function () { var asset; var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: return [4 /*yield*/, assetManager.resolve(Asset.getUrlAsset(assetManager, url), 'string').run()]; case 1: asset = _b.sent(); _a = {}; return [4 /*yield*/, parsePDBfile(plugin, asset.data, id)]; case 2: return [2 /*return*/, (_a.pdb = _b.sent(), _a.asset = asset, _a)]; } }); }); } export function getFromPdb(plugin, pdbId, assetManager) { return __awaiter(this, void 0, void 0, function () { var _a, cif, asset; return __generator(this, function (_b) { switch (_b.label) { case 0: return [4 /*yield*/, downloadCif(plugin, "https://models.rcsb.org/" + pdbId.toUpperCase() + ".bcif", true, assetManager)]; case 1: _a = _b.sent(), cif = _a.cif, asset = _a.asset; return [2 /*return*/, { mmcif: cif.blocks[0], asset: asset }]; } }); }); } export function getFromOPM(plugin, pdbId, assetManager) { return __awaiter(this, void 0, void 0, function () { var asset; var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: return [4 /*yield*/, plugin.runTask(assetManager.resolve(Asset.getUrlAsset(assetManager, "https://opm-assets.storage.googleapis.com/pdb/" + pdbId.toLowerCase() + ".pdb"), 'string'))]; case 1: asset = _b.sent(); _a = {}; return [4 /*yield*/, parsePDBfile(plugin, asset.data, pdbId)]; case 2: return [2 /*return*/, (_a.pdb = _b.sent(), _a.asset = asset, _a)]; } }); }); } export function getFromCellPackDB(plugin, id, baseUrl, assetManager) { return __awaiter(this, void 0, void 0, function () { var isBinary, _a, cif, asset, name_1; return __generator(this, function (_b) { switch (_b.label) { case 0: if (!(id.toLowerCase().endsWith('.cif') || id.toLowerCase().endsWith('.bcif'))) return [3 /*break*/, 2]; isBinary = id.toLowerCase().endsWith('.bcif'); return [4 /*yield*/, downloadCif(plugin, baseUrl + "/other/" + id, isBinary, assetManager)]; case 1: _a = _b.sent(), cif = _a.cif, asset = _a.asset; return [2 /*return*/, { mmcif: cif.blocks[0], asset: asset }]; case 2: name_1 = id.endsWith('.pdb') ? id.substring(0, id.length - 4) : id; return [4 /*yield*/, downloadPDB(plugin, baseUrl + "/other/" + name_1 + ".pdb", name_1, assetManager)]; case 3: return [2 /*return*/, _b.sent()]; } }); }); } export function getStructureMean(structure) { var xSum = 0, ySum = 0, zSum = 0; for (var i = 0, il = structure.units.length; i < il; ++i) { var unit = structure.units[i]; var elements = unit.elements; var _a = unit.conformation, x = _a.x, y = _a.y, z = _a.z; for (var j = 0, jl = elements.length; j < jl; ++j) { var eI = elements[j]; xSum += x(eI); ySum += y(eI); zSum += z(eI); } } var elementCount = structure.elementCount; return Vec3.create(xSum / elementCount, ySum / elementCount, zSum / elementCount); } //# sourceMappingURL=util.js.map