Commit 0c9f1f2aa26b43ac62af11b15d93d81a6675513c
Merge branch 'integration' into devel
Showing
23 changed files
with
376 additions
and
113 deletions
cscripts/Makefile.am
| @@ -27,16 +27,18 @@ linkscripts = cspull cssens cstsdist cscaldb csresmap \ | @@ -27,16 +27,18 @@ linkscripts = cspull cssens cstsdist cscaldb csresmap \ | ||
| 27 | testscripts = tests/__init__.py \ | 27 | testscripts = tests/__init__.py \ |
| 28 | ../test/test_python_cscripts.py \ | 28 | ../test/test_python_cscripts.py \ |
| 29 | ../test/test_cscaldb.py \ | 29 | ../test/test_cscaldb.py \ |
| 30 | + ../test/test_csobs2caldb.py \ | ||
| 30 | ../test/test_cslightcrv.py | 31 | ../test/test_cslightcrv.py |
| 31 | 32 | ||
| 32 | # Test data to be distributed in $(pyexecdir)/cscripts/tests/data | 33 | # Test data to be distributed in $(pyexecdir)/cscripts/tests/data |
| 33 | testdata = ../test/data/crab.xml \ | 34 | testdata = ../test/data/crab.xml \ |
| 35 | + ../test/data/obs_unbinned.xml \ | ||
| 34 | ../test/data/crab_events.fits.gz \ | 36 | ../test/data/crab_events.fits.gz \ |
| 35 | ../test/data/crab_cntmap.fits.gz \ | 37 | ../test/data/crab_cntmap.fits.gz \ |
| 36 | ../test/data/exclusion.reg | 38 | ../test/data/exclusion.reg |
| 37 | 39 | ||
| 38 | # Test IRFs to be distributed in $(pyexecdir)/cscripts/tests/irf | 40 | # Test IRFs to be distributed in $(pyexecdir)/cscripts/tests/irf |
| 39 | -#testirf = | 41 | +testirf = ../test/irf/irf_file.fits.gz |
| 40 | 42 | ||
| 41 | # Distribute scripts and parfiles | 43 | # Distribute scripts and parfiles |
| 42 | EXTRA_DIST = $(binscripts) $(pythonscripts) | 44 | EXTRA_DIST = $(binscripts) $(pythonscripts) |
| @@ -50,8 +52,8 @@ testscriptsdir = $(pyexecdir)/cscripts/tests | @@ -50,8 +52,8 @@ testscriptsdir = $(pyexecdir)/cscripts/tests | ||
| 50 | testscripts_DATA = $(testscripts) | 52 | testscripts_DATA = $(testscripts) |
| 51 | testdatadir = $(pyexecdir)/cscripts/tests/data | 53 | testdatadir = $(pyexecdir)/cscripts/tests/data |
| 52 | testdata_DATA = $(testdata) | 54 | testdata_DATA = $(testdata) |
| 53 | -#testirfdir = $(pyexecdir)/cscripts/tests/irf | ||
| 54 | -#testirf_DATA = $(testirf) | 55 | +testirfdir = $(pyexecdir)/cscripts/tests/irf |
| 56 | +testirf_DATA = $(testirf) | ||
| 55 | 57 | ||
| 56 | # Add hook rule to create symbolic links for cscripts | 58 | # Add hook rule to create symbolic links for cscripts |
| 57 | install-data-hook: | 59 | install-data-hook: |
cscripts/cscaldb.py
| @@ -218,7 +218,7 @@ class cscaldb(ctools.cscript): | @@ -218,7 +218,7 @@ class cscaldb(ctools.cscript): | ||
| 218 | Execute the script. | 218 | Execute the script. |
| 219 | """ | 219 | """ |
| 220 | # Open logfile | 220 | # Open logfile |
| 221 | - self._logFileOpen() | 221 | + self.logFileOpen() |
| 222 | 222 | ||
| 223 | # Run the script | 223 | # Run the script |
| 224 | self.run() | 224 | self.run() |
cscripts/csfindobs.py
| @@ -236,7 +236,7 @@ class csfindobs(ctools.cscript): | @@ -236,7 +236,7 @@ class csfindobs(ctools.cscript): | ||
| 236 | Execute the script. | 236 | Execute the script. |
| 237 | """ | 237 | """ |
| 238 | # Open logfile | 238 | # Open logfile |
| 239 | - self._logFileOpen() | 239 | + self.logFileOpen() |
| 240 | 240 | ||
| 241 | # Run the script | 241 | # Run the script |
| 242 | self.run() | 242 | self.run() |
cscripts/csiactcopy.py
| @@ -686,7 +686,7 @@ class csiactcopy(ctools.cscript): | @@ -686,7 +686,7 @@ class csiactcopy(ctools.cscript): | ||
| 686 | Execute the script. | 686 | Execute the script. |
| 687 | """ | 687 | """ |
| 688 | # Open logfile | 688 | # Open logfile |
| 689 | - self._logFileOpen() | 689 | + self.logFileOpen() |
| 690 | 690 | ||
| 691 | # Run the script | 691 | # Run the script |
| 692 | self.run() | 692 | self.run() |
cscripts/csiactdata.py
| @@ -178,7 +178,7 @@ class csiactdata(ctools.cscript): | @@ -178,7 +178,7 @@ class csiactdata(ctools.cscript): | ||
| 178 | Execute the script. | 178 | Execute the script. |
| 179 | """ | 179 | """ |
| 180 | # Open logfile | 180 | # Open logfile |
| 181 | - self._logFileOpen() | 181 | + self.logFileOpen() |
| 182 | 182 | ||
| 183 | # Run the script | 183 | # Run the script |
| 184 | self.run() | 184 | self.run() |
cscripts/csiactobs.py
| @@ -577,7 +577,7 @@ class csiactobs(ctools.cscript): | @@ -577,7 +577,7 @@ class csiactobs(ctools.cscript): | ||
| 577 | Execute the script. | 577 | Execute the script. |
| 578 | """ | 578 | """ |
| 579 | # Open logfile | 579 | # Open logfile |
| 580 | - self._logFileOpen() | 580 | + self.logFileOpen() |
| 581 | 581 | ||
| 582 | # Run the script | 582 | # Run the script |
| 583 | self.run() | 583 | self.run() |
cscripts/cslightcrv.py
| @@ -707,7 +707,7 @@ class cslightcrv(ctools.cscript): | @@ -707,7 +707,7 @@ class cslightcrv(ctools.cscript): | ||
| 707 | Execute the script. | 707 | Execute the script. |
| 708 | """ | 708 | """ |
| 709 | # Open logfile | 709 | # Open logfile |
| 710 | - self._logFileOpen() | 710 | + self.logFileOpen() |
| 711 | 711 | ||
| 712 | # Read ahead output parameters | 712 | # Read ahead output parameters |
| 713 | self._read_ahead(True) | 713 | self._read_ahead(True) |
cscripts/csmodelinfo.py
| @@ -485,7 +485,7 @@ class csmodelinfo(ctools.cscript): | @@ -485,7 +485,7 @@ class csmodelinfo(ctools.cscript): | ||
| 485 | Execute the script. | 485 | Execute the script. |
| 486 | """ | 486 | """ |
| 487 | # Open logfile | 487 | # Open logfile |
| 488 | - self._logFileOpen() | 488 | + self.logFileOpen() |
| 489 | 489 | ||
| 490 | # Read ahead output parameters | 490 | # Read ahead output parameters |
| 491 | self._read_ahead(True) | 491 | self._read_ahead(True) |
cscripts/csmodelmerge.py
| @@ -180,7 +180,7 @@ class csmodelmerge(ctools.cscript): | @@ -180,7 +180,7 @@ class csmodelmerge(ctools.cscript): | ||
| 180 | Execute the script. | 180 | Execute the script. |
| 181 | """ | 181 | """ |
| 182 | # Open logfile | 182 | # Open logfile |
| 183 | - self._logFileOpen() | 183 | + self.logFileOpen() |
| 184 | 184 | ||
| 185 | # Read ahead output parameters | 185 | # Read ahead output parameters |
| 186 | self._read_ahead(True) | 186 | self._read_ahead(True) |
cscripts/csobs2caldb.par
| @@ -15,11 +15,13 @@ | @@ -15,11 +15,13 @@ | ||
| 15 | # # | 15 | # # |
| 16 | ############################################################################# | 16 | ############################################################################# |
| 17 | # | 17 | # |
| 18 | -# General parameters | ||
| 19 | -#=================== | 18 | +# Input and output parameters |
| 19 | +#============================ | ||
| 20 | inobs, f, a, obs.xml,,, "Observation definition XML file" | 20 | inobs, f, a, obs.xml,,, "Observation definition XML file" |
| 21 | -rspname, s, a, NONE,,, "Response output name (e.g. Zenith50)" | ||
| 22 | -outirfs, f, h, irf_file.fits,,, "Output IRF file name" | 21 | +caldb, s, a, cta,,, "Calibration database" |
| 22 | +irf, s, a, Standard,,, "Instrument response function (e.g. Standard)" | ||
| 23 | +outfile, f, h, irf_file.fits,,, "Output IRF file name" | ||
| 24 | +rootdir, s, h, ,,, "Optional CALDB root directory" | ||
| 23 | index, i, h, 0,,, "Index of observation to be used from XML file" | 25 | index, i, h, 0,,, "Index of observation to be used from XML file" |
| 24 | 26 | ||
| 25 | # | 27 | # |
cscripts/csobs2caldb.py
| 1 | #!/usr/bin/env python | 1 | #!/usr/bin/env python |
| 2 | # ========================================================================== | 2 | # ========================================================================== |
| 3 | -# Generation of an caldb entry from general IACT observation. | 3 | +# Creates a calibration database entry for an IACT observation. |
| 4 | # | 4 | # |
| 5 | # Copyright (C) 2015-2016 Michael Mayer | 5 | # Copyright (C) 2015-2016 Michael Mayer |
| 6 | # | 6 | # |
| @@ -30,7 +30,7 @@ import datetime | @@ -30,7 +30,7 @@ import datetime | ||
| 30 | # ================= # | 30 | # ================= # |
| 31 | class csobs2caldb(ctools.cscript): | 31 | class csobs2caldb(ctools.cscript): |
| 32 | """ | 32 | """ |
| 33 | - Creates a calibration database entry for an observation. | 33 | + Creates a calibration database entry for an IACT observation. |
| 34 | 34 | ||
| 35 | The creation of a calibration database entry is useful for performing | 35 | The creation of a calibration database entry is useful for performing |
| 36 | simulations for current Imaging Air Cherenkov Telescopes (IACTs). | 36 | simulations for current Imaging Air Cherenkov Telescopes (IACTs). |
| @@ -50,17 +50,17 @@ class csobs2caldb(ctools.cscript): | @@ -50,17 +50,17 @@ class csobs2caldb(ctools.cscript): | ||
| 50 | self._version = "1.1.0" | 50 | self._version = "1.1.0" |
| 51 | 51 | ||
| 52 | # Initialise members | 52 | # Initialise members |
| 53 | - self._obs = [] # Observation container | ||
| 54 | - self._observation = None | ||
| 55 | - self._mission = "CTA" | ||
| 56 | - self._instrument = "" | ||
| 57 | - self._rspname = "" | ||
| 58 | - self._outfile = "" | 53 | + self._observation = gammalib.GCTAObservation() |
| 54 | + self._mission = "cta" | ||
| 55 | + self._caldb = "cta" | ||
| 56 | + self._outfile = gammalib.GFilename("irf_file.fits") | ||
| 59 | self._base_dir = "" | 57 | self._base_dir = "" |
| 60 | self._cal_dir = "" | 58 | self._cal_dir = "" |
| 59 | + | ||
| 60 | + # Initialise observation container from constructor arguments. | ||
| 61 | + self._obs, argv = self._set_input_obs(argv) | ||
| 61 | 62 | ||
| 62 | - # Initialise application by calling the appropriate class | ||
| 63 | - # constructor. | 63 | + # Initialise script by calling the appropriate class constructor. |
| 64 | self._init_cscript(argv) | 64 | self._init_cscript(argv) |
| 65 | 65 | ||
| 66 | # Return | 66 | # Return |
| @@ -70,36 +70,64 @@ class csobs2caldb(ctools.cscript): | @@ -70,36 +70,64 @@ class csobs2caldb(ctools.cscript): | ||
| 70 | # Private methods | 70 | # Private methods |
| 71 | def _get_parameters(self): | 71 | def _get_parameters(self): |
| 72 | """ | 72 | """ |
| 73 | - Get parameters from parfile and setup the observation. | 73 | + Get parameters from parfile. |
| 74 | + | ||
| 75 | + Raises: | ||
| 76 | + ValueError, IndexError, & RuntimeError. | ||
| 74 | """ | 77 | """ |
| 75 | - # Load observation container | ||
| 76 | - self._obs = gammalib.GObservations(self["inobs"].filename()) | 78 | + # Load observation container from "inobs" parameter in case that |
| 79 | + # the observation container is still empty. | ||
| 80 | + if self._obs.is_empty(): | ||
| 81 | + self._obs = gammalib.GObservations(self["inobs"].filename()) | ||
| 82 | + | ||
| 83 | + # Raise an exception if the observation container is empty | ||
| 84 | + if self._obs.is_empty(): | ||
| 85 | + raise ValueError('No or empty observation provided for ' | ||
| 86 | + 'parameter "inobs".') | ||
| 77 | 87 | ||
| 78 | - # Get index of observation to be used (0=default) | ||
| 79 | - inx = self["index"].integer() | 88 | + # Get index of observation to be used |
| 89 | + index = self["index"].integer() | ||
| 90 | + | ||
| 91 | + # Raise an exception if the index is not valid | ||
| 92 | + if index < 0 or index >= self._obs.size(): | ||
| 93 | + raise IndexError('Parameter "index=%d" outside the validity ' | ||
| 94 | + 'range [0,%d].' % (index, self._obs.size())) | ||
| 80 | 95 | ||
| 81 | # Get observation | 96 | # Get observation |
| 82 | - self._observation = self._obs[inx] | ||
| 83 | - | ||
| 84 | - # Get instrument name | ||
| 85 | - self._instrument = self._observation.instrument() | ||
| 86 | - | ||
| 87 | - # Get config and file name | ||
| 88 | - self._rspname = self["rspname"].string() | ||
| 89 | - self._outfile = self["outirfs"].filename() | ||
| 90 | - | ||
| 91 | - # Make sure we have a cta observation | 97 | + self._observation = self._obs[index] |
| 98 | + | ||
| 99 | + # Make sure we have a CTA observation | ||
| 92 | if not self._observation.classname() == "GCTAObservation": | 100 | if not self._observation.classname() == "GCTAObservation": |
| 93 | - raise RuntimeError("Input observation not of type "+ | ||
| 94 | - "\"GCTAObservation\".") | 101 | + raise RuntimeError('Input observation not of type ' |
| 102 | + '"GCTAObservation".') | ||
| 95 | 103 | ||
| 96 | - # Make sure we have an irf response | 104 | + # Make sure we have an IRF response associated with the CTA |
| 105 | + # observation | ||
| 97 | if not self._observation.response().classname() == "GCTAResponseIrf": | 106 | if not self._observation.response().classname() == "GCTAResponseIrf": |
| 98 | - raise RuntimeError("Response of input observation not of "+ | ||
| 99 | - "type \"GCTAResponseIrf\".") | 107 | + raise RuntimeError('Response of input observation not of ' |
| 108 | + 'type "GCTAResponseIrf".') | ||
| 109 | + | ||
| 110 | + # Get calibration database name. If the "caldb" parameter is "NONE" | ||
| 111 | + # or empty then use the instrument name from the observation as | ||
| 112 | + # calibration database name. | ||
| 113 | + self._caldb = self["caldb"].string() | ||
| 114 | + if (self._caldb == "NONE" or len(self._caldb) == 0): | ||
| 115 | + self._caldb = self._observation.instrument().lower() | ||
| 116 | + | ||
| 117 | + # Get instrument response function file name | ||
| 118 | + self._outfile = self["outfile"].filename() | ||
| 119 | + | ||
| 120 | + # Make sure that remaining user parameters are queried now. We | ||
| 121 | + # do not store the actual parameter values as we do not want | ||
| 122 | + # too many instance attributes with enhances the maintenance | ||
| 123 | + # costs. | ||
| 124 | + self["irf"].string() | ||
| 125 | + self["rootdir"].string() | ||
| 100 | 126 | ||
| 101 | - # Get other parameters | ||
| 102 | - self._clobber = self["clobber"].boolean() | 127 | + # Write input parameters and header into logger |
| 128 | + if self._logTerse(): | ||
| 129 | + self._log_parameters() | ||
| 130 | + self._log("\n") | ||
| 103 | 131 | ||
| 104 | # Return | 132 | # Return |
| 105 | return | 133 | return |
| @@ -122,10 +150,11 @@ class csobs2caldb(ctools.cscript): | @@ -122,10 +150,11 @@ class csobs2caldb(ctools.cscript): | ||
| 122 | fname_edisp = rsp.edisp().filename() | 150 | fname_edisp = rsp.edisp().filename() |
| 123 | fname_bkg = rsp.background().filename() | 151 | fname_bkg = rsp.background().filename() |
| 124 | 152 | ||
| 125 | - # Log filename instances | ||
| 126 | - if self._logTerse(): | 153 | + # Log filenames |
| 154 | + if self._logNormal(): | ||
| 155 | + self._log.header3("IRF input files") | ||
| 127 | self._log(gammalib.parformat("Effective area")) | 156 | self._log(gammalib.parformat("Effective area")) |
| 128 | - self._log(repr(fname_aeff)) | 157 | + self._log(fname_aeff.url()) |
| 129 | self._log("\n") | 158 | self._log("\n") |
| 130 | self._log(gammalib.parformat("Point spread function")) | 159 | self._log(gammalib.parformat("Point spread function")) |
| 131 | self._log(fname_psf.url()) | 160 | self._log(fname_psf.url()) |
| @@ -142,15 +171,35 @@ class csobs2caldb(ctools.cscript): | @@ -142,15 +171,35 @@ class csobs2caldb(ctools.cscript): | ||
| 142 | fits_psf = gammalib.GFits(fname_psf) | 171 | fits_psf = gammalib.GFits(fname_psf) |
| 143 | fits_edisp = gammalib.GFits(fname_edisp) | 172 | fits_edisp = gammalib.GFits(fname_edisp) |
| 144 | fits_bkg = gammalib.GFits(fname_bkg) | 173 | fits_bkg = gammalib.GFits(fname_bkg) |
| 174 | + | ||
| 175 | + # Get extension names | ||
| 176 | + ext_aeff = fname_aeff.extname("EFFECTIVE AREA") | ||
| 177 | + ext_psf = fname_psf.extname("POINT SPREAD FUNCTION") | ||
| 178 | + ext_edisp = fname_edisp.extname("ENERGY DISPERSION") | ||
| 179 | + ext_bkg = fname_bkg.extname("BACKGROUND") | ||
| 145 | 180 | ||
| 146 | # Create empty FITS file | 181 | # Create empty FITS file |
| 147 | fits = gammalib.GFits() | 182 | fits = gammalib.GFits() |
| 148 | 183 | ||
| 149 | # Append IRF component to FITS file | 184 | # Append IRF component to FITS file |
| 150 | - fits.append(fits_aeff[fname_aeff.extname("EFFECTIVE AREA")]) | ||
| 151 | - fits.append(fits_psf[fname_psf.extname("POINT SPREAD FUNCTION")]) | ||
| 152 | - fits.append(fits_edisp[fname_edisp.extname("ENERGY DISPERSION")]) | ||
| 153 | - fits.append(fits_bkg[fname_bkg.extname("BACKGROUND")]) | 185 | + fits.append(fits_aeff[ext_aeff]) |
| 186 | + fits.append(fits_psf[ext_psf]) | ||
| 187 | + fits.append(fits_edisp[ext_edisp]) | ||
| 188 | + fits.append(fits_bkg[ext_bkg]) | ||
| 189 | + | ||
| 190 | + # Log resulting FITS file | ||
| 191 | + if self._logNormal(): | ||
| 192 | + self._log(str(fits)) | ||
| 193 | + self._log("\n") | ||
| 194 | + if self._logExplicit(): | ||
| 195 | + self._log(str(fits[ext_aeff].header())) | ||
| 196 | + self._log("\n") | ||
| 197 | + self._log(str(fits[ext_psf].header())) | ||
| 198 | + self._log("\n") | ||
| 199 | + self._log(str(fits[ext_edisp].header())) | ||
| 200 | + self._log("\n") | ||
| 201 | + self._log(str(fits[ext_bkg].header())) | ||
| 202 | + self._log("\n") | ||
| 154 | 203 | ||
| 155 | # Return fits file | 204 | # Return fits file |
| 156 | return fits | 205 | return fits |
| @@ -235,7 +284,7 @@ class csobs2caldb(ctools.cscript): | @@ -235,7 +284,7 @@ class csobs2caldb(ctools.cscript): | ||
| 235 | 284 | ||
| 236 | # Set element | 285 | # Set element |
| 237 | table["TELESCOP"][row] = self._mission | 286 | table["TELESCOP"][row] = self._mission |
| 238 | - table["INSTRUME"][row] = self._instrument | 287 | + table["INSTRUME"][row] = self._caldb |
| 239 | table["DETNAM"][row] = "NONE" | 288 | table["DETNAM"][row] = "NONE" |
| 240 | table["FILTER"][row] = "NONE" | 289 | table["FILTER"][row] = "NONE" |
| 241 | table["CAL_DEV"][row] = "ONLINE" | 290 | table["CAL_DEV"][row] = "ONLINE" |
| @@ -245,7 +294,7 @@ class csobs2caldb(ctools.cscript): | @@ -245,7 +294,7 @@ class csobs2caldb(ctools.cscript): | ||
| 245 | table["CAL_VST"][row] = time.split(".")[0] | 294 | table["CAL_VST"][row] = time.split(".")[0] |
| 246 | table["REF_TIME"][row] = 51544.0 | 295 | table["REF_TIME"][row] = 51544.0 |
| 247 | table["CAL_QUAL"][row] = 0 | 296 | table["CAL_QUAL"][row] = 0 |
| 248 | - table["CAL_CBD"][row] = "NAME("+self._rspname+")" | 297 | + table["CAL_CBD"][row] = "NAME("+self["irf"].string()+")" |
| 249 | table["CAL_DATE"][row] = today.replace("-","/")[2:] | 298 | table["CAL_DATE"][row] = today.replace("-","/")[2:] |
| 250 | table["CAL_DIR"][row] = self._cal_dir | 299 | table["CAL_DIR"][row] = self._cal_dir |
| 251 | table["CAL_FILE"][row] = self._outfile | 300 | table["CAL_FILE"][row] = self._outfile |
| @@ -253,22 +302,30 @@ class csobs2caldb(ctools.cscript): | @@ -253,22 +302,30 @@ class csobs2caldb(ctools.cscript): | ||
| 253 | # Add effective area information | 302 | # Add effective area information |
| 254 | row = row_index-4 | 303 | row = row_index-4 |
| 255 | table["CAL_CNAM"][row] = "EFF_AREA" | 304 | table["CAL_CNAM"][row] = "EFF_AREA" |
| 256 | - table["CAL_DESC"][row] = self._instrument+" effective area" | 305 | + table["CAL_DESC"][row] = self._caldb+" effective area" |
| 257 | 306 | ||
| 258 | # Add point spread function information | 307 | # Add point spread function information |
| 259 | row = row_index-3 | 308 | row = row_index-3 |
| 260 | table["CAL_CNAM"][row] = "RPSF" | 309 | table["CAL_CNAM"][row] = "RPSF" |
| 261 | - table["CAL_DESC"][row] = self._instrument+" point spread function" | 310 | + table["CAL_DESC"][row] = self._caldb+" point spread function" |
| 262 | 311 | ||
| 263 | # Add energy dispersion information | 312 | # Add energy dispersion information |
| 264 | row = row_index-2 | 313 | row = row_index-2 |
| 265 | table["CAL_CNAM"][row] = "EDISP" | 314 | table["CAL_CNAM"][row] = "EDISP" |
| 266 | - table["CAL_DESC"][row] = self._instrument+" energy dispersion" | 315 | + table["CAL_DESC"][row] = self._caldb+" energy dispersion" |
| 267 | 316 | ||
| 268 | # Add background information | 317 | # Add background information |
| 269 | row = row_index-1 | 318 | row = row_index-1 |
| 270 | table["CAL_CNAM"][row] = "BGD" | 319 | table["CAL_CNAM"][row] = "BGD" |
| 271 | - table["CAL_DESC"][row] = self._instrument+" background" | 320 | + table["CAL_DESC"][row] = self._caldb+" background" |
| 321 | + | ||
| 322 | + # Log resulting FITS table and header | ||
| 323 | + if self._logNormal(): | ||
| 324 | + self._log(str(table)) | ||
| 325 | + self._log("\n") | ||
| 326 | + if self._logExplicit(): | ||
| 327 | + self._log(str(table.header())) | ||
| 328 | + self._log("\n") | ||
| 272 | 329 | ||
| 273 | # Return CIF FITS file | 330 | # Return CIF FITS file |
| 274 | return cif | 331 | return cif |
| @@ -283,34 +340,40 @@ class csobs2caldb(ctools.cscript): | @@ -283,34 +340,40 @@ class csobs2caldb(ctools.cscript): | ||
| 283 | self._log.header2("Creating directory structure") | 340 | self._log.header2("Creating directory structure") |
| 284 | 341 | ||
| 285 | # Create calibration database | 342 | # Create calibration database |
| 286 | - caldb = gammalib.GCaldb() | 343 | + caldb = gammalib.GCaldb(self["rootdir"].string()) |
| 287 | 344 | ||
| 288 | # Set calibration directory | 345 | # Set calibration directory |
| 289 | self._cal_dir = "data" | 346 | self._cal_dir = "data" |
| 290 | self._cal_dir += "/"+self._mission.lower() | 347 | self._cal_dir += "/"+self._mission.lower() |
| 291 | - self._cal_dir += "/"+self._instrument.lower() | ||
| 292 | - self._cal_dir += "/bcf/"+self._rspname | 348 | + self._cal_dir += "/"+self._caldb.lower() |
| 349 | + self._cal_dir += "/bcf/"+self["irf"].string() | ||
| 293 | 350 | ||
| 294 | # Set absolute path | 351 | # Set absolute path |
| 295 | self._base_dir = caldb.rootdir() +"/data" | 352 | self._base_dir = caldb.rootdir() +"/data" |
| 296 | self._base_dir += "/"+self._mission.lower() | 353 | self._base_dir += "/"+self._mission.lower() |
| 297 | - self._base_dir += "/"+self._instrument.lower() | 354 | + self._base_dir += "/"+self._caldb.lower() |
| 298 | 355 | ||
| 299 | # Set directory for irf file | 356 | # Set directory for irf file |
| 300 | self._rsp_dir = caldb.rootdir() + "/" + self._cal_dir | 357 | self._rsp_dir = caldb.rootdir() + "/" + self._cal_dir |
| 358 | + | ||
| 359 | + # Log resulting FITS table | ||
| 360 | + if self._logNormal(): | ||
| 361 | + self._log(gammalib.parformat("Calibration directory")) | ||
| 362 | + self._log(self._cal_dir) | ||
| 363 | + self._log("\n") | ||
| 364 | + self._log(gammalib.parformat("Base directory")) | ||
| 365 | + self._log(self._base_dir) | ||
| 366 | + self._log("\n") | ||
| 367 | + if not os.path.isdir(self._rsp_dir): | ||
| 368 | + self._log(gammalib.parformat("IRF directory")) | ||
| 369 | + else: | ||
| 370 | + self._log(gammalib.parformat("IRF directory (existing)")) | ||
| 371 | + self._log(self._rsp_dir) | ||
| 372 | + self._log("\n") | ||
| 301 | 373 | ||
| 302 | - # Create directories and log information | 374 | + # Create IRF directory is it does not yet exist |
| 303 | if not os.path.isdir(self._rsp_dir): | 375 | if not os.path.isdir(self._rsp_dir): |
| 304 | - if self._logExplicit(): | ||
| 305 | - self._log(gammalib.parformat("Directory")) | ||
| 306 | - self._log(self._rsp_dir) | ||
| 307 | - self._log("\n") | ||
| 308 | os.makedirs(self._rsp_dir) | 376 | os.makedirs(self._rsp_dir) |
| 309 | - else: | ||
| 310 | - if self._logExplicit(): | ||
| 311 | - self._log(gammalib.parformat("Directory (existing)")) | ||
| 312 | - self._log(self._rsp_dir) | ||
| 313 | - self._log("\n") | ||
| 314 | 377 | ||
| 315 | # Return | 378 | # Return |
| 316 | return | 379 | return |
| @@ -330,8 +393,7 @@ class csobs2caldb(ctools.cscript): | @@ -330,8 +393,7 @@ class csobs2caldb(ctools.cscript): | ||
| 330 | 393 | ||
| 331 | # Write input parameters and header into logger | 394 | # Write input parameters and header into logger |
| 332 | if self._logTerse(): | 395 | if self._logTerse(): |
| 333 | - self._log_parameters() | ||
| 334 | - self._log("\n\n") | 396 | + self._log("\n") |
| 335 | self._log.header1("Creating CALDB entry") | 397 | self._log.header1("Creating CALDB entry") |
| 336 | 398 | ||
| 337 | # Create directory structure | 399 | # Create directory structure |
| @@ -359,7 +421,7 @@ class csobs2caldb(ctools.cscript): | @@ -359,7 +421,7 @@ class csobs2caldb(ctools.cscript): | ||
| 359 | filename = self._rsp_dir + "/" + self._outfile | 421 | filename = self._rsp_dir + "/" + self._outfile |
| 360 | 422 | ||
| 361 | # Write filenames into logger | 423 | # Write filenames into logger |
| 362 | - if self._logTerse(): | 424 | + if self._logNormal(): |
| 363 | self._log(gammalib.parformat("CALDB index file")) | 425 | self._log(gammalib.parformat("CALDB index file")) |
| 364 | self._log(self._caldb_inx.filename().url()) | 426 | self._log(self._caldb_inx.filename().url()) |
| 365 | self._log("\n") | 427 | self._log("\n") |
| @@ -368,10 +430,10 @@ class csobs2caldb(ctools.cscript): | @@ -368,10 +430,10 @@ class csobs2caldb(ctools.cscript): | ||
| 368 | self._log("\n") | 430 | self._log("\n") |
| 369 | 431 | ||
| 370 | # Save caldb index file | 432 | # Save caldb index file |
| 371 | - self._caldb_inx.save(self._clobber) | 433 | + self._caldb_inx.save(self._clobber()) |
| 372 | 434 | ||
| 373 | # Save response file | 435 | # Save response file |
| 374 | - self._irf_fits.saveto(filename, self._clobber) | 436 | + self._irf_fits.saveto(filename, self._clobber()) |
| 375 | 437 | ||
| 376 | # Return | 438 | # Return |
| 377 | return | 439 | return |
| @@ -381,7 +443,7 @@ class csobs2caldb(ctools.cscript): | @@ -381,7 +443,7 @@ class csobs2caldb(ctools.cscript): | ||
| 381 | Execute the script. | 443 | Execute the script. |
| 382 | """ | 444 | """ |
| 383 | # Open logfile | 445 | # Open logfile |
| 384 | - self._logFileOpen() | 446 | + self.logFileOpen() |
| 385 | 447 | ||
| 386 | # Run the script | 448 | # Run the script |
| 387 | self.run() | 449 | self.run() |
cscripts/csobsdef.py
| @@ -352,7 +352,7 @@ class csobsdef(ctools.cscript): | @@ -352,7 +352,7 @@ class csobsdef(ctools.cscript): | ||
| 352 | Execute the script. | 352 | Execute the script. |
| 353 | """ | 353 | """ |
| 354 | # Open logfile | 354 | # Open logfile |
| 355 | - self._logFileOpen() | 355 | + self.logFileOpen() |
| 356 | 356 | ||
| 357 | # Read ahead output parameters | 357 | # Read ahead output parameters |
| 358 | self._read_ahead(True) | 358 | self._read_ahead(True) |
cscripts/csobsinfo.py
| @@ -436,7 +436,7 @@ class csobsinfo(ctools.cscript): | @@ -436,7 +436,7 @@ class csobsinfo(ctools.cscript): | ||
| 436 | Execute the script. | 436 | Execute the script. |
| 437 | """ | 437 | """ |
| 438 | # Open logfile | 438 | # Open logfile |
| 439 | - self._logFileOpen() | 439 | + self.logFileOpen() |
| 440 | 440 | ||
| 441 | # Read ahead output parameters | 441 | # Read ahead output parameters |
| 442 | self._read_ahead(True) | 442 | self._read_ahead(True) |
cscripts/cspull.py
| @@ -430,7 +430,7 @@ class cspull(ctools.cscript): | @@ -430,7 +430,7 @@ class cspull(ctools.cscript): | ||
| 430 | Execute the script. | 430 | Execute the script. |
| 431 | """ | 431 | """ |
| 432 | # Open logfile | 432 | # Open logfile |
| 433 | - self._logFileOpen() | 433 | + self.logFileOpen() |
| 434 | 434 | ||
| 435 | # Run the script | 435 | # Run the script |
| 436 | self.run() | 436 | self.run() |
cscripts/csresmap.py
| @@ -299,7 +299,7 @@ class csresmap(ctools.cscript): | @@ -299,7 +299,7 @@ class csresmap(ctools.cscript): | ||
| 299 | Execute the script. | 299 | Execute the script. |
| 300 | """ | 300 | """ |
| 301 | # Open logfile | 301 | # Open logfile |
| 302 | - self._logFileOpen() | 302 | + self.logFileOpen() |
| 303 | 303 | ||
| 304 | # Read ahead output parameters | 304 | # Read ahead output parameters |
| 305 | self._read_ahead(True) | 305 | self._read_ahead(True) |
cscripts/cssens.py
| @@ -720,7 +720,7 @@ class cssens(ctools.cscript): | @@ -720,7 +720,7 @@ class cssens(ctools.cscript): | ||
| 720 | Execute the script. | 720 | Execute the script. |
| 721 | """ | 721 | """ |
| 722 | # Open logfile | 722 | # Open logfile |
| 723 | - self._logFileOpen() | 723 | + self.logFileOpen() |
| 724 | 724 | ||
| 725 | # Run the script | 725 | # Run the script |
| 726 | self.run() | 726 | self.run() |
cscripts/csspec.py
| @@ -483,7 +483,7 @@ class csspec(ctools.cscript): | @@ -483,7 +483,7 @@ class csspec(ctools.cscript): | ||
| 483 | Execute the script. | 483 | Execute the script. |
| 484 | """ | 484 | """ |
| 485 | # Open logfile | 485 | # Open logfile |
| 486 | - self._logFileOpen() | 486 | + self.logFileOpen() |
| 487 | 487 | ||
| 488 | # Read ahead output parameters | 488 | # Read ahead output parameters |
| 489 | self._read_ahead(True) | 489 | self._read_ahead(True) |
cscripts/cstsdist.py
| @@ -449,7 +449,7 @@ class cstsdist(ctools.cscript): | @@ -449,7 +449,7 @@ class cstsdist(ctools.cscript): | ||
| 449 | Execute the script. | 449 | Execute the script. |
| 450 | """ | 450 | """ |
| 451 | # Open logfile | 451 | # Open logfile |
| 452 | - self._logFileOpen() | 452 | + self.logFileOpen() |
| 453 | 453 | ||
| 454 | # Run the script | 454 | # Run the script |
| 455 | self.run() | 455 | self.run() |
cscripts/cstsmapmerge.py
| @@ -428,7 +428,7 @@ class cstsmapmerge(ctools.cscript): | @@ -428,7 +428,7 @@ class cstsmapmerge(ctools.cscript): | ||
| 428 | Execute the script. | 428 | Execute the script. |
| 429 | """ | 429 | """ |
| 430 | # Open logfile | 430 | # Open logfile |
| 431 | - self._logFileOpen() | 431 | + self.logFileOpen() |
| 432 | 432 | ||
| 433 | # Read ahead output parameters | 433 | # Read ahead output parameters |
| 434 | self._read_ahead(True) | 434 | self._read_ahead(True) |
doc/source/reference_manual/csobs2caldb.rst
| @@ -28,12 +28,18 @@ General parameters | @@ -28,12 +28,18 @@ General parameters | ||
| 28 | ``inobs [file]`` | 28 | ``inobs [file]`` |
| 29 | Input event list, counts cube or observation definition XML file. | 29 | Input event list, counts cube or observation definition XML file. |
| 30 | 30 | ||
| 31 | -``rspname [string]`` | ||
| 32 | - Response output name (e.g. Zenith50). | 31 | +``caldb [string]`` |
| 32 | + Calibration database. | ||
| 33 | + | ||
| 34 | +``irf [string]`` | ||
| 35 | + Instrument response function (e.g. Standard). | ||
| 33 | 36 | ||
| 34 | ``(outirfs = irf_file.fits) [file]`` | 37 | ``(outirfs = irf_file.fits) [file]`` |
| 35 | Output IRF file name. | 38 | Output IRF file name. |
| 36 | 39 | ||
| 40 | +``(rootdir = ) [string]`` | ||
| 41 | + Optional CALDB root directory. | ||
| 42 | + | ||
| 37 | ``(index = 0) [integer]`` | 43 | ``(index = 0) [integer]`` |
| 38 | Index of observation to be used from XML file. | 44 | Index of observation to be used from XML file. |
| 39 | 45 |
test/test_cscripts.sh.in
| @@ -77,14 +77,15 @@ $ECHO -n "Test csobs2caldb: " | @@ -77,14 +77,15 @@ $ECHO -n "Test csobs2caldb: " | ||
| 77 | chmod +x @abs_top_srcdir@/cscripts/csobs2caldb.py | 77 | chmod +x @abs_top_srcdir@/cscripts/csobs2caldb.py |
| 78 | @PYTHON_COVERAGE@@abs_top_srcdir@/cscripts/csobs2caldb.py \ | 78 | @PYTHON_COVERAGE@@abs_top_srcdir@/cscripts/csobs2caldb.py \ |
| 79 | inobs="data/obs_unbinned.xml" \ | 79 | inobs="data/obs_unbinned.xml" \ |
| 80 | - rspname="test_irfs" \ | 80 | + caldb="cta" \ |
| 81 | + irf="Standard" \ | ||
| 81 | chatter=4 > csobs2caldb.log | 82 | chatter=4 > csobs2caldb.log |
| 82 | $ECHO -n "." | 83 | $ECHO -n "." |
| 83 | -if [ -s "$CALDB/data/cta/cta/bcf/test_irfs/irf_file.fits" ] | 84 | +if [ -s "$CALDB/data/cta/cta/bcf/Standard/irf_file.fits" ] |
| 84 | then | 85 | then |
| 85 | $ECHO -n "." | 86 | $ECHO -n "." |
| 86 | else | 87 | else |
| 87 | - $ECHO " $CALDB/data/cta/cta/bcf/test_irfs/irf_file.fits file is not valid" | 88 | + $ECHO " $CALDB/data/cta/cta/bcf/Standard/irf_file.fits file is not valid" |
| 88 | exit 1 | 89 | exit 1 |
| 89 | fi | 90 | fi |
| 90 | $ECHO " ok" | 91 | $ECHO " ok" |
| @@ -282,7 +283,7 @@ chmod +x @abs_top_srcdir@/cscripts/cspull.py | @@ -282,7 +283,7 @@ chmod +x @abs_top_srcdir@/cscripts/cspull.py | ||
| 282 | outfile="pull.dat" \ | 283 | outfile="pull.dat" \ |
| 283 | ntrials="3" \ | 284 | ntrials="3" \ |
| 284 | caldb="cta" \ | 285 | caldb="cta" \ |
| 285 | - irf="test_irfs" \ | 286 | + irf="Standard" \ |
| 286 | ra=83.6331 \ | 287 | ra=83.6331 \ |
| 287 | dec=22.0145 \ | 288 | dec=22.0145 \ |
| 288 | emin=0.1 \ | 289 | emin=0.1 \ |
test/test_csobs2caldb.py
0 → 100755
| 1 | +#! /usr/bin/env python | ||
| 2 | +# ========================================================================== | ||
| 3 | +# This scripts performs unit tests for the csobs2caldb script. | ||
| 4 | +# | ||
| 5 | +# Copyright (C) 2016 Juergen Knoedlseder | ||
| 6 | +# | ||
| 7 | +# This program is free software: you can redistribute it and/or modify | ||
| 8 | +# it under the terms of the GNU General Public License as published by | ||
| 9 | +# the Free Software Foundation, either version 3 of the License, or | ||
| 10 | +# (at your option) any later version. | ||
| 11 | +# | ||
| 12 | +# This program is distributed in the hope that it will be useful, | ||
| 13 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | +# GNU General Public License for more details. | ||
| 16 | +# | ||
| 17 | +# You should have received a copy of the GNU General Public License | ||
| 18 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 19 | +# | ||
| 20 | +# ========================================================================== | ||
| 21 | +import os | ||
| 22 | +import gammalib | ||
| 23 | +import cscripts | ||
| 24 | + | ||
| 25 | + | ||
| 26 | +# ================================= # | ||
| 27 | +# Test class for csobs2caldb script # | ||
| 28 | +# ================================= # | ||
| 29 | +class Test(gammalib.GPythonTestSuite): | ||
| 30 | + """ | ||
| 31 | + Test class for csobs2caldb script. | ||
| 32 | + | ||
| 33 | + This test class makes unit tests for the csobs2caldb script by using it | ||
| 34 | + from the command line and from Python. | ||
| 35 | + """ | ||
| 36 | + | ||
| 37 | + # Constructor | ||
| 38 | + def __init__(self): | ||
| 39 | + """ | ||
| 40 | + Constructor. | ||
| 41 | + """ | ||
| 42 | + # Call base class constructor | ||
| 43 | + gammalib.GPythonTestSuite.__init__(self) | ||
| 44 | + | ||
| 45 | + # Set members | ||
| 46 | + self._inobs = "data/obs_unbinned.xml" | ||
| 47 | + | ||
| 48 | + # Clean calibration database | ||
| 49 | + os.system("rm -rf caldb >/dev/null 2>&1") | ||
| 50 | + os.system("mkdir -p caldb >/dev/null 2>&1") | ||
| 51 | + | ||
| 52 | + # Return | ||
| 53 | + return | ||
| 54 | + | ||
| 55 | + # Set test functions | ||
| 56 | + def set(self): | ||
| 57 | + """ | ||
| 58 | + Set all test functions. | ||
| 59 | + """ | ||
| 60 | + # Set test name | ||
| 61 | + self.name("csobs2caldb") | ||
| 62 | + | ||
| 63 | + # Append tests | ||
| 64 | + self.append(self._test_cmd, "Test csobs2caldb on command line") | ||
| 65 | + self.append(self._test_python, "Test csobs2caldb from Python") | ||
| 66 | + | ||
| 67 | + # Return | ||
| 68 | + return | ||
| 69 | + | ||
| 70 | + # Test csobs2caldb on command line | ||
| 71 | + def _test_cmd(self): | ||
| 72 | + """ | ||
| 73 | + Test csobs2caldb on the command line. | ||
| 74 | + """ | ||
| 75 | + # Kluge to set the command (installed version has no README file) | ||
| 76 | + if os.path.isfile("README"): | ||
| 77 | + csobs2caldb = "../cscripts/csobs2caldb.py" | ||
| 78 | + else: | ||
| 79 | + csobs2caldb = "csobs2caldb" | ||
| 80 | + | ||
| 81 | + # Setup csobs2caldb command | ||
| 82 | + cmd = csobs2caldb+' inobs="'+self._inobs+'"'+ \ | ||
| 83 | + ' caldb="cta" irf="Cmd1" rootdir="caldb"'+ \ | ||
| 84 | + ' logfile="csobs2caldb_cmd1.log" chatter=1' | ||
| 85 | + | ||
| 86 | + # Execute csobs2caldb, make sure we catch any exception | ||
| 87 | + try: | ||
| 88 | + rc = os.system(cmd+" >/dev/null 2>&1") | ||
| 89 | + except: | ||
| 90 | + pass | ||
| 91 | + | ||
| 92 | + # Check if execution was successful | ||
| 93 | + self.test_assert(rc == 0, | ||
| 94 | + "Successful csobs2caldb execution on command line") | ||
| 95 | + | ||
| 96 | + # Check response | ||
| 97 | + self._check_response("cta", "Cmd1") | ||
| 98 | + | ||
| 99 | + # Setup csobs2caldb command | ||
| 100 | + cmd = csobs2caldb+' inobs="xml_file_that_does_not_exist.xml"'+ \ | ||
| 101 | + ' caldb="cta" irf="Cmd2" rootdir="caldb"'+ \ | ||
| 102 | + ' logfile="csobs2caldb_cmd2.log"' | ||
| 103 | + | ||
| 104 | + # Execute csobs2caldb, make sure we catch any exception | ||
| 105 | + try: | ||
| 106 | + rc = os.system(cmd+" >/dev/null 2>&1") | ||
| 107 | + except: | ||
| 108 | + pass | ||
| 109 | + | ||
| 110 | + # Check if execution failed | ||
| 111 | + self.test_assert(rc != 0, | ||
| 112 | + "Failure of csobs2caldb execution on command line") | ||
| 113 | + | ||
| 114 | + # Return | ||
| 115 | + return | ||
| 116 | + | ||
| 117 | + # Test csobs2caldb from Python | ||
| 118 | + def _test_python(self): | ||
| 119 | + """ | ||
| 120 | + Test csobs2caldb from Python. | ||
| 121 | + """ | ||
| 122 | + # Set-up csobs2caldb using "inobs" parameter | ||
| 123 | + irf = cscripts.csobs2caldb() | ||
| 124 | + irf["inobs"] = self._inobs | ||
| 125 | + irf["caldb"] = "cta" | ||
| 126 | + irf["irf"] = "Py1" | ||
| 127 | + irf["rootdir"] = "caldb" | ||
| 128 | + irf["logfile"] = "csobs2caldb_py1.log" | ||
| 129 | + irf["chatter"] = 2 | ||
| 130 | + | ||
| 131 | + # Run csobs2caldb script and save IRF | ||
| 132 | + irf.logFileOpen() # Make sure we get a log file | ||
| 133 | + irf.run() | ||
| 134 | + irf.save() | ||
| 135 | + | ||
| 136 | + # Check response | ||
| 137 | + self._check_response("cta", "Py1") | ||
| 138 | + | ||
| 139 | + # Load observation container | ||
| 140 | + obs = gammalib.GObservations(self._inobs) | ||
| 141 | + | ||
| 142 | + # Set-up csobs2caldb using observation container | ||
| 143 | + irf = cscripts.csobs2caldb(obs) | ||
| 144 | + irf["caldb"] = "cta" | ||
| 145 | + irf["irf"] = "Py2" | ||
| 146 | + irf["rootdir"] = "caldb" | ||
| 147 | + irf["logfile"] = "csobs2caldb_py2.log" | ||
| 148 | + irf["chatter"] = 3 | ||
| 149 | + | ||
| 150 | + # Execute csobs2caldb script | ||
| 151 | + irf.execute() | ||
| 152 | + | ||
| 153 | + # Check response | ||
| 154 | + self._check_response("cta", "Py2") | ||
| 155 | + | ||
| 156 | + # Return | ||
| 157 | + return | ||
| 158 | + | ||
| 159 | + # Check response | ||
| 160 | + def _check_response(self, caldb, irf): | ||
| 161 | + """ | ||
| 162 | + Check response. | ||
| 163 | + """ | ||
| 164 | + # Open calibration database | ||
| 165 | + db = gammalib.GCaldb("caldb") | ||
| 166 | + db.open("cta", caldb) | ||
| 167 | + | ||
| 168 | + # Get filenames of response components | ||
| 169 | + expr = "NAME("+irf+")" | ||
| 170 | + aeff = gammalib.GFilename(db.filename("","","EFF_AREA","","",expr)) | ||
| 171 | + psf = gammalib.GFilename(db.filename("","","RPSF","","",expr)) | ||
| 172 | + edisp = gammalib.GFilename(db.filename("","","EDISP","","",expr)) | ||
| 173 | + bgd = gammalib.GFilename(db.filename("","","BGD","","",expr)) | ||
| 174 | + | ||
| 175 | + # Check whether files exist | ||
| 176 | + self.test_assert(aeff.exists(), "Effective area file exists") | ||
| 177 | + self.test_assert(psf.exists(), "Point spread function file exists") | ||
| 178 | + self.test_assert(edisp.exists(), "Energy dispersion file exists") | ||
| 179 | + self.test_assert(bgd.exists(), "Background file exists") | ||
| 180 | + | ||
| 181 | + # Return | ||
| 182 | + return |
test/test_python_cscripts.py
| 1 | #! /usr/bin/env python | 1 | #! /usr/bin/env python |
| 2 | # ========================================================================== | 2 | # ========================================================================== |
| 3 | -# This scripts performs unit tests for cscripts used from Python. | 3 | +# This scripts performs unit tests for cscripts. |
| 4 | # | 4 | # |
| 5 | # Copyright (C) 2016 Juergen Knoedlseder | 5 | # Copyright (C) 2016 Juergen Knoedlseder |
| 6 | # | 6 | # |
| @@ -24,31 +24,17 @@ import gammalib | @@ -24,31 +24,17 @@ import gammalib | ||
| 24 | import cscripts | 24 | import cscripts |
| 25 | sys.path.append(os.path.dirname(os.path.abspath(__file__))) | 25 | sys.path.append(os.path.dirname(os.path.abspath(__file__))) |
| 26 | import test_cscaldb | 26 | import test_cscaldb |
| 27 | +import test_csobs2caldb | ||
| 27 | import test_cslightcrv | 28 | import test_cslightcrv |
| 28 | 29 | ||
| 29 | 30 | ||
| 30 | # ================== # | 31 | # ================== # |
| 31 | # Perform unit tests # | 32 | # Perform unit tests # |
| 32 | # ================== # | 33 | # ================== # |
| 33 | -def test(installed=False): | 34 | +def test(installed=False, debug=False): |
| 34 | """ | 35 | """ |
| 35 | - Perform unit testing for Python interface. | 36 | + Perform cscripts unit testing. |
| 36 | """ | 37 | """ |
| 37 | - # Allocate test suite container | ||
| 38 | - suites = gammalib.GTestSuites("cscripts Python module unit testing") | ||
| 39 | - | ||
| 40 | - # Allocate test suites and append them to the container | ||
| 41 | - suite_cscaldb = test_cscaldb.Test() | ||
| 42 | - suite_cslightcrv = test_cslightcrv.Test() | ||
| 43 | - | ||
| 44 | - # Setup unit tests | ||
| 45 | - suite_cscaldb.set() | ||
| 46 | - suite_cslightcrv.set() | ||
| 47 | - | ||
| 48 | - # Append tests to container | ||
| 49 | - suites.append(suite_cscaldb) | ||
| 50 | - suites.append(suite_cslightcrv) | ||
| 51 | - | ||
| 52 | # If we have an installed version then create a temporary directory and | 38 | # If we have an installed version then create a temporary directory and |
| 53 | # copy over all information that is needed | 39 | # copy over all information that is needed |
| 54 | if installed: | 40 | if installed: |
| @@ -65,7 +51,7 @@ def test(installed=False): | @@ -65,7 +51,7 @@ def test(installed=False): | ||
| 65 | 51 | ||
| 66 | # Copy over test data and irf | 52 | # Copy over test data and irf |
| 67 | os.system("cp -r %s %s" % (dirname+"/data", "data")) | 53 | os.system("cp -r %s %s" % (dirname+"/data", "data")) |
| 68 | - #os.system("cp -r %s %s" % (dirname+"/irf", "irf")) | 54 | + os.system("cp -r %s %s" % (dirname+"/irf", "irf")) |
| 69 | 55 | ||
| 70 | # ... otherwise set the calibration database | 56 | # ... otherwise set the calibration database |
| 71 | else: | 57 | else: |
| @@ -84,6 +70,24 @@ def test(installed=False): | @@ -84,6 +70,24 @@ def test(installed=False): | ||
| 84 | else: | 70 | else: |
| 85 | os.system("cp -r %s/syspfiles/*.par pfiles/" % (os.environ['CTOOLS'])) | 71 | os.system("cp -r %s/syspfiles/*.par pfiles/" % (os.environ['CTOOLS'])) |
| 86 | 72 | ||
| 73 | + # Allocate test suite container | ||
| 74 | + suites = gammalib.GTestSuites("cscripts unit testing") | ||
| 75 | + | ||
| 76 | + # Allocate test suites and append them to the container | ||
| 77 | + suite_cscaldb = test_cscaldb.Test() | ||
| 78 | + suite_csobs2caldb = test_csobs2caldb.Test() | ||
| 79 | + suite_cslightcrv = test_cslightcrv.Test() | ||
| 80 | + | ||
| 81 | + # Setup unit tests | ||
| 82 | + suite_cscaldb.set() | ||
| 83 | + suite_csobs2caldb.set() | ||
| 84 | + suite_cslightcrv.set() | ||
| 85 | + | ||
| 86 | + # Append tests to container | ||
| 87 | + suites.append(suite_cscaldb) | ||
| 88 | + suites.append(suite_csobs2caldb) | ||
| 89 | + suites.append(suite_cslightcrv) | ||
| 90 | + | ||
| 87 | # Run test suite | 91 | # Run test suite |
| 88 | success = suites.run() | 92 | success = suites.run() |
| 89 | 93 | ||
| @@ -91,6 +95,10 @@ def test(installed=False): | @@ -91,6 +95,10 @@ def test(installed=False): | ||
| 91 | if not installed: | 95 | if not installed: |
| 92 | suites.save("reports/cscripts.xml") | 96 | suites.save("reports/cscripts.xml") |
| 93 | 97 | ||
| 98 | + # If debuging is requested then print test suites | ||
| 99 | + if debug: | ||
| 100 | + print(suites) | ||
| 101 | + | ||
| 94 | # Set return code | 102 | # Set return code |
| 95 | if success: | 103 | if success: |
| 96 | rc = 0 | 104 | rc = 0 |