| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

FullChain.py

Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 
00003 '''
00004 
00005 Configure the full chain of simulation from kinematics to readouts and
00006 with multiple kinematics types mixed together.
00007 
00008 usage:
00009     nuwa.py -n50 -o fifteen.root -m "MDC09a.runIBD15.FullChain -T SingleLoader" > log
00010 
00011     More options are available like -w: wall clock starting time
00012                                     -s: seed for IBD generator
00013                                     -v: volume
00014 
00015     Here is another example:
00016     nuwa.py -n50 -o fifteen.root -m "MDC09a.runIBD15.FullChain -T SingleLoader -w 2008-04-15T15:15:00 -s 1 -v /dd/Structure/AD/db-oil1"
00017     
00018 '''
00019 import GaudiKernel.SystemOfUnits as units
00020 
00021 class ConfigureFullChain:
00022 
00023     '''
00024     Configure a Full Chain of pull simulations.
00025     '''
00026 
00027     def __init__(self,argv):
00028         self.parse_args(argv)
00029         return
00030 
00031     def parse_args(self,argv):
00032         from optparse import OptionParser
00033         import time
00034         parser = OptionParser(usage=self.__doc__)
00035         default_time_format = '%Y-%m-%dT%H:%M:%S'
00036         parser.add_option("-w","--start-time",
00037                           help="Date string to set simulation start, assumed UTC",
00038                           default=time.strftime(default_time_format,time.gmtime(0)))
00039         parser.add_option("-F","--time-format",
00040                           help="Format for parsing time (see man date), " \
00041                               + "default is '%s'"%default_time_format \
00042                               + " ('[YYYY]-[MM]-[DD]T[HH]:[MM]:[SS]')",
00043                           default=default_time_format)
00044         parser.add_option("-T","--top-stage",
00045                           help="Kinematic, Detector, Electronic, TrigRead or SingleLoader",
00046                           default="SingleLoader")
00047         parser.add_option("-s","--seed",
00048                           help="Random seed for generators",
00049                           default=1234567)
00050         parser.add_option("-v","--volume",
00051                           help="A way to set volume parameter",
00052                           default="/dd/Structure/AD/db-oil1")
00053 
00054         (options,args) = parser.parse_args(args=argv)
00055         self.opts = options
00056         self.args = args
00057 
00058         timeformat = self.opts.time_format
00059         print "Using time format =",timeformat
00060 
00061         try:
00062             datestring = self.opts.start_time
00063         except AttributeError:
00064             self.start_time_seconds = 0
00065         else:
00066             # This may raise ValueError if string and format don't
00067             # match.  Just let it get thrown.
00068             t = time.strptime(datestring,timeformat)
00069             self.start_time_seconds = time.mktime(t) - time.timezone
00070         print 'Start time in human readable format',self.opts.start_time 
00071         print 'Start time in seconds UTC =',self.start_time_seconds
00072         print 'Top stage =',self.opts.top_stage
00073 
00074         return
00075 
00076     def configureKinematic(self):
00077         #from Stage.gun import gun
00078         #gun=gun(stage=self.stage_cfg,start_time=self.start_time_seconds)
00079 
00080         #from Stage.Muon import Muon
00081         #muon=Muon(stage=self.stage_cfg,start_time=self.start_time_seconds)
00082 
00083         from MDC09a.runIBD15.IBD import IBD
00084         ibd=IBD(stage=self.stage_cfg,
00085                 name='IBD',
00086                 volume=self.opts.volume,
00087                 start_time=self.start_time_seconds,
00088                 seed=self.opts.seed)
00089 
00090         #from Stage.K40 import K40
00091         #k40=K40(stage=self.stage_cfg,start_time=self.start_time_seconds)
00092 
00093         #from Stage.U import Uranium
00094         #u=Uranium(stage=self.stage_cfg,start_time=self.start_time_seconds)
00095 
00096         #from Stage.Th import Thorium
00097         #th=Thorium(stage=self.stage_cfg,start_time=self.start_time_seconds)
00098 
00099         return
00100 
00101     def configureDetector(self):
00102         '''Configure the Detector stage'''
00103         
00104         import DetSim
00105         ds = DetSim.Configure(physlist=DetSim.physics_list_basic+DetSim.physics_list_nuclear,site="dayabay",
00106                               use_push_algs = False)
00107 
00108         from DetSimProc.DetSimProcConf import DetSimProc
00109         dsp = DetSimProc()
00110         dsp.ThisStageName = "Detector"
00111         dsp.LowerStageName = "Kinematic"
00112         #dsp.OutputLevel = 2
00113         self.stage_cfg.DetectorSequence.Members.append(dsp)
00114 
00115         ds.historian(trackSelection="(pdg == 2112)",vertexSelection="(pdg == 2112)")
00116         params = {
00117             'start' :"(start > 0)",
00118             'track1':"(id==1)",
00119             'track2':"(id==2)",
00120             'inGdLS':"DetectorElementName == 'db-gds1'",
00121             'inLS':  "DetectorElementName == 'db-lso1'",
00122             'GD':    "MaterialName == '/dd/Materials/GdDopedLS'",
00123             'LS':    "MaterialName == '/dd/Materials/LiquidScintillator'",
00124             'MO':   "MaterialName == '/dd/Materials/MineralOil'",
00125             'IAV':   "DetectorElementName == 'db-iav1'",
00126             'OAV':   "DetectorElementName == 'db-oav1'",
00127             'IWS': "MaterialName == '/dd/Materials/IwsWater'",
00128             'OWS': "MaterialName == '/dd/Materials/OwsWater'",
00129             'lastvtx': "IsStopping == 1",
00130             'firstvtx': "IsStarting == 1",
00131             'NeutronTrk': "pdg == 2112",
00132             'NeutronMom': "creator == 2112",
00133             'NCap': "ProcessName == 'nCapture'",
00134             'Gamma': "pdg == 22",
00135             'Muon': "(pdg == 13 or pdg == -13)"
00136             }
00137         
00138         ds.unobserver(stats=[
00139                 ["EDepInGdLS", "dE", "%(GD)s"%params],
00140                 ["EDepInLS", "dE", "%(LS)s"%params],
00141                 ["EDepInIAV", "dE", "%(IAV)s"%params],
00142                 ["EDepInOAV", "dE", "%(OAV)s"%params],
00143                 ["EDepInOIL", "dE", "%(MO)s"%params],
00144                 
00145                 ["QEDepInGdLS", "qdE", "%(GD)s"%params],
00146                 ["QEDepInLS", "qdE", "%(LS)s"%params],
00147                 ["QEDepInIAV", "qdE", "%(IAV)s"%params],
00148                 ["QEDepInOAV", "qdE", "%(OAV)s"%params],
00149                 ["QEDepInOIL", "qdE", "%(MO)s"%params],
00150                 
00151                 ["tQESumGdLS", "qEt", "%(GD)s"%params],
00152                 ["xQESumGdLS", "qEx", "%(GD)s"%params],
00153                 ["yQESumGdLS", "qEy", "%(GD)s"%params],
00154                 ["zQESumGdLS", "qEz", "%(GD)s"%params],
00155                 
00156                 ["tQESumLS", "qEt", "%(LS)s"%params],
00157                 ["xQESumLS", "qEx", "%(LS)s"%params],
00158                 ["yQESumLS", "qEy", "%(LS)s"%params],
00159                 ["zQESumLS", "qEz", "%(LS)s"%params],
00160                 
00161                 ["tQESumMO", "qEt", "%(MO)s"%params],
00162                 ["xQESumMO", "qEx", "%(MO)s"%params],
00163                 ["yQESumMO", "qEy", "%(MO)s"%params],
00164                 ["zQESumMO", "qEz", "%(MO)s"%params],
00165                 
00166                 ["capTarget", "capTargetZ","%(track2)s and %(NCap)s"%params],
00167                 
00168                 # track 1
00169                 ["pdgId_Trk1","pdg","%(track1)s and %(start)s"%params],
00170                 ["t_Trk1",    "t" , "%(track1)s and %(start)s"%params],
00171                 ["x_Trk1",    "x", "%(track1)s and %(start)s"%params],
00172                 ["y_Trk1",    "y", "%(track1)s and %(start)s"%params],
00173                 ["z_Trk1",    "z", "%(track1)s and %(start)s"%params],
00174                 ["tEnd_Trk1",    "t" , "%(track1)s and %(lastvtx)s"%params],
00175                 ["xEnd_Trk1",    "x", "%(track1)s and %(lastvtx)s"%params],
00176                 ["yEnd_Trk1",    "y", "%(track1)s and %(lastvtx)s"%params],
00177                 ["zEnd_Trk1",    "z", "%(track1)s and %(lastvtx)s"%params],
00178                 ["e_Trk1",    "E",  "%(track1)s and %(start)s"%params],
00179                 ["p_Trk1",    "p",  "%(track1)s and %(start)s"%params],
00180                 ["ke_Trk1",   "KE", "%(track1)s and %(start)s"%params],
00181                 ["vx_Trk1",   "lvx","%(track1)s and %(start)s"%params],
00182                 ["vy_Trk1",   "lvy","%(track1)s and %(start)s"%params],
00183                 ["vz_Trk1",   "lvz","%(track1)s and %(start)s"%params],
00184                 ["TrkLength_GD_Trk1",  "dx","%(track1)s and %(GD)s"%params],
00185                 ["TrkLength_iAV_Trk1", "dx","%(track1)s and %(IAV)s"%params],
00186                 ["TrkLength_LS_Trk1",  "dx","%(track1)s and %(LS)s"%params],
00187                 ["TrkLength_oAV_Trk1", "dx","%(track1)s and %(OAV)s"%params],
00188                 ["TrkLength_Oil_Trk1", "dx","%(track1)s and %(MO)s"%params],
00189                 # track 2
00190                 ["pdgId_Trk2","pdg","%(track2)s and %(start)s"%params],
00191                 ["t_Trk2",    "t" , "%(track2)s and %(start)s"%params],
00192                 ["x_Trk2",    "x", "%(track2)s and %(start)s"%params],
00193                 ["y_Trk2",    "y", "%(track2)s and %(start)s"%params],
00194                 ["z_Trk2",    "z", "%(track2)s and %(start)s"%params],
00195                 ["tEnd_Trk2",    "t" , "%(track2)s and %(lastvtx)s"%params],
00196                 ["xEnd_Trk2",    "x", "%(track2)s and %(lastvtx)s"%params],
00197                 ["yEnd_Trk2",    "y", "%(track2)s and %(lastvtx)s"%params],
00198                 ["zEnd_Trk2",    "z", "%(track2)s and %(lastvtx)s"%params],
00199                 ["e_Trk2",    "E",  "%(track2)s and %(start)s"%params],
00200                 ["p_Trk2",    "p",  "%(track2)s and %(start)s"%params],
00201                 ["ke_Trk2",   "KE", "%(track2)s and %(start)s"%params],
00202                 ["vx_Trk2",   "lvx","%(track2)s and %(start)s"%params],
00203                 ["vy_Trk2",   "lvy","%(track2)s and %(start)s"%params],
00204                 ["vz_Trk2",   "lvz","%(track2)s and %(start)s"%params],
00205                 ["TrkLength_GD_Trk2",  "dx","%(track2)s and %(GD)s"%params],
00206                 ["TrkLength_iAV_Trk2", "dx","%(track2)s and %(IAV)s"%params],
00207                 ["TrkLength_LS_Trk2",  "dx","%(track2)s and %(LS)s"%params],
00208                 ["TrkLength_oAV_Trk2", "dx","%(track2)s and %(OAV)s"%params],
00209                 ["TrkLength_Oil_Trk2", "dx","%(track2)s and %(MO)s"%params]
00210                 ])
00211 
00212         return
00213 
00214     def configureElectronic(self):
00215         '''Configure the Electronics stage'''
00216 
00217         import ElecSim
00218         es = ElecSim.Configure(use_push_algs = False)
00219 
00220         from ElecSimProc.ElecSimProcConf import ElecSimProc
00221         esp = ElecSimProc()
00222         esp.ThisStageName = "Electronic"
00223         esp.LowerStageName = "Detector"
00224         #esp.OutputLevel = 2
00225         self.stage_cfg.ElectronicSequence.Members.append(esp)
00226         return
00227 
00228     def configureTrigRead(self):
00229         '''Configure the Trigger and Readout stage'''
00230         from TrigReadProc.TrigReadProcConf import TrigReadProc
00231         tsp = TrigReadProc()
00232         tsp.ThisStageName = "TrigRead"
00233         tsp.LowerStageName = "Electronic"
00234         #tsp.TrigTools = [...]
00235         #tsp.RoTools = [...]
00236         #tsp.OutputLevel = 2
00237         self.stage_cfg.TrigReadSequence.Members.append(tsp)
00238         return
00239 
00240     def configureSingleLoader(self):
00241         '''Configure the SingleLoader stage'''
00242         from SingleLoader.SingleLoaderConf import SingleLoader
00243         sll = SingleLoader()
00244         sll.ThisStageName = "SingleLoader"
00245         sll.LowerStageName = "TrigRead"
00246         #sll.OutputLevel = 2
00247         self.stage_cfg.SingleLoaderSequence.Members.append(sll)
00248 
00249     def configureSim15(self):
00250         from Stage.StageConf import Sim15
00251         sim15=Sim15()
00252         sim15.TopStage=self.opts.top_stage
00253 
00254         from Gaudi.Configuration import ApplicationMgr
00255         theApp = ApplicationMgr()
00256         theApp.TopAlg.append(sim15)
00257 
00258     def configure(self):
00259 
00260         from Stage import Configure as StageConfigure
00261         self.stage_cfg = StageConfigure()
00262 
00263         stagedic={'Kinematic':1,'Detector':2,'Electronic':3,'TrigRead':4,'SingleLoader':5}
00264 
00265         if not self.opts.top_stage in stagedic:
00266             print 'Error, wrong top stage parameter', self.opts.top_stage
00267 
00268         for stg,idx in stagedic.iteritems():
00269             if idx <= stagedic[self.opts.top_stage]:
00270                 self.stage_cfg.addStages([stg])           ## stage tools are configured here.
00271                 
00272         for stg in self.stage_cfg.stages:
00273             #self.stage_cfg.__dict__[stg].OutputLevel = 2
00274             pass
00275 
00276         if stagedic[self.opts.top_stage]>=1:
00277             self.configureKinematic()
00278         if stagedic[self.opts.top_stage]>=2:
00279             self.configureDetector()
00280         if stagedic[self.opts.top_stage]>=3:
00281             self.configureElectronic()
00282         if stagedic[self.opts.top_stage]>=4:
00283             self.configureTrigRead()
00284         if stagedic[self.opts.top_stage]>=5:
00285             self.configureSingleLoader()
00286 
00287         self.configureSim15()
00288         
00289         return
00290         
00291 def configure(argv=[]):
00292     cfc = ConfigureFullChain(argv)
00293     cfc.configure()
00294     return
00295 
00296 if __name__ == "__main__":
00297     configure()
00298     pass
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:11:56 2011 for MDC09a by doxygen 1.4.7