molstar
Version:
A comprehensive macromolecular library.
98 lines • 4.76 kB
JavaScript
/**
* 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