UNPKG

molstar

Version:

A comprehensive macromolecular library.

76 lines (75 loc) 3.91 kB
"use strict"; /** * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Dsn6Provider = exports.readSlices = void 0; var tslib_1 = require("tslib"); var parser_1 = require("../../../../mol-io/reader/dsn6/parser"); var typed_array_1 = require("../../../../mol-io/common/typed-array"); function readHeader(name, file) { return tslib_1.__awaiter(this, void 0, void 0, function () { var _a, dsn6Header, littleEndian, header; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: return [4 /*yield*/, (0, parser_1.readDsn6Header)(file)]; case 1: _a = _b.sent(), dsn6Header = _a.header, littleEndian = _a.littleEndian; header = { name: name, valueType: typed_array_1.TypedArrayValueType.Float32, grid: [dsn6Header.xRate, dsn6Header.yRate, dsn6Header.zRate].reverse(), axisOrder: [0, 1, 2].reverse(), extent: [dsn6Header.xExtent, dsn6Header.yExtent, dsn6Header.zExtent].reverse(), origin: [dsn6Header.xStart, dsn6Header.yStart, dsn6Header.zStart].reverse(), spacegroupNumber: 1, cellSize: [dsn6Header.xlen, dsn6Header.ylen, dsn6Header.zlen], cellAngles: [dsn6Header.alpha, dsn6Header.beta, dsn6Header.gamma], littleEndian: littleEndian, dataOffset: parser_1.dsn6HeaderSize, originalHeader: dsn6Header }; return [2 /*return*/, header]; } }); }); } function readSlices(data) { return tslib_1.__awaiter(this, void 0, void 0, function () { var slices, header, file, extent, dataOffset, originalHeader, sliceCount, byteCount, buffer; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: slices = data.slices, header = data.header, file = data.file; if (slices.isFinished) { return [2 /*return*/]; } extent = header.extent, dataOffset = header.dataOffset, originalHeader = header.originalHeader; sliceCount = extent[2]; byteCount = (0, parser_1.getDsn6Counts)(originalHeader).byteCount; if (byteCount > slices.maxBlockBytes) { throw new Error("dsn6 file to large, can't read ".concat(byteCount, " bytes at once, increase block size or use another file format")); } return [4 /*yield*/, file.readBuffer(dataOffset, byteCount)]; case 1: buffer = (_a.sent()).buffer; if (!(slices.values instanceof Float32Array)) { throw new Error("dsn6 reader only supports Float32Array for output values"); } return [4 /*yield*/, (0, parser_1.parseDsn6Values)(originalHeader, buffer, slices.values, header.littleEndian)]; case 2: _a.sent(); slices.slicesRead += sliceCount; slices.sliceCount = sliceCount; if (slices.slicesRead >= extent[2]) { slices.isFinished = true; } return [2 /*return*/]; } }); }); } exports.readSlices = readSlices; exports.Dsn6Provider = { readHeader: readHeader, readSlices: readSlices };