molstar
Version:
A comprehensive macromolecular library.
82 lines (81 loc) • 3.3 kB
JavaScript
/**
* 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;
;