Commit 1661676c505eb9389c997489972b0c80526c91db

Authored by Jürgen Knödlseder
1 parent bc197f98

Fix regression bug introduces in cssens.py during refactoring

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
... ...