Commit 830788272d9e10d76e4939327e7eb90fd7398248
1 parent
8cc8f849
Use filename including extension name and expression in GFits::open().
Showing
3 changed files
with
89 additions
and
46 deletions
src/fits/GFits.cpp
| ... | ... | @@ -992,7 +992,7 @@ int GFits::extno(const std::string& extname) const |
| 992 | 992 | * @brief Open or (optionally) create FITS file |
| 993 | 993 | * |
| 994 | 994 | * @param[in] filename Name of FITS file to be opened. |
| 995 | - * @param[in] create Create FITS file if it does not exist (default=false) | |
| 995 | + * @param[in] create Create FITS file if it does not exist (default: false) | |
| 996 | 996 | * |
| 997 | 997 | * @exception GException::invalid_argument |
| 998 | 998 | * Class instance contains already an opened FITS file. |
| ... | ... | @@ -1037,12 +1037,12 @@ void GFits::open(const GFilename& filename, const bool& create) |
| 1037 | 1037 | |
| 1038 | 1038 | // Try opening FITS file with readwrite access |
| 1039 | 1039 | int status = 0; |
| 1040 | - status = __ffopen(FHANDLE(m_fitsfile), filename.url().c_str(), 1, &status); | |
| 1040 | + status = __ffopen(FHANDLE(m_fitsfile), std::string(filename).c_str(), 1, &status); | |
| 1041 | 1041 | |
| 1042 | 1042 | // If failed then try opening as readonly |
| 1043 | 1043 | if (status == 104 || status == 112) { |
| 1044 | 1044 | status = 0; |
| 1045 | - status = __ffopen(FHANDLE(m_fitsfile), filename.url().c_str(), 0, &status); | |
| 1045 | + status = __ffopen(FHANDLE(m_fitsfile), std::string(filename).c_str(), 0, &status); | |
| 1046 | 1046 | m_readwrite = false; |
| 1047 | 1047 | } |
| 1048 | 1048 | |
| ... | ... | @@ -1050,7 +1050,7 @@ void GFits::open(const GFilename& filename, const bool& create) |
| 1050 | 1050 | // FITS file now |
| 1051 | 1051 | if (create && status == 104) { |
| 1052 | 1052 | status = 0; |
| 1053 | - status = __ffinit(FHANDLE(m_fitsfile), filename.url().c_str(), &status); | |
| 1053 | + status = __ffinit(FHANDLE(m_fitsfile), std::string(filename).c_str(), &status); | |
| 1054 | 1054 | m_readwrite = true; |
| 1055 | 1055 | m_created = true; |
| 1056 | 1056 | } | ... | ... |
test/data/file.fits.gz
0 → 100644
No preview for this file type
test/test_GFits.py
| 1 | 1 | # ========================================================================== |
| 2 | 2 | # This module performs unit tests for the GammaLib FITS module. |
| 3 | 3 | # |
| 4 | -# Copyright (C) 2012-2015 Juergen Knoedlseder | |
| 4 | +# Copyright (C) 2012-2016 Juergen Knoedlseder | |
| 5 | 5 | # |
| 6 | 6 | # This program is free software: you can redistribute it and/or modify |
| 7 | 7 | # it under the terms of the GNU General Public License as published by |
| ... | ... | @@ -18,10 +18,10 @@ |
| 18 | 18 | # |
| 19 | 19 | # ========================================================================== |
| 20 | 20 | import math |
| 21 | -import os | |
| 22 | 21 | import sys |
| 23 | 22 | import gammalib |
| 24 | 23 | |
| 24 | + | |
| 25 | 25 | # =================================== # |
| 26 | 26 | # Test class for GammaLib FITS module # |
| 27 | 27 | # =================================== # |
| ... | ... | @@ -48,6 +48,8 @@ class Test(gammalib.GPythonTestSuite): |
| 48 | 48 | |
| 49 | 49 | # Append tests |
| 50 | 50 | self.append(self.test_fits, "Test GFits") |
| 51 | + self.append(self.test_fits_image, "Test GFitsImage") | |
| 52 | + self.append(self.test_fits_table, "Test GFitsTable") | |
| 51 | 53 | self.append(self.test_fits_table_columns, "Test FITS table columns") |
| 52 | 54 | |
| 53 | 55 | # Return |
| ... | ... | @@ -55,26 +57,56 @@ class Test(gammalib.GPythonTestSuite): |
| 55 | 57 | |
| 56 | 58 | def test_fits(self): |
| 57 | 59 | """ |
| 58 | - Test FITS interface. | |
| 60 | + Test GFile class interface. | |
| 59 | 61 | """ |
| 60 | - # Set filenames | |
| 61 | - file1 = "test_python_fits_v1.fits" | |
| 62 | - file2 = "test_python_fits_v2.fits" | |
| 62 | + # Set test file names | |
| 63 | + file = gammalib.GFilename("data/file.fits") | |
| 63 | 64 | |
| 64 | - # Remove test files | |
| 65 | + # Test creation of FITS file | |
| 66 | + self.test_try("Test GFits file constructor") | |
| 65 | 67 | try: |
| 66 | - os.remove(file1) | |
| 67 | - os.remove(file2) | |
| 68 | + fits = gammalib.GFits(file, True) | |
| 69 | + self.test_try_success() | |
| 68 | 70 | except: |
| 69 | - pass | |
| 71 | + self.test_try_failure("Unable to create file.") | |
| 72 | + | |
| 73 | + # Open FITS file | |
| 74 | + fits = gammalib.GFits(file) | |
| 75 | + self.test_value(fits["EVENTS"].nrows(), 1231, "Check number of rows") | |
| 76 | + | |
| 77 | + # Open FITS file with event selection | |
| 78 | + fits = gammalib.GFits(file+"[EVENTS][ENERGY>1.0]") | |
| 79 | + self.test_value(fits["EVENTS"].nrows(), 152, "Check number of rows") | |
| 80 | + | |
| 81 | + # Open FITS file with non-existing extension name | |
| 82 | + self.test_try("Test non-existing extension name") | |
| 83 | + try: | |
| 84 | + fits = gammalib.GFits(file+"[DUMMY][ENERGY>1.0]") | |
| 85 | + self.test_try_failure() | |
| 86 | + except: | |
| 87 | + self.test_try_success() | |
| 88 | + | |
| 89 | + # Return | |
| 90 | + return | |
| 91 | + | |
| 92 | + def test_fits_image(self): | |
| 93 | + """ | |
| 94 | + Test GFitsImage class interface. | |
| 95 | + """ | |
| 96 | + # Set test file names | |
| 97 | + file1 = gammalib.GFilename("test_python_fits_image_v1.fits") | |
| 98 | + file2 = gammalib.GFilename("test_python_fits_image_v2.fits") | |
| 99 | + | |
| 100 | + # Remove test files | |
| 101 | + file1.remove() | |
| 102 | + file2.remove() | |
| 70 | 103 | |
| 71 | 104 | # Create FITS file |
| 72 | 105 | fits = gammalib.GFits(file1, True) |
| 73 | - sys.stdout.write(".") | |
| 74 | 106 | |
| 75 | 107 | # Create images |
| 76 | - nx = 10 | |
| 77 | - ny = 10 | |
| 108 | + nx = 10 | |
| 109 | + ny = 10 | |
| 78 | 110 | img1 = gammalib.GFitsImageByte(nx, ny) |
| 79 | 111 | img2 = gammalib.GFitsImageDouble(nx, ny) |
| 80 | 112 | img3 = gammalib.GFitsImageFloat(nx, ny) |
| ... | ... | @@ -104,7 +136,6 @@ class Test(gammalib.GPythonTestSuite): |
| 104 | 136 | img7.extname("Short") |
| 105 | 137 | img8.extname("ULong") |
| 106 | 138 | img9.extname("UShort") |
| 107 | - sys.stdout.write(".") | |
| 108 | 139 | |
| 109 | 140 | # Append images to FITS file |
| 110 | 141 | fits.append(img1) |
| ... | ... | @@ -116,14 +147,52 @@ class Test(gammalib.GPythonTestSuite): |
| 116 | 147 | fits.append(img7) |
| 117 | 148 | fits.append(img8) |
| 118 | 149 | fits.append(img9) |
| 119 | - sys.stdout.write(".") | |
| 120 | 150 | |
| 121 | 151 | # Set header keywords |
| 122 | 152 | img_byte = fits.image(0) |
| 123 | 153 | img_byte.card("test", "test-value", "this is for testing") |
| 124 | 154 | img_byte.card("real", 3.1415, "a real value") |
| 125 | 155 | img_byte.card("int", 41, "an integer value") |
| 126 | - sys.stdout.write(".") | |
| 156 | + | |
| 157 | + # Save FITS file | |
| 158 | + fits.save() | |
| 159 | + | |
| 160 | + # Close FITS file | |
| 161 | + fits.close() | |
| 162 | + | |
| 163 | + # Re-open FITS file | |
| 164 | + fits = gammalib.GFits(file1) | |
| 165 | + | |
| 166 | + # Get double precision image, take square root of pixel and save in | |
| 167 | + # another file | |
| 168 | + img_double = fits.image("Double") | |
| 169 | + for x in range(nx): | |
| 170 | + for y in range(ny): | |
| 171 | + img_double[x, y] = math.sqrt(img_double[x, y]) | |
| 172 | + | |
| 173 | + # Save into another FITS file | |
| 174 | + fits.saveto(file2) | |
| 175 | + | |
| 176 | + # Close FITS file | |
| 177 | + fits.close() | |
| 178 | + | |
| 179 | + # Return | |
| 180 | + return | |
| 181 | + | |
| 182 | + def test_fits_table(self): | |
| 183 | + """ | |
| 184 | + Test GFitsTable class interface. | |
| 185 | + """ | |
| 186 | + # Set test file names | |
| 187 | + file1 = gammalib.GFilename("test_python_fits_table_v1.fits") | |
| 188 | + file2 = gammalib.GFilename("test_python_fits_table_v2.fits") | |
| 189 | + | |
| 190 | + # Remove test files | |
| 191 | + file1.remove() | |
| 192 | + file2.remove() | |
| 193 | + | |
| 194 | + # Create FITS file | |
| 195 | + fits = gammalib.GFits(file1, True) | |
| 127 | 196 | |
| 128 | 197 | # Create table columns |
| 129 | 198 | nrows = 10 |
| ... | ... | @@ -152,7 +221,6 @@ class Test(gammalib.GPythonTestSuite): |
| 152 | 221 | col9[i] = str(i * 100) |
| 153 | 222 | col10[i] = i * 100 |
| 154 | 223 | col11[i] = i * 100 |
| 155 | - sys.stdout.write(".") | |
| 156 | 224 | |
| 157 | 225 | # Set ASCII table |
| 158 | 226 | tbl_ascii = gammalib.GFitsAsciiTable() |
| ... | ... | @@ -169,7 +237,6 @@ class Test(gammalib.GPythonTestSuite): |
| 169 | 237 | tbl_ascii.append(col11) |
| 170 | 238 | tbl_ascii.extname("ASCII table") |
| 171 | 239 | fits.append(tbl_ascii) |
| 172 | - sys.stdout.write(".") | |
| 173 | 240 | |
| 174 | 241 | # Set binary table |
| 175 | 242 | tbl_bin = gammalib.GFitsBinTable() |
| ... | ... | @@ -186,36 +253,12 @@ class Test(gammalib.GPythonTestSuite): |
| 186 | 253 | tbl_bin.append(col11) |
| 187 | 254 | tbl_bin.extname("Binary table") |
| 188 | 255 | fits.append(tbl_bin) |
| 189 | - sys.stdout.write(".") | |
| 190 | 256 | |
| 191 | 257 | # Save FITS file |
| 192 | - # sys.stdout.write(fits+"\n") | |
| 193 | 258 | fits.save() |
| 194 | - sys.stdout.write(".") | |
| 195 | - | |
| 196 | - # Close FITS file | |
| 197 | - fits.close() | |
| 198 | - sys.stdout.write(".") | |
| 199 | - | |
| 200 | - # Re-open FITS file | |
| 201 | - fits = gammalib.GFits(file1) | |
| 202 | - sys.stdout.write(".") | |
| 203 | - | |
| 204 | - # Get double precision image, take square root of pixel and save in | |
| 205 | - # another file | |
| 206 | - img_double = fits.image("Double") | |
| 207 | - for x in range(nx): | |
| 208 | - for y in range(ny): | |
| 209 | - img_double[x, y] = math.sqrt(img_double[x, y]) | |
| 210 | - sys.stdout.write(".") | |
| 211 | - | |
| 212 | - # Save into another FITS file | |
| 213 | - fits.saveto(file2) | |
| 214 | - sys.stdout.write(".") | |
| 215 | 259 | |
| 216 | 260 | # Close FITS file |
| 217 | 261 | fits.close() |
| 218 | - sys.stdout.write(".") | |
| 219 | 262 | |
| 220 | 263 | # Return |
| 221 | 264 | return | ... | ... |