Commit 6b89b8ff6dc310d5e7dbf6df9fef1267a95636c7
1 parent
b4c68064
Solved the segmentation fault issue, still a bug in solid angle calculation. Cha…
…nged GSkyRegion::solidangle() return type.
Showing
3 changed files
with
14 additions
and
13 deletions
include/GSkyRegion.hpp
| ... | ... | @@ -80,7 +80,7 @@ public: |
| 80 | 80 | const std::string& type(void) const; |
| 81 | 81 | const std::string& name(void) const; |
| 82 | 82 | void name(const std::string& name); |
| 83 | - const double& solidangle(void) const; | |
| 83 | + double solidangle(void) const; | |
| 84 | 84 | |
| 85 | 85 | protected: |
| 86 | 86 | // Protected methods |
| ... | ... | @@ -145,7 +145,7 @@ const std::string& GSkyRegion::type(void) const |
| 145 | 145 | * Returns the solid angle subtended by the region (in steradian). |
| 146 | 146 | ***************************************************************************/ |
| 147 | 147 | inline |
| 148 | -const double& GSkyRegion::solidangle(void) const | |
| 148 | +double GSkyRegion::solidangle(void) const | |
| 149 | 149 | { |
| 150 | 150 | return (m_solid); |
| 151 | 151 | } | ... | ... |
inst/cta/src/GCTAOnOffObservation.cpp
| ... | ... | @@ -677,8 +677,6 @@ double GCTAOnOffObservation::model_on(const GModels& models, |
| 677 | 677 | // Initialize variables (vector has 0.0 values) |
| 678 | 678 | double ngam=0.0; |
| 679 | 679 | int i_par=0; |
| 680 | - //if (mod_grad != NULL) delete mod_grad; | |
| 681 | - //mod_grad = new GVector(npars); | |
| 682 | 680 | |
| 683 | 681 | // If bin number is in range |
| 684 | 682 | if (ibin < m_on_spec.size()) { |
| ... | ... | @@ -743,7 +741,7 @@ double GCTAOnOffObservation::model_on(const GModels& models, |
| 743 | 741 | if (sppar.is_free() && i_par < npars) { |
| 744 | 742 | // Debug |
| 745 | 743 | std::cout << "Setting model gradient for parameter " << i_par << "/" << mod_grad->size() << std::endl; |
| 746 | - mod_grad[i_par]=sppar.gradient(); | |
| 744 | + (*mod_grad)[i_par]=sppar.gradient(); | |
| 747 | 745 | i_par++; |
| 748 | 746 | } |
| 749 | 747 | |
| ... | ... | @@ -806,8 +804,6 @@ double GCTAOnOffObservation::model_off(const GModels& models, |
| 806 | 804 | // Initialize variables (vector has 0.0 values) |
| 807 | 805 | double nbgd=0.0; |
| 808 | 806 | int i_par=0; |
| 809 | - //if (mod_grad != NULL) delete mod_grad; | |
| 810 | - //mod_grad = new GVector(npars); | |
| 811 | 807 | |
| 812 | 808 | // If bin number is in range |
| 813 | 809 | if (ibin < m_off_spec.size()) { |
| ... | ... | @@ -857,10 +853,13 @@ double GCTAOnOffObservation::model_off(const GModels& models, |
| 857 | 853 | |
| 858 | 854 | // Compute total solid angle for OFF regions |
| 859 | 855 | double totsolidangle=0.0; |
| 856 | + double solidangle=0.0; | |
| 860 | 857 | for (int m = 0; m < m_off_regions.size(); ++m) { |
| 861 | 858 | const GSkyRegion* skyreg=m_off_regions[m]; |
| 862 | - totsolidangle += skyreg->solidangle(); | |
| 863 | - } | |
| 859 | + solidangle=skyreg->solidangle(); | |
| 860 | + totsolidangle += solidangle; | |
| 861 | + } | |
| 862 | + | |
| 864 | 863 | // Number of gamma events in model |
| 865 | 864 | // (Get flux over energy bin in ph/cm2/s and multiply by effective area and time and solid angle) |
| 866 | 865 | nbgd += spebgdptr->flux(emin,emax)*m_offtime*totsolidangle; |
| ... | ... | @@ -876,7 +875,7 @@ double GCTAOnOffObservation::model_off(const GModels& models, |
| 876 | 875 | if (sppar.is_free() && i_par < npars) { |
| 877 | 876 | // Debug |
| 878 | 877 | std::cout << "Setting model gradient for parameter " << i_par << "/" << mod_grad->size() << std::endl; |
| 879 | - mod_grad[i_par]=sppar.gradient(); | |
| 878 | + (*mod_grad)[i_par]=sppar.gradient(); | |
| 880 | 879 | i_par++; |
| 881 | 880 | } |
| 882 | 881 | |
| ... | ... | @@ -911,9 +910,11 @@ double GCTAOnOffObservation::model_off(const GModels& models, |
| 911 | 910 | |
| 912 | 911 | // Compute total solid angle for OFF regions |
| 913 | 912 | double totsolidangle=0.0; |
| 913 | + double solidangle=0.0; | |
| 914 | 914 | for (int m = 0; m < m_off_regions.size(); ++m) { |
| 915 | 915 | const GSkyRegion* skyreg=m_off_regions[m]; |
| 916 | - totsolidangle += skyreg->solidangle(); | |
| 916 | + solidangle=skyreg->solidangle(); | |
| 917 | + totsolidangle += solidangle; | |
| 917 | 918 | } |
| 918 | 919 | |
| 919 | 920 | // Number of gamma events in model |
| ... | ... | @@ -931,7 +932,7 @@ double GCTAOnOffObservation::model_off(const GModels& models, |
| 931 | 932 | if (sppar.is_free() && i_par < npars) { |
| 932 | 933 | // Debug |
| 933 | 934 | std::cout << "Setting model gradient for parameter " << i_par << "/" << mod_grad->size() << std::endl; |
| 934 | - mod_grad[i_par]=sppar.gradient(); | |
| 935 | + (*mod_grad)[i_par]=sppar.gradient(); | |
| 935 | 936 | i_par++; |
| 936 | 937 | } |
| 937 | 938 | ... | ... |
pyext/GSkyRegion.i