UNPKG

molstar

Version:

A comprehensive macromolecular library.

102 lines (101 loc) 4.98 kB
"use strict"; /** * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.preprocessFile = void 0; var tslib_1 = require("tslib"); var structure_wrapper_1 = require("../server/structure-wrapper"); var converter_1 = require("./converter"); var cif_1 = require("../../../mol-io/writer/cif"); var mmcif_1 = require("../../../mol-model/structure/export/mmcif"); var writer_1 = require("../utils/writer"); // TODO: error handling function preprocessFile(filename, propertyProvider, outputCif, outputBcif) { return propertyProvider ? preprocess(filename, propertyProvider, outputCif, outputBcif) : convert(filename, outputCif, outputBcif); } exports.preprocessFile = preprocessFile; function preprocess(filename, propertyProvider, outputCif, outputBcif) { return tslib_1.__awaiter(this, void 0, void 0, function () { var input, categories, inputStructures, exportCtx, writer, encoder, writer, encoder; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, structure_wrapper_1.readStructureWrapper)('entry', '_local_', filename, void 0, propertyProvider)]; case 1: input = _a.sent(); return [4 /*yield*/, (0, converter_1.classifyCif)(input.cifFrame)]; case 2: categories = _a.sent(); return [4 /*yield*/, (0, structure_wrapper_1.resolveStructures)(input)]; case 3: inputStructures = (_a.sent()); exportCtx = mmcif_1.CifExportContext.create(inputStructures); if (outputCif) { writer = new writer_1.FileResultWriter(outputCif); encoder = cif_1.CifWriter.createEncoder({ binary: false }); encode(inputStructures[0], input.cifFrame.header, categories, encoder, exportCtx, writer); writer.end(); } if (outputBcif) { writer = new writer_1.FileResultWriter(outputBcif); encoder = cif_1.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 tslib_1.__awaiter(this, void 0, void 0, function () { var frame, categories, writer, encoder, writer, encoder; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, structure_wrapper_1.readDataAndFrame)(filename)]; case 1: frame = (_a.sent()).frame; return [4 /*yield*/, (0, converter_1.classifyCif)(frame)]; case 2: categories = _a.sent(); if (outputCif) { writer = new writer_1.FileResultWriter(outputCif); encoder = cif_1.CifWriter.createEncoder({ binary: false }); encodeConvert(frame.header, categories, encoder, writer); writer.end(); } if (outputBcif) { writer = new writer_1.FileResultWriter(outputBcif); encoder = cif_1.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); } (0, mmcif_1.encode_mmCIF_categories)(encoder, structure, { skipCategoryNames: skipCategoryNames, exportCtx: exportCtx }); encoder.encode(); encoder.writeTo(writer); }