molstar
Version:
A comprehensive macromolecular library.
92 lines • 4.6 kB
JavaScript
/**
* 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
;