molstar
Version:
A comprehensive macromolecular library.
102 lines (101 loc) • 4.98 kB
JavaScript
/**
* 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);
}
;