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