UNPKG

molstar

Version:

A comprehensive macromolecular library.

82 lines (81 loc) 3.3 kB
"use strict"; /** * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.open = exports.getProviderFromType = exports.compareHeaders = exports.assignSliceBuffer = void 0; var tslib_1 = require("tslib"); var File = tslib_1.__importStar(require("../common/file")); var ccp4_1 = require("./format/ccp4"); var typed_array_1 = require("../../../mol-io/common/typed-array"); var dsn6_1 = require("./format/dsn6"); var file_handle_1 = require("../../common/file-handle"); function assignSliceBuffer(data, blockSizeInMB) { var _a = data.header, extent = _a.extent, valueType = _a.valueType; var maxBlockBytes = blockSizeInMB * 1024 * 1024; var sliceSize = extent[0] * extent[1] * (0, typed_array_1.getElementByteSize)(valueType); var sliceCapacity = Math.max(1, Math.floor(Math.min(maxBlockBytes, sliceSize * extent[2]) / sliceSize)); var buffer = (0, typed_array_1.createTypedArrayBufferContext)(sliceCapacity * extent[0] * extent[1], valueType); data.slices = { buffer: buffer, maxBlockBytes: maxBlockBytes, sliceCapacity: sliceCapacity, slicesRead: 0, values: buffer.values, sliceCount: 0, isFinished: false }; } exports.assignSliceBuffer = assignSliceBuffer; function compareProp(a, b) { if (a instanceof Array && b instanceof Array) { if (a.length !== b.length) return false; for (var i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; } return a === b; } function compareHeaders(a, b) { for (var _i = 0, _a = ['grid', 'axisOrder', 'extent', 'origin', 'spacegroupNumber', 'cellSize', 'cellAngles', 'mode']; _i < _a.length; _i++) { var p = _a[_i]; if (!compareProp(a[p], b[p])) return false; } return true; } exports.compareHeaders = compareHeaders; function getProviderFromType(type) { switch (type) { case 'ccp4': return ccp4_1.Ccp4Provider; case 'dsn6': return dsn6_1.Dsn6Provider; } } exports.getProviderFromType = getProviderFromType; function open(name, filename, type) { return tslib_1.__awaiter(this, void 0, void 0, function () { var provider, descriptor, file, header, data; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: provider = getProviderFromType(type); return [4 /*yield*/, File.openRead(filename)]; case 1: descriptor = _a.sent(); file = (0, file_handle_1.fileHandleFromDescriptor)(descriptor, filename); return [4 /*yield*/, provider.readHeader(name, file)]; case 2: header = _a.sent(); data = { header: header, file: file, slices: void 0 }; return [2 /*return*/, { data: data, provider: provider }]; } }); }); } exports.open = open;