Commit a410969178d8e05ffd7dab686e391bf50811f628

Authored by Andreas Specovius
1 parent 29069d9d

Parameter srcdir is now always queried because from map regions srcdir is not ex…

…ctractable. Additional minor text changes.
Showing 1 changed file with 52 additions and 51 deletions
cscripts/csphagen.py
... ... @@ -67,22 +67,23 @@ class csphagen(ctools.csobservation):
67 67 # Set energy bounds
68 68 self._ebounds = self._create_ebounds()
69 69  
  70 + # Initialise source position/region querying relevant parameters
  71 + self._src_dir = gammalib.GSkyDir()
  72 + self._src_reg = gammalib.GSkyRegions()
  73 + coordsys = self['coordsys'].string()
  74 + if coordsys == 'CEL':
  75 + ra = self['ra'].real()
  76 + dec = self['dec'].real()
  77 + self._src_dir.radec_deg(ra, dec)
  78 + elif coordsys == 'GAL':
  79 + glon = self['glon'].real()
  80 + glat = self['glat'].real()
  81 + self._src_dir.lb_deg(glon, glat)
  82 +
70 83 # Query background estimation method and parameters
71 84 bkgmethod = self['bkgmethod'].string()
72 85 if bkgmethod == 'REFLECTED':
73 86  
74   - # Initialise source position/region querying relevant parameters
75   - self._src_dir = gammalib.GSkyDir()
76   - self._src_reg = gammalib.GSkyRegions()
77   - coordsys = self['coordsys'].string()
78   - if coordsys == 'CEL':
79   - ra = self['ra'].real()
80   - dec = self['dec'].real()
81   - self._src_dir.radec_deg(ra, dec)
82   - elif coordsys == 'GAL':
83   - glon = self['glon'].real()
84   - glat = self['glat'].real()
85   - self._src_dir.lb_deg(glon, glat)
86 87 self._srcshape = self['srcshape'].string()
87 88 if self._srcshape == 'CIRCLE':
88 89 self._rad = self['rad'].real()
... ... @@ -116,7 +117,7 @@ class csphagen(ctools.csobservation):
116 117 if entry.attribute('name') == 'OffRegions':
117 118 offregionsfile = entry.attribute('file')
118 119  
119   - # <parameter name="OnRegion" file=".."/> contains region file
  120 + # <parameter name="OnRegion" file=".."/> contains region file.
120 121 if entry.attribute('name') == 'OnRegion':
121 122 onregionfile = entry.attribute('file')
122 123  
... ... @@ -139,16 +140,17 @@ class csphagen(ctools.csobservation):
139 140 self._bkgregfiles = {0:None}
140 141 srcregfile = None
141 142  
142   - # Query bkg region file
  143 + # Query missing bkg region file
143 144 if len([True for x in self._bkgregfiles if self._bkgregfiles[x] is None]) > 0:
144 145 if len(self._bkgregfiles) > 1:
145 146 # Querying of multiple regions not supported
146   - raise RuntimeError('Please specify all bkg region files in obs definition XML.')
  147 + raise RuntimeError('There are missing bkg region files in the obs definition'
  148 + +' XML. Please specify all bkg region files!')
147 149 else:
148 150 # Query bkg region file for single observation
149 151 self._bkgregfiles[self._bkgregfiles.keys()[0]] = self['bkgreg'].filename()
150 152  
151   - # Query src region file
  153 + # Query missing src region file
152 154 if srcregfile is None:
153 155 srcregfile = self['srcreg'].filename()
154 156  
... ... @@ -156,20 +158,7 @@ class csphagen(ctools.csobservation):
156 158 self._src_reg = gammalib.GSkyRegions(srcregfile)
157 159  
158 160 if len(self._src_reg) > 1:
159   - raise RuntimeError('Only 1 On-region is allowed.')
160   -
161   - onRegion = self._src_reg[0]
162   - if isinstance(onRegion, gammalib.GSkyRegionCircle):
163   - self._srcshape = 'CIRCLE'
164   - self._src_dir = onRegion.centre()
165   - self._rad = onRegion.radius()
166   - elif isinstance(onRegion, gammalib.GSkyRegionMap):
167   - self._srcshape = 'MAP'
168   - raise RuntimeError('On region is MAP. Src direction can not be determined. Use CIRCLE!')
169   - else:
170   - raise RuntimeError('On region is unknown. Src direction can not be determined. Use CIRCLE!')
171   -
172   - # END if bkgmethod=='CUSTOM'
  161 + raise RuntimeError('Only 1 ON region is allowed.')
173 162  
174 163 self['maxoffset'].real()
175 164  
... ... @@ -281,33 +270,45 @@ class csphagen(ctools.csobservation):
281 270 """
282 271  
283 272 # Load regions from ds9 file of FITS WCS map
284   - regions = gammalib.GSkyRegions( filePath )
  273 + regions = gammalib.GSkyRegions( filePath )
  274 +
  275 + # Do region tests only for circle shaped on-region. Else simply return list.
  276 + onRegion = self._src_reg[0]
  277 + if isinstance(onRegion, gammalib.GSkyRegionCircle):
  278 +
  279 + # Prepare parameters for comparison
  280 + pnt_dir = obs.pointing().dir()
  281 + offsetOn = pnt_dir.dist_deg(self._src_dir)
  282 + radiusOn = onRegion.radius()
  283 +
  284 + # Do some tests
  285 + for region in regions:
285 286  
286   - # Prepare parameters for comparison
287   - pnt_dir = obs.pointing().dir()
288   - offsetOn = pnt_dir.dist_deg(self._src_dir)
289   - radiusOn = self._src_reg[0].radius()
  287 + # Do region tests only for circle shaped off-regions
  288 + if isinstance(region, gammalib.GSkyRegionCircle):
290 289  
291   - # Do some tests
292   - for region in regions:
  290 + # Gather parameters
  291 + offsetOff = pnt_dir.dist_deg(region.centre())
  292 + radiusOff = region.radius()
293 293  
294   - offsetOff = pnt_dir.dist_deg(region.centre())
295   - radiusOff = region.radius()
  294 + # Warn: different radius
  295 + if radiusOff != radiusOn:
  296 + self._log_string(gammalib.EXPLICIT, 'Off region radius differs from on'
  297 + 'region radius: %.2f vs %.2f' % ((radiusOff, radiusOn)))
296 298  
297   - # Warn: different radius
298   - if radiusOff != radiusOn:
299   - self._log_string(gammalib.EXPLICIT, 'Off region radius differs from on'
300   - 'region radius: %.2f vs %.2f' % ((radiusOff, radiusOn)))
  299 + # Warn: offset is too small or too large
  300 + if offsetOff <= radiusOn or offsetOff >= self['maxoffset'].real():
  301 + self._log_string(gammalib.EXPLICIT, 'Region offset invalid for observation '
  302 + '%s (%.3f deg) ' % ((obs.id(), offsetOff)))
301 303  
302   - # Warn: offset is too small or too large
303   - if offsetOff <= self._rad or offsetOff >= self['maxoffset'].real():
304   - self._log_string(gammalib.EXPLICIT, 'Region offset invalid for observation '
305   - '%s (%.3f deg) ' % ((obs.id(), offsetOff)))
  304 + # Warn: offset of off and on region differ
  305 + if offsetOff != offsetOn:
  306 + self._log_string(gammalib.EXPLICIT, 'Off region offset differs '
  307 + '%.3f deg from on region offset' % (offsetOff-offsetOn))
306 308  
307   - # Warn: offset of off and on region differ
308   - if offsetOff != offsetOn:
309   - self._log_string(gammalib.EXPLICIT, 'Off region offset differs '
310   - '%.3f deg from on region offset' % (offsetOff-offsetOn))
  309 + # end: off-regions test for circle shaped regions
  310 + # end: for loop iterating over off regions
  311 + # end: do region tests only if on-region is circle shaped
311 312  
312 313 # Inform user how many regions were loaded
313 314 self._log_string(gammalib.NORMAL, 'Read %i regions from file %s.' % (regions.size(), filePath.url()))
... ...