UNPKG

molstar

Version:

A comprehensive macromolecular library.

127 lines 5.37 kB
"use strict"; /** * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Sebastian Bittrich <sebastian.bittrich@rcsb.org> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LigandEncoder = void 0; var tslib_1 = require("tslib"); var mol_util_1 = require("../../mol-util"); function Atom(partial) { return (0, tslib_1.__assign)({}, partial); } var LigandEncoder = /** @class */ (function () { function LigandEncoder(encoder, metaInformation, hydrogens) { this.encoder = encoder; this.metaInformation = metaInformation; this.hydrogens = hydrogens; this.error = false; this.encoded = false; this.isBinary = false; this.binaryEncodingProvider = void 0; this.builder = mol_util_1.StringBuilder.create(); this.meta = mol_util_1.StringBuilder.create(); } LigandEncoder.prototype.writeCategory = function (category, context) { if (this.encoded) { throw new Error('The writer contents have already been encoded, no more writing.'); } if (this.metaInformation && (category.name === 'model_server_result' || category.name === 'model_server_params' || category.name === 'model_server_stats')) { this.writeFullCategory(this.meta, category, context); return; } // if error: force writing of meta information if (category.name === 'model_server_error') { this.writeFullCategory(this.meta, category, context); this.error = true; return; } // only care about atom_site category when writing SDF if (category.name !== 'atom_site') { return; } this._writeCategory(category, context); }; LigandEncoder.prototype.setComponentAtomData = function (componentAtomData) { this.componentAtomData = componentAtomData; }; LigandEncoder.prototype.setComponentBondData = function (componentBondData) { this.componentBondData = componentBondData; }; LigandEncoder.prototype.writeTo = function (stream) { var chunks = mol_util_1.StringBuilder.getChunks(this.builder); for (var i = 0, _i = chunks.length; i < _i; i++) { stream.writeString(chunks[i]); } }; LigandEncoder.prototype.getSize = function () { return mol_util_1.StringBuilder.getSize(this.builder); }; LigandEncoder.prototype.getData = function () { return mol_util_1.StringBuilder.getString(this.builder); }; LigandEncoder.prototype.getAtoms = function (instance, source) { var sortedFields = this.getSortedFields(instance, ['Cartn_x', 'Cartn_y', 'Cartn_z']); var label_atom_id = this.getField(instance, 'label_atom_id'); var type_symbol = this.getField(instance, 'type_symbol'); return this._getAtoms(source, sortedFields, label_atom_id, type_symbol); }; LigandEncoder.prototype._getAtoms = function (source, fields, label_atom_id, type_symbol) { var atoms = new Map(); var index = 0; // is outer loop even needed? for (var _c = 0; _c < source.length; _c++) { var src = source[_c]; var data = src.data; if (src.rowCount === 0) continue; var it_1 = src.keys(); while (it_1.hasNext) { var key = it_1.move(); var lai = label_atom_id.value(key, data, index); var ts = type_symbol.value(key, data, index); if (this.skipHydrogen(ts)) { index++; continue; } var a = {}; for (var _f = 0, _fl = fields.length; _f < _fl; _f++) { var f = fields[_f]; a[f.name] = f.value(key, data, index); } a[type_symbol.name] = ts; a['index'] = index; atoms.set(lai, Atom(a)); index++; } } return atoms; }; LigandEncoder.prototype.skipHydrogen = function (type_symbol) { if (this.hydrogens) { return false; } return type_symbol === 'H'; }; LigandEncoder.prototype.getSortedFields = function (instance, names) { var _this = this; return names.map(function (n) { return _this.getField(instance, n); }); }; LigandEncoder.prototype.getField = function (instance, name) { return instance.fields.find(function (f) { return f.name === name; }); }; LigandEncoder.prototype.getName = function (instance, source) { var label_comp_id = this.getField(instance, 'label_comp_id'); return label_comp_id.value(source[0].keys().move(), source[0].data, 0); }; LigandEncoder.prototype.startDataBlock = function () { }; LigandEncoder.prototype.setFilter = function () { }; LigandEncoder.prototype.setFormatter = function () { }; LigandEncoder.prototype.isCategoryIncluded = function () { return true; }; return LigandEncoder; }()); exports.LigandEncoder = LigandEncoder; //# sourceMappingURL=ligand-encoder.js.map