molstar
Version:
A comprehensive macromolecular library.
98 lines (97 loc) • 3.97 kB
JavaScript
/**
* 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>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.CifWriter = void 0;
const tslib_1 = require("tslib");
const text_1 = require("./cif/encoder/text");
const binary_1 = require("./cif/encoder/binary");
const _Encoder = tslib_1.__importStar(require("./cif/encoder"));
const binary_cif_1 = require("../common/binary-cif");
var CifWriter;
(function (CifWriter) {
CifWriter.Encoder = _Encoder.Encoder;
CifWriter.Category = _Encoder.Category;
CifWriter.Field = _Encoder.Field;
CifWriter.Encoding = binary_cif_1.ArrayEncoding;
function createEncoder(params) {
const { binary = false, encoderName = 'mol*' } = params || {};
return binary ? new binary_1.BinaryEncoder(encoderName, params ? params.binaryEncodingPovider : void 0, params ? !!params.binaryAutoClassifyEncoding : false) : new text_1.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, source: [source] };
}
CifWriter.categoryInstance = categoryInstance;
function createEncodingProviderFromCifFrame(frame) {
return {
get(c, f) {
const cat = frame.categories[c];
if (!cat)
return void 0;
const ff = cat.getField(f);
return ff && ff.binaryEncoding ? binary_cif_1.ArrayEncoder.fromEncoding(ff.binaryEncoding) : void 0;
}
};
}
CifWriter.createEncodingProviderFromCifFrame = createEncodingProviderFromCifFrame;
;
function createEncodingProviderFromJsonConfig(hints) {
return {
get(c, f) {
for (let i = 0; i < hints.length; i++) {
const hint = hints[i];
if (hint.categoryName === c && hint.columnName === f) {
return resolveEncoding(hint);
}
}
}
};
}
CifWriter.createEncodingProviderFromJsonConfig = createEncodingProviderFromJsonConfig;
function resolveEncoding(hint) {
const precision = hint.precision;
if (precision !== void 0) {
const multiplier = Math.pow(10, precision);
const 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 || (exports.CifWriter = CifWriter = {}));
;