Commit cd7164011b9c2aac26e01174f46d7e43ab6c3c4d
1 parent
79f16c8e
Add handling of D2 modules with failed PMT flag to comobsbin and support DRBPhib…
…arBins in comobsmodel script
Showing
9 changed files
with
116 additions
and
34 deletions
ChangeLog
| 1 | -2021-11-29 | |
| 1 | +2021-12-01 | |
| 2 | 2 | |
| 3 | 3 | * Version 2.0.0 released |
| 4 | 4 | ======================== |
| 5 | 5 | |
| 6 | - Add phi_first and phi_last parameters to comlixfit and comlixmap (#3912) | |
| 7 | 6 | Add csadd2caldb script |
| 8 | 7 | Add restart of bisection in case of bad convergence in ctulimit |
| 9 | 8 | Add COMPTEL analysis scripts (#3738) | ... | ... |
NEWS
| 1 | 1 | New Features and Important Changes in ctools 2.0.0 |
| 2 | 2 | |
| 3 | -29 November 2021 | |
| 3 | +1 December 2021 | |
| 4 | 4 | |
| 5 | 5 | |
| 6 | 6 | Introduction |
| ... | ... | @@ -399,17 +399,11 @@ regions (#3248). |
| 399 | 399 | |
| 400 | 400 | comlixfit - COMPTEL maximum likelihood fitting using SRCLIX algorithm |
| 401 | 401 | --------------------------------------------------------------------- |
| 402 | -Added phi_first and phi_last parameters to allow selection of the Phibar layers | |
| 403 | -during the maximum likelihood fit (#3912). | |
| 404 | - | |
| 405 | 402 | Added script (#3738). |
| 406 | 403 | |
| 407 | 404 | |
| 408 | 405 | comlixmap - Generation of COMPTEL Test Statistic map using SRCLIX algorithm |
| 409 | 406 | --------------------------------------------------------------------------- |
| 410 | -Added phi_first and phi_last parameters to allow selection of the Phibar layers | |
| 411 | -during the maximum likelihood fit (#3912). | |
| 412 | - | |
| 413 | 407 | Added script (#3738). |
| 414 | 408 | |
| 415 | 409 | ... | ... |
README.md
| 1 | 1 | ctools information |
| 2 | 2 | ================== |
| 3 | -* Version: 2.0.0.dev (29 November 2021) | |
| 3 | +* Version: 2.0.0.dev (1 December 2021) | |
| 4 | 4 | * GammaLib dependency: 2.0.0.dev |
| 5 | 5 | |
| 6 | 6 | [](https://cta-jenkins.irap.omp.eu/job/ctools-integrate-os/) | ... | ... |
doc/source/users/reference_manual/comobsbin.rst
| ... | ... | @@ -66,6 +66,18 @@ General parameters |
| 66 | 66 | ``(nphibar = 25) [integer]`` |
| 67 | 67 | Number of bins in Phibar direction. |
| 68 | 68 | |
| 69 | +``(psdmin = 0) [integer]`` | |
| 70 | + Minimum PSD value. | |
| 71 | + | |
| 72 | +``(psdmax = 110) [integer]`` | |
| 73 | + Maximum PSD value. | |
| 74 | + | |
| 75 | +``(zetamin = 5.0) [real]`` | |
| 76 | + Minimum Earth horizon - Phibar (zeta) angle (deg). | |
| 77 | + | |
| 78 | +``(fpmtflag = 0) [integer]`` | |
| 79 | + Handling of D2 modules with failed PMT flag (0: exclude, 1: include, 2: exclude PMT). | |
| 80 | + | |
| 69 | 81 | |
| 70 | 82 | Standard parameters |
| 71 | 83 | ------------------- | ... | ... |
doc/source/users/reference_manual/comobsmodel.rst
| ... | ... | @@ -41,9 +41,12 @@ General parameters |
| 41 | 41 | ``iso <NONE|MAP|CUBE> [string]`` |
| 42 | 42 | Isotropic component. |
| 43 | 43 | |
| 44 | -``modeltype <NODES|BINS> [string]`` | |
| 44 | +``diffusetype <NODES|BINS> [string]`` | |
| 45 | 45 | Diffuse model type. |
| 46 | 46 | |
| 47 | +``bkgtype <NODES|BINS> [string]`` | |
| 48 | + Background model type. | |
| 49 | + | |
| 47 | 50 | ``(bremsmap = $COMDATA/../skymaps/galprop/map_comptel_bremsstrahlung.fits) [file]`` |
| 48 | 51 | Bremsstrahlung map file name. |
| 49 | 52 | ... | ... |
modules/comscripts/comobsbin.par
| ... | ... | @@ -39,7 +39,8 @@ npsi, i, h, 80,1,500, "Number of bins in Psi direction" |
| 39 | 39 | nphibar, i, h, 25,1,100, "Number of bins in Phibar direction" |
| 40 | 40 | psdmin, i, h, 0,0,110, "Minimum PSD value" |
| 41 | 41 | psdmax, i, h, 110,0,110, "Maximum PSD value" |
| 42 | -zetamin, r, h, 5.0,0.0,10.0, "Minimum Earth horizon - Phibar (zeta) angle" | |
| 42 | +zetamin, r, h, 5.0,0.0,10.0, "Minimum Earth horizon - Phibar (zeta) angle (deg)" | |
| 43 | +fpmtflag, i, h, 0,0,2, "Handling of D2 modules with failed PMT flag (0: exclude, 1: include, 2: exclude PMT)" | |
| 43 | 44 | |
| 44 | 45 | # |
| 45 | 46 | # Standard parameters | ... | ... |
modules/comscripts/comobsbin.py
| ... | ... | @@ -74,6 +74,7 @@ class comobsbin(ctools.csobservation): |
| 74 | 74 | self['psdmin'].integer() |
| 75 | 75 | self['psdmax'].integer() |
| 76 | 76 | self['zetamin'].real() |
| 77 | + self['fpmtflag'].integer() | |
| 77 | 78 | |
| 78 | 79 | # Query ahead output model filename |
| 79 | 80 | if self._read_ahead(): |
| ... | ... | @@ -191,13 +192,14 @@ class comobsbin(ctools.csobservation): |
| 191 | 192 | # Set phases |
| 192 | 193 | self._select.phases(self._phases) |
| 193 | 194 | |
| 194 | - # Set suffix | |
| 195 | + # Set DRE, DRG and DRX suffix | |
| 195 | 196 | phases = self['phase'].string() |
| 196 | - self._drx_suffix = '_phases'+phases.replace(';', '_') | |
| 197 | - self._drg_suffix = '_phases'+phases.replace(';', '_') | |
| 198 | 197 | self._dre_suffix = '_phases'+phases.replace(';', '_') |
| 198 | + self._drg_suffix = '_phases'+phases.replace(';', '_') | |
| 199 | + self._drx_suffix = '_phases'+phases.replace(';', '_') | |
| 199 | 200 | |
| 200 | 201 | # If PSD interval differs from standard interval then set the interval |
| 202 | + # and append flag to suffix | |
| 201 | 203 | if self['psdmin'].integer() != 0 or self['psdmax'].integer() != 110: |
| 202 | 204 | |
| 203 | 205 | # Set PSD interval |
| ... | ... | @@ -208,10 +210,22 @@ class comobsbin(ctools.csobservation): |
| 208 | 210 | self._dre_suffix += '_psd%d-%d' % (self['psdmin'].integer(), |
| 209 | 211 | self['psdmax'].integer()) |
| 210 | 212 | |
| 211 | - # If zeta angle differs from standard value then append zeta angle to suffix | |
| 213 | + # If zeta angle differs from standard value then append zeta angle to DRE | |
| 214 | + # and DRG suffix | |
| 212 | 215 | if self['zetamin'].real() != 5.0: |
| 213 | - self._drg_suffix += '_zeta%.1f' % (self['zetamin'].real()) | |
| 214 | 216 | self._dre_suffix += '_zeta%.1f' % (self['zetamin'].real()) |
| 217 | + self._drg_suffix += '_zeta%.1f' % (self['zetamin'].real()) | |
| 218 | + | |
| 219 | + # If handling of D2 modules with failed PMT flag differs from standard then | |
| 220 | + # set the flag and append flag to suffix | |
| 221 | + if self['fpmtflag'].integer() != 0: | |
| 222 | + | |
| 223 | + # Set handling of D2 modules with failed PMT flag | |
| 224 | + self._select.fpmtflag(self['fpmtflag'].integer()) | |
| 225 | + | |
| 226 | + # Set DRE and DRG suffix | |
| 227 | + self._dre_suffix += '_fpmt%1d' % (self['fpmtflag'].integer()) | |
| 228 | + self._drg_suffix += '_fpmt%1d' % (self['fpmtflag'].integer()) | |
| 215 | 229 | |
| 216 | 230 | # Log input observations |
| 217 | 231 | self._log_string(gammalib.NORMAL, str(self._select)) | ... | ... |
modules/comscripts/comobsmodel.par
| ... | ... | @@ -22,18 +22,19 @@ outmodel, f, a, models.xml,,, "Output model definition file" |
| 22 | 22 | # |
| 23 | 23 | # Script parameters |
| 24 | 24 | #================== |
| 25 | -ra, r, a, NONE,,, "Right Ascension of point source (deg)" | |
| 26 | -dec, r, a, NONE,,, "Declinaison of point source (deg)" | |
| 27 | -srcname, s, a, NONE,,, "Name of point source" | |
| 28 | -brems, s, a, NONE,NONE|MAP|CUBE,, "Bremsstrahlung component" | |
| 29 | -ic, s, a, NONE,NONE|MAP|CUBE,, "Inverse Compton component" | |
| 30 | -iso, s, a, NONE,NONE|CONST|CONSTFIX,, "Isotropic component" | |
| 31 | -modeltype, s, h, BINS,NODES|BINS,, "Diffuse model type" | |
| 32 | -ebinfile, f, h, NONE,,, "Name of the file containing the diffuse model energy bin definition" | |
| 33 | -bremsmap, f, h, $COMDATA/../skymaps/galprop/map_comptel_bremsstrahlung.fits,,, "Bremsstrahlungs map" | |
| 34 | -bremscube, f, h, $COMDATA/../skymaps/galprop/bremss_mapcube_54_77Xvarh7S.fits,,, "Bremsstrahlungs cube" | |
| 35 | -icmap, f, h, $COMDATA/../skymaps/galprop/map_comptel_ic.fits,,, "Inverse Compton map" | |
| 36 | -iccube, f, h, $COMDATA/../skymaps/galprop/ics_isotropic_mapcube_54_77Xvarh7S.fits,,, "Inverse Compton cube" | |
| 25 | +ra, r, a, NONE,,, "Right Ascension of point source (deg)" | |
| 26 | +dec, r, a, NONE,,, "Declinaison of point source (deg)" | |
| 27 | +srcname, s, a, NONE,,, "Name of point source" | |
| 28 | +brems, s, a, NONE,NONE|MAP|CUBE,, "Bremsstrahlung component" | |
| 29 | +ic, s, a, NONE,NONE|MAP|CUBE,, "Inverse Compton component" | |
| 30 | +iso, s, a, NONE,NONE|CONST|CONSTFIX,, "Isotropic component" | |
| 31 | +diffusetype, s, h, BINS,NODES|BINS,, "Diffuse model type" | |
| 32 | +bkgtype, s, h, BINS,NODES|BINS,, "Background model type" | |
| 33 | +ebinfile, f, h, NONE,,, "Name of the file containing the diffuse model energy bin definition" | |
| 34 | +bremsmap, f, h, $COMDATA/../skymaps/galprop/map_comptel_bremsstrahlung.fits,,, "Bremsstrahlungs map" | |
| 35 | +bremscube, f, h, $COMDATA/../skymaps/galprop/bremss_mapcube_54_77Xvarh7S.fits,,, "Bremsstrahlungs cube" | |
| 36 | +icmap, f, h, $COMDATA/../skymaps/galprop/map_comptel_ic.fits,,, "Inverse Compton map" | |
| 37 | +iccube, f, h, $COMDATA/../skymaps/galprop/ics_isotropic_mapcube_54_77Xvarh7S.fits,,, "Inverse Compton cube" | |
| 37 | 38 | |
| 38 | 39 | # |
| 39 | 40 | # Standard parameters | ... | ... |
modules/comscripts/comobsmodel.py
| ... | ... | @@ -64,7 +64,8 @@ class comobsmodel(ctools.csobservation): |
| 64 | 64 | self['brems'].string() |
| 65 | 65 | self['ic'].string() |
| 66 | 66 | self['iso'].string() |
| 67 | - self['modeltype'].string() | |
| 67 | + self['diffusetype'].string() | |
| 68 | + self['bkgtype'].string() | |
| 68 | 69 | if self['ebinfile'].is_valid(): |
| 69 | 70 | self['ebinfile'].filename() |
| 70 | 71 | self['bremsmap'].filename() |
| ... | ... | @@ -111,9 +112,9 @@ class comobsmodel(ctools.csobservation): |
| 111 | 112 | # Return energy boundaries |
| 112 | 113 | return ebounds |
| 113 | 114 | |
| 114 | - def _generate_background_model(self, obs): | |
| 115 | + def _generate_background_nodes_model(self, obs): | |
| 115 | 116 | """ |
| 116 | - Generate background model component for observation | |
| 117 | + Generate nodes background model component for observation | |
| 117 | 118 | |
| 118 | 119 | Parameters |
| 119 | 120 | ---------- |
| ... | ... | @@ -164,6 +165,60 @@ class comobsmodel(ctools.csobservation): |
| 164 | 165 | # Return model |
| 165 | 166 | return model |
| 166 | 167 | |
| 168 | + def _generate_background_bins_model(self, obs): | |
| 169 | + """ | |
| 170 | + Generate bins background model component for observation | |
| 171 | + | |
| 172 | + Parameters | |
| 173 | + ---------- | |
| 174 | + obs : `~gammalib.GCOMObservation` | |
| 175 | + COMPTEL observation | |
| 176 | + | |
| 177 | + Returns | |
| 178 | + ------- | |
| 179 | + model : `~gammalib.GCOMModelDRBPhibarBins` | |
| 180 | + Background model | |
| 181 | + """ | |
| 182 | + # Set model attributes | |
| 183 | + name = 'Background_%s' % obs.id() | |
| 184 | + id = obs.id() | |
| 185 | + | |
| 186 | + # Extract attributes from observation | |
| 187 | + drb = obs.drb() | |
| 188 | + npix = drb.nchi() * drb.npsi() | |
| 189 | + nphibar = drb.nphibar() | |
| 190 | + dphibar = 2.0 # Fixed so far as we have no method to recover | |
| 191 | + | |
| 192 | + # Create XML model list object | |
| 193 | + xml = gammalib.GXml() | |
| 194 | + lib = xml.append('source_library title="source library"') | |
| 195 | + src = lib.append('source name="%s" type="DRBPhibarBins" instrument="COM" id="%s"' % (name, id)) | |
| 196 | + | |
| 197 | + # Loop over all phibar layers | |
| 198 | + for k in range(nphibar): | |
| 199 | + | |
| 200 | + # Compute DRB content for phibar layer | |
| 201 | + sum_drb = 0.0 | |
| 202 | + for i in range(npix): | |
| 203 | + index = i + k * npix | |
| 204 | + sum_drb += drb[index] | |
| 205 | + | |
| 206 | + # Free or fix parameter | |
| 207 | + if sum_drb > 0.0: | |
| 208 | + free = '1' | |
| 209 | + else: | |
| 210 | + free = '0' | |
| 211 | + | |
| 212 | + # Add bin | |
| 213 | + src.append('parameter name="Normalization" value="1.00" ' | |
| 214 | + 'scale="1" min="0" max="1000" free="%s"' % free) | |
| 215 | + | |
| 216 | + # Create background model from XML source element | |
| 217 | + model = gammalib.GCOMModelDRBPhibarBins(src) | |
| 218 | + | |
| 219 | + # Return model | |
| 220 | + return model | |
| 221 | + | |
| 167 | 222 | def _generate_source_model(self): |
| 168 | 223 | """ |
| 169 | 224 | Generate source model |
| ... | ... | @@ -231,7 +286,7 @@ class comobsmodel(ctools.csobservation): |
| 231 | 286 | ebds = ebounds |
| 232 | 287 | |
| 233 | 288 | # Re-sample model for 'NODES' model type |
| 234 | - if self['modeltype'].string() == 'NODES': | |
| 289 | + if self['diffusetype'].string() == 'NODES': | |
| 235 | 290 | |
| 236 | 291 | # Setup energies vector for bin mean energies |
| 237 | 292 | energies = gammalib.GEnergies() |
| ... | ... | @@ -485,7 +540,10 @@ class comobsmodel(ctools.csobservation): |
| 485 | 540 | self._log_string(gammalib.NORMAL, str(obs)) |
| 486 | 541 | |
| 487 | 542 | # Generate model |
| 488 | - model = self._generate_background_model(obs) | |
| 543 | + if self['bkgtype'].string() == 'NODES': | |
| 544 | + model = self._generate_background_nodes_model(obs) | |
| 545 | + else: | |
| 546 | + model = self._generate_background_bins_model(obs) | |
| 489 | 547 | |
| 490 | 548 | # Log model |
| 491 | 549 | self._log_string(gammalib.EXPLICIT, str(model)) | ... | ... |