Commit 63cffb8730583f158b544f0bce00a8bebe1a65a3

Authored by Jürgen Knödlseder
1 parent 9979ee84

Add log10 and log10erg methods.

The log10() method allows specifying the energy unit in setting the energy value. The log10erg() methods allow setting and retrieving and energy in log10 of ergs.
include/GEnergy.hpp
... ... @@ -80,6 +80,7 @@ public:
80 80 double MeV(void) const;
81 81 double GeV(void) const;
82 82 double TeV(void) const;
  83 + double log10erg(void) const;
83 84 double log10keV(void) const;
84 85 double log10MeV(void) const;
85 86 double log10GeV(void) const;
... ... @@ -89,10 +90,12 @@ public:
89 90 void MeV(const double& eng);
90 91 void GeV(const double& eng);
91 92 void TeV(const double& eng);
  93 + void log10erg(const double& eng);
92 94 void log10keV(const double& eng);
93 95 void log10MeV(const double& eng);
94 96 void log10GeV(const double& eng);
95 97 void log10TeV(const double& eng);
  98 + void log10(const double& eng, const std::string& unit);
96 99 std::string print(const GChatter& chatter = NORMAL) const;
97 100  
98 101 protected:
... ...
pyext/GEnergy.i
... ... @@ -60,6 +60,7 @@ public:
60 60 double MeV(void) const;
61 61 double GeV(void) const;
62 62 double TeV(void) const;
  63 + double log10erg(void) const;
63 64 double log10keV(void) const;
64 65 double log10MeV(void) const;
65 66 double log10GeV(void) const;
... ... @@ -69,10 +70,12 @@ public:
69 70 void MeV(const double& eng);
70 71 void GeV(const double& eng);
71 72 void TeV(const double& eng);
  73 + void log10erg(const double& eng);
72 74 void log10keV(const double& eng);
73 75 void log10MeV(const double& eng);
74 76 void log10GeV(const double& eng);
75 77 void log10TeV(const double& eng);
  78 + void log10(const double& eng, const std::string& unit);
76 79 };
77 80  
78 81  
... ...
src/obs/GEnergy.cpp
1 1 /***************************************************************************
2 2 * GEnergy.cpp - Energy class *
3 3 * ----------------------------------------------------------------------- *
4   - * copyright (C) 2010-2013 by Juergen Knoedlseder *
  4 + * copyright (C) 2010-2014 by Juergen Knoedlseder *
5 5 * ----------------------------------------------------------------------- *
6 6 * *
7 7 * This program is free software: you can redistribute it and/or modify *
... ... @@ -38,6 +38,7 @@
38 38  
39 39 /* __ Method name definitions ____________________________________________ */
40 40 #define G_CONSTRUCT "GEnergy::GEnergy(double&, std::string&)"
  41 +#define G_LOG10 "GEnergy::log10(double&, std::string&)"
41 42  
42 43 /* __ Macros _____________________________________________________________ */
43 44  
... ... @@ -123,7 +124,6 @@ GEnergy::GEnergy(const double& eng, const std::string& unit)
123 124 " \"GeV\", or \"TeV\" (case insensitive).");
124 125 }
125 126  
126   -
127 127 // Return
128 128 return;
129 129 }
... ... @@ -154,7 +154,7 @@ GEnergy::~GEnergy(void)
154 154 * @param[in] eng Energy.
155 155 * @return Energy.
156 156 ***************************************************************************/
157   -GEnergy& GEnergy::operator= (const GEnergy& eng)
  157 +GEnergy& GEnergy::operator=(const GEnergy& eng)
158 158 {
159 159 // Execute only if object is not identical
160 160 if (this != &eng) {
... ... @@ -282,6 +282,23 @@ double GEnergy::TeV(void) const
282 282  
283 283  
284 284 /***********************************************************************//**
  285 + * @brief Return log10 of energy in erg
  286 + *
  287 + * @return Energy in log10 erg.
  288 + *
  289 + * Returns the log10 of the energy in erg.
  290 + ***************************************************************************/
  291 +double GEnergy::log10erg(void) const
  292 +{
  293 + // Set offset
  294 + const double offset = std::log10(gammalib::MeV2erg);
  295 +
  296 + // Return log10 energy
  297 + return (log10MeV()+offset);
  298 +}
  299 +
  300 +
  301 +/***********************************************************************//**
285 302 * @brief Return log10 of energy in keV
286 303 *
287 304 * @return Energy in log10 keV.
... ... @@ -437,6 +454,24 @@ void GEnergy::TeV(const double& eng)
437 454  
438 455  
439 456 /***********************************************************************//**
  457 + * @brief Set log10 of energy in erg
  458 + *
  459 + * @param[in] eng log10 of energy in erg.
  460 + ***************************************************************************/
  461 +void GEnergy::log10erg(const double& eng)
  462 +{
  463 + // Set offset
  464 + const double offset = std::log10(gammalib::MeV2erg);
  465 +
  466 + // Set energy
  467 + log10MeV(eng-offset);
  468 +
  469 + // Return
  470 + return;
  471 +}
  472 +
  473 +
  474 +/***********************************************************************//**
440 475 * @brief Set log10 of energy in keV
441 476 *
442 477 * @param[in] eng log10 of energy in keV.
... ... @@ -499,6 +534,42 @@ void GEnergy::log10TeV(const double& eng)
499 534  
500 535  
501 536 /***********************************************************************//**
  537 + * @brief Set log10 of energy with unit specification
  538 + *
  539 + * @param[in] eng log10 of energy.
  540 + * @param[in] unit Unit of log10 of energy.
  541 + ***************************************************************************/
  542 +void GEnergy::log10(const double& eng, const std::string& unit)
  543 +{
  544 + // Set energy according to unit string
  545 + std::string eunit = gammalib::tolower(unit);
  546 + if (eunit == "erg" || eunit == "ergs") {
  547 + this->log10erg(eng);
  548 + }
  549 + else if (eunit == "kev") {
  550 + this->log10keV(eng);
  551 + }
  552 + else if (eunit == "mev") {
  553 + this->log10MeV(eng);
  554 + }
  555 + else if (eunit == "gev") {
  556 + this->log10GeV(eng);
  557 + }
  558 + else if (eunit == "tev") {
  559 + this->log10TeV(eng);
  560 + }
  561 + else {
  562 + throw GException::invalid_argument(G_LOG10, unit,
  563 + "Valid energy units are \"erg(s)\", \"keV\", \"MeV\","
  564 + " \"GeV\", or \"TeV\" (case insensitive).");
  565 + }
  566 +
  567 + // Return
  568 + return;
  569 +}
  570 +
  571 +
  572 +/***********************************************************************//**
502 573 * @brief Print energy
503 574 *
504 575 * @param[in] chatter Chattiness (defaults to NORMAL).
... ...