From 63cffb8730583f158b544f0bce00a8bebe1a65a3 Mon Sep 17 00:00:00 2001 From: Jürgen Knödlseder Date: Fri, 14 Feb 2014 15:45:25 +0100 Subject: [PATCH] Add log10 and log10erg methods. --- include/GEnergy.hpp | 3 +++ pyext/GEnergy.i | 3 +++ src/obs/GEnergy.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 80 insertions(+), 3 deletions(-) diff --git a/include/GEnergy.hpp b/include/GEnergy.hpp index 8a78032..e492932 100644 --- a/include/GEnergy.hpp +++ b/include/GEnergy.hpp @@ -80,6 +80,7 @@ public: double MeV(void) const; double GeV(void) const; double TeV(void) const; + double log10erg(void) const; double log10keV(void) const; double log10MeV(void) const; double log10GeV(void) const; @@ -89,10 +90,12 @@ public: void MeV(const double& eng); void GeV(const double& eng); void TeV(const double& eng); + void log10erg(const double& eng); void log10keV(const double& eng); void log10MeV(const double& eng); void log10GeV(const double& eng); void log10TeV(const double& eng); + void log10(const double& eng, const std::string& unit); std::string print(const GChatter& chatter = NORMAL) const; protected: diff --git a/pyext/GEnergy.i b/pyext/GEnergy.i index 497fce8..5ea6b18 100644 --- a/pyext/GEnergy.i +++ b/pyext/GEnergy.i @@ -60,6 +60,7 @@ public: double MeV(void) const; double GeV(void) const; double TeV(void) const; + double log10erg(void) const; double log10keV(void) const; double log10MeV(void) const; double log10GeV(void) const; @@ -69,10 +70,12 @@ public: void MeV(const double& eng); void GeV(const double& eng); void TeV(const double& eng); + void log10erg(const double& eng); void log10keV(const double& eng); void log10MeV(const double& eng); void log10GeV(const double& eng); void log10TeV(const double& eng); + void log10(const double& eng, const std::string& unit); }; diff --git a/src/obs/GEnergy.cpp b/src/obs/GEnergy.cpp index d2da283..939d5ab 100644 --- a/src/obs/GEnergy.cpp +++ b/src/obs/GEnergy.cpp @@ -1,7 +1,7 @@ /*************************************************************************** * GEnergy.cpp - Energy class * * ----------------------------------------------------------------------- * - * copyright (C) 2010-2013 by Juergen Knoedlseder * + * copyright (C) 2010-2014 by Juergen Knoedlseder * * ----------------------------------------------------------------------- * * * * This program is free software: you can redistribute it and/or modify * @@ -38,6 +38,7 @@ /* __ Method name definitions ____________________________________________ */ #define G_CONSTRUCT "GEnergy::GEnergy(double&, std::string&)" +#define G_LOG10 "GEnergy::log10(double&, std::string&)" /* __ Macros _____________________________________________________________ */ @@ -123,7 +124,6 @@ GEnergy::GEnergy(const double& eng, const std::string& unit) " \"GeV\", or \"TeV\" (case insensitive)."); } - // Return return; } @@ -154,7 +154,7 @@ GEnergy::~GEnergy(void) * @param[in] eng Energy. * @return Energy. ***************************************************************************/ -GEnergy& GEnergy::operator= (const GEnergy& eng) +GEnergy& GEnergy::operator=(const GEnergy& eng) { // Execute only if object is not identical if (this != &eng) { @@ -282,6 +282,23 @@ double GEnergy::TeV(void) const /***********************************************************************//** + * @brief Return log10 of energy in erg + * + * @return Energy in log10 erg. + * + * Returns the log10 of the energy in erg. + ***************************************************************************/ +double GEnergy::log10erg(void) const +{ + // Set offset + const double offset = std::log10(gammalib::MeV2erg); + + // Return log10 energy + return (log10MeV()+offset); +} + + +/***********************************************************************//** * @brief Return log10 of energy in keV * * @return Energy in log10 keV. @@ -437,6 +454,24 @@ void GEnergy::TeV(const double& eng) /***********************************************************************//** + * @brief Set log10 of energy in erg + * + * @param[in] eng log10 of energy in erg. + ***************************************************************************/ +void GEnergy::log10erg(const double& eng) +{ + // Set offset + const double offset = std::log10(gammalib::MeV2erg); + + // Set energy + log10MeV(eng-offset); + + // Return + return; +} + + +/***********************************************************************//** * @brief Set log10 of energy in keV * * @param[in] eng log10 of energy in keV. @@ -499,6 +534,42 @@ void GEnergy::log10TeV(const double& eng) /***********************************************************************//** + * @brief Set log10 of energy with unit specification + * + * @param[in] eng log10 of energy. + * @param[in] unit Unit of log10 of energy. + ***************************************************************************/ +void GEnergy::log10(const double& eng, const std::string& unit) +{ + // Set energy according to unit string + std::string eunit = gammalib::tolower(unit); + if (eunit == "erg" || eunit == "ergs") { + this->log10erg(eng); + } + else if (eunit == "kev") { + this->log10keV(eng); + } + else if (eunit == "mev") { + this->log10MeV(eng); + } + else if (eunit == "gev") { + this->log10GeV(eng); + } + else if (eunit == "tev") { + this->log10TeV(eng); + } + else { + throw GException::invalid_argument(G_LOG10, unit, + "Valid energy units are \"erg(s)\", \"keV\", \"MeV\"," + " \"GeV\", or \"TeV\" (case insensitive)."); + } + + // Return + return; +} + + +/***********************************************************************//** * @brief Print energy * * @param[in] chatter Chattiness (defaults to NORMAL). -- libgit2 0.21.4