From 939c2fa56788c19b23d179294473db46db7aa0c7 Mon Sep 17 00:00:00 2001 From: Robert Butora <robert.butora@inaf.it> Date: Wed, 19 Feb 2025 19:56:35 +0200 Subject: [PATCH] fitsfiles: adds read-header with appending extra cards --- .../engine/src/common/include/fitsfiles.hpp | 3 ++ .../engine/src/common/src/fitsfiles.cpp | 40 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/data-access/engine/src/common/include/fitsfiles.hpp b/data-access/engine/src/common/include/fitsfiles.hpp index 717069d..ff0fd91 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 27eeebb..798b591 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); +} + -- GitLab