Loading data-access/engine/src/common/include/fitsfiles.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ namespace fitsfiles void add_cards_if_missing(const std::string pathname, unsigned int hdunum, const std::vector<struct fits_card> cards); int mod_value(std::string filename, std::string token, std::string keyvalue); std::map<std::string, std::string> read_header_wcs_coord_type(const std::string pathname, unsigned int hdunum, char altwcs = ' '); double calc_nullvals(std::string pathname, unsigned int hdunum, unsigned long long & null_cnt, unsigned long long & total_cnt); Loading data-access/engine/src/common/src/fitsfiles.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,31 @@ string fitsfiles::read_card(const std::string pathname, unsigned int hdunum, con } map<string, string> fitsfiles::read_header_wcs_coord_type(const std::string pathname, unsigned int hdunum, char altwcs) { fits::header hdr(pathname, hdunum); string alt{ ( altwcs == ' ' ? string{""} : string{altwcs} ) }; // FIXME does not support alternative calibration (one char at the end of keyname) set<string> keys{"SPECSYS" + alt,"SSYSOBS" + alt}; string keyroot{"CTYPE"}; int i=1; string istr{to_string(i)}; while( hdr.contains_card( keyroot + istr + alt) ) { keys.insert("CTYPE" + istr + alt); keys.insert("CUNIT" + istr + alt); istr = to_string(i++); } return hdr.parse_string_cards(keys); } void fitsfiles::add_cards_if_missing(const std::string pathname, unsigned int hdunum, const std::vector<struct fits_card> cards) { fits::header hdr(pathname, hdunum, READWRITE); Loading data-access/engine/src/vlkb/src/main.cpp +39 −2 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ namespace vlkb << "Usage: " << progname << " <command> [cmd-options] [cmd-args]" << endl << "\n where commands are:\n " << "\n\t cutout imcopy cutpixels multicutout mergefiles\n" << "\n\t listbounds header headermodif skyvertices overlap\n" << "\n\t listbounds header headermodif headerwcs skyvertices overlap\n" << "\n\t nullvals dropdegen checkcard addcard modcard rawdelcard\n" << std::endl << "Version: " << VERSIONSTR << " " << BUILD << std::endl; Loading @@ -55,7 +55,8 @@ namespace vlkb enum cmd_set { multicutout, mergefiles, cutout, imcopy, cutpixels, listbounds, header, headermodif, overlap, skyvertices, nullvals, dropdegen, checkcard, addcard, modcard, rawdelcard}; listbounds, header, headermodif, headerwcs, overlap, skyvertices, nullvals, dropdegen, checkcard, addcard, modcard, rawdelcard}; // from bash or interpreters usually receive params as strings Loading @@ -72,6 +73,7 @@ namespace vlkb else if(cmdstr.compare("listbounds") == 0) cmd = listbounds; else if(cmdstr.compare("header") == 0) cmd = header; else if(cmdstr.compare("headermodif") == 0) cmd = headermodif; else if(cmdstr.compare("headerwcs") == 0) cmd = headerwcs; else if(cmdstr.compare("overlap") == 0) cmd = overlap; else if(cmdstr.compare("skyvertices") == 0) cmd = skyvertices; else if(cmdstr.compare("nullvals") == 0) cmd = nullvals; Loading Loading @@ -320,6 +322,40 @@ int cmd_listbounds(int argc, char * argv[]) return rc; } int cmd_header_wcs(int argc, char * argv[]) { int rc; if (argc < 2) { std::cerr << "Usage: header_wcs <pathname.fits>...\n" << "\n" << "Prints current header WCS axes info.\n"; rc = EXIT_FAILURE; } else { unsigned int hdunum = 1; char altwcs = ' '; for(int i=1; i<argc; i++) { string pathname(argv[i]); std::map<std::string, std::string> card_values{fitsfiles::read_header_wcs_coord_type(pathname, hdunum, altwcs)}; for(auto it = card_values.cbegin(); it != card_values.cend(); ++it) { std::cout << it->first << " " << it->second << ", "; } std::cout << pathname << std::endl; } rc = EXIT_SUCCESS; } return rc; } int cmd_header(int argc, char * argv[]) { Loading Loading @@ -679,6 +715,7 @@ int main (int argc, char * argv[]) case vlkb::listbounds: rc = cmd_listbounds(cmd_argc, cmd_argv); break; case vlkb::header: rc = cmd_header(cmd_argc, cmd_argv); break; case vlkb::headermodif: rc = cmd_header_modif(cmd_argc, cmd_argv); break; case vlkb::headerwcs: rc = cmd_header_wcs(cmd_argc, cmd_argv); break; case vlkb::skyvertices: rc = cmd_skyvertices(cmd_argc, cmd_argv); break; case vlkb::overlap: rc = cmd_overlap(cmd_argc, cmd_argv); break; Loading Loading
data-access/engine/src/common/include/fitsfiles.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,7 @@ namespace fitsfiles void add_cards_if_missing(const std::string pathname, unsigned int hdunum, const std::vector<struct fits_card> cards); int mod_value(std::string filename, std::string token, std::string keyvalue); std::map<std::string, std::string> read_header_wcs_coord_type(const std::string pathname, unsigned int hdunum, char altwcs = ' '); double calc_nullvals(std::string pathname, unsigned int hdunum, unsigned long long & null_cnt, unsigned long long & total_cnt); Loading
data-access/engine/src/common/src/fitsfiles.cpp +25 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,31 @@ string fitsfiles::read_card(const std::string pathname, unsigned int hdunum, con } map<string, string> fitsfiles::read_header_wcs_coord_type(const std::string pathname, unsigned int hdunum, char altwcs) { fits::header hdr(pathname, hdunum); string alt{ ( altwcs == ' ' ? string{""} : string{altwcs} ) }; // FIXME does not support alternative calibration (one char at the end of keyname) set<string> keys{"SPECSYS" + alt,"SSYSOBS" + alt}; string keyroot{"CTYPE"}; int i=1; string istr{to_string(i)}; while( hdr.contains_card( keyroot + istr + alt) ) { keys.insert("CTYPE" + istr + alt); keys.insert("CUNIT" + istr + alt); istr = to_string(i++); } return hdr.parse_string_cards(keys); } void fitsfiles::add_cards_if_missing(const std::string pathname, unsigned int hdunum, const std::vector<struct fits_card> cards) { fits::header hdr(pathname, hdunum, READWRITE); Loading
data-access/engine/src/vlkb/src/main.cpp +39 −2 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ namespace vlkb << "Usage: " << progname << " <command> [cmd-options] [cmd-args]" << endl << "\n where commands are:\n " << "\n\t cutout imcopy cutpixels multicutout mergefiles\n" << "\n\t listbounds header headermodif skyvertices overlap\n" << "\n\t listbounds header headermodif headerwcs skyvertices overlap\n" << "\n\t nullvals dropdegen checkcard addcard modcard rawdelcard\n" << std::endl << "Version: " << VERSIONSTR << " " << BUILD << std::endl; Loading @@ -55,7 +55,8 @@ namespace vlkb enum cmd_set { multicutout, mergefiles, cutout, imcopy, cutpixels, listbounds, header, headermodif, overlap, skyvertices, nullvals, dropdegen, checkcard, addcard, modcard, rawdelcard}; listbounds, header, headermodif, headerwcs, overlap, skyvertices, nullvals, dropdegen, checkcard, addcard, modcard, rawdelcard}; // from bash or interpreters usually receive params as strings Loading @@ -72,6 +73,7 @@ namespace vlkb else if(cmdstr.compare("listbounds") == 0) cmd = listbounds; else if(cmdstr.compare("header") == 0) cmd = header; else if(cmdstr.compare("headermodif") == 0) cmd = headermodif; else if(cmdstr.compare("headerwcs") == 0) cmd = headerwcs; else if(cmdstr.compare("overlap") == 0) cmd = overlap; else if(cmdstr.compare("skyvertices") == 0) cmd = skyvertices; else if(cmdstr.compare("nullvals") == 0) cmd = nullvals; Loading Loading @@ -320,6 +322,40 @@ int cmd_listbounds(int argc, char * argv[]) return rc; } int cmd_header_wcs(int argc, char * argv[]) { int rc; if (argc < 2) { std::cerr << "Usage: header_wcs <pathname.fits>...\n" << "\n" << "Prints current header WCS axes info.\n"; rc = EXIT_FAILURE; } else { unsigned int hdunum = 1; char altwcs = ' '; for(int i=1; i<argc; i++) { string pathname(argv[i]); std::map<std::string, std::string> card_values{fitsfiles::read_header_wcs_coord_type(pathname, hdunum, altwcs)}; for(auto it = card_values.cbegin(); it != card_values.cend(); ++it) { std::cout << it->first << " " << it->second << ", "; } std::cout << pathname << std::endl; } rc = EXIT_SUCCESS; } return rc; } int cmd_header(int argc, char * argv[]) { Loading Loading @@ -679,6 +715,7 @@ int main (int argc, char * argv[]) case vlkb::listbounds: rc = cmd_listbounds(cmd_argc, cmd_argv); break; case vlkb::header: rc = cmd_header(cmd_argc, cmd_argv); break; case vlkb::headermodif: rc = cmd_header_modif(cmd_argc, cmd_argv); break; case vlkb::headerwcs: rc = cmd_header_wcs(cmd_argc, cmd_argv); break; case vlkb::skyvertices: rc = cmd_skyvertices(cmd_argc, cmd_argv); break; case vlkb::overlap: rc = cmd_overlap(cmd_argc, cmd_argv); break; Loading