UNPKG

molstar

Version:

A comprehensive macromolecular library.

86 lines 3.87 kB
/** * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { __awaiter, __generator } from "tslib"; import { Column } from '../../../mol-data/db'; import { Task } from '../../../mol-task'; import { TokenColumnProvider as TokenColumn } from '../common/text/column/token'; import { TokenBuilder, Tokenizer } from '../common/text/tokenizer'; import { ReaderResult as Result } from '../result'; export function handleAtoms(tokenizer, count) { var x = TokenBuilder.create(tokenizer.data, count * 2); var y = TokenBuilder.create(tokenizer.data, count * 2); var z = TokenBuilder.create(tokenizer.data, count * 2); var type_symbol = TokenBuilder.create(tokenizer.data, count * 2); for (var i = 0; i < count; ++i) { Tokenizer.markLine(tokenizer); var s = tokenizer.tokenStart, position = tokenizer.position; Tokenizer.trim(tokenizer, s, s + 10); TokenBuilder.addUnchecked(x, tokenizer.tokenStart, tokenizer.tokenEnd); Tokenizer.trim(tokenizer, s + 10, s + 20); TokenBuilder.addUnchecked(y, tokenizer.tokenStart, tokenizer.tokenEnd); Tokenizer.trim(tokenizer, s + 20, s + 30); TokenBuilder.addUnchecked(z, tokenizer.tokenStart, tokenizer.tokenEnd); Tokenizer.trim(tokenizer, s + 31, s + 34); TokenBuilder.addUnchecked(type_symbol, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer.position = position; } return { count: count, x: TokenColumn(x)(Column.Schema.float), y: TokenColumn(y)(Column.Schema.float), z: TokenColumn(z)(Column.Schema.float), type_symbol: TokenColumn(type_symbol)(Column.Schema.str) }; } export function handleBonds(tokenizer, count) { var atomIdxA = TokenBuilder.create(tokenizer.data, count * 2); var atomIdxB = TokenBuilder.create(tokenizer.data, count * 2); var order = TokenBuilder.create(tokenizer.data, count * 2); for (var i = 0; i < count; ++i) { Tokenizer.markLine(tokenizer); var s = tokenizer.tokenStart, position = tokenizer.position; Tokenizer.trim(tokenizer, s, s + 3); TokenBuilder.addUnchecked(atomIdxA, tokenizer.tokenStart, tokenizer.tokenEnd); Tokenizer.trim(tokenizer, s + 3, s + 6); TokenBuilder.addUnchecked(atomIdxB, tokenizer.tokenStart, tokenizer.tokenEnd); Tokenizer.trim(tokenizer, s + 6, s + 9); TokenBuilder.addUnchecked(order, tokenizer.tokenStart, tokenizer.tokenEnd); tokenizer.position = position; } return { count: count, atomIdxA: TokenColumn(atomIdxA)(Column.Schema.int), atomIdxB: TokenColumn(atomIdxB)(Column.Schema.int), order: TokenColumn(order)(Column.Schema.int) }; } function parseInternal(data) { var tokenizer = Tokenizer(data); var title = Tokenizer.readLine(tokenizer).trim(); var program = Tokenizer.readLine(tokenizer).trim(); var comment = Tokenizer.readLine(tokenizer).trim(); var counts = 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.success(result); } export function parseMol(data) { var _this = this; return Task.create('Parse Mol', function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, parseInternal(data)]; }); }); }); } //# sourceMappingURL=parser.js.map