Package iceprod :: Package modules :: Module phototables
[hide private]
[frames] | no frames]

Source Code for Module iceprod.modules.phototables

  1   
  2  #!/bin/env python 
  3  # 
  4  """ 
  5   Interface for configuring pre/post icetray scripts 
  6   
  7   copyright  (c) 2005 the icecube collaboration 
  8   
  9   @version: $Revision: $ 
 10   @date: $Date: $ 
 11   @author: Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu> 
 12  """ 
 13   
 14  import os 
 15  import re 
 16  import sys 
 17  import math 
 18  import dircache 
 19  import time 
 20  import string 
 21  import shutil 
 22  import cPickle 
 23  from ipmodule import IPBaseClass 
 24  import logging 
 25   
26 -class StagePhotoTables(IPBaseClass):
27 """ 28 This class provides an interface for preprocessing files in iceprod 29 """ 30
31 - def __init__(self):
32 IPBaseClass.__init__(self) 33 self.cleanup = [] 34 self.AddParameter("DriverFileDirectory", 35 "photonics driver file parent directory", 36 "$PWD/"); 37 38 self.AddParameter("PhotonicsAngularSelectionHigh", 39 "Maximum theta angle of tables to stage", 40 180.0); 41 42 self.AddParameter("PhotonicsAngularSelectionLow", 43 "Minimum theta angle of tables to stage", 44 0.0); 45 46 self.AddParameter("TablesDirectory", 47 "Location where tables should be found or staged if not found", 48 "$system(photontablesdir)"); 49 50 self.AddParameter("TablesRepository", 51 "Location where tables should be fetched from if not found", 52 "$system(photontablesrepo)"); 53 54 self.AddParameter("PhotonicsLevel1DriverFile","","$steering(PHOTONTABLES::L1_IC)"); 55 self.AddParameter("PhotonicsLevel2DriverFile","","$steering(PHOTONTABLES::L2_IC)"); 56 57 self.logger = logging.getLogger('iceprod::StagePhotoTables')
58 59
60 - def Execute(self,stats):
61 if not IPBaseClass.Execute(self,stats): return 0 62 self.cleanup = [] 63 64 # photonics 65 # angular range is evaluated from steering paramters 66 pt_amax = self.GetParameter("PhotonicsAngularSelectionHigh"); 67 pt_amin = self.GetParameter("PhotonicsAngularSelectionLow"); 68 pt_l1 = self.parser.parse( self.GetParameter("PhotonicsLevel1DriverFile") ); 69 pt_l2 = self.parser.parse( self.GetParameter("PhotonicsLevel2DriverFile") ); 70 pt_dir = self.parser.parse( self.GetParameter("TablesDirectory") ); 71 pt_repo = self.parser.parse( self.GetParameter("TablesRepository") ); 72 pt_driver_dir = self.parser.parse( self.GetParameter("DriverFileDirectory") ); 73 74 if not os.path.isdir(pt_dir): 75 os.makedirs(pt_dir) 76 77 l1 = open(os.path.join(pt_driver_dir,pt_l1),'r') 78 for line in l1.readlines(): 79 if line.startswith('#'): continue 80 line = line.split() 81 pt_file = line[0].strip() 82 amax = float(line[-1].strip()) 83 amin = float(line[-2].strip()) 84 zmax = float(line[-3].strip()) 85 zmin = float(line[-4].strip()) 86 87 #if (amax > pt_amax): continue 88 #if (amin < pt_amin): continue 89 if (amin < pt_amin) or (amin > pt_amax): continue 90 91 for s in ['.abs','.prob']: 92 if not os.path.exists(os.path.join(pt_dir,pt_file+s)): 93 self.logger.debug('copying %s' % pt_file+s) 94 if not os.path.exists(os.path.dirname(os.path.join(pt_dir,pt_file+s))): 95 os.makedirs(os.path.dirname(os.path.join(pt_dir,pt_file))) 96 if os.system('cp %s %s' % (os.path.join(pt_repo,pt_file+s),os.path.join(pt_dir,pt_file+s))): 97 raise Exception, "cannot copy photon tables from repository" 98 self.cleanup.append(os.path.join(pt_dir,pt_file+s)) 99 l1.close() 100 101 l2 = open(os.path.join(pt_driver_dir,pt_l2),'r') 102 for line in l2.readlines(): 103 104 if line.startswith('#'): continue 105 106 line = line.split() 107 pt_file = line[0].strip() 108 pt_file = pt_file.replace('@starting:','') 109 pt_file = pt_file.replace('@stopping:','') 110 amax = float(line[-1].strip()) 111 amin = float(line[-2].strip()) 112 zmax = float(line[-3].strip()) 113 zmin = float(line[-4].strip()) 114 115 #if (amax > pt_amax): continue 116 #if (amin < pt_amin): continue 117 if (amin < pt_amin) or (amin > pt_amax): continue 118 119 for s in ['.abs','.prob']: 120 if not os.path.exists(os.path.join(pt_dir,pt_file+s)): 121 self.logger.debug('copying %s' % pt_file+s) 122 if not os.path.exists(os.path.dirname(os.path.join(pt_dir,pt_file+s))): 123 os.makedirs(os.path.dirname(os.path.join(pt_dir,pt_file))) 124 if os.system('cp %s %s' % (os.path.join(pt_repo,pt_file+s),os.path.join(pt_dir,pt_file+s))): 125 raise Exception, "cannot copy photon tables from repository" 126 self.cleanup.append(os.path.join(pt_dir,pt_file+s)) 127 l2.close() 128 129 return 0
130
131 - def Finish(self,stats):
132 if not IPBaseClass.Execute(self,stats): return 0 133 for f in self.cleanup: 134 if os.system('rm -f %s' % f): 135 raise Exception, "cannot remove cached photon tables" 136 return 0
137