Commit 44919bfd3dd89486447db23b32fd3663ff421b4b
1 parent
667d8eb7
Implemented test case for csphagen which reads src and bkg regions from region f…
…iles. As output regions of test_cmd() and input regions of this test case are (should be!) the same a comparison of the results obtained with CUSTOM and with the REFLECTED method is made.
Showing
3 changed files
with
92 additions
and
1 deletions
test/data/crab_bkg_reg.reg
0 → 100644
| 1 | +# Region file format: DS9 version 4.1 | ||
| 2 | +global color=green dashlist=8 3 width=1 | ||
| 3 | +fk5;circle(82.2412081162728,22.7975361111674,0.2) | ||
| 4 | +fk5;circle(82.5360705305998,23.1293202741537,0.2) | ||
| 5 | +fk5;circle(82.980058098929,23.260640435668,0.2) | ||
| 6 | +fk5;circle(83.4304728956696,23.1492236356079,0.2) | ||
| 7 | +fk5;circle(83.7424610541293,22.8309432073396,0.2) |
test/data/crab_src_reg.reg
0 → 100644
test/test_csphagen.py
| @@ -52,6 +52,9 @@ class Test(test): | @@ -52,6 +52,9 @@ class Test(test): | ||
| 52 | self._nbins = 10 | 52 | self._nbins = 10 |
| 53 | # number of expected background regions with/wo exclusion, | 53 | # number of expected background regions with/wo exclusion, |
| 54 | # and for two different runs | 54 | # and for two different runs |
| 55 | + self._regfile_src = self._datadir + '/crab_src_reg.reg' | ||
| 56 | + self._regfile_bkg = self._datadir + '/crab_bkg_reg.reg' | ||
| 57 | + self._counts_reflected = 0 | ||
| 55 | 58 | ||
| 56 | # Return | 59 | # Return |
| 57 | return | 60 | return |
| @@ -67,6 +70,7 @@ class Test(test): | @@ -67,6 +70,7 @@ class Test(test): | ||
| 67 | # Append tests | 70 | # Append tests |
| 68 | self.append(self._test_cmd, 'Test csphagen on command line') | 71 | self.append(self._test_cmd, 'Test csphagen on command line') |
| 69 | self.append(self._test_python, 'Test csphagen from Python') | 72 | self.append(self._test_python, 'Test csphagen from Python') |
| 73 | + self.append(self._test_regfiles_cmd, 'Test csphagen input region files on command line') | ||
| 70 | 74 | ||
| 71 | # Return | 75 | # Return |
| 72 | return | 76 | return |
| @@ -103,6 +107,9 @@ class Test(test): | @@ -103,6 +107,9 @@ class Test(test): | ||
| 103 | self._check_output('csphagen_cmd1', self._nbins, self._nreg_with_excl) | 107 | self._check_output('csphagen_cmd1', self._nbins, self._nreg_with_excl) |
| 104 | self._check_outobs('csphagen_cmd1', 1) | 108 | self._check_outobs('csphagen_cmd1', 1) |
| 105 | 109 | ||
| 110 | + # store on-counts for later testing bkgmethod CUSTOM | ||
| 111 | + self._counts_reflected = self._read_pha_counts('csphagen_cmd1_pha_on.fits') | ||
| 112 | + | ||
| 106 | # Setup csphagen command | 113 | # Setup csphagen command |
| 107 | cmd = csphagen + ' inobs="events_that_do_not_exist.fits" ' + \ | 114 | cmd = csphagen + ' inobs="events_that_do_not_exist.fits" ' + \ |
| 108 | 'caldb="' + self._caldb + '" irf="' + self._irf + \ | 115 | 'caldb="' + self._caldb + '" irf="' + self._irf + \ |
| @@ -259,6 +266,57 @@ class Test(test): | @@ -259,6 +266,57 @@ class Test(test): | ||
| 259 | # Return | 266 | # Return |
| 260 | return | 267 | return |
| 261 | 268 | ||
| 269 | + # Test csphagen input region files (command line) | ||
| 270 | + def _test_regfiles_cmd(self): | ||
| 271 | + """ | ||
| 272 | + Test csphagen input region files (command line). | ||
| 273 | + This is done by redoing the test performed in _test_cmd() | ||
| 274 | + but this time bkgmethod is CUSTOM and the regions are read | ||
| 275 | + from ds9 region files. Exactly the same output of csphagen | ||
| 276 | + compared to _test_cmd() is expected. | ||
| 277 | + Hint: The output region files of _test_cmd() could be used | ||
| 278 | + directly, but to make the execution of this test case standalone | ||
| 279 | + the output once created by _test_cmd() was copied and added | ||
| 280 | + staticly to the repository. | ||
| 281 | + """ | ||
| 282 | + # Set script name | ||
| 283 | + csphagen = self._script('csphagen') | ||
| 284 | + | ||
| 285 | + # Setup csphagen command | ||
| 286 | + # TODO: remove rad from cmd line arguments. currently it is needed (ctool::set_obs_bounds needs rad!) | ||
| 287 | + cmd = csphagen + ' inobs="' + self._myevents1 + \ | ||
| 288 | + '" caldb="' + self._caldb + '" irf="' + self._irf + \ | ||
| 289 | + '" ebinalg="LOG" emin=0.1 emax=100. enumbins=' + \ | ||
| 290 | + str(self._nbins) + \ | ||
| 291 | + ' etruemin=0.05 etruemax=150 etruebins=5 '+ \ | ||
| 292 | + 'stack="no" ' + \ | ||
| 293 | + 'inexclusion="' + self._exclusion + '" ' + \ | ||
| 294 | + 'bkgmethod="CUSTOM" ' + \ | ||
| 295 | + 'rad=0.2 ' + \ | ||
| 296 | + 'srcreg="' + self._regfile_src + '" ' + \ | ||
| 297 | + 'bkgreg="' + self._regfile_bkg + '" ' + \ | ||
| 298 | + 'outobs="csphagen_regfiles_cmd1.xml" prefix="csphagen_regfiles_cmd1" ' + \ | ||
| 299 | + 'logfile="csphagen_regfiles_cmd1.log" chatter=2 ' + \ | ||
| 300 | + 'coordsys="CEL" ra=83.633 dec=22.0145' | ||
| 301 | + | ||
| 302 | + # Check if execution was successful | ||
| 303 | + self.test_assert(self._execute(cmd) == 0, | ||
| 304 | + 'Check successful execution from command line') | ||
| 305 | + | ||
| 306 | + # Check output files | ||
| 307 | + self._check_output('csphagen_regfiles_cmd1', self._nbins, self._nreg_with_excl) | ||
| 308 | + self._check_outobs('csphagen_regfiles_cmd1', 1) | ||
| 309 | + | ||
| 310 | + # Check resulting number of counts, which should be equal to those obtained in _test_cmd() | ||
| 311 | + counts_custom = self._read_pha_counts('csphagen_regfiles_cmd1_pha_on.fits') | ||
| 312 | + | ||
| 313 | + self.test_assert(counts_custom == self._counts_reflected, | ||
| 314 | + 'Check bkgmethods CUSTOM and REFLECTED: number of on-counts should be equal') | ||
| 315 | + | ||
| 316 | + # Return | ||
| 317 | + return | ||
| 318 | + | ||
| 319 | + | ||
| 262 | def _check_ebounds(self, table, bins): | 320 | def _check_ebounds(self, table, bins): |
| 263 | """ | 321 | """ |
| 264 | Check EBOUNDS table | 322 | Check EBOUNDS table |
| @@ -309,7 +367,7 @@ class Test(test): | @@ -309,7 +367,7 @@ class Test(test): | ||
| 309 | self.test_assert(table.contains(col), | 367 | self.test_assert(table.contains(col), |
| 310 | 'FITS file contains "' + col + '" column') | 368 | 'FITS file contains "' + col + '" column') |
| 311 | 369 | ||
| 312 | - # Check SPECTRUM table | 370 | + # Check EBOUNDS table |
| 313 | table = fits['EBOUNDS'] | 371 | table = fits['EBOUNDS'] |
| 314 | self._check_ebounds(table, bins) | 372 | self._check_ebounds(table, bins) |
| 315 | 373 | ||
| @@ -433,3 +491,26 @@ class Test(test): | @@ -433,3 +491,26 @@ class Test(test): | ||
| 433 | 491 | ||
| 434 | # Return | 492 | # Return |
| 435 | return | 493 | return |
| 494 | + | ||
| 495 | + def _read_pha_counts(self, filename): | ||
| 496 | + """ | ||
| 497 | + Read and integrate the counts in a pha file. | ||
| 498 | + Pha file structure already tested in _check_pha() | ||
| 499 | + """ | ||
| 500 | + # Open FITS file | ||
| 501 | + fits = gammalib.GFits(filename) | ||
| 502 | + | ||
| 503 | + # Get SPECTRUM table | ||
| 504 | + table = fits['SPECTRUM'] | ||
| 505 | + | ||
| 506 | + # Integrate counts | ||
| 507 | + counts_col = table['COUNTS'] | ||
| 508 | + counts = 0 | ||
| 509 | + for channel in range( counts_col.nrows() ): | ||
| 510 | + counts += counts_col[channel] | ||
| 511 | + | ||
| 512 | + # Close FITS file | ||
| 513 | + fits.close() | ||
| 514 | + | ||
| 515 | + # Return | ||
| 516 | + return counts |