UNPKG

molstar

Version:

A comprehensive macromolecular library.

98 lines 4.76 kB
/** * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { __awaiter, __generator } from "tslib"; import { readStructureWrapper, resolveStructures, readDataAndFrame } from '../server/structure-wrapper'; import { classifyCif } from './converter'; import { CifWriter } from '../../../mol-io/writer/cif'; import { encode_mmCIF_categories, CifExportContext } from '../../../mol-model/structure/export/mmcif'; import { FileResultWriter } from '../utils/writer'; // TODO: error handling export function preprocessFile(filename, propertyProvider, outputCif, outputBcif) { return propertyProvider ? preprocess(filename, propertyProvider, outputCif, outputBcif) : convert(filename, outputCif, outputBcif); } function preprocess(filename, propertyProvider, outputCif, outputBcif) { return __awaiter(this, void 0, void 0, function () { var input, categories, inputStructures, exportCtx, writer, encoder, writer, encoder; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, readStructureWrapper('entry', '_local_', filename, void 0, propertyProvider)]; case 1: input = _a.sent(); return [4 /*yield*/, classifyCif(input.cifFrame)]; case 2: categories = _a.sent(); return [4 /*yield*/, resolveStructures(input)]; case 3: inputStructures = (_a.sent()); exportCtx = CifExportContext.create(inputStructures); if (outputCif) { writer = new FileResultWriter(outputCif); encoder = CifWriter.createEncoder({ binary: false }); encode(inputStructures[0], input.cifFrame.header, categories, encoder, exportCtx, writer); writer.end(); } if (outputBcif) { writer = new FileResultWriter(outputBcif); encoder = CifWriter.createEncoder({ binary: true, binaryAutoClassifyEncoding: true }); encode(inputStructures[0], input.cifFrame.header, categories, encoder, exportCtx, writer); writer.end(); } return [2 /*return*/]; } }); }); } function convert(filename, outputCif, outputBcif) { return __awaiter(this, void 0, void 0, function () { var frame, categories, writer, encoder, writer, encoder; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, readDataAndFrame(filename)]; case 1: frame = (_a.sent()).frame; return [4 /*yield*/, classifyCif(frame)]; case 2: categories = _a.sent(); if (outputCif) { writer = new FileResultWriter(outputCif); encoder = CifWriter.createEncoder({ binary: false }); encodeConvert(frame.header, categories, encoder, writer); writer.end(); } if (outputBcif) { writer = new FileResultWriter(outputBcif); encoder = CifWriter.createEncoder({ binary: true, binaryAutoClassifyEncoding: true }); encodeConvert(frame.header, categories, encoder, writer); writer.end(); } return [2 /*return*/]; } }); }); } function encodeConvert(header, categories, encoder, writer) { encoder.startDataBlock(header); for (var _i = 0, categories_1 = categories; _i < categories_1.length; _i++) { var cat = categories_1[_i]; encoder.writeCategory(cat); } encoder.encode(); encoder.writeTo(writer); } function encode(structure, header, categories, encoder, exportCtx, writer) { var skipCategoryNames = new Set(categories.map(function (c) { return c.name; })); encoder.startDataBlock(header); for (var _i = 0, categories_2 = categories; _i < categories_2.length; _i++) { var cat = categories_2[_i]; encoder.writeCategory(cat); } encode_mmCIF_categories(encoder, structure, { skipCategoryNames: skipCategoryNames, exportCtx: exportCtx }); encoder.encode(); encoder.writeTo(writer); } //# sourceMappingURL=preprocess.js.map