Commit 2e9636446cddf85352586a8f1fe042461cb17320
1 parent
6543a156
Update ctools unit tests.
Showing
19 changed files
with
1358 additions
and
570 deletions
.gitignore
ChangeLog
| @@ -3,7 +3,7 @@ | @@ -3,7 +3,7 @@ | ||
| 3 | * Version 1.1.0 released | 3 | * Version 1.1.0 released |
| 4 | ======================== | 4 | ======================== |
| 5 | 5 | ||
| 6 | - Add cscript unit tests. | 6 | + Add ctools and cscripts unit tests. |
| 7 | Add "bgdoversample" and "bgdinfill" parameters to csroot2caldb | 7 | Add "bgdoversample" and "bgdinfill" parameters to csroot2caldb |
| 8 | Add csobsdef.pntdef() method (#1771) | 8 | Add csobsdef.pntdef() method (#1771) |
| 9 | Add ctmapcube tool (#1760) | 9 | Add ctmapcube tool (#1760) |
test/test_cscaldb.py
| @@ -51,11 +51,11 @@ class Test(gammalib.GPythonTestSuite): | @@ -51,11 +51,11 @@ class Test(gammalib.GPythonTestSuite): | ||
| 51 | Set all test functions. | 51 | Set all test functions. |
| 52 | """ | 52 | """ |
| 53 | # Set test name | 53 | # Set test name |
| 54 | - self.name("cscaldb") | 54 | + self.name('cscaldb') |
| 55 | 55 | ||
| 56 | # Append tests | 56 | # Append tests |
| 57 | - self.append(self._test_cmd, "Test cscaldb on command line") | ||
| 58 | - self.append(self._test_python, "Test cscaldb from Python") | 57 | + self.append(self._test_cmd, 'Test cscaldb on command line') |
| 58 | + self.append(self._test_python, 'Test cscaldb from Python') | ||
| 59 | 59 | ||
| 60 | # Return | 60 | # Return |
| 61 | return | 61 | return |
| @@ -66,23 +66,23 @@ class Test(gammalib.GPythonTestSuite): | @@ -66,23 +66,23 @@ class Test(gammalib.GPythonTestSuite): | ||
| 66 | Test cscaldb on the command line. | 66 | Test cscaldb on the command line. |
| 67 | """ | 67 | """ |
| 68 | # Kluge to set the command (installed version has no README file) | 68 | # Kluge to set the command (installed version has no README file) |
| 69 | - if os.path.isfile("README"): | ||
| 70 | - cscaldb = "../cscripts/cscaldb.py" | 69 | + if os.path.isfile('README'): |
| 70 | + cscaldb = '../cscripts/cscaldb.py' | ||
| 71 | else: | 71 | else: |
| 72 | - cscaldb = "cscaldb" | 72 | + cscaldb = 'cscaldb' |
| 73 | 73 | ||
| 74 | # Setup cscaldb command | 74 | # Setup cscaldb command |
| 75 | cmd = cscaldb+' logfile="cscaldb_cmd1.log" chatter=1' | 75 | cmd = cscaldb+' logfile="cscaldb_cmd1.log" chatter=1' |
| 76 | 76 | ||
| 77 | # Execute cscaldb, make sure we catch any exception | 77 | # Execute cscaldb, make sure we catch any exception |
| 78 | try: | 78 | try: |
| 79 | - rc = os.system(cmd+" >/dev/null 2>&1") | 79 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 80 | except: | 80 | except: |
| 81 | pass | 81 | pass |
| 82 | 82 | ||
| 83 | # Check if execution was successful | 83 | # Check if execution was successful |
| 84 | self.test_assert(rc == 0, | 84 | self.test_assert(rc == 0, |
| 85 | - "Successful cscaldb execution on command line") | 85 | + 'Successful cscaldb execution on command line') |
| 86 | 86 | ||
| 87 | # Return | 87 | # Return |
| 88 | return | 88 | return |
| @@ -94,8 +94,8 @@ class Test(gammalib.GPythonTestSuite): | @@ -94,8 +94,8 @@ class Test(gammalib.GPythonTestSuite): | ||
| 94 | """ | 94 | """ |
| 95 | # Set-up cscaldb | 95 | # Set-up cscaldb |
| 96 | caldb = cscripts.cscaldb() | 96 | caldb = cscripts.cscaldb() |
| 97 | - caldb["logfile"] = "cscaldb_py1.log" | ||
| 98 | - caldb["chatter"] = 2 | 97 | + caldb['logfile'] = 'cscaldb_py1.log' |
| 98 | + caldb['chatter'] = 2 | ||
| 99 | 99 | ||
| 100 | # Run script | 100 | # Run script |
| 101 | caldb.logFileOpen() # Make sure we get a log file | 101 | caldb.logFileOpen() # Make sure we get a log file |
test/test_csfindobs.py
| @@ -51,11 +51,11 @@ class Test(gammalib.GPythonTestSuite): | @@ -51,11 +51,11 @@ class Test(gammalib.GPythonTestSuite): | ||
| 51 | Set all test functions. | 51 | Set all test functions. |
| 52 | """ | 52 | """ |
| 53 | # Set test name | 53 | # Set test name |
| 54 | - self.name("csfindobs") | 54 | + self.name('csfindobs') |
| 55 | 55 | ||
| 56 | # Append tests | 56 | # Append tests |
| 57 | - self.append(self._test_cmd, "Test csfindobs on command line") | ||
| 58 | - self.append(self._test_python, "Test csfindobs from Python") | 57 | + self.append(self._test_cmd, 'Test csfindobs on command line') |
| 58 | + self.append(self._test_python, 'Test csfindobs from Python') | ||
| 59 | 59 | ||
| 60 | # Return | 60 | # Return |
| 61 | return | 61 | return |
| @@ -66,10 +66,10 @@ class Test(gammalib.GPythonTestSuite): | @@ -66,10 +66,10 @@ class Test(gammalib.GPythonTestSuite): | ||
| 66 | Test csfindobs on the command line. | 66 | Test csfindobs on the command line. |
| 67 | """ | 67 | """ |
| 68 | # Kluge to set the command (installed version has no README file) | 68 | # Kluge to set the command (installed version has no README file) |
| 69 | - if os.path.isfile("README"): | ||
| 70 | - csfindobs = "../cscripts/csfindobs.py" | 69 | + if os.path.isfile('README'): |
| 70 | + csfindobs = '../cscripts/csfindobs.py' | ||
| 71 | else: | 71 | else: |
| 72 | - csfindobs = "csfindobs" | 72 | + csfindobs = 'csfindobs' |
| 73 | 73 | ||
| 74 | # Setup csfindobs command | 74 | # Setup csfindobs command |
| 75 | cmd = csfindobs+' datapath="iactdata/"'+ \ | 75 | cmd = csfindobs+' datapath="iactdata/"'+ \ |
| @@ -80,16 +80,16 @@ class Test(gammalib.GPythonTestSuite): | @@ -80,16 +80,16 @@ class Test(gammalib.GPythonTestSuite): | ||
| 80 | 80 | ||
| 81 | # Execute csfindobs, make sure we catch any exception | 81 | # Execute csfindobs, make sure we catch any exception |
| 82 | try: | 82 | try: |
| 83 | - rc = os.system(cmd+" >/dev/null 2>&1") | 83 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 84 | except: | 84 | except: |
| 85 | pass | 85 | pass |
| 86 | 86 | ||
| 87 | # Check if execution was successful | 87 | # Check if execution was successful |
| 88 | self.test_assert(rc == 0, | 88 | self.test_assert(rc == 0, |
| 89 | - "Successful csfindobs execution on command line") | 89 | + 'Successful csfindobs execution on command line') |
| 90 | 90 | ||
| 91 | # Check run list | 91 | # Check run list |
| 92 | - self._check_runlist("runlist_cmd1.dat") | 92 | + self._check_runlist('runlist_cmd1.dat') |
| 93 | 93 | ||
| 94 | # Setup csfindobs command | 94 | # Setup csfindobs command |
| 95 | cmd = csfindobs+' datapath="path_that_does_not_exist"'+ \ | 95 | cmd = csfindobs+' datapath="path_that_does_not_exist"'+ \ |
| @@ -100,13 +100,13 @@ class Test(gammalib.GPythonTestSuite): | @@ -100,13 +100,13 @@ class Test(gammalib.GPythonTestSuite): | ||
| 100 | 100 | ||
| 101 | # Execute csfindobs, make sure we catch any exception | 101 | # Execute csfindobs, make sure we catch any exception |
| 102 | try: | 102 | try: |
| 103 | - rc = os.system(cmd+" >/dev/null 2>&1") | 103 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 104 | except: | 104 | except: |
| 105 | pass | 105 | pass |
| 106 | 106 | ||
| 107 | # Check if execution failed | 107 | # Check if execution failed |
| 108 | self.test_assert(rc != 0, | 108 | self.test_assert(rc != 0, |
| 109 | - "Failure of csfindobs execution on command line") | 109 | + 'Failure of csfindobs execution on command line') |
| 110 | 110 | ||
| 111 | # Return | 111 | # Return |
| 112 | return | 112 | return |
| @@ -118,14 +118,14 @@ class Test(gammalib.GPythonTestSuite): | @@ -118,14 +118,14 @@ class Test(gammalib.GPythonTestSuite): | ||
| 118 | """ | 118 | """ |
| 119 | # Set-up csfindobs | 119 | # Set-up csfindobs |
| 120 | findobs = cscripts.csfindobs() | 120 | findobs = cscripts.csfindobs() |
| 121 | - findobs["datapath"] = "iactdata/" | ||
| 122 | - findobs["prodname"] = "unit-test" | ||
| 123 | - findobs["outfile"] = "runlist_py1.dat" | ||
| 124 | - findobs["ra"] = 83.63 | ||
| 125 | - findobs["dec"] = 22.01 | ||
| 126 | - findobs["rad"] = 1.0 | ||
| 127 | - findobs["logfile"] = "csfindobs_py1.log" | ||
| 128 | - findobs["chatter"] = 2 | 121 | + findobs['datapath'] = 'iactdata/' |
| 122 | + findobs['prodname'] = 'unit-test' | ||
| 123 | + findobs['outfile'] = 'runlist_py1.dat' | ||
| 124 | + findobs['ra'] = 83.63 | ||
| 125 | + findobs['dec'] = 22.01 | ||
| 126 | + findobs['rad'] = 1.0 | ||
| 127 | + findobs['logfile'] = 'csfindobs_py1.log' | ||
| 128 | + findobs['chatter'] = 2 | ||
| 129 | 129 | ||
| 130 | # Run csfindobs script and save run list | 130 | # Run csfindobs script and save run list |
| 131 | findobs.logFileOpen() # Make sure we get a log file | 131 | findobs.logFileOpen() # Make sure we get a log file |
| @@ -133,7 +133,7 @@ class Test(gammalib.GPythonTestSuite): | @@ -133,7 +133,7 @@ class Test(gammalib.GPythonTestSuite): | ||
| 133 | findobs.save() | 133 | findobs.save() |
| 134 | 134 | ||
| 135 | # Check run list | 135 | # Check run list |
| 136 | - self._check_runlist("runlist_py1.dat") | 136 | + self._check_runlist('runlist_py1.dat') |
| 137 | 137 | ||
| 138 | # Return | 138 | # Return |
| 139 | return | 139 | return |
test/test_ctbkgcube.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 | 24 | ||
| @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - self.bkg_model = "data/crab.xml" | ||
| 43 | - self.caldb = "irf" | ||
| 44 | - self.irf = "cta_dummy_irf" | ||
| 45 | - | ||
| 46 | # Return | 41 | # Return |
| 47 | return | 42 | return |
| 48 | 43 | ||
| @@ -52,61 +47,125 @@ class Test(gammalib.GPythonTestSuite): | @@ -52,61 +47,125 @@ class Test(gammalib.GPythonTestSuite): | ||
| 52 | Set all test functions. | 47 | Set all test functions. |
| 53 | """ | 48 | """ |
| 54 | # Set test name | 49 | # Set test name |
| 55 | - self.name("ctbkgcube") | 50 | + self.name('ctbkgcube') |
| 56 | 51 | ||
| 57 | # Append tests | 52 | # Append tests |
| 58 | - self.append(self.test_functional, "Test ctbkgcube functionality") | 53 | + self.append(self._test_cmd, 'Test ctbkgcube on command line') |
| 54 | + self.append(self._test_python, 'Test ctbkgcube from Python') | ||
| 59 | 55 | ||
| 60 | # Return | 56 | # Return |
| 61 | return | 57 | return |
| 62 | 58 | ||
| 63 | - # Test ctbkgcube functionnality | ||
| 64 | - def test_functional(self): | 59 | + # Test ctbkgcube on command line |
| 60 | + def _test_cmd(self): | ||
| 65 | """ | 61 | """ |
| 66 | - Test ctbkgcube functionnality. | 62 | + Test ctbkgcube on the command line. |
| 67 | """ | 63 | """ |
| 68 | - # Set-up ctbkgcube | ||
| 69 | - bkgcube = ctools.ctbkgcube() | ||
| 70 | - bkgcube["inobs"] = self.events_name | ||
| 71 | - bkgcube["inmodel"] = self.bkg_model | ||
| 72 | - bkgcube["incube"] = "NONE" | ||
| 73 | - bkgcube["outcube"] = "bkgcube.fits" | ||
| 74 | - bkgcube["outmodel"] = "bkgcube.xml" | ||
| 75 | - bkgcube["caldb"] = self.caldb | ||
| 76 | - bkgcube["irf"] = self.irf | ||
| 77 | - bkgcube["ebinalg"] = "LOG" | ||
| 78 | - bkgcube["emin"] = 0.1 | ||
| 79 | - bkgcube["emax"] = 100 | ||
| 80 | - bkgcube["enumbins"] = 20 | ||
| 81 | - bkgcube["nxpix"] = 10 | ||
| 82 | - bkgcube["nypix"] = 10 | ||
| 83 | - bkgcube["binsz"] = 0.4 | ||
| 84 | - bkgcube["coordsys"] = "CEL" | ||
| 85 | - bkgcube["proj"] = "CAR" | ||
| 86 | - bkgcube["xref"] = 83.63 | ||
| 87 | - bkgcube["yref"] = 22.01 | ||
| 88 | - | ||
| 89 | - # Run tool | ||
| 90 | - self.test_try("Run ctbkgcube") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctbkgcube = '../src/ctbkgcube/ctbkgcube' | ||
| 67 | + else: | ||
| 68 | + ctbkgcube = 'ctbkgcube' | ||
| 69 | + | ||
| 70 | + # Setup ctbkgcube command | ||
| 71 | + cmd = ctbkgcube+' inobs="data/crab_events.fits"'+ \ | ||
| 72 | + ' inmodel="data/crab.xml"'+ \ | ||
| 73 | + ' incube="NONE"'+ \ | ||
| 74 | + ' outcube="ctbkgcube_cmd1.fits"'+ \ | ||
| 75 | + ' outmodel="ctbkgcube_cmd1.xml"'+ \ | ||
| 76 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 77 | + ' ebinalg="LOG" emin=0.1 emax=100.0 enumbins=20'+ \ | ||
| 78 | + ' nxpix=10 nypix=10 binsz=0.4'+ \ | ||
| 79 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 80 | + ' logfile="ctbkgcube_cmd1.log" chatter=1' | ||
| 81 | + | ||
| 82 | + # Execute ctbkgcube, make sure we catch any exception | ||
| 91 | try: | 83 | try: |
| 92 | - bkgcube.run() | ||
| 93 | - self.test_try_success() | ||
| 94 | - #except Exception as e: | ||
| 95 | - # msg = "Exception occured in ctbkgcube: %s." % (e,) | 84 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 96 | except: | 85 | except: |
| 97 | - msg = "Exception occured in ctbkgcube." | ||
| 98 | - self.test_try_failure(msg) | 86 | + pass |
| 87 | + | ||
| 88 | + # Check if execution was successful | ||
| 89 | + self.test_assert(rc == 0, | ||
| 90 | + 'Successful ctbkgcube execution on command line') | ||
| 91 | + | ||
| 92 | + # Check result file | ||
| 93 | + self._check_result_file('ctbkgcube_cmd1.fits') | ||
| 99 | 94 | ||
| 100 | - # Save background cube | ||
| 101 | - self.test_try("Save background cube") | 95 | + # Setup ctbkgcube command |
| 96 | + cmd = ctbkgcube+' inobs="event_file_that_does_not_exist.fits"'+ \ | ||
| 97 | + ' inmodel="data/crab.xml"'+ \ | ||
| 98 | + ' incube="NONE"'+ \ | ||
| 99 | + ' outcube="ctbkgcube_cmd2.fits"'+ \ | ||
| 100 | + ' outmodel="ctbkgcube_cmd2.xml"'+ \ | ||
| 101 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 102 | + ' ebinalg="LOG" emin=0.1 emax=100.0 enumbins=20'+ \ | ||
| 103 | + ' nxpix=10 nypix=10 binsz=0.4'+ \ | ||
| 104 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 105 | + ' logfile="ctbkgcube_cmd2.log" chatter=1' | ||
| 106 | + | ||
| 107 | + # Execute ctbkgcube, make sure we catch any exception | ||
| 102 | try: | 108 | try: |
| 103 | - bkgcube.save() | ||
| 104 | - self.test_try_success() | ||
| 105 | - #except Exception as e: | ||
| 106 | - # msg = "Exception occured in saving background cube: %s." % (e,) | 109 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 107 | except: | 110 | except: |
| 108 | - msg = "Exception occured in saving background cube." | ||
| 109 | - self.test_try_failure(msg) | 111 | + pass |
| 112 | + | ||
| 113 | + # Check if execution failed | ||
| 114 | + self.test_assert(rc != 0, | ||
| 115 | + 'Failure of ctbkgcube execution on command line') | ||
| 116 | + | ||
| 117 | + # Return | ||
| 118 | + return | ||
| 119 | + | ||
| 120 | + # Test ctbkgcube from Python | ||
| 121 | + def _test_python(self): | ||
| 122 | + """ | ||
| 123 | + Test ctbkgcube from Python. | ||
| 124 | + """ | ||
| 125 | + # Set-up ctbkgcube | ||
| 126 | + bkgcube = ctools.ctbkgcube() | ||
| 127 | + bkgcube['inobs'] = 'data/crab_events.fits' | ||
| 128 | + bkgcube['inmodel'] = 'data/crab.xml' | ||
| 129 | + bkgcube['incube'] = 'NONE' | ||
| 130 | + bkgcube['outcube'] = 'ctbkgcube_py1.fits' | ||
| 131 | + bkgcube['outmodel'] = 'ctbkgcube_py1.xml' | ||
| 132 | + bkgcube['caldb'] = 'prod2' | ||
| 133 | + bkgcube['irf'] = 'South_0.5h' | ||
| 134 | + bkgcube['ebinalg'] = 'LOG' | ||
| 135 | + bkgcube['emin'] = 0.1 | ||
| 136 | + bkgcube['emax'] = 100 | ||
| 137 | + bkgcube['enumbins'] = 20 | ||
| 138 | + bkgcube['nxpix'] = 10 | ||
| 139 | + bkgcube['nypix'] = 10 | ||
| 140 | + bkgcube['binsz'] = 0.4 | ||
| 141 | + bkgcube['coordsys'] = 'CEL' | ||
| 142 | + bkgcube['proj'] = 'CAR' | ||
| 143 | + bkgcube['xref'] = 83.63 | ||
| 144 | + bkgcube['yref'] = 22.01 | ||
| 145 | + bkgcube['logfile'] = 'ctbkgcube_py1.log' | ||
| 146 | + bkgcube['chatter'] = 2 | ||
| 147 | + | ||
| 148 | + # Run ctbkgcube tool | ||
| 149 | + bkgcube.logFileOpen() # Make sure we get a log file | ||
| 150 | + bkgcube.run() | ||
| 151 | + bkgcube.save() | ||
| 152 | + | ||
| 153 | + # Check result file | ||
| 154 | + self._check_result_file('ctbkgcube_py1.fits') | ||
| 155 | + | ||
| 156 | + # Return | ||
| 157 | + return | ||
| 158 | + | ||
| 159 | + # Check result file | ||
| 160 | + def _check_result_file(self, filename): | ||
| 161 | + """ | ||
| 162 | + Check result file. | ||
| 163 | + """ | ||
| 164 | + # Open result file | ||
| 165 | + result = gammalib.GCTACubeBackground(filename) | ||
| 166 | + | ||
| 167 | + # Check dimensions | ||
| 168 | + self.test_value(len(result.elogmeans()), 20, 'Check for 20 energy bins') | ||
| 110 | 169 | ||
| 111 | # Return | 170 | # Return |
| 112 | return | 171 | return |
test/test_ctbutterfly.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 | 24 | ||
| @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - self.model_name = "data/crab.xml" | ||
| 43 | - self.caldb = "irf" | ||
| 44 | - self.irf = "cta_dummy_irf" | ||
| 45 | - | ||
| 46 | # Return | 41 | # Return |
| 47 | return | 42 | return |
| 48 | 43 | ||
| @@ -52,51 +47,108 @@ class Test(gammalib.GPythonTestSuite): | @@ -52,51 +47,108 @@ class Test(gammalib.GPythonTestSuite): | ||
| 52 | Set all test functions. | 47 | Set all test functions. |
| 53 | """ | 48 | """ |
| 54 | # Set test name | 49 | # Set test name |
| 55 | - self.name("ctbutterfly") | 50 | + self.name('ctbutterfly') |
| 56 | 51 | ||
| 57 | # Append tests | 52 | # Append tests |
| 58 | - self.append(self.test_functional, "Test ctbutterfly functionality") | 53 | + self.append(self._test_cmd, 'Test ctbutterfly on command line') |
| 54 | + self.append(self._test_python, 'Test ctbutterfly from Python') | ||
| 59 | 55 | ||
| 60 | # Return | 56 | # Return |
| 61 | return | 57 | return |
| 62 | 58 | ||
| 63 | - # Test ctbutterfly functionnality | ||
| 64 | - def test_functional(self): | 59 | + # Test ctbutterfly on command line |
| 60 | + def _test_cmd(self): | ||
| 65 | """ | 61 | """ |
| 66 | - Test ctbutterfly functionnality. | 62 | + Test ctbutterfly on the command line. |
| 67 | """ | 63 | """ |
| 68 | - # Set-up ctbutterfly | ||
| 69 | - butterfly = ctools.ctbutterfly() | ||
| 70 | - butterfly["inobs"] = self.events_name | ||
| 71 | - butterfly["inmodel"] = self.model_name | ||
| 72 | - butterfly["srcname"] = "Crab" | ||
| 73 | - butterfly["caldb"] = self.caldb | ||
| 74 | - butterfly["irf"] = self.irf | ||
| 75 | - butterfly["emin"] = 0.1 | ||
| 76 | - butterfly["emax"] = 100 | ||
| 77 | - butterfly["outfile"] = "butterfly.txt" | ||
| 78 | - | ||
| 79 | - # Run tool | ||
| 80 | - self.test_try("Run ctbutterfly") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctbutterfly = '../src/ctbutterfly/ctbutterfly' | ||
| 67 | + else: | ||
| 68 | + ctbutterfly = 'ctbutterfly' | ||
| 69 | + | ||
| 70 | + # Setup ctbutterfly command | ||
| 71 | + cmd = ctbutterfly+' inobs="data/crab_events.fits"'+\ | ||
| 72 | + ' outfile="ctbutterfly_cmd1.txt"'+ \ | ||
| 73 | + ' inmodel="data/crab.xml" srcname="Crab"'+ \ | ||
| 74 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 75 | + ' emin=0.1 emax=100.0'+ \ | ||
| 76 | + ' logfile="ctbutterfly_cmd1.log" chatter=1' | ||
| 77 | + | ||
| 78 | + # Execute ctbutterfly, make sure we catch any exception | ||
| 81 | try: | 79 | try: |
| 82 | - butterfly.run() | ||
| 83 | - self.test_try_success() | ||
| 84 | - #except Exception as e: | ||
| 85 | - # msg = "Exception occured in ctbutterfly: %s." % (e,) | 80 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 86 | except: | 81 | except: |
| 87 | - msg = "Exception occured in ctbutterfly." | ||
| 88 | - self.test_try_failure(msg) | 82 | + pass |
| 83 | + | ||
| 84 | + # Check if execution was successful | ||
| 85 | + self.test_assert(rc == 0, | ||
| 86 | + 'Successful ctbutterfly execution on command line') | ||
| 87 | + | ||
| 88 | + # Check result file | ||
| 89 | + self._check_result_file('ctbutterfly_cmd1.txt') | ||
| 89 | 90 | ||
| 90 | - # Save results | ||
| 91 | - self.test_try("Save results") | 91 | + # Setup ctbutterfly command |
| 92 | + cmd = ctbutterfly+' inobs="event_file_that_does_not_exist.fits"'+\ | ||
| 93 | + ' outfile="ctbutterfly_cmd2.txt"'+ \ | ||
| 94 | + ' inmodel="data/crab.xml" srcname="Crab"'+ \ | ||
| 95 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 96 | + ' emin=0.1 emax=100.0'+ \ | ||
| 97 | + ' logfile="ctbutterfly_cmd2.log" chatter=1' | ||
| 98 | + | ||
| 99 | + # Execute ctbutterfly, make sure we catch any exception | ||
| 92 | try: | 100 | try: |
| 93 | - butterfly.save() | ||
| 94 | - self.test_try_success() | ||
| 95 | - #except Exception as e: | ||
| 96 | - # msg = "Exception occured in saving butterfly diagram: %s." % (e,) | 101 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 97 | except: | 102 | except: |
| 98 | - msg = "Exception occured in saving butterfly diagram." | ||
| 99 | - self.test_try_failure(msg) | 103 | + pass |
| 104 | + | ||
| 105 | + # Check if execution failed | ||
| 106 | + self.test_assert(rc != 0, | ||
| 107 | + 'Failure of ctbutterfly execution on command line') | ||
| 108 | + | ||
| 109 | + # Return | ||
| 110 | + return | ||
| 111 | + | ||
| 112 | + # Test ctbutterfly from Python | ||
| 113 | + def _test_python(self): | ||
| 114 | + """ | ||
| 115 | + Test ctbutterfly from Python. | ||
| 116 | + """ | ||
| 117 | + # Set-up ctbutterfly | ||
| 118 | + butterfly = ctools.ctbutterfly() | ||
| 119 | + butterfly['inobs'] = 'data/crab_events.fits' | ||
| 120 | + butterfly['inmodel'] = 'data/crab.xml' | ||
| 121 | + butterfly['srcname'] = 'Crab' | ||
| 122 | + butterfly['caldb'] = 'prod2' | ||
| 123 | + butterfly['irf'] = 'South_0.5h' | ||
| 124 | + butterfly['emin'] = 0.1 | ||
| 125 | + butterfly['emax'] = 100.0 | ||
| 126 | + butterfly['outfile'] = 'ctbutterfly_py1.txt' | ||
| 127 | + butterfly['logfile'] = 'ctbutterfly_py1.log' | ||
| 128 | + butterfly['chatter'] = 2 | ||
| 129 | + | ||
| 130 | + # Run ctbutterfly tool | ||
| 131 | + butterfly.logFileOpen() # Make sure we get a log file | ||
| 132 | + butterfly.run() | ||
| 133 | + butterfly.save() | ||
| 134 | + | ||
| 135 | + # Check result file | ||
| 136 | + self._check_result_file('ctbutterfly_py1.txt') | ||
| 137 | + | ||
| 138 | + # Return | ||
| 139 | + return | ||
| 140 | + | ||
| 141 | + # Check result file | ||
| 142 | + def _check_result_file(self, filename): | ||
| 143 | + """ | ||
| 144 | + Check result file. | ||
| 145 | + """ | ||
| 146 | + # Open result file as CSV file | ||
| 147 | + results = gammalib.GCsv(filename) | ||
| 148 | + | ||
| 149 | + # Check dimensions | ||
| 150 | + self.test_value(results.nrows(), 100, 'Check for 100 rows in butterfly file') | ||
| 151 | + self.test_value(results.ncols(), 4, 'Check for 4 columns in butterfly file') | ||
| 100 | 152 | ||
| 101 | # Return | 153 | # Return |
| 102 | return | 154 | return |
test/test_ctcubemask.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 | 24 | ||
| @@ -37,10 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,10 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.cntmap_name = "data/crab_cntmap.fits" | ||
| 42 | - self.regfile = "data/exclusion.reg" | ||
| 43 | - | ||
| 44 | # Return | 41 | # Return |
| 45 | return | 42 | return |
| 46 | 43 | ||
| @@ -50,51 +47,108 @@ class Test(gammalib.GPythonTestSuite): | @@ -50,51 +47,108 @@ class Test(gammalib.GPythonTestSuite): | ||
| 50 | Set all test functions. | 47 | Set all test functions. |
| 51 | """ | 48 | """ |
| 52 | # Set test name | 49 | # Set test name |
| 53 | - self.name("ctcubemask") | 50 | + self.name('ctcubemask') |
| 54 | 51 | ||
| 55 | # Append tests | 52 | # Append tests |
| 56 | - self.append(self.test_functional, "Test ctcubemask functionality") | 53 | + self.append(self._test_cmd, 'Test ctcubemask on command line') |
| 54 | + self.append(self._test_python, 'Test ctcubemask from Python') | ||
| 57 | 55 | ||
| 58 | # Return | 56 | # Return |
| 59 | return | 57 | return |
| 60 | 58 | ||
| 61 | - # Test ctcubemask functionnality | ||
| 62 | - def test_functional(self): | 59 | + # Test ctcubemask on command line |
| 60 | + def _test_cmd(self): | ||
| 63 | """ | 61 | """ |
| 64 | - Test ctcubemask functionnality. | 62 | + Test ctcubemask on the command line. |
| 65 | """ | 63 | """ |
| 66 | - # Set-up ctcubemask | ||
| 67 | - mask = ctools.ctcubemask() | ||
| 68 | - mask["inobs"] = self.cntmap_name | ||
| 69 | - mask["regfile"] = self.regfile | ||
| 70 | - mask["outcube"] = "filtered_cntmap.fits" | ||
| 71 | - mask["ra"] = 83.63 | ||
| 72 | - mask["dec"] = 22.01 | ||
| 73 | - mask["rad"] = 2.0 | ||
| 74 | - mask["emin"] = 0.1 | ||
| 75 | - mask["emax"] = 100 | ||
| 76 | - | ||
| 77 | - # Run tool | ||
| 78 | - self.test_try("Run ctcubemask") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctcubemask = '../src/ctcubemask/ctcubemask' | ||
| 67 | + else: | ||
| 68 | + ctcubemask = 'ctcubemask' | ||
| 69 | + | ||
| 70 | + # Setup ctcubemask command | ||
| 71 | + cmd = ctcubemask+' inobs="data/crab_cntmap.fits"'+ \ | ||
| 72 | + ' regfile="data/exclusion.reg"'+ \ | ||
| 73 | + ' outcube="ctcubemask_cmd1.fits"'+ \ | ||
| 74 | + ' ra=83.63 dec=22.01 rad=2.0'+ \ | ||
| 75 | + ' emin=0.1 emax=100.0'+ \ | ||
| 76 | + ' logfile="ctcubemask_cmd1.log" chatter=1' | ||
| 77 | + | ||
| 78 | + # Execute ctcubemask, make sure we catch any exception | ||
| 79 | try: | 79 | try: |
| 80 | - mask.run() | ||
| 81 | - self.test_try_success() | ||
| 82 | - #except Exception as e: | ||
| 83 | - # msg = "Exception occured in ctcubemask: %s." % (e,) | 80 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 84 | except: | 81 | except: |
| 85 | - msg = "Exception occured in ctcubemask." | ||
| 86 | - self.test_try_failure(msg) | 82 | + pass |
| 83 | + | ||
| 84 | + # Check if execution was successful | ||
| 85 | + self.test_assert(rc == 0, | ||
| 86 | + 'Successful ctcubemask execution on command line') | ||
| 87 | + | ||
| 88 | + # Check result file | ||
| 89 | + self._check_result_file('ctcubemask_cmd1.fits') | ||
| 87 | 90 | ||
| 88 | - # Save counts cube | ||
| 89 | - self.test_try("Save counts cube") | 91 | + # Setup ctcubemask command |
| 92 | + cmd = ctcubemask+' inobs="counts_cube_that_does_not_exist.fits"'+ \ | ||
| 93 | + ' regfile="data/exclusion.reg"'+ \ | ||
| 94 | + ' outcube="ctcubemask_cmd2.fits"'+ \ | ||
| 95 | + ' ra=83.63 dec=22.01 rad=2.0'+ \ | ||
| 96 | + ' emin=0.1 emax=100.0'+ \ | ||
| 97 | + ' logfile="ctcubemask_cmd2.log" chatter=2' | ||
| 98 | + | ||
| 99 | + # Execute ctcubemask, make sure we catch any exception | ||
| 90 | try: | 100 | try: |
| 91 | - mask.save() | ||
| 92 | - self.test_try_success() | ||
| 93 | - #except Exception as e: | ||
| 94 | - # msg = "Exception occured in saving counts cube: %s." % (e,) | 101 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 95 | except: | 102 | except: |
| 96 | - msg = "Exception occured in saving counts cube." | ||
| 97 | - self.test_try_failure(msg) | 103 | + pass |
| 104 | + | ||
| 105 | + # Check if execution failed | ||
| 106 | + self.test_assert(rc != 0, | ||
| 107 | + 'Failure of ctcubemask execution on command line') | ||
| 108 | + | ||
| 109 | + # Return | ||
| 110 | + return | ||
| 111 | + | ||
| 112 | + # Test ctcubemask from Python | ||
| 113 | + def _test_python(self): | ||
| 114 | + """ | ||
| 115 | + Test ctcubemask from Python. | ||
| 116 | + """ | ||
| 117 | + # Set-up ctcubemask | ||
| 118 | + mask = ctools.ctcubemask() | ||
| 119 | + mask['inobs'] = 'data/crab_cntmap.fits' | ||
| 120 | + mask['regfile'] = 'data/exclusion.reg' | ||
| 121 | + mask['outcube'] = 'ctcubemask_py1.fits' | ||
| 122 | + mask['ra'] = 83.63 | ||
| 123 | + mask['dec'] = 22.01 | ||
| 124 | + mask['rad'] = 2.0 | ||
| 125 | + mask['emin'] = 0.1 | ||
| 126 | + mask['emax'] = 100.0 | ||
| 127 | + mask['logfile'] = 'ctcubemask_py1.log' | ||
| 128 | + mask['chatter'] = 2 | ||
| 129 | + | ||
| 130 | + # Run ctcubemask tool | ||
| 131 | + mask.logFileOpen() # Make sure we get a log file | ||
| 132 | + mask.run() | ||
| 133 | + mask.save() | ||
| 134 | + | ||
| 135 | + # Check result file | ||
| 136 | + self._check_result_file('ctcubemask_py1.fits') | ||
| 137 | + | ||
| 138 | + # Return | ||
| 139 | + return | ||
| 140 | + | ||
| 141 | + # Check result file | ||
| 142 | + def _check_result_file(self, filename): | ||
| 143 | + """ | ||
| 144 | + Check result file. | ||
| 145 | + """ | ||
| 146 | + # Load counts cube | ||
| 147 | + cube = gammalib.GCTAEventCube(filename) | ||
| 148 | + | ||
| 149 | + # Check counts cube | ||
| 150 | + self.test_value(cube.size(), 800000, 'Check for 800000 cube bins') | ||
| 151 | + self.test_value(cube.number(), 4921, 'Check for 4921 events') | ||
| 98 | 152 | ||
| 99 | # Return | 153 | # Return |
| 100 | return | 154 | return |
test/test_ctedispcube.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 | 24 | ||
| @@ -37,11 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,11 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - self.caldb = "irf" | ||
| 43 | - self.irf = "cta_dummy_irf" | ||
| 44 | - | ||
| 45 | # Return | 41 | # Return |
| 46 | return | 42 | return |
| 47 | 43 | ||
| @@ -51,61 +47,124 @@ class Test(gammalib.GPythonTestSuite): | @@ -51,61 +47,124 @@ class Test(gammalib.GPythonTestSuite): | ||
| 51 | Set all test functions. | 47 | Set all test functions. |
| 52 | """ | 48 | """ |
| 53 | # Set test name | 49 | # Set test name |
| 54 | - self.name("ctedispcube") | 50 | + self.name('ctedispcube') |
| 55 | 51 | ||
| 56 | # Append tests | 52 | # Append tests |
| 57 | - self.append(self.test_functional, "Test ctedispcube functionality") | 53 | + self.append(self._test_cmd, 'Test ctedispcube on command line') |
| 54 | + self.append(self._test_python, 'Test ctedispcube from Python') | ||
| 58 | 55 | ||
| 59 | # Return | 56 | # Return |
| 60 | return | 57 | return |
| 61 | 58 | ||
| 62 | - # Test ctedispcube functionnality | ||
| 63 | - def test_functional(self): | 59 | + # Test ctedispcube on command line |
| 60 | + def _test_cmd(self): | ||
| 64 | """ | 61 | """ |
| 65 | - Test ctedispcube functionnality. | 62 | + Test ctedispcube on the command line. |
| 66 | """ | 63 | """ |
| 67 | - # Set-up ctedispcube | ||
| 68 | - edispcube = ctools.ctedispcube() | ||
| 69 | - edispcube["inobs"] = self.events_name | ||
| 70 | - edispcube["incube"] = "NONE" | ||
| 71 | - edispcube["outcube"] = "edispcube.fits" | ||
| 72 | - edispcube["caldb"] = self.caldb | ||
| 73 | - edispcube["irf"] = self.irf | ||
| 74 | - edispcube["ebinalg"] = "LOG" | ||
| 75 | - edispcube["emin"] = 0.1 | ||
| 76 | - edispcube["emax"] = 100 | ||
| 77 | - edispcube["enumbins"] = 20 | ||
| 78 | - edispcube["nxpix"] = 10 | ||
| 79 | - edispcube["nypix"] = 10 | ||
| 80 | - edispcube["binsz"] = 0.4 | ||
| 81 | - edispcube["coordsys"] = "CEL" | ||
| 82 | - edispcube["proj"] = "CAR" | ||
| 83 | - edispcube["xref"] = 83.63 | ||
| 84 | - edispcube["yref"] = 22.01 | ||
| 85 | - edispcube["migramax"] = 2.0 | ||
| 86 | - edispcube["migrabins"] = 10 | ||
| 87 | - | ||
| 88 | - # Run tool | ||
| 89 | - self.test_try("Run ctedispcube") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctedispcube = '../src/ctedispcube/ctedispcube' | ||
| 67 | + else: | ||
| 68 | + ctedispcube = 'ctedispcube' | ||
| 69 | + | ||
| 70 | + # Setup ctedispcube command | ||
| 71 | + cmd = ctedispcube+' inobs="data/crab_events.fits"'+ \ | ||
| 72 | + ' incube="NONE"'+ \ | ||
| 73 | + ' outcube="ctedispcube_cmd1.fits"'+ \ | ||
| 74 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 75 | + ' ebinalg="LOG" emin=0.1 emax=100.0 enumbins=20'+ \ | ||
| 76 | + ' nxpix=10 nypix=10 binsz=0.4'+ \ | ||
| 77 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 78 | + ' migramax=2.0 migrabins=10'+ \ | ||
| 79 | + ' logfile="ctedispcube_cmd1.log" chatter=1' | ||
| 80 | + | ||
| 81 | + # Execute ctedispcube, make sure we catch any exception | ||
| 90 | try: | 82 | try: |
| 91 | - edispcube.run() | ||
| 92 | - self.test_try_success() | ||
| 93 | - #except Exception as e: | ||
| 94 | - # msg = "Exception occured in ctedispcube: %s." % (e,) | 83 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 95 | except: | 84 | except: |
| 96 | - msg = "Exception occured in ctedispcube." | ||
| 97 | - self.test_try_failure(msg) | 85 | + pass |
| 86 | + | ||
| 87 | + # Check if execution was successful | ||
| 88 | + self.test_assert(rc == 0, | ||
| 89 | + 'Successful ctedispcube execution on command line') | ||
| 90 | + | ||
| 91 | + # Check result file | ||
| 92 | + self._check_result_file('ctedispcube_cmd1.fits') | ||
| 98 | 93 | ||
| 99 | - # Save EDISP cube | ||
| 100 | - self.test_try("Save EDISP cube") | 94 | + # Setup ctedispcube command |
| 95 | + cmd = ctedispcube+' inobs="events_that_do_not_exist.fits"'+ \ | ||
| 96 | + ' incube="NONE"'+ \ | ||
| 97 | + ' outcube="ctedispcube_cmd2.fits"'+ \ | ||
| 98 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 99 | + ' ebinalg="LOG" emin=0.1 emax=100.0 enumbins=20'+ \ | ||
| 100 | + ' nxpix=10 nypix=10 binsz=0.4'+ \ | ||
| 101 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 102 | + ' migramax=2.0 migrabins=10'+ \ | ||
| 103 | + ' logfile="ctedispcube_cmd2.log" chatter=2' | ||
| 104 | + | ||
| 105 | + # Execute ctedispcube, make sure we catch any exception | ||
| 101 | try: | 106 | try: |
| 102 | - edispcube.save() | ||
| 103 | - self.test_try_success() | ||
| 104 | - #except Exception as e: | ||
| 105 | - # msg = "Exception occured in saving EDISP cube: %s." % (e,) | 107 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 106 | except: | 108 | except: |
| 107 | - msg = "Exception occured in saving EDISP cubes." | ||
| 108 | - self.test_try_failure(msg) | 109 | + pass |
| 110 | + | ||
| 111 | + # Check if execution failed | ||
| 112 | + self.test_assert(rc != 0, | ||
| 113 | + 'Failure of ctedispcube execution on command line') | ||
| 114 | + | ||
| 115 | + # Return | ||
| 116 | + return | ||
| 117 | + | ||
| 118 | + # Test ctedispcube from Python | ||
| 119 | + def _test_python(self): | ||
| 120 | + """ | ||
| 121 | + Test ctedispcube from Python. | ||
| 122 | + """ | ||
| 123 | + # Set-up ctedispcube | ||
| 124 | + edispcube = ctools.ctedispcube() | ||
| 125 | + edispcube['inobs'] = 'data/crab_events.fits' | ||
| 126 | + edispcube['incube'] = 'NONE' | ||
| 127 | + edispcube['outcube'] = 'ctedispcube_py1.fits' | ||
| 128 | + edispcube['caldb'] = 'prod2' | ||
| 129 | + edispcube['irf'] = 'South_0.5h' | ||
| 130 | + edispcube['ebinalg'] = 'LOG' | ||
| 131 | + edispcube['emin'] = 0.1 | ||
| 132 | + edispcube['emax'] = 100 | ||
| 133 | + edispcube['enumbins'] = 20 | ||
| 134 | + edispcube['nxpix'] = 10 | ||
| 135 | + edispcube['nypix'] = 10 | ||
| 136 | + edispcube['binsz'] = 0.4 | ||
| 137 | + edispcube['coordsys'] = 'CEL' | ||
| 138 | + edispcube['proj'] = 'CAR' | ||
| 139 | + edispcube['xref'] = 83.63 | ||
| 140 | + edispcube['yref'] = 22.01 | ||
| 141 | + edispcube['migramax'] = 2.0 | ||
| 142 | + edispcube['migrabins'] = 10 | ||
| 143 | + edispcube['logfile'] = 'ctedispcube_py1.log' | ||
| 144 | + edispcube['chatter'] = 2 | ||
| 145 | + | ||
| 146 | + # Run ctedispcube tool | ||
| 147 | + edispcube.logFileOpen() # Make sure we get a log file | ||
| 148 | + edispcube.run() | ||
| 149 | + edispcube.save() | ||
| 150 | + | ||
| 151 | + # Check result file | ||
| 152 | + self._check_result_file('ctedispcube_py1.fits') | ||
| 153 | + | ||
| 154 | + # Return | ||
| 155 | + return | ||
| 156 | + | ||
| 157 | + # Check result file | ||
| 158 | + def _check_result_file(self, filename): | ||
| 159 | + """ | ||
| 160 | + Check result file. | ||
| 161 | + """ | ||
| 162 | + # Open result file | ||
| 163 | + result = gammalib.GCTACubeEdisp(filename) | ||
| 164 | + | ||
| 165 | + # Check dimensions | ||
| 166 | + self.test_value(len(result.energies()), 21, 'Check for 21 energy maps') | ||
| 167 | + self.test_value(len(result.migras()), 10, 'Check for 10 migration bins') | ||
| 109 | 168 | ||
| 110 | # Return | 169 | # Return |
| 111 | return | 170 | return |
test/test_cterror.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 | 24 | ||
| @@ -53,49 +54,122 @@ class Test(gammalib.GPythonTestSuite): | @@ -53,49 +54,122 @@ class Test(gammalib.GPythonTestSuite): | ||
| 53 | Set all test functions. | 54 | Set all test functions. |
| 54 | """ | 55 | """ |
| 55 | # Set test name | 56 | # Set test name |
| 56 | - self.name("cterror") | 57 | + self.name('cterror') |
| 57 | 58 | ||
| 58 | # Append tests | 59 | # Append tests |
| 59 | - self.append(self.test_functional, "Test cterror functionality") | 60 | + self.append(self._test_cmd, 'Test cterror on command line') |
| 61 | + self.append(self._test_python, 'Test cterror from Python') | ||
| 60 | 62 | ||
| 61 | # Return | 63 | # Return |
| 62 | return | 64 | return |
| 63 | 65 | ||
| 64 | - # Test cttsmap functionnality | ||
| 65 | - def test_functional(self): | 66 | + # Test cterror on command line |
| 67 | + def _test_cmd(self): | ||
| 66 | """ | 68 | """ |
| 67 | - Test cterror functionnality. | 69 | + Test cterror on the command line. |
| 68 | """ | 70 | """ |
| 69 | - # Set-up cterror | ||
| 70 | - error = ctools.cterror() | ||
| 71 | - error["inobs"] = self.events_name | ||
| 72 | - error["inmodel"] = self.model_name | ||
| 73 | - error["outmodel"] = self.result_name | ||
| 74 | - error["srcname"] = "Crab" | ||
| 75 | - error["caldb"] = self.caldb | ||
| 76 | - error["irf"] = self.irf | ||
| 77 | - | ||
| 78 | - # Run tool | ||
| 79 | - self.test_try("Run cterror") | 71 | + # Kluge to set the command (installed version has no README file) |
| 72 | + if os.path.isfile('README'): | ||
| 73 | + cterror = '../src/cterror/cterror' | ||
| 74 | + else: | ||
| 75 | + cterror = 'cterror' | ||
| 76 | + | ||
| 77 | + # Setup cterror command | ||
| 78 | + cmd = cterror+' inobs="data/crab_events.fits"'+ \ | ||
| 79 | + ' inmodel="data/crab.xml" srcname="Crab"'+ \ | ||
| 80 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 81 | + ' outmodel="cterror_cmd1.xml"'+ \ | ||
| 82 | + ' logfile="cterror_cmd1.log" chatter=1' | ||
| 83 | + | ||
| 84 | + # Execute cterror, make sure we catch any exception | ||
| 80 | try: | 85 | try: |
| 81 | - error.run() | ||
| 82 | - self.test_try_success() | ||
| 83 | - #except Exception as e: | ||
| 84 | - # msg = "Exception occured in cterror: %s." % (e,) | 86 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 85 | except: | 87 | except: |
| 86 | - msg = "Exception occured in cterror." | ||
| 87 | - self.test_try_failure(msg) | 88 | + pass |
| 89 | + | ||
| 90 | + # Check if execution was successful | ||
| 91 | + self.test_assert(rc == 0, | ||
| 92 | + 'Successful cterror execution on command line') | ||
| 93 | + | ||
| 94 | + # Check result file | ||
| 95 | + self._check_result_file('cterror_cmd1.xml') | ||
| 96 | + | ||
| 97 | + # Setup cterror command | ||
| 98 | + cmd = cterror+' inobs="event_file_that_does_not_exist.fits"'+ \ | ||
| 99 | + ' inmodel="data/crab.xml" srcname="Crab"'+ \ | ||
| 100 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 101 | + ' outmodel="cterror_cmd2.xml"'+ \ | ||
| 102 | + ' logfile="cterror_cmd2.log" chatter=1' | ||
| 88 | 103 | ||
| 89 | - # Save results | ||
| 90 | - self.test_try("Save results") | 104 | + # Execute cterror, make sure we catch any exception |
| 91 | try: | 105 | try: |
| 92 | - error.save() | ||
| 93 | - self.test_try_success() | ||
| 94 | - #except Exception as e: | ||
| 95 | - # msg = "Exception occured in saving results: %s." % (e,) | 106 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 96 | except: | 107 | except: |
| 97 | - msg = "Exception occured in saving results." | ||
| 98 | - self.test_try_failure(msg) | 108 | + pass |
| 109 | + | ||
| 110 | + # Check if execution failed | ||
| 111 | + self.test_assert(rc != 0, | ||
| 112 | + 'Failure of cterror execution on command line') | ||
| 113 | + | ||
| 114 | + # Return | ||
| 115 | + return | ||
| 116 | + | ||
| 117 | + # Test cterror from Python | ||
| 118 | + def _test_python(self): | ||
| 119 | + """ | ||
| 120 | + Test cterror from Python. | ||
| 121 | + """ | ||
| 122 | + # Set-up cterror | ||
| 123 | + error = ctools.cterror() | ||
| 124 | + error['inobs'] = 'data/crab_events.fits' | ||
| 125 | + error['inmodel'] = 'data/crab.xml' | ||
| 126 | + error['outmodel'] = 'cterror_py1.xml' | ||
| 127 | + error['srcname'] = 'Crab' | ||
| 128 | + error['caldb'] = 'prod2' | ||
| 129 | + error['irf'] = 'South_0.5h' | ||
| 130 | + error['logfile'] = 'cterror_py1.log' | ||
| 131 | + error['chatter'] = 2 | ||
| 132 | + | ||
| 133 | + # Run cterror tool | ||
| 134 | + error.logFileOpen() # Make sure we get a log file | ||
| 135 | + error.run() | ||
| 136 | + error.save() | ||
| 137 | + | ||
| 138 | + # Check result file | ||
| 139 | + self._check_result_file('cterror_py1.xml') | ||
| 140 | + | ||
| 141 | + # Return | ||
| 142 | + return | ||
| 143 | + | ||
| 144 | + # Check result file | ||
| 145 | + def _check_result_file(self, filename): | ||
| 146 | + """ | ||
| 147 | + Check result file. | ||
| 148 | + """ | ||
| 149 | + # Open result file | ||
| 150 | + result = gammalib.GModels(filename) | ||
| 151 | + | ||
| 152 | + # Check results | ||
| 153 | + self.test_value(result['Crab']['Prefactor'].value(), 1.58907e-16, | ||
| 154 | + 1.0e-3, 'Check fitted Crab Prefactor') | ||
| 155 | + self.test_value(result['Crab']['Prefactor'].error(), 0.0529105e-16, | ||
| 156 | + 1.0e-3, 'Check Crab Prefactor error') | ||
| 157 | + self.test_value(result['Crab']['Index'].value(), -2.43549, | ||
| 158 | + 1.0e-3, 'Check fitted Crab Index') | ||
| 159 | + self.test_value(result['Crab']['Index'].error(), 0.027804, | ||
| 160 | + 1.0e-3, 'Check Crab Index error') | ||
| 161 | + self.test_value(result['Background']['Prefactor'].value(), 61.6919e-6, | ||
| 162 | + 1.0e-3, 'Check fitted background Prefactor') | ||
| 163 | + self.test_value(result['Background']['Prefactor'].error(), 1.49438e-6, | ||
| 164 | + 1.0e-3, 'Check background Prefactor error') | ||
| 165 | + self.test_value(result['Background']['Index'].value(), -2.20535, | ||
| 166 | + 1.0e-3, 'Check fitted background Index') | ||
| 167 | + self.test_value(result['Background']['Index'].error(), 0.0113269, | ||
| 168 | + 1.0e-3, 'Check background Index error') | ||
| 169 | + self.test_value(result['Background']['Sigma'].value(), 3.04252, | ||
| 170 | + 1.0e-3, 'Check fitted background Sigma') | ||
| 171 | + self.test_value(result['Background']['Sigma'].error(), 0.0307008, | ||
| 172 | + 1.0e-3, 'Check background Sigma error') | ||
| 99 | 173 | ||
| 100 | # Return | 174 | # Return |
| 101 | return | 175 | return |
test/test_ctexpcube.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 | 24 | ||
| @@ -37,11 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,11 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - self.caldb = "irf" | ||
| 43 | - self.irf = "cta_dummy_irf" | ||
| 44 | - | ||
| 45 | # Return | 41 | # Return |
| 46 | return | 42 | return |
| 47 | 43 | ||
| @@ -51,59 +47,119 @@ class Test(gammalib.GPythonTestSuite): | @@ -51,59 +47,119 @@ class Test(gammalib.GPythonTestSuite): | ||
| 51 | Set all test functions. | 47 | Set all test functions. |
| 52 | """ | 48 | """ |
| 53 | # Set test name | 49 | # Set test name |
| 54 | - self.name("ctexpcube") | 50 | + self.name('ctexpcube') |
| 55 | 51 | ||
| 56 | # Append tests | 52 | # Append tests |
| 57 | - self.append(self.test_functional, "Test ctexpcube functionality") | 53 | + self.append(self._test_cmd, 'Test ctexpcube on command line') |
| 54 | + self.append(self._test_python, 'Test ctexpcube from Python') | ||
| 58 | 55 | ||
| 59 | # Return | 56 | # Return |
| 60 | return | 57 | return |
| 61 | 58 | ||
| 62 | - # Test ctexpcube functionnality | ||
| 63 | - def test_functional(self): | 59 | + # Test ctexpcube on command line |
| 60 | + def _test_cmd(self): | ||
| 64 | """ | 61 | """ |
| 65 | - Test ctexpcube functionnality. | 62 | + Test ctexpcube on the command line. |
| 66 | """ | 63 | """ |
| 67 | - # Set-up ctexpcube | ||
| 68 | - expcube = ctools.ctexpcube() | ||
| 69 | - expcube["inobs"] = self.events_name | ||
| 70 | - expcube["incube"] = "NONE" | ||
| 71 | - expcube["outcube"] = "expcube.fits" | ||
| 72 | - expcube["caldb"] = self.caldb | ||
| 73 | - expcube["irf"] = self.irf | ||
| 74 | - expcube["ebinalg"] = "LOG" | ||
| 75 | - expcube["emin"] = 0.1 | ||
| 76 | - expcube["emax"] = 100 | ||
| 77 | - expcube["enumbins"] = 20 | ||
| 78 | - expcube["nxpix"] = 200 | ||
| 79 | - expcube["nypix"] = 200 | ||
| 80 | - expcube["binsz"] = 0.02 | ||
| 81 | - expcube["coordsys"] = "CEL" | ||
| 82 | - expcube["proj"] = "CAR" | ||
| 83 | - expcube["xref"] = 83.63 | ||
| 84 | - expcube["yref"] = 22.01 | ||
| 85 | - | ||
| 86 | - # Run tool | ||
| 87 | - self.test_try("Run ctexpcube") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctexpcube = '../src/ctexpcube/ctexpcube' | ||
| 67 | + else: | ||
| 68 | + ctexpcube = 'ctexpcube' | ||
| 69 | + | ||
| 70 | + # Setup ctexpcube command | ||
| 71 | + cmd = ctexpcube+' inobs="data/crab_events.fits"'+ \ | ||
| 72 | + ' incube="NONE"'+ \ | ||
| 73 | + ' outcube="ctexpcube_cmd1.fits"'+ \ | ||
| 74 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 75 | + ' ebinalg="LOG" emin=0.1 emax=100.0 enumbins=20'+ \ | ||
| 76 | + ' nxpix=200 nypix=200 binsz=0.02'+ \ | ||
| 77 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 78 | + ' logfile="ctexpcube_cmd1.log" chatter=1' | ||
| 79 | + | ||
| 80 | + # Execute ctexpcube, make sure we catch any exception | ||
| 88 | try: | 81 | try: |
| 89 | - expcube.run() | ||
| 90 | - self.test_try_success() | ||
| 91 | - #except Exception as e: | ||
| 92 | - # msg = "Exception occured in ctexpcube: %s." % (e,) | 82 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 93 | except: | 83 | except: |
| 94 | - msg = "Exception occured in ctexpcube." | ||
| 95 | - self.test_try_failure(msg) | 84 | + pass |
| 85 | + | ||
| 86 | + # Check if execution was successful | ||
| 87 | + self.test_assert(rc == 0, | ||
| 88 | + 'Successful ctexpcube execution on command line') | ||
| 89 | + | ||
| 90 | + # Check result file | ||
| 91 | + self._check_result_file('ctexpcube_cmd1.fits') | ||
| 96 | 92 | ||
| 97 | - # Save exposure cube | ||
| 98 | - self.test_try("Save exposure cube") | 93 | + # Setup ctexpcube command |
| 94 | + cmd = ctexpcube+' inobs="event_file_that_does_not_exist.fits"'+ \ | ||
| 95 | + ' incube="NONE"'+ \ | ||
| 96 | + ' outcube="ctexpcube_cmd2.fits"'+ \ | ||
| 97 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 98 | + ' ebinalg="LOG" emin=0.1 emax=100.0 enumbins=20'+ \ | ||
| 99 | + ' nxpix=200 nypix=200 binsz=0.02'+ \ | ||
| 100 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 101 | + ' logfile="ctexpcube_cmd2.log" chatter=1' | ||
| 102 | + | ||
| 103 | + # Execute ctexpcube, make sure we catch any exception | ||
| 99 | try: | 104 | try: |
| 100 | - expcube.save() | ||
| 101 | - self.test_try_success() | ||
| 102 | - #except Exception as e: | ||
| 103 | - # msg = "Exception occured in saving exposure cube: %s." % (e,) | 105 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 104 | except: | 106 | except: |
| 105 | - msg = "Exception occured in saving exposure cube." | ||
| 106 | - self.test_try_failure(msg) | 107 | + pass |
| 108 | + | ||
| 109 | + # Check if execution failed | ||
| 110 | + self.test_assert(rc != 0, | ||
| 111 | + 'Failure of ctexpcube execution on command line') | ||
| 112 | + | ||
| 113 | + # Return | ||
| 114 | + return | ||
| 115 | + | ||
| 116 | + # Test ctexpcube from Python | ||
| 117 | + def _test_python(self): | ||
| 118 | + """ | ||
| 119 | + Test ctexpcube from Python. | ||
| 120 | + """ | ||
| 121 | + # Set-up ctexpcube | ||
| 122 | + expcube = ctools.ctexpcube() | ||
| 123 | + expcube['inobs'] = 'data/crab_events.fits' | ||
| 124 | + expcube['incube'] = 'NONE' | ||
| 125 | + expcube['outcube'] = 'ctexpcube_py1.fits' | ||
| 126 | + expcube['caldb'] = 'prod2' | ||
| 127 | + expcube['irf'] = 'South_0.5h' | ||
| 128 | + expcube['ebinalg'] = 'LOG' | ||
| 129 | + expcube['emin'] = 0.1 | ||
| 130 | + expcube['emax'] = 100 | ||
| 131 | + expcube['enumbins'] = 20 | ||
| 132 | + expcube['nxpix'] = 200 | ||
| 133 | + expcube['nypix'] = 200 | ||
| 134 | + expcube['binsz'] = 0.02 | ||
| 135 | + expcube['coordsys'] = 'CEL' | ||
| 136 | + expcube['proj'] = 'CAR' | ||
| 137 | + expcube['xref'] = 83.63 | ||
| 138 | + expcube['yref'] = 22.01 | ||
| 139 | + expcube['logfile'] = 'ctexpcube_py1.log' | ||
| 140 | + expcube['chatter'] = 2 | ||
| 141 | + | ||
| 142 | + # Run ctexpcube tool | ||
| 143 | + expcube.logFileOpen() # Make sure we get a log file | ||
| 144 | + expcube.run() | ||
| 145 | + expcube.save() | ||
| 146 | + | ||
| 147 | + # Check result file | ||
| 148 | + self._check_result_file('ctexpcube_py1.fits') | ||
| 149 | + | ||
| 150 | + # Return | ||
| 151 | + return | ||
| 152 | + | ||
| 153 | + # Check result file | ||
| 154 | + def _check_result_file(self, filename): | ||
| 155 | + """ | ||
| 156 | + Check result file. | ||
| 157 | + """ | ||
| 158 | + # Open result file | ||
| 159 | + result = gammalib.GCTACubeExposure(filename) | ||
| 160 | + | ||
| 161 | + # Check dimensions | ||
| 162 | + self.test_value(len(result.elogmeans()), 20, 'Check for 20 energy bins') | ||
| 107 | 163 | ||
| 108 | # Return | 164 | # Return |
| 109 | return | 165 | return |
test/test_ctlike.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 | 24 | ||
| @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - self.model_name = "data/crab.xml" | ||
| 43 | - self.caldb = "irf" | ||
| 44 | - self.irf = "cta_dummy_irf" | ||
| 45 | - | ||
| 46 | # Return | 41 | # Return |
| 47 | return | 42 | return |
| 48 | 43 | ||
| @@ -52,48 +47,121 @@ class Test(gammalib.GPythonTestSuite): | @@ -52,48 +47,121 @@ class Test(gammalib.GPythonTestSuite): | ||
| 52 | Set all test functions. | 47 | Set all test functions. |
| 53 | """ | 48 | """ |
| 54 | # Set test name | 49 | # Set test name |
| 55 | - self.name("ctlike") | 50 | + self.name('ctlike') |
| 56 | 51 | ||
| 57 | # Append tests | 52 | # Append tests |
| 58 | - self.append(self.test_functional, "Test ctlike functionality") | 53 | + self.append(self._test_cmd, 'Test ctlike on command line') |
| 54 | + self.append(self._test_python, 'Test ctlike from Python') | ||
| 59 | 55 | ||
| 60 | # Return | 56 | # Return |
| 61 | return | 57 | return |
| 62 | 58 | ||
| 63 | - # Test ctlike functionnality | ||
| 64 | - def test_functional(self): | 59 | + # Test ctlike on command line |
| 60 | + def _test_cmd(self): | ||
| 65 | """ | 61 | """ |
| 66 | - Test ctlike functionnality. | 62 | + Test ctlike on the command line. |
| 67 | """ | 63 | """ |
| 68 | - # Set-up ctlike | ||
| 69 | - like = ctools.ctlike() | ||
| 70 | - like["inobs"] = self.events_name | ||
| 71 | - like["inmodel"] = self.model_name | ||
| 72 | - like["caldb"] = self.caldb | ||
| 73 | - like["irf"] = self.irf | ||
| 74 | - like["outmodel"] = "result.xml" | ||
| 75 | - | ||
| 76 | - # Run tool | ||
| 77 | - self.test_try("Run ctlike") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctlike = '../src/ctlike/ctlike' | ||
| 67 | + else: | ||
| 68 | + ctlike = 'ctlike' | ||
| 69 | + | ||
| 70 | + # Setup ctlike command | ||
| 71 | + cmd = ctlike+' inobs="data/crab_events.fits"'+ \ | ||
| 72 | + ' inmodel="data/crab.xml"'+ \ | ||
| 73 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 74 | + ' outmodel="ctlike_cmd1.xml"'+ \ | ||
| 75 | + ' logfile="ctlike_cmd1.log" chatter=1' | ||
| 76 | + | ||
| 77 | + # Execute ctlike, make sure we catch any exception | ||
| 78 | try: | 78 | try: |
| 79 | - like.run() | ||
| 80 | - self.test_try_success() | ||
| 81 | - #except Exception as e: | ||
| 82 | - # msg = "Exception occured in ctlike: %s." % (e,) | 79 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 83 | except: | 80 | except: |
| 84 | - msg = "Exception occured in ctlike." | ||
| 85 | - self.test_try_failure(msg) | 81 | + pass |
| 82 | + | ||
| 83 | + # Check if execution was successful | ||
| 84 | + self.test_assert(rc == 0, | ||
| 85 | + 'Successful ctlike execution on command line') | ||
| 86 | + | ||
| 87 | + # Check result file | ||
| 88 | + self._check_result_file('ctlike_cmd1.xml') | ||
| 86 | 89 | ||
| 87 | - # Save results | ||
| 88 | - self.test_try("Save results") | 90 | + # Setup ctlike command |
| 91 | + cmd = ctlike+' inobs="event_file_that_does_not_exist.fits"'+ \ | ||
| 92 | + ' inmodel="data/crab.xml"'+ \ | ||
| 93 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 94 | + ' outmodel="ctlike_cmd2.xml"'+ \ | ||
| 95 | + ' logfile="ctlike_cmd2.log" chatter=1' | ||
| 96 | + | ||
| 97 | + # Execute ctlike, make sure we catch any exception | ||
| 89 | try: | 98 | try: |
| 90 | - like.save() | ||
| 91 | - self.test_try_success() | ||
| 92 | - #except Exception as e: | ||
| 93 | - # msg = "Exception occured in saving results: %s." % (e,) | 99 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 94 | except: | 100 | except: |
| 95 | - msg = "Exception occured in saving results." | ||
| 96 | - self.test_try_failure(msg) | 101 | + pass |
| 102 | + | ||
| 103 | + # Check if execution failed | ||
| 104 | + self.test_assert(rc != 0, | ||
| 105 | + 'Failure of ctlike execution on command line') | ||
| 106 | + | ||
| 107 | + # Return | ||
| 108 | + return | ||
| 109 | + | ||
| 110 | + # Test ctlike from Python | ||
| 111 | + def _test_python(self): | ||
| 112 | + """ | ||
| 113 | + Test ctlike from Python. | ||
| 114 | + """ | ||
| 115 | + # Set-up ctlike | ||
| 116 | + like = ctools.ctlike() | ||
| 117 | + like['inobs'] = 'data/crab_events.fits' | ||
| 118 | + like['inmodel'] = 'data/crab.xml' | ||
| 119 | + like['caldb'] = 'prod2' | ||
| 120 | + like['irf'] = 'South_0.5h' | ||
| 121 | + like['outmodel'] = 'ctlike_py1.xml' | ||
| 122 | + like['logfile'] = 'ctlike_py1.log' | ||
| 123 | + like['chatter'] = 2 | ||
| 124 | + | ||
| 125 | + # Run ctlike tool | ||
| 126 | + like.logFileOpen() # Make sure we get a log file | ||
| 127 | + like.run() | ||
| 128 | + like.save() | ||
| 129 | + | ||
| 130 | + # Check result file | ||
| 131 | + self._check_result_file('ctlike_py1.xml') | ||
| 132 | + | ||
| 133 | + # Return | ||
| 134 | + return | ||
| 135 | + | ||
| 136 | + # Check result file | ||
| 137 | + def _check_result_file(self, filename): | ||
| 138 | + """ | ||
| 139 | + Check result file. | ||
| 140 | + """ | ||
| 141 | + # Open result file | ||
| 142 | + result = gammalib.GModels(filename) | ||
| 143 | + | ||
| 144 | + # Check results | ||
| 145 | + self.test_value(result['Crab']['Prefactor'].value(), 1.58907e-16, | ||
| 146 | + 1.0e-3, 'Check fitted Crab Prefactor') | ||
| 147 | + self.test_value(result['Crab']['Prefactor'].error(), 0.0526982e-16, | ||
| 148 | + 1.0e-3, 'Check Crab Prefactor error') | ||
| 149 | + self.test_value(result['Crab']['Index'].value(), -2.43549, | ||
| 150 | + 1.0e-3, 'Check fitted Crab Index') | ||
| 151 | + self.test_value(result['Crab']['Index'].error(), 0.0248116, | ||
| 152 | + 1.0e-3, 'Check Crab Index error') | ||
| 153 | + self.test_value(result['Background']['Prefactor'].value(), 61.6919e-6, | ||
| 154 | + 1.0e-3, 'Check fitted background Prefactor') | ||
| 155 | + self.test_value(result['Background']['Prefactor'].error(), 1.49438e-6, | ||
| 156 | + 1.0e-3, 'Check background Prefactor error') | ||
| 157 | + self.test_value(result['Background']['Index'].value(), -2.20535, | ||
| 158 | + 1.0e-3, 'Check fitted background Index') | ||
| 159 | + self.test_value(result['Background']['Index'].error(), 0.0113269, | ||
| 160 | + 1.0e-3, 'Check background Index error') | ||
| 161 | + self.test_value(result['Background']['Sigma'].value(), 3.04252, | ||
| 162 | + 1.0e-3, 'Check fitted background Sigma') | ||
| 163 | + self.test_value(result['Background']['Sigma'].error(), 0.0307008, | ||
| 164 | + 1.0e-3, 'Check background Sigma error') | ||
| 97 | 165 | ||
| 98 | # Return | 166 | # Return |
| 99 | return | 167 | return |
test/test_ctmodel.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 | 24 | ||
| @@ -37,11 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,11 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.model_name = "data/crab.xml" | ||
| 42 | - self.caldb = "irf" | ||
| 43 | - self.irf = "cta_dummy_irf" | ||
| 44 | - | ||
| 45 | # Return | 41 | # Return |
| 46 | return | 42 | return |
| 47 | 43 | ||
| @@ -51,67 +47,139 @@ class Test(gammalib.GPythonTestSuite): | @@ -51,67 +47,139 @@ class Test(gammalib.GPythonTestSuite): | ||
| 51 | Set all test functions. | 47 | Set all test functions. |
| 52 | """ | 48 | """ |
| 53 | # Set test name | 49 | # Set test name |
| 54 | - self.name("ctmodel") | 50 | + self.name('ctmodel') |
| 55 | 51 | ||
| 56 | # Append tests | 52 | # Append tests |
| 57 | - self.append(self.test_functional, "Test ctmodel functionality") | 53 | + self.append(self._test_cmd, 'Test ctmodel on command line') |
| 54 | + self.append(self._test_python, 'Test ctmodel from Python') | ||
| 58 | 55 | ||
| 59 | # Return | 56 | # Return |
| 60 | return | 57 | return |
| 61 | 58 | ||
| 62 | - # Test ctmodel functionnality | ||
| 63 | - def test_functional(self): | 59 | + # Test ctmodel on command line |
| 60 | + def _test_cmd(self): | ||
| 64 | """ | 61 | """ |
| 65 | - Test ctmodel functionnality. | 62 | + Test ctmodel on the command line. |
| 66 | """ | 63 | """ |
| 67 | - # Set-up ctmodel from scratch | ||
| 68 | - model = ctools.ctmodel() | ||
| 69 | - model["incube"] = "NONE" | ||
| 70 | - model["outcube"] = "modmap.fits" | ||
| 71 | - model["inmodel"] = self.model_name | ||
| 72 | - model["inobs"] = "NONE" | ||
| 73 | - model["expcube"] = "NONE" | ||
| 74 | - model["psfcube"] = "NONE" | ||
| 75 | - model["bkgcube"] = "NONE" | ||
| 76 | - model["caldb"] = self.caldb | ||
| 77 | - model["irf"] = self.irf | ||
| 78 | - model["rad"] = 5 | ||
| 79 | - model["ra"] = 83.63 | ||
| 80 | - model["dec"] = 22.01 | ||
| 81 | - model["tmin"] = 0 | ||
| 82 | - model["tmax"] = 1800 | ||
| 83 | - model["emin"] = 0.1 | ||
| 84 | - model["emax"] = 100 | ||
| 85 | - model["enumbins"] = 20 | ||
| 86 | - model["nxpix"] = 200 | ||
| 87 | - model["nypix"] = 200 | ||
| 88 | - model["binsz"] = 0.02 | ||
| 89 | - model["coordsys"] = "CEL" | ||
| 90 | - model["proj"] = "CAR" | ||
| 91 | - model["xref"] = 83.63 | ||
| 92 | - model["yref"] = 22.01 | ||
| 93 | - | ||
| 94 | - # Run tool | ||
| 95 | - self.test_try("Run ctmodel") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctmodel = '../src/ctmodel/ctmodel' | ||
| 67 | + else: | ||
| 68 | + ctmodel = 'ctmodel' | ||
| 69 | + | ||
| 70 | + # Setup ctmodel command | ||
| 71 | + cmd = ctmodel+' incube="NONE" inobs="NONE" expcube="NONE"'+\ | ||
| 72 | + ' psfcube="NONE" bkgcube="NONE"'+ \ | ||
| 73 | + ' outcube="ctmodel_cmd1.fits"'+ \ | ||
| 74 | + ' inmodel="data/crab.xml"'+ \ | ||
| 75 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 76 | + ' rad=5.0 ra=83.63 dec=22.01 tmin=0.0 tmax=1800'+ \ | ||
| 77 | + ' emin=0.1 emax=100.0 enumbins=20 nxpix=200 nypix=200'+ \ | ||
| 78 | + ' binsz=0.02 coordsys="CEL" proj="CAR"'+ \ | ||
| 79 | + ' xref=83.63 yref=22.01'+ \ | ||
| 80 | + ' logfile="ctmodel_cmd1.log" chatter=1' | ||
| 81 | + | ||
| 82 | + # Execute ctmodel, make sure we catch any exception | ||
| 96 | try: | 83 | try: |
| 97 | - model.run() | ||
| 98 | - self.test_try_success() | ||
| 99 | - #except Exception as e: | ||
| 100 | - # msg = "Exception occured in ctmodel: %s." % (e,) | 84 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 101 | except: | 85 | except: |
| 102 | - msg = "Exception occured in ctmodel." | ||
| 103 | - self.test_try_failure(msg) | 86 | + pass |
| 87 | + | ||
| 88 | + # Check if execution was successful | ||
| 89 | + self.test_assert(rc == 0, | ||
| 90 | + 'Successful ctmodel execution on command line') | ||
| 91 | + | ||
| 92 | + # Check result file | ||
| 93 | + self._check_result_file('ctmodel_cmd1.fits') | ||
| 104 | 94 | ||
| 105 | - # Save counts cube | ||
| 106 | - self.test_try("Save model cube") | 95 | + # Setup ctmodel command |
| 96 | + cmd = ctmodel+' incube="NONE" inobs="NONE" expcube="NONE"'+\ | ||
| 97 | + ' psfcube="NONE" bkgcube="NONE"'+ \ | ||
| 98 | + ' outcube="ctmodel_cmd2.fits"'+ \ | ||
| 99 | + ' inmodel="model_that_does_not_exist.xml"'+ \ | ||
| 100 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 101 | + ' rad=5.0 ra=83.63 dec=22.01 tmin=0.0 tmax=1800'+ \ | ||
| 102 | + ' emin=0.1 emax=100.0 enumbins=20 nxpix=200 nypix=200'+ \ | ||
| 103 | + ' binsz=0.02 coordsys="CEL" proj="CAR"'+ \ | ||
| 104 | + ' xref=83.63 yref=22.01'+ \ | ||
| 105 | + ' logfile="ctmodel_cmd2.log" chatter=1' | ||
| 106 | + | ||
| 107 | + # Execute ctmodel, make sure we catch any exception | ||
| 107 | try: | 108 | try: |
| 108 | - model.save() | ||
| 109 | - self.test_try_success() | ||
| 110 | - #except Exception as e: | ||
| 111 | - # msg = "Exception occured in saving model cube: %s." % (e,) | 109 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 112 | except: | 110 | except: |
| 113 | - msg = "Exception occured in saving model cube." | ||
| 114 | - self.test_try_failure(msg) | 111 | + pass |
| 112 | + | ||
| 113 | + # Check if execution failed | ||
| 114 | + self.test_assert(rc != 0, | ||
| 115 | + 'Failure of ctmodel execution on command line') | ||
| 116 | + | ||
| 117 | + # Return | ||
| 118 | + return | ||
| 119 | + | ||
| 120 | + # Test ctmodel from Python | ||
| 121 | + def _test_python(self): | ||
| 122 | + """ | ||
| 123 | + Test ctmodel from Python. | ||
| 124 | + """ | ||
| 125 | + # Set-up ctmodel from scratch | ||
| 126 | + model = ctools.ctmodel() | ||
| 127 | + model['incube'] = 'NONE' | ||
| 128 | + model['outcube'] = 'ctmodel_py1.fits' | ||
| 129 | + model['inmodel'] = 'data/crab.xml' | ||
| 130 | + model['inobs'] = 'NONE' | ||
| 131 | + model['expcube'] = 'NONE' | ||
| 132 | + model['psfcube'] = 'NONE' | ||
| 133 | + model['bkgcube'] = 'NONE' | ||
| 134 | + model['caldb'] = 'prod2' | ||
| 135 | + model['irf'] = 'South_0.5h' | ||
| 136 | + model['rad'] = 5 | ||
| 137 | + model['ra'] = 83.63 | ||
| 138 | + model['dec'] = 22.01 | ||
| 139 | + model['tmin'] = 0 | ||
| 140 | + model['tmax'] = 1800 | ||
| 141 | + model['emin'] = 0.1 | ||
| 142 | + model['emax'] = 100 | ||
| 143 | + model['enumbins'] = 20 | ||
| 144 | + model['nxpix'] = 200 | ||
| 145 | + model['nypix'] = 200 | ||
| 146 | + model['binsz'] = 0.02 | ||
| 147 | + model['coordsys'] = 'CEL' | ||
| 148 | + model['proj'] = 'CAR' | ||
| 149 | + model['xref'] = 83.63 | ||
| 150 | + model['yref'] = 22.01 | ||
| 151 | + model['logfile'] = 'ctmodel_py1.log' | ||
| 152 | + model['chatter'] = 2 | ||
| 153 | + | ||
| 154 | + # Run ctmodel tool | ||
| 155 | + model.logFileOpen() # Make sure we get a log file | ||
| 156 | + model.run() | ||
| 157 | + model.save() | ||
| 158 | + | ||
| 159 | + # Check result file | ||
| 160 | + self._check_result_file('ctmodel_py1.fits') | ||
| 161 | + | ||
| 162 | + # Return | ||
| 163 | + return | ||
| 164 | + | ||
| 165 | + # Check result file | ||
| 166 | + def _check_result_file(self, filename): | ||
| 167 | + """ | ||
| 168 | + Check result file. | ||
| 169 | + """ | ||
| 170 | + # Open result file | ||
| 171 | + fits = gammalib.GFits(filename) | ||
| 172 | + | ||
| 173 | + # Get HDUs | ||
| 174 | + cube = fits['Primary'] | ||
| 175 | + ebounds = fits['EBOUNDS'] | ||
| 176 | + gti = fits['GTI'] | ||
| 177 | + | ||
| 178 | + # Check dimensions | ||
| 179 | + self.test_value(cube.naxis(), 3, 'Check for 3 cube dimensions') | ||
| 180 | + self.test_value(cube.naxes(0), 200, 'Check for 200 pixels in X') | ||
| 181 | + self.test_value(cube.naxes(1), 200, 'Check for 200 pixels in Y') | ||
| 182 | + self.test_value(cube.naxes(2), 20, 'Check for 20 pixels in Z') | ||
| 115 | 183 | ||
| 116 | # Return | 184 | # Return |
| 117 | return | 185 | return |
test/test_ctpsfcube.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 | 24 | ||
| @@ -37,11 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,11 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - self.caldb = "irf" | ||
| 43 | - self.irf = "cta_dummy_irf" | ||
| 44 | - | ||
| 45 | # Return | 41 | # Return |
| 46 | return | 42 | return |
| 47 | 43 | ||
| @@ -51,61 +47,123 @@ class Test(gammalib.GPythonTestSuite): | @@ -51,61 +47,123 @@ class Test(gammalib.GPythonTestSuite): | ||
| 51 | Set all test functions. | 47 | Set all test functions. |
| 52 | """ | 48 | """ |
| 53 | # Set test name | 49 | # Set test name |
| 54 | - self.name("ctpsfcube") | 50 | + self.name('ctpsfcube') |
| 55 | 51 | ||
| 56 | # Append tests | 52 | # Append tests |
| 57 | - self.append(self.test_functional, "Test ctpsfcube functionality") | 53 | + self.append(self._test_cmd, 'Test ctpsfcube on command line') |
| 54 | + self.append(self._test_python, 'Test ctpsfcube from Python') | ||
| 58 | 55 | ||
| 59 | # Return | 56 | # Return |
| 60 | return | 57 | return |
| 61 | 58 | ||
| 62 | - # Test ctpsfcube functionnality | ||
| 63 | - def test_functional(self): | 59 | + # Test ctpsfcube on command line |
| 60 | + def _test_cmd(self): | ||
| 64 | """ | 61 | """ |
| 65 | - Test ctpsfcube functionnality. | 62 | + Test ctpsfcube on the command line. |
| 66 | """ | 63 | """ |
| 67 | - # Set-up ctpsfcube | ||
| 68 | - psfcube = ctools.ctpsfcube() | ||
| 69 | - psfcube["inobs"] = self.events_name | ||
| 70 | - psfcube["incube"] = "NONE" | ||
| 71 | - psfcube["outcube"] = "psfcube.fits" | ||
| 72 | - psfcube["caldb"] = self.caldb | ||
| 73 | - psfcube["irf"] = self.irf | ||
| 74 | - psfcube["ebinalg"] = "LOG" | ||
| 75 | - psfcube["emin"] = 0.1 | ||
| 76 | - psfcube["emax"] = 100 | ||
| 77 | - psfcube["enumbins"] = 20 | ||
| 78 | - psfcube["nxpix"] = 10 | ||
| 79 | - psfcube["nypix"] = 10 | ||
| 80 | - psfcube["binsz"] = 0.4 | ||
| 81 | - psfcube["coordsys"] = "CEL" | ||
| 82 | - psfcube["proj"] = "CAR" | ||
| 83 | - psfcube["xref"] = 83.63 | ||
| 84 | - psfcube["yref"] = 22.01 | ||
| 85 | - psfcube["amax"] = 0.3 | ||
| 86 | - psfcube["anumbins"] = 10 | ||
| 87 | - | ||
| 88 | - # Run tool | ||
| 89 | - self.test_try("Run ctpsfcube") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctpsfcube = '../src/ctpsfcube/ctpsfcube' | ||
| 67 | + else: | ||
| 68 | + ctpsfcube = 'ctpsfcube' | ||
| 69 | + | ||
| 70 | + # Setup ctpsfcube command | ||
| 71 | + cmd = ctpsfcube+' inobs="data/crab_events.fits"'+ \ | ||
| 72 | + ' incube="NONE"'+ \ | ||
| 73 | + ' outcube="ctpsfcube_cmd1.fits"'+ \ | ||
| 74 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 75 | + ' ebinalg="LOG" emin=0.1 emax=100.0 enumbins=20'+ \ | ||
| 76 | + ' nxpix=200 nypix=200 binsz=0.02'+ \ | ||
| 77 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 78 | + ' amax=0.3 anumbins=10'+ \ | ||
| 79 | + ' logfile="ctpsfcube_cmd1.log" chatter=1' | ||
| 80 | + | ||
| 81 | + # Execute ctpsfcube, make sure we catch any exception | ||
| 90 | try: | 82 | try: |
| 91 | - psfcube.run() | ||
| 92 | - self.test_try_success() | ||
| 93 | - #except Exception as e: | ||
| 94 | - # msg = "Exception occured in ctpsfcube: %s." % (e,) | 83 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 95 | except: | 84 | except: |
| 96 | - msg = "Exception occured in ctpsfcube." | ||
| 97 | - self.test_try_failure(msg) | 85 | + pass |
| 86 | + | ||
| 87 | + # Check if execution was successful | ||
| 88 | + self.test_assert(rc == 0, | ||
| 89 | + 'Successful ctpsfcube execution on command line') | ||
| 90 | + | ||
| 91 | + # Check result file | ||
| 92 | + self._check_result_file('ctpsfcube_cmd1.fits') | ||
| 98 | 93 | ||
| 99 | - # Save PSF cube | ||
| 100 | - self.test_try("Save PSF cube") | 94 | + # Setup ctpsfcube command |
| 95 | + cmd = ctpsfcube+' inobs="event_file_that_does_not_exist.fits"'+ \ | ||
| 96 | + ' incube="NONE"'+ \ | ||
| 97 | + ' outcube="ctpsfcube_cmd2.fits"'+ \ | ||
| 98 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 99 | + ' ebinalg="LOG" emin=0.1 emax=100.0 enumbins=20'+ \ | ||
| 100 | + ' nxpix=200 nypix=200 binsz=0.02'+ \ | ||
| 101 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 102 | + ' amax=0.3 anumbins=10'+ \ | ||
| 103 | + ' logfile="ctpsfcube_cmd2.log" chatter=1' | ||
| 104 | + | ||
| 105 | + # Execute ctpsfcube, make sure we catch any exception | ||
| 101 | try: | 106 | try: |
| 102 | - psfcube.save() | ||
| 103 | - self.test_try_success() | ||
| 104 | - #except Exception as e: | ||
| 105 | - # msg = "Exception occured in saving PSF cube: %s." % (e,) | 107 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 106 | except: | 108 | except: |
| 107 | - msg = "Exception occured in saving PSF cubes." | ||
| 108 | - self.test_try_failure(msg) | 109 | + pass |
| 110 | + | ||
| 111 | + # Check if execution failed | ||
| 112 | + self.test_assert(rc != 0, | ||
| 113 | + 'Failure of ctpsfcube execution on command line') | ||
| 114 | + | ||
| 115 | + # Return | ||
| 116 | + return | ||
| 117 | + | ||
| 118 | + # Test ctpsfcube from Python | ||
| 119 | + def _test_python(self): | ||
| 120 | + """ | ||
| 121 | + Test ctpsfcube from Python. | ||
| 122 | + """ | ||
| 123 | + # Set-up ctpsfcube | ||
| 124 | + psfcube = ctools.ctpsfcube() | ||
| 125 | + psfcube['inobs'] = 'data/crab_events.fits' | ||
| 126 | + psfcube['incube'] = 'NONE' | ||
| 127 | + psfcube['outcube'] = 'ctpsfcube_py1.fits' | ||
| 128 | + psfcube['caldb'] = 'prod2' | ||
| 129 | + psfcube['irf'] = 'South_0.5h' | ||
| 130 | + psfcube['ebinalg'] = 'LOG' | ||
| 131 | + psfcube['emin'] = 0.1 | ||
| 132 | + psfcube['emax'] = 100 | ||
| 133 | + psfcube['enumbins'] = 20 | ||
| 134 | + psfcube['nxpix'] = 10 | ||
| 135 | + psfcube['nypix'] = 10 | ||
| 136 | + psfcube['binsz'] = 0.4 | ||
| 137 | + psfcube['coordsys'] = 'CEL' | ||
| 138 | + psfcube['proj'] = 'CAR' | ||
| 139 | + psfcube['xref'] = 83.63 | ||
| 140 | + psfcube['yref'] = 22.01 | ||
| 141 | + psfcube['amax'] = 0.3 | ||
| 142 | + psfcube['anumbins'] = 10 | ||
| 143 | + psfcube['logfile'] = 'ctpsfcube_py1.log' | ||
| 144 | + psfcube['chatter'] = 2 | ||
| 145 | + | ||
| 146 | + # Run ctpsfcube tool | ||
| 147 | + psfcube.logFileOpen() # Make sure we get a log file | ||
| 148 | + psfcube.run() | ||
| 149 | + psfcube.save() | ||
| 150 | + | ||
| 151 | + # Check result file | ||
| 152 | + self._check_result_file('ctpsfcube_py1.fits') | ||
| 153 | + | ||
| 154 | + # Return | ||
| 155 | + return | ||
| 156 | + | ||
| 157 | + # Check result file | ||
| 158 | + def _check_result_file(self, filename): | ||
| 159 | + """ | ||
| 160 | + Check result file. | ||
| 161 | + """ | ||
| 162 | + # Open result file | ||
| 163 | + result = gammalib.GCTACubePsf(filename) | ||
| 164 | + | ||
| 165 | + # Check dimensions | ||
| 166 | + self.test_value(len(result.elogmeans()), 20, 'Check for 20 energy bins') | ||
| 109 | 167 | ||
| 110 | # Return | 168 | # Return |
| 111 | return | 169 | return |
test/test_ctselect.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 | 24 | ||
| @@ -37,9 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,9 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - | ||
| 43 | # Return | 41 | # Return |
| 44 | return | 42 | return |
| 45 | 43 | ||
| @@ -49,52 +47,114 @@ class Test(gammalib.GPythonTestSuite): | @@ -49,52 +47,114 @@ class Test(gammalib.GPythonTestSuite): | ||
| 49 | Set all test functions. | 47 | Set all test functions. |
| 50 | """ | 48 | """ |
| 51 | # Set test name | 49 | # Set test name |
| 52 | - self.name("ctselect") | 50 | + self.name('ctselect') |
| 53 | 51 | ||
| 54 | # Append tests | 52 | # Append tests |
| 55 | - self.append(self.test_functional, "Test ctselect functionality") | 53 | + self.append(self._test_cmd, 'Test ctselect on command line') |
| 54 | + self.append(self._test_python, 'Test ctselect from Python') | ||
| 56 | 55 | ||
| 57 | # Return | 56 | # Return |
| 58 | return | 57 | return |
| 59 | 58 | ||
| 60 | - # Test ctselect functionnality | ||
| 61 | - def test_functional(self): | 59 | + # Test ctselect on command line |
| 60 | + def _test_cmd(self): | ||
| 62 | """ | 61 | """ |
| 63 | - Test ctselect functionnality. | 62 | + Test ctselect on the command line. |
| 64 | """ | 63 | """ |
| 65 | - # Set-up ctselect | ||
| 66 | - select = ctools.ctselect() | ||
| 67 | - select["inobs"] = self.events_name | ||
| 68 | - select["outobs"] = "selected_events.fits" | ||
| 69 | - select["ra"] = 83.63 | ||
| 70 | - select["dec"] = 22.01 | ||
| 71 | - select["rad"] = 3 | ||
| 72 | - select["tmin"] = 0 | ||
| 73 | - select["tmax"] = 1800 | ||
| 74 | - select["emin"] = 0.1 | ||
| 75 | - select["emax"] = 100 | ||
| 76 | - | ||
| 77 | - # Run tool | ||
| 78 | - self.test_try("Run ctselect") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctselect = '../src/ctselect/ctselect' | ||
| 67 | + else: | ||
| 68 | + ctselect = 'ctselect' | ||
| 69 | + | ||
| 70 | + # Setup ctselect command | ||
| 71 | + cmd = ctselect+' inobs="data/crab_events.fits"'+ \ | ||
| 72 | + ' outobs="ctselect_cmd1.fits"'+ \ | ||
| 73 | + ' ra=83.63 dec=22.01 rad=3.0'+ \ | ||
| 74 | + ' tmin=0.0 tmax=1800.0'+ \ | ||
| 75 | + ' emin=0.1 emax=100.0'+ \ | ||
| 76 | + ' logfile="ctselect_cmd1.log" chatter=1' | ||
| 77 | + | ||
| 78 | + # Execute ctselect, make sure we catch any exception | ||
| 79 | try: | 79 | try: |
| 80 | - select.run() | ||
| 81 | - self.test_try_success() | ||
| 82 | - #except Exception as e: | ||
| 83 | - # msg = "Exception occured in ctselect: %s." % (e,) | 80 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 84 | except: | 81 | except: |
| 85 | - msg = "Exception occured in ctselect." | ||
| 86 | - self.test_try_failure(msg) | 82 | + pass |
| 83 | + | ||
| 84 | + # Check if execution was successful | ||
| 85 | + self.test_assert(rc == 0, | ||
| 86 | + 'Successful ctselect execution on command line') | ||
| 87 | + | ||
| 88 | + # Check result file | ||
| 89 | + self._check_result_file('ctselect_cmd1.fits') | ||
| 87 | 90 | ||
| 88 | - # Save events | ||
| 89 | - self.test_try("Save events") | 91 | + # Setup ctselect command |
| 92 | + cmd = ctselect+' inobs="event_file_that_does_not_exist.fits"'+ \ | ||
| 93 | + ' outobs="ctselect_cmd2.fits"'+ \ | ||
| 94 | + ' ra=83.63 dec=22.01 rad=3.0'+ \ | ||
| 95 | + ' tmin=0.0 tmax=1800.0'+ \ | ||
| 96 | + ' emin=0.1 emax=100.0'+ \ | ||
| 97 | + ' logfile="ctselect_cmd2.log" chatter=1' | ||
| 98 | + | ||
| 99 | + # Execute ctselect, make sure we catch any exception | ||
| 90 | try: | 100 | try: |
| 91 | - select.save() | ||
| 92 | - self.test_try_success() | ||
| 93 | - #except Exception as e: | ||
| 94 | - # msg = "Exception occured in saving events: %s." % (e,) | 101 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 95 | except: | 102 | except: |
| 96 | - msg = "Exception occured in saving events." | ||
| 97 | - self.test_try_failure(msg) | 103 | + pass |
| 104 | + | ||
| 105 | + # Check if execution failed | ||
| 106 | + self.test_assert(rc != 0, | ||
| 107 | + 'Failure of ctselect execution on command line') | ||
| 108 | + | ||
| 109 | + # Return | ||
| 110 | + return | ||
| 111 | + | ||
| 112 | + # Test ctselect from Python | ||
| 113 | + def _test_python(self): | ||
| 114 | + """ | ||
| 115 | + Test ctselect from Python. | ||
| 116 | + """ | ||
| 117 | + # Set-up ctselect | ||
| 118 | + select = ctools.ctselect() | ||
| 119 | + select['inobs'] = 'data/crab_events.fits' | ||
| 120 | + select['outobs'] = 'ctselect_py1.fits' | ||
| 121 | + select['ra'] = 83.63 | ||
| 122 | + select['dec'] = 22.01 | ||
| 123 | + select['rad'] = 3 | ||
| 124 | + select['tmin'] = 0 | ||
| 125 | + select['tmax'] = 1800 | ||
| 126 | + select['emin'] = 0.1 | ||
| 127 | + select['emax'] = 100 | ||
| 128 | + select['logfile'] = 'ctselect_py1.log' | ||
| 129 | + select['chatter'] = 2 | ||
| 130 | + | ||
| 131 | + # Run ctselect tool | ||
| 132 | + select.logFileOpen() # Make sure we get a log file | ||
| 133 | + select.run() | ||
| 134 | + select.save() | ||
| 135 | + | ||
| 136 | + # Check result file | ||
| 137 | + self._check_result_file('ctselect_py1.fits') | ||
| 138 | + | ||
| 139 | + # Return | ||
| 140 | + return | ||
| 141 | + | ||
| 142 | + # Check result file | ||
| 143 | + def _check_result_file(self, filename): | ||
| 144 | + """ | ||
| 145 | + Check result file. | ||
| 146 | + """ | ||
| 147 | + # Open result file | ||
| 148 | + result = gammalib.GCTAEventList(filename) | ||
| 149 | + | ||
| 150 | + # Check file | ||
| 151 | + self.test_value(result.size(), 6127, 'Check for 6127 events') | ||
| 152 | + self.test_value(result.roi().centre().dir().ra_deg(), 83.63, 1.0e-6, | ||
| 153 | + 'Check for ROI Right Ascension') | ||
| 154 | + self.test_value(result.roi().centre().dir().dec_deg(), 22.01, 1.0e-6, | ||
| 155 | + 'Check for ROI Declination') | ||
| 156 | + self.test_value(result.roi().radius(), 3.0, 1.0e-6, | ||
| 157 | + 'Check for ROI Radius') | ||
| 98 | 158 | ||
| 99 | # Return | 159 | # Return |
| 100 | return | 160 | return |
test/test_ctskymap.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 | 24 | ||
| @@ -37,9 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,9 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - | ||
| 43 | # Return | 41 | # Return |
| 44 | return | 42 | return |
| 45 | 43 | ||
| @@ -49,54 +47,112 @@ class Test(gammalib.GPythonTestSuite): | @@ -49,54 +47,112 @@ class Test(gammalib.GPythonTestSuite): | ||
| 49 | Set all test functions. | 47 | Set all test functions. |
| 50 | """ | 48 | """ |
| 51 | # Set test name | 49 | # Set test name |
| 52 | - self.name("ctskymap") | 50 | + self.name('ctskymap') |
| 53 | 51 | ||
| 54 | # Append tests | 52 | # Append tests |
| 55 | - self.append(self.test_functional, "Test ctskymap functionality") | 53 | + self.append(self._test_cmd, 'Test ctskymap on command line') |
| 54 | + self.append(self._test_python, 'Test ctskymap from Python') | ||
| 56 | 55 | ||
| 57 | # Return | 56 | # Return |
| 58 | return | 57 | return |
| 59 | 58 | ||
| 60 | - # Test ctskymap functionnality | ||
| 61 | - def test_functional(self): | 59 | + # Test ctskymap on command line |
| 60 | + def _test_cmd(self): | ||
| 62 | """ | 61 | """ |
| 63 | - Test ctskymap functionnality. | 62 | + Test ctskymap on the command line. |
| 64 | """ | 63 | """ |
| 65 | - # Set-up ctskymap | ||
| 66 | - skymap = ctools.ctskymap() | ||
| 67 | - skymap["inobs"] = self.events_name | ||
| 68 | - skymap["outmap"] = "skymap.fits" | ||
| 69 | - skymap["emin"] = 0.1 | ||
| 70 | - skymap["emax"] = 100 | ||
| 71 | - skymap["nxpix"] = 200 | ||
| 72 | - skymap["nypix"] = 200 | ||
| 73 | - skymap["binsz"] = 0.02 | ||
| 74 | - skymap["coordsys"] = "CEL" | ||
| 75 | - skymap["proj"] = "CAR" | ||
| 76 | - skymap["xref"] = 83.63 | ||
| 77 | - skymap["yref"] = 22.01 | ||
| 78 | - | ||
| 79 | - # Run tool | ||
| 80 | - self.test_try("Run ctskymap") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctskymap = '../src/ctskymap/ctskymap' | ||
| 67 | + else: | ||
| 68 | + ctskymap = 'ctskymap' | ||
| 69 | + | ||
| 70 | + # Setup ctskymap command | ||
| 71 | + cmd = ctskymap+' inobs="data/crab_events.fits"'+\ | ||
| 72 | + ' outmap="ctskymap_cmd1.fits"'+ \ | ||
| 73 | + ' emin=0.1 emax=100.0 nxpix=200 nypix=200'+ \ | ||
| 74 | + ' binsz=0.02 coordsys="CEL" proj="CAR"'+ \ | ||
| 75 | + ' xref=83.63 yref=22.01'+ \ | ||
| 76 | + ' logfile="ctskymap_cmd1.log" chatter=1' | ||
| 77 | + | ||
| 78 | + # Execute ctskymap, make sure we catch any exception | ||
| 81 | try: | 79 | try: |
| 82 | - skymap.run() | ||
| 83 | - self.test_try_success() | ||
| 84 | - #except Exception as e: | ||
| 85 | - # msg = "Exception occured in ctskymap: %s." % (e,) | 80 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 86 | except: | 81 | except: |
| 87 | - msg = "Exception occured in ctskymap." | ||
| 88 | - self.test_try_failure(msg) | 82 | + pass |
| 83 | + | ||
| 84 | + # Check if execution was successful | ||
| 85 | + self.test_assert(rc == 0, | ||
| 86 | + 'Successful ctskymap execution on command line') | ||
| 87 | + | ||
| 88 | + # Check result file | ||
| 89 | + self._check_result_file('ctskymap_cmd1.fits') | ||
| 89 | 90 | ||
| 90 | - # Save counts cube | ||
| 91 | - self.test_try("Save sky map") | 91 | + # Setup ctskymap command |
| 92 | + cmd = ctskymap+' inobs="event_file_that_does_not_exist.fits"'+\ | ||
| 93 | + ' outmap="ctskymap_cmd2.fits"'+ \ | ||
| 94 | + ' emin=0.1 emax=100.0 nxpix=200 nypix=200'+ \ | ||
| 95 | + ' binsz=0.02 coordsys="CEL" proj="CAR"'+ \ | ||
| 96 | + ' xref=83.63 yref=22.01'+ \ | ||
| 97 | + ' logfile="ctskymap_cmd2.log" chatter=2' | ||
| 98 | + | ||
| 99 | + # Execute ctskymap, make sure we catch any exception | ||
| 92 | try: | 100 | try: |
| 93 | - skymap.save() | ||
| 94 | - self.test_try_success() | ||
| 95 | - #except Exception as e: | ||
| 96 | - # msg = "Exception occured in saving sky map: %s." % (e,) | 101 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 97 | except: | 102 | except: |
| 98 | - msg = "Exception occured in saving sky map." | ||
| 99 | - self.test_try_failure(msg) | 103 | + pass |
| 104 | + | ||
| 105 | + # Check if execution failed | ||
| 106 | + self.test_assert(rc != 0, | ||
| 107 | + 'Failure of ctskymap execution on command line') | ||
| 108 | + | ||
| 109 | + # Return | ||
| 110 | + return | ||
| 111 | + | ||
| 112 | + # Test ctskymap from Python | ||
| 113 | + def _test_python(self): | ||
| 114 | + """ | ||
| 115 | + Test ctskymap from Python. | ||
| 116 | + """ | ||
| 117 | + # Set-up ctskymap | ||
| 118 | + skymap = ctools.ctskymap() | ||
| 119 | + skymap['inobs'] = 'data/crab_events.fits' | ||
| 120 | + skymap['outmap'] = 'ctskymap_py1.fits' | ||
| 121 | + skymap['emin'] = 0.1 | ||
| 122 | + skymap['emax'] = 100 | ||
| 123 | + skymap['nxpix'] = 200 | ||
| 124 | + skymap['nypix'] = 200 | ||
| 125 | + skymap['binsz'] = 0.02 | ||
| 126 | + skymap['coordsys'] = 'CEL' | ||
| 127 | + skymap['proj'] = 'CAR' | ||
| 128 | + skymap['xref'] = 83.63 | ||
| 129 | + skymap['yref'] = 22.01 | ||
| 130 | + skymap['logfile'] = 'ctskymap_py1.log' | ||
| 131 | + skymap['chatter'] = 2 | ||
| 132 | + | ||
| 133 | + # Run ctskymap tool | ||
| 134 | + skymap.logFileOpen() # Make sure we get a log file | ||
| 135 | + skymap.run() | ||
| 136 | + skymap.save() | ||
| 137 | + | ||
| 138 | + # Check result file | ||
| 139 | + self._check_result_file('ctskymap_py1.fits') | ||
| 140 | + | ||
| 141 | + # Return | ||
| 142 | + return | ||
| 143 | + | ||
| 144 | + # Check result file | ||
| 145 | + def _check_result_file(self, filename): | ||
| 146 | + """ | ||
| 147 | + Check result file. | ||
| 148 | + """ | ||
| 149 | + # Open result file | ||
| 150 | + result = gammalib.GSkyMap(filename) | ||
| 151 | + | ||
| 152 | + # Check dimensions | ||
| 153 | + self.test_value(result.nmaps(), 1, 'Check for one map') | ||
| 154 | + self.test_value(result.nx(), 200, 'Check for 200 pixels in X') | ||
| 155 | + self.test_value(result.ny(), 200, 'Check for 200 pixels in Y') | ||
| 100 | 156 | ||
| 101 | # Return | 157 | # Return |
| 102 | return | 158 | return |
test/test_cttsmap.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 | 24 | ||
| @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - self.model_name = "data/crab.xml" | ||
| 43 | - self.caldb = "irf" | ||
| 44 | - self.irf = "cta_dummy_irf" | ||
| 45 | - | ||
| 46 | # Return | 41 | # Return |
| 47 | return | 42 | return |
| 48 | 43 | ||
| @@ -52,56 +47,127 @@ class Test(gammalib.GPythonTestSuite): | @@ -52,56 +47,127 @@ class Test(gammalib.GPythonTestSuite): | ||
| 52 | Set all test functions. | 47 | Set all test functions. |
| 53 | """ | 48 | """ |
| 54 | # Set test name | 49 | # Set test name |
| 55 | - self.name("cttsmap") | 50 | + self.name('cttsmap') |
| 56 | 51 | ||
| 57 | # Append tests | 52 | # Append tests |
| 58 | - self.append(self.test_functional, "Test cttsmap functionality") | 53 | + self.append(self._test_cmd, 'Test cttsmap on command line') |
| 54 | + self.append(self._test_python, 'Test cttsmap from Python') | ||
| 59 | 55 | ||
| 60 | # Return | 56 | # Return |
| 61 | return | 57 | return |
| 62 | 58 | ||
| 63 | - # Test cttsmap functionnality | ||
| 64 | - def test_functional(self): | 59 | + # Test cttsmap on command line |
| 60 | + def _test_cmd(self): | ||
| 65 | """ | 61 | """ |
| 66 | - Test cttsmap functionality. | 62 | + Test cttsmap on the command line. |
| 67 | """ | 63 | """ |
| 68 | - # Set-up cttsmap | ||
| 69 | - tsmap = ctools.cttsmap() | ||
| 70 | - tsmap["inobs"] = self.events_name | ||
| 71 | - tsmap["inmodel"] = self.model_name | ||
| 72 | - tsmap["srcname"] = "Crab" | ||
| 73 | - tsmap["caldb"] = self.caldb | ||
| 74 | - tsmap["irf"] = self.irf | ||
| 75 | - tsmap["outmap"] = "tsmap.fits" | ||
| 76 | - tsmap["nxpix"] = 5 | ||
| 77 | - tsmap["nypix"] = 5 | ||
| 78 | - tsmap["binsz"] = 0.02 | ||
| 79 | - tsmap["coordsys"] = "CEL" | ||
| 80 | - tsmap["proj"] = "CAR" | ||
| 81 | - tsmap["xref"] = 83.63 | ||
| 82 | - tsmap["yref"] = 22.01 | ||
| 83 | - | ||
| 84 | - # Run tool | ||
| 85 | - self.test_try("Run cttsmap") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + cttsmap = '../src/cttsmap/cttsmap' | ||
| 67 | + else: | ||
| 68 | + cttsmap = 'cttsmap' | ||
| 69 | + | ||
| 70 | + # Setup cttsmap command | ||
| 71 | + cmd = cttsmap+' inobs="data/crab_events.fits"'+ \ | ||
| 72 | + ' inmodel="data/crab.xml" srcname="Crab"'+ \ | ||
| 73 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 74 | + ' outmap="cttsmap_cmd1.fits"'+ \ | ||
| 75 | + ' nxpix=5 nypix=5 binsz=0.02'+ \ | ||
| 76 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 77 | + ' logfile="cttsmap_cmd1.log" chatter=1' | ||
| 78 | + | ||
| 79 | + # Execute cttsmap, make sure we catch any exception | ||
| 86 | try: | 80 | try: |
| 87 | - tsmap.run() | ||
| 88 | - self.test_try_success() | ||
| 89 | - #except Exception as e: | ||
| 90 | - # msg = "Exception occured in cttsmap: %s." % (e,) | 81 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 91 | except: | 82 | except: |
| 92 | - msg = "Exception occured in cttsmap." | ||
| 93 | - self.test_try_failure(msg) | 83 | + pass |
| 84 | + | ||
| 85 | + # Check if execution was successful | ||
| 86 | + self.test_assert(rc == 0, | ||
| 87 | + 'Successful cttsmap execution on command line') | ||
| 88 | + | ||
| 89 | + # Check result file | ||
| 90 | + self._check_result_file('cttsmap_cmd1.fits') | ||
| 94 | 91 | ||
| 95 | - # Save results | ||
| 96 | - self.test_try("Save results") | 92 | + # Setup cttsmap command |
| 93 | + cmd = cttsmap+' inobs="event_file_that_does_not_exist.fits"'+ \ | ||
| 94 | + ' inmodel="data/crab.xml" srcname="Crab"'+ \ | ||
| 95 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 96 | + ' outmap="cttsmap_cmd2.fits"'+ \ | ||
| 97 | + ' nxpix=5 nypix=5 binsz=0.02'+ \ | ||
| 98 | + ' coordsys="CEL" proj="CAR" xref=83.63 yref=22.01'+ \ | ||
| 99 | + ' logfile="cttsmap_cmd2.log" chatter=2' | ||
| 100 | + | ||
| 101 | + # Execute cttsmap, make sure we catch any exception | ||
| 97 | try: | 102 | try: |
| 98 | - tsmap.save() | ||
| 99 | - self.test_try_success() | ||
| 100 | - #except Exception as e: | ||
| 101 | - # msg = "Exception occured in saving results: %s." % (e,) | 103 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 102 | except: | 104 | except: |
| 103 | - msg = "Exception occured in saving results." | ||
| 104 | - self.test_try_failure(msg) | 105 | + pass |
| 106 | + | ||
| 107 | + # Check if execution failed | ||
| 108 | + self.test_assert(rc != 0, | ||
| 109 | + 'Failure of cttsmap execution on command line') | ||
| 110 | + | ||
| 111 | + # Return | ||
| 112 | + return | ||
| 113 | + | ||
| 114 | + # Test cttsmap from Python | ||
| 115 | + def _test_python(self): | ||
| 116 | + """ | ||
| 117 | + Test cttsmap from Python. | ||
| 118 | + """ | ||
| 119 | + # Set-up cttsmap | ||
| 120 | + tsmap = ctools.cttsmap() | ||
| 121 | + tsmap['inobs'] = 'data/crab_events.fits' | ||
| 122 | + tsmap['inmodel'] = 'data/crab.xml' | ||
| 123 | + tsmap['srcname'] = 'Crab' | ||
| 124 | + tsmap['caldb'] = 'prod2' | ||
| 125 | + tsmap['irf'] = 'South_0.5h' | ||
| 126 | + tsmap['outmap'] = 'cttsmap_py1.fits' | ||
| 127 | + tsmap['nxpix'] = 5 | ||
| 128 | + tsmap['nypix'] = 5 | ||
| 129 | + tsmap['binsz'] = 0.02 | ||
| 130 | + tsmap['coordsys'] = 'CEL' | ||
| 131 | + tsmap['proj'] = 'CAR' | ||
| 132 | + tsmap['xref'] = 83.63 | ||
| 133 | + tsmap['yref'] = 22.01 | ||
| 134 | + tsmap['logfile'] = 'cttsmap_py1.log' | ||
| 135 | + tsmap['chatter'] = 2 | ||
| 136 | + | ||
| 137 | + # Run cttsmap tool | ||
| 138 | + tsmap.logFileOpen() # Make sure we get a log file | ||
| 139 | + tsmap.run() | ||
| 140 | + tsmap.save() | ||
| 141 | + | ||
| 142 | + # Check result file | ||
| 143 | + self._check_result_file('cttsmap_py1.fits') | ||
| 144 | + | ||
| 145 | + # Return | ||
| 146 | + return | ||
| 147 | + | ||
| 148 | + # Check result file | ||
| 149 | + def _check_result_file(self, filename): | ||
| 150 | + """ | ||
| 151 | + Check result file. | ||
| 152 | + """ | ||
| 153 | + # Open result file | ||
| 154 | + fits = gammalib.GFits(filename) | ||
| 155 | + | ||
| 156 | + # Get HDUs | ||
| 157 | + ts = fits['Primary'] | ||
| 158 | + prefactor = fits['Prefactor'] | ||
| 159 | + index = fits['Index'] | ||
| 160 | + | ||
| 161 | + # Check dimensions | ||
| 162 | + self.test_value(ts.naxis(), 2, 'Check for 2 dimensions') | ||
| 163 | + self.test_value(ts.naxes(0), 5, 'Check for 5 pixels in X') | ||
| 164 | + self.test_value(ts.naxes(1), 5, 'Check for 5 pixels in Y') | ||
| 165 | + self.test_value(prefactor.naxis(), 2, 'Check for 2 dimensions') | ||
| 166 | + self.test_value(prefactor.naxes(0), 5, 'Check for 5 pixels in X') | ||
| 167 | + self.test_value(prefactor.naxes(1), 5, 'Check for 5 pixels in Y') | ||
| 168 | + self.test_value(index.naxis(), 2, 'Check for 2 dimensions') | ||
| 169 | + self.test_value(index.naxes(0), 5, 'Check for 5 pixels in X') | ||
| 170 | + self.test_value(index.naxes(1), 5, 'Check for 5 pixels in Y') | ||
| 105 | 171 | ||
| 106 | # Return | 172 | # Return |
| 107 | return | 173 | return |
test/test_ctulimit.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 | 24 | ||
| @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | @@ -37,12 +38,6 @@ class Test(gammalib.GPythonTestSuite): | ||
| 37 | # Call base class constructor | 38 | # Call base class constructor |
| 38 | gammalib.GPythonTestSuite.__init__(self) | 39 | gammalib.GPythonTestSuite.__init__(self) |
| 39 | 40 | ||
| 40 | - # Set members | ||
| 41 | - self.events_name = "data/crab_events.fits" | ||
| 42 | - self.model_name = "data/crab.xml" | ||
| 43 | - self.caldb = "irf" | ||
| 44 | - self.irf = "cta_dummy_irf" | ||
| 45 | - | ||
| 46 | # Return | 41 | # Return |
| 47 | return | 42 | return |
| 48 | 43 | ||
| @@ -52,48 +47,94 @@ class Test(gammalib.GPythonTestSuite): | @@ -52,48 +47,94 @@ class Test(gammalib.GPythonTestSuite): | ||
| 52 | Set all test functions. | 47 | Set all test functions. |
| 53 | """ | 48 | """ |
| 54 | # Set test name | 49 | # Set test name |
| 55 | - self.name("ctulimit") | 50 | + self.name('ctulimit') |
| 56 | 51 | ||
| 57 | # Append tests | 52 | # Append tests |
| 58 | - self.append(self.test_functional, "Test ctulimit functionality") | 53 | + self.append(self._test_cmd, 'Test ctulimit on command line') |
| 54 | + self.append(self._test_python, 'Test ctulimit from Python') | ||
| 59 | 55 | ||
| 60 | # Return | 56 | # Return |
| 61 | return | 57 | return |
| 62 | 58 | ||
| 63 | - # Test cttsmap functionnality | ||
| 64 | - def test_functional(self): | 59 | + # Test ctulimit on command line |
| 60 | + def _test_cmd(self): | ||
| 65 | """ | 61 | """ |
| 66 | - Test ctulimit functionnality. | 62 | + Test ctulimit on the command line. |
| 67 | """ | 63 | """ |
| 68 | - # Set-up cttsmap | ||
| 69 | - ulimit = ctools.ctulimit() | ||
| 70 | - ulimit["inobs"] = self.events_name | ||
| 71 | - ulimit["inmodel"] = self.model_name | ||
| 72 | - ulimit["srcname"] = "Crab" | ||
| 73 | - ulimit["caldb"] = self.caldb | ||
| 74 | - ulimit["irf"] = self.irf | ||
| 75 | - | ||
| 76 | - # Run tool | ||
| 77 | - self.test_try("Run ctulimit") | 64 | + # Kluge to set the command (installed version has no README file) |
| 65 | + if os.path.isfile('README'): | ||
| 66 | + ctulimit = '../src/ctulimit/ctulimit' | ||
| 67 | + else: | ||
| 68 | + ctulimit = 'ctulimit' | ||
| 69 | + | ||
| 70 | + # Setup ctulimit command | ||
| 71 | + cmd = ctulimit+' inobs="data/crab_events.fits"'+ \ | ||
| 72 | + ' inmodel="data/crab.xml" srcname="Crab"'+ \ | ||
| 73 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 74 | + ' logfile="ctulimit_cmd1.log" chatter=1' | ||
| 75 | + | ||
| 76 | + # Execute ctulimit, make sure we catch any exception | ||
| 78 | try: | 77 | try: |
| 79 | - ulimit.run() | ||
| 80 | - self.test_try_success() | ||
| 81 | - #except Exception as e: | ||
| 82 | - # msg = "Exception occured in ctulimit: %s." % (e,) | 78 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 83 | except: | 79 | except: |
| 84 | - msg = "Exception occured in ctulimit." | ||
| 85 | - self.test_try_failure(msg) | 80 | + pass |
| 81 | + | ||
| 82 | + # Check if execution was successful | ||
| 83 | + self.test_assert(rc == 0, | ||
| 84 | + 'Successful ctulimit execution on command line') | ||
| 85 | + | ||
| 86 | + # Check result file | ||
| 87 | + self._check_result_file('ctulimit_cmd1.log') | ||
| 86 | 88 | ||
| 87 | - # Save results | ||
| 88 | - self.test_try("Save results") | 89 | + # Setup ctulimit command |
| 90 | + cmd = ctulimit+' inobs="event_file_that_does_not_exist.fits"'+ \ | ||
| 91 | + ' inmodel="data/crab.xml" srcname="Crab"'+ \ | ||
| 92 | + ' caldb="prod2" irf="South_0.5h"'+ \ | ||
| 93 | + ' logfile="ctulimit_cmd2.log" chatter=1' | ||
| 94 | + | ||
| 95 | + # Execute ctulimit, make sure we catch any exception | ||
| 89 | try: | 96 | try: |
| 90 | - ulimit.save() | ||
| 91 | - self.test_try_success() | ||
| 92 | - #except Exception as e: | ||
| 93 | - # msg = "Exception occured in saving results: %s." % (e,) | 97 | + rc = os.system(cmd+' >/dev/null 2>&1') |
| 94 | except: | 98 | except: |
| 95 | - msg = "Exception occured in saving results." | ||
| 96 | - self.test_try_failure(msg) | 99 | + pass |
| 100 | + | ||
| 101 | + # Check if execution failed | ||
| 102 | + self.test_assert(rc != 0, | ||
| 103 | + 'Failure of ctulimit execution on command line') | ||
| 104 | + | ||
| 105 | + # Return | ||
| 106 | + return | ||
| 97 | 107 | ||
| 108 | + # Test ctulimit from Python | ||
| 109 | + def _test_python(self): | ||
| 110 | + """ | ||
| 111 | + Test ctulimit from Python. | ||
| 112 | + """ | ||
| 113 | + # Set-up ctulimit | ||
| 114 | + ulimit = ctools.ctulimit() | ||
| 115 | + ulimit['inobs'] = 'data/crab_events.fits' | ||
| 116 | + ulimit['inmodel'] = 'data/crab.xml' | ||
| 117 | + ulimit['srcname'] = 'Crab' | ||
| 118 | + ulimit['caldb'] = 'prod2' | ||
| 119 | + ulimit['irf'] = 'South_0.5h' | ||
| 120 | + ulimit['logfile'] = 'ctulimit_py1.log' | ||
| 121 | + ulimit['chatter'] = 2 | ||
| 122 | + | ||
| 123 | + # Run ctulimit tool | ||
| 124 | + ulimit.logFileOpen() # Make sure we get a log file | ||
| 125 | + ulimit.run() | ||
| 126 | + ulimit.save() | ||
| 127 | + | ||
| 128 | + # Check result file | ||
| 129 | + self._check_result_file('ctulimit_py1.log') | ||
| 130 | + | ||
| 131 | + # Return | ||
| 132 | + return | ||
| 133 | + | ||
| 134 | + # Check result file | ||
| 135 | + def _check_result_file(self, filename): | ||
| 136 | + """ | ||
| 137 | + Check result file. | ||
| 138 | + """ | ||
| 98 | # Return | 139 | # Return |
| 99 | return | 140 | return |
test/test_python_cscripts.py
| @@ -50,6 +50,13 @@ import test_csiactobs | @@ -50,6 +50,13 @@ import test_csiactobs | ||
| 50 | def test(installed=False, debug=False): | 50 | def test(installed=False, debug=False): |
| 51 | """ | 51 | """ |
| 52 | Perform cscripts unit testing. | 52 | Perform cscripts unit testing. |
| 53 | + | ||
| 54 | + Parameters | ||
| 55 | + ---------- | ||
| 56 | + installed : bool, optional | ||
| 57 | + Flag indicating whether the script has been installed or not | ||
| 58 | + debug : bool, optional | ||
| 59 | + Enables debugging | ||
| 53 | """ | 60 | """ |
| 54 | # If we have an installed version then create a temporary directory and | 61 | # If we have an installed version then create a temporary directory and |
| 55 | # copy over all information that is needed | 62 | # copy over all information that is needed |
test/test_python_ctools.py
| @@ -32,6 +32,7 @@ import test_ctmodel | @@ -32,6 +32,7 @@ import test_ctmodel | ||
| 32 | import test_ctskymap | 32 | import test_ctskymap |
| 33 | import test_ctexpcube | 33 | import test_ctexpcube |
| 34 | import test_ctpsfcube | 34 | import test_ctpsfcube |
| 35 | +import test_ctedispcube | ||
| 35 | import test_ctbkgcube | 36 | import test_ctbkgcube |
| 36 | import test_ctmapcube | 37 | import test_ctmapcube |
| 37 | import test_ctcubemask | 38 | import test_ctcubemask |
| @@ -47,9 +48,14 @@ import test_pipelines | @@ -47,9 +48,14 @@ import test_pipelines | ||
| 47 | def test(installed=False): | 48 | def test(installed=False): |
| 48 | """ | 49 | """ |
| 49 | Perform unit testing for ctools. | 50 | Perform unit testing for ctools. |
| 51 | + | ||
| 52 | + Parameters | ||
| 53 | + ---------- | ||
| 54 | + installed : bool, optional | ||
| 55 | + Flag indicating whether the script has been installed or not | ||
| 50 | """ | 56 | """ |
| 51 | # Allocate test suite container | 57 | # Allocate test suite container |
| 52 | - suites = gammalib.GTestSuites("ctools unit testing") | 58 | + suites = gammalib.GTestSuites('ctools unit testing') |
| 53 | 59 | ||
| 54 | # Allocate test suites and append them to the container | 60 | # Allocate test suites and append them to the container |
| 55 | suite_ctobssim = test_ctobssim.Test() | 61 | suite_ctobssim = test_ctobssim.Test() |
| @@ -61,6 +67,7 @@ def test(installed=False): | @@ -61,6 +67,7 @@ def test(installed=False): | ||
| 61 | suite_ctskymap = test_ctskymap.Test() | 67 | suite_ctskymap = test_ctskymap.Test() |
| 62 | suite_ctexpcube = test_ctexpcube.Test() | 68 | suite_ctexpcube = test_ctexpcube.Test() |
| 63 | suite_ctpsfcube = test_ctpsfcube.Test() | 69 | suite_ctpsfcube = test_ctpsfcube.Test() |
| 70 | + suite_ctedispcube = test_ctedispcube.Test() | ||
| 64 | suite_ctbkgcube = test_ctbkgcube.Test() | 71 | suite_ctbkgcube = test_ctbkgcube.Test() |
| 65 | suite_ctmapcube = test_ctmapcube.Test() | 72 | suite_ctmapcube = test_ctmapcube.Test() |
| 66 | suite_ctcubemask = test_ctcubemask.Test() | 73 | suite_ctcubemask = test_ctcubemask.Test() |
| @@ -79,6 +86,7 @@ def test(installed=False): | @@ -79,6 +86,7 @@ def test(installed=False): | ||
| 79 | suite_ctskymap.set() | 86 | suite_ctskymap.set() |
| 80 | suite_ctexpcube.set() | 87 | suite_ctexpcube.set() |
| 81 | suite_ctpsfcube.set() | 88 | suite_ctpsfcube.set() |
| 89 | + suite_ctedispcube.set() | ||
| 82 | suite_ctbkgcube.set() | 90 | suite_ctbkgcube.set() |
| 83 | suite_ctmapcube.set() | 91 | suite_ctmapcube.set() |
| 84 | suite_ctcubemask.set() | 92 | suite_ctcubemask.set() |
| @@ -97,6 +105,7 @@ def test(installed=False): | @@ -97,6 +105,7 @@ def test(installed=False): | ||
| 97 | suites.append(suite_ctskymap) | 105 | suites.append(suite_ctskymap) |
| 98 | suites.append(suite_ctexpcube) | 106 | suites.append(suite_ctexpcube) |
| 99 | suites.append(suite_ctpsfcube) | 107 | suites.append(suite_ctpsfcube) |
| 108 | + suites.append(suite_ctedispcube) | ||
| 100 | suites.append(suite_ctbkgcube) | 109 | suites.append(suite_ctbkgcube) |
| 101 | suites.append(suite_ctmapcube) | 110 | suites.append(suite_ctmapcube) |
| 102 | suites.append(suite_ctcubemask) | 111 | suites.append(suite_ctcubemask) |
| @@ -120,28 +129,28 @@ def test(installed=False): | @@ -120,28 +129,28 @@ def test(installed=False): | ||
| 120 | dirname = os.path.dirname(testdir) | 129 | dirname = os.path.dirname(testdir) |
| 121 | 130 | ||
| 122 | # Copy over test data and irf | 131 | # Copy over test data and irf |
| 123 | - os.system("cp -r %s %s" % (dirname+"/data", "data")) | ||
| 124 | - os.system("cp -r %s %s" % (dirname+"/irf", "irf")) | 132 | + os.system('cp -r %s %s' % (dirname+'/data', 'data')) |
| 133 | + os.system('cp -r %s %s' % (dirname+'/irf', 'irf')) | ||
| 125 | 134 | ||
| 126 | # Set PFILES environment variable | 135 | # Set PFILES environment variable |
| 127 | try: | 136 | try: |
| 128 | - os.mkdir("pfiles") | 137 | + os.mkdir('pfiles') |
| 129 | except: | 138 | except: |
| 130 | pass | 139 | pass |
| 131 | - os.environ['PFILES'] = "pfiles" | 140 | + os.environ['PFILES'] = 'pfiles' |
| 132 | 141 | ||
| 133 | # Copy over pfiles | 142 | # Copy over pfiles |
| 134 | if not installed: | 143 | if not installed: |
| 135 | - os.system("cp -r ../src/*/*.par pfiles/") | 144 | + os.system('cp -r ../src/*/*.par pfiles/') |
| 136 | else: | 145 | else: |
| 137 | - os.system("cp -r %s/syspfiles/*.par pfiles/" % (os.environ['CTOOLS'])) | 146 | + os.system('cp -r %s/syspfiles/*.par pfiles/' % (os.environ['CTOOLS'])) |
| 138 | 147 | ||
| 139 | # Run test suite | 148 | # Run test suite |
| 140 | success = suites.run() | 149 | success = suites.run() |
| 141 | 150 | ||
| 142 | # If we have a non-installed version then save test results | 151 | # If we have a non-installed version then save test results |
| 143 | if not installed: | 152 | if not installed: |
| 144 | - suites.save("reports/ctools.xml") | 153 | + suites.save('reports/ctools.xml') |
| 145 | 154 | ||
| 146 | # Set return code | 155 | # Set return code |
| 147 | if success: | 156 | if success: |