slimfits
Version:
Package for loading data stored in FITS data format
58 lines • 3.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var interfaces_1 = require("../interfaces");
var KeywordsManager_1 = require("../utils/KeywordsManager");
var LinearTransformers_1 = require("../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_1.KeywordsManager.hasValue(header, 'SIMPLE', true)
|| KeywordsManager_1.KeywordsManager.hasValue(header, 'XTENSION', 'IMAGE'))
&& !KeywordsManager_1.KeywordsManager.hasValue(header, 'GROUPS', true);
};
SimpleDataReader.prototype.readDataSize = function (header) {
var elementType = KeywordsManager_1.KeywordsManager.getValue(header, 'BITPIX', interfaces_1.BitPix.Unknown);
var elementTypeSize = interfaces_1.BitPixUtils.getByteSize(elementType);
if (KeywordsManager_1.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 / interfaces_1.Constants.blockLength) * interfaces_1.Constants.blockLength;
};
SimpleDataReader.prototype.readDataAsync = function (file, offsetBytes, header, changeEndian) {
if (changeEndian === void 0) { changeEndian = true; }
var dataType = KeywordsManager_1.KeywordsManager.getValue(header, 'BITPIX', interfaces_1.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_1.KeywordsManager.getValue(header, 'BSCALE', 1);
var bzero = KeywordsManager_1.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_1.LinearTransformers.getTransformerFor(dataType);
return transformer.transformBack(data, bscale, bzero);
});
}
else {
return promise;
}
}
else {
throw new Error('no data found in segment');
}
};
return SimpleDataReader;
}());
exports.SimpleDataReader = SimpleDataReader;
//# sourceMappingURL=SimpleDataReader.js.map