diff --git a/data-access/engine/src/common/include/fitsfiles.hpp b/data-access/engine/src/common/include/fitsfiles.hpp index 717069dff6351dcf2ae38ec1cef2929e31895324..ff0fd91e3885930fc932178b881dc11c9f156fad 100644 --- a/data-access/engine/src/common/include/fitsfiles.hpp +++ b/data-access/engine/src/common/include/fitsfiles.hpp @@ -39,9 +39,12 @@ namespace fitsfiles key_values_by_type key_values; }; + std::vector<Hdu> fname2hdrstr(std::string filename, const std::vector<std::string> extra_cards, unsigned int maxHduPos, unsigned int minHduPos = 1, const keys_by_type *keys = nullptr); + std::vector<Hdu> fname2hdrstr(std::string filename, unsigned int maxHduPos, unsigned int minHduPos = 1, const keys_by_type *keys = nullptr); + // for services std::string read_header(std::string pathname, unsigned int hdunum); diff --git a/data-access/engine/src/common/src/fitsfiles.cpp b/data-access/engine/src/common/src/fitsfiles.cpp index 27eeebbaa89080e4304afb925d9350dd128b9b63..798b5912375e957170579e242895c063f582bef9 100644 --- a/data-access/engine/src/common/src/fitsfiles.cpp +++ b/data-access/engine/src/common/src/fitsfiles.cpp @@ -362,8 +362,28 @@ string fitsfiles::append_card_if_not_in_header(string header, const vector<fits_ // deprecated +void append_cards(string& hdr, vector<string> cards) +{ + LOG_trace(__func__); + + static const string end_card{"END "}; + + size_t hdr_len = hdr.length(); + + if(hdr_len > 80) + { + if(end_card.compare(hdr.substr(hdr_len-80 ,80)) == 0) hdr.erase(hdr_len-80,80); + + for(long unsigned int i=0; i<cards.size(); i++) hdr += cards[i]; + + hdr += end_card; + } +} + + vector<fitsfiles::Hdu> fitsfiles::fname2hdrstr( - string filename, unsigned int maxHduPos, unsigned int minHduPos, + string filename, const vector<string> extra_cards, + unsigned int maxHduPos, unsigned int minHduPos, const keys_by_type* keys) { LOG_trace(__func__); @@ -384,6 +404,14 @@ vector<fitsfiles::Hdu> fitsfiles::fname2hdrstr( const bool apply_fixes = true; string header_str{hdr.get_header(apply_fixes)}; + // append extra cards + bool extra_cards_given = (extra_cards.size() > 0); + if(extra_cards_given) + { + // FIXME check for duplicates before appending + append_cards(header_str, extra_cards); + } + key_values_by_type key_values; if(keys != nullptr) @@ -397,3 +425,13 @@ vector<fitsfiles::Hdu> fitsfiles::fname2hdrstr( return vec_hdrs; } +vector<fitsfiles::Hdu> fitsfiles::fname2hdrstr( + string filename, unsigned int maxHduPos, unsigned int minHduPos, + const keys_by_type* keys) +{ + LOG_trace(__func__); + const vector<string> extra_cards; //no cards + + return fitsfiles::fname2hdrstr(filename, extra_cards, maxHduPos, minHduPos, keys); +} +