Commit 63cffb8730583f158b544f0bce00a8bebe1a65a3
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.
Showing
3 changed files
with
80 additions
and
3 deletions
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). | ... | ... |