UNPKG

molstar

Version:

A comprehensive macromolecular library.

69 lines 2.75 kB
/** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { __awaiter, __generator } from "tslib"; import * as Data from '../data-model'; import { Field } from './field'; import { ReaderResult as Result } from '../../result'; import { decodeMsgPack } from '../../../common/msgpack/decode'; import { Task } from '../../../../mol-task'; function checkVersions(min, current) { for (var i = 0; i < 2; i++) { if (min[i] > current[i]) return false; } return true; } function Category(data) { var map = Object.create(null); var cache = Object.create(null); for (var _i = 0, _a = data.columns; _i < _a.length; _i++) { var col = _a[_i]; map[col.name] = col; } return { rowCount: data.rowCount, name: data.name.substr(1), fieldNames: data.columns.map(function (c) { return c.name; }), getField: function (name) { var col = map[name]; if (!col) return void 0; if (!!cache[name]) return cache[name]; cache[name] = Field(col); return cache[name]; } }; } export function parseCifBinary(data) { var _this = this; return Task.create('Parse BinaryCIF', function (ctx) { return __awaiter(_this, void 0, void 0, function () { var minVersion, unpacked, file; return __generator(this, function (_a) { minVersion = [0, 3]; try { unpacked = decodeMsgPack(data); if (!checkVersions(minVersion, unpacked.version.match(/(\d)\.(\d)\.\d/).slice(1).map(function (v) { return +v; }))) { return [2 /*return*/, Result.error("Unsupported format version. Current " + unpacked.version + ", required " + minVersion.join('.') + ".")]; } file = Data.CifFile(unpacked.dataBlocks.map(function (block) { var cats = Object.create(null); for (var _i = 0, _a = block.categories; _i < _a.length; _i++) { var cat = _a[_i]; cats[cat.name.substr(1)] = Category(cat); } return Data.CifBlock(block.categories.map(function (c) { return c.name.substr(1); }), cats, block.header); })); return [2 /*return*/, Result.success(file)]; } catch (e) { return [2 /*return*/, Result.error('' + e)]; } return [2 /*return*/]; }); }); }); } //# sourceMappingURL=parser.js.map