Commit f29c6e7ad1074791bfcb1a6f1bbb00028ee54d8a
1 parent
3b0fd743
ctmodel now takes into account the RoI information when filling the cube
Showing
1 changed file
with
22 additions
and
2 deletions
src/ctmodel/ctmodel.cpp
| @@ -34,6 +34,7 @@ | @@ -34,6 +34,7 @@ | ||
| 34 | 34 | ||
| 35 | /* __ Method name definitions ____________________________________________ */ | 35 | /* __ Method name definitions ____________________________________________ */ |
| 36 | #define G_GET_PARAMETERS "ctmodel::get_parameters()" | 36 | #define G_GET_PARAMETERS "ctmodel::get_parameters()" |
| 37 | +#define G_FILL_CUBE "ctmodel::fill_cube(GCTAObservation*)" | ||
| 37 | 38 | ||
| 38 | /* __ Debug definitions __________________________________________________ */ | 39 | /* __ Debug definitions __________________________________________________ */ |
| 39 | 40 | ||
| @@ -585,17 +586,28 @@ void ctmodel::fill_cube(const GCTAObservation* obs) | @@ -585,17 +586,28 @@ void ctmodel::fill_cube(const GCTAObservation* obs) | ||
| 585 | // Continue only if observation pointer is valid | 586 | // Continue only if observation pointer is valid |
| 586 | if (obs != NULL) { | 587 | if (obs != NULL) { |
| 587 | 588 | ||
| 588 | - // Get energy boundaries and GTI references for observation | ||
| 589 | - const GEbounds& ebounds = obs->events()->ebounds(); | 589 | + // Get GTI references for observation |
| 590 | const GGti& gti = obs->events()->gti(); | 590 | const GGti& gti = obs->events()->gti(); |
| 591 | 591 | ||
| 592 | // Get the ebounds | 592 | // Get the ebounds |
| 593 | const GEbounds& obs_ebounds = obs->ebounds(); | 593 | const GEbounds& obs_ebounds = obs->ebounds(); |
| 594 | const GEbounds& cube_ebounds = m_cube.ebounds(); | 594 | const GEbounds& cube_ebounds = m_cube.ebounds(); |
| 595 | 595 | ||
| 596 | + // Extract region of interest from CTA observation | ||
| 597 | + GCTARoi roi = obs->roi(); | ||
| 598 | + | ||
| 599 | + // Check for RoI sanity | ||
| 600 | + if (!roi.is_valid()) { | ||
| 601 | + std::string msg = "No RoI information found in input observation " | ||
| 602 | + "\""+obs->name()+"\". Run ctselect to specify " | ||
| 603 | + "an RoI for this observation"; | ||
| 604 | + throw GException::invalid_value(G_FILL_CUBE, msg); | ||
| 605 | + } | ||
| 606 | + | ||
| 596 | // Initialise statistics | 607 | // Initialise statistics |
| 597 | double sum = 0.0; | 608 | double sum = 0.0; |
| 598 | int num_outside_ebds = 0; | 609 | int num_outside_ebds = 0; |
| 610 | + int num_outside_roi = 0; | ||
| 599 | 611 | ||
| 600 | // Setup cube GTIs for this observation | 612 | // Setup cube GTIs for this observation |
| 601 | m_cube.gti(obs->events()->gti()); | 613 | m_cube.gti(obs->events()->gti()); |
| @@ -615,6 +627,12 @@ void ctmodel::fill_cube(const GCTAObservation* obs) | @@ -615,6 +627,12 @@ void ctmodel::fill_cube(const GCTAObservation* obs) | ||
| 615 | continue; | 627 | continue; |
| 616 | } | 628 | } |
| 617 | 629 | ||
| 630 | + // Skip bin if outside RoI | ||
| 631 | + if (!roi.contains(*bin)) { | ||
| 632 | + num_outside_roi++; | ||
| 633 | + continue; | ||
| 634 | + } | ||
| 635 | + | ||
| 618 | // Get actual bin value | 636 | // Get actual bin value |
| 619 | double value = bin->counts(); | 637 | double value = bin->counts(); |
| 620 | 638 | ||
| @@ -642,6 +660,8 @@ void ctmodel::fill_cube(const GCTAObservation* obs) | @@ -642,6 +660,8 @@ void ctmodel::fill_cube(const GCTAObservation* obs) | ||
| 642 | log << sum << std::endl; | 660 | log << sum << std::endl; |
| 643 | log << gammalib::parformat("Bins outside energy range"); | 661 | log << gammalib::parformat("Bins outside energy range"); |
| 644 | log << num_outside_ebds << std::endl; | 662 | log << num_outside_ebds << std::endl; |
| 663 | + log << gammalib::parformat("Bins outside RoI"); | ||
| 664 | + log << num_outside_roi << std::endl; | ||
| 645 | } | 665 | } |
| 646 | 666 | ||
| 647 | // Log cube | 667 | // Log cube |