Commit dab3b14cbd205555c60da0319aec27a4dc30ec81
1 parent
79e6207f
implement saving
Showing
2 changed files
with
12 additions
and
4 deletions
include/GFitsHDU.hpp
| @@ -75,6 +75,7 @@ private: | @@ -75,6 +75,7 @@ private: | ||
| 75 | 75 | ||
| 76 | // Private data area | 76 | // Private data area |
| 77 | __fitsfile m_fitsfile; // FITS file pointer | 77 | __fitsfile m_fitsfile; // FITS file pointer |
| 78 | + int m_hdunum; // HDU number (starting from 1) | ||
| 78 | std::string m_name; // HDU name | 79 | std::string m_name; // HDU name |
| 79 | int m_type; // HDU type | 80 | int m_type; // HDU type |
| 80 | GFitsHeader* m_header; // HDU header | 81 | GFitsHeader* m_header; // HDU header |
| @@ -86,7 +87,7 @@ private: | @@ -86,7 +87,7 @@ private: | ||
| 86 | * Inline methods * | 87 | * Inline methods * |
| 87 | ***************************************************************************/ | 88 | ***************************************************************************/ |
| 88 | inline std::string GFitsHDU::extname(void) const { return m_name; } | 89 | inline std::string GFitsHDU::extname(void) const { return m_name; } |
| 89 | -inline int GFitsHDU::extno(void) const { return m_fitsfile.HDUposition; } | 90 | +inline int GFitsHDU::extno(void) const { return m_hdunum; } |
| 90 | inline int GFitsHDU::exttype(void) const { return m_type; } | 91 | inline int GFitsHDU::exttype(void) const { return m_type; } |
| 91 | inline GFitsHeader* GFitsHDU::header(void) const { return m_header; } | 92 | inline GFitsHeader* GFitsHDU::header(void) const { return m_header; } |
| 92 | inline GFitsData* GFitsHDU::data(void) const { return m_data; } | 93 | inline GFitsData* GFitsHDU::data(void) const { return m_data; } |
src/fits/GFitsHDU.cpp
| @@ -143,6 +143,7 @@ void GFitsHDU::open(__fitsfile* fptr, int hdunum) | @@ -143,6 +143,7 @@ void GFitsHDU::open(__fitsfile* fptr, int hdunum) | ||
| 143 | // Store information. | 143 | // Store information. |
| 144 | // Note that the HDU number - 1 is stored in m_fitsfile->HDUposition !!! | 144 | // Note that the HDU number - 1 is stored in m_fitsfile->HDUposition !!! |
| 145 | m_fitsfile = *fptr; | 145 | m_fitsfile = *fptr; |
| 146 | + m_hdunum = hdunum; | ||
| 146 | 147 | ||
| 147 | // Get HDU type | 148 | // Get HDU type |
| 148 | status = __ffghdt(&m_fitsfile, &m_type, &status); | 149 | status = __ffghdt(&m_fitsfile, &m_type, &status); |
| @@ -197,14 +198,18 @@ void GFitsHDU::open(__fitsfile* fptr, int hdunum) | @@ -197,14 +198,18 @@ void GFitsHDU::open(__fitsfile* fptr, int hdunum) | ||
| 197 | ***************************************************************************/ | 198 | ***************************************************************************/ |
| 198 | void GFitsHDU::save(void) | 199 | void GFitsHDU::save(void) |
| 199 | { | 200 | { |
| 201 | +cout << "GFitsHDU::save " << m_hdunum-1 << endl; | ||
| 200 | // Move to HDU | 202 | // Move to HDU |
| 201 | int status = 0; | 203 | int status = 0; |
| 202 | - status = __ffmahd(&m_fitsfile, (m_fitsfile.HDUposition)+1, NULL, &status); | 204 | + status = __ffmahd(&m_fitsfile, m_hdunum, NULL, &status); |
| 203 | 205 | ||
| 204 | // If HDU does not yet exist in file then create it now. This works even | 206 | // If HDU does not yet exist in file then create it now. This works even |
| 205 | // in the case that the actual HDU has no associated header and/or data | 207 | // in the case that the actual HDU has no associated header and/or data |
| 206 | - // (these will be created automatically) | 208 | + // (these will be created automatically). However, to make this work we have |
| 209 | + // to set the fitsfile HDU position to the position we want to go. In that | ||
| 210 | + // was the save members will know that they have to create the HDU ... | ||
| 207 | if (status == 107) { | 211 | if (status == 107) { |
| 212 | + m_fitsfile.HDUposition = m_hdunum-1; | ||
| 208 | status = 0; | 213 | status = 0; |
| 209 | switch (m_type) { | 214 | switch (m_type) { |
| 210 | case 0: // Image HDU | 215 | case 0: // Image HDU |
| @@ -329,6 +334,7 @@ void GFitsHDU::init_members(void) | @@ -329,6 +334,7 @@ void GFitsHDU::init_members(void) | ||
| 329 | // Initialise members | 334 | // Initialise members |
| 330 | m_fitsfile.HDUposition = 0; | 335 | m_fitsfile.HDUposition = 0; |
| 331 | m_fitsfile.Fptr = NULL; | 336 | m_fitsfile.Fptr = NULL; |
| 337 | + m_hdunum = 1; | ||
| 332 | m_name.clear(); | 338 | m_name.clear(); |
| 333 | m_type = 0; | 339 | m_type = 0; |
| 334 | m_header = NULL; | 340 | m_header = NULL; |
| @@ -348,6 +354,7 @@ void GFitsHDU::copy_members(const GFitsHDU& hdu) | @@ -348,6 +354,7 @@ void GFitsHDU::copy_members(const GFitsHDU& hdu) | ||
| 348 | { | 354 | { |
| 349 | // Copy members | 355 | // Copy members |
| 350 | m_fitsfile = hdu.m_fitsfile; | 356 | m_fitsfile = hdu.m_fitsfile; |
| 357 | + m_hdunum = hdu.m_hdunum; | ||
| 351 | m_name = hdu.m_name; | 358 | m_name = hdu.m_name; |
| 352 | m_type = hdu.m_type; | 359 | m_type = hdu.m_type; |
| 353 | if (hdu.m_header != NULL) m_header = hdu.m_header->clone(); | 360 | if (hdu.m_header != NULL) m_header = hdu.m_header->clone(); |
| @@ -392,7 +399,7 @@ ostream& operator<< (ostream& os, const GFitsHDU& hdu) | @@ -392,7 +399,7 @@ ostream& operator<< (ostream& os, const GFitsHDU& hdu) | ||
| 392 | { | 399 | { |
| 393 | // Put header in stream | 400 | // Put header in stream |
| 394 | os << "=== GFitsHDU ===" << endl; | 401 | os << "=== GFitsHDU ===" << endl; |
| 395 | - os << " HDU number ................: " << hdu.m_fitsfile.HDUposition << endl; | 402 | + os << " HDU number ................: " << hdu.m_hdunum << endl; |
| 396 | os << " HDU name ..................: " << hdu.m_name << endl; | 403 | os << " HDU name ..................: " << hdu.m_name << endl; |
| 397 | os << " HDU type ..................: "; | 404 | os << " HDU type ..................: "; |
| 398 | switch (hdu.m_type) { | 405 | switch (hdu.m_type) { |