Commit 9a1b801fc8b6fd7c0cb07bb836baa293704843be
1 parent
debf6fb1
Further improvement on Python code quality
Showing
11 changed files
with
225 additions
and
218 deletions
cscripts/csroot2caldb.py
| @@ -28,9 +28,9 @@ from cscripts import calutils | @@ -28,9 +28,9 @@ from cscripts import calutils | ||
| 28 | 28 | ||
| 29 | # Optional ROOT import | 29 | # Optional ROOT import |
| 30 | try: | 30 | try: |
| 31 | - from ROOT import TFile, TH1F, TH2F, TH3F | 31 | + from ROOT import TFile |
| 32 | _has_root = True | 32 | _has_root = True |
| 33 | -except: | 33 | +except ImportError: |
| 34 | _has_root = False | 34 | _has_root = False |
| 35 | 35 | ||
| 36 | 36 | ||
| @@ -159,11 +159,11 @@ class csroot2caldb(ctools.cscript): | @@ -159,11 +159,11 @@ class csroot2caldb(ctools.cscript): | ||
| 159 | 159 | ||
| 160 | Returns | 160 | Returns |
| 161 | ------- | 161 | ------- |
| 162 | - dir : dict | 162 | + ds : dict |
| 163 | Directory structure information | 163 | Directory structure information |
| 164 | """ | 164 | """ |
| 165 | # Initialise directory structure dictionary | 165 | # Initialise directory structure dictionary |
| 166 | - dir = {} | 166 | + ds = {} |
| 167 | 167 | ||
| 168 | # Set base directory | 168 | # Set base directory |
| 169 | base_dir = 'data' | 169 | base_dir = 'data' |
| @@ -172,54 +172,54 @@ class csroot2caldb(ctools.cscript): | @@ -172,54 +172,54 @@ class csroot2caldb(ctools.cscript): | ||
| 172 | 172 | ||
| 173 | # Set directory names | 173 | # Set directory names |
| 174 | obs_dir = base_dir+'/bcf/'+irf['CAL_OBSID'] | 174 | obs_dir = base_dir+'/bcf/'+irf['CAL_OBSID'] |
| 175 | - dir['EA_DIR'] = obs_dir | ||
| 176 | - dir['PSF_DIR'] = obs_dir | ||
| 177 | - dir['EDISP_DIR'] = obs_dir | ||
| 178 | - dir['BGD_DIR'] = obs_dir | 175 | + ds['EA_DIR'] = obs_dir |
| 176 | + ds['PSF_DIR'] = obs_dir | ||
| 177 | + ds['EDISP_DIR'] = obs_dir | ||
| 178 | + ds['BGD_DIR'] = obs_dir | ||
| 179 | 179 | ||
| 180 | # Set path to response components. If the "outdir" parameter is set | 180 | # Set path to response components. If the "outdir" parameter is set |
| 181 | # then prefix the value to the path of the response components | 181 | # then prefix the value to the path of the response components |
| 182 | outdir = self['outdir'].string() | 182 | outdir = self['outdir'].string() |
| 183 | if len(outdir) > 0: | 183 | if len(outdir) > 0: |
| 184 | - dir['BASE_PATH'] = outdir+'/'+base_dir | ||
| 185 | - dir['EA_PATH'] = outdir+'/'+dir['EA_DIR'] | ||
| 186 | - dir['PSF_PATH'] = outdir+'/'+dir['PSF_DIR'] | ||
| 187 | - dir['EDISP_PATH'] = outdir+'/'+dir['EDISP_DIR'] | ||
| 188 | - dir['BGD_PATH'] = outdir+'/'+dir['BGD_DIR'] | 184 | + ds['BASE_PATH'] = outdir+'/'+base_dir |
| 185 | + ds['EA_PATH'] = outdir+'/'+ds['EA_DIR'] | ||
| 186 | + ds['PSF_PATH'] = outdir+'/'+ds['PSF_DIR'] | ||
| 187 | + ds['EDISP_PATH'] = outdir+'/'+ds['EDISP_DIR'] | ||
| 188 | + ds['BGD_PATH'] = outdir+'/'+ds['BGD_DIR'] | ||
| 189 | else: | 189 | else: |
| 190 | - dir['BASE_PATH'] = base_dir | ||
| 191 | - dir['EA_PATH'] = dir['EA_DIR'] | ||
| 192 | - dir['PSF_PATH'] = dir['PSF_DIR'] | ||
| 193 | - dir['EDISP_PATH'] = dir['EDISP_DIR'] | ||
| 194 | - dir['BGD_PATH'] = dir['BGD_DIR'] | 190 | + ds['BASE_PATH'] = base_dir |
| 191 | + ds['EA_PATH'] = ds['EA_DIR'] | ||
| 192 | + ds['PSF_PATH'] = ds['PSF_DIR'] | ||
| 193 | + ds['EDISP_PATH'] = ds['EDISP_DIR'] | ||
| 194 | + ds['BGD_PATH'] = ds['BGD_DIR'] | ||
| 195 | 195 | ||
| 196 | # Set IRF component file names. If the "split" parameter is "yes" then | 196 | # Set IRF component file names. If the "split" parameter is "yes" then |
| 197 | # split the IRF components over several files. | 197 | # split the IRF components over several files. |
| 198 | if self['split'].boolean(): | 198 | if self['split'].boolean(): |
| 199 | - dir['EA_FILE'] = 'ea_'+version+'.fits' | ||
| 200 | - dir['PSF_FILE'] = 'psf_'+version+'.fits' | ||
| 201 | - dir['EDISP_FILE'] = 'edisp_'+version+'.fits' | ||
| 202 | - dir['BGD_FILE'] = 'bgd_'+version+'.fits' | 199 | + ds['EA_FILE'] = 'ea_'+version+'.fits' |
| 200 | + ds['PSF_FILE'] = 'psf_'+version+'.fits' | ||
| 201 | + ds['EDISP_FILE'] = 'edisp_'+version+'.fits' | ||
| 202 | + ds['BGD_FILE'] = 'bgd_'+version+'.fits' | ||
| 203 | else: | 203 | else: |
| 204 | - dir['EA_FILE'] = 'irf_'+version+'.fits' | ||
| 205 | - dir['PSF_FILE'] = 'irf_'+version+'.fits' | ||
| 206 | - dir['EDISP_FILE'] = 'irf_'+version+'.fits' | ||
| 207 | - dir['BGD_FILE'] = 'irf_'+version+'.fits' | 204 | + ds['EA_FILE'] = 'irf_'+version+'.fits' |
| 205 | + ds['PSF_FILE'] = 'irf_'+version+'.fits' | ||
| 206 | + ds['EDISP_FILE'] = 'irf_'+version+'.fits' | ||
| 207 | + ds['BGD_FILE'] = 'irf_'+version+'.fits' | ||
| 208 | 208 | ||
| 209 | # Create directory structure | 209 | # Create directory structure |
| 210 | - if not os.path.isdir(dir['EA_PATH']): | ||
| 211 | - os.makedirs(dir['EA_PATH']) | ||
| 212 | - if not os.path.isdir(dir['PSF_PATH']): | ||
| 213 | - os.makedirs(dir['PSF_PATH']) | ||
| 214 | - if not os.path.isdir(dir['EDISP_PATH']): | ||
| 215 | - os.makedirs(dir['EDISP_PATH']) | ||
| 216 | - if not os.path.isdir(dir['BGD_PATH']): | ||
| 217 | - os.makedirs(dir['BGD_PATH']) | ||
| 218 | - | ||
| 219 | - # Return dir | ||
| 220 | - return dir | ||
| 221 | - | ||
| 222 | - def _open(self, irf, dir): | 210 | + if not os.path.isdir(ds['EA_PATH']): |
| 211 | + os.makedirs(ds['EA_PATH']) | ||
| 212 | + if not os.path.isdir(ds['PSF_PATH']): | ||
| 213 | + os.makedirs(ds['PSF_PATH']) | ||
| 214 | + if not os.path.isdir(ds['EDISP_PATH']): | ||
| 215 | + os.makedirs(ds['EDISP_PATH']) | ||
| 216 | + if not os.path.isdir(ds['BGD_PATH']): | ||
| 217 | + os.makedirs(ds['BGD_PATH']) | ||
| 218 | + | ||
| 219 | + # Return ds | ||
| 220 | + return ds | ||
| 221 | + | ||
| 222 | + def _open(self, irf, ds): | ||
| 223 | """ | 223 | """ |
| 224 | Open existing or create new calibration | 224 | Open existing or create new calibration |
| 225 | 225 | ||
| @@ -232,55 +232,55 @@ class csroot2caldb(ctools.cscript): | @@ -232,55 +232,55 @@ class csroot2caldb(ctools.cscript): | ||
| 232 | ---------- | 232 | ---------- |
| 233 | irf : dict | 233 | irf : dict |
| 234 | IRF metadata dictionary | 234 | IRF metadata dictionary |
| 235 | - dir : dict | 235 | + ds : dict |
| 236 | Directory structure dictionary | 236 | Directory structure dictionary |
| 237 | """ | 237 | """ |
| 238 | # Open calibration database index | 238 | # Open calibration database index |
| 239 | - dir['CIF'] = gammalib.GFits(dir['BASE_PATH']+'/caldb.indx', True) | 239 | + ds['CIF'] = gammalib.GFits(ds['BASE_PATH']+'/caldb.indx', True) |
| 240 | 240 | ||
| 241 | # If file has no CIF extension than create it now | 241 | # If file has no CIF extension than create it now |
| 242 | try: | 242 | try: |
| 243 | - dir['HDU_CIF'] = dir['CIF'].table('CIF') | 243 | + ds['HDU_CIF'] = ds['CIF'].table('CIF') |
| 244 | except: | 244 | except: |
| 245 | - dir['CIF'].append(calutils.create_cif_table()) | ||
| 246 | - dir['HDU_CIF'] = dir['CIF'].table('CIF') | 245 | + ds['CIF'].append(calutils.create_cif_table()) |
| 246 | + ds['HDU_CIF'] = ds['CIF'].table('CIF') | ||
| 247 | 247 | ||
| 248 | # Set IRF component filenames | 248 | # Set IRF component filenames |
| 249 | - ea_filename = dir['EA_PATH']+'/'+dir['EA_FILE'] | ||
| 250 | - psf_filename = dir['PSF_PATH']+'/'+dir['PSF_FILE'] | ||
| 251 | - edisp_filename = dir['EDISP_PATH']+'/'+dir['EDISP_FILE'] | ||
| 252 | - bgd_filename = dir['BGD_PATH']+'/'+dir['BGD_FILE'] | 249 | + ea_filename = ds['EA_PATH']+'/'+ds['EA_FILE'] |
| 250 | + psf_filename = ds['PSF_PATH']+'/'+ds['PSF_FILE'] | ||
| 251 | + edisp_filename = ds['EDISP_PATH']+'/'+ds['EDISP_FILE'] | ||
| 252 | + bgd_filename = ds['BGD_PATH']+'/'+ds['BGD_FILE'] | ||
| 253 | 253 | ||
| 254 | # Open IRF component files | 254 | # Open IRF component files |
| 255 | if self['split'].boolean(): | 255 | if self['split'].boolean(): |
| 256 | - dir['EA_FITS'] = gammalib.GFits(ea_filename, True) | ||
| 257 | - dir['PSF_FITS'] = gammalib.GFits(psf_filename, True) | ||
| 258 | - dir['EDISP_FITS'] = gammalib.GFits(edisp_filename, True) | ||
| 259 | - dir['BGD_FITS'] = gammalib.GFits(bgd_filename, True) | 256 | + ds['EA_FITS'] = gammalib.GFits(ea_filename, True) |
| 257 | + ds['PSF_FITS'] = gammalib.GFits(psf_filename, True) | ||
| 258 | + ds['EDISP_FITS'] = gammalib.GFits(edisp_filename, True) | ||
| 259 | + ds['BGD_FITS'] = gammalib.GFits(bgd_filename, True) | ||
| 260 | else: | 260 | else: |
| 261 | - dir['EA_FITS'] = gammalib.GFits(ea_filename, True) | ||
| 262 | - dir['PSF_FITS'] = dir['EA_FITS'] | ||
| 263 | - dir['EDISP_FITS'] = dir['EA_FITS'] | ||
| 264 | - dir['BGD_FITS'] = dir['EA_FITS'] | 261 | + ds['EA_FITS'] = gammalib.GFits(ea_filename, True) |
| 262 | + ds['PSF_FITS'] = ds['EA_FITS'] | ||
| 263 | + ds['EDISP_FITS'] = ds['EA_FITS'] | ||
| 264 | + ds['BGD_FITS'] = ds['EA_FITS'] | ||
| 265 | 265 | ||
| 266 | # Open HDUs | 266 | # Open HDUs |
| 267 | - dir['HDU_EA'] = self._open_hdu(dir['EA_FITS'], "EFFECTIVE AREA", | ||
| 268 | - irf['EA_NAME'], irf['EA_DOC'], | ||
| 269 | - irf) | ||
| 270 | - dir['HDU_PSF'] = self._open_hdu(dir['PSF_FITS'], "POINT SPREAD FUNCTION", | ||
| 271 | - irf['PSF_NAME'], irf['PSF_DOC'], | ||
| 272 | - irf) | ||
| 273 | - dir['HDU_EDISP'] = self._open_hdu(dir['EDISP_FITS'], "ENERGY DISPERSION", | ||
| 274 | - irf['EDISP_NAME'], irf['EDISP_DOC'], | ||
| 275 | - irf) | ||
| 276 | - dir['HDU_BGD'] = self._open_hdu(dir['BGD_FITS'], "BACKGROUND", | ||
| 277 | - irf['BGD_NAME'], irf['BGD_DOC'], | ||
| 278 | - irf) | 267 | + ds['HDU_EA'] = self._open_hdu(ds['EA_FITS'], "EFFECTIVE AREA", |
| 268 | + irf['EA_NAME'], irf['EA_DOC'], | ||
| 269 | + irf) | ||
| 270 | + ds['HDU_PSF'] = self._open_hdu(ds['PSF_FITS'], "POINT SPREAD FUNCTION", | ||
| 271 | + irf['PSF_NAME'], irf['PSF_DOC'], | ||
| 272 | + irf) | ||
| 273 | + ds['HDU_EDISP'] = self._open_hdu(ds['EDISP_FITS'], "ENERGY DISPERSION", | ||
| 274 | + irf['EDISP_NAME'], irf['EDISP_DOC'], | ||
| 275 | + irf) | ||
| 276 | + ds['HDU_BGD'] = self._open_hdu(ds['BGD_FITS'], "BACKGROUND", | ||
| 277 | + irf['BGD_NAME'], irf['BGD_DOC'], | ||
| 278 | + irf) | ||
| 279 | 279 | ||
| 280 | # Return | 280 | # Return |
| 281 | return | 281 | return |
| 282 | 282 | ||
| 283 | - def _close(self, irf, dir): | 283 | + def _close(self, irf, ds): |
| 284 | """ | 284 | """ |
| 285 | Close calibration FITS files | 285 | Close calibration FITS files |
| 286 | 286 | ||
| @@ -288,30 +288,30 @@ class csroot2caldb(ctools.cscript): | @@ -288,30 +288,30 @@ class csroot2caldb(ctools.cscript): | ||
| 288 | ---------- | 288 | ---------- |
| 289 | irf : dict | 289 | irf : dict |
| 290 | IRF metadata dictionary | 290 | IRF metadata dictionary |
| 291 | - dir : dict | 291 | + ds : dict |
| 292 | Directory structure dictionary | 292 | Directory structure dictionary |
| 293 | """ | 293 | """ |
| 294 | # Add information to CIF. We do this now as before we did not | 294 | # Add information to CIF. We do this now as before we did not |
| 295 | # necessarily have all the information at hand (in particular about | 295 | # necessarily have all the information at hand (in particular about |
| 296 | # the boundaries) | 296 | # the boundaries) |
| 297 | - self._add_cif_info(irf, dir) | 297 | + self._add_cif_info(irf, ds) |
| 298 | 298 | ||
| 299 | # Save and close CIF | 299 | # Save and close CIF |
| 300 | - dir['CIF'].save(True) | ||
| 301 | - dir['CIF'].close() | 300 | + ds['CIF'].save(True) |
| 301 | + ds['CIF'].close() | ||
| 302 | 302 | ||
| 303 | # Close all IRF components. If the files have been split all components | 303 | # Close all IRF components. If the files have been split all components |
| 304 | # need to be closed, otherwise only the effective area component needs | 304 | # need to be closed, otherwise only the effective area component needs |
| 305 | # to be closed as representative for all components. | 305 | # to be closed as representative for all components. |
| 306 | - dir['EA_FITS'].save(True) | ||
| 307 | - dir['EA_FITS'].close() | 306 | + ds['EA_FITS'].save(True) |
| 307 | + ds['EA_FITS'].close() | ||
| 308 | if self['split'].boolean(): | 308 | if self['split'].boolean(): |
| 309 | - dir['PSF_FITS'].save(True) | ||
| 310 | - dir['EDISP_FITS'].save(True) | ||
| 311 | - dir['BGD_FITS'].save(True) | ||
| 312 | - dir['PSF_FITS'].close() | ||
| 313 | - dir['EDISP_FITS'].close() | ||
| 314 | - dir['BGD_FITS'].close() | 309 | + ds['PSF_FITS'].save(True) |
| 310 | + ds['EDISP_FITS'].save(True) | ||
| 311 | + ds['BGD_FITS'].save(True) | ||
| 312 | + ds['PSF_FITS'].close() | ||
| 313 | + ds['EDISP_FITS'].close() | ||
| 314 | + ds['BGD_FITS'].close() | ||
| 315 | 315 | ||
| 316 | # Return | 316 | # Return |
| 317 | return | 317 | return |
| @@ -393,7 +393,7 @@ class csroot2caldb(ctools.cscript): | @@ -393,7 +393,7 @@ class csroot2caldb(ctools.cscript): | ||
| 393 | # Return | 393 | # Return |
| 394 | return | 394 | return |
| 395 | 395 | ||
| 396 | - def _add_cif_info(self, irf, dir): | 396 | + def _add_cif_info(self, irf, ds): |
| 397 | """ | 397 | """ |
| 398 | Add information to CIF extension | 398 | Add information to CIF extension |
| 399 | 399 | ||
| @@ -401,17 +401,17 @@ class csroot2caldb(ctools.cscript): | @@ -401,17 +401,17 @@ class csroot2caldb(ctools.cscript): | ||
| 401 | ---------- | 401 | ---------- |
| 402 | irf : dict | 402 | irf : dict |
| 403 | IRF metadata dictionary | 403 | IRF metadata dictionary |
| 404 | - dir : dict | 404 | + ds : dict |
| 405 | Directory structure dictionary | 405 | Directory structure dictionary |
| 406 | """ | 406 | """ |
| 407 | # Set list of IRF component names | 407 | # Set list of IRF component names |
| 408 | names = ['EA', 'PSF', 'EDISP', 'BGD'] | 408 | names = ['EA', 'PSF', 'EDISP', 'BGD'] |
| 409 | 409 | ||
| 410 | # Initialise CIF row index | 410 | # Initialise CIF row index |
| 411 | - row = dir['HDU_CIF'].nrows() | 411 | + row = ds['HDU_CIF'].nrows() |
| 412 | 412 | ||
| 413 | # Append rows for all components to CIF extension | 413 | # Append rows for all components to CIF extension |
| 414 | - dir['HDU_CIF'].append_rows(len(names)) | 414 | + ds['HDU_CIF'].append_rows(len(names)) |
| 415 | 415 | ||
| 416 | # Add information for all components | 416 | # Add information for all components |
| 417 | for name in names: | 417 | for name in names: |
| @@ -424,30 +424,30 @@ class csroot2caldb(ctools.cscript): | @@ -424,30 +424,30 @@ class csroot2caldb(ctools.cscript): | ||
| 424 | key_bounds = '%s_BOUNDS' % name | 424 | key_bounds = '%s_BOUNDS' % name |
| 425 | 425 | ||
| 426 | # Set generic information | 426 | # Set generic information |
| 427 | - dir['HDU_CIF']['TELESCOP'][row] = irf['CAL_TEL'] | ||
| 428 | - dir['HDU_CIF']['INSTRUME'][row] = irf['CAL_INST'] | ||
| 429 | - dir['HDU_CIF']['DETNAM'][row] = irf['CAL_DET'] | ||
| 430 | - dir['HDU_CIF']['FILTER'][row] = irf['CAL_FLT'] | ||
| 431 | - dir['HDU_CIF']['CAL_DEV'][row] = 'ONLINE' | ||
| 432 | - dir['HDU_CIF']['CAL_CLAS'][row] = irf['CAL_CLASS'] | ||
| 433 | - dir['HDU_CIF']['CAL_DTYP'][row] = irf['CAL_TYPE'] | ||
| 434 | - dir['HDU_CIF']['CAL_VSD'][row] = irf['VAL_DATE'] | ||
| 435 | - dir['HDU_CIF']['CAL_VST'][row] = irf['VAL_TIME'] | ||
| 436 | - dir['HDU_CIF']['REF_TIME'][row] = irf['REF_TIME'] | ||
| 437 | - dir['HDU_CIF']['CAL_QUAL'][row] = irf['CAL_QUAL'] | ||
| 438 | - dir['HDU_CIF']['CAL_DATE'][row] = irf['CAL_DATE'] | 427 | + ds['HDU_CIF']['TELESCOP'][row] = irf['CAL_TEL'] |
| 428 | + ds['HDU_CIF']['INSTRUME'][row] = irf['CAL_INST'] | ||
| 429 | + ds['HDU_CIF']['DETNAM'][row] = irf['CAL_DET'] | ||
| 430 | + ds['HDU_CIF']['FILTER'][row] = irf['CAL_FLT'] | ||
| 431 | + ds['HDU_CIF']['CAL_DEV'][row] = 'ONLINE' | ||
| 432 | + ds['HDU_CIF']['CAL_CLAS'][row] = irf['CAL_CLASS'] | ||
| 433 | + ds['HDU_CIF']['CAL_DTYP'][row] = irf['CAL_TYPE'] | ||
| 434 | + ds['HDU_CIF']['CAL_VSD'][row] = irf['VAL_DATE'] | ||
| 435 | + ds['HDU_CIF']['CAL_VST'][row] = irf['VAL_TIME'] | ||
| 436 | + ds['HDU_CIF']['REF_TIME'][row] = irf['REF_TIME'] | ||
| 437 | + ds['HDU_CIF']['CAL_QUAL'][row] = irf['CAL_QUAL'] | ||
| 438 | + ds['HDU_CIF']['CAL_DATE'][row] = irf['CAL_DATE'] | ||
| 439 | 439 | ||
| 440 | # Set component specific information | 440 | # Set component specific information |
| 441 | - dir['HDU_CIF']['CAL_DIR'][row] = dir[key_dir] | ||
| 442 | - dir['HDU_CIF']['CAL_FILE'][row] = dir[key_file] | ||
| 443 | - dir['HDU_CIF']['CAL_CNAM'][row] = irf[key_name] | ||
| 444 | - dir['HDU_CIF']['CAL_DESC'][row] = irf[key_desc] | ||
| 445 | - dir['HDU_CIF']['CAL_XNO'][row] = 1 | 441 | + ds['HDU_CIF']['CAL_DIR'][row] = ds[key_dir] |
| 442 | + ds['HDU_CIF']['CAL_FILE'][row] = ds[key_file] | ||
| 443 | + ds['HDU_CIF']['CAL_CNAM'][row] = irf[key_name] | ||
| 444 | + ds['HDU_CIF']['CAL_DESC'][row] = irf[key_desc] | ||
| 445 | + ds['HDU_CIF']['CAL_XNO'][row] = 1 | ||
| 446 | for i in range(9): | 446 | for i in range(9): |
| 447 | if i >= len(irf[key_bounds]): | 447 | if i >= len(irf[key_bounds]): |
| 448 | - dir['HDU_CIF']['CAL_CBD'][row,i] = 'NONE' | 448 | + ds['HDU_CIF']['CAL_CBD'][row,i] = 'NONE' |
| 449 | else: | 449 | else: |
| 450 | - dir['HDU_CIF']['CAL_CBD'][row,i] = irf[key_bounds][i] | 450 | + ds['HDU_CIF']['CAL_CBD'][row,i] = irf[key_bounds][i] |
| 451 | 451 | ||
| 452 | # Increment row index | 452 | # Increment row index |
| 453 | row += 1 | 453 | row += 1 |
| @@ -499,7 +499,7 @@ class csroot2caldb(ctools.cscript): | @@ -499,7 +499,7 @@ class csroot2caldb(ctools.cscript): | ||
| 499 | 499 | ||
| 500 | 500 | ||
| 501 | # ROOT specific private members | 501 | # ROOT specific private members |
| 502 | - def _root2caldb(self, irf, dir): | 502 | + def _root2caldb(self, irf, ds): |
| 503 | """ | 503 | """ |
| 504 | Translate ROOT to CALDB information | 504 | Translate ROOT to CALDB information |
| 505 | 505 | ||
| @@ -507,28 +507,28 @@ class csroot2caldb(ctools.cscript): | @@ -507,28 +507,28 @@ class csroot2caldb(ctools.cscript): | ||
| 507 | ---------- | 507 | ---------- |
| 508 | irf : dict | 508 | irf : dict |
| 509 | IRF metadata dictionary | 509 | IRF metadata dictionary |
| 510 | - dir : dict | 510 | + ds : dict |
| 511 | Directory structure dictionary | 511 | Directory structure dictionary |
| 512 | """ | 512 | """ |
| 513 | # Open ROOT performance file | 513 | # Open ROOT performance file |
| 514 | file = TFile(self['infile'].filename().url()) | 514 | file = TFile(self['infile'].filename().url()) |
| 515 | 515 | ||
| 516 | # Create effective area | 516 | # Create effective area |
| 517 | - self._root2ea(file, irf, dir) | 517 | + self._root2ea(file, irf, ds) |
| 518 | 518 | ||
| 519 | # Create point spread function | 519 | # Create point spread function |
| 520 | - self._root2psf(file, irf, dir) | 520 | + self._root2psf(file, irf, ds) |
| 521 | 521 | ||
| 522 | # Create energy dispersion | 522 | # Create energy dispersion |
| 523 | - self._root2edisp(file, irf, dir) | 523 | + self._root2edisp(file, irf, ds) |
| 524 | 524 | ||
| 525 | # Create background | 525 | # Create background |
| 526 | - self._root2bgd(file, irf, dir) | 526 | + self._root2bgd(file, irf, ds) |
| 527 | 527 | ||
| 528 | # Return | 528 | # Return |
| 529 | return | 529 | return |
| 530 | 530 | ||
| 531 | - def _root2ea(self, file, irf, dir): | 531 | + def _root2ea(self, file, irf, ds): |
| 532 | """ | 532 | """ |
| 533 | Translate ROOT to CALDB effective area extension | 533 | Translate ROOT to CALDB effective area extension |
| 534 | 534 | ||
| @@ -542,7 +542,7 @@ class csroot2caldb(ctools.cscript): | @@ -542,7 +542,7 @@ class csroot2caldb(ctools.cscript): | ||
| 542 | ROOT file | 542 | ROOT file |
| 543 | irf : dict | 543 | irf : dict |
| 544 | IRF metadata dictionary | 544 | IRF metadata dictionary |
| 545 | - dir : dict | 545 | + ds : dict |
| 546 | Directory structure dictionary | 546 | Directory structure dictionary |
| 547 | """ | 547 | """ |
| 548 | # Write header | 548 | # Write header |
| @@ -594,24 +594,24 @@ class csroot2caldb(ctools.cscript): | @@ -594,24 +594,24 @@ class csroot2caldb(ctools.cscript): | ||
| 594 | ereco.SetBinContent(ieng+1,ioff+1,value) | 594 | ereco.SetBinContent(ieng+1,ioff+1,value) |
| 595 | 595 | ||
| 596 | # Set boundaries (use Ereco boundaries) | 596 | # Set boundaries (use Ereco boundaries) |
| 597 | - bounds = self._make_2D(ereco, dir['HDU_EA'], None, 'm2') | 597 | + bounds = self._make_2D(ereco, ds['HDU_EA'], None, 'm2') |
| 598 | for b in bounds: | 598 | for b in bounds: |
| 599 | irf['EA_BOUNDS'].append(b) | 599 | irf['EA_BOUNDS'].append(b) |
| 600 | 600 | ||
| 601 | # Write boundary keywords | 601 | # Write boundary keywords |
| 602 | - self._set_cif_keywords(dir['HDU_EA'], irf['EA_NAME'], | 602 | + self._set_cif_keywords(ds['HDU_EA'], irf['EA_NAME'], |
| 603 | irf['EA_BOUNDS'], irf['EA_DESC'], irf) | 603 | irf['EA_BOUNDS'], irf['EA_DESC'], irf) |
| 604 | 604 | ||
| 605 | # Create "EFFAREA" data column | 605 | # Create "EFFAREA" data column |
| 606 | - self._make_2D(etrue, dir['HDU_EA'], 'EFFAREA', 'm2') | 606 | + self._make_2D(etrue, ds['HDU_EA'], 'EFFAREA', 'm2') |
| 607 | 607 | ||
| 608 | # Create "EFFAREA_RECO" data column | 608 | # Create "EFFAREA_RECO" data column |
| 609 | - self._make_2D(ereco, dir['HDU_EA'], 'EFFAREA_RECO', 'm2') | 609 | + self._make_2D(ereco, ds['HDU_EA'], 'EFFAREA_RECO', 'm2') |
| 610 | 610 | ||
| 611 | # Return | 611 | # Return |
| 612 | return | 612 | return |
| 613 | 613 | ||
| 614 | - def _root2psf(self, file, irf, dir): | 614 | + def _root2psf(self, file, irf, ds): |
| 615 | """ | 615 | """ |
| 616 | Translate ROOT to CALDB point spread function extension | 616 | Translate ROOT to CALDB point spread function extension |
| 617 | 617 | ||
| @@ -621,7 +621,7 @@ class csroot2caldb(ctools.cscript): | @@ -621,7 +621,7 @@ class csroot2caldb(ctools.cscript): | ||
| 621 | ROOT file | 621 | ROOT file |
| 622 | irf : dict | 622 | irf : dict |
| 623 | IRF metadata dictionary | 623 | IRF metadata dictionary |
| 624 | - dir : dict | 624 | + ds : dict |
| 625 | Directory structure dictionary | 625 | Directory structure dictionary |
| 626 | """ | 626 | """ |
| 627 | # Write header | 627 | # Write header |
| @@ -631,16 +631,16 @@ class csroot2caldb(ctools.cscript): | @@ -631,16 +631,16 @@ class csroot2caldb(ctools.cscript): | ||
| 631 | 631 | ||
| 632 | # King profile PSF | 632 | # King profile PSF |
| 633 | if self['psftype'].string() == 'King': | 633 | if self['psftype'].string() == 'King': |
| 634 | - self._root2psf_king(file, irf, dir) | 634 | + self._root2psf_king(file, irf, ds) |
| 635 | 635 | ||
| 636 | # ... otherwise use Gaussian profile PSF | 636 | # ... otherwise use Gaussian profile PSF |
| 637 | else: | 637 | else: |
| 638 | - self._root2psf_gauss(file, irf, dir) | 638 | + self._root2psf_gauss(file, irf, ds) |
| 639 | 639 | ||
| 640 | # Return | 640 | # Return |
| 641 | return | 641 | return |
| 642 | 642 | ||
| 643 | - def _root2psf_gauss(self, file, irf, dir): | 643 | + def _root2psf_gauss(self, file, irf, ds): |
| 644 | """ | 644 | """ |
| 645 | Translate ROOT to CALDB point spread function extension | 645 | Translate ROOT to CALDB point spread function extension |
| 646 | 646 | ||
| @@ -658,7 +658,7 @@ class csroot2caldb(ctools.cscript): | @@ -658,7 +658,7 @@ class csroot2caldb(ctools.cscript): | ||
| 658 | ROOT file | 658 | ROOT file |
| 659 | irf : dict | 659 | irf : dict |
| 660 | IRF metadata dictionary | 660 | IRF metadata dictionary |
| 661 | - dir : dict | 661 | + ds : dict |
| 662 | Directory structure dictionary | 662 | Directory structure dictionary |
| 663 | """ | 663 | """ |
| 664 | # Get relevant ROOT histograms | 664 | # Get relevant ROOT histograms |
| @@ -693,37 +693,37 @@ class csroot2caldb(ctools.cscript): | @@ -693,37 +693,37 @@ class csroot2caldb(ctools.cscript): | ||
| 693 | zero.SetBinContent(ieng+1,ioff+1,0.0) | 693 | zero.SetBinContent(ieng+1,ioff+1,0.0) |
| 694 | 694 | ||
| 695 | # Set boundaries | 695 | # Set boundaries |
| 696 | - bounds = self._make_2D(r68, dir['HDU_PSF'], None, 'deg') | 696 | + bounds = self._make_2D(r68, ds['HDU_PSF'], None, 'deg') |
| 697 | for b in bounds: | 697 | for b in bounds: |
| 698 | irf['PSF_BOUNDS'].append(b) | 698 | irf['PSF_BOUNDS'].append(b) |
| 699 | irf['PSF_BOUNDS'].append('PSF(GAUSS)') | 699 | irf['PSF_BOUNDS'].append('PSF(GAUSS)') |
| 700 | 700 | ||
| 701 | # Write boundary keywords | 701 | # Write boundary keywords |
| 702 | - self._set_cif_keywords(dir['HDU_PSF'], irf['PSF_NAME'], | 702 | + self._set_cif_keywords(ds['HDU_PSF'], irf['PSF_NAME'], |
| 703 | irf['PSF_BOUNDS'], irf['PSF_DESC'], irf) | 703 | irf['PSF_BOUNDS'], irf['PSF_DESC'], irf) |
| 704 | 704 | ||
| 705 | # Create "SCALE" data column | 705 | # Create "SCALE" data column |
| 706 | - self._make_2D(scale, dir['HDU_PSF'], 'SCALE', '') | 706 | + self._make_2D(scale, ds['HDU_PSF'], 'SCALE', '') |
| 707 | 707 | ||
| 708 | # Create "SIGMA_1" data column | 708 | # Create "SIGMA_1" data column |
| 709 | - self._make_2D(r68, dir['HDU_PSF'], 'SIGMA_1', 'deg') | 709 | + self._make_2D(r68, ds['HDU_PSF'], 'SIGMA_1', 'deg') |
| 710 | 710 | ||
| 711 | # Create "AMPL_2" data column | 711 | # Create "AMPL_2" data column |
| 712 | - self._make_2D(zero, dir['HDU_PSF'], 'AMPL_2', '') | 712 | + self._make_2D(zero, ds['HDU_PSF'], 'AMPL_2', '') |
| 713 | 713 | ||
| 714 | # Create "SIGMA_2" data column | 714 | # Create "SIGMA_2" data column |
| 715 | - self._make_2D(zero, dir['HDU_PSF'], 'SIGMA_2', 'deg') | 715 | + self._make_2D(zero, ds['HDU_PSF'], 'SIGMA_2', 'deg') |
| 716 | 716 | ||
| 717 | # Create "AMPL_3" data column | 717 | # Create "AMPL_3" data column |
| 718 | - self._make_2D(zero, dir['HDU_PSF'], 'AMPL_3', '') | 718 | + self._make_2D(zero, ds['HDU_PSF'], 'AMPL_3', '') |
| 719 | 719 | ||
| 720 | # Create "SIGMA_3" data column | 720 | # Create "SIGMA_3" data column |
| 721 | - self._make_2D(zero, dir['HDU_PSF'], 'SIGMA_3', 'deg') | 721 | + self._make_2D(zero, ds['HDU_PSF'], 'SIGMA_3', 'deg') |
| 722 | 722 | ||
| 723 | # Return | 723 | # Return |
| 724 | return | 724 | return |
| 725 | 725 | ||
| 726 | - def _root2psf_king(self, file, irf, dir): | 726 | + def _root2psf_king(self, file, irf, ds): |
| 727 | """ | 727 | """ |
| 728 | Translate ROOT to CALDB point spread function extension | 728 | Translate ROOT to CALDB point spread function extension |
| 729 | 729 | ||
| @@ -737,7 +737,7 @@ class csroot2caldb(ctools.cscript): | @@ -737,7 +737,7 @@ class csroot2caldb(ctools.cscript): | ||
| 737 | ROOT file | 737 | ROOT file |
| 738 | irf : dict | 738 | irf : dict |
| 739 | IRF metadata dictionary | 739 | IRF metadata dictionary |
| 740 | - dir : dict | 740 | + ds : dict |
| 741 | Directory structure dictionary | 741 | Directory structure dictionary |
| 742 | """ | 742 | """ |
| 743 | # Get relevant ROOT histograms | 743 | # Get relevant ROOT histograms |
| @@ -784,11 +784,9 @@ class csroot2caldb(ctools.cscript): | @@ -784,11 +784,9 @@ class csroot2caldb(ctools.cscript): | ||
| 784 | x2 = -1.0 | 784 | x2 = -1.0 |
| 785 | f1 = (math.pow(a,x1) - 1.0)/(math.pow(b,x1) - 1.0) - c | 785 | f1 = (math.pow(a,x1) - 1.0)/(math.pow(b,x1) - 1.0) - c |
| 786 | f2 = (math.pow(a,x2) - 1.0)/(math.pow(b,x2) - 1.0) - c | 786 | f2 = (math.pow(a,x2) - 1.0)/(math.pow(b,x2) - 1.0) - c |
| 787 | - iter = 0 | ||
| 788 | while True: | 787 | while True: |
| 789 | x = x1 - f1 * (x1-x2)/(f1-f2) | 788 | x = x1 - f1 * (x1-x2)/(f1-f2) |
| 790 | f = (math.pow(a,x) - 1.0)/(math.pow(b,x) - 1.0) - c | 789 | f = (math.pow(a,x) - 1.0)/(math.pow(b,x) - 1.0) - c |
| 791 | - iter += 1 | ||
| 792 | if abs(f) < 1.0e-6: | 790 | if abs(f) < 1.0e-6: |
| 793 | break | 791 | break |
| 794 | else: | 792 | else: |
| @@ -826,33 +824,30 @@ class csroot2caldb(ctools.cscript): | @@ -826,33 +824,30 @@ class csroot2caldb(ctools.cscript): | ||
| 826 | last_gamma = gamma | 824 | last_gamma = gamma |
| 827 | last_sigma = sigma | 825 | last_sigma = sigma |
| 828 | 826 | ||
| 829 | - # Show results on console | ||
| 830 | - #print(ioff,ieng,gamma,sigma,x,f,iter) | ||
| 831 | - | ||
| 832 | # Set bin contents | 827 | # Set bin contents |
| 833 | gamma2D.SetBinContent(ieng+1,ioff+1,gamma) | 828 | gamma2D.SetBinContent(ieng+1,ioff+1,gamma) |
| 834 | sigma2D.SetBinContent(ieng+1,ioff+1,sigma) | 829 | sigma2D.SetBinContent(ieng+1,ioff+1,sigma) |
| 835 | 830 | ||
| 836 | # Set boundaries | 831 | # Set boundaries |
| 837 | - bounds = self._make_2D(r68, dir['HDU_PSF'], None, 'deg') | 832 | + bounds = self._make_2D(r68, ds['HDU_PSF'], None, 'deg') |
| 838 | for b in bounds: | 833 | for b in bounds: |
| 839 | irf['PSF_BOUNDS'].append(b) | 834 | irf['PSF_BOUNDS'].append(b) |
| 840 | irf['PSF_BOUNDS'].append('PSF(KING)') | 835 | irf['PSF_BOUNDS'].append('PSF(KING)') |
| 841 | 836 | ||
| 842 | # Write boundary keywords | 837 | # Write boundary keywords |
| 843 | - self._set_cif_keywords(dir['HDU_PSF'], irf['PSF_NAME'], | 838 | + self._set_cif_keywords(ds['HDU_PSF'], irf['PSF_NAME'], |
| 844 | irf['PSF_BOUNDS'], irf['PSF_DESC'], irf) | 839 | irf['PSF_BOUNDS'], irf['PSF_DESC'], irf) |
| 845 | 840 | ||
| 846 | # Create "GAMMA" data column | 841 | # Create "GAMMA" data column |
| 847 | - self._make_2D(gamma2D, dir['HDU_PSF'], 'GAMMA', '') | 842 | + self._make_2D(gamma2D, ds['HDU_PSF'], 'GAMMA', '') |
| 848 | 843 | ||
| 849 | # Create "SIGMA" data column | 844 | # Create "SIGMA" data column |
| 850 | - self._make_2D(sigma2D, dir['HDU_PSF'], 'SIGMA', 'deg') | 845 | + self._make_2D(sigma2D, ds['HDU_PSF'], 'SIGMA', 'deg') |
| 851 | 846 | ||
| 852 | # Return | 847 | # Return |
| 853 | return | 848 | return |
| 854 | 849 | ||
| 855 | - def _root2edisp(self, file, irf, dir): | 850 | + def _root2edisp(self, file, irf, ds): |
| 856 | """ | 851 | """ |
| 857 | Translate ROOT to CALDB energy dispersion extension | 852 | Translate ROOT to CALDB energy dispersion extension |
| 858 | 853 | ||
| @@ -865,7 +860,7 @@ class csroot2caldb(ctools.cscript): | @@ -865,7 +860,7 @@ class csroot2caldb(ctools.cscript): | ||
| 865 | ROOT file | 860 | ROOT file |
| 866 | irf : dict | 861 | irf : dict |
| 867 | IRF metadata dictionary | 862 | IRF metadata dictionary |
| 868 | - dir : dict | 863 | + ds : dict |
| 869 | Directory structure dictionary | 864 | Directory structure dictionary |
| 870 | """ | 865 | """ |
| 871 | # Write header | 866 | # Write header |
| @@ -877,21 +872,21 @@ class csroot2caldb(ctools.cscript): | @@ -877,21 +872,21 @@ class csroot2caldb(ctools.cscript): | ||
| 877 | matrix = file.Get('EestOverEtrue_offaxis') | 872 | matrix = file.Get('EestOverEtrue_offaxis') |
| 878 | 873 | ||
| 879 | # Set boundaries | 874 | # Set boundaries |
| 880 | - bounds = self._make_3D_migra(matrix, dir['HDU_EDISP'], None, '') | 875 | + bounds = self._make_3D_migra(matrix, ds['HDU_EDISP'], None, '') |
| 881 | for b in bounds: | 876 | for b in bounds: |
| 882 | irf['EDISP_BOUNDS'].append(b) | 877 | irf['EDISP_BOUNDS'].append(b) |
| 883 | 878 | ||
| 884 | # Write boundary keywords | 879 | # Write boundary keywords |
| 885 | - self._set_cif_keywords(dir['HDU_EDISP'], irf['EDISP_NAME'], | 880 | + self._set_cif_keywords(ds['HDU_EDISP'], irf['EDISP_NAME'], |
| 886 | irf['EDISP_BOUNDS'], irf['EDISP_DESC'], irf) | 881 | irf['EDISP_BOUNDS'], irf['EDISP_DESC'], irf) |
| 887 | 882 | ||
| 888 | # Create "MATRIX" data column | 883 | # Create "MATRIX" data column |
| 889 | - self._make_3D_migra(matrix, dir['HDU_EDISP'], 'MATRIX', '') | 884 | + self._make_3D_migra(matrix, ds['HDU_EDISP'], 'MATRIX', '') |
| 890 | 885 | ||
| 891 | # Return | 886 | # Return |
| 892 | return | 887 | return |
| 893 | 888 | ||
| 894 | - def _root2bgd(self, file, irf, dir): | 889 | + def _root2bgd(self, file, irf, ds): |
| 895 | """ | 890 | """ |
| 896 | Translate ROOT to CALDB background extension. | 891 | Translate ROOT to CALDB background extension. |
| 897 | 892 | ||
| @@ -904,7 +899,7 @@ class csroot2caldb(ctools.cscript): | @@ -904,7 +899,7 @@ class csroot2caldb(ctools.cscript): | ||
| 904 | ROOT file | 899 | ROOT file |
| 905 | irf : dict | 900 | irf : dict |
| 906 | IRF metadata dictionary | 901 | IRF metadata dictionary |
| 907 | - dir : dict | 902 | + ds : dict |
| 908 | Directory structure dictionary | 903 | Directory structure dictionary |
| 909 | """ | 904 | """ |
| 910 | # Write header | 905 | # Write header |
| @@ -930,23 +925,23 @@ class csroot2caldb(ctools.cscript): | @@ -930,23 +925,23 @@ class csroot2caldb(ctools.cscript): | ||
| 930 | self._renorm_onaxis(array, array_1D) | 925 | self._renorm_onaxis(array, array_1D) |
| 931 | 926 | ||
| 932 | # Set boundaries | 927 | # Set boundaries |
| 933 | - bounds = self._make_3D(array, dir['HDU_BGD'], None, 'deg') | 928 | + bounds = self._make_3D(array, ds['HDU_BGD'], None, 'deg') |
| 934 | for b in bounds: | 929 | for b in bounds: |
| 935 | irf['BGD_BOUNDS'].append(b) | 930 | irf['BGD_BOUNDS'].append(b) |
| 936 | 931 | ||
| 937 | # Write boundary keywords | 932 | # Write boundary keywords |
| 938 | - self._set_cif_keywords(dir['HDU_BGD'], irf['BGD_NAME'], | 933 | + self._set_cif_keywords(ds['HDU_BGD'], irf['BGD_NAME'], |
| 939 | irf['BGD_BOUNDS'], irf['BGD_DESC'], irf) | 934 | irf['BGD_BOUNDS'], irf['BGD_DESC'], irf) |
| 940 | 935 | ||
| 941 | # Create "BGD" data column | 936 | # Create "BGD" data column |
| 942 | - self._make_3D(array, dir['HDU_BGD'], 'BGD', '1/s/MeV/sr') | 937 | + self._make_3D(array, ds['HDU_BGD'], 'BGD', '1/s/MeV/sr') |
| 943 | 938 | ||
| 944 | # Return | 939 | # Return |
| 945 | return | 940 | return |
| 946 | 941 | ||
| 947 | - def _append_column(self, hdu, name, unit, axis, log=False): | 942 | + def _append_column_axis(self, hdu, name, unit, axis, log=False): |
| 948 | """ | 943 | """ |
| 949 | - Append column to HDU | 944 | + Append column of ROOT axis values to HDU |
| 950 | 945 | ||
| 951 | Parameters | 946 | Parameters |
| 952 | ---------- | 947 | ---------- |
| @@ -990,6 +985,39 @@ class csroot2caldb(ctools.cscript): | @@ -990,6 +985,39 @@ class csroot2caldb(ctools.cscript): | ||
| 990 | # Return | 985 | # Return |
| 991 | return | 986 | return |
| 992 | 987 | ||
| 988 | + def _append_column_values(self, hdu, name, unit, values): | ||
| 989 | + """ | ||
| 990 | + Append column of values to HDU | ||
| 991 | + | ||
| 992 | + Parameters | ||
| 993 | + ---------- | ||
| 994 | + hdu : `~gammalib.GFitsHDU` | ||
| 995 | + FITS HDU | ||
| 996 | + name : str | ||
| 997 | + Column name | ||
| 998 | + unit : str | ||
| 999 | + Column unit | ||
| 1000 | + values : list of float | ||
| 1001 | + Axis values | ||
| 1002 | + """ | ||
| 1003 | + # Continue only if columns does not yet exist | ||
| 1004 | + if not hdu.contains(name): | ||
| 1005 | + | ||
| 1006 | + # Get number of values | ||
| 1007 | + nbins = len(values) | ||
| 1008 | + | ||
| 1009 | + # Append column and set column unit | ||
| 1010 | + hdu.append(gammalib.GFitsTableFloatCol(name, 1, nbins)) | ||
| 1011 | + hdu[name].unit(unit) | ||
| 1012 | + | ||
| 1013 | + # Fill column | ||
| 1014 | + for i in range(nbins): | ||
| 1015 | + hdu[name][0,i] = values[i] | ||
| 1016 | + | ||
| 1017 | + # Return | ||
| 1018 | + return | ||
| 1019 | + | ||
| 1020 | + | ||
| 993 | def _renorm_onaxis(self, hist2D, hist1D): | 1021 | def _renorm_onaxis(self, hist2D, hist1D): |
| 994 | """ | 1022 | """ |
| 995 | Renormalise 2D histogram (energy,offset) on 1D histogram (energy) | 1023 | Renormalise 2D histogram (energy,offset) on 1D histogram (energy) |
| @@ -1115,8 +1143,9 @@ class csroot2caldb(ctools.cscript): | @@ -1115,8 +1143,9 @@ class csroot2caldb(ctools.cscript): | ||
| 1115 | axis.append(energy) | 1143 | axis.append(energy) |
| 1116 | rates.append(rate) | 1144 | rates.append(rate) |
| 1117 | 1145 | ||
| 1118 | - # Determine energy range | ||
| 1119 | - emin, emax = self._plaw_energy_range(axis, rates) | 1146 | + # Determine minimum energy (ignoring the maximum energy as |
| 1147 | + # we do not need it) | ||
| 1148 | + emin = self._plaw_energy_range(axis, rates)[0] | ||
| 1120 | 1149 | ||
| 1121 | # Get power law coefficients | 1150 | # Get power law coefficients |
| 1122 | coeff = self._plaw_coefficients(axis, rates, emin, ethres) | 1151 | coeff = self._plaw_coefficients(axis, rates, emin, ethres) |
| @@ -1318,10 +1347,10 @@ class csroot2caldb(ctools.cscript): | @@ -1318,10 +1347,10 @@ class csroot2caldb(ctools.cscript): | ||
| 1318 | noffset = offsets.GetNbins() | 1347 | noffset = offsets.GetNbins() |
| 1319 | 1348 | ||
| 1320 | # Append axis columns to HDU | 1349 | # Append axis columns to HDU |
| 1321 | - self._append_column(hdu, 'ENERG_LO', 'TeV', energies, log=True) | ||
| 1322 | - self._append_column(hdu, 'ENERG_HI', 'TeV', energies, log=True) | ||
| 1323 | - self._append_column(hdu, 'THETA_LO', 'deg', offsets) | ||
| 1324 | - self._append_column(hdu, 'THETA_HI', 'deg', offsets) | 1350 | + self._append_column_axis(hdu, 'ENERG_LO', 'TeV', energies, log=True) |
| 1351 | + self._append_column_axis(hdu, 'ENERG_HI', 'TeV', energies, log=True) | ||
| 1352 | + self._append_column_axis(hdu, 'THETA_LO', 'deg', offsets) | ||
| 1353 | + self._append_column_axis(hdu, 'THETA_HI', 'deg', offsets) | ||
| 1325 | 1354 | ||
| 1326 | # Append array column | 1355 | # Append array column |
| 1327 | if name != None and not hdu.contains(name): | 1356 | if name != None and not hdu.contains(name): |
| @@ -1400,37 +1429,15 @@ class csroot2caldb(ctools.cscript): | @@ -1400,37 +1429,15 @@ class csroot2caldb(ctools.cscript): | ||
| 1400 | dets_hi.append(det_hi) | 1429 | dets_hi.append(det_hi) |
| 1401 | dets2.append(det_val*det_val) | 1430 | dets2.append(det_val*det_val) |
| 1402 | 1431 | ||
| 1403 | - # Append DETX_LO column | ||
| 1404 | - if not hdu.contains('DETX_LO'): | ||
| 1405 | - hdu.append(gammalib.GFitsTableFloatCol('DETX_LO', 1, ndets)) | ||
| 1406 | - hdu['DETX_LO'].unit('deg') | ||
| 1407 | - for i in range(ndets): | ||
| 1408 | - hdu['DETX_LO'][0,i] = dets_lo[i] | ||
| 1409 | - | ||
| 1410 | - # Append DETX_HI column | ||
| 1411 | - if not hdu.contains('DETX_HI'): | ||
| 1412 | - hdu.append(gammalib.GFitsTableFloatCol('DETX_HI', 1, ndets)) | ||
| 1413 | - hdu['DETX_HI'].unit('deg') | ||
| 1414 | - for i in range(ndets): | ||
| 1415 | - hdu['DETX_HI'][0,i] = dets_hi[i] | ||
| 1416 | - | ||
| 1417 | - # Append DETY_LO column | ||
| 1418 | - if not hdu.contains('DETY_LO'): | ||
| 1419 | - hdu.append(gammalib.GFitsTableFloatCol('DETY_LO', 1, ndets)) | ||
| 1420 | - hdu['DETY_LO'].unit('deg') | ||
| 1421 | - for i in range(ndets): | ||
| 1422 | - hdu['DETY_LO'][0,i] = dets_lo[i] | ||
| 1423 | - | ||
| 1424 | - # Append DETY_HI column | ||
| 1425 | - if not hdu.contains('DETY_HI'): | ||
| 1426 | - hdu.append(gammalib.GFitsTableFloatCol('DETY_HI', 1, ndets)) | ||
| 1427 | - hdu['DETY_HI'].unit('deg') | ||
| 1428 | - for i in range(ndets): | ||
| 1429 | - hdu['DETY_HI'][0,i] = dets_hi[i] | 1432 | + # Append DETX_LO, DETX_HI, DETY_LO and DETY_HI columns |
| 1433 | + self._append_column_values(hdu, 'DETX_LO', 'deg', dets_lo) | ||
| 1434 | + self._append_column_values(hdu, 'DETX_HI', 'deg', dets_hi) | ||
| 1435 | + self._append_column_values(hdu, 'DETY_LO', 'deg', dets_lo) | ||
| 1436 | + self._append_column_values(hdu, 'DETY_HI', 'deg', dets_hi) | ||
| 1430 | 1437 | ||
| 1431 | # Append ENERG_LO and ENERG_HI columns | 1438 | # Append ENERG_LO and ENERG_HI columns |
| 1432 | - self._append_column(hdu, 'ENERG_LO', 'TeV', energies, log=True) | ||
| 1433 | - self._append_column(hdu, 'ENERG_HI', 'TeV', energies, log=True) | 1439 | + self._append_column_axis(hdu, 'ENERG_LO', 'TeV', energies, log=True) |
| 1440 | + self._append_column_axis(hdu, 'ENERG_HI', 'TeV', energies, log=True) | ||
| 1434 | 1441 | ||
| 1435 | # Append array column | 1442 | # Append array column |
| 1436 | if name != None and not hdu.contains(name): | 1443 | if name != None and not hdu.contains(name): |
| @@ -1481,24 +1488,24 @@ class csroot2caldb(ctools.cscript): | @@ -1481,24 +1488,24 @@ class csroot2caldb(ctools.cscript): | ||
| 1481 | Scaling factor for histogram values | 1488 | Scaling factor for histogram values |
| 1482 | """ | 1489 | """ |
| 1483 | # Extract Etrue, Eobs/Etrue and offset angle vectors | 1490 | # Extract Etrue, Eobs/Etrue and offset angle vectors |
| 1484 | - etrue = array.GetXaxis() | ||
| 1485 | - netrue = etrue.GetNbins() | ||
| 1486 | - migra = array.GetYaxis() | ||
| 1487 | - nmigra = migra.GetNbins() | ||
| 1488 | - offsets = array.GetZaxis() | ||
| 1489 | - noffset = offsets.GetNbins() | ||
| 1490 | - ewidth = [] # in MeV | 1491 | + etrue = array.GetXaxis() |
| 1492 | + netrue = etrue.GetNbins() | ||
| 1493 | + migra = array.GetYaxis() | ||
| 1494 | + nmigra = migra.GetNbins() | ||
| 1495 | + offsets = array.GetZaxis() | ||
| 1496 | + noffset = offsets.GetNbins() | ||
| 1497 | + ewidth = [] # in MeV | ||
| 1491 | for ieng in range(netrue): | 1498 | for ieng in range(netrue): |
| 1492 | ewidth.append(pow(10.0, etrue.GetBinUpEdge(ieng+1) +6.0) - \ | 1499 | ewidth.append(pow(10.0, etrue.GetBinUpEdge(ieng+1) +6.0) - \ |
| 1493 | pow(10.0, etrue.GetBinLowEdge(ieng+1)+6.0)) | 1500 | pow(10.0, etrue.GetBinLowEdge(ieng+1)+6.0)) |
| 1494 | 1501 | ||
| 1495 | # Append axis columns to HDU | 1502 | # Append axis columns to HDU |
| 1496 | - self._append_column(hdu, 'ETRUE_LO', 'TeV', etrue, log=True) | ||
| 1497 | - self._append_column(hdu, 'ETRUE_HI', 'TeV', etrue, log=True) | ||
| 1498 | - self._append_column(hdu, 'MIGRA_LO', '', migra) | ||
| 1499 | - self._append_column(hdu, 'MIGRA_HI', '', migra) | ||
| 1500 | - self._append_column(hdu, 'THETA_LO', 'deg', offsets) | ||
| 1501 | - self._append_column(hdu, 'THETA_HI', 'deg', offsets) | 1503 | + self._append_column_axis(hdu, 'ETRUE_LO', 'TeV', etrue, log=True) |
| 1504 | + self._append_column_axis(hdu, 'ETRUE_HI', 'TeV', etrue, log=True) | ||
| 1505 | + self._append_column_axis(hdu, 'MIGRA_LO', '', migra) | ||
| 1506 | + self._append_column_axis(hdu, 'MIGRA_HI', '', migra) | ||
| 1507 | + self._append_column_axis(hdu, 'THETA_LO', 'deg', offsets) | ||
| 1508 | + self._append_column_axis(hdu, 'THETA_HI', 'deg', offsets) | ||
| 1502 | 1509 | ||
| 1503 | # Append migration matrix to HDU | 1510 | # Append migration matrix to HDU |
| 1504 | if name != None and not hdu.contains(name): | 1511 | if name != None and not hdu.contains(name): |
| @@ -1550,17 +1557,17 @@ class csroot2caldb(ctools.cscript): | @@ -1550,17 +1557,17 @@ class csroot2caldb(ctools.cscript): | ||
| 1550 | irf = self._init_metadata() | 1557 | irf = self._init_metadata() |
| 1551 | 1558 | ||
| 1552 | # Create directory structure | 1559 | # Create directory structure |
| 1553 | - dir = self._make_dirs('file', irf) | 1560 | + ds = self._make_dirs('file', irf) |
| 1554 | 1561 | ||
| 1555 | # Open calibration files | 1562 | # Open calibration files |
| 1556 | - self._open(irf, dir) | 1563 | + self._open(irf, ds) |
| 1557 | 1564 | ||
| 1558 | # Translate ROOT to CALDB information | 1565 | # Translate ROOT to CALDB information |
| 1559 | if _has_root: | 1566 | if _has_root: |
| 1560 | - self._root2caldb(irf, dir) | 1567 | + self._root2caldb(irf, ds) |
| 1561 | 1568 | ||
| 1562 | # Close calibration files | 1569 | # Close calibration files |
| 1563 | - self._close(irf, dir) | 1570 | + self._close(irf, ds) |
| 1564 | 1571 | ||
| 1565 | # Return | 1572 | # Return |
| 1566 | return | 1573 | return |
examples/show_butterfly.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except: | 28 | +except ImportError: |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | 31 |
examples/show_model.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except: | 28 | +except ImportError: |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | 31 |
examples/show_obs.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except: | 28 | +except ImportError: |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | 31 |
examples/show_pha.py
| @@ -26,7 +26,7 @@ try: | @@ -26,7 +26,7 @@ try: | ||
| 26 | import matplotlib.pyplot as plt | 26 | import matplotlib.pyplot as plt |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except: | 29 | +except ImportError: |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | 32 |
examples/show_pull_evolution.py
| @@ -25,12 +25,12 @@ try: | @@ -25,12 +25,12 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except: | 28 | +except ImportError: |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | try: | 31 | try: |
| 32 | import numpy as np | 32 | import numpy as np |
| 33 | -except: | 33 | +except ImportError: |
| 34 | print('This script needs the "numpy" module') | 34 | print('This script needs the "numpy" module') |
| 35 | sys.exit() | 35 | sys.exit() |
| 36 | 36 |
examples/show_pull_histogram.py
| @@ -26,12 +26,12 @@ try: | @@ -26,12 +26,12 @@ try: | ||
| 26 | import matplotlib.mlab as mlab | 26 | import matplotlib.mlab as mlab |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except: | 29 | +except ImportError: |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | try: | 32 | try: |
| 33 | import numpy as np | 33 | import numpy as np |
| 34 | -except: | 34 | +except ImportError: |
| 35 | print('This script needs the "numpy" module') | 35 | print('This script needs the "numpy" module') |
| 36 | sys.exit() | 36 | sys.exit() |
| 37 | 37 |
examples/show_response.py
| @@ -26,7 +26,7 @@ try: | @@ -26,7 +26,7 @@ try: | ||
| 26 | import matplotlib.pyplot as plt | 26 | import matplotlib.pyplot as plt |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except: | 29 | +except ImportError: |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | 32 |
examples/show_sensitivity.py
| @@ -26,7 +26,7 @@ try: | @@ -26,7 +26,7 @@ try: | ||
| 26 | import matplotlib.pyplot as plt | 26 | import matplotlib.pyplot as plt |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except: | 29 | +except ImportError: |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | 32 |
examples/show_spectrum.py
| @@ -25,7 +25,7 @@ try: | @@ -25,7 +25,7 @@ try: | ||
| 25 | import matplotlib.pyplot as plt | 25 | import matplotlib.pyplot as plt |
| 26 | plt.figure() | 26 | plt.figure() |
| 27 | plt.close() | 27 | plt.close() |
| 28 | -except: | 28 | +except ImportError: |
| 29 | print('This script needs the "matplotlib" module') | 29 | print('This script needs the "matplotlib" module') |
| 30 | sys.exit() | 30 | sys.exit() |
| 31 | 31 |
examples/show_ts_distribution.py
| @@ -26,12 +26,12 @@ try: | @@ -26,12 +26,12 @@ try: | ||
| 26 | import matplotlib.pyplot as plt | 26 | import matplotlib.pyplot as plt |
| 27 | plt.figure() | 27 | plt.figure() |
| 28 | plt.close() | 28 | plt.close() |
| 29 | -except: | 29 | +except ImportError: |
| 30 | print('This script needs the "matplotlib" module') | 30 | print('This script needs the "matplotlib" module') |
| 31 | sys.exit() | 31 | sys.exit() |
| 32 | try: | 32 | try: |
| 33 | import numpy as np | 33 | import numpy as np |
| 34 | -except: | 34 | +except ImportError: |
| 35 | print('This script needs the "numpy" module') | 35 | print('This script needs the "numpy" module') |
| 36 | sys.exit() | 36 | sys.exit() |
| 37 | 37 |