Commit a6aedae3c1b3d82bd14bdb6621adb56a2f871335
Committed by
Jürgen Knödlseder
1 parent
11df2d07
faster edisp
in case `edisp=True`, only use it in practice once the flux calculation is near convergence
Showing
1 changed file
with
21 additions
and
1 deletions
cscripts/cssens.py
| ... | ... | @@ -371,6 +371,11 @@ class cssens(ctools.csobservation): |
| 371 | 371 | npix = 200 |
| 372 | 372 | binsz = 0.05 |
| 373 | 373 | |
| 374 | + # keep track of the original value of edisp | |
| 375 | + edisp_orig = self['edisp'].boolean() | |
| 376 | + # set edisp off for the first iterations | |
| 377 | + self['edisp'] = False | |
| 378 | + | |
| 374 | 379 | # Set flux ratio precision required for convergence to 5% |
| 375 | 380 | ratio_precision = 0.05 |
| 376 | 381 | |
| ... | ... | @@ -539,7 +544,18 @@ class cssens(ctools.csobservation): |
| 539 | 544 | self._log_value(gammalib.TERSE, 'Converged flux ratio', ratio) |
| 540 | 545 | self._log_value(gammalib.TERSE, 'Regression coefficient', |
| 541 | 546 | regcoeff) |
| 542 | - break | |
| 547 | + | |
| 548 | + # if the flux has converged, check if the original value of | |
| 549 | + # edisp was set, and is not what has fo far been used | |
| 550 | + if edisp_orig and not self['edisp'].boolean(): | |
| 551 | + # set edisp on and continue the calculation | |
| 552 | + self['edisp'] = True | |
| 553 | + | |
| 554 | + value = 'set edisp on after initial convergence withouth it' | |
| 555 | + self._log_value(gammalib.TERSE, 'Converged result', value) | |
| 556 | + else: | |
| 557 | + # finish the calculation after convergence | |
| 558 | + break | |
| 543 | 559 | else: |
| 544 | 560 | self._log_value(gammalib.TERSE, 'Not converged', 'Flux is zero') |
| 545 | 561 | break |
| ... | ... | @@ -553,6 +569,10 @@ class cssens(ctools.csobservation): |
| 553 | 569 | ' Test ended after %d iterations.' % max_iter) |
| 554 | 570 | break |
| 555 | 571 | |
| 572 | + # make sure edisp is set correctly before the count cuts | |
| 573 | + if edisp_orig and not self['edisp'].boolean(): | |
| 574 | + self['edisp'] = True | |
| 575 | + | |
| 556 | 576 | n_bck_evts = None |
| 557 | 577 | for iterations in range(max_iter): |
| 558 | 578 | pass_evt_cut, n_bck_evts = self._sim_evt_excess( | ... | ... |