Commit f506071d2a3fa6e57ea4417035b66d1599758cf7

Authored by Jürgen Knödlseder
1 parent c3384d71

Select relevant observations in cslightcrv

cscripts/cslightcrv.py
... ... @@ -21,6 +21,7 @@
21 21 import sys
22 22 import gammalib
23 23 import ctools
  24 +import cscripts
24 25 from cscripts import obsutils
25 26 from cscripts import ioutils
26 27 from cscripts import mputils
... ... @@ -454,57 +455,79 @@ class cslightcrv(ctools.csobservation):
454 455 'values': {}}
455 456  
456 457 # Log information
457   - self._log_header3(gammalib.EXPLICIT, 'Selecting events')
458   -
459   - # Select events
460   - select = ctools.ctselect(self.obs())
461   - select['emin'] = self['emin'].real()
462   - select['emax'] = self['emax'].real()
463   - select['tmin'] = tmin
464   - select['tmax'] = tmax
465   - select['rad'] = 'UNDEFINED'
466   - select['ra'] = 'UNDEFINED'
467   - select['dec'] = 'UNDEFINED'
  458 + self._log_header3(gammalib.EXPLICIT, 'Selecting observations')
  459 +
  460 + # Select observations
  461 + select = cscripts.csobsselect(self.obs())
  462 + select['pntselect'] = 'CIRCLE'
  463 + select['coordsys'] = 'GAL'
  464 + select['glon'] = 0.0
  465 + select['glat'] = 0.0
  466 + select['rad'] = 180.0
  467 + select['tmin'] = tmin
  468 + select['tmax'] = tmax
468 469 select.run()
469 470  
470   - # Retrieve observation
  471 + # Retrieve observations
471 472 obs = select.obs()
472 473  
473   - # Deal with stacked and On/Off Observations
474   - if self._stacked or self._onoff:
  474 + # If there are observations then select now events from them
  475 + if obs.size() > 0:
475 476  
476   - # If a stacked analysis is requested bin the events
477   - # and compute the stacked response functions and setup
478   - # an observation container with a single stacked observation.
479   - if self._stacked:
480   - new_obs = obsutils.get_stacked_obs(self, obs)
  477 + # Log information
  478 + self._log_header3(gammalib.EXPLICIT, 'Selecting events')
481 479  
482   - # ... otherwise if On/Off analysis is requested generate
483   - # the On/Off observations and response
484   - elif self._onoff:
485   - new_obs = obsutils.get_onoff_obs(self, obs, nthreads=1)
  480 + # Select events
  481 + select = ctools.ctselect(obs)
  482 + select['emin'] = self['emin'].real()
  483 + select['emax'] = self['emax'].real()
  484 + select['tmin'] = tmin
  485 + select['tmax'] = tmax
  486 + select['rad'] = 'UNDEFINED'
  487 + select['ra'] = 'UNDEFINED'
  488 + select['dec'] = 'UNDEFINED'
  489 + select.run()
486 490  
487   - # Extract models
488   - models = new_obs.models()
  491 + # Retrieve observations
  492 + obs = select.obs()
489 493  
490   - # Fix background models if required
491   - if self['fix_bkg'].boolean():
492   - for model in models:
493   - if model.classname() != 'GModelSky':
494   - for par in model:
495   - par.fix()
  494 + # Continue only if there are observations
  495 + if obs.size() > 0:
496 496  
497   - # Put back models
498   - new_obs.models(models)
  497 + # Deal with stacked and On/Off Observations
  498 + if self._stacked or self._onoff:
499 499  
500   - # Continue with new oberservation container
501   - obs = new_obs
  500 + # If a stacked analysis is requested bin the events
  501 + # and compute the stacked response functions and setup
  502 + # an observation container with a single stacked observation.
  503 + if self._stacked:
  504 + new_obs = obsutils.get_stacked_obs(self, obs)
502 505  
503   - # Header
504   - self._log_header3(gammalib.EXPLICIT, 'Fitting the data')
  506 + # ... otherwise if On/Off analysis is requested generate
  507 + # the On/Off observations and response
  508 + elif self._onoff:
  509 + new_obs = obsutils.get_onoff_obs(self, obs, nthreads=1)
505 510  
506   - # Do maximum likelihood model fitting
507   - if obs.size() > 0:
  511 + # Extract models
  512 + models = new_obs.models()
  513 +
  514 + # Fix background models if required
  515 + if self['fix_bkg'].boolean():
  516 + for model in models:
  517 + if model.classname() != 'GModelSky':
  518 + for par in model:
  519 + par.fix()
  520 +
  521 + # Put back models
  522 + new_obs.models(models)
  523 +
  524 + # Continue with new oberservation container
  525 + obs = new_obs
  526 +
  527 + # Header
  528 + self._log_header3(gammalib.EXPLICIT, 'Fitting the data')
  529 +
  530 + # Do maximum likelihood model fitting
508 531 like = ctools.ctlike(obs)
509 532 like['edisp'] = self['edisp'].boolean()
510 533 like['nthreads'] = 1 # Avoids OpenMP conflict
... ... @@ -533,7 +556,6 @@ class cslightcrv(ctools.csobservation):
533 556 result['values']['e_'+par] = source[par].error()
534 557  
535 558 # Calculate upper limit (-1 if not computed)
536   - #ul_diff, ul_flux, ul_eflux = self._compute_ulimit(like.obs())
537 559 ul_diff, ul_flux, ul_eflux = self._compute_ulimit(obs)
538 560 if ul_diff > 0.0:
539 561 result['ul_diff'] = ul_diff
... ...
cscripts/csobsselect.py
... ... @@ -137,16 +137,18 @@ class csobsselect(ctools.csobservation):
137 137  
138 138 # Get observation start and stop time
139 139 obs_gti = obs.gti()
140   - tstart = obs_gti.tstart()
141   - tstop = obs_gti.tstop()
142 140  
143 141 # Get User start and stop time in the time reference of the CTA
144 142 # observations
145   - gti = self._get_gti(obs_gti.reference())
146   -
147   - # If the observation is not within the time selection then skip it
148   - if gti.size() > 0 and not gti.contains(tstart) and \
149   - not gti.contains(tstop):
  143 + gti = self._get_gti(obs_gti.reference())
  144 + tstart = gti.tstart()
  145 + tstop = gti.tstop()
  146 +
  147 + # If there is a valid User start and stop time and if that start
  148 + # or stop time is not within the observation GTI, then skip the
  149 + # observation
  150 + if gti.size() > 0 and not obs_gti.contains(tstart) and \
  151 + not obs_gti.contains(tstop):
150 152 self._log_selection(obs, 'outside time interval')
151 153  
152 154 # ... otherwise select spatially
... ... @@ -301,6 +303,9 @@ class csobsselect(ctools.csobservation):
301 303 # Initialise empty observation container for selected observations
302 304 selected_obs = gammalib.GObservations()
303 305  
  306 + # Set models
  307 + selected_obs.models(self.obs().models())
  308 +
304 309 # Write input observation container into logger
305 310 self._log_observations(gammalib.NORMAL, self.obs(), 'Input observation')
306 311  
... ...