/***********************************************************************//** * @brief Write response table into FITS table * * @param[in] hdu Fits table HDU. ***************************************************************************/ void GLATResponseTable::write(GFitsTable& hdu) const { // Allocate floating point vector columns GFitsTableFloatCol col_energy_lo = GFitsTableFloatCol("ENERG_LO", 1, m_energy_num); GFitsTableFloatCol col_energy_hi = GFitsTableFloatCol("ENERG_HI", 1, m_energy_num); GFitsTableFloatCol col_ctheta_lo = GFitsTableFloatCol("CTHETA_LO", 1, m_ctheta_num); GFitsTableFloatCol col_ctheta_hi = GFitsTableFloatCol("CTHETA_HI", 1, m_ctheta_num); // Set column values for (int i = 0; i < m_energy_num; ++i) { col_energy_lo(0,i) = m_energy_lo[i]; col_energy_hi(0,i) = m_energy_hi[i]; } for (int i = 0; i < m_ctheta_num; ++i) { col_ctheta_lo(0,i) = m_ctheta_lo[i]; col_ctheta_hi(0,i) = m_ctheta_hi[i]; } // Append columns to boundary table hdu.append(col_energy_lo); hdu.append(col_energy_hi); hdu.append(col_ctheta_lo); hdu.append(col_ctheta_hi); // Return return; }
/***********************************************************************//** * @brief Write point spread function into FITS file * * @param[in] file FITS file. * * Writes the PSF into the extension "RPSF" of a FITS file. This method * does not check if a "RPSF" extension exists so far, it simply adds one * each time it is called. * * Nothing is done if the PSF size is 0. * * @todo Check if a RPSF extension exists already in FITS file ***************************************************************************/ void GLATPsfV3::write(GFits& file) const { // Continue only if there are bins int size = m_rpsf_bins.size(); if (size > 0) { // Create new binary table GFitsBinTable* hdu_rpsf = new GFitsBinTable; // Set table attributes hdu_rpsf->extname("RPSF"); // Write boundaries into table m_rpsf_bins.write(hdu_rpsf); // Allocate floating point vector columns GFitsTableFloatCol col_ncore = GFitsTableFloatCol("NCORE", 1, size); GFitsTableFloatCol col_ntail = GFitsTableFloatCol("NTAIL", 1, size); GFitsTableFloatCol col_score = GFitsTableFloatCol("SCORE", 1, size); GFitsTableFloatCol col_stail = GFitsTableFloatCol("STAIL", 1, size); GFitsTableFloatCol col_gcore = GFitsTableFloatCol("GCORE", 1, size); GFitsTableFloatCol col_gtail = GFitsTableFloatCol("GTAIL", 1, size); // Fill columns for (int i = 0; i < size; ++i) { col_ncore(0,i) = m_ncore[i]; col_ntail(0,i) = m_ntail[i]; col_score(0,i) = m_score[i]; col_stail(0,i) = m_stail[i]; col_gcore(0,i) = m_gcore[i]; col_gtail(0,i) = m_gtail[i]; } // Append columns to table hdu_rpsf->append_column(col_ncore); hdu_rpsf->append_column(col_ntail); hdu_rpsf->append_column(col_score); hdu_rpsf->append_column(col_stail); hdu_rpsf->append_column(col_gcore); hdu_rpsf->append_column(col_gtail); // Append HDU to FITS file file.append(*hdu_rpsf); // Free binary table delete hdu_rpsf; } // endif: there were data to write // Return return; }
/***********************************************************************//** * @brief Write PSF scale factors * * @param[in] file FITS file. * * Writes the PSF scale factors in the extension "PSF_SCALING_PARAMS". This * method appends an extension "PSF_SCALING_PARAMS" to the FITS file, * irrespectively of whether the extension exists already or not. * The scale facors are written into the column "PSFSCALE". * * @todo Check if PSF_SCALING_PARAMS exists already in FITS file ***************************************************************************/ void GLATPsfBase::write_scale(GFits& file) const { // Create new binary table GFitsBinTable* hdu_scale = new GFitsBinTable; // Set table attributes hdu_scale->extname("PSF_SCALING_PARAMS"); // Allocate floating point vector column GFitsTableFloatCol col_scale = GFitsTableFloatCol("PSFSCALE", 1, 5); // Fill columns if (front()) { col_scale(0,0) = m_scale_par1; col_scale(0,1) = m_scale_par2; col_scale(0,2) = 0.0; col_scale(0,3) = 0.0; } else { col_scale(0,0) = 0.0; col_scale(0,1) = 0.0; col_scale(0,2) = m_scale_par1; col_scale(0,3) = m_scale_par2; } col_scale(0,4) = m_scale_index; // Append column to table hdu_scale->append(col_scale); // Append HDU to FITS file file.append(*hdu_scale); // Free binary table delete hdu_scale; // Return return; }
/***********************************************************************//** * @brief Write effective area into FITS file * * @param[in] file FITS file. * * This method does not write anything if the instance is empty. ***************************************************************************/ void GLATAeff::write_aeff(GFits& file) const { // Continue only if there are bins int size = m_aeff_bins.size(); if (size > 0) { // Create new binary table GFitsBinTable* hdu_aeff = new GFitsBinTable; // Set table attributes hdu_aeff->extname("EFFECTIVE AREA"); // Write boundaries into table m_aeff_bins.write(*hdu_aeff); // Allocate floating point vector columns GFitsTableFloatCol col_aeff = GFitsTableFloatCol("EFFAREA", 1, size); // Fill columns for (int i = 0; i < size; ++i) { col_aeff(0,i) = m_aeff[i]; } // Append columns to table hdu_aeff->append(col_aeff); // Append HDU to FITS file file.append(*hdu_aeff); // Free binary table delete hdu_aeff; } // endif: there were data to write // Return return; }