00001
00002
00003 '''
00004 usage example:
00005
00006 nuwa.py -A -n 2 -o output.root -m "MDC09a.runGamma -k 1.0"
00007 Photon is generated uniformly in the GdLS
00008 "-k argument specify energy of photon in MeV"
00009
00010 '''
00011
00012 DATETIME_FORMAT = '%Y-%m-%dT%H:%M:%S'
00013
00014 import os, math
00015
00016 def configure(argv = []):
00017 """Configure this module with gamma energy"""
00018
00019 import sys, getopt
00020 from time import localtime, gmtime, mktime, strftime, strptime, timezone
00021 opts,args = getopt.getopt(argv,"p:w:k:")
00022 wallTime = 0
00023 gammaE = 1.0
00024 pmtDataPath = None
00025 for opt,arg in opts:
00026 if opt == "-p":
00027 pmtDataPath = arg
00028 if opt == "-w":
00029 if -1 != arg.find('T'):
00030 wallTime = int(mktime(strptime(arg,
00031 DATETIME_FORMAT)) - timezone)
00032 else:
00033 wallTime = int(arg)
00034
00035 if opt == "-k":
00036 gammaE = float(arg)
00037 print "======================================================"
00038 print "Photon energy = ", gammaE, " MeV"
00039 print "======================================================"
00040
00041
00042 print "======================================================"
00043 print "Begin JOB TIME = ", strftime(DATETIME_FORMAT,
00044 gmtime())
00045 print "======================================================"
00046
00047
00048 import GaudiKernel.SystemOfUnits as units
00049 from GenTools.Helpers import Gun
00050 from GenTools.GenToolsConf import GtGunGenTool, GtPositionerTool
00051 gun = Gun(name = "gammaGun",
00052 volume = "/dd/Structure/AD/db-oil1",
00053 gun = GtGunGenTool("gun",
00054 ParticlesPerEvent = 1,
00055 ParticleName = "gamma",
00056 Momentum = gammaE*units.MeV,
00057 MomentumMode = "Fixed",
00058 MomentumSpread = 0.*units.MeV,
00059 DirectionMode = "Uniform",
00060 Direction = [ 1, 0, 0 ],
00061 DirectionSpread = 3),
00062 positioner = GtPositionerTool("pos",
00063 Strategy = "FullVolume",
00064 Mode = "Uniform",
00065 Spread = 2.5*units.meter,
00066 Position = [0,0,0*units.meter])
00067 )
00068 gun.timerator.LifeTime = 0.020*units.second
00069 import GenTools
00070 GenTools.Configure().register(gun)
00071
00072
00073 import DetSim
00074 detsim = DetSim.Configure(site="dayabay", \
00075 physlist = DetSim.physics_list_basic)
00076 detsim.historian(trackSelection="(pdg == 22)",\
00077 vertexSelection="(pdg == 22)")
00078 params = {
00079 'start' :"(start > 0)",
00080 'track1':"(id==1)",
00081 'track2':"(id==2)",
00082 'GD': "MaterialName == '/dd/Materials/GdDopedLS'",
00083 'LS': "MaterialName == '/dd/Materials/LiquidScintillator'",
00084 'MO': "MaterialName == '/dd/Materials/MineralOil'",
00085 'IAV': "DetectorElementName == 'db-iav1'",
00086 'OAV': "DetectorElementName == 'db-oav1'",
00087 'IWS': "MaterialName == '/dd/Materials/IwsWater'",
00088 'OWS': "MaterialName == '/dd/Materials/OwsWater'",
00089 'lastvtx': "IsStopping == 1",
00090 'firstvtx': "IsStarting == 1",
00091 'Neutron': "pdg == 2112",
00092 'NeutronMom': "creator == 2112",
00093 'Gamma': "pdg == 22",
00094 'Muon': "(pdg == 13 or pdg == -13)"
00095 }
00096
00097 detsim.unobserver(stats=[
00098 ["EDepInGdLS", "dE", "%(GD)s"%params],
00099 ["EDepInLS", "dE", "%(LS)s"%params],
00100 ["EDepInIAV", "dE", "%(IAV)s"%params],
00101 ["EDepInOAV", "dE", "%(OAV)s"%params],
00102 ["EDepInOIL", "dE", "%(MO)s"%params],
00103
00104 ["QEDepInGdLS", "qdE", "%(GD)s"%params],
00105 ["QEDepInLS", "qdE", "%(LS)s"%params],
00106 ["QEDepInIAV", "qdE", "%(IAV)s"%params],
00107 ["QEDepInOAV", "qdE", "%(OAV)s"%params],
00108 ["QEDepInOIL", "qdE", "%(MO)s"%params],
00109
00110 ["tQESumGdLS", "qEt", "%(GD)s"%params],
00111 ["xQESumGdLS", "qEx", "%(GD)s"%params],
00112 ["yQESumGdLS", "qEy", "%(GD)s"%params],
00113 ["zQESumGdLS", "qEz", "%(GD)s"%params],
00114
00115 ["tQESumLS", "qEt", "%(LS)s"%params],
00116 ["xQESumLS", "qEx", "%(LS)s"%params],
00117 ["yQESumLS", "qEy", "%(LS)s"%params],
00118 ["zQESumLS", "qEz", "%(LS)s"%params],
00119
00120 ["tQESumMO", "qEt", "%(MO)s"%params],
00121 ["xQESumMO", "qEx", "%(MO)s"%params],
00122 ["yQESumMO", "qEy", "%(MO)s"%params],
00123 ["zQESumMO", "qEz", "%(MO)s"%params],
00124
00125
00126 ["pdgId_Trk1","pdg","%(track1)s and %(start)s"%params],
00127 ["t_Trk1", "t" , "%(track1)s and %(start)s"%params],
00128 ["x_Trk1", "x", "%(track1)s and %(start)s"%params],
00129 ["y_Trk1", "y", "%(track1)s and %(start)s"%params],
00130 ["z_Trk1", "z", "%(track1)s and %(start)s"%params],
00131 ["tEnd_Trk1", "t" , "%(track1)s and %(lastvtx)s"%params],
00132 ["xEnd_Trk1", "x", "%(track1)s and %(lastvtx)s"%params],
00133 ["yEnd_Trk1", "y", "%(track1)s and %(lastvtx)s"%params],
00134 ["zEnd_Trk1", "z", "%(track1)s and %(lastvtx)s"%params],
00135 ["e_Trk1", "E", "%(track1)s and %(start)s"%params],
00136 ["p_Trk1", "p", "%(track1)s and %(start)s"%params],
00137 ["ke_Trk1", "KE", "%(track1)s and %(start)s"%params],
00138 ["vx_Trk1", "lvx","%(track1)s and %(start)s"%params],
00139 ["vy_Trk1", "lvy","%(track1)s and %(start)s"%params],
00140 ["vz_Trk1", "lvz","%(track1)s and %(start)s"%params],
00141 ["TrkLength_GD_Trk1", "dx","%(track1)s and %(GD)s"%params],
00142 ["TrkLength_iAV_Trk1", "dx","%(track1)s and %(IAV)s"%params],
00143 ["TrkLength_LS_Trk1", "dx","%(track1)s and %(LS)s"%params],
00144 ["TrkLength_oAV_Trk1", "dx","%(track1)s and %(OAV)s"%params],
00145 ["TrkLength_Oil_Trk1", "dx","%(track1)s and %(MO)s"%params]
00146 ])
00147
00148 import ElecSim
00149 elecsim = ElecSim.Configure()
00150 if pmtDataPath != None:
00151
00152 elecsim.dataSvc.setPmtSimData( pmtDataPath )
00153
00154 import TrigSim
00155 trigsim = TrigSim.Configure()
00156
00157 import ReadoutSim
00158 rosim = ReadoutSim.Configure()
00159
00160 def run(app):
00161 pass
00162