diff --git a/data-access/engine/src/vlkb/src/ast.cpp b/data-access/engine/src/vlkb/src/ast.cpp index 60c05835e7f6730500b6d3a2b406afedab857c3a..578a35101ebc1970c7876eb3b7b827c9cb073b22 100644 --- a/data-access/engine/src/vlkb/src/ast.cpp +++ b/data-access/engine/src/vlkb/src/ast.cpp @@ -35,7 +35,7 @@ int vlkb_skyvertices(const string& pathname, const string& skysys_str) int maxHdu = 1;// FIXMEINT_MAX; // read all HDU's - std::vector<fitsfiles::Hdu> allHdus = + std::vector<fitsfiles::Hdu> allHdus = fitsfiles::fname2hdrstr(pathname, maxHdu); for(unsigned int i=0; i<allHdus.size(); i++) @@ -67,7 +67,7 @@ int vlkb_listbounds(const string& skysys_str, const string& specsys_str, const s int maxHdu = 1;//FIXME INT_MAX; // read all HDU's - std::vector<fitsfiles::Hdu> allHdus = + std::vector<fitsfiles::Hdu> allHdus = fitsfiles::fname2hdrstr(pathname, maxHdu); for(unsigned int i=0; i<allHdus.size(); i++) @@ -88,7 +88,7 @@ int vlkb_listbounds(const string& skysys_str, const string& specsys_str, const s //--------------------------------------------------------------------- -// header modif coord sys +// header backup and modif //--------------------------------------------------------------------- /* const string VELOLSRK{"System=VELO,StdOfRest=LSRK,Unit=km/s"}; @@ -102,6 +102,33 @@ void write_previous(string header, string filename) } +int header_backup(const string& pathname, bool backup) +{ + LOG_trace(__func__); + + int maxHdu = 1;//FIXME INT_MAX; // read all HDU's + + std::vector<fitsfiles::Hdu> allHdus = + fitsfiles::fname2hdrstr(pathname, maxHdu); + + for(unsigned int i=0; i<allHdus.size(); i++) + { + cerr << "HDU#" << i << endl; + + fitsfiles::Hdu hd = allHdus.at(i); + + if(backup) + write_previous(hd.m_header, pathname +"hdr" + ((i>0) ? "#" + to_string(i+1) : "") ); + else + cout << hd.m_header << endl; + + // FIXME remove all explicit cout cerr to main.cpp and here use ostream& + + } + + return 0; +} + int header_modif_coordsys(const string& skysys_str, const string& specsys_str, const string& pathname) { @@ -109,7 +136,7 @@ int header_modif_coordsys(const string& skysys_str, const string& specsys_str, c int maxHdu = 1;//FIXME INT_MAX; // read all HDU's - std::vector<fitsfiles::Hdu> allHdus = + std::vector<fitsfiles::Hdu> allHdus = fitsfiles::fname2hdrstr(pathname, maxHdu); for(unsigned int i=0; i<allHdus.size(); i++) @@ -132,6 +159,8 @@ int header_modif_coordsys(const string& skysys_str, const string& specsys_str, c } + + //--------------------------------------------------------------------- // overlap with area given in query-string form (name=value&...) //--------------------------------------------------------------------- @@ -171,7 +200,7 @@ int vlkb_overlap(const string& pathname, const string& region, vector<uint_bound int maxHdu = 1;// INT_MAX; FIXME fitsfiles::header throws error reading behind end-of-file due to INT_MAX - std::vector<fitsfiles::Hdu> allHdus = + std::vector<fitsfiles::Hdu> allHdus = fitsfiles::fname2hdrstr(pathname, maxHdu); const coordinates coord = parse_coordinates(region.c_str()); diff --git a/data-access/engine/src/vlkb/src/ast.hpp b/data-access/engine/src/vlkb/src/ast.hpp index 38683d62c92b672144f4a9ebf6ee8d1608125305..c6f417bccc403370353613f2818c428bfc270c90 100644 --- a/data-access/engine/src/vlkb/src/ast.hpp +++ b/data-access/engine/src/vlkb/src/ast.hpp @@ -8,6 +8,7 @@ int vlkb_skyvertices(const std::string& pathname, const std::string& skysys_str); int vlkb_listbounds(const std::string& skysys_str, const std::string& specsys_str, const std::string& pathname); +int header_backup(const std::string& pathname, bool backup = false); int header_modif_coordsys(const std::string& skysys_str, const std::string& specsys_str, const std::string& pathname); int vlkb_overlap(const std::string& pathname, const std::string& region, std::vector<uint_bounds>& bnds); diff --git a/data-access/engine/src/vlkb/src/main.cpp b/data-access/engine/src/vlkb/src/main.cpp index 741b14edd2c2c9797d8d0383658cd615bb828151..cf0c17ce1065fdc9ab7109aecd19bdf81a42e539 100644 --- a/data-access/engine/src/vlkb/src/main.cpp +++ b/data-access/engine/src/vlkb/src/main.cpp @@ -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 skyvertices overlap\n" + << "\n\t listbounds header headermodif skyvertices overlap\n" << "\n\t nullvals dropdegen checkcard addcard modcard rawdelcard\n" << std::endl << "Version: " << VERSIONSTR << " " << BUILD << std::endl; @@ -55,7 +55,7 @@ namespace vlkb enum cmd_set { multicutout, mergefiles, cutout, imcopy, cutpixels, - listbounds, header, overlap, skyvertices, nullvals, dropdegen, checkcard, addcard, modcard, rawdelcard}; + listbounds, header, headermodif, overlap, skyvertices, nullvals, dropdegen, checkcard, addcard, modcard, rawdelcard}; // from bash or interpreters usually receive params as strings @@ -64,19 +64,20 @@ namespace vlkb { cmd_set cmd; - if(cmdstr.compare("multicutout") == 0) cmd = multicutout; + if(cmdstr.compare("multicutout") == 0) cmd = multicutout; else if(cmdstr.compare("mergefiles") == 0) cmd = mergefiles; - else if(cmdstr.compare("cutout") == 0) cmd = cutout; - else if(cmdstr.compare("imcopy") == 0) cmd = imcopy; + else if(cmdstr.compare("cutout") == 0) cmd = cutout; + else if(cmdstr.compare("imcopy") == 0) cmd = imcopy; else if(cmdstr.compare("cutpixels") == 0) cmd = cutpixels; 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("overlap") == 0) cmd = overlap; else if(cmdstr.compare("skyvertices") == 0) cmd = skyvertices; - else if(cmdstr.compare("nullvals") == 0) cmd = nullvals; + else if(cmdstr.compare("nullvals") == 0) cmd = nullvals; else if(cmdstr.compare("dropdegen") == 0) cmd = dropdegen; else if(cmdstr.compare("checkcard") == 0) cmd = checkcard; - else if(cmdstr.compare("addcard") == 0) cmd = addcard; + else if(cmdstr.compare("addcard") == 0) cmd = addcard; else if(cmdstr.compare("modcard") == 0) cmd = modcard; else if(cmdstr.compare("rawdelcard") == 0) cmd = rawdelcard; else @@ -327,7 +328,46 @@ int cmd_header(int argc, char * argv[]) if (argc < 2) { std::cerr - << "Usage: header --sky=<SkySystem> --spec=<SpecSystem> <filename.fits>... \n" + << "Usage: header [--backup] <pathname.fits>...\n" + << "\n" + << "Prints current header or writes the header into a file with the same pathname but 'fitshdr' extension.\n" + << "Arguments:\n" + << " --backup write current header from file 'pathname.fits' to 'pathname.fitshdr#n' where n is the HDU number.\n"; + rc = EXIT_FAILURE; + } + else + { + bool backup = false; + + for(int i=1; i<argc; i++) + { + if(0 == (string(argv[i]).substr(0,2+6)).compare("--backup")) + { + backup = true; + } + else + { + string pathname(argv[i]); + cout << to_string(i) << " : " << pathname << endl; + + rc = header_backup(pathname, backup); + std::cout << "header_backup rc: " << rc << std::endl; + } + } + rc = EXIT_SUCCESS; + } + return rc; +} + + +int cmd_header_modif(int argc, char * argv[]) +{ + int rc; + + if (argc < 2) + { + std::cerr + << "Usage: headermodif --sky=<SkySystem> --spec=<SpecSystem> <filename.fits>... \n" << "\n" << "Modify header for new coord system.\n" << "Arguments:\n" @@ -638,6 +678,7 @@ int main (int argc, char * argv[]) case vlkb::nullvals: rc = cmd_nullvals(cmd_argc, cmd_argv); break; 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::skyvertices: rc = cmd_skyvertices(cmd_argc, cmd_argv); break; case vlkb::overlap: rc = cmd_overlap(cmd_argc, cmd_argv); break;