Commit 834a7cec018c37cf127ba69dbc0569d57c2178db

Authored by Jürgen Knödlseder
1 parent ba197c90

Refactor test source position and pointing direction setting in cssens (#3555).

A _set_source() method was introduced in cssens that deals with the setting of the test source direction independent of the code in the _set_obs() method, since that latter method is not necessarily called. The _set_obs() method now only deals with setting of the pointing direction of a single observation, in case that no observation definition XML file was specified on input.
Showing 1 changed file with 52 additions and 39 deletions
cscripts/cssens.py
@@ -110,6 +110,7 @@ class cssens(ctools.csobservation): @@ -110,6 +110,7 @@ class cssens(ctools.csobservation):
110 # Return 110 # Return
111 return 111 return
112 112
  113 +
113 # Private methods 114 # Private methods
114 def _get_parameters(self): 115 def _get_parameters(self):
115 """ 116 """
@@ -126,8 +127,8 @@ class cssens(ctools.csobservation): @@ -126,8 +127,8 @@ class cssens(ctools.csobservation):
126 if self.obs().models().size() == 0: 127 if self.obs().models().size() == 0:
127 self.obs().models(self['inmodel'].filename()) 128 self.obs().models(self['inmodel'].filename())
128 129
129 - # Get source name  
130 - self._srcname = self['srcname'].string() 130 + # Set source name and position
  131 + self._set_source()
131 132
132 # Read further parameters 133 # Read further parameters
133 emin = self['emin'].real() 134 emin = self['emin'].real()
@@ -156,14 +157,40 @@ class cssens(ctools.csobservation): @@ -156,14 +157,40 @@ class cssens(ctools.csobservation):
156 # Write input parameters into logger 157 # Write input parameters into logger
157 self._log_parameters(gammalib.TERSE) 158 self._log_parameters(gammalib.TERSE)
158 159
159 -  
160 # Set number of processes for multiprocessing 160 # Set number of processes for multiprocessing
161 self._nthreads = mputils.nthreads(self) 161 self._nthreads = mputils.nthreads(self)
162 162
163 # Return 163 # Return
164 return 164 return
165 165
166 - def _set_obs(self, emin, emax, lpnt=None, bpnt=None): 166 + def _set_source(self):
  167 + """
  168 + Set source name and position
  169 + """
  170 + # Set source name
  171 + self._srcname = self['srcname'].string()
  172 +
  173 + # Set source position. If the test source has no position then set the
  174 + # source position to (RA,Dec)=(0,0)
  175 + source = self.obs().models()[self._srcname]
  176 + if source.has_par('RA') and source.has_par('DEC'):
  177 + self._ra = source['RA'].value()
  178 + self._dec = source['DEC'].value()
  179 + elif source.has_par('GLON') and source.has_par('GLAT'):
  180 + glon = source['GLON'].value()
  181 + glat = source['GLAT'].value()
  182 + srcdir = gammalib.GSkyDir()
  183 + srcdir.lb_deg(glon, glat)
  184 + self._ra = srcdir.ra_deg()
  185 + self._dec = srcdir.dec_deg()
  186 + else:
  187 + self._ra = 0.0
  188 + self._dec = 0.0
  189 +
  190 + # Return
  191 + return
  192 +
  193 + def _set_obs(self, emin, emax):
167 """ 194 """
168 Set an observation container 195 Set an observation container
169 196
@@ -173,10 +200,6 @@ class cssens(ctools.csobservation): @@ -173,10 +200,6 @@ class cssens(ctools.csobservation):
173 Minimum energy (TeV) 200 Minimum energy (TeV)
174 emax : float 201 emax : float
175 Maximum energy (TeV) 202 Maximum energy (TeV)
176 - lpnt : float, optional  
177 - Galactic longitude of pointing (deg)  
178 - bpnt : float, optional  
179 - Galactic latitude of pointing (deg)  
180 203
181 Returns 204 Returns
182 ------- 205 -------
@@ -187,47 +210,37 @@ class cssens(ctools.csobservation): @@ -187,47 +210,37 @@ class cssens(ctools.csobservation):
187 if self['inobs'].is_valid(): 210 if self['inobs'].is_valid():
188 obs = self._get_observations() 211 obs = self._get_observations()
189 212
190 - # ... otherwise allocate a single observation 213 + # ... otherwise allocate a single observation using the test source
  214 + # position as pointing direction, optionally offset by a certain
  215 + # amount
191 else: 216 else:
192 217
193 - # If no pointing is specified and if the test source has a position  
194 - # then set the pointing to the position of the test source  
195 - if lpnt is None and bpnt is None:  
196 - models = gammalib.GModels(self['inmodel'].filename())  
197 - source = models[self['srcname'].string()]  
198 - if source.has_par('RA') and source.has_par('DEC'):  
199 - pntdir = gammalib.GSkyDir()  
200 - pntdir.radec_deg(source['RA'].value(), source['DEC'].value())  
201 - lpnt = pntdir.l_deg()  
202 - bpnt = pntdir.b_deg()  
203 - elif source.has_par('GLON') and source.has_par('GLAT'):  
204 - lpnt = source['GLON'].value()  
205 - bpnt = source['GLAT'].value()  
206 - else:  
207 - lpnt = 0.0  
208 - bpnt = 0.0 218 + # Load models
  219 + models = gammalib.GModels(self['inmodel'].filename())
209 220
210 - # Set source position  
211 - srcdir = gammalib.GSkyDir()  
212 - srcdir.lb_deg(lpnt, bpnt)  
213 - self._ra = srcdir.ra_deg()  
214 - self._dec = srcdir.dec_deg() 221 + # Get test source
  222 + source = models[self['srcname'].string()]
215 223
216 - # Set pointing direction offset in galactic latitude  
217 - offset = self['offset'].real()  
218 - bpnt += offset  
219 - if bpnt > 90.0:  
220 - bpnt = 180.0 - bpnt  
221 - lpnt += 180.0  
222 - pntdir = gammalib.GSkyDir()  
223 - pntdir.lb_deg(lpnt, bpnt) 224 + # Set pointing direction to test source position. If test source
  225 + # has no position then set the pointing to (RA,Dec)=(0,0)
  226 + pntdir = gammalib.GSkyDir()
  227 + if source.has_par('RA') and source.has_par('DEC'):
  228 + pntdir.radec_deg(source['RA'].value(), source['DEC'].value())
  229 + elif source.has_par('GLON') and source.has_par('GLAT'):
  230 + pntdir.lb_deg(source['GLON'].value(), source['GLAT'].value())
  231 + else:
  232 + pntdir.radec_deg(0.0, 0.0)
224 233
225 - # Read relevant user parameters 234 + # Read other relevant user parameters
226 caldb = self['caldb'].string() 235 caldb = self['caldb'].string()
227 irf = self['irf'].string() 236 irf = self['irf'].string()
228 deadc = self['deadc'].real() 237 deadc = self['deadc'].real()
229 duration = self['duration'].real() 238 duration = self['duration'].real()
230 rad = self['rad'].real() 239 rad = self['rad'].real()
  240 + offset = self['offset'].real()
  241 +
  242 + # Add offset to pointing direction
  243 + pntdir.rotate_deg(0.0, offset)
231 244
232 # Allocate observation container 245 # Allocate observation container
233 obs = gammalib.GObservations() 246 obs = gammalib.GObservations()