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