Commit 3d26c9cef82c94d366e31af090a6a59661eceece

Authored by Jürgen Knödlseder
1 parent 333841e5

Accept models with Galactic coordinates in comlixmap

Showing 1 changed file with 30 additions and 8 deletions
modules/comscripts/comlixmap.py
@@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
2 # ========================================================================== 2 # ==========================================================================
3 # Create SRCLIX TS map 3 # Create SRCLIX TS map
4 # 4 #
5 -# Copyright (C) 2021 Juergen Knoedlseder 5 +# Copyright (C) 2021-2022 Juergen Knoedlseder
6 # 6 #
7 # This program is free software: you can redistribute it and/or modify 7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by 8 # it under the terms of the GNU General Public License as published by
@@ -176,11 +176,13 @@ class comlixmap(ctools.cslikelihood): @@ -176,11 +176,13 @@ class comlixmap(ctools.cslikelihood):
176 nfree = 0 176 nfree = 0
177 177
178 # Compute number of free model parameters for all test sources, 178 # Compute number of free model parameters for all test sources,
179 - # exclusing 'RA' and 'DEC' 179 + # excluding 'RA', 'DEC', 'GLON' and 'GLAT'
180 for srcname in self._srcnames: 180 for srcname in self._srcnames:
181 source = self.obs().models()[srcname] 181 source = self.obs().models()[srcname]
182 for par in source: 182 for par in source:
183 - if par.name() != 'RA' and par.name() != 'DEC' and par.is_free(): 183 + if par.name() != 'RA' and par.name() != 'DEC' and \
  184 + par.name() != 'GLON' and par.name() != 'GLAT' and \
  185 + par.is_free():
184 self._map_names.append(par.name()) 186 self._map_names.append(par.name())
185 nfree += 1 187 nfree += 1
186 188
@@ -213,10 +215,21 @@ class comlixmap(ctools.cslikelihood): @@ -213,10 +215,21 @@ class comlixmap(ctools.cslikelihood):
213 215
214 # Set and fix position of test source 216 # Set and fix position of test source
215 source = self.obs().models()[srcname] 217 source = self.obs().models()[srcname]
216 - source['RA'].value(dir.ra_deg())  
217 - source['DEC'].value(dir.dec_deg())  
218 - source['RA'].fix()  
219 - source['DEC'].fix() 218 + if source.has_par('RA') and source.has_par('DEC'):
  219 + source['RA'].value(dir.ra_deg())
  220 + source['DEC'].value(dir.dec_deg())
  221 + source['RA'].fix()
  222 + source['DEC'].fix()
  223 + elif source.has_par('GLON') and source.has_par('GLAT'):
  224 + source['GLON'].value(dir.l_deg())
  225 + source['GLAT'].value(dir.b_deg())
  226 + source['GLON'].fix()
  227 + source['GLAT'].fix()
  228 + else:
  229 + msg = ('Source "'+srcname+'" has neither RA/DEC nor GLON/GLAT '
  230 + 'parameters. Please specify a source than can be '
  231 + 'positioned.')
  232 + raise RuntimeError(msg)
220 233
221 # Remove response cache for test source 234 # Remove response cache for test source
222 self.obs().remove_response_cache(srcname) 235 self.obs().remove_response_cache(srcname)
@@ -341,9 +354,16 @@ class comlixmap(ctools.cslikelihood): @@ -341,9 +354,16 @@ class comlixmap(ctools.cslikelihood):
341 # Log header 354 # Log header
342 self._log_header1(gammalib.NORMAL, 'Generate TS map') 355 self._log_header1(gammalib.NORMAL, 'Generate TS map')
343 356
  357 + # Get a copy of the initial models
  358 + models = self.obs().models().copy()
  359 +
344 # Loop over grid positions 360 # Loop over grid positions
345 for ipix in range(self._maps[0].npix()): 361 for ipix in range(self._maps[0].npix()):
346 362
  363 + # Set initial models so that each pixel starts from the same
  364 + # initial model
  365 + self.obs().models(models)
  366 +
347 # Get sky direction of sky map pixel 367 # Get sky direction of sky map pixel
348 dir = self._maps[0].inx2dir(ipix) 368 dir = self._maps[0].inx2dir(ipix)
349 369
@@ -364,7 +384,9 @@ class comlixmap(ctools.cslikelihood): @@ -364,7 +384,9 @@ class comlixmap(ctools.cslikelihood):
364 for srcname in self._srcnames: 384 for srcname in self._srcnames:
365 source = self.obs().models()[srcname] 385 source = self.obs().models()[srcname]
366 for par in source: 386 for par in source:
367 - if par.name() != 'RA' and par.name() != 'DEC' and par.is_free(): 387 + if par.name() != 'RA' and par.name() != 'DEC' and \
  388 + par.name() != 'GLON' and par.name() != 'GLAT' and \
  389 + par.is_free():
368 self._maps[ipar][ipix] = par.value() 390 self._maps[ipar][ipix] = par.value()
369 ipar += 1 391 ipar += 1
370 392