Commit 96842f77dee981121f2d04e11f4efc6973603b4c
1 parent
f3f1a514
ctbin::cube() now returns a reference to a member
The building of a cuve on the fly raised issue with memory going out of scope. This is fixed by making the CTA event cube a member of ctbin, and having the cube() method returning a reference to that member
Showing
16 changed files
with
98 additions
and
72 deletions
cscripts/csinfo.py
| 1 | #!/usr/bin/env python | 1 | #!/usr/bin/env python |
| 2 | # ========================================================================== | 2 | # ========================================================================== |
| 3 | -# Print info about Gammalib / ctools to the console. | 3 | +# Print info about Gammalib / ctools to the console |
| 4 | # | 4 | # |
| 5 | # Copyright (C) 2015-2016 Christoph Deil | 5 | # Copyright (C) 2015-2016 Christoph Deil |
| 6 | # | 6 | # |
| @@ -87,8 +87,8 @@ def get_command_output(cmd): | @@ -87,8 +87,8 @@ def get_command_output(cmd): | ||
| 87 | output : str | 87 | output : str |
| 88 | Command output | 88 | Command output |
| 89 | """ | 89 | """ |
| 90 | - # Try to import getoutput from subprocess, alternatively get it from | ||
| 91 | - # commands | 90 | + # Try to import getoutput from the "subprocess" module, alternatively get |
| 91 | + # it from the "commands" module | ||
| 92 | try: | 92 | try: |
| 93 | from subprocess import getoutput | 93 | from subprocess import getoutput |
| 94 | except ImportError: | 94 | except ImportError: |
| @@ -287,8 +287,7 @@ def get_pkg_config_info(info, library): | @@ -287,8 +287,7 @@ def get_pkg_config_info(info, library): | ||
| 287 | # Execute command | 287 | # Execute command |
| 288 | out = get_command_output(cmd) | 288 | out = get_command_output(cmd) |
| 289 | 289 | ||
| 290 | - # If the command returns 'was not found' then pkg-config is not | ||
| 291 | - # available | 290 | + # If the command returns "not found" then pkg-config is not available |
| 292 | if 'not found' in out: | 291 | if 'not found' in out: |
| 293 | out = 'Not available' | 292 | out = 'Not available' |
| 294 | 293 | ||
| @@ -322,8 +321,8 @@ def csinfo(argv): | @@ -322,8 +321,8 @@ def csinfo(argv): | ||
| 322 | """ | 321 | """ |
| 323 | Print information about Gammalib and ctools to the console | 322 | Print information about Gammalib and ctools to the console |
| 324 | """ | 323 | """ |
| 325 | - # If there are no command line arguments then print help and exit with | ||
| 326 | - # success | 324 | + # If there are no command line arguments then print help text and exit |
| 325 | + # with success | ||
| 327 | if len(argv) <= 1: | 326 | if len(argv) <= 1: |
| 328 | csinfo_print_help() | 327 | csinfo_print_help() |
| 329 | sys.exit(0) | 328 | sys.exit(0) |
cscripts/csobsdef.py
| @@ -28,7 +28,7 @@ import ctools | @@ -28,7 +28,7 @@ import ctools | ||
| 28 | # ============== # | 28 | # ============== # |
| 29 | class csobsdef(ctools.cscript): | 29 | class csobsdef(ctools.cscript): |
| 30 | """ | 30 | """ |
| 31 | - Creates an observation definition file from a pointing list. | 31 | + Creates an observation definition file from a pointing list |
| 32 | 32 | ||
| 33 | The pointing list is a comma-separated value ASCII file with header | 33 | The pointing list is a comma-separated value ASCII file with header |
| 34 | keywords in the first row followed by a list of pointings (one | 34 | keywords in the first row followed by a list of pointings (one |
| @@ -92,8 +92,7 @@ class csobsdef(ctools.cscript): | @@ -92,8 +92,7 @@ class csobsdef(ctools.cscript): | ||
| 92 | self._pntdef = gammalib.GCsv() | 92 | self._pntdef = gammalib.GCsv() |
| 93 | self._tmin = 0.0 | 93 | self._tmin = 0.0 |
| 94 | 94 | ||
| 95 | - # Initialise application by calling the appropriate class | ||
| 96 | - # constructor. | 95 | + # Initialise application by calling the appropriate class constructor |
| 97 | self._init_cscript(argv) | 96 | self._init_cscript(argv) |
| 98 | 97 | ||
| 99 | # Return | 98 | # Return |
| @@ -128,6 +127,20 @@ class csobsdef(ctools.cscript): | @@ -128,6 +127,20 @@ class csobsdef(ctools.cscript): | ||
| 128 | The method creates an XML element so that that the response XML | 127 | The method creates an XML element so that that the response XML |
| 129 | writer will write the database and response name into the | 128 | writer will write the database and response name into the |
| 130 | observation definition file. | 129 | observation definition file. |
| 130 | + | ||
| 131 | + Parameters | ||
| 132 | + ---------- | ||
| 133 | + obs : `~gammalib.GCTAObservation` | ||
| 134 | + CTA observation | ||
| 135 | + caldb : str | ||
| 136 | + Calibration database | ||
| 137 | + irf : str | ||
| 138 | + Instrument response function | ||
| 139 | + | ||
| 140 | + Returns | ||
| 141 | + obs : `~gammalib.GCTAObservation` | ||
| 142 | + CTA observation with response attached | ||
| 143 | + ------- | ||
| 131 | """ | 144 | """ |
| 132 | # Create XML element | 145 | # Create XML element |
| 133 | xml = gammalib.GXmlElement() | 146 | xml = gammalib.GXmlElement() |
| @@ -156,7 +169,7 @@ class csobsdef(ctools.cscript): | @@ -156,7 +169,7 @@ class csobsdef(ctools.cscript): | ||
| 156 | Raises | 169 | Raises |
| 157 | ------ | 170 | ------ |
| 158 | RuntimeError | 171 | RuntimeError |
| 159 | - Invalid pointing definition file format. | 172 | + Invalid pointing definition file format |
| 160 | """ | 173 | """ |
| 161 | # Switch screen logging on in debug mode | 174 | # Switch screen logging on in debug mode |
| 162 | if self._logDebug(): | 175 | if self._logDebug(): |
| @@ -170,21 +183,25 @@ class csobsdef(ctools.cscript): | @@ -170,21 +183,25 @@ class csobsdef(ctools.cscript): | ||
| 170 | self._log('\n') | 183 | self._log('\n') |
| 171 | self._log.header1('Creating observation definition XML file') | 184 | self._log.header1('Creating observation definition XML file') |
| 172 | 185 | ||
| 173 | - # Load pointing definition file if it is not already set | 186 | + # Load pointing definition file if it is not already set. Extract |
| 187 | + # the number of columns and pointings | ||
| 174 | if self._pntdef.size() == 0: | 188 | if self._pntdef.size() == 0: |
| 175 | self._pntdef = gammalib.GCsv(self['inpnt'].filename(), ',') | 189 | self._pntdef = gammalib.GCsv(self['inpnt'].filename(), ',') |
| 176 | ncols = self._pntdef.ncols() | 190 | ncols = self._pntdef.ncols() |
| 177 | npnt = self._pntdef.nrows()-1 | 191 | npnt = self._pntdef.nrows()-1 |
| 178 | 192 | ||
| 179 | - # Throw an exception is there is no header information | 193 | + # Raise an exception if there is no header information |
| 180 | if self._pntdef.nrows() < 1: | 194 | if self._pntdef.nrows() < 1: |
| 181 | raise RuntimeError('No header found in pointing definition file.') | 195 | raise RuntimeError('No header found in pointing definition file.') |
| 182 | 196 | ||
| 183 | # Clear observation container | 197 | # Clear observation container |
| 184 | self._obs.clear() | 198 | self._obs.clear() |
| 199 | + | ||
| 200 | + # Initialise observation identifier counter | ||
| 185 | identifier = 1 | 201 | identifier = 1 |
| 186 | 202 | ||
| 187 | - # Extract header from pointing definition file | 203 | + # Extract header columns from pointing definition file and put them |
| 204 | + # into a list | ||
| 188 | header = [] | 205 | header = [] |
| 189 | for col in range(ncols): | 206 | for col in range(ncols): |
| 190 | header.append(self._pntdef[0,col]) | 207 | header.append(self._pntdef[0,col]) |
| @@ -192,28 +209,31 @@ class csobsdef(ctools.cscript): | @@ -192,28 +209,31 @@ class csobsdef(ctools.cscript): | ||
| 192 | # Loop over all pointings | 209 | # Loop over all pointings |
| 193 | for pnt in range(npnt): | 210 | for pnt in range(npnt): |
| 194 | 211 | ||
| 195 | - # Set row index | 212 | + # Set pointing definition CSV file row index |
| 196 | row = pnt + 1 | 213 | row = pnt + 1 |
| 197 | 214 | ||
| 198 | - # Create CTA observation | 215 | + # Create empty CTA observation |
| 199 | obs = gammalib.GCTAObservation() | 216 | obs = gammalib.GCTAObservation() |
| 200 | 217 | ||
| 201 | - # Set observation name | 218 | + # Set observation name. If no observation name was given then |
| 219 | + # use "None". | ||
| 202 | if 'name' in header: | 220 | if 'name' in header: |
| 203 | name = self._pntdef[row, header.index('name')] | 221 | name = self._pntdef[row, header.index('name')] |
| 204 | else: | 222 | else: |
| 205 | name = 'None' | 223 | name = 'None' |
| 206 | obs.name(name) | 224 | obs.name(name) |
| 207 | 225 | ||
| 208 | - # Set identifier | 226 | + # Set observation identifier. If no observation identified was |
| 227 | + # given the use the internal counter. | ||
| 209 | if 'id' in header: | 228 | if 'id' in header: |
| 210 | - id_ = self._pntdef[row, header.index('id')] | 229 | + obsid = self._pntdef[row, header.index('id')] |
| 211 | else: | 230 | else: |
| 212 | - id_ = '%6.6d' % identifier | 231 | + obsid = '%6.6d' % identifier |
| 213 | identifier += 1 | 232 | identifier += 1 |
| 214 | - obs.id(id_) | 233 | + obs.id(obsid) |
| 215 | 234 | ||
| 216 | - # Set pointing | 235 | + # Set pointing. Either use "ra" and "dec" or "lon" and "lat". |
| 236 | + # If none of these pairs are given then raise an exception. | ||
| 217 | if 'ra' in header and 'dec' in header: | 237 | if 'ra' in header and 'dec' in header: |
| 218 | ra = float(self._pntdef[row, header.index('ra')]) | 238 | ra = float(self._pntdef[row, header.index('ra')]) |
| 219 | dec = float(self._pntdef[row, header.index('dec')]) | 239 | dec = float(self._pntdef[row, header.index('dec')]) |
| @@ -229,7 +249,8 @@ class csobsdef(ctools.cscript): | @@ -229,7 +249,8 @@ class csobsdef(ctools.cscript): | ||
| 229 | 'found in pointing definition file.') | 249 | 'found in pointing definition file.') |
| 230 | obs.pointing(gammalib.GCTAPointing(pntdir)) | 250 | obs.pointing(gammalib.GCTAPointing(pntdir)) |
| 231 | 251 | ||
| 232 | - # Set response function | 252 | + # Set response function. If no "caldb" or "irf" information is |
| 253 | + # provided then use the user parameter values. | ||
| 233 | if 'caldb' in header: | 254 | if 'caldb' in header: |
| 234 | caldb = self._pntdef[row, header.index('caldb')] | 255 | caldb = self._pntdef[row, header.index('caldb')] |
| 235 | else: | 256 | else: |
| @@ -241,14 +262,16 @@ class csobsdef(ctools.cscript): | @@ -241,14 +262,16 @@ class csobsdef(ctools.cscript): | ||
| 241 | if caldb != '' and irf != '': | 262 | if caldb != '' and irf != '': |
| 242 | obs = self._set_response(obs, caldb, irf) | 263 | obs = self._set_response(obs, caldb, irf) |
| 243 | 264 | ||
| 244 | - # Set deadtime correction factor | 265 | + # Set deadtime correction factor. If no information is provided |
| 266 | + # then use the user parameter value "deadc". | ||
| 245 | if 'deadc' in header: | 267 | if 'deadc' in header: |
| 246 | deadc = float(self._pntdef[row, header.index('deadc')]) | 268 | deadc = float(self._pntdef[row, header.index('deadc')]) |
| 247 | else: | 269 | else: |
| 248 | deadc = self['deadc'].real() | 270 | deadc = self['deadc'].real() |
| 249 | obs.deadc(deadc) | 271 | obs.deadc(deadc) |
| 250 | 272 | ||
| 251 | - # Set Good Time Interval | 273 | + # Set Good Time Interval. If no information is provided then use |
| 274 | + # the user parameter value "duration". | ||
| 252 | if 'duration' in header: | 275 | if 'duration' in header: |
| 253 | duration = float(self._pntdef[row, header.index('duration')]) | 276 | duration = float(self._pntdef[row, header.index('duration')]) |
| 254 | else: | 277 | else: |
| @@ -263,7 +286,9 @@ class csobsdef(ctools.cscript): | @@ -263,7 +286,9 @@ class csobsdef(ctools.cscript): | ||
| 263 | obs.ontime(gti.ontime()) | 286 | obs.ontime(gti.ontime()) |
| 264 | obs.livetime(gti.ontime()*deadc) | 287 | obs.livetime(gti.ontime()*deadc) |
| 265 | 288 | ||
| 266 | - # Set Energy Boundaries | 289 | + # Set Energy Boundaries. If no "emin" or "emax" information is |
| 290 | + # provided then use the user parameter values in case they are | ||
| 291 | + # valid. | ||
| 267 | has_emin = False | 292 | has_emin = False |
| 268 | has_emax = False | 293 | has_emax = False |
| 269 | if 'emin' in header: | 294 | if 'emin' in header: |
| @@ -285,7 +310,8 @@ class csobsdef(ctools.cscript): | @@ -285,7 +310,8 @@ class csobsdef(ctools.cscript): | ||
| 285 | ebounds = gammalib.GEbounds(gammalib.GEnergy(emin, 'TeV'), | 310 | ebounds = gammalib.GEbounds(gammalib.GEnergy(emin, 'TeV'), |
| 286 | gammalib.GEnergy(emax, 'TeV')) | 311 | gammalib.GEnergy(emax, 'TeV')) |
| 287 | 312 | ||
| 288 | - # Set ROI | 313 | + # Set ROI. If no ROI radius is provided then use the user |
| 314 | + # parameters "rad". | ||
| 289 | has_roi = False | 315 | has_roi = False |
| 290 | if 'rad' in header: | 316 | if 'rad' in header: |
| 291 | rad = float(self._pntdef[row, header.index('rad')]) | 317 | rad = float(self._pntdef[row, header.index('rad')]) |
| @@ -298,17 +324,17 @@ class csobsdef(ctools.cscript): | @@ -298,17 +324,17 @@ class csobsdef(ctools.cscript): | ||
| 298 | roi = gammalib.GCTARoi(gammalib.GCTAInstDir(pntdir), rad) | 324 | roi = gammalib.GCTARoi(gammalib.GCTAInstDir(pntdir), rad) |
| 299 | 325 | ||
| 300 | # Create an empty event list | 326 | # Create an empty event list |
| 301 | - list_ = gammalib.GCTAEventList() | ||
| 302 | - list_.gti(gti) | 327 | + event_list = gammalib.GCTAEventList() |
| 328 | + event_list.gti(gti) | ||
| 303 | 329 | ||
| 304 | - # Set optional information | 330 | + # If available, set the energy boundaries and the ROI |
| 305 | if has_ebounds: | 331 | if has_ebounds: |
| 306 | - list_.ebounds(ebounds) | 332 | + event_list.ebounds(ebounds) |
| 307 | if has_roi: | 333 | if has_roi: |
| 308 | - list_.roi(roi) | 334 | + event_list.roi(roi) |
| 309 | 335 | ||
| 310 | # Attach event list to CTA observation | 336 | # Attach event list to CTA observation |
| 311 | - obs.events(list_) | 337 | + obs.events(event_list) |
| 312 | 338 | ||
| 313 | # Write observation into logger | 339 | # Write observation into logger |
| 314 | if self._logExplicit(): | 340 | if self._logExplicit(): |
cscripts/obsutils.py
| @@ -136,15 +136,11 @@ def sim(obs, log=False, debug=False, chatter=2, edisp=False, seed=0, | @@ -136,15 +136,11 @@ def sim(obs, log=False, debug=False, chatter=2, edisp=False, seed=0, | ||
| 136 | # cubes and append them to the observation | 136 | # cubes and append them to the observation |
| 137 | if len(sim.obs()) > 1: | 137 | if len(sim.obs()) > 1: |
| 138 | 138 | ||
| 139 | - # First get the cube. We need this because ctbin builds a cube on | ||
| 140 | - # the fly. We should avoid this and make the cube part of ctbin | ||
| 141 | - cube = bin.cube() | ||
| 142 | - | ||
| 143 | # Get xref, yref, coordsys and proj from counts cube | 139 | # Get xref, yref, coordsys and proj from counts cube |
| 144 | - _xref = cube.counts().projection().crval(0) | ||
| 145 | - _yref = cube.counts().projection().crval(1) | ||
| 146 | - _coordsys = cube.counts().projection().coordsys() | ||
| 147 | - _proj = cube.counts().projection().code() | 140 | + _xref = bin.cube().counts().projection().crval(0) |
| 141 | + _yref = bin.cube().counts().projection().crval(1) | ||
| 142 | + _coordsys = bin.cube().counts().projection().coordsys() | ||
| 143 | + _proj = bin.cube().counts().projection().code() | ||
| 148 | 144 | ||
| 149 | # Kluge: map "EQU" to "CEL" coordinate system (not sure why the | 145 | # Kluge: map "EQU" to "CEL" coordinate system (not sure why the |
| 150 | # GSkyProjection::coordsys returns "EQU" instead of "CEL" | 146 | # GSkyProjection::coordsys returns "EQU" instead of "CEL" |
examples/show_butterfly.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except ImportError, RuntimeError: | 28 | +except (ImportError, RuntimeError): |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | 31 |
examples/show_model.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except ImportError, RuntimeError: | 28 | +except (ImportError, RuntimeError): |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | 31 |
examples/show_obs.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except ImportError, RuntimeError: | 28 | +except (ImportError, RuntimeError): |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | 31 |
examples/show_pha.py
| @@ -26,7 +26,7 @@ try: | @@ -26,7 +26,7 @@ try: | ||
| 26 | import matplotlib.pyplot as plt | 26 | import matplotlib.pyplot as plt |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except ImportError, RuntimeError: | 29 | +except (ImportError, RuntimeError): |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | 32 |
examples/show_pull_evolution.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except ImportError, RuntimeError: | 28 | +except (ImportError, RuntimeError): |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | try: | 31 | try: |
examples/show_pull_histogram.py
| @@ -26,7 +26,7 @@ try: | @@ -26,7 +26,7 @@ try: | ||
| 26 | import matplotlib.mlab as mlab | 26 | import matplotlib.mlab as mlab |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except ImportError, RuntimeError: | 29 | +except (ImportError, RuntimeError): |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | try: | 32 | try: |
examples/show_response.py
| @@ -26,7 +26,7 @@ try: | @@ -26,7 +26,7 @@ try: | ||
| 26 | import matplotlib.pyplot as plt | 26 | import matplotlib.pyplot as plt |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except ImportError, RuntimeError: | 29 | +except (ImportError, RuntimeError): |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | 32 |
examples/show_sensitivity.py
| @@ -26,7 +26,7 @@ try: | @@ -26,7 +26,7 @@ try: | ||
| 26 | import matplotlib.pyplot as plt | 26 | import matplotlib.pyplot as plt |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except ImportError, RuntimeError: | 29 | +except (ImportError, RuntimeError): |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | 32 |
examples/show_spectrum.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except ImportError, RuntimeError: | 28 | +except (ImportError, RuntimeError): |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | 31 |
examples/show_ts_distribution.py
| @@ -26,7 +26,7 @@ try: | @@ -26,7 +26,7 @@ try: | ||
| 26 | import matplotlib.pyplot as plt | 26 | import matplotlib.pyplot as plt |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except ImportError, RuntimeError: | 29 | +except (ImportError, RuntimeError): |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | try: | 32 | try: |
pyext/ctbin.i
| @@ -49,7 +49,7 @@ public: | @@ -49,7 +49,7 @@ public: | ||
| 49 | void save(void); | 49 | void save(void); |
| 50 | void publish(const std::string& name = ""); | 50 | void publish(const std::string& name = ""); |
| 51 | const GObservations& obs(void) const; | 51 | const GObservations& obs(void) const; |
| 52 | - GCTAEventCube cube(void) const; | 52 | + const GCTAEventCube& cube(void) const; |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | 55 |
src/ctbin/ctbin.cpp
| @@ -281,6 +281,10 @@ void ctbin::run(void) | @@ -281,6 +281,10 @@ void ctbin::run(void) | ||
| 281 | 281 | ||
| 282 | } // endfor: looped over observations | 282 | } // endfor: looped over observations |
| 283 | 283 | ||
| 284 | + // Build event cube (needs to come before obs_cube() since this method | ||
| 285 | + // relies on correct setting of m_cube) | ||
| 286 | + m_cube = GCTAEventCube(m_counts, m_weights, m_ebounds, m_gti); | ||
| 287 | + | ||
| 284 | // Set a single cube in the observation container | 288 | // Set a single cube in the observation container |
| 285 | obs_cube(); | 289 | obs_cube(); |
| 286 | 290 | ||
| @@ -400,6 +404,7 @@ void ctbin::init_members(void) | @@ -400,6 +404,7 @@ void ctbin::init_members(void) | ||
| 400 | m_weights.clear(); | 404 | m_weights.clear(); |
| 401 | m_ebounds.clear(); | 405 | m_ebounds.clear(); |
| 402 | m_gti.clear(); | 406 | m_gti.clear(); |
| 407 | + m_cube.clear(); | ||
| 403 | m_ontime = 0.0; | 408 | m_ontime = 0.0; |
| 404 | m_livetime = 0.0; | 409 | m_livetime = 0.0; |
| 405 | 410 | ||
| @@ -427,6 +432,7 @@ void ctbin::copy_members(const ctbin& app) | @@ -427,6 +432,7 @@ void ctbin::copy_members(const ctbin& app) | ||
| 427 | m_weights = app.m_weights; | 432 | m_weights = app.m_weights; |
| 428 | m_ebounds = app.m_ebounds; | 433 | m_ebounds = app.m_ebounds; |
| 429 | m_gti = app.m_gti; | 434 | m_gti = app.m_gti; |
| 435 | + m_cube = app.m_cube; | ||
| 430 | m_ontime = app.m_ontime; | 436 | m_ontime = app.m_ontime; |
| 431 | m_livetime = app.m_livetime; | 437 | m_livetime = app.m_livetime; |
| 432 | 438 |
src/ctbin/ctbin.hpp
| @@ -81,7 +81,7 @@ public: | @@ -81,7 +81,7 @@ public: | ||
| 81 | void save(void); | 81 | void save(void); |
| 82 | void publish(const std::string& name = ""); | 82 | void publish(const std::string& name = ""); |
| 83 | const GObservations& obs(void) const; | 83 | const GObservations& obs(void) const; |
| 84 | - GCTAEventCube cube(void) const; | 84 | + const GCTAEventCube& cube(void) const; |
| 85 | 85 | ||
| 86 | protected: | 86 | protected: |
| 87 | // Protected methods | 87 | // Protected methods |
| @@ -95,25 +95,28 @@ protected: | @@ -95,25 +95,28 @@ protected: | ||
| 95 | std::vector<bool> cube_layer_usage(const GEbounds& ebounds) const; | 95 | std::vector<bool> cube_layer_usage(const GEbounds& ebounds) const; |
| 96 | 96 | ||
| 97 | // User parameters | 97 | // User parameters |
| 98 | - GFilename m_outcube; //!< Output counts map file name | ||
| 99 | - bool m_usepnt; //!< Use pointing instead of xref/yref parameters | ||
| 100 | - bool m_publish; //!< Publish counts cube? | ||
| 101 | - GChatter m_chatter; //!< Chattiness | 98 | + GFilename m_outcube; //!< Output counts map file name |
| 99 | + bool m_usepnt; //!< Use pointing instead of xref/yref parameters | ||
| 100 | + bool m_publish; //!< Publish counts cube? | ||
| 101 | + GChatter m_chatter; //!< Chattiness | ||
| 102 | 102 | ||
| 103 | // Protected members | 103 | // Protected members |
| 104 | - GObservations m_obs; //!< Observation container | ||
| 105 | - GSkyMap m_counts; //!< Event cube counts | ||
| 106 | - GSkyMap m_weights; //!< Event cube weights | ||
| 107 | - GEbounds m_ebounds; //!< Energy boundaries | ||
| 108 | - GGti m_gti; //!< Good time intervals | ||
| 109 | - double m_ontime; //!< Total ontime | ||
| 110 | - double m_livetime; //!< Total livetime | 104 | + GObservations m_obs; //!< Observation container |
| 105 | + GSkyMap m_counts; //!< Event cube counts | ||
| 106 | + GSkyMap m_weights; //!< Event cube weights | ||
| 107 | + GEbounds m_ebounds; //!< Energy boundaries | ||
| 108 | + GGti m_gti; //!< Good time intervals | ||
| 109 | + GCTAEventCube m_cube; //!< Events cube (for cube() method) | ||
| 110 | + double m_ontime; //!< Total ontime | ||
| 111 | + double m_livetime; //!< Total livetime | ||
| 111 | }; | 112 | }; |
| 112 | 113 | ||
| 113 | /***********************************************************************//** | 114 | /***********************************************************************//** |
| 114 | * @brief Return observation container | 115 | * @brief Return observation container |
| 115 | * | 116 | * |
| 116 | * @return Reference to observation container | 117 | * @return Reference to observation container |
| 118 | + * | ||
| 119 | + * Returns a reference to an observation container. | ||
| 117 | ***************************************************************************/ | 120 | ***************************************************************************/ |
| 118 | inline | 121 | inline |
| 119 | const GObservations& ctbin::obs(void) const | 122 | const GObservations& ctbin::obs(void) const |
| @@ -125,18 +128,14 @@ const GObservations& ctbin::obs(void) const | @@ -125,18 +128,14 @@ const GObservations& ctbin::obs(void) const | ||
| 125 | /***********************************************************************//** | 128 | /***********************************************************************//** |
| 126 | * @brief Return event cube | 129 | * @brief Return event cube |
| 127 | * | 130 | * |
| 128 | - * @return Event cube | 131 | + * @return Reference to event cube |
| 129 | * | 132 | * |
| 130 | - * Returns a event cube built from the ctbin member information. | 133 | + * Returns a reference to the event cube. |
| 131 | ***************************************************************************/ | 134 | ***************************************************************************/ |
| 132 | inline | 135 | inline |
| 133 | -GCTAEventCube ctbin::cube(void) const | 136 | +const GCTAEventCube& ctbin::cube(void) const |
| 134 | { | 137 | { |
| 135 | - // Build event cube | ||
| 136 | - GCTAEventCube cube(m_counts, m_weights, m_ebounds, m_gti); | ||
| 137 | - | ||
| 138 | - // Return cube | ||
| 139 | - return cube; | 138 | + return m_cube; |
| 140 | } | 139 | } |
| 141 | 140 | ||
| 142 | #endif /* CTBIN_HPP */ | 141 | #endif /* CTBIN_HPP */ |