Commit be91dbc98c4af2680da3cd1c20d95f0b0875fc16

Authored by Michael Mayer
1 parent cdd84c91

commit after extensive tests of the skymap creation

inst/cta/src/GCTAModelBackground.cpp
@@ -1011,7 +1011,7 @@ void GCTAModelBackground::set_spatial(const GCTAObservation& obs, const std::str @@ -1011,7 +1011,7 @@ void GCTAModelBackground::set_spatial(const GCTAObservation& obs, const std::str
1011 // Retrieve pointing in sky direction 1011 // Retrieve pointing in sky direction
1012 GSkyDir pntdir = pnt->dir(); 1012 GSkyDir pntdir = pnt->dir();
1013 1013
1014 - // Retrieve rotation matrix for sky coordinate to camera coordinate 1014 + // create rotation matrix
1015 GMatrix ry; 1015 GMatrix ry;
1016 GMatrix rz; 1016 GMatrix rz;
1017 ry.eulery(pntdir.dec_deg() - 90.0); 1017 ry.eulery(pntdir.dec_deg() - 90.0);
@@ -1032,9 +1032,6 @@ void GCTAModelBackground::set_spatial(const GCTAObservation& obs, const std::str @@ -1032,9 +1032,6 @@ void GCTAModelBackground::set_spatial(const GCTAObservation& obs, const std::str
1032 int ny = background.axis(1); 1032 int ny = background.axis(1);
1033 int n_energies = background.axis(2); 1033 int n_energies = background.axis(2);
1034 1034
1035 - // Set interpolation to logscale for energies  
1036 - background.axis_log10(2);  
1037 -  
1038 // retrieve spatial bounds 1035 // retrieve spatial bounds
1039 double xlow = background.axis_lo(0,0); 1036 double xlow = background.axis_lo(0,0);
1040 double xhigh = background.axis_hi(0,background.axis(0)-1); 1037 double xhigh = background.axis_hi(0,background.axis(0)-1);
@@ -1047,16 +1044,22 @@ void GCTAModelBackground::set_spatial(const GCTAObservation& obs, const std::str @@ -1047,16 +1044,22 @@ void GCTAModelBackground::set_spatial(const GCTAObservation& obs, const std::str
1047 1044
1048 // Loop over energies 1045 // Loop over energies
1049 for(int i=0;i<n_energies;i++) { 1046 for(int i=0;i<n_energies;i++) {
  1047 +
1050 // First create ebounds to get the logarithmic mean between two energies 1048 // First create ebounds to get the logarithmic mean between two energies
1051 - // TODO: simplify  
1052 ebounds.append(GEnergy(background.axis_lo(2,i),"TeV"), GEnergy(background.axis_hi(2,i),"TeV")); 1049 ebounds.append(GEnergy(background.axis_lo(2,i),"TeV"), GEnergy(background.axis_hi(2,i),"TeV"));
  1050 +
  1051 + // Append mean log energy to energies container
1053 energies.append(ebounds.elogmean(i)); 1052 energies.append(ebounds.elogmean(i));
1054 1053
1055 } // endfor: loop over energies 1054 } // endfor: loop over energies
1056 1055
  1056 +
  1057 + // Set interpolation to logscale for energies
  1058 + background.axis_log10(2);
  1059 +
1057 // creating the sky map 1060 // creating the sky map
1058 - double bin_size_x = ( xhigh - xlow ) / nx;  
1059 - double bin_size_y = ( yhigh - ylow ) / ny; 1061 + double bin_size_x = ( xhigh - xlow ) / nx * gammalib::rad2deg;
  1062 + double bin_size_y = ( yhigh - ylow ) / ny * gammalib::rad2deg;
1060 1063
1061 GSkymap cube = GSkymap("TAN","CEL",pntdir.ra_deg(),pntdir.dec_deg(),-1*bin_size_x,bin_size_y,nx,ny,ebounds.size()); 1064 GSkymap cube = GSkymap("TAN","CEL",pntdir.ra_deg(),pntdir.dec_deg(),-1*bin_size_x,bin_size_y,nx,ny,ebounds.size());
1062 1065
@@ -1066,40 +1069,42 @@ void GCTAModelBackground::set_spatial(const GCTAObservation&amp; obs, const std::str @@ -1066,40 +1069,42 @@ void GCTAModelBackground::set_spatial(const GCTAObservation&amp; obs, const std::str
1066 // Get sky direction from pixel number 1069 // Get sky direction from pixel number
1067 GSkyDir pix_dir = cube.inx2dir(i); 1070 GSkyDir pix_dir = cube.inx2dir(i);
1068 1071
1069 - // Retrieve coordinate vector, implying radec system for rotation matrix  
1070 // Get celestial vector from sky coordinate 1072 // Get celestial vector from sky coordinate
1071 - GVector celvector = pntdir.celvector(); 1073 + GVector celvector = pix_dir.celvector();
1072 1074
1073 // Transform to instrument system 1075 // Transform to instrument system
1074 GVector inst = rot * celvector; 1076 GVector inst = rot * celvector;
1075 1077
  1078 + // Initialise instrument coordinates
1076 double x_inst = 0.0; 1079 double x_inst = 0.0;
1077 double y_inst = 0.0; 1080 double y_inst = 0.0;
1078 1081
  1082 + // Get offset from cel vector, i.e. distance from camera center
1079 double theta = std::acos(inst[2]); 1083 double theta = std::acos(inst[2]);
1080 1084
  1085 + // Check if theta and phi are defined
1081 if ( theta > 0.0 ) { 1086 if ( theta > 0.0 ) {
1082 1087
1083 double phi = std::asin( inst[1] / std::sin(theta) ); 1088 double phi = std::asin( inst[1] / std::sin(theta) );
1084 -  
1085 x_inst = theta * std::cos(phi); 1089 x_inst = theta * std::cos(phi);
1086 y_inst = theta * std::sin(phi); 1090 y_inst = theta * std::sin(phi);
1087 } 1091 }
1088 1092
1089 -  
1090 - //GVector native(-cos_phi*m_sin_theta, sin_phi*m_sin_theta, m_cos_theta);  
1091 -  
1092 - // loop on the energy map 1093 + // loop on the energy map
1093 for(int j = 0 ; j < energies.size(); j++) { 1094 for(int j = 0 ; j < energies.size(); j++) {
1094 1095
1095 // Determine background value in instrument system for given 1096 // Determine background value in instrument system for given
1096 std::vector<double> value = background(x_inst, y_inst, energies[j].log10TeV()); 1097 std::vector<double> value = background(x_inst, y_inst, energies[j].log10TeV());
  1098 +
  1099 + // Set skymap value
1097 cube(i,j) = value[0]; 1100 cube(i,j) = value[0];
1098 1101
1099 } // endfor: loop over energies 1102 } // endfor: loop over energies
1100 1103
1101 } // endfor: loop over sky bins 1104 } // endfor: loop over sky bins
1102 1105
  1106 + cube.save("test_cube.fits",true);
  1107 +
1103 // Create the GModelSpatialDiffuseCube 1108 // Create the GModelSpatialDiffuseCube
1104 m_spatial = new GModelSpatialDiffuseCube(cube,energies); 1109 m_spatial = new GModelSpatialDiffuseCube(cube,energies);
1105 1110
inst/cta/src/GCTAResponseTable.cpp
@@ -328,7 +328,7 @@ std::vector&lt;double&gt; GCTAResponseTable::operator()(const double&amp; arg1, @@ -328,7 +328,7 @@ std::vector&lt;double&gt; GCTAResponseTable::operator()(const double&amp; arg1,
328 m_wgt7 * m_pars[i][m_inx7] + 328 m_wgt7 * m_pars[i][m_inx7] +
329 m_wgt8 * m_pars[i][m_inx8] ; 329 m_wgt8 * m_pars[i][m_inx8] ;
330 } 330 }
331 - 331 +
332 // Return result vector 332 // Return result vector
333 return result; 333 return result;
334 } 334 }
@@ -459,6 +459,7 @@ double GCTAResponseTable::operator()(const int&amp; index, const double&amp; arg1, @@ -459,6 +459,7 @@ double GCTAResponseTable::operator()(const int&amp; index, const double&amp; arg1,
459 m_wgt8 * m_pars[index][m_inx8]; 459 m_wgt8 * m_pars[index][m_inx8];
460 460
461 461
  462 +
462 // Return result 463 // Return result
463 return result; 464 return result;
464 } 465 }
@@ -1343,6 +1344,7 @@ void GCTAResponseTable::update(const double&amp; arg1, const double&amp; arg2, const dou @@ -1343,6 +1344,7 @@ void GCTAResponseTable::update(const double&amp; arg1, const double&amp; arg2, const dou
1343 nodes2->set_value(arg2); 1344 nodes2->set_value(arg2);
1344 nodes3->set_value(arg3); 1345 nodes3->set_value(arg3);
1345 1346
  1347 + //std::cout<<"X="<<arg1<<" "<<nodes1->inx_left()<<" "<<nodes1->inx_right() <<std::endl;
1346 // Compute offsets 1348 // Compute offsets
1347 int size1 = axis(0); 1349 int size1 = axis(0);
1348 int size2 = axis(1); 1350 int size2 = axis(1);
@@ -1371,7 +1373,7 @@ void GCTAResponseTable::update(const double&amp; arg1, const double&amp; arg2, const dou @@ -1371,7 +1373,7 @@ void GCTAResponseTable::update(const double&amp; arg1, const double&amp; arg2, const dou
1371 m_wgt6 = nodes1->wgt_right() * nodes2->wgt_left() * nodes3->wgt_right(); 1373 m_wgt6 = nodes1->wgt_right() * nodes2->wgt_left() * nodes3->wgt_right();
1372 m_wgt7 = nodes1->wgt_right() * nodes2->wgt_right()* nodes3->wgt_left() ; 1374 m_wgt7 = nodes1->wgt_right() * nodes2->wgt_right()* nodes3->wgt_left() ;
1373 m_wgt8 = nodes1->wgt_right() * nodes2->wgt_right()* nodes3->wgt_right(); 1375 m_wgt8 = nodes1->wgt_right() * nodes2->wgt_right()* nodes3->wgt_right();
1374 - 1376 +
1375 // Return 1377 // Return
1376 return; 1378 return;
1377 } 1379 }
inst/cta/test/data/bg_test.fits
No preview for this file type