slimfits
Version:
Package for loading data stored in FITS data format
56 lines • 2.7 kB
JavaScript
import { Constants, BitPix, BitPixUtils } from '../interfaces';
import { KeywordsManager } from '../utils/KeywordsManager';
import { LinearTransformers } from '../utils/LinearTransformers';
var SimpleDataReader = /** @class */ (function () {
function SimpleDataReader() {
}
Object.defineProperty(SimpleDataReader.prototype, "name", {
get: function () {
return 'simple data';
},
enumerable: true,
configurable: true
});
SimpleDataReader.prototype.canReadData = function (header) {
return (KeywordsManager.hasValue(header, 'SIMPLE', true)
|| KeywordsManager.hasValue(header, 'XTENSION', 'IMAGE'))
&& !KeywordsManager.hasValue(header, 'GROUPS', true);
};
SimpleDataReader.prototype.readDataSize = function (header) {
var elementType = KeywordsManager.getValue(header, 'BITPIX', BitPix.Unknown);
var elementTypeSize = BitPixUtils.getByteSize(elementType);
if (KeywordsManager.hasValue(header, 'NAXIS', 0)) {
return 0;
}
var length = header
.filter(function (k) { return k.key.indexOf('NAXIS') === 0 && k.key !== 'NAXIS'; })
.reduce(function (prev, cur) { return prev * cur.value; }, 1);
return Math.ceil(elementTypeSize * length / Constants.blockLength) * Constants.blockLength;
};
SimpleDataReader.prototype.readDataAsync = function (file, offsetBytes, header, changeEndian) {
if (changeEndian === void 0) { changeEndian = true; }
var dataType = KeywordsManager.getValue(header, 'BITPIX', BitPix.Unknown);
var naxisKeywords = header.filter(function (k) { return k.key.indexOf('NAXIS', 0) === 0 && k.key !== 'NAXIS'; });
var length = naxisKeywords.map(function (k) { return k.value; }).reduce(function (a, b) { return a * b; }, 1);
var bscale = KeywordsManager.getValue(header, 'BSCALE', 1);
var bzero = KeywordsManager.getValue(header, 'BZERO', 0);
if (naxisKeywords.length > 0 && length !== 0) {
var promise = file.getDataAsync(offsetBytes, length, dataType, changeEndian);
if (bscale !== 1 || bzero !== 0) {
return promise.then(function (data) {
var transformer = LinearTransformers.getTransformerFor(dataType);
return transformer.transformBack(data, bscale, bzero);
});
}
else {
return promise;
}
}
else {
throw new Error('no data found in segment');
}
};
return SimpleDataReader;
}());
export { SimpleDataReader };
//# sourceMappingURL=SimpleDataReader.js.map