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