Commit 04e6a28189f2fbe86862aff8491d25b3567ee0db
1 parent
e35c6b25
Use ctool::create_energies() method in csbkgmodel
Showing
3 changed files
with
33 additions
and
15 deletions
cscripts/csbkgmodel.par
| ... | ... | @@ -25,7 +25,12 @@ outmodel, f, a, model.xml,,, "Output model definition XML file" |
| 25 | 25 | instrument, s, a, CTA,,, "Instrument name (for multi-instrument analysis)" |
| 26 | 26 | spatial, s, a, GAUSS,IRF|AEFF|GAUSS,, "Spatial model component" |
| 27 | 27 | gradient, b, a, yes,,, "Allow for spatial gradient?" |
| 28 | -spectral, s, a, HESS,PLAW|HESS,, "Spectral model component" | |
| 28 | +spectral, s, a, NODES,PLAW|NODES,, "Spectral model component" | |
| 29 | +ebinalg, s, a, LOG,FILE|LIN|LOG,, "Algorithm for defining energy nodes" | |
| 30 | +emin, r, a, 0.1,,, "First node energy (TeV)" | |
| 31 | +emax, r, a, 100.0,,, "Last node energy (TeV)" | |
| 32 | +enumbins, i, a, 10,1,200, "Number of energy nodes" | |
| 33 | +ebinfile, f, a, NONE,,, "Name of the file containing the energy node definition" | |
| 29 | 34 | runwise, b, a, yes,,, "Generate runwise background model?" |
| 30 | 35 | rad, r, h, 2.0,,, "Radius for event selection (degrees)" |
| 31 | 36 | ... | ... |
cscripts/csbkgmodel.py
| ... | ... | @@ -65,6 +65,8 @@ class csbkgmodel(ctools.csobservation): |
| 65 | 65 | if self['spatial'].string() == 'GAUSS': |
| 66 | 66 | self['gradient'].boolean() |
| 67 | 67 | self['spectral'].string() |
| 68 | + if self['spatial'].string() == 'NODES': | |
| 69 | + self._create_energies() | |
| 68 | 70 | self['runwise'].boolean() |
| 69 | 71 | self['rad'].real() |
| 70 | 72 | |
| ... | ... | @@ -204,16 +206,8 @@ class csbkgmodel(ctools.csobservation): |
| 204 | 206 | # Extract spectral model of background component |
| 205 | 207 | spectrum = model.spectral() |
| 206 | 208 | |
| 207 | - # Define 8 node energies | |
| 208 | - energies = gammalib.GEnergies() | |
| 209 | - energies.append(gammalib.GEnergy(0.1, 'TeV')) | |
| 210 | - energies.append(gammalib.GEnergy(0.2, 'TeV')) | |
| 211 | - energies.append(gammalib.GEnergy(0.4, 'TeV')) | |
| 212 | - energies.append(gammalib.GEnergy(0.8, 'TeV')) | |
| 213 | - energies.append(gammalib.GEnergy(1.6, 'TeV')) | |
| 214 | - energies.append(gammalib.GEnergy(3.2, 'TeV')) | |
| 215 | - energies.append(gammalib.GEnergy(6.4, 'TeV')) | |
| 216 | - energies.append(gammalib.GEnergy(12.8, 'TeV')) | |
| 209 | + # Define node energies | |
| 210 | + energies = self._create_energies() | |
| 217 | 211 | |
| 218 | 212 | # Create node spectrum |
| 219 | 213 | nodes = gammalib.GModelSpectralNodes(spectrum, energies) |
| ... | ... | @@ -221,7 +215,7 @@ class csbkgmodel(ctools.csobservation): |
| 221 | 215 | |
| 222 | 216 | # Set minimum node intensities (this avoids NaNs during model fitting) |
| 223 | 217 | for i in range(nodes.size()): |
| 224 | - nodes[i].min(1.0e-6*nodes[i].value()) | |
| 218 | + nodes[i].min(1.0e-10*nodes[i].value()) | |
| 225 | 219 | |
| 226 | 220 | # Set node spectrum |
| 227 | 221 | model.spectral(nodes) |
| ... | ... | @@ -270,9 +264,9 @@ class csbkgmodel(ctools.csobservation): |
| 270 | 264 | # Extract fitted model |
| 271 | 265 | model = like.obs().models()[0].copy() |
| 272 | 266 | |
| 273 | - # If a HESS model is requested then refit a node spectrum | |
| 274 | - if self['spectral'].string() == 'HESS': | |
| 275 | - | |
| 267 | + # If a NODES model is requested then refit a node spectrum | |
| 268 | + if self['spectral'].string() == 'NODES': | |
| 269 | + | |
| 276 | 270 | # Create nodes spectrum from fitted initial model |
| 277 | 271 | model = self._create_nodes(model) |
| 278 | 272 | ... | ... |
doc/source/users/reference_manual/csbkgmodel.rst
| ... | ... | @@ -42,6 +42,25 @@ General parameters |
| 42 | 42 | ``HESS`` specifies a piecewise broken power-law using 8 energy nodes |
| 43 | 43 | spread over the energy range from 100 GeV to 12.8 TeV. |
| 44 | 44 | |
| 45 | +``ebinalg <FILE|LIN|LOG> [string]`` | |
| 46 | + Algorithm for defining energy nodes. For ``FILE``, the energy nodes are | |
| 47 | + defined in a FITS file that is specified by the ``ebinfile`` parameter, | |
| 48 | + for ``LIN`` and ``LOG`` there will be ``enumbins`` energy nodes spaced | |
| 49 | + linearly or logarithmically between ``emin`` and ``emax``, respectively. | |
| 50 | + | |
| 51 | +``emin [real]`` | |
| 52 | + First node energy (in TeV) if ``LIN`` or ``LOG`` energy algorithms are | |
| 53 | + used. | |
| 54 | + | |
| 55 | +``emax [real]`` | |
| 56 | + Last node energy (in TeV) if ``LIN`` or ``LOG`` energy algorithms are used. | |
| 57 | + | |
| 58 | +``enumbins [integer]`` | |
| 59 | + Number of energy nodes if ``LIN`` or ``LOG`` energy algorithms are used. | |
| 60 | + | |
| 61 | +``ebinfile [file]`` | |
| 62 | + Name of the file containing the energy node definition if ``ebinalg=FILE``. | |
| 63 | + | |
| 45 | 64 | ``runwise [boolean]`` |
| 46 | 65 | Generate runwise background model? If ``yes`` is specified a background |
| 47 | 66 | model component for each observation in the observation definition XML | ... | ... |