Commit cb7d7d75ed8d7b02b8e40cb6e26cfe647592175c

Authored by Jürgen Knödlseder
1 parent 4300668e

Add make_spectrum.py example script to unit tests

examples/make_spectrum.py
1 1 #! /usr/bin/env python
2 2 # ==========================================================================
3   -# This script shows how to make a spectrum using obsutils.
  3 +# Makes spectrum and optionally plot it
4 4 #
5 5 # Copyright (C) 2014-2016 Juergen Knoedlseder
6 6 #
... ... @@ -18,7 +18,7 @@
18 18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 19 #
20 20 # ==========================================================================
21   -#import gammalib
  21 +import sys
22 22 import ctools
23 23 import cscripts
24 24 try:
... ... @@ -33,12 +33,17 @@ except:
33 33 # =============== #
34 34 def make_spectrum():
35 35 """
36   - Make a spectrum.
  36 + Simulate events and generate a source spectrum
  37 +
  38 + Returns
  39 + -------
  40 + spectrum : `~gammalib.GFits`
  41 + Spectrum FITS file
37 42 """
38 43 # Set script parameters
39   - model_name = "${CTOOLS}/share/models/crab.xml"
40   - caldb = "prod2"
41   - irf = "South_50h"
  44 + model_name = 'data/crab.xml'
  45 + caldb = 'prod2'
  46 + irf = 'South_0.5h'
42 47 ra = 83.63
43 48 dec = 22.01
44 49 rad_sim = 3.0
... ... @@ -50,36 +55,32 @@ def make_spectrum():
50 55  
51 56 # Simulate events
52 57 sim = ctools.ctobssim()
53   - sim["inmodel"] = model_name
54   - sim["caldb"] = caldb
55   - sim["irf"] = irf
56   - sim["ra"] = ra
57   - sim["dec"] = dec
58   - sim["rad"] = rad_sim
59   - sim["tmin"] = tstart
60   - sim["tmax"] = tstop
61   - sim["emin"] = emin
62   - sim["emax"] = emax
  58 + sim['inmodel'] = model_name
  59 + sim['caldb'] = caldb
  60 + sim['irf'] = irf
  61 + sim['ra'] = ra
  62 + sim['dec'] = dec
  63 + sim['rad'] = rad_sim
  64 + sim['tmin'] = tstart
  65 + sim['tmax'] = tstop
  66 + sim['emin'] = emin
  67 + sim['emax'] = emax
63 68 sim.run()
64 69  
65   - # Generate an energy binning
66   - #e_min = gammalib.GEnergy(emin, "TeV")
67   - #e_max = gammalib.GEnergy(emax, "TeV")
68   - #ebounds = gammalib.GEbounds(10, e_min, e_max)
69   -
70   - # Setup csspec run
  70 + # Create spectrum
71 71 spec = cscripts.csspec(sim.obs())
72   - spec["srcname"] = "Crab"
73   - spec["outfile"] = "spectrum.fits"
74   - spec["expcube"] = "NONE"
75   - spec["psfcube"] = "NONE"
76   - spec["bkgcube"] = "NONE"
77   - spec["edisp"] = False
78   - spec["emin"] = emin
79   - spec["emax"] = emax
80   - spec["enumbins"] = enumbins
81   - spec["binned"] = False
  72 + spec['srcname'] = 'Crab'
  73 + spec['outfile'] = 'example_spectrum.fits'
  74 + spec['expcube'] = 'NONE'
  75 + spec['psfcube'] = 'NONE'
  76 + spec['bkgcube'] = 'NONE'
  77 + spec['edisp'] = False
  78 + spec['emin'] = emin
  79 + spec['emax'] = emax
  80 + spec['enumbins'] = enumbins
  81 + spec['ebinalg'] = 'LOG'
82 82 spec.run()
  83 + spec.save()
83 84  
84 85 # Get copy of spectrum
85 86 spectrum = spec.spectrum().copy()
... ... @@ -91,19 +92,26 @@ def make_spectrum():
91 92 # ============= #
92 93 # Plot spectrum #
93 94 # ============= #
94   -def plot_spectrum(spectrum):
  95 +def plot_spectrum(spectrum, file=False):
95 96 """
96 97 Plot spectrum.
  98 +
  99 + Parameters
  100 + ----------
  101 + spectrum : `~gammalib.GFits`
  102 + Spectrum FITS file
  103 + type : str, optional
  104 + Plot type (blank means display on screen)
97 105 """
98   - # Read spectrum file
  106 + # Extract columns from spectrum file
99 107 table = spectrum.table(1)
100   - c_energy = table["Energy"]
101   - c_ed = table["ed_Energy"]
102   - c_eu = table["eu_Energy"]
103   - c_flux = table["Flux"]
104   - c_eflux = table["e_Flux"]
105   - c_ts = table["TS"]
106   - c_upper = table["UpperLimit"]
  108 + c_energy = table['Energy']
  109 + c_ed = table['ed_Energy']
  110 + c_eu = table['eu_Energy']
  111 + c_flux = table['Flux']
  112 + c_eflux = table['e_Flux']
  113 + c_ts = table['TS']
  114 + c_upper = table['UpperLimit']
107 115  
108 116 # Initialise arrays to be filled
109 117 energies = []
... ... @@ -115,7 +123,7 @@ def plot_spectrum(spectrum):
115 123 ul_ed_engs = []
116 124 ul_eu_engs = []
117 125 ul_flux = []
118   -
  126 +
119 127 # Loop over rows of the file
120 128 nrows = table.nrows()
121 129 for row in range(nrows):
... ... @@ -146,31 +154,43 @@ def plot_spectrum(spectrum):
146 154  
147 155 # Create figure
148 156 plt.figure()
149   - plt.title("Crab spectrum")
  157 + plt.title('Crab spectrum')
150 158  
151 159 # Plot the spectrum
152 160 plt.loglog()
153 161 plt.grid()
154   - plt.errorbar(energies, flux, yerr=e_flux, xerr=[ed_engs, eu_engs], fmt='ro')
155   - plt.errorbar(ul_energies, ul_flux, xerr=[ul_ed_engs, ul_eu_engs], yerr=1.0e-11, uplims=True, fmt='ro')
156   - plt.xlabel("Energy (TeV)")
157   - plt.ylabel(r"E$^{2}$dN/dE (erg cm$^{-2}$ s$^{-1}$)")
158   -
159   - # Show spectrum
160   - plt.show()
  162 + plt.errorbar(energies, flux, yerr=e_flux, xerr=[ed_engs, eu_engs],
  163 + fmt='ro')
  164 + plt.errorbar(ul_energies, ul_flux, xerr=[ul_ed_engs, ul_eu_engs],
  165 + yerr=1.0e-11, uplims=True, fmt='ro')
  166 + plt.xlabel('Energy (TeV)')
  167 + plt.ylabel(r'E$^{2}$dN/dE (erg cm$^{-2}$ s$^{-1}$)')
  168 +
  169 + # Show spectrum or save it into file
  170 + if file:
  171 + plt.savefig('example_spectrum.eps')
  172 + else:
  173 + plt.show()
161 174  
162 175 # Return
163 176 return
164 177  
165 178  
166   -#==========================#
  179 +# ======================== #
167 180 # Main routine entry point #
168   -#==========================#
  181 +# ======================== #
169 182 if __name__ == '__main__':
170 183  
  184 + # Initialise option
  185 + file = False
  186 +
  187 + # Get any command line arguments
  188 + if (len(sys.argv) > 1):
  189 + file = True
  190 +
171 191 # Generate spectrum
172 192 spectrum = make_spectrum()
173 193  
174   - # Plot spectrum
  194 + # If matplotlib is installed then plot spectrum
175 195 if has_matplotlib:
176   - plot_spectrum(spectrum)
  196 + plot_spectrum(spectrum, file=file)
... ...
test/test_examples.py
... ... @@ -71,6 +71,7 @@ class Test(gammalib.GPythonTestSuite):
71 71 # Execute Python script, make sure we catch any exception
72 72 try:
73 73 rc = os.system(cmd+' > example_'+logname+'.log 2>&1')
  74 + #rc = os.system(cmd)
74 75 except:
75 76 pass
76 77  
... ... @@ -91,6 +92,7 @@ class Test(gammalib.GPythonTestSuite):
91 92 # Append tests
92 93 self.append(self.test_generate_prod3_irfs, 'Test generate_prod3_irfs')
93 94 self.append(self.test_make_pointings, 'Test make_pointings')
  95 + self.append(self.test_make_spectrum, 'Test make_spectrum')
94 96 self.append(self.test_pipeline_binned_disk, 'Test pipeline_binned_disk')
95 97 self.append(self.test_pipeline_binned_mem, 'Test pipeline_binned_mem')
96 98 self.append(self.test_pipeline_stacked_disk, 'Test pipeline_stacked_disk')
... ... @@ -110,7 +112,7 @@ class Test(gammalib.GPythonTestSuite):
110 112 script = 'make_pointings'
111 113  
112 114 # Execute script
113   - self._execute_python(script, args='-h', log='make_pointings_help')
  115 + self._execute_python(script, args='-h', log='make_pointings_h')
114 116 self._execute_python(script, args='gps', log='make_pointings_gps')
115 117 self._execute_python(script, args='gps3', log='make_pointings_gps3')
116 118 self._execute_python(script, args='extgal', log='make_pointings_extgal')
... ... @@ -122,6 +124,19 @@ class Test(gammalib.GPythonTestSuite):
122 124 # Return
123 125 return
124 126  
  127 + # Test make_spectrum
  128 + def test_make_spectrum(self):
  129 + """
  130 + Test make_spectrum
  131 + """
  132 + # Execute script
  133 + self._execute_python('make_spectrum', args='eps')
  134 +
  135 + #TODO: Do any testing
  136 +
  137 + # Return
  138 + return
  139 +
125 140 # Test generate_prod3_irfs
126 141 def test_generate_prod3_irfs(self):
127 142 """
... ...