UNPKG

molstar

Version:

A comprehensive macromolecular library.

72 lines (71 loc) 3.83 kB
"use strict"; /** * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Ccp4Provider = exports.readSlices = void 0; var tslib_1 = require("tslib"); var parser_1 = require("../../../../mol-io/reader/ccp4/parser"); var ccp4_1 = require("../../../../mol-model-formats/volume/ccp4"); function readHeader(name, file) { return tslib_1.__awaiter(this, void 0, void 0, function () { var _a, ccp4Header, littleEndian, header; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: return [4 /*yield*/, (0, parser_1.readCcp4Header)(file)]; case 1: _a = _b.sent(), ccp4Header = _a.header, littleEndian = _a.littleEndian; header = { name: name, valueType: (0, parser_1.getCcp4ValueType)(ccp4Header), grid: [ccp4Header.NX, ccp4Header.NY, ccp4Header.NZ], axisOrder: [ccp4Header.MAPC, ccp4Header.MAPR, ccp4Header.MAPS].map(function (i) { return i - 1; }), extent: [ccp4Header.NC, ccp4Header.NR, ccp4Header.NS], origin: (0, ccp4_1.getCcp4Origin)(ccp4Header), spacegroupNumber: ccp4Header.ISPG, cellSize: [ccp4Header.xLength, ccp4Header.yLength, ccp4Header.zLength], cellAngles: [ccp4Header.alpha, ccp4Header.beta, ccp4Header.gamma], littleEndian: littleEndian, dataOffset: (0, parser_1.getCcp4DataOffset)(ccp4Header), originalHeader: ccp4Header }; // "normalize" the grid axis order header.grid = [header.grid[header.axisOrder[0]], header.grid[header.axisOrder[1]], header.grid[header.axisOrder[2]]]; return [2 /*return*/, header]; } }); }); } function readSlices(data) { return tslib_1.__awaiter(this, void 0, void 0, function () { var slices, header, extent, originalHeader, sliceSize, sliceByteOffset, sliceCount, sliceByteCount; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: slices = data.slices, header = data.header; if (slices.isFinished) { return [2 /*return*/]; } extent = header.extent, originalHeader = header.originalHeader; sliceSize = extent[0] * extent[1]; sliceByteOffset = slices.buffer.elementByteSize * sliceSize * slices.slicesRead; sliceCount = Math.min(slices.sliceCapacity, extent[2] - slices.slicesRead); sliceByteCount = slices.buffer.elementByteSize * sliceCount * sliceSize; return [4 /*yield*/, (0, parser_1.readCcp4Slices)(originalHeader, slices.buffer, data.file, header.dataOffset + sliceByteOffset, sliceByteCount, header.littleEndian)]; case 1: _a.sent(); slices.slicesRead += sliceCount; slices.sliceCount = sliceCount; if (slices.slicesRead >= extent[2]) { slices.isFinished = true; } return [2 /*return*/]; } }); }); } exports.readSlices = readSlices; exports.Ccp4Provider = { readHeader: readHeader, readSlices: readSlices };