Commit a5d5b18e928630388ca9cff974931e84255c9958
1 parent
eb60348d
Do not allow counts cube as inobs for ctbin, ctexpcube, ctpsfcube and ctbkgcube.
Added ctool::require_inobs_nocube() method that throws an exception if a counts cube has been specified as inobs parameter. This method is then used by ctbin, ctexpcube, ctpsfcube and ctbkgcube.
Showing
7 changed files
with
76 additions
and
5 deletions
pyext/ctool.i
| @@ -99,6 +99,7 @@ public: | @@ -99,6 +99,7 @@ public: | ||
| 99 | 99 | ||
| 100 | // Protected methods that check user parameters | 100 | // Protected methods that check user parameters |
| 101 | void require_inobs(const std::string& method); | 101 | void require_inobs(const std::string& method); |
| 102 | + void require_inobs_nocube(const std::string& method); | ||
| 102 | 103 | ||
| 103 | // Protected support methods | 104 | // Protected support methods |
| 104 | void set_response(GObservations& obs); | 105 | void set_response(GObservations& obs); |
src/ctbin/ctbin.cpp
| @@ -434,6 +434,9 @@ void ctbin::get_parameters(void) | @@ -434,6 +434,9 @@ void ctbin::get_parameters(void) | ||
| 434 | // Throw exception if no input observation file is given | 434 | // Throw exception if no input observation file is given |
| 435 | require_inobs(G_GET_PARAMETERS); | 435 | require_inobs(G_GET_PARAMETERS); |
| 436 | 436 | ||
| 437 | + // Throw exception if counts cube is given | ||
| 438 | + require_inobs_nocube(G_GET_PARAMETERS); | ||
| 439 | + | ||
| 437 | // Get observation container without response (not needed) | 440 | // Get observation container without response (not needed) |
| 438 | m_obs = get_observations(false); | 441 | m_obs = get_observations(false); |
| 439 | 442 |
src/ctbkgcube/ctbkgcube.cpp
| @@ -450,6 +450,9 @@ void ctbkgcube::get_parameters(void) | @@ -450,6 +450,9 @@ void ctbkgcube::get_parameters(void) | ||
| 450 | // Throw exception if no input observation file is given | 450 | // Throw exception if no input observation file is given |
| 451 | require_inobs(G_GET_PARAMETERS); | 451 | require_inobs(G_GET_PARAMETERS); |
| 452 | 452 | ||
| 453 | + // Throw exception if counts cube is given | ||
| 454 | + require_inobs_nocube(G_GET_PARAMETERS); | ||
| 455 | + | ||
| 453 | // Build observation container | 456 | // Build observation container |
| 454 | m_obs = get_observations(); | 457 | m_obs = get_observations(); |
| 455 | 458 |
src/ctexpcube/ctexpcube.cpp
| @@ -354,6 +354,9 @@ void ctexpcube::get_parameters(void) | @@ -354,6 +354,9 @@ void ctexpcube::get_parameters(void) | ||
| 354 | // Throw exception if no input observation file is given | 354 | // Throw exception if no input observation file is given |
| 355 | require_inobs(G_GET_PARAMETERS); | 355 | require_inobs(G_GET_PARAMETERS); |
| 356 | 356 | ||
| 357 | + // Throw exception if counts cube is given | ||
| 358 | + require_inobs_nocube(G_GET_PARAMETERS); | ||
| 359 | + | ||
| 357 | // Build observation container | 360 | // Build observation container |
| 358 | m_obs = get_observations(); | 361 | m_obs = get_observations(); |
| 359 | 362 |
src/ctpsfcube/ctpsfcube.cpp
| @@ -353,6 +353,9 @@ void ctpsfcube::get_parameters(void) | @@ -353,6 +353,9 @@ void ctpsfcube::get_parameters(void) | ||
| 353 | // Throw exception if no input observation file is given | 353 | // Throw exception if no input observation file is given |
| 354 | require_inobs(G_GET_PARAMETERS); | 354 | require_inobs(G_GET_PARAMETERS); |
| 355 | 355 | ||
| 356 | + // Throw exception if counts cube is given | ||
| 357 | + require_inobs_nocube(G_GET_PARAMETERS); | ||
| 358 | + | ||
| 356 | // Build observation container | 359 | // Build observation container |
| 357 | m_obs = get_observations(); | 360 | m_obs = get_observations(); |
| 358 | 361 |
src/support/ctool.cpp
| @@ -656,18 +656,23 @@ GCTAObservation ctool::create_cta_obs(void) | @@ -656,18 +656,23 @@ GCTAObservation ctool::create_cta_obs(void) | ||
| 656 | 656 | ||
| 657 | 657 | ||
| 658 | /***********************************************************************//** | 658 | /***********************************************************************//** |
| 659 | - * @brief Throws exception in inobs parameter is not valid | 659 | + * @brief Throws exception if inobs parameter is not valid |
| 660 | * | 660 | * |
| 661 | * @param[in] method Method name. | 661 | * @param[in] method Method name. |
| 662 | + * | ||
| 663 | + * Throw an exception if the inobs parameter is either NONE or an empty | ||
| 664 | + * string. | ||
| 662 | ***************************************************************************/ | 665 | ***************************************************************************/ |
| 663 | void ctool::require_inobs(const std::string& method) | 666 | void ctool::require_inobs(const std::string& method) |
| 664 | { | 667 | { |
| 668 | + // Get inobs filename | ||
| 669 | + std::string filename = (*this)["inobs"].filename(); | ||
| 670 | + | ||
| 665 | // Throw exception if no infile is given | 671 | // Throw exception if no infile is given |
| 666 | - if ((*this)["inobs"].filename() == "NONE" || | ||
| 667 | - (*this)["inobs"].filename() == "") { | 672 | + if (filename == "NONE" || gammalib::strip_whitespace(filename) == "") { |
| 668 | std::string msg = "A valid file needs to be specified for the " | 673 | std::string msg = "A valid file needs to be specified for the " |
| 669 | - "\"inobs\" parameter, yet \""+ | ||
| 670 | - (*this)["inobs"].filename()+"\" was given." | 674 | + "\"inobs\" parameter, yet \""+filename+ |
| 675 | + "\" was given." | ||
| 671 | " Specify a valid observation definition or " | 676 | " Specify a valid observation definition or " |
| 672 | "FITS file to proceed."; | 677 | "FITS file to proceed."; |
| 673 | throw GException::invalid_value(method, msg); | 678 | throw GException::invalid_value(method, msg); |
| @@ -679,6 +684,58 @@ void ctool::require_inobs(const std::string& method) | @@ -679,6 +684,58 @@ void ctool::require_inobs(const std::string& method) | ||
| 679 | 684 | ||
| 680 | 685 | ||
| 681 | /***********************************************************************//** | 686 | /***********************************************************************//** |
| 687 | + * @brief Throws exception if inobs parameter is a counts cube | ||
| 688 | + * | ||
| 689 | + * @param[in] method Method name. | ||
| 690 | + * | ||
| 691 | + * Throw an exception if the inobs parameter is a counts cube. | ||
| 692 | + ***************************************************************************/ | ||
| 693 | +void ctool::require_inobs_nocube(const std::string& method) | ||
| 694 | +{ | ||
| 695 | + // Get inobs filename | ||
| 696 | + std::string filename = (*this)["inobs"].filename(); | ||
| 697 | + | ||
| 698 | + // Continue only if we have a FITS file | ||
| 699 | + if (gammalib::is_fits(filename)) { | ||
| 700 | + | ||
| 701 | + // Signal su | ||
| 702 | + bool is_cube = false; | ||
| 703 | + | ||
| 704 | + // Try loading file as counts cube. If this is successful then | ||
| 705 | + // throw an exception | ||
| 706 | + try { | ||
| 707 | + | ||
| 708 | + // Load cube from file | ||
| 709 | + GCTAEventCube cube(filename); | ||
| 710 | + | ||
| 711 | + // If we're still alive then signal that we have a cube | ||
| 712 | + is_cube = true; | ||
| 713 | + | ||
| 714 | + } | ||
| 715 | + | ||
| 716 | + // Catch any exceptions | ||
| 717 | + catch (...) { | ||
| 718 | + ; | ||
| 719 | + } | ||
| 720 | + | ||
| 721 | + // If we have a counts cube then throw an exception | ||
| 722 | + if (is_cube) { | ||
| 723 | + std::string msg = "A counts cube has been specified for the " | ||
| 724 | + "\"inobs\" parameter, yet no counts cube " | ||
| 725 | + "can be specified as input observation." | ||
| 726 | + " Instead, specify an event list or an " | ||
| 727 | + "observation definition file."; | ||
| 728 | + throw GException::invalid_value(method, msg); | ||
| 729 | + } | ||
| 730 | + | ||
| 731 | + } // endif: we had a FITS file | ||
| 732 | + | ||
| 733 | + // Return | ||
| 734 | + return; | ||
| 735 | +} | ||
| 736 | + | ||
| 737 | + | ||
| 738 | +/***********************************************************************//** | ||
| 682 | * @brief Set response for all CTA observations in container | 739 | * @brief Set response for all CTA observations in container |
| 683 | * | 740 | * |
| 684 | * @param[in,out] obs Observation container | 741 | * @param[in,out] obs Observation container |
src/support/ctool.hpp
| @@ -81,6 +81,7 @@ protected: | @@ -81,6 +81,7 @@ protected: | ||
| 81 | 81 | ||
| 82 | // Protected methods that check user parameters | 82 | // Protected methods that check user parameters |
| 83 | void require_inobs(const std::string& method); | 83 | void require_inobs(const std::string& method); |
| 84 | + void require_inobs_nocube(const std::string& method); | ||
| 84 | 85 | ||
| 85 | // Protected support methods | 86 | // Protected support methods |
| 86 | void set_response(GObservations& obs); | 87 | void set_response(GObservations& obs); |