00001
00002
00003 '''
00004 usage example:
00005
00006 nuwa.py -n 2 -o output.root -m "UnderstandingEnergy.CalibrationGe68 -z 4.0 -a A"
00007
00008 '''
00009
00010 DATETIME_FORMAT = '%Y-%m-%dT%H:%M:%S'
00011
00012 import os, math
00013
00014 def configure(argv = []):
00015 """Configure this module with source position"""
00016
00017 import sys, getopt
00018 import GaudiKernel.SystemOfUnits as units
00019 from time import gmtime, mktime, strftime, strptime, timezone
00020 opts,args = getopt.getopt(argv,
00021 "z:a:")
00022 wallTime = 0
00023 axis = 'A'
00024 acuName = 'ACU_A_Center'
00025 xpos = 0.0
00026 ypos = 0.0
00027 zpos = 0.0
00028 pmtDataPath = None
00029 for opt,arg in opts:
00030 if opt == "-z":
00031 zpos = float(arg) * units.cm
00032 print "======================================================"
00033 print "Source Z position = ", zpos / units.cm, " cm"
00034 print "======================================================"
00035 if opt == "-a":
00036 axis = arg
00037 print "======================================================"
00038 print "ACU Axis = ", axis
00039 print "======================================================"
00040 if axis == 'B':
00041 xpos = 135.0 * math.cos(112.5 * math.pi / 180.) * units.cm
00042 ypos = 135.0 * math.sin(112.5 * math.pi / 180.) * units.cm
00043 acuName = 'ACU_B_GdlsEdge'
00044 elif axis == 'C':
00045 xpos = 177.25*math.cos( (112.5 + 180) * math.pi / 180.)*units.cm
00046 ypos = 177.25*math.sin( (112.5 + 180) * math.pi / 180.)*units.cm
00047 acuName = 'ACU_C_GammaCatcher'
00048
00049
00050 from RunDataSvc.RunDataSvcConf import RunDataSvc
00051 runDataSvc = RunDataSvc()
00052 runDataSvc.SimRunType = "Calibration"
00053 sourceName = "DayaBayAD1_"+acuName+"_Germanium_68"
00054 runDataSvc.SimCalibSources = [ sourceName ]
00055 runDataSvc.SimCalibZPosition = { sourceName : zpos }
00056
00057 import GenTools
00058 from GenTools.Helpers import Gun
00059 mygun = Gun()
00060 mygun.gun.ParticleName = 'e+'
00061 mygun.gun.Momentum = 1.0*units.eV
00062 mygun.gun.DirectionMode = "Uniform"
00063 mygun.gun.DirectionSpread = 3
00064 mygun.setVolume("/dd/Structure/AD/db-oil1")
00065 mygun.positioner.Position = [xpos, ypos, zpos]
00066 mygun.timerator.LifeTime = 0.020*units.second
00067 gtc = GenTools.Configure()
00068 gtc.generator.TimeStamp = int(wallTime)
00069 gtc.register(mygun)
00070
00071 import DetSim
00072 detsim = DetSim.Configure(physlist = DetSim.physics_list_basic)
00073 detsim.historian(trackSelection="(pdg == -11)",\
00074 vertexSelection="(pdg == -11)")
00075 params = {
00076 'start' :"(start > 0)",
00077 'track1':"(id==1)",
00078 'track2':"(id==2)",
00079 'GD': "MaterialName == '/dd/Materials/GdDopedLS'",
00080 'LS': "MaterialName == '/dd/Materials/LiquidScintillator'",
00081 'MO': "MaterialName == '/dd/Materials/MineralOil'",
00082 'IAV': "DetectorElementName == 'db-iav1'",
00083 'OAV': "DetectorElementName == 'db-oav1'",
00084 'IWS': "MaterialName == '/dd/Materials/IwsWater'",
00085 'OWS': "MaterialName == '/dd/Materials/OwsWater'",
00086 'lastvtx': "IsStopping == 1",
00087 'firstvtx': "IsStarting == 1",
00088 'Neutron': "pdg == 2112",
00089 'NeutronMom': "creator == 2112",
00090 'Gamma': "pdg == 22",
00091 'Positron': "pdg == -11",
00092 'Muon': "(pdg == 13 or pdg == -13)"
00093 }
00094
00095 detsim.unobserver(stats=[
00096 ["EDepInGdLS", "dE", "%(GD)s"%params],
00097 ["EDepInLS", "dE", "%(LS)s"%params],
00098 ["EDepInIAV", "dE", "%(IAV)s"%params],
00099 ["EDepInOAV", "dE", "%(OAV)s"%params],
00100 ["EDepInOIL", "dE", "%(MO)s"%params],
00101
00102 ["QEDepInGdLS", "qdE", "%(GD)s"%params],
00103 ["QEDepInLS", "qdE", "%(LS)s"%params],
00104 ["QEDepInIAV", "qdE", "%(IAV)s"%params],
00105 ["QEDepInOAV", "qdE", "%(OAV)s"%params],
00106 ["QEDepInOIL", "qdE", "%(MO)s"%params],
00107
00108 ["tQESumGdLS", "qEt", "%(GD)s"%params],
00109 ["xQESumGdLS", "qEx", "%(GD)s"%params],
00110 ["yQESumGdLS", "qEy", "%(GD)s"%params],
00111 ["zQESumGdLS", "qEz", "%(GD)s"%params],
00112
00113 ["tQESumLS", "qEt", "%(LS)s"%params],
00114 ["xQESumLS", "qEx", "%(LS)s"%params],
00115 ["yQESumLS", "qEy", "%(LS)s"%params],
00116 ["zQESumLS", "qEz", "%(LS)s"%params],
00117
00118 ["tQESumMO", "qEt", "%(MO)s"%params],
00119 ["xQESumMO", "qEx", "%(MO)s"%params],
00120 ["yQESumMO", "qEy", "%(MO)s"%params],
00121 ["zQESumMO", "qEz", "%(MO)s"%params],
00122
00123
00124 ["pdgId_Trk1","pdg","%(track1)s and %(start)s"%params],
00125 ["t_Trk1", "t" , "%(track1)s and %(start)s"%params],
00126 ["x_Trk1", "x", "%(track1)s and %(start)s"%params],
00127 ["y_Trk1", "y", "%(track1)s and %(start)s"%params],
00128 ["z_Trk1", "z", "%(track1)s and %(start)s"%params],
00129 ["tEnd_Trk1", "t" , "%(track1)s and %(lastvtx)s"%params],
00130 ["xEnd_Trk1", "x", "%(track1)s and %(lastvtx)s"%params],
00131 ["yEnd_Trk1", "y", "%(track1)s and %(lastvtx)s"%params],
00132 ["zEnd_Trk1", "z", "%(track1)s and %(lastvtx)s"%params],
00133 ["e_Trk1", "E", "%(track1)s and %(start)s"%params],
00134 ["p_Trk1", "p", "%(track1)s and %(start)s"%params],
00135 ["ke_Trk1", "KE", "%(track1)s and %(start)s"%params],
00136 ["vx_Trk1", "vx","%(track1)s and %(start)s"%params],
00137 ["vy_Trk1", "vy","%(track1)s and %(start)s"%params],
00138 ["vz_Trk1", "vz","%(track1)s and %(start)s"%params],
00139 ["TrkLength_GD_Trk1", "dx","%(track1)s and %(GD)s"%params],
00140 ["TrkLength_iAV_Trk1", "dx","%(track1)s and %(IAV)s"%params],
00141 ["TrkLength_LS_Trk1", "dx","%(track1)s and %(LS)s"%params],
00142 ["TrkLength_oAV_Trk1", "dx","%(track1)s and %(OAV)s"%params],
00143 ["TrkLength_Oil_Trk1", "dx","%(track1)s and %(MO)s"%params]
00144 ])
00145
00146 import ElecSim
00147 elecsim = ElecSim.Configure()
00148
00149 import TrigSim
00150 trigsim = TrigSim.Configure()
00151
00152 import ReadoutSim
00153 rosim = ReadoutSim.Configure()
00154
00155 def run(app):
00156 pass