UNPKG

molstar

Version:

A comprehensive macromolecular library.

94 lines (93 loc) 3.97 kB
/** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> */ import { TextEncoder } from './cif/encoder/text'; import { BinaryEncoder } from './cif/encoder/binary'; import * as _Encoder from './cif/encoder'; import { ArrayEncoding, ArrayEncoder } from '../common/binary-cif'; export var CifWriter; (function (CifWriter) { CifWriter.Encoder = _Encoder.Encoder; CifWriter.Category = _Encoder.Category; CifWriter.Field = _Encoder.Field; CifWriter.Encoding = ArrayEncoding; function createEncoder(params) { var _a = params || {}, _b = _a.binary, binary = _b === void 0 ? false : _b, _c = _a.encoderName, encoderName = _c === void 0 ? 'mol*' : _c; return binary ? new BinaryEncoder(encoderName, params ? params.binaryEncodingPovider : void 0, params ? !!params.binaryAutoClassifyEncoding : false) : new TextEncoder(); } CifWriter.createEncoder = createEncoder; function fields() { return CifWriter.Field.build(); } CifWriter.fields = fields; var E = CifWriter.Encoding; CifWriter.Encodings = { deltaRLE: E.by(E.delta).and(E.runLength).and(E.integerPacking), fixedPoint2: E.by(E.fixedPoint(100)).and(E.delta).and(E.integerPacking), fixedPoint3: E.by(E.fixedPoint(1000)).and(E.delta).and(E.integerPacking), }; function categoryInstance(fields, source) { return { fields: fields, source: [source] }; } CifWriter.categoryInstance = categoryInstance; function createEncodingProviderFromCifFrame(frame) { return { get: function (c, f) { var cat = frame.categories[c]; if (!cat) return void 0; var ff = cat.getField(f); return ff && ff.binaryEncoding ? ArrayEncoder.fromEncoding(ff.binaryEncoding) : void 0; } }; } CifWriter.createEncodingProviderFromCifFrame = createEncodingProviderFromCifFrame; ; function createEncodingProviderFromJsonConfig(hints) { return { get: function (c, f) { for (var i = 0; i < hints.length; i++) { var hint = hints[i]; if (hint.categoryName === c && hint.columnName === f) { return resolveEncoding(hint); } } } }; } CifWriter.createEncodingProviderFromJsonConfig = createEncodingProviderFromJsonConfig; function resolveEncoding(hint) { var precision = hint.precision; if (precision !== void 0) { var multiplier = Math.pow(10, precision); var fixedPoint = E.by(E.fixedPoint(multiplier)); switch (hint.encoding) { case 'pack': return fixedPoint.and(E.integerPacking); case 'rle': return fixedPoint.and(E.runLength).and(E.integerPacking); case 'delta': return fixedPoint.and(E.delta).and(E.integerPacking); case 'delta-rle': return fixedPoint.and(E.delta).and(E.runLength).and(E.integerPacking); } ; } else { switch (hint.encoding) { case 'pack': return E.by(E.integerPacking); case 'rle': return E.by(E.runLength).and(E.integerPacking); case 'delta': return E.by(E.delta).and(E.integerPacking); case 'delta-rle': return E.by(E.delta).and(E.runLength).and(E.integerPacking); } } throw new Error('cannot be reached'); } })(CifWriter || (CifWriter = {}));