slimfits
Version:
Package for loading data stored in FITS data format
87 lines • 3.95 kB
JavaScript
;
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