UNPKG

slimfits

Version:

Package for loading data stored in FITS data format

52 lines 3.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var interfaces_1 = require("../interfaces"); var KeywordsManager_1 = require("../utils/KeywordsManager"); var ArrayUtils_1 = require("../utils/ArrayUtils"); var RandomGroupsDataReader = /** @class */ (function () { function RandomGroupsDataReader() { } Object.defineProperty(RandomGroupsDataReader.prototype, "name", { get: function () { return 'random groups data'; }, enumerable: true, configurable: true }); RandomGroupsDataReader.prototype.canReadData = function (header) { return KeywordsManager_1.KeywordsManager.hasValue(header, 'GROUPS', true) && KeywordsManager_1.KeywordsManager.hasValue(header, 'NAXIS1', 0); }; RandomGroupsDataReader.prototype.readDataSize = function (header) { var elementType = KeywordsManager_1.KeywordsManager.getValue(header, 'BITPIX', interfaces_1.BitPix.Unknown); var groupLength = header.filter(function (k) { return k.key.indexOf('NAXIS') === 0 && k.key !== 'NAXIS' && k.key !== 'NAXIS1' && k.value !== 1; }).reduce(function (prev, cur) { return prev * cur.value; }, 1); var groupsCount = KeywordsManager_1.KeywordsManager.getValue(header, 'GCOUNT', 0); var paramsLength = KeywordsManager_1.KeywordsManager.getValue(header, 'PCOUNT', 0); var elementTypeSize = interfaces_1.BitPixUtils.getByteSize(elementType); return Math.ceil(groupsCount * (paramsLength + groupLength) * elementTypeSize / interfaces_1.Constants.blockLength) * interfaces_1.Constants.blockLength; }; RandomGroupsDataReader.prototype.readDataAsync = function (file, offsetBytes, header, changeEndian) { if (changeEndian === void 0) { changeEndian = true; } var elementType = KeywordsManager_1.KeywordsManager.getValue(header, 'BITPIX', interfaces_1.BitPix.Unknown); var elementTypeSize = interfaces_1.BitPixUtils.getByteSize(elementType); var groupsCount = KeywordsManager_1.KeywordsManager.getValue(header, 'GCOUNT', 0); var paramsLength = KeywordsManager_1.KeywordsManager.getValue(header, 'PCOUNT', 0); var groupLength = header.filter(function (k) { return k.key.indexOf('NAXIS') === 0 && k.key !== 'NAXIS' && k.key !== 'NAXIS1' && k.value !== 1; }).reduce(function (prev, cur) { return prev * cur.value; }, 1); var paramsAndGroupLength = paramsLength + groupLength; var paramsByteLength = paramsLength * elementTypeSize; return file.getDataAsync(offsetBytes, paramsAndGroupLength * groupsCount, elementType, changeEndian) .then(function (x) { var params = ArrayUtils_1.ArrayUtils.generateTypedArray(elementType, groupsCount * paramsLength); var data = ArrayUtils_1.ArrayUtils.generateTypedArray(elementType, groupsCount * groupLength); ArrayUtils_1.ArrayUtils.pluckColumn(x.buffer, params.buffer, groupsCount, paramsAndGroupLength * elementTypeSize, 0, paramsLength, elementType, false); ArrayUtils_1.ArrayUtils.pluckColumn(x.buffer, data.buffer, groupsCount, paramsAndGroupLength * elementTypeSize, paramsByteLength, groupLength, elementType, false); return { params: ArrayUtils_1.ArrayUtils.chunk(params.buffer, elementType, paramsLength), data: ArrayUtils_1.ArrayUtils.chunk(data.buffer, elementType, groupLength) }; }); }; return RandomGroupsDataReader; }()); exports.RandomGroupsDataReader = RandomGroupsDataReader; //# sourceMappingURL=RandomGroupsDataReader.js.map