slimfits
Version:
Package for loading data stored in FITS data format
85 lines • 3.67 kB
JavaScript
import { DataResult, Constants } from './interfaces';
import { KeywordsManager, Keyword } from './utils/KeywordsManager';
import { PromiseUtils } from './utils/PromiseUtils';
import { RegisteredDataReaders } from './RegisteredDataReaders';
var FitsReader = /** @class */ (function () {
function FitsReader() {
}
FitsReader.readFitsAsync = function (file) {
var hdus = [];
var offsetBytes = 0;
return 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.promiseWhile(function () { return !endLineFound; }, function () {
return file.getStringAsync(offsetBytes + bytesRead, Constants.blockLength)
.then(function (block) {
bytesRead += Constants.blockLength;
for (var j = 0; j < Constants.maxKeywordsInBlock; j++) {
var line = block.substring(j * Constants.lineLength, (j + 1) * Constants.lineLength);
endLineFound = Keyword.isLastLine(line);
if (endLineFound) {
break;
}
var kw = 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.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.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 DataResult(data, readers[0].name); });
}
};
FitsReader.readDataSize = function (header) {
var readers = 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;
}());
export { FitsReader };
//# sourceMappingURL=FitsReader.js.map