UNPKG

slimfits

Version:

Package for loading data stored in FITS data format

87 lines 3.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var interfaces_1 = require("./interfaces"); var KeywordsManager_1 = require("./utils/KeywordsManager"); var PromiseUtils_1 = require("./utils/PromiseUtils"); var RegisteredDataReaders_1 = require("./RegisteredDataReaders"); var FitsReader = /** @class */ (function () { function FitsReader() { } FitsReader.readFitsAsync = function (file) { var hdus = []; var offsetBytes = 0; return PromiseUtils_1.PromiseUtils.promiseWhile(function () { return offsetBytes < file.getByteLength(); }, function () { return FitsReader.readHduAsync(file, offsetBytes).then(function (hdu) { hdus.push(hdu); offsetBytes += hdu.bytesRead; }); }).then(function () { return hdus; }); }; FitsReader.readHeaderAsync = function (file, offsetBytes) { var endLineFound = false; var keywords = []; var bytesRead = 0; return PromiseUtils_1.PromiseUtils.promiseWhile(function () { return !endLineFound; }, function () { return file.getStringAsync(offsetBytes + bytesRead, interfaces_1.Constants.blockLength) .then(function (block) { bytesRead += interfaces_1.Constants.blockLength; for (var j = 0; j < interfaces_1.Constants.maxKeywordsInBlock; j++) { var line = block.substring(j * interfaces_1.Constants.lineLength, (j + 1) * interfaces_1.Constants.lineLength); endLineFound = KeywordsManager_1.Keyword.isLastLine(line); if (endLineFound) { break; } var kw = KeywordsManager_1.KeywordsManager.parseKeyword(line); keywords.push(kw); } return null; }); }).then(function () { return { header: keywords, bytesRead: bytesRead }; }); }; FitsReader.readHduAsync = function (file, offsetBytes) { return FitsReader.readHeaderAsync(file, offsetBytes).then(function (headerResult) { var naxis = KeywordsManager_1.KeywordsManager.getValue(headerResult.header, 'NAXIS', 0); var hdu = { header: headerResult.header, data: function () { return new Promise(function (resolve) { resolve(); }); }, bytesRead: 0 }; hdu.bytesRead += headerResult.bytesRead; hdu.bytesRead += FitsReader.readDataSize(hdu.header); if (naxis !== 0) { // has data var offset_1 = offsetBytes + headerResult.bytesRead; hdu.data = function () { return FitsReader.readDataAsync(file, offset_1, headerResult.header); }; } return hdu; }); }; FitsReader.readDataAsync = function (file, offsetBytes, header) { var readers = RegisteredDataReaders_1.RegisteredDataReaders.filter(function (reader) { return reader.canReadData(header); }); if (readers.length !== 1) { throw new Error('SlimFits was unable to read this file.'); } else { return readers[0].readDataAsync(file, offsetBytes, header) .then(function (data) { return new interfaces_1.DataResult(data, readers[0].name); }); } }; FitsReader.readDataSize = function (header) { var readers = RegisteredDataReaders_1.RegisteredDataReaders.filter(function (reader) { return reader.canReadData(header); }); if (readers.length !== 1) { throw new Error('SlimFits was unable to read this file.'); } else { return readers[0].readDataSize(header); } }; return FitsReader; }()); exports.FitsReader = FitsReader; //# sourceMappingURL=FitsReader.js.map