Open volodymyrss opened 6 months ago
@burnout87 as discussed by email
changes have been pushed to https://github.com/esg-epfl-apc/fits-reader you can use the built library fits-reader.js in the dist folder
For reference :
Basically you get a FITSFile object that has an array member called 'hdus' that contains all the file hdus, the fits reader wrapper added methods that let you more easily access the header and data part of each hdu but you won't be needing it now that everything has been moved directly to the FITSFile class.
The FITSFile class has a method getHDU(index) that will return the hdu object at the specified index in the hdus array. All the other methods use the index to let you specify which hdu you want to interact with.
You can use getHDUs() to get an array of json object describing all hdus etc.....
Each hdu object has two object members header and data.
There are library methods that you can call from these objects :
get("card_name") on a header object will get you the value for that specific card
getColumn(column_name, callback) on a table or bintable hdu data object will return the column data
Volodymyr said that you were using the same types of data I'm using (Table and Bintable) so for these kinds of hdu the hdu object data member should have a 'columns' array property that gives you the name of each column that you can use with getColumn to get the data.
I made a few functions that you call directly from the FITSFile object that do that for you :
getHeaderCardValueByNameFromHDU(hdu_index, card_name) returns the specific card value fro the chosen hdu
getHeaderCardsValueFromHDU(hdu_index) return all cards (card name + card value) as an array for a specific hdu
getColumnsJSONDataFromHDU(hdu_index) return an array of json object containing all the data for every columns
thanks a lot @francoismg , I will try and let you know
hi again @francoismg ,
I just tried your code, and I am not sure I am doing everything correctly:
this is the code I am using: https://github.com/oda-hub/frontend-tab-generator/blob/e5b98595336a09efac065a0587520d62c04646e7/mmoda_tab_generator/templates/euclid/mmoda_euclid.js
basically, in the frontend I have a file input, once the file is selected, the change
event is triggered, and I get the following error:
XHRGET
http://localhost/mmoda/spiacs_lc_query.fits
[HTTP/1.1 404 Not Found 14861ms]
Uncaught (in promise) Error: HTTP error, status = 404
getFile http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:24
promise callback*getFile http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:22
commonReady http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:62
jQuery 8
_initField http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:32
_init http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:17
BootstrapValidator http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:13
bootstrapValidator http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:145
jQuery 2
bootstrapValidator http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:145
all_instruments_forms_set_bootstrapValidator http://localhost/mmoda/sites/all/modules/mmoda/js/mmoda.instrument.js?sepek4:685
commonReady http://localhost/mmoda/sites/all/modules/mmoda/js/mmoda.instrument.js?sepek4:721
jQuery 8
hi again @francoismg ,
I just tried your code, and I am not sure I am doing everything correctly:
this is the code I am using: https://github.com/oda-hub/frontend-tab-generator/blob/e5b98595336a09efac065a0587520d62c04646e7/mmoda_tab_generator/templates/euclid/mmoda_euclid.js
basically, in the frontend I have a file input, once the file is selected, the
change
event is triggered, and I get the following error:XHRGET http://localhost/mmoda/spiacs_lc_query.fits [HTTP/1.1 404 Not Found 14861ms] Uncaught (in promise) Error: HTTP error, status = 404 getFile http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:24 promise callback*getFile http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:22 commonReady http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:62 jQuery 8 _initField http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:32 _init http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:17 BootstrapValidator http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:13 bootstrapValidator http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:145 jQuery 2 bootstrapValidator http://localhost/mmoda/sites/all/libraries/bootstrap-form-validator/js/bootstrapValidator.min.js?sepek4:145 all_instruments_forms_set_bootstrapValidator http://localhost/mmoda/sites/all/modules/mmoda/js/mmoda.instrument.js?sepek4:685 commonReady http://localhost/mmoda/sites/all/modules/mmoda/js/mmoda.instrument.js?sepek4:721 jQuery 8
hello, is that the file you are trying to fetch http://localhost/mmoda/spiacs_lc_query.fits ?
Given that it's an url I assume you have some kind of custom file select where the user choose a remote file and then you try to fetch it with its url is that it?
If that's the case it should work I just tested it locally with that http://localhost:7100/_test_files/spiacs_lc_query.fits and it was working. I will need to make more tests on my own and get back to you
Just in case if it's a standard file input where you choose a local file I do it like that
file_input.addEventListener('change', function(event) {
let file = event.target.files[0];
if(file_type === 'fits') {
file.arrayBuffer().then(arrayBuffer => {
readFile(array_buffer);
}).catch(error => {
console.error('Error reading file as ArrayBuffer:', error);
});
}
});
thanks @francoismg , it works. Only change I had to was the following:
// let hdu = fits_file.getHDU(hdu_index);
let hdu = fits_file.hdus[hdu_index];
as the call to the function getHDU
throws the following exception:
Error reading file as ArrayBuffer: TypeError: this.file is undefined
value http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/fits-reader/dist/fits-reader/fits-reader.js?sepek4:1
readFile http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:21
commonReady http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:44
promise callback*commonReady/< http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:43
commonReady http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:41
am I perhaps missing some import?
Just in case if it's a standard file input where you choose a local file I do it like that
And yes, it's a standard file input
thanks @francoismg , it works. Only change I had to was the following:
// let hdu = fits_file.getHDU(hdu_index); let hdu = fits_file.hdus[hdu_index];
as the call to the function
getHDU
throws the following exception:Error reading file as ArrayBuffer: TypeError: this.file is undefined value http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/fits-reader/dist/fits-reader/fits-reader.js?sepek4:1 readFile http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:21 commonReady http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:44 promise callback*commonReady/< http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:43 commonReady http://localhost/mmoda/sites/all/modules/mmoda/instruments/mmoda_photoz_euclid/js/mmoda_euclid.js?sepek4:41
am I perhaps missing some import?
ok yea that's my bad, should be fixed now the updated lib has been pushed
ok yea that's my bad, should be fixed now the updated lib has been pushed
just checked, I confirm it works, thanks
@burnout87 can ask @francoismg