Commit b422a22792dbf0b7a94360b26bacf6a4ca6ba810

Authored by Jürgen Knödlseder
1 parent eecf0c9d

Enhance ctfindvar unit test

Showing 1 changed file with 80 additions and 25 deletions
test/test_ctfindvar.py
@@ -18,6 +18,7 @@ @@ -18,6 +18,7 @@
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. 18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 # 19 #
20 # ========================================================================== 20 # ==========================================================================
  21 +import os
21 import gammalib 22 import gammalib
22 import ctools 23 import ctools
23 from testing import test 24 from testing import test
@@ -85,6 +86,9 @@ class Test(test): @@ -85,6 +86,9 @@ class Test(test):
85 self.test_value(self._execute(cmd), 0, 86 self.test_value(self._execute(cmd), 0,
86 'Check successful execution from command line') 87 'Check successful execution from command line')
87 88
  89 + # Check result
  90 + self._check_result_files('ctfindvar_cmd1.fits', 'ctfindvar_cmd1.xml', 0)
  91 +
88 # Setup ctfindvar command 92 # Setup ctfindvar command
89 cmd = ctfindvar+' inobs="event_file_that_does_not_exist.fits"'+ \ 93 cmd = ctfindvar+' inobs="event_file_that_does_not_exist.fits"'+ \
90 ' outmap="ctfindvar_cmd2.fits"'+ \ 94 ' outmap="ctfindvar_cmd2.fits"'+ \
@@ -113,11 +117,24 @@ class Test(test): @@ -113,11 +117,24 @@ class Test(test):
113 """ 117 """
114 Test ctfindvar from Python 118 Test ctfindvar from Python
115 """ 119 """
116 -  
117 # Allocate ctfindvar 120 # Allocate ctfindvar
118 ctfindvar = ctools.ctfindvar() 121 ctfindvar = ctools.ctfindvar()
119 122
120 - # Setup ctfindvar 123 + # Check that saving does not nothing
  124 + ctfindvar['logfile'] = 'ctfindvar_py0.log'
  125 + ctfindvar['outmap'] = 'ctfindvar_py0.fits'
  126 + ctfindvar['outmodel'] = 'ctfindvar_py0.xml'
  127 + ctfindvar.logFileOpen()
  128 + ctfindvar.save()
  129 + self.test_assert(not os.path.isfile('ctfindvar_py0.fits'),
  130 + 'Check that no output map has been created')
  131 + self.test_assert(not os.path.isfile('ctfindvar_py0.xml'),
  132 + 'Check that no output model definition XML file has been created')
  133 +
  134 + # Check that clearing does not lead to an exception or segfault
  135 + ctfindvar.clear()
  136 +
  137 + # Now set ctfindvar parameters
121 ctfindvar['inobs'] = self._events 138 ctfindvar['inobs'] = self._events
122 ctfindvar['tmin'] = 'NONE' 139 ctfindvar['tmin'] = 'NONE'
123 ctfindvar['tmax'] = 'NONE' 140 ctfindvar['tmax'] = 'NONE'
@@ -135,30 +152,25 @@ class Test(test): @@ -135,30 +152,25 @@ class Test(test):
135 ctfindvar['ysrc'] = 22.51 152 ctfindvar['ysrc'] = 22.51
136 ctfindvar['caldb'] = 'prod2' 153 ctfindvar['caldb'] = 'prod2'
137 ctfindvar['irf'] = 'South_0.5h' 154 ctfindvar['irf'] = 'South_0.5h'
138 - ctfindvar['outmap'] = 'ctfindvar_py0.fits'  
139 - ctfindvar['outmodel'] = 'ctfindvar_py0.xml'  
140 - ctfindvar['logfile'] = 'ctfindvar_py0.log'  
141 - ctfindvar['chatter'] = 1 155 + ctfindvar['outmap'] = 'ctfindvar_py1.fits'
  156 + ctfindvar['outmodel'] = 'ctfindvar_py1.xml'
  157 + ctfindvar['logfile'] = 'ctfindvar_py1.log'
  158 + ctfindvar['chatter'] = 2
142 159
143 - # Run ctfindvar tool 160 + # Execute ctfindvar tool
144 ctfindvar.logFileOpen() 161 ctfindvar.logFileOpen()
145 - ctfindvar.run() 162 + ctfindvar.execute()
146 163
147 - # Check that saving does not nothing  
148 - ctfindvar['outmap'] = 'ctfindvar_py1.fits'  
149 - ctfindvar['outmodel'] = 'ctfindvar_py1.xml'  
150 - ctfindvar['logfile'] = 'ctfindvar_py1.log'  
151 - ctfindvar.logFileOpen()  
152 - ctfindvar.save()  
153 -  
154 # Check result 164 # Check result
155 - self._check_result_file('ctfindvar_py1.fits') 165 + self._check_result_files('ctfindvar_py1.fits', 'ctfindvar_py1.xml', 0)
156 166
157 # Copy ctfindvar tool 167 # Copy ctfindvar tool
158 cpy_tool = ctfindvar.copy() 168 cpy_tool = ctfindvar.copy()
159 169
160 - # Run copy of ctfindvar tool again with lower threshold 170 + # Execute copy of ctfindvar tool again with lower threshold and now
  171 + # with output cube file
161 cpy_tool['threshold'] = 1.0 172 cpy_tool['threshold'] = 1.0
  173 + cpy_tool['outcube'] = 'ctfindvar_py2_cube.fits'
162 cpy_tool['outmap'] = 'ctfindvar_py2.fits' 174 cpy_tool['outmap'] = 'ctfindvar_py2.fits'
163 cpy_tool['outmodel'] = 'ctfindvar_py2.xml' 175 cpy_tool['outmodel'] = 'ctfindvar_py2.xml'
164 cpy_tool['logfile'] = 'ctfindvar_py2.log' 176 cpy_tool['logfile'] = 'ctfindvar_py2.log'
@@ -167,27 +179,70 @@ class Test(test): @@ -167,27 +179,70 @@ class Test(test):
167 cpy_tool.execute() 179 cpy_tool.execute()
168 180
169 # Check result 181 # Check result
170 - self._check_result_file('ctfindvar_py2.fits') 182 + self._check_result_files('NONE', 'ctfindvar_py2.xml', 1)
  183 + fits = gammalib.GFits('ctfindvar_py2_cube.fits')
  184 + self.test_value(fits.size(), 1, 'Check for 1 extension in cube file')
171 185
172 - # Check that clearing does not lead to an exception or segfault 186 + # Now run with an input model and time window, a smoothing kernel
  187 + # and set the number of threads
173 ctfindvar.clear() 188 ctfindvar.clear()
  189 + ctfindvar['inobs'] = self._events
  190 + ctfindvar['inmodel'] = self._model
  191 + ctfindvar['tmin'] = '2020-01-01T00:01:10'
  192 + ctfindvar['tmax'] = '2020-01-01T00:03:40'
  193 + ctfindvar['tinterval'] = 10
  194 + ctfindvar['smooth_kernel'] = 'DISK'
  195 + ctfindvar['smooth_rad'] = 0.05
  196 + ctfindvar['emin'] = 0.2
  197 + ctfindvar['emax'] = 1.1
  198 + ctfindvar['nxpix'] = 200
  199 + ctfindvar['nypix'] = 200
  200 + ctfindvar['binsz'] = 0.05
  201 + ctfindvar['coordsys'] = 'CEL'
  202 + ctfindvar['proj'] = 'CAR'
  203 + ctfindvar['xref'] = 83.63
  204 + ctfindvar['yref'] = 22.51
  205 + ctfindvar['caldb'] = 'prod2'
  206 + ctfindvar['irf'] = 'South_0.5h'
  207 + ctfindvar['outmap'] = 'ctfindvar_py3.fits'
  208 + ctfindvar['outmodel'] = 'ctfindvar_py3.xml'
  209 + ctfindvar['logfile'] = 'ctfindvar_py3.log'
  210 + ctfindvar['chatter'] = 4
  211 + ctfindvar['nthreads'] = 2
  212 +
  213 + # Execute ctfindvar tool
  214 + ctfindvar.logFileOpen()
  215 + ctfindvar.execute()
  216 +
  217 + # Check result
  218 + self._check_result_files('ctfindvar_py3.fits', 'ctfindvar_py3.xml', 0)
174 219
175 # Return 220 # Return
176 return 221 return
177 222
178 # Check ctfindvar result 223 # Check ctfindvar result
179 - def _check_result_file(self, filename): 224 + def _check_result_files(self, fitsfile, xmlfile, nmodels):
180 """ 225 """
181 Check ctfindvar result 226 Check ctfindvar result
182 227
183 Parameters 228 Parameters
184 ---------- 229 ----------
185 - filename : str  
186 - Output file 230 + fitsfile : str
  231 + FITS file name
  232 + xmlfile : str
  233 + Model definition XML file name
  234 + nmodels : int
  235 + Expected number of models
187 """ 236 """
188 - # Read variability file  
189 - fits = gammalib.GFits(filename)  
190 - self.test_value(fits.size(), 3, 'Check for 3 extensions in output file') 237 + # Read variability FITS file
  238 + if fitsfile is not 'NONE':
  239 + fits = gammalib.GFits(fitsfile)
  240 + self.test_value(fits.size(), 3, 'Check for 3 extensions in output file')
  241 +
  242 + # Read model definition XML file
  243 + models = gammalib.GModels(xmlfile)
  244 + self.test_value(models.size(), nmodels,
  245 + 'Check for %d models in model definition XML file' % nmodels)
191 246
192 # Return 247 # Return
193 return 248 return