Commit 1661676c505eb9389c997489972b0c80526c91db
1 parent
bc197f98
Fix regression bug introduces in cssens.py during refactoring
Showing
2 changed files
with
48 additions
and
23 deletions
cscripts/cssens.py
| ... | ... | @@ -373,7 +373,17 @@ class cssens(ctools.cscript): |
| 373 | 373 | logL = fit.opt().value() |
| 374 | 374 | npred = fit.obs().npred() |
| 375 | 375 | models = fit.obs().models() |
| 376 | - ts = models[self._srcname].ts() | |
| 376 | + source = models[self._srcname] | |
| 377 | + ts = source.ts() | |
| 378 | + | |
| 379 | + # Get fitted Crab, photon and energy fluxes | |
| 380 | + crab_flux = source['Prefactor'].value() / crab_prefactor | |
| 381 | + photon_flux = source.spectral().flux(emin, emax) | |
| 382 | + energy_flux = source.spectral().eflux(emin, emax) | |
| 383 | + | |
| 384 | + # Compute differential sensitivity in unit erg/cm2/s | |
| 385 | + energy = gammalib.GEnergy(e_mean, 'TeV') | |
| 386 | + sensitivity = source.spectral().eval(energy) * e_mean*erg_mean * 1.0e6 | |
| 377 | 387 | |
| 378 | 388 | # Assess quality based on a comparison between Npred and Nevents |
| 379 | 389 | quality = npred - nevents |
| ... | ... | @@ -400,27 +410,30 @@ class cssens(ctools.cscript): |
| 400 | 410 | for par in model: |
| 401 | 411 | self._log(str(par)+'\n') |
| 402 | 412 | |
| 403 | - # Start over if TS was non-positive | |
| 413 | + # If TS was non-positive then increase the test flux and start | |
| 414 | + # over | |
| 404 | 415 | if ts <= 0.0: |
| 405 | - if self._logExplicit(): | |
| 406 | - self._log('Non positive TS. Start over.\n') | |
| 407 | - continue | |
| 408 | 416 | |
| 409 | - # Get fitted Crab, photon and energy fluxes | |
| 410 | - crab_flux = models[self._srcname]['Prefactor'].value() / \ | |
| 411 | - crab_prefactor | |
| 412 | - photon_flux = models[self._srcname].spectral().flux(emin, emax) | |
| 413 | - energy_flux = models[self._srcname].spectral().eflux(emin, emax) | |
| 417 | + # If the number of iterations was exceeded then stop | |
| 418 | + if (iterations >= self._max_iter): | |
| 419 | + if self._logTerse(): | |
| 420 | + self._log(' Test ended after %d iterations.\n' % | |
| 421 | + self._max_iter) | |
| 422 | + break | |
| 414 | 423 | |
| 415 | - # Compute differential sensitivity in unit erg/cm2/s | |
| 416 | - energy = gammalib.GEnergy(e_mean, 'TeV') | |
| 417 | - sensitivity = models[self._srcname].spectral().eval(energy) * \ | |
| 418 | - e_mean*erg_mean * 1.0e6 | |
| 424 | + # Increase test flux by a factor of 2 | |
| 425 | + test_crab_flux = test_crab_flux * 2.0 | |
| 426 | + | |
| 427 | + # Signal start we start over | |
| 428 | + if self._logExplicit(): | |
| 429 | + self._log('Non positive TS, increase test flux and start ' | |
| 430 | + 'over.\n') | |
| 431 | + | |
| 432 | + # ... and start over | |
| 433 | + continue | |
| 419 | 434 | |
| 420 | 435 | # Compute flux correction factor based on average TS |
| 421 | - correct = 1.0 | |
| 422 | - if ts > 0: | |
| 423 | - correct = math.sqrt(self._ts_thres/ts) | |
| 436 | + correct = math.sqrt(self._ts_thres/ts) | |
| 424 | 437 | |
| 425 | 438 | # Compute extrapolated fluxes |
| 426 | 439 | crab_flux = correct * crab_flux |
| ... | ... | @@ -432,7 +445,7 @@ class cssens(ctools.cscript): |
| 432 | 445 | energy_flux_value.append(energy_flux) |
| 433 | 446 | sensitivity_value.append(sensitivity) |
| 434 | 447 | |
| 435 | - # Write background and test source fit results | |
| 448 | + # Write fit results | |
| 436 | 449 | if self._logExplicit(): |
| 437 | 450 | self._log.parformat('Photon flux') |
| 438 | 451 | self._log(photon_flux) |
| ... | ... | @@ -453,7 +466,7 @@ class cssens(ctools.cscript): |
| 453 | 466 | for par in model: |
| 454 | 467 | self._log(str(par)+'\n') |
| 455 | 468 | elif self._logTerse(): |
| 456 | - self._log.parformat('Iteration '+str(iterations)) | |
| 469 | + self._log.parformat('Iteration %d' % iterations) | |
| 457 | 470 | self._log('TS=') |
| 458 | 471 | self._log(ts) |
| 459 | 472 | self._log(' ') |
| ... | ... | @@ -589,7 +602,19 @@ class cssens(ctools.cscript): |
| 589 | 602 | results = [] |
| 590 | 603 | |
| 591 | 604 | # Set test source model for this observation |
| 592 | - models = modutils.test_source(self._obs.models(), self._srcname) | |
| 605 | + models = modutils.test_source(self._obs.models(), self._srcname, | |
| 606 | + ra=self._ra, dec=self._dec) | |
| 607 | + | |
| 608 | + # Write observations into logger | |
| 609 | + if self._logTerse(): | |
| 610 | + self._log('\n') | |
| 611 | + self._log.header1(gammalib.number('Observation',len(self._obs))) | |
| 612 | + self._log(str(self._obs)) | |
| 613 | + self._log('\n') | |
| 614 | + if self._logExplicit(): | |
| 615 | + for obs in self._obs: | |
| 616 | + self._log(str(obs)) | |
| 617 | + self._log('\n') | |
| 593 | 618 | |
| 594 | 619 | # Write models into logger |
| 595 | 620 | if self._logTerse(): | ... | ... |
test/test_cssens.py
| ... | ... | @@ -72,7 +72,7 @@ class Test(test): |
| 72 | 72 | cmd = cssens+' inmodel="'+self._model+'"'+ \ |
| 73 | 73 | ' srcname="Crab"'+ \ |
| 74 | 74 | ' caldb="'+self._caldb+'" irf="'+self._irf+'"'+ \ |
| 75 | - ' duration=500.0 rad=3.0 emin=1.0 emax=10.0 bins=1'+ \ | |
| 75 | + ' duration=1800.0 rad=3.0 emin=1.0 emax=10.0 bins=1'+ \ | |
| 76 | 76 | ' outfile="cssens_cmd1.dat"'+ \ |
| 77 | 77 | ' logfile="cssens_cmd1.log" chatter=1' |
| 78 | 78 | |
| ... | ... | @@ -91,7 +91,7 @@ class Test(test): |
| 91 | 91 | cmd = cssens+' inmodel="model_that_does_not_exist.xml"'+ \ |
| 92 | 92 | ' srcname="Crab"'+ \ |
| 93 | 93 | ' caldb="'+self._caldb+'" irf="'+self._irf+'"'+ \ |
| 94 | - ' duration=500.0 rad=3.0 emin=1.0 emax=10.0 bins=1'+ \ | |
| 94 | + ' duration=1800.0 rad=3.0 emin=1.0 emax=10.0 bins=1'+ \ | |
| 95 | 95 | ' outfile="cssens_cmd2.dat"'+ \ |
| 96 | 96 | ' logfile="cssens_cmd2.log" chatter=2' |
| 97 | 97 | |
| ... | ... | @@ -115,7 +115,7 @@ class Test(test): |
| 115 | 115 | sens['caldb'] = self._caldb |
| 116 | 116 | sens['irf'] = self._irf |
| 117 | 117 | sens['outfile'] = 'cssens_py1.dat' |
| 118 | - sens['duration'] = 500.0 | |
| 118 | + sens['duration'] = 1800.0 | |
| 119 | 119 | sens['rad'] = 3.0 |
| 120 | 120 | sens['emin'] = 1.0 |
| 121 | 121 | sens['emax'] = 10.0 | ... | ... |