/***********************************************************************//** * @brief Save table column into FITS file * * @exception GException::fits_hdu_not_found * Specified HDU not found in FITS file. * @exception GException::fits_error * Error occured during writing of the column data. * * The table column is only saved if it is linked to a FITS file and if the * data are indeed present in the class instance. This avoids saving of data * that have not been modified. * * The method make use of the virtual methods * GFitsTableCol::ptr_data and * GFitsTableCol::ptr_nulval. * These methods are implemented by the derived column classes which * implement a specific storage class (i.e. float, double, short, ...). ***************************************************************************/ void GFitsTableCol::save_column_fixed(void) { // Continue only if a FITS file is connected and data have been loaded if (FPTR(m_fitsfile)->Fptr != NULL && m_colnum > 0 && ptr_data() != NULL) { // Move to the HDU int status = 0; status = __ffmahd(FPTR(m_fitsfile), (FPTR(m_fitsfile)->HDUposition)+1, NULL, &status); if (status != 0) { throw GException::fits_hdu_not_found(G_SAVE_COLUMN_FIXED, (FPTR(m_fitsfile)->HDUposition)+1, status); } // Save the column data status = __ffpcn(FPTR(m_fitsfile), m_type, m_colnum, 1, 1, m_size, ptr_data(), ptr_nulval(), &status); if (status != 0) { std::string msg = "Unable to save column '"+name()+"' to" " FITS file."; throw GException::fits_error(G_SAVE_COLUMN_FIXED, status, msg); } } // endif: FITS file was connected // Return return; }
/***********************************************************************//** * @brief Save table column into FITS file * * @exception GException::fits_hdu_not_found * Specified HDU not found in FITS file. * @exception GException::fits_error * Error occured during writing of the column data. * * Save Bit (vector) column into FITS file by writing 8 Bits at once. ***************************************************************************/ void GFitsTableBitCol::save_column(void) { // Continue only if a FITS file is connected and data have been loaded if (FPTR(m_fitsfile)->Fptr != NULL && m_colnum > 0 && m_data != NULL) { // Set any pending Bit set_pending(); // Move to the HDU int status = 0; status = __ffmahd(FPTR(m_fitsfile), (FPTR(m_fitsfile)->HDUposition)+1, NULL, &status); if (status != 0) { throw GException::fits_hdu_not_found(G_SAVE_COLUMN, (FPTR(m_fitsfile)->HDUposition)+1, status); } // Save data 8 Bits at once status = __ffpcn(FPTR(m_fitsfile), __TBYTE, m_colnum, 1, 1, m_size, m_data, m_nulval, &status); if (status != 0) { throw GException::fits_error(G_SAVE_COLUMN, status); } } // endif: FITS file was connected // Return return; }
/***********************************************************************//** * @brief Save table column into FITS file * * @exception GException::fits_hdu_not_found * Specified HDU not found in FITS file. * @exception GException::fits_error * Error occured during writing of the column data. * * The table column is only saved if it is linked to a FITS file and if the * data are indeed present in the class instance. This avoids saving of data * that have not been modified. * * The method make use of the virtual methods * GFitsTableCol::ptr_data and * GFitsTableCol::ptr_nulval. * These methods are implemented by the derived column classes which * implement a specific storage class (i.e. float, double, short, ...). ***************************************************************************/ void GFitsTableCol::save_column_variable(void) { // Continue only if a FITS file is connected and data have been loaded if (FPTR(m_fitsfile)->Fptr != NULL && m_colnum > 0 && ptr_data() != NULL) { // Move to the HDU int status = 0; status = __ffmahd(FPTR(m_fitsfile), (FPTR(m_fitsfile)->HDUposition)+1, NULL, &status); if (status != 0) { throw GException::fits_hdu_not_found(G_SAVE_COLUMN_VARIABLE, (FPTR(m_fitsfile)->HDUposition)+1, status); } // Save the column data row-by-row for (int row = 0; row < m_length; ++row) { // Save row data status = __ffpcn(FPTR(m_fitsfile), std::abs(m_type), m_colnum, row+1, 1, elements(row), ptr_data(m_rowstart[row]), ptr_nulval(), &status); if (status != 0) { std::string msg = "Unable to save row "+gammalib::str(row+1)+"" " of column '"+name()+"' to FITS file."; throw GException::fits_error(G_SAVE_COLUMN_VARIABLE, status, msg); } } // endfor: looped over rows } // endif: FITS file was connected // Return return; }