Commit fb6981b726c5f9212847a66bfc991ba399d6f81f

Authored by Jürgen Knödlseder
1 parent 83ee3aec

Remove code duplication in csresmap and csresspec

cscripts/csresmap.py
... ... @@ -2,7 +2,7 @@
2 2 # ==========================================================================
3 3 # Generates a residual map.
4 4 #
5   -# Copyright (C) 2014-2018 Michael Mayer
  5 +# Copyright (C) 2014-2019 Michael Mayer
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
... ... @@ -165,29 +165,8 @@ class csresmap(ctools.csobservation):
165 165 # Write header
166 166 self._log_header1(gammalib.TERSE, 'Generate binned map (ctbin)')
167 167  
168   - # Create countsmap
169   - binning = ctools.ctbin(self.obs())
170   - binning['xref'] = self['xref'].real()
171   - binning['yref'] = self['yref'].real()
172   - binning['proj'] = self['proj'].string()
173   - binning['coordsys'] = self['coordsys'].string()
174   - binning['ebinalg'] = self['ebinalg'].string()
175   - binning['nxpix'] = self['nxpix'].integer()
176   - binning['nypix'] = self['nypix'].integer()
177   - binning['binsz'] = self['binsz'].real()
178   - if self['ebinalg'].string() == 'FILE':
179   - binning['ebinfile'] = self['ebinfile'].filename().file()
180   - else:
181   - binning['enumbins'] = self['enumbins'].integer()
182   - binning['emin'] = self['emin'].real()
183   - binning['emax'] = self['emax'].real()
184   - binning['chatter'] = self['chatter'].integer()
185   - binning['clobber'] = self['clobber'].boolean()
186   - binning['debug'] = self['debug'].boolean()
187   - binning.run()
188   -
189   - # Retrieve counts cube
190   - cta_counts_cube = binning.cube()
  168 + # Create counts cube
  169 + cta_counts_cube = obsutils.create_counts_cube(self, self.obs())
191 170  
192 171 # Assign GCTAEventCube to skymap
193 172 countmap = cta_counts_cube.counts()
... ...
cscripts/csresspec.py
... ... @@ -18,10 +18,10 @@
18 18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 19 #
20 20 # ==========================================================================
  21 +import sys
21 22 import gammalib
22 23 import ctools
23 24 from cscripts import obsutils
24   -import sys
25 25  
26 26  
27 27 # =============== #
... ... @@ -672,35 +672,18 @@ class csresspec(ctools.csobservation):
672 672 # Log processing header
673 673 self._log_header1(gammalib.TERSE, 'Processing Observations')
674 674  
675   - #If observations are unbinned and we stack
  675 + # If observations are unbinned and we stack
676 676 if self._stack and self.obs()[0].classname() == 'GCTAObservation':
677 677  
  678 + # Log counts cube computation
678 679 msg = 'Computing count cube from multiple unbinned observations'
679 680 self._log_string(gammalib.NORMAL, msg)
680 681  
681   - # Build count cube
682   - binning = ctools.ctbin(self.obs())
683   - binning['xref'] = self['xref'].real()
684   - binning['yref'] = self['yref'].real()
685   - binning['proj'] = self['proj'].string()
686   - binning['coordsys'] = self['coordsys'].string()
687   - binning['ebinalg'] = self['ebinalg'].string()
688   - binning['nxpix'] = self['nxpix'].integer()
689   - binning['nypix'] = self['nypix'].integer()
690   - binning['binsz'] = self['binsz'].real()
691   - if self['ebinalg'].string() == 'FILE':
692   - binning['ebinfile'] = self['ebinfile'].filename().file()
693   - else:
694   - binning['enumbins'] = self['enumbins'].integer()
695   - binning['emin'] = self['emin'].real()
696   - binning['emax'] = self['emax'].real()
697   - binning['chatter'] = self['chatter'].integer()
698   - binning['clobber'] = self['clobber'].boolean()
699   - binning['debug'] = self['debug'].boolean()
700   - binning.run()
701   -
702   - #compute residuals using cube
703   - table = self._residuals_3D(self.obs(),'',binning.cube())
  682 + # Create counts cube
  683 + cta_counts_cube = obsutils.create_counts_cube(self, self.obs())
  684 +
  685 + # Compute residuals using cube
  686 + table = self._residuals_3D(self.obs(), '', cta_counts_cube)
704 687  
705 688 # Append results table to output file
706 689 self._fits.append(table)
... ...
cscripts/obsutils.py
... ... @@ -937,3 +937,54 @@ def residuals(cls, counts, model):
937 937  
938 938 # Return
939 939 return residuals
  940 +
  941 +
  942 +# ================= #
  943 +# Create counts map #
  944 +# ================= #
  945 +def create_counts_cube(cls, obs):
  946 + """
  947 + Create counts cube from observations
  948 +
  949 + Parameters
  950 + ----------
  951 + cls : `~ctools.cscript`
  952 + cscript class
  953 + obs : `~gammalib.GObservations`
  954 + Observation container
  955 +
  956 + Returns
  957 + -------
  958 + cntcube : `~gammalib.GCTAEventCube`
  959 + Counts cube
  960 + """
  961 + # Initialise ctbin
  962 + ctbin = ctools.ctbin(obs)
  963 +
  964 + # Set parameters
  965 + ctbin['xref'] = cls['xref'].real()
  966 + ctbin['yref'] = cls['yref'].real()
  967 + ctbin['proj'] = cls['proj'].string()
  968 + ctbin['coordsys'] = cls['coordsys'].string()
  969 + ctbin['ebinalg'] = cls['ebinalg'].string()
  970 + ctbin['nxpix'] = cls['nxpix'].integer()
  971 + ctbin['nypix'] = cls['nypix'].integer()
  972 + ctbin['binsz'] = cls['binsz'].real()
  973 + if cls['ebinalg'].string() == 'FILE':
  974 + ctbin['ebinfile'] = cls['ebinfile'].filename().file()
  975 + else:
  976 + ctbin['enumbins'] = cls['enumbins'].integer()
  977 + ctbin['emin'] = cls['emin'].real()
  978 + ctbin['emax'] = cls['emax'].real()
  979 + ctbin['chatter'] = cls['chatter'].integer()
  980 + ctbin['clobber'] = cls['clobber'].boolean()
  981 + ctbin['debug'] = cls['debug'].boolean()
  982 +
  983 + # Run ctbin
  984 + ctbin.run()
  985 +
  986 + # Retrieve counts cube
  987 + cntcube = ctbin.cube().copy()
  988 +
  989 + # Return counts cube
  990 + return cntcube
... ...