/*************************************************************************** * GLATEfficiency.cpp - Fermi-LAT IRF efficiency factor functor * * ----------------------------------------------------------------------- * * copyright (C) 2012-2013 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 GLATEfficiency.cpp * @brief Fermi-LAT IRF efficiency factor functor class implementation * @author Juergen Knoedlseder */ /* __ Includes ___________________________________________________________ */ #ifdef HAVE_CONFIG_H #include #endif #include "GLATEfficiency.hpp" #include "GTools.hpp" /* __ Method name definitions ____________________________________________ */ /* __ Macros _____________________________________________________________ */ /* __ Coding definitions _________________________________________________ */ /* __ Debug definitions __________________________________________________ */ /* __ Constants __________________________________________________________ */ /*========================================================================== = = = Constructors/destructors = = = ==========================================================================*/ /***********************************************************************//** * @brief Void constructor ***************************************************************************/ GLATEfficiency::GLATEfficiency(void) { // Initialise class members init_members(); // Return return; } /***********************************************************************//** * @brief Assignment constructor * * @param[in] pars Efficiency factor parameters. ***************************************************************************/ GLATEfficiency::GLATEfficiency(const std::vector& pars) { // Initialise class members init_members(); // Assign members m_a0 = pars.at(0); m_b0 = pars.at(1); m_a1 = pars.at(2); m_logEb1 = pars.at(3); m_a2 = pars.at(4); m_logEb2 = pars.at(5); // Precompute additional offsets m_b1 = (m_a0 - m_a1)*m_logEb1 + m_b0; m_b2 = (m_a1 - m_a2)*m_logEb2 + m_b1; // Return return; } /***********************************************************************//** * @brief Copy constructor * * @param[in] eff Efficiency factor functor. ***************************************************************************/ GLATEfficiency::GLATEfficiency(const GLATEfficiency& eff) { // Initialise class members init_members(); // Copy members copy_members(eff); // Return return; } /***********************************************************************//** * @brief Destructor ***************************************************************************/ GLATEfficiency::~GLATEfficiency(void) { // Free members free_members(); // Return return; } /*========================================================================== = = = Operators = = = ==========================================================================*/ /***********************************************************************//** * @brief Assignment operator * * @param[in] eff Efficiency factor functor. * @return Efficiency factor functor. ***************************************************************************/ GLATEfficiency& GLATEfficiency::operator=(const GLATEfficiency& eff) { // Execute only if object is not identical if (this != &eff) { // Free members free_members(); // Initialise private members init_members(); // Copy members copy_members(eff); } // endif: object was not identical // Return this object return *this; } /***********************************************************************//** * @brief Functor operator * * @param[in] logE log10 of energy (MeV). ***************************************************************************/ double GLATEfficiency::operator() (const double& logE) const { // Initialise the result double factor = 0; // Set efficiency factor depending on the energy domain if (logE < m_logEb1) { factor = m_a0*logE + m_b0; } else if (logE < m_logEb2) { factor = m_a1*logE + m_b1; } else { factor = m_a2*logE + m_b2; } // Return factor return factor; } /*========================================================================== = = = Public methods = = = ==========================================================================*/ /***********************************************************************//** * @brief Clear efficiency factor functor * * This method properly resets the object to an initial state. ***************************************************************************/ void GLATEfficiency::clear(void) { // Free class members free_members(); // Initialise members init_members(); // Return return; } /***********************************************************************//** * @brief Clone efficiency factor functor * * @return Pointer to deep copy of efficiency factor functor. ***************************************************************************/ GLATEfficiency* GLATEfficiency::clone(void) const { return new GLATEfficiency(*this); } /***********************************************************************//** * @brief Print efficiency factors * * @param[in] chatter Chattiness (defaults to NORMAL). * @return String containing efficiency factors information. ***************************************************************************/ std::string GLATEfficiency::print(const GChatter& chatter) const { // Initialise result string std::string result; // Continue only if chatter is not silent if (chatter != SILENT) { // Append header result.append("=== GLATEfficiency ==="); // Append information result.append("\n"+gammalib::parformat("Scale 1 (a0)")+gammalib::str(m_a0)); result.append("\n"+gammalib::parformat("Scale 2 (a1)")+gammalib::str(m_a1)); result.append("\n"+gammalib::parformat("Scale 3 (a2)")+gammalib::str(m_a2)); result.append("\n"+gammalib::parformat("Offset 1 (b0)")+gammalib::str(m_b0)); result.append("\n"+gammalib::parformat("Offset 2 (b1)")+gammalib::str(m_b1)); result.append("\n"+gammalib::parformat("Offset 3 (b2)")+gammalib::str(m_b2)); result.append("\n"+gammalib::parformat("Energy domains 1/2 limit (logEb1)")+gammalib::str(m_logEb1)); result.append("\n"+gammalib::parformat("Energy domains 2/3 limit (logEb2)")+gammalib::str(m_logEb2)); } // endif: chatter was not silent // Return result return result; } /*========================================================================== = = = Private methods = = = ==========================================================================*/ /***********************************************************************//** * @brief Initialise class members ***************************************************************************/ void GLATEfficiency::init_members(void) { // Initialise members m_a0 = 0.0; m_a1 = 0.0; m_a2 = 0.0; m_b0 = 0.0; m_b1 = 0.0; m_b2 = 0.0; m_logEb1 = 0.0; m_logEb2 = 0.0; // Return return; } /***********************************************************************//** * @brief Copy class members * * @param[in] eff Efficiency factor functor. ***************************************************************************/ void GLATEfficiency::copy_members(const GLATEfficiency& eff) { // Copy members m_a0 = eff.m_a0; m_a1 = eff.m_a1; m_a2 = eff.m_a2; m_b0 = eff.m_b0; m_b1 = eff.m_b1; m_b2 = eff.m_b2; m_logEb1 = eff.m_logEb1; m_logEb2 = eff.m_logEb2; // Return return; } /***********************************************************************//** * @brief Delete class members ***************************************************************************/ void GLATEfficiency::free_members(void) { // Return return; }