Classes | |
class | PositionerAlg |
Functions | |
def | configure |
def | run |
def SimGe68wBG::configure | ( | argv = [] |
) |
Configure this module with source position
Definition at line 35 of file SimGe68wBG.py.
00035 : 00036 """Configure this module with source position""" 00037 00038 import sys, getopt 00039 import GaudiKernel.SystemOfUnits as units 00040 from time import gmtime, mktime, strftime, strptime, timezone 00041 opts,args = getopt.getopt(argv, 00042 "z:a:") 00043 from DybPython.Control import nuwa 00044 wallTime = nuwa.opts.time 00045 runNumber = nuwa.opts.run 00046 #wallTime = 0 00047 axis = 'A' 00048 acuName = 'ACU_A_Center' 00049 xpos = 0.0 00050 ypos = 0.0 00051 zpos = 0.0 00052 pmtDataPath = None 00053 for opt,arg in opts: 00054 if opt == "-z": 00055 zpos = float(arg) * units.cm 00056 print "======================================================" 00057 print "Source Z position = ", zpos / units.cm, " cm" 00058 print "======================================================" 00059 if opt == "-a": 00060 axis = arg 00061 print "======================================================" 00062 print "ACU Axis = ", axis 00063 print "======================================================" 00064 if axis == 'B': 00065 xpos = 135.0 * math.cos(112.5 * math.pi / 180.) * units.cm 00066 ypos = 135.0 * math.sin(112.5 * math.pi / 180.) * units.cm 00067 acuName = 'ACU_B_GdlsEdge' 00068 elif axis == 'C': 00069 xpos = 177.25*math.cos( (112.5 + 180) * math.pi / 180.)*units.cm 00070 ypos = 177.25*math.sin( (112.5 + 180) * math.pi / 180.)*units.cm 00071 acuName = 'ACU_C_GammaCatcher' 00072 00073 # Set run info 00074 from RunDataSvc.RunDataSvcConf import RunDataSvc 00075 runDataSvc = RunDataSvc() 00076 runDataSvc.SimRunType = "Calibration" 00077 sourceName = "DayaBayAD1_"+acuName+"_Germanium_68" 00078 runDataSvc.SimCalibSources = [ sourceName ] 00079 runDataSvc.SimCalibZPosition = { sourceName : zpos } 00080 00081 # Add pull-mixing simulation 00082 from Stage import Configure as StageConfigure 00083 stageCfg = StageConfigure() 00084 stageCfg.addStages( ['Kinematic','Detector','Electronic','TrigRead', 00085 'SingleLoader'] ) 00086 00087 # Add kinematic generators 00088 from Gnrtr.GnrtrConf import Gnrtr 00089 from GenTools.Helpers import Gun 00090 from GenTools.Helpers import HepEVT 00091 00092 SimTime=nuwa.opts.executions * 2 * 0.010 00093 00094 # Ge68 00095 00096 seed = runNumber 00097 Ge68lifetime=0.010 00098 Ge68events= SimTime // Ge68lifetime 00099 00100 mygenGe68 = HepEVT("Ge68.exe -n %d -seed %d |" % (Ge68events,seed), name = "Ge68") 00101 mygenGe68.positioner.Volume = "/dd/Structure/CalibrationSources/db-ad1-Ge68SourceActive" 00102 mygenGe68.transformer.Volume = "/dd/Structure/CalibrationSources/db-ad1-Ge68SourceActive" 00103 mygenGe68.positioner.Position = [0, 0, 0] 00104 mygenGe68.positioner.Strategy = "FullVolume" 00105 mygenGe68.positioner.Mode = "Uniform" 00106 mygenGe68.positioner.Spread = 3.0 * units.cm 00107 mygenGe68.timerator.LifeTime = Ge68lifetime*units.second 00108 00109 gnrtrGe68 = Gnrtr("gnrtrGe68"); 00110 gnrtrGe68.GenTools = mygenGe68.tools() 00111 gnrtrGe68.ThisStageName = "Kinematic" 00112 gnrtrGe68.TimeStamp = int(wallTime) 00113 stageCfg.KinematicSequence.Members.append(gnrtrGe68) 00114 00115 00116 # K40 in PMTs 00117 seed = runNumber 00118 K40PMTlifetime=1/689.472 00119 K40PMTevents= SimTime // K40PMTlifetime 00120 mygenK40PMT = HepEVT("K40.exe -n %d -seed %d |" % (K40PMTevents,seed), name = "K40PMT") 00121 mygenK40PMT.positioner.Volume = "/dd/Structure/AD/db-oil1" 00122 mygenK40PMT.transformer.Volume = "/dd/Structure/AD/db-oil1" 00123 mygenK40PMT.positioner.Position = [0, 0, 0] 00124 mygenK40PMT.positioner.Strategy = "VolumeType" 00125 mygenK40PMT.positioner.FillVolumes = ["lvPmtHemiVacuum"] 00126 mygenK40PMT.positioner.Mode = "Uniform" 00127 mygenK40PMT.positioner.Spread = 3. * units.m 00128 mygenK40PMT.timerator.LifeTime = K40PMTlifetime*units.second 00129 00130 gnrtrK40PMT = Gnrtr("gnrtrK40PMT"); 00131 gnrtrK40PMT.GenTools = mygenK40PMT.tools() 00132 gnrtrK40PMT.ThisStageName = "Kinematic" 00133 gnrtrK40PMT.TimeStamp = int(wallTime) 00134 stageCfg.KinematicSequence.Members.append(gnrtrK40PMT) 00135 00136 # K40 in Steel 00137 seed = runNumber 00138 K40STLlifetime=(1.0/260.0)*(20.0/24.875) 00139 K40STLevents= SimTime // K40STLlifetime 00140 mygenK40STL = HepEVT("K40.exe -n %d -seed %d |" % (K40STLevents,seed), name = "K40STL") 00141 mygenK40STL.positioner.Volume = "/dd/Structure/AD/db-ade1" 00142 mygenK40STL.transformer.Volume = "/dd/Structure/AD/db-ade1" 00143 mygenK40STL.positioner.Position = [0, 0, 0] 00144 #mygenK40STL.positioner.Strategy = "VolumeType" 00145 #mygenK40STL.positioner.FillVolumes = ["lvSST"] 00146 mygenK40STL.positioner.Strategy = "Material" 00147 mygenK40STL.positioner.FillMaterials = ["StainlessSteel"] 00148 mygenK40STL.positioner.Mode = "Uniform" 00149 mygenK40STL.positioner.Spread = 3.0 * units.m 00150 mygenK40STL.timerator.LifeTime = K40STLlifetime*units.second 00151 00152 gnrtrK40STL = Gnrtr("gnrtrK40STL"); 00153 gnrtrK40STL.GenTools = mygenK40STL.tools() 00154 gnrtrK40STL.ThisStageName = "Kinematic" 00155 gnrtrK40STL.TimeStamp = int(wallTime) 00156 stageCfg.KinematicSequence.Members.append(gnrtrK40STL) 00157 00158 # Thorium in PMTs 00159 thPMTlifetime=1.0/810.929 00160 thPMTMaxEvents = SimTime // thPMTlifetime 00161 thSTLlifetime=1.0/480.0*20.0/24.875 00162 thSTLMaxEvents = SimTime // thSTLlifetime 00163 thPMTFirstEvent = (thPMTMaxEvents + thSTLMaxEvents)*(runNumber - 1001) 00164 while (thPMTFirstEvent + thPMTMaxEvents) > 1000000: 00165 thPMTFirstEvent = thPMTFirstEvent // 5.0 00166 thPMTHepEvtFile = "${UNDERSTANDINGENERGYROOT}/share/th232.asc" 00167 thoriumPMTGen = "${UNDERSTANDINGENERGYROOT}/share/chooseHepEVT.py -f %s -n %d -s %d |" % (thPMTHepEvtFile,thPMTMaxEvents,thPMTFirstEvent) 00168 mygenThPMT = HepEVT(thoriumPMTGen,name = "ThoriumPMT") 00169 mygenThPMT.positioner.Volume = "/dd/Structure/AD/db-oil1" 00170 mygenThPMT.transformer.Volume = "/dd/Structure/AD/db-oil1" 00171 mygenThPMT.positioner.Position = [0, 0, 0] 00172 mygenThPMT.positioner.Strategy = "VolumeType" 00173 mygenThPMT.positioner.FillVolumes = ["lvPmtHemiVacuum"] 00174 mygenThPMT.positioner.Mode = "Uniform" 00175 mygenThPMT.positioner.Spread = 3. * units.m 00176 mygenThPMT.timerator.LifeTime = thPMTlifetime*units.second 00177 00178 gnrtrTh232PMT = Gnrtr("gnrtrTh232PMT"); 00179 gnrtrTh232PMT.GenTools = mygenThPMT.tools() 00180 gnrtrTh232PMT.ThisStageName = "Kinematic" 00181 gnrtrTh232PMT.TimeStamp = int(wallTime) 00182 stageCfg.KinematicSequence.Members.append(gnrtrTh232PMT) 00183 00184 00185 # Thorium in Steel 00186 thSTLFirstEvent = (thPMTMaxEvents + thSTLMaxEvents)*(runNumber - 1001) + thPMTMaxEvents 00187 while (thSTLFirstEvent + thSTLMaxEvents) > 1000000: 00188 thSTLFirstEvent = thSTLFirstEvent // 5.0 00189 thHepEvtFile = "${UNDERSTANDINGENERGYROOT}/share/th232.asc" 00190 thoriumSTLGen = "${UNDERSTANDINGENERGYROOT}/share/chooseHepEVT.py -f %s -n %d -s %d |" % (thHepEvtFile,thSTLMaxEvents,thSTLFirstEvent) 00191 mygenThSTL = HepEVT(thoriumSTLGen,name = "ThoriumSTL") 00192 mygenThSTL.positioner.Volume = "/dd/Structure/AD/db-ade1" 00193 mygenThSTL.transformer.Volume = "/dd/Structure/AD/db-ade1" 00194 mygenThSTL.positioner.Position = [0, 0, 0] 00195 mygenThSTL.positioner.Strategy = "Material" 00196 mygenThSTL.positioner.FillMaterials = ["StainlessSteel"] 00197 mygenThSTL.positioner.Mode = "Uniform" 00198 mygenThSTL.positioner.Spread = 3. * units.m 00199 mygenThSTL.timerator.LifeTime = thSTLlifetime*units.second 00200 00201 gnrtrTh232STL = Gnrtr("gnrtrTh232STL"); 00202 gnrtrTh232STL.GenTools = mygenThSTL.tools() 00203 gnrtrTh232STL.ThisStageName = "Kinematic" 00204 gnrtrTh232STL.TimeStamp = int(wallTime) 00205 stageCfg.KinematicSequence.Members.append(gnrtrTh232STL) 00206 00207 # Uranium in PMTs 00208 uPMTlifetime=1.0/2823.805 00209 uPMTMaxEvents = SimTime // uPMTlifetime 00210 uSTLlifetime=1.0/216.0*20.0/24.875 00211 uSTLMaxEvents = SimTime // uSTLlifetime 00212 uPMTFirstEvent = (uPMTMaxEvents + uSTLMaxEvents)*(runNumber - 1001) 00213 while (uPMTFirstEvent + uPMTMaxEvents) > 1000000: 00214 uPMTFirstEvent = uPMTFirstEvent // 5.0 00215 uPMTHepEvtFile = "${UNDERSTANDINGENERGYROOT}/share/u238.asc" 00216 uraniumPMTGen = "${UNDERSTANDINGENERGYROOT}/share/chooseHepEVT.py -f %s -n %d -s %d |" % (uPMTHepEvtFile,uPMTMaxEvents,uPMTFirstEvent) 00217 mygenUPMT = HepEVT(uraniumPMTGen,name = "UraniumPMT") 00218 mygenUPMT.positioner.Volume = "/dd/Structure/AD/db-oil1" 00219 mygenUPMT.transformer.Volume = "/dd/Structure/AD/db-oil1" 00220 mygenUPMT.positioner.Position = [0, 0, 0] 00221 mygenUPMT.positioner.Strategy = "VolumeType" 00222 mygenUPMT.positioner.FillVolumes = ["lvPmtHemiVacuum"] 00223 mygenUPMT.positioner.Mode = "Uniform" 00224 mygenUPMT.positioner.Spread = 3. * units.m 00225 mygenUPMT.timerator.LifeTime = uPMTlifetime*units.second 00226 00227 gnrtrU238PMT = Gnrtr("gnrtrU232PMT"); 00228 gnrtrU238PMT.GenTools = mygenUPMT.tools() 00229 gnrtrU238PMT.ThisStageName = "Kinematic" 00230 gnrtrU238PMT.TimeStamp = int(wallTime) 00231 stageCfg.KinematicSequence.Members.append(gnrtrU238PMT) 00232 00233 00234 # Uranium in Steel 00235 uSTLFirstEvent = (uPMTMaxEvents + uSTLMaxEvents)*(runNumber - 1001) + uPMTMaxEvents 00236 while (uSTLFirstEvent + uSTLMaxEvents) > 1000000: 00237 uSTLFirstEvent = uSTLFirstEvent // 5.0 00238 uSTLHepEvtFile = "${UNDERSTANDINGENERGYROOT}/share/u238.asc" 00239 uraniumSTLGen = "${UNDERSTANDINGENERGYROOT}/share/chooseHepEVT.py -f %s -n %d -s %d |" % (uSTLHepEvtFile,uSTLMaxEvents,uSTLFirstEvent) 00240 mygenUSTL = HepEVT(uraniumSTLGen,name = "UraniumSTL") 00241 mygenUSTL.positioner.Volume = "/dd/Structure/AD/db-ade1" 00242 mygenUSTL.transformer.Volume = "/dd/Structure/AD/db-ade1" 00243 mygenUSTL.positioner.Position = [0, 0, 0] 00244 #mygenUSTL.positioner.Strategy = "VolumeType" 00245 #mygenUSTL.positioner.FillVolumes = ["lvSST"] 00246 mygenUSTL.positioner.Strategy = "Material" 00247 mygenUSTL.positioner.FillMaterials = ["StainlessSteel"] 00248 mygenUSTL.positioner.Mode = "Uniform" 00249 mygenUSTL.positioner.Spread = 3. * units.m 00250 mygenUSTL.timerator.LifeTime = uSTLlifetime*units.second 00251 00252 gnrtrU238STL = Gnrtr("gnrtrU232STL"); 00253 gnrtrU238STL.GenTools = mygenUSTL.tools() 00254 gnrtrU238STL.ThisStageName = "Kinematic" 00255 gnrtrU238STL.TimeStamp = int(wallTime) 00256 stageCfg.KinematicSequence.Members.append(gnrtrU238STL) 00257 00258 # Rest of Simulation stages 00259 import DetSim 00260 detsim = DetSim.Configure(use_push_algs = False) 00261 detsim.historian(trackSelection="(pdg == -11)",\ 00262 vertexSelection="(pdg == -11)") 00263 params = { 00264 'start' :"(start > 0)", 00265 'track1':"(id==1)", 00266 'track2':"(id==2)", 00267 'GD': "MaterialName == '/dd/Materials/GdDopedLS'", 00268 'LS': "MaterialName == '/dd/Materials/LiquidScintillator'", 00269 'MO': "MaterialName == '/dd/Materials/MineralOil'", 00270 'IAV': "DetectorElementName == 'db-iav1'", 00271 'OAV': "DetectorElementName == 'db-oav1'", 00272 'IWS': "MaterialName == '/dd/Materials/IwsWater'", 00273 'OWS': "MaterialName == '/dd/Materials/OwsWater'", 00274 'lastvtx': "IsStopping == 1", 00275 'firstvtx': "IsStarting == 1", 00276 'Neutron': "pdg == 2112", 00277 'NeutronMom': "creator == 2112", 00278 'Gamma': "pdg == 22", 00279 'Positron': "pdg == -11", 00280 'Muon': "(pdg == 13 or pdg == -13)" 00281 } 00282 00283 detsim.unobserver(stats=[ 00284 ["EDepInGdLS", "dE", "%(GD)s"%params], 00285 ["EDepInLS", "dE", "%(LS)s"%params], 00286 ["EDepInIAV", "dE", "%(IAV)s"%params], 00287 ["EDepInOAV", "dE", "%(OAV)s"%params], 00288 ["EDepInOIL", "dE", "%(MO)s"%params], 00289 00290 ["QEDepInGdLS", "qdE", "%(GD)s"%params], 00291 ["QEDepInLS", "qdE", "%(LS)s"%params], 00292 ["QEDepInIAV", "qdE", "%(IAV)s"%params], 00293 ["QEDepInOAV", "qdE", "%(OAV)s"%params], 00294 ["QEDepInOIL", "qdE", "%(MO)s"%params], 00295 00296 ["tQESumGdLS", "qEt", "%(GD)s"%params], 00297 ["xQESumGdLS", "qEx", "%(GD)s"%params], 00298 ["yQESumGdLS", "qEy", "%(GD)s"%params], 00299 ["zQESumGdLS", "qEz", "%(GD)s"%params], 00300 00301 ["tQESumLS", "qEt", "%(LS)s"%params], 00302 ["xQESumLS", "qEx", "%(LS)s"%params], 00303 ["yQESumLS", "qEy", "%(LS)s"%params], 00304 ["zQESumLS", "qEz", "%(LS)s"%params], 00305 00306 ["tQESumMO", "qEt", "%(MO)s"%params], 00307 ["xQESumMO", "qEx", "%(MO)s"%params], 00308 ["yQESumMO", "qEy", "%(MO)s"%params], 00309 ["zQESumMO", "qEz", "%(MO)s"%params], 00310 00311 # track 1 00312 ["pdgId_Trk1","pdg","%(track1)s and %(start)s"%params], 00313 ["t_Trk1", "t" , "%(track1)s and %(start)s"%params], 00314 ["x_Trk1", "x", "%(track1)s and %(start)s"%params], 00315 ["y_Trk1", "y", "%(track1)s and %(start)s"%params], 00316 ["z_Trk1", "z", "%(track1)s and %(start)s"%params], 00317 ["tEnd_Trk1", "t" , "%(track1)s and %(lastvtx)s"%params], 00318 ["xEnd_Trk1", "x", "%(track1)s and %(lastvtx)s"%params], 00319 ["yEnd_Trk1", "y", "%(track1)s and %(lastvtx)s"%params], 00320 ["zEnd_Trk1", "z", "%(track1)s and %(lastvtx)s"%params], 00321 ["e_Trk1", "E", "%(track1)s and %(start)s"%params], 00322 ["p_Trk1", "p", "%(track1)s and %(start)s"%params], 00323 ["ke_Trk1", "KE", "%(track1)s and %(start)s"%params], 00324 ["vx_Trk1", "vx","%(track1)s and %(start)s"%params], 00325 ["vy_Trk1", "vy","%(track1)s and %(start)s"%params], 00326 ["vz_Trk1", "vz","%(track1)s and %(start)s"%params], 00327 ["TrkLength_GD_Trk1", "dx","%(track1)s and %(GD)s"%params], 00328 ["TrkLength_iAV_Trk1", "dx","%(track1)s and %(IAV)s"%params], 00329 ["TrkLength_LS_Trk1", "dx","%(track1)s and %(LS)s"%params], 00330 ["TrkLength_oAV_Trk1", "dx","%(track1)s and %(OAV)s"%params], 00331 ["TrkLength_Oil_Trk1", "dx","%(track1)s and %(MO)s"%params] 00332 ]) 00333 00334 from DetSimProc.DetSimProcConf import DetSimProc 00335 dsp = DetSimProc() 00336 dsp.ThisStageName = "Detector" 00337 dsp.LowerStageName = "Kinematic" 00338 stageCfg.DetectorSequence.Members.append(dsp) 00339 00340 import ElecSim 00341 elecsim = ElecSim.Configure(use_push_algs = False) 00342 from ElecSimProc.ElecSimProcConf import ElecSimProc 00343 esp = ElecSimProc() 00344 esp.ThisStageName = "Electronic" 00345 esp.LowerStageName = "Detector" 00346 stageCfg.ElectronicSequence.Members.append(esp) 00347 00348 #import TrigSim 00349 #trigsim = TrigSim.Configure() 00350 from TrigReadProc.TrigReadProcConf import TrigReadProc 00351 tsp = TrigReadProc() 00352 tsp.ThisStageName = "TrigRead" 00353 tsp.LowerStageName = "Electronic" 00354 stageCfg.TrigReadSequence.Members.append(tsp) 00355 00356 #import ReadoutSim 00357 #rosim = ReadoutSim.Configure() 00358 from SingleLoader.SingleLoaderConf import SingleLoader 00359 sll = SingleLoader() 00360 sll.ThisStageName = "SingleLoader" 00361 sll.LowerStageName = "TrigRead" 00362 stageCfg.SingleLoaderSequence.Members.append(sll) 00363 00364 from Stage.StageConf import Sim15 00365 sim15=Sim15() 00366 sim15.TopStage="SingleLoader" 00367 00368 from Gaudi.Configuration import ApplicationMgr 00369 theApp = ApplicationMgr() 00370 theApp.TopAlg.append(sim15) 00371 00372 global autoPositioner 00373 autoPositioner = AutoPositionerTool("posAlg.AutoPositioner") 00374 autoPositioner.PhysicalVolume = "pvGe68SourceAssy" 00375 autoPositioner.LogicalVolume = "/dd/Geometry/CalibrationSources/lvGe68SourceAssy" 00376 autoPositioner.CoordinateDetElem = "/dd/Structure/AD/db-oil1" 00377 #autoPositioner.Position = [0,0,0] 00378 autoPositioner.Position = [xpos, ypos, zpos] 00379 autoPositioner.Element = "db-ad1-Ge68SourceAssy" 00380 autoPositioner.ElementPath = "/dd/Structure/CalibrationSources" 00381 00382 autoPositioner.SubDetectorElements = [["db-ad1-Ge68SourceActive", 00383 "/dd/Structure/CalibrationSources/db-ad1-Ge68SourceAssy", 00384 "/dd/Geometry/CalibrationSources/lvGe68SourceActive", 00385 "pvGe68SourceShell/pvGe68Source/pvGe68SourceInterior/pvGe68SourceActive"]] 00386 00387 def run(app):
def SimGe68wBG::run | ( | app | ) |
Definition at line 388 of file SimGe68wBG.py.
00388 : 00389 00390 global autoPositioner 00391 posAlg = PositionerAlg("posAlg") 00392 posAlg.posToolConf = autoPositioner 00393 print "dir(app)= ",dir(app) 00394 print "dir(app._appMgr)= ",dir(app._appmgr) 00395 app.addAlgorithm(posAlg) 00396 print "Algorithms:" 00397 for alg in app.algorithms(): 00398 print " ",alg 00399 topAlg = app.topAlg 00400 app.topAlg = topAlg[-1:] + topAlg[:-1] 00401 print "Algorithms (fixed):" 00402 for alg in app.algorithms(): 00403 print " ",alg 00404 00405 pass pass