UNPKG

molstar

Version:

A comprehensive macromolecular library.

92 lines 4.6 kB
"use strict"; /** * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.parseMol = exports.handleBonds = exports.handleAtoms = void 0; var tslib_1 = require("tslib"); var db_1 = require("../../../mol-data/db"); var mol_task_1 = require("../../../mol-task"); var token_1 = require("../common/text/column/token"); var tokenizer_1 = require("../common/text/tokenizer"); var result_1 = require("../result"); function handleAtoms(tokenizer, count) { var x = tokenizer_1.TokenBuilder.create(tokenizer.data, count * 2); var y = tokenizer_1.TokenBuilder.create(tokenizer.data, count * 2); var z = tokenizer_1.TokenBuilder.create(tokenizer.data, count * 2); var type_symbol = tokenizer_1.TokenBuilder.create(tokenizer.data, count * 2); for (var i = 0; i < count; ++i) { tokenizer_1.Tokenizer.markLine(tokenizer); var s = tokenizer.tokenStart, position = tokenizer.position; tokenizer_1.Tokenizer.trim(tokenizer, s, s + 10); tokenizer_1.TokenBuilder.addUnchecked(x, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer_1.Tokenizer.trim(tokenizer, s + 10, s + 20); tokenizer_1.TokenBuilder.addUnchecked(y, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer_1.Tokenizer.trim(tokenizer, s + 20, s + 30); tokenizer_1.TokenBuilder.addUnchecked(z, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer_1.Tokenizer.trim(tokenizer, s + 31, s + 34); tokenizer_1.TokenBuilder.addUnchecked(type_symbol, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer.position = position; } return { count: count, x: (0, token_1.TokenColumnProvider)(x)(db_1.Column.Schema.float), y: (0, token_1.TokenColumnProvider)(y)(db_1.Column.Schema.float), z: (0, token_1.TokenColumnProvider)(z)(db_1.Column.Schema.float), type_symbol: (0, token_1.TokenColumnProvider)(type_symbol)(db_1.Column.Schema.str) }; } exports.handleAtoms = handleAtoms; function handleBonds(tokenizer, count) { var atomIdxA = tokenizer_1.TokenBuilder.create(tokenizer.data, count * 2); var atomIdxB = tokenizer_1.TokenBuilder.create(tokenizer.data, count * 2); var order = tokenizer_1.TokenBuilder.create(tokenizer.data, count * 2); for (var i = 0; i < count; ++i) { tokenizer_1.Tokenizer.markLine(tokenizer); var s = tokenizer.tokenStart, position = tokenizer.position; tokenizer_1.Tokenizer.trim(tokenizer, s, s + 3); tokenizer_1.TokenBuilder.addUnchecked(atomIdxA, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer_1.Tokenizer.trim(tokenizer, s + 3, s + 6); tokenizer_1.TokenBuilder.addUnchecked(atomIdxB, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer_1.Tokenizer.trim(tokenizer, s + 6, s + 9); tokenizer_1.TokenBuilder.addUnchecked(order, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer.position = position; } return { count: count, atomIdxA: (0, token_1.TokenColumnProvider)(atomIdxA)(db_1.Column.Schema.int), atomIdxB: (0, token_1.TokenColumnProvider)(atomIdxB)(db_1.Column.Schema.int), order: (0, token_1.TokenColumnProvider)(order)(db_1.Column.Schema.int) }; } exports.handleBonds = handleBonds; function parseInternal(data) { var tokenizer = (0, tokenizer_1.Tokenizer)(data); var title = tokenizer_1.Tokenizer.readLine(tokenizer).trim(); var program = tokenizer_1.Tokenizer.readLine(tokenizer).trim(); var comment = tokenizer_1.Tokenizer.readLine(tokenizer).trim(); var counts = tokenizer_1.Tokenizer.readLine(tokenizer); var atomCount = +counts.substr(0, 3), bondCount = +counts.substr(3, 3); var atoms = handleAtoms(tokenizer, atomCount); var bonds = handleBonds(tokenizer, bondCount); var result = { title: title, program: program, comment: comment, atoms: atoms, bonds: bonds }; return result_1.ReaderResult.success(result); } function parseMol(data) { var _this = this; return mol_task_1.Task.create('Parse Mol', function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () { return (0, tslib_1.__generator)(this, function (_a) { return [2 /*return*/, parseInternal(data)]; }); }); }); } exports.parseMol = parseMol; //# sourceMappingURL=parser.js.map