SND@LHC Software
Loading...
Searching...
No Matches
run_simPgun.py
Go to the documentation of this file.
1from __future__ import print_function
2mcEngine = "TGeant4"
3simEngine = "Pgun"
4nEvents = 5
5
6import ROOT,os
7ROOT.gROOT.LoadMacro("$VMCWORKDIR/gconfig/basiclibs.C")
8ROOT.basiclibs()
9
10#-----prepare python exit-----------------------------------------------
11def pyExit():
12 global run
13 del run
14import atexit
15atexit.register(pyExit)
16
17#
18muShieldLength = 7000 # m
19targetHadronAbsorber = 350 # m
20decayVolumeLength = 5000 # m
21# Output file name
22tag = simEngine+"-"+mcEngine
23outFile = "ship."+tag+".root"
24os.system("rm *."+tag+".root")
25# Parameter file name
26parFile="ship.params."+tag+".root"
27
28# In general, the following parts need not be touched
29# ========================================================================
30
31# -----Timer--------------------------------------------------------
32timer = ROOT.TStopwatch()
33timer.Start()
34# ------------------------------------------------------------------------
35
36# -----Create simulation run----------------------------------------
37run = ROOT.FairRunSim()
38run.SetName(mcEngine)# Transport engine
39run.SetOutputFile(outFile) # Output file
40rtdb = run.GetRuntimeDb()
41# ------------------------------------------------------------------------
42
43# -----Create media-------------------------------------------------
44run.SetMaterials("media.geo") # Materials
45# ------------------------------------------------------------------------
46
47# -----Create geometry----------------------------------------------
48
49cave= ROOT.ShipCave("CAVE")
50cave.SetGeometryFileName("cave.geo")
51run.AddModule(cave)
52
53TargetStation = ROOT.ShipTargetStation("TargetStation",muShieldLength)
54run.AddModule(TargetStation)
55MuonShield = ROOT.ShipMuonShield("MuonShield",1)
56run.AddModule(MuonShield)
57
58magnet = ROOT.ShipMagnet("Magnet")
59run.AddModule(magnet)
60
61Chamber = ROOT.ShipChamber("Chamber")
62run.AddModule(Chamber)
63
64Veto = ROOT.veto("Veto", ROOT.kTRUE)
65run.AddModule(Veto)
66
67ecal = ROOT.ecal("Ecal", ROOT.kTRUE)
68run.AddModule(ecal)
69
70Muon = ROOT.muon("Muon", ROOT.kTRUE)
71run.AddModule(Muon)
72
73#----- Magnetic field -------------------------------------------
74 # Constant Field
75fMagField = ROOT.ShipConstField()
76fMagField.SetField(0., 2. ,0. ) # values are in kG
77fMagField.SetFieldRegion(-160, 160,-160, 160, 1940, 125); # values are in cm (xmin,xmax,ymin,ymax,zmin,zmax)
78run.SetField(fMagField)
79
80# -----Create PrimaryGenerator--------------------------------------
81primGen = ROOT.FairPrimaryGenerator()
82pointZero = -decayVolumeLength/2. - targetHadronAbsorber - muShieldLength - 200.
83
84mom = ROOT.TVector3(0.,0.,100.)
85pos = ROOT.TVector3(0.,0.,pointZero)
86myPgun = ROOT.FairParticleGenerator(2212,1,0.,0.,100.,0.,0.,pointZero)
87primGen.AddGenerator(myPgun)
88
89run.SetGenerator(primGen)
90# ------------------------------------------------------------------------
91
92#---Store the visualiztion info of the tracks, this make the output file very large!!
93#--- Use it only to display but not for production!
94run.SetStoreTraj(ROOT.kTRUE)
95
96# -----Initialize simulation run------------------------------------
97run.Init()
98# ------------------------------------------------------------------------
99
100# -----Runtime database---------------------------------------------
101kParameterMerged = ROOT.kTRUE
102parOut = ROOT.FairParRootFileIo(kParameterMerged)
103parOut.open(parFile)
104rtdb.setOutput(parOut)
105rtdb.saveOutput()
106#rtdb.print() does not work in python ??
107rtdb.printParamContexts()
108# -----Start run----------------------------------------------------
109run.Run(nEvents)
110run.CreateGeometryFile("geofile_full."+tag+".root")
111# ------------------------------------------------------------------------
112
113# -----Finish-------------------------------------------------------
114timer.Stop()
115rtime = timer.RealTime()
116ctime = timer.CpuTime()
117print(' ')
118print("Macro finished succesfully.")
119print("Output file is ", outFile)
120print("Parameter file is ",parFile)
121print("Real time ",rtime, " s, CPU time ",ctime,"s")
122
123# ------------------------------------------------------------------------
124
126 g = ROOT.gROOT
127 lm = run.GetListOfModules()
128 for x in lm: print(x.GetName())
129 fGeo = ROOT.gGeoManager
130 cave = fGeo.GetTopVolume()
131 cave.Draw('ogl')
132#
133 tf = g.FindObjectAny('cbmroot')
134 for l in tf.GetListOfFolders(): print(l.GetName())
135 l = tf.FindObject('MCGeoTrack')
136 trs = l.FindObject('GeoTracks')
137 for x in trs: print(x)
138 l = tf.FindObject('Stack')
139 trs = l.FindObject('MCTrack')
140 for x in trs: print(x)
141#
142 gMC = ROOT.gMC # <ROOT.TVirtualMC* object ("TGeant4") at 0x2a5d3e8>
143 fStack = gMC.GetStack()
144 gMC.ProcessRun(1) # 1 event
145#
146 gMC.GetMC() # <ROOT.TGeant4 object ("TGeant4")
147 g4.NofVolumes()
148 g4.StartGeantUI()
149#
150 gPrim = run.GetPrimaryGenerator()
151 mch = gPrim.GetEvent() # <ROOT.FairMCEventHeader object ("MCEventHeader.")
152 print(mch.GetEventID(),mch.GetZ())
153 gPy8 = gPrim.GetListOfGenerators()[0]