Commit 41fcf69cb31cc601406ced58c86ef1fd9b9fd928
1 parent
5f79af82
GSkyMap::save() now overwrites existing files if clobber=true
Showing
7 changed files
with
45 additions
and
30 deletions
ChangeLog
| 1 | -2016-06-08 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> | 1 | +2016-06-09 Juergen Knoedlseder <jurgen.knodlseder@irap.omp.eu> |
| 2 | 2 | ||
| 3 | * Version 1.1.0 released | 3 | * Version 1.1.0 released |
| 4 | ========================= | 4 | ========================= |
| 5 | 5 | ||
| 6 | + GSkyMap::save() now overwrites files (#1787) | ||
| 6 | Add GCTAPsfTable class (#1786) | 7 | Add GCTAPsfTable class (#1786) |
| 7 | Use std::vector for naxes argument in GFitsImage (#1779) | 8 | Use std::vector for naxes argument in GFitsImage (#1779) |
| 8 | GCTACubePsf and GCTACubeEdisp now save 4D images | 9 | GCTACubePsf and GCTACubeEdisp now save 4D images |
NEWS
| @@ -2,7 +2,7 @@ New Features and Important Changes in GammaLib 1.1.0 | @@ -2,7 +2,7 @@ New Features and Important Changes in GammaLib 1.1.0 | ||
| 2 | 2 | ||
| 3 | Author(s) : Juergen Knoedlseder | 3 | Author(s) : Juergen Knoedlseder |
| 4 | 4 | ||
| 5 | -8 June 2016 | 5 | +9 June 2016 |
| 6 | 6 | ||
| 7 | 7 | ||
| 8 | 1. Introduction | 8 | 1. Introduction |
| @@ -121,6 +121,7 @@ The interface for the following methods has been changed: | @@ -121,6 +121,7 @@ The interface for the following methods has been changed: | ||
| 121 | - GFitsImageShort naxes constructor | 121 | - GFitsImageShort naxes constructor |
| 122 | - GFitsImageULong naxes constructor | 122 | - GFitsImageULong naxes constructor |
| 123 | - GFitsImageUShort naxes constructor | 123 | - GFitsImageUShort naxes constructor |
| 124 | +- GSkyMap::save() | ||
| 124 | 125 | ||
| 125 | 126 | ||
| 126 | 3. Configuration | 127 | 3. Configuration |
| @@ -252,6 +253,9 @@ the number of dimensions. Note that a longitude and latitude dimensions | @@ -252,6 +253,9 @@ the number of dimensions. Note that a longitude and latitude dimensions | ||
| 252 | are not counted in the map dimensions, i.e. a 3D image cube with | 253 | are not counted in the map dimensions, i.e. a 3D image cube with |
| 253 | longitude, latitude and a number of maps has a dimension of 1 (#1733). | 254 | longitude, latitude and a number of maps has a dimension of 1 (#1733). |
| 254 | 255 | ||
| 256 | +An optional extname argument has been added to the GSkyMap::save() method | ||
| 257 | +so that the extension name can be set (#1787). | ||
| 258 | + | ||
| 255 | 259 | ||
| 256 | 13. Support module | 260 | 13. Support module |
| 257 | ------------------ | 261 | ------------------ |
README.md
| 1 | GammaLib information | 1 | GammaLib information |
| 2 | ==================== | 2 | ==================== |
| 3 | -* Version: 1.1.0.dev1 (8 June 2016) | 3 | +* Version: 1.1.0.dev1 (9 June 2016) |
| 4 | * Author: Juergen Knoedlseder (jurgen.knodlseder@irap.omp.eu) | 4 | * Author: Juergen Knoedlseder (jurgen.knodlseder@irap.omp.eu) |
| 5 | 5 | ||
| 6 | [](https://cta-jenkins.irap.omp.eu/job/gammalib-integrate-os/) | 6 | [](https://cta-jenkins.irap.omp.eu/job/gammalib-integrate-os/) |
include/GSkyMap.hpp
| @@ -163,7 +163,8 @@ public: | @@ -163,7 +163,8 @@ public: | ||
| 163 | void save(const GFilename& filename, | 163 | void save(const GFilename& filename, |
| 164 | const bool& clobber = false) const; | 164 | const bool& clobber = false) const; |
| 165 | void read(const GFitsHDU& hdu); | 165 | void read(const GFitsHDU& hdu); |
| 166 | - void write(GFits& file) const; | 166 | + void write(GFits& file, |
| 167 | + const std::string& extname = "") const; | ||
| 167 | void publish(const std::string& name = "") const; | 168 | void publish(const std::string& name = "") const; |
| 168 | std::string print(const GChatter& chatter = NORMAL) const; | 169 | std::string print(const GChatter& chatter = NORMAL) const; |
| 169 | 170 |
pyext/GSkyMap.i
| @@ -178,7 +178,8 @@ public: | @@ -178,7 +178,8 @@ public: | ||
| 178 | void save(const GFilename& filename, | 178 | void save(const GFilename& filename, |
| 179 | const bool& clobber = false) const; | 179 | const bool& clobber = false) const; |
| 180 | void read(const GFitsHDU& hdu); | 180 | void read(const GFitsHDU& hdu); |
| 181 | - void write(GFits& file) const; | 181 | + void write(GFits& file, |
| 182 | + const std::string& extname = "") const; | ||
| 182 | void publish(const std::string& name = "") const; | 183 | void publish(const std::string& name = "") const; |
| 183 | }; | 184 | }; |
| 184 | 185 |
src/sky/GSkyMap.cpp
| @@ -1979,9 +1979,9 @@ void GSkyMap::load(const GFilename& filename) | @@ -1979,9 +1979,9 @@ void GSkyMap::load(const GFilename& filename) | ||
| 1979 | * @param[in] filename FITS file name. | 1979 | * @param[in] filename FITS file name. |
| 1980 | * @param[in] clobber Overwrite existing file? | 1980 | * @param[in] clobber Overwrite existing file? |
| 1981 | * | 1981 | * |
| 1982 | - * Saves the sky map into a FITS file. If the file exists already the method | ||
| 1983 | - * will append the sky map to the FITS file in case that the @p clobber | ||
| 1984 | - * parameter is set to true. | 1982 | + * Saves the sky map into a FITS file. If the file exists already and the |
| 1983 | + * @p clobber parameter is true, the method will overwrite the content of | ||
| 1984 | + * the existing file. Otherwise, an exception is thrown. | ||
| 1985 | ***************************************************************************/ | 1985 | ***************************************************************************/ |
| 1986 | void GSkyMap::save(const GFilename& filename, const bool& clobber) const | 1986 | void GSkyMap::save(const GFilename& filename, const bool& clobber) const |
| 1987 | { | 1987 | { |
| @@ -2009,21 +2009,15 @@ void GSkyMap::save(const GFilename& filename, const bool& clobber) const | @@ -2009,21 +2009,15 @@ void GSkyMap::save(const GFilename& filename, const bool& clobber) const | ||
| 2009 | hdu->extname(filename.extname()); | 2009 | hdu->extname(filename.extname()); |
| 2010 | } | 2010 | } |
| 2011 | 2011 | ||
| 2012 | - // Open or create FITS file (without extension name since the | ||
| 2013 | - // requested extension may not yet exist in the file) | ||
| 2014 | - GFits fits(filename.url(), true); | ||
| 2015 | - | ||
| 2016 | - // If the FITS file contains already an extension with the same | ||
| 2017 | - // name then remove now this extension | ||
| 2018 | - if (fits.contains(filename.extname())) { | ||
| 2019 | - fits.remove(filename.extname()); | ||
| 2020 | - } | 2012 | + // Initialise empty FITS file |
| 2013 | + GFits fits; | ||
| 2021 | 2014 | ||
| 2022 | // Append sky map to FITS file | 2015 | // Append sky map to FITS file |
| 2023 | fits.append(*hdu); | 2016 | fits.append(*hdu); |
| 2024 | 2017 | ||
| 2025 | - // Save FITS file | ||
| 2026 | - fits.save(clobber); | 2018 | + // Save FITS file (without extension name which was extracted |
| 2019 | + // earlier and set in the HDU) | ||
| 2020 | + fits.saveto(filename.url(), clobber); | ||
| 2027 | 2021 | ||
| 2028 | // Delete HDU | 2022 | // Delete HDU |
| 2029 | delete hdu; | 2023 | delete hdu; |
| @@ -2074,11 +2068,15 @@ void GSkyMap::read(const GFitsHDU& hdu) | @@ -2074,11 +2068,15 @@ void GSkyMap::read(const GFitsHDU& hdu) | ||
| 2074 | 2068 | ||
| 2075 | 2069 | ||
| 2076 | /***********************************************************************//** | 2070 | /***********************************************************************//** |
| 2077 | - * @brief Write skymap into FITS file | 2071 | + * @brief Write sky map into FITS file |
| 2078 | * | 2072 | * |
| 2079 | * @param[in] file FITS file pointer. | 2073 | * @param[in] file FITS file pointer. |
| 2074 | + * @param[in] extname Sky map extension name. | ||
| 2075 | + * | ||
| 2076 | + * Write the sky map into a FITS file. Optionally, the extension name of | ||
| 2077 | + * the FITS HDU can be specified using the @p extname parameter. | ||
| 2080 | ***************************************************************************/ | 2078 | ***************************************************************************/ |
| 2081 | -void GSkyMap::write(GFits& file) const | 2079 | +void GSkyMap::write(GFits& file, const std::string& extname) const |
| 2082 | { | 2080 | { |
| 2083 | // Continue only if we have data to save | 2081 | // Continue only if we have data to save |
| 2084 | if (m_proj != NULL) { | 2082 | if (m_proj != NULL) { |
| @@ -2098,11 +2096,19 @@ void GSkyMap::write(GFits& file) const | @@ -2098,11 +2096,19 @@ void GSkyMap::write(GFits& file) const | ||
| 2098 | 2096 | ||
| 2099 | // Append HDU to FITS file. | 2097 | // Append HDU to FITS file. |
| 2100 | if (hdu != NULL) { | 2098 | if (hdu != NULL) { |
| 2099 | + | ||
| 2100 | + // Optionally set extension name | ||
| 2101 | + if (extname.length() > 0) { | ||
| 2102 | + hdu->extname(extname); | ||
| 2103 | + } | ||
| 2104 | + | ||
| 2105 | + // Append HDU | ||
| 2101 | file.append(*hdu); | 2106 | file.append(*hdu); |
| 2102 | - } | ||
| 2103 | 2107 | ||
| 2104 | - // Delete HDU | ||
| 2105 | - if (hdu != NULL) delete hdu; | 2108 | + // Delete HDU |
| 2109 | + if (hdu != NULL) delete hdu; | ||
| 2110 | + | ||
| 2111 | + } // endif: there was a valid HDU | ||
| 2106 | 2112 | ||
| 2107 | } // endif: we had data to save | 2113 | } // endif: we had data to save |
| 2108 | 2114 |
test/test_GSky.cpp
| @@ -1201,13 +1201,15 @@ void TestGSky::test_GSkyMap_io(void) | @@ -1201,13 +1201,15 @@ void TestGSky::test_GSkyMap_io(void) | ||
| 1201 | wcs3(i,k) = 3.0*double(i+k+1); | 1201 | wcs3(i,k) = 3.0*double(i+k+1); |
| 1202 | } | 1202 | } |
| 1203 | } | 1203 | } |
| 1204 | - healpix1.save(filename+"[HEALPIX1]", true); | ||
| 1205 | - wcs1.save(filename+"[WCS1]", true); | ||
| 1206 | - healpix2.save(filename+"[HEALPIX2]", true); | ||
| 1207 | - wcs2.save(filename+"[WCS2]", true); | 1204 | + GFits fits(filename, true); |
| 1205 | + healpix1.write(fits, "HEALPIX1"); | ||
| 1206 | + wcs1.write(fits, "WCS1"); | ||
| 1207 | + healpix2.write(fits, "HEALPIX2"); | ||
| 1208 | + wcs2.write(fits, "WCS2"); | ||
| 1208 | wcs3.shape(2,2,3); | 1209 | wcs3.shape(2,2,3); |
| 1209 | - wcs3.save(filename+"[WCS3]", true); | ||
| 1210 | - | 1210 | + wcs3.write(fits, "WCS3"); |
| 1211 | + fits.save(true); | ||
| 1212 | + | ||
| 1211 | // Load HEALPix map and check content | 1213 | // Load HEALPix map and check content |
| 1212 | GSkyMap map1(filename+"[HEALPIX1]"); | 1214 | GSkyMap map1(filename+"[HEALPIX1]"); |
| 1213 | test_value(map1.npix(), healpix1.npix(), "Check number of HEALPix pixels"); | 1215 | test_value(map1.npix(), healpix1.npix(), "Check number of HEALPix pixels"); |