/*************************************************************************** * GRmf.hpp - XSPEC Redistribution Matrix File class * * ----------------------------------------------------------------------- * * copyright (C) 2013-2014 by Juergen Knoedlseder * * ----------------------------------------------------------------------- * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see . * * * ***************************************************************************/ /** * @file GRmf.hpp * @brief XSPEC Redistribution Matrix File class definition * @author Juergen Knoedlseder */ #ifndef GRMF_HPP #define GRMF_HPP /* __ Includes ___________________________________________________________ */ #include #include "GBase.hpp" #include "GEbounds.hpp" #include "GMatrixSparse.hpp" #include "GFits.hpp" #include "GFitsTable.hpp" /***********************************************************************//** * @class GRmf * * @brief Redistribution Matrix File class * * Matrix rows are true energy, columns are channels ***************************************************************************/ class GRmf : public GBase { public: // Constructors and destructors GRmf(void); explicit GRmf(const std::string& filename); GRmf(const GEbounds& etrue, const GEbounds& emeasured); GRmf(const GRmf& rmf); virtual ~GRmf(void); // Operators GRmf& operator=(const GRmf& rmf); double& operator()(const int& itrue, const int& imeasured); const double& operator()(const int& itrue, const int& imeasured) const; // Methods void clear(void); GRmf* clone(void) const; std::string classname(void) const; int size(void) const; int ntrue(void) const; int nmeasured(void) const; int itruemax(void) const; int imeasmax(void) const; double& at(const int& itrue, const int& imeasured); const double& at(const int& itrue, const int& imeasured) const; const GEbounds& etrue(void) const; const GEbounds& emeasured(void) const; GEbounds etrue(const GEnergy& emeasured) const; GEbounds emeasured(const GEnergy& etrue) const; const GMatrixSparse& matrix(void) const; void load(const std::string& filename); void save(const std::string& filename, const bool& clobber = false, const std::string& unit = "keV") const; void read(const GFitsTable& table); void write(GFits& fits, const std::string& unit = "keV") const; const std::string& filename(void) const; std::string print(const GChatter& chatter = NORMAL) const; protected: // Protected methods void init_members(void); void copy_members(const GRmf& rmf); void free_members(void); // Protected members mutable std::string m_filename; //!< Filename of origin GEbounds m_ebds_true; //!< True energy boundaries GEbounds m_ebds_measured; //!< Measured energy boundaries GMatrixSparse m_matrix; //!< Sparse redistribution matrix int m_imeasmax; //!< Index of measured maximum int m_itruemax; //!< Index of true maximum }; /***********************************************************************//** * @brief Return class name * * @return String containing the class name ("GRmf"). ***************************************************************************/ inline std::string GRmf::classname(void) const { return ("GRmf"); } /***********************************************************************//** * @brief Return content of redistribution matrix bin * * @param[in] itrue True energy index [0,...,ntrue()-1]. * @param[in] imeasured Measured energy index [0,...,nmeasured()-1]. * * Returns reference to content of redistribution matrix bin bin with true * energy index @p itrue and measured energy index @p imeasured. ***************************************************************************/ inline double& GRmf::operator()(const int& itrue, const int& imeasured) { return (m_matrix(itrue, imeasured)); } /***********************************************************************//** * @brief Return content of redistribution matrix bin (const version) * * @param[in] itrue True energy index [0,...,ntrue()-1]. * @param[in] imeasured Measured energy index [0,...,nmeasured()-1]. * * Returns reference to content of redistribution matrix bin bin with true * energy index @p itrue and measured energy index @p imeasured. ***************************************************************************/ inline const double& GRmf::operator()(const int& itrue, const int& imeasured) const { return (m_matrix(itrue, imeasured)); } /***********************************************************************//** * @brief Return number of redistribution matrix bins * * @return Number of redistribution matrix bins. * * Returns the number of redistribution matrix bins. ***************************************************************************/ inline int GRmf::size(void) const { return (m_matrix.rows()*m_matrix.columns()); } /***********************************************************************//** * @brief Return number of true energy bins in redistribution matrix * * @return Number true energy bins in redistribution matrix. * * Returns the number of true energy bins in redistribution matrix. ***************************************************************************/ inline int GRmf::ntrue(void) const { return (m_matrix.rows()); } /***********************************************************************//** * @brief Return number of measured energy bins in redistribution matrix * * @return Number measured energy bins in redistribution matrix. * * Returns the number of measured energy bins in redistribution matrix. ***************************************************************************/ inline int GRmf::nmeasured(void) const { return (m_matrix.columns()); } /***********************************************************************//** * @brief Return true energy index of maximum value of the redistribution matrix * * @return True energy index of maximum value of the redistribution matrix. * * Returns the true energy index of maximum value of the redistribution matrix. ***************************************************************************/ inline int GRmf::itruemax(void) const { return m_itruemax; } /***********************************************************************//** * @brief Return measured energy index of maximum value of the redistribution matrix * * @return Measured energy index of maximum value of the redistribution matrix. * * Returns the measured energy index of maximum value of the redistribution matrix. ***************************************************************************/ inline int GRmf::imeasmax(void) const { return m_imeasmax; } /***********************************************************************//** * @brief Return true energy boundaries * * @return True energy boundaries for redistribution matrix. * * Returns the true energy boundaries for redistribution matrix. ***************************************************************************/ inline const GEbounds& GRmf::etrue(void) const { return m_ebds_true; } /***********************************************************************//** * @brief Return measured energy boundaries * * @return Measured energy boundaries for redistribution matrix. * * Returns the measured energy boundaries for redistribution matrix. ***************************************************************************/ inline const GEbounds& GRmf::emeasured(void) const { return m_ebds_measured; } /***********************************************************************//** * @brief Return redistribution matrix * * @return Redistribution matrix. ***************************************************************************/ inline const GMatrixSparse& GRmf::matrix(void) const { return m_matrix; } /***********************************************************************//** * @brief Return file name * * @return File name from which the RMF information has been read or into * which RMF information has been saved. * * Returns the file name from which the RMF information has been read or into * which RMF information has been saved. The returned string will be empty if * no load() or save() method has been called before. ***************************************************************************/ inline const std::string& GRmf::filename(void) const { return (m_filename); } #endif /* GRMF_HPP */