Commit c4bc62ff836737b19b80f089abf65d7f73d0693e
1 parent
0a9552e7
Allow using spectral models without a 'Prefactor' parameter in cssens and cstsdist (#1889)
Showing
6 changed files
with
88 additions
and
22 deletions
ChangeLog
| 1 | -2019-07-23 | |
| 1 | +2019-10-31 | |
| 2 | 2 | |
| 3 | 3 | * Version 1.7.0 released |
| 4 | 4 | ======================== |
| 5 | 5 | |
| 6 | 6 | Remove response cache before source testing in cttsmap (#2973) |
| 7 | 7 | Enabling running of example scripts from objects in memory (#2925) |
| 8 | + Allow using spectral models without "Prefactor" parameter in cssens | |
| 9 | + and cstsdist (#1889) | |
| 8 | 10 | |
| 9 | 11 | |
| 10 | 12 | 2019-07-15 | ... | ... |
NEWS
| 1 | 1 | New Features and Important Changes in ctools 1.7.0 |
| 2 | 2 | |
| 3 | -23 July 2019 | |
| 3 | +31 October 2019 | |
| 4 | 4 | |
| 5 | 5 | |
| 6 | 6 | Introduction |
| ... | ... | @@ -254,7 +254,8 @@ None |
| 254 | 254 | |
| 255 | 255 | cssens - Computes sensitivity curve |
| 256 | 256 | ----------------------------------- |
| 257 | -None | |
| 257 | +Allow using spectral models without "Prefactor" parameter for sensitivity | |
| 258 | +computation (#1889). | |
| 258 | 259 | |
| 259 | 260 | |
| 260 | 261 | csspec - Generates Spectral Energy Distribution |
| ... | ... | @@ -269,7 +270,8 @@ None |
| 269 | 270 | |
| 270 | 271 | cstsdist - Computes Test Statistic distribution |
| 271 | 272 | ----------------------------------------------- |
| 272 | -None | |
| 273 | +Allow using spectral models without "Prefactor" parameter for computation of | |
| 274 | +TS distribution (#1889). | |
| 273 | 275 | |
| 274 | 276 | |
| 275 | 277 | cstsmapmerge - Merge Test Statistic maps |
| ... | ... | @@ -304,7 +306,9 @@ None |
| 304 | 306 | |
| 305 | 307 | modutils - Model utilities |
| 306 | 308 | -------------------------- |
| 307 | -None | |
| 309 | +Allow using spectral models without "Prefactor" parameter as test source in | |
| 310 | +test_source() function. Add normalisation_parameter() function to retrieve | |
| 311 | +spectral normalisation parameter from any model (#1889). | |
| 308 | 312 | |
| 309 | 313 | |
| 310 | 314 | mputils - Multiprocessing utilities | ... | ... |
cscripts/cssens.py
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | # ========================================================================== |
| 3 | 3 | # Computes the array sensitivity using the Test Statistic for a test source |
| 4 | 4 | # |
| 5 | -# Copyright (C) 2011-2018 Juergen Knoedlseder | |
| 5 | +# Copyright (C) 2011-2019 Juergen Knoedlseder | |
| 6 | 6 | # |
| 7 | 7 | # This program is free software: you can redistribute it and/or modify |
| 8 | 8 | # it under the terms of the GNU General Public License as published by |
| ... | ... | @@ -377,13 +377,14 @@ class cssens(ctools.csobservation): |
| 377 | 377 | # Write header for iteration into logger |
| 378 | 378 | self._log_header2(gammalib.EXPLICIT, 'Iteration '+str(iterations)) |
| 379 | 379 | |
| 380 | - # Create a copy of the test models, set the prefactor of the test | |
| 381 | - # source in the models, and append the models to the observation. | |
| 382 | - # "crab_prefactor" is the Prefactor that corresponds to a flux of | |
| 383 | - # 1 Crab. | |
| 380 | + # Create a copy of the test models, set the normalisation parameter | |
| 381 | + # of the test source in the models, and append the models to the | |
| 382 | + # observation. "crab_prefactor" is the prefactor that corresponds | |
| 383 | + # to a flux of 1 Crab. | |
| 384 | 384 | models = test_model.copy() |
| 385 | - crab_prefactor = models[self._srcname]['Prefactor'].value() * crab_unit | |
| 386 | - models[self._srcname]['Prefactor'].value(crab_prefactor * test_crab_flux) | |
| 385 | + prefactor = modutils.normalisation_parameter(models[self._srcname]) | |
| 386 | + crab_prefactor = prefactor.value() * crab_unit | |
| 387 | + prefactor.value(crab_prefactor * test_crab_flux) | |
| 387 | 388 | self.obs().models(models) |
| 388 | 389 | |
| 389 | 390 | # Simulate events for the models. "sim" holds an observation |
| ... | ... | @@ -422,7 +423,8 @@ class cssens(ctools.csobservation): |
| 422 | 423 | ts = source.ts() |
| 423 | 424 | |
| 424 | 425 | # Get fitted Crab, photon and energy fluxes |
| 425 | - crab_flux = source['Prefactor'].value() / crab_prefactor | |
| 426 | + prefactor = modutils.normalisation_parameter(source) | |
| 427 | + crab_flux = prefactor.value() / crab_prefactor | |
| 426 | 428 | photon_flux = source.spectral().flux(emin, emax) |
| 427 | 429 | energy_flux = source.spectral().eflux(emin, emax) |
| 428 | 430 | |
| ... | ... | @@ -679,7 +681,7 @@ class cssens(ctools.csobservation): |
| 679 | 681 | |
| 680 | 682 | # Set test source model for this observation |
| 681 | 683 | self._models = modutils.test_source(self.obs().models(), self._srcname, |
| 682 | - ra=self._ra, dec=self._dec) | |
| 684 | + ra=self._ra, dec=self._dec) | |
| 683 | 685 | |
| 684 | 686 | # Write observation into logger |
| 685 | 687 | self._log_observations(gammalib.NORMAL, self.obs(), 'Input observation') | ... | ... |
cscripts/cstsdist.py
| ... | ... | @@ -232,9 +232,10 @@ class cstsdist(ctools.csobservation): |
| 232 | 232 | for par in model: |
| 233 | 233 | self._log_string(gammalib.EXPLICIT, str(par)) |
| 234 | 234 | elif self._logNormal(): |
| 235 | - name = 'Trial %d' % seed | |
| 236 | - value = 'TS=%.3f Prefactor=%e +/- %e' % \ | |
| 237 | - (ts, model['Prefactor'].value(), model['Prefactor'].error()) | |
| 235 | + prefactor = modutils.normalisation_parameter(model) | |
| 236 | + name = 'Trial %d' % seed | |
| 237 | + value = 'TS=%.3f %s=%e +/- %e' % \ | |
| 238 | + (ts, prefactor.name(), prefactor.value(), prefactor.error()) | |
| 238 | 239 | self._log_value(gammalib.TERSE, name, value) |
| 239 | 240 | |
| 240 | 241 | # Initialise results | ... | ... |
cscripts/modutils.py
| 1 | 1 | # ========================================================================== |
| 2 | 2 | # Utility functions for model handling |
| 3 | 3 | # |
| 4 | -# Copyright (C) 2016-2017 Juergen Knoedlseder | |
| 4 | +# Copyright (C) 2016-2019 Juergen Knoedlseder | |
| 5 | 5 | # |
| 6 | 6 | # This program is free software: you can redistribute it and/or modify |
| 7 | 7 | # it under the terms of the GNU General Public License as published by |
| ... | ... | @@ -61,10 +61,20 @@ def test_source(models, srcname, ra=None, dec=None, fitspat=False, |
| 61 | 61 | model = outmodels[srcname] |
| 62 | 62 | model.tscalc(True) |
| 63 | 63 | |
| 64 | - # If source model has no "Prefactor" parameter then raise an exception | |
| 65 | - if not model.has_par('Prefactor'): | |
| 66 | - msg = ('Model "%s" has no parameter "Prefactor". Only spectral ' | |
| 67 | - 'models with a "Prefactor" parameter are supported.' % | |
| 64 | + # Get spectral model component | |
| 65 | + spectral = model.spectral() | |
| 66 | + | |
| 67 | + # If source model has no normalisation parameter then raise an exception | |
| 68 | + if not (spectral.has_par('Normalization') or | |
| 69 | + spectral.has_par('Value') or | |
| 70 | + spectral.has_par('Prefactor') or | |
| 71 | + spectral.has_par('Integral') or | |
| 72 | + spectral.has_par('PhotonFlux') or | |
| 73 | + spectral.has_par('EnergyFlux')): | |
| 74 | + msg = ('Model "%s" has no flux normalisation parameter. Only spectral ' | |
| 75 | + 'models with a flux normalisation parameter (one of ' | |
| 76 | + '"Normalization", "Value", "Prefactor", "Integral", ' | |
| 77 | + '"PhotonFlux", and "EnergyFlux") are supported.' % | |
| 68 | 78 | srcname) |
| 69 | 79 | raise RuntimeError(msg) |
| 70 | 80 | |
| ... | ... | @@ -100,6 +110,51 @@ def test_source(models, srcname, ra=None, dec=None, fitspat=False, |
| 100 | 110 | return outmodels |
| 101 | 111 | |
| 102 | 112 | |
| 113 | +# ============================================= # | |
| 114 | +# Return spectral model normalisation parameter # | |
| 115 | +# ============================================= # | |
| 116 | +def normalisation_parameter(model): | |
| 117 | + """ | |
| 118 | + Return spectral model normalisation parameter | |
| 119 | + | |
| 120 | + Parameters | |
| 121 | + ---------- | |
| 122 | + model : `~gammalib.GModel` | |
| 123 | + Input model | |
| 124 | + | |
| 125 | + Returns | |
| 126 | + ------- | |
| 127 | + par : `~gammalib.GModelPar` | |
| 128 | + Spectral model normalisation parameter | |
| 129 | + """ | |
| 130 | + # Initialise normalisation parameter as None | |
| 131 | + par = None | |
| 132 | + | |
| 133 | + # Set list of possible normalisation parameters | |
| 134 | + norm_pars = ['Normalization', 'Value', 'Prefactor', 'Integral', | |
| 135 | + 'PhotonFlux', 'EnergyFlux'] | |
| 136 | + | |
| 137 | + # Get spectral model component | |
| 138 | + spectral = model.spectral() | |
| 139 | + | |
| 140 | + # Find normalisation parameter | |
| 141 | + for norm_par in norm_pars: | |
| 142 | + if spectral.has_par(norm_par): | |
| 143 | + par = spectral[norm_par] | |
| 144 | + | |
| 145 | + # If no normalisation parameter then raise an exception | |
| 146 | + if par == None: | |
| 147 | + msg = ('Model "%s" has no flux normalisation parameter. Only spectral ' | |
| 148 | + 'models with a flux normalisation parameter (one of ' | |
| 149 | + '"Normalization", "Value", "Prefactor", "Integral", ' | |
| 150 | + '"PhotonFlux", and "EnergyFlux") are supported.' % | |
| 151 | + model.name()) | |
| 152 | + raise RuntimeError(msg) | |
| 153 | + | |
| 154 | + # Return normalisation parameter | |
| 155 | + return par | |
| 156 | + | |
| 157 | + | |
| 103 | 158 | # ================================= # |
| 104 | 159 | # Returns attributes for ds9 string # |
| 105 | 160 | # ================================= # | ... | ... |
doc/source/admin/release_history/1.7.rst
| ... | ... | @@ -26,6 +26,8 @@ Improvements |
| 26 | 26 | Remove response cache before source testing in cttsmap |
| 27 | 27 | * [`2925 <https://cta-redmine.irap.omp.eu/issues/2925>`_] - |
| 28 | 28 | Enabling running of example scripts from objects in memory |
| 29 | +* [`1889 <https://cta-redmine.irap.omp.eu/issues/1889>`_] - | |
| 30 | + Allow using spectral models without ``Prefactor`` parameter in :ref:`cssens` and :ref:`cstsdist` | |
| 29 | 31 | |
| 30 | 32 | |
| 31 | 33 | New features | ... | ... |