Commit 7c9d9804b0adff24e17ee9cf5a2709d9faabceb5
1 parent
1aa478ab
Adapt comobsbin script to new phase interface and add parameters for pulsar phase selection
Showing
3 changed files
with
87 additions
and
55 deletions
modules/comscripts/comobsbin.par
| ... | ... | @@ -23,31 +23,33 @@ outfolder, s, a, $COMDATASTORE,,, "Output folder for files" |
| 23 | 23 | # |
| 24 | 24 | # Script parameters |
| 25 | 25 | #================== |
| 26 | -ebinalg, s, a, FILE,FILE|LIN|LOG,, "Algorithm for defining energy bins" | |
| 27 | -emin, r, a, 0.75,0.05,50.0, "Minimum energy (MeV)" | |
| 28 | -emax, r, a, 30.0,0.05,50.0, "Maximum energy (MeV)" | |
| 29 | -phase, s, a, NONE,,, "Phase expression in the format phasemin0-phasemax0;phasemin1-phasemax1;..." | |
| 30 | -phase0, t, a, JD 2451943.09,,, "Date of Phase 0 (UTC string, JD, MJD or MET in seconds)" | |
| 31 | -period, r, a, 3.90603,,, "Period (days)" | |
| 32 | -enumbins, i, a, 1,1,20, "Number of energy bins" | |
| 33 | -ebinfile, f, a, ebounds.fits,,, "Name of the file containing the energy bin definition" | |
| 34 | -coordsys, s, a, GAL,CEL|GAL,,"Coordinate system (CEL - celestial, GAL - galactic)" | |
| 35 | -proj, s, a, TAN,AIT|AZP|CAR|GLS|MOL|SFL|SIN|STG|TAN,, "Projection method" | |
| 36 | -usepnt, b, h, yes,,, "Use pointing instead of chi0/psi0 parameters?" | |
| 37 | -chi0, r, a, 83.63,0,360, "Chi of DRI centre in degrees (RA or Galactic longitude)" | |
| 38 | -psi0, r, a, 22.51,-90,90, "Psi of DRI centre in degrees (DEC or Galactic latitude)" | |
| 39 | -dchi, r, h, 1.0,0.1,10.0, "Bin size in Chi direction (deg)" | |
| 40 | -dpsi, r, h, 1.0,0.1,10.0, "Bin size in Psi direction (deg)" | |
| 41 | -dphibar, r, h, 2.0,0.1,10.0, "Bin size in Phibar direction (deg)" | |
| 42 | -nchi, i, h, 80,1,800, "Number of bins in Chi direction" | |
| 43 | -npsi, i, h, 80,1,800, "Number of bins in Psi direction" | |
| 44 | -nphibar, i, h, 25,1,500, "Number of bins in Phibar direction" | |
| 45 | -psdmin, i, h, 0,0,110, "Minimum PSD value" | |
| 46 | -psdmax, i, h, 110,0,110, "Maximum PSD value" | |
| 47 | -zetamin, r, h, 5.0,0.0,10.0, "Minimum Earth horizon - Phibar (zeta) angle (deg)" | |
| 48 | -fpmtflag, i, h, 0,0,2, "Handling of D2 modules with failed PMT flag (0: exclude, 1: include, 2: exclude PMT)" | |
| 49 | -d1use, s, h, 1111111,,, "D1 module usage (1: use, 0: don't use)" | |
| 50 | -d2use, s, h, 11111111111111,,, "D2 module usage (1: use, 0: don't use)" | |
| 26 | +ebinalg, s, a, FILE,FILE|LIN|LOG,, "Algorithm for defining energy bins" | |
| 27 | +emin, r, a, 0.75,0.05,50.0, "Minimum energy (MeV)" | |
| 28 | +emax, r, a, 30.0,0.05,50.0, "Maximum energy (MeV)" | |
| 29 | +phase, s, a, NONE,,, "Phase expression in the format phasemin0-phasemax0;phasemin1-phasemax1;..." | |
| 30 | +psrname, s, a, NONE,,, "Pulsar name" | |
| 31 | +ephemerides, f, a, NONE,,, "Pulsar ephemerides file" | |
| 32 | +phase0, t, a, JD 2451943.09,,, "Date of Phase 0 (UTC string, JD, MJD or MET in seconds)" | |
| 33 | +period, r, a, 3.90603,,, "Period (days)" | |
| 34 | +enumbins, i, a, 1,1,20, "Number of energy bins" | |
| 35 | +ebinfile, f, a, ebounds.fits,,, "Name of the file containing the energy bin definition" | |
| 36 | +coordsys, s, a, CEL,CEL|GAL,,"Coordinate system (CEL - celestial, GAL - galactic)" | |
| 37 | +proj, s, a, TAN,AIT|AZP|CAR|GLS|MOL|SFL|SIN|STG|TAN,, "Projection method" | |
| 38 | +usepnt, b, h, yes,,, "Use pointing instead of chi0/psi0 parameters?" | |
| 39 | +chi0, r, a, 83.63,0,360, "Chi of DRI centre in degrees (RA or Galactic longitude)" | |
| 40 | +psi0, r, a, 22.51,-90,90, "Psi of DRI centre in degrees (DEC or Galactic latitude)" | |
| 41 | +dchi, r, h, 1.0,0.1,10.0, "Bin size in Chi direction (deg)" | |
| 42 | +dpsi, r, h, 1.0,0.1,10.0, "Bin size in Psi direction (deg)" | |
| 43 | +dphibar, r, h, 2.0,0.1,10.0, "Bin size in Phibar direction (deg)" | |
| 44 | +nchi, i, h, 80,1,800, "Number of bins in Chi direction" | |
| 45 | +npsi, i, h, 80,1,800, "Number of bins in Psi direction" | |
| 46 | +nphibar, i, h, 25,1,500, "Number of bins in Phibar direction" | |
| 47 | +psdmin, i, h, 0,0,110, "Minimum PSD value" | |
| 48 | +psdmax, i, h, 110,0,110, "Maximum PSD value" | |
| 49 | +zetamin, r, h, 5.0,0.0,10.0, "Minimum Earth horizon - Phibar (zeta) angle (deg)" | |
| 50 | +fpmtflag, i, h, 0,0,2, "Handling of D2 modules with failed PMT flag (0: exclude, 1: include, 2: exclude PMT)" | |
| 51 | +d1use, s, h, 1111111,,, "D1 module usage (1: use, 0: don't use)" | |
| 52 | +d2use, s, h, 11111111111111,,, "D2 module usage (1: use, 0: don't use)" | |
| 51 | 53 | |
| 52 | 54 | # |
| 53 | 55 | # Standard parameters | ... | ... |
modules/comscripts/comobsbin.py
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | # ========================================================================== |
| 3 | 3 | # Bin COMPTEL observations |
| 4 | 4 | # |
| 5 | -# Copyright (C) 2019-2021 Juergen Knoedlseder | |
| 5 | +# Copyright (C) 2019-2022 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 |
| ... | ... | @@ -62,8 +62,11 @@ class comobsbin(ctools.csobservation): |
| 62 | 62 | self._get_ebounds() |
| 63 | 63 | self._get_phases() |
| 64 | 64 | if not self._phases.is_empty(): |
| 65 | - self['phase0'].time() | |
| 66 | - self['period'].real() | |
| 65 | + if gammalib.toupper(self['psrname'].string()) != 'NONE': | |
| 66 | + self['ephemerides'].filename() | |
| 67 | + else: | |
| 68 | + self['phase0'].time() | |
| 69 | + self['period'].real() | |
| 67 | 70 | self['coordsys'].string() |
| 68 | 71 | self['proj'].string() |
| 69 | 72 | if not self['usepnt'].boolean(): |
| ... | ... | @@ -80,7 +83,7 @@ class comobsbin(ctools.csobservation): |
| 80 | 83 | self['psdmax'].integer() |
| 81 | 84 | self['zetamin'].real() |
| 82 | 85 | self['fpmtflag'].integer() |
| 83 | - | |
| 86 | + | |
| 84 | 87 | # Get D1 and D2 module usage strings |
| 85 | 88 | d1use = self['d1use'].string() |
| 86 | 89 | d2use = self['d2use'].string() |
| ... | ... | @@ -183,39 +186,62 @@ class comobsbin(ctools.csobservation): |
| 183 | 186 | # Clear selection set |
| 184 | 187 | self._select.clear() |
| 185 | 188 | |
| 186 | - # If phases are set then set the phase curve and phases of the | |
| 187 | - # selection set | |
| 189 | + # If phases are set then handle phase selection | |
| 188 | 190 | if not self._phases.is_empty(): |
| 189 | 191 | |
| 190 | - # Raise error if period is not positive | |
| 191 | - if self['period'].real() <= 0.0: | |
| 192 | - msg = 'Period %f is not positive. Please specify a positive period.' | |
| 193 | - raise RuntimeError(msg) | |
| 192 | + # If pulsar string is valid then handle pulsar | |
| 193 | + psrname = self['psrname'].string() | |
| 194 | + if gammalib.toupper(psrname) != 'NONE': | |
| 195 | + | |
| 196 | + # Log pulsar phase selection | |
| 197 | + self._log_string(gammalib.NORMAL, 'Phase selection for pulsar "%s"' % | |
| 198 | + psrname) | |
| 199 | + | |
| 200 | + # Read ephemerides | |
| 201 | + pulsar = gammalib.GPulsar(self['ephemerides'].filename(), psrname) | |
| 202 | + | |
| 203 | + # Set pulsar ephemerides | |
| 204 | + self._select.pulsar(pulsar) | |
| 205 | + | |
| 206 | + # Set pulsar phases | |
| 207 | + self._select.pulsar_phases(self._phases) | |
| 194 | 208 | |
| 195 | - # Get frequency of variability in units of Hz | |
| 196 | - f0 = 1.0 / (self['period'].real() * gammalib.sec_in_day) | |
| 209 | + # Set phase suffix | |
| 210 | + suffix = '_pulphase' | |
| 211 | + | |
| 212 | + # Set DRE, DRG and DRX suffix | |
| 213 | + phases = self['phase'].string() | |
| 214 | + self._dre_suffix = suffix+phases.replace(';', '_') | |
| 215 | + self._drg_suffix = suffix | |
| 216 | + self._drx_suffix = suffix | |
| 217 | + | |
| 218 | + # ... otherwise handle orbital phase selection | |
| 219 | + else: | |
| 220 | + | |
| 221 | + # Raise error if period is not positive | |
| 222 | + period = self['period'].real() | |
| 223 | + if period <= 0.0: | |
| 224 | + msg = 'Period %f is not positive. Please specify a positive period.' | |
| 225 | + raise RuntimeError(msg) | |
| 197 | 226 | |
| 198 | - # Set temporal phase curve | |
| 199 | - phase_curve = gammalib.GModelTemporalPhaseCurve() | |
| 227 | + # Log orbital phase selection | |
| 228 | + self._log_string(gammalib.NORMAL, 'Orbital selection for period %f days' % | |
| 229 | + period) | |
| 200 | 230 | |
| 201 | - # Set phase curve elements | |
| 202 | - phase_curve.mjd(self['phase0'].time()) # Reference time | |
| 203 | - phase_curve.phase(0.0) # Phase @ reference time | |
| 204 | - phase_curve.f0(f0) # Frequency @ reference time | |
| 205 | - phase_curve.f1(0.0) # No frequency derivative | |
| 206 | - phase_curve.f2(0.0) # No 2nd frequency derivative | |
| 231 | + # Set orbital period | |
| 232 | + self._select.orbital_period(period, self['phase0'].time()) | |
| 207 | 233 | |
| 208 | - # Set phase curve | |
| 209 | - self._select.phase_curve(phase_curve) | |
| 234 | + # Set orbital phases | |
| 235 | + self._select.orbital_phases(self._phases) | |
| 210 | 236 | |
| 211 | - # Set phases | |
| 212 | - self._select.phases(self._phases) | |
| 237 | + # Set phase suffix | |
| 238 | + suffix = '_orbphase' | |
| 213 | 239 | |
| 214 | - # Set DRE, DRG and DRX suffix | |
| 215 | - phases = self['phase'].string() | |
| 216 | - self._dre_suffix = '_phases'+phases.replace(';', '_') | |
| 217 | - self._drg_suffix = '_phases'+phases.replace(';', '_') | |
| 218 | - self._drx_suffix = '_phases'+phases.replace(';', '_') | |
| 240 | + # Set DRE, DRG and DRX suffix | |
| 241 | + phases = self['phase'].string() | |
| 242 | + self._dre_suffix = suffix+phases.replace(';', '_') | |
| 243 | + self._drg_suffix = suffix+phases.replace(';', '_') | |
| 244 | + self._drx_suffix = suffix+phases.replace(';', '_') | |
| 219 | 245 | |
| 220 | 246 | # If PSD interval differs from standard interval then set the interval |
| 221 | 247 | # and append flag to suffix | ... | ... |
test/test_comobsbin.py
| ... | ... | @@ -2,7 +2,7 @@ |
| 2 | 2 | # ========================================================================== |
| 3 | 3 | # This scripts performs unit tests for the comobsbin script. |
| 4 | 4 | # |
| 5 | -# Copyright (C) 2021 Juergen Knoedlseder | |
| 5 | +# Copyright (C) 2021-2022 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 |
| ... | ... | @@ -81,6 +81,7 @@ class Test(test): |
| 81 | 81 | # Setup command |
| 82 | 82 | cmd = comobsbin+' inobs="'+self._obs+'" ebinalg="FILE" '+ \ |
| 83 | 83 | 'ebinfile="'+self._ebounds+'" phase="NONE" '+ \ |
| 84 | + 'coordsys="GAL" proj="TAN" '+ \ | |
| 84 | 85 | 'outfolder="comobsbin_cmd1" outobs="comobsbin_cmd1.xml" '+ \ |
| 85 | 86 | 'logfile="comobsbin_cmd1.log" chatter=1' |
| 86 | 87 | |
| ... | ... | @@ -94,6 +95,7 @@ class Test(test): |
| 94 | 95 | # Setup command |
| 95 | 96 | cmd = comobsbin+' inobs="file_that_does_not_exist.xml" ebinalg="FILE" '+ \ |
| 96 | 97 | 'ebinfile="'+self._ebounds+'" phase="NONE" '+ \ |
| 98 | + 'coordsys="GAL" proj="TAN" '+ \ | |
| 97 | 99 | 'outfolder="comobsbin_cmd2" outobs="comobsbin_cmd2.xml" '+ \ |
| 98 | 100 | 'logfile="comobsbin_cmd2.log" chatter=1' |
| 99 | 101 | |
| ... | ... | @@ -118,6 +120,8 @@ class Test(test): |
| 118 | 120 | bin['ebinalg'] = 'FILE' |
| 119 | 121 | bin['ebinfile'] = self._ebounds |
| 120 | 122 | bin['phase'] = 'NONE' |
| 123 | + bin['coordsys'] = 'GAL' | |
| 124 | + bin['proj'] = 'TAN' | |
| 121 | 125 | bin['outfolder'] = 'comobsbin_py1' |
| 122 | 126 | bin['outobs'] = 'comobsbin_py1.xml' |
| 123 | 127 | bin['logfile'] = 'comobsbin_py1.log' | ... | ... |