Commit 6b89b8ff6dc310d5e7dbf6df9fef1267a95636c7

Authored by Pierrick Martin
1 parent b4c68064

Solved the segmentation fault issue, still a bug in solid angle calculation. Cha…

…nged GSkyRegion::solidangle() return type.
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&amp; 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&amp; 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&amp; 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&amp; 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&amp; 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&amp; 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
... ... @@ -55,7 +55,7 @@ public:
55 55 const std::string& type(void) const;
56 56 const std::string& name(void) const;
57 57 void name(const std::string& name);
58   - const double& solidangle(void) const;
  58 + double solidangle(void) const;
59 59 };
60 60  
61 61  
... ...