2import ROOT,os,sys,getopt,time,shipRoot_conf
3from argparse
import ArgumentParser
6from ShipGeoConfig
import ConfigRegistry
12setup[
'Fig3'] = {
'thickness': 0.1*u.cm,
'material':
'lead',
'momentum': 2*u.GeV,
'maxTheta':0.2}
13setup[
'Fig4'] = {
'thickness': 0.1*u.cm,
'material':
'lead',
'momentum': 8*u.GeV,
'maxTheta':0.04}
14setup[
'Fig5'] = {
'thickness': 0.1*u.cm,
'material':
'lead',
'momentum': 14*u.GeV,
'maxTheta':0.02}
16setup[
'Fig6'] = {
'thickness': 1.44*u.cm,
'material':
'copper',
'momentum': 11.7*u.GeV,
'maxTheta':0.045}
17setup[
'Fig7'] = {
'thickness': 1.44*u.cm,
'material':
'copper',
'momentum': 7.3*u.GeV,
'maxTheta':0.045}
19parser = ArgumentParser()
20parser.add_argument(
"-b",
"--heartbeat", dest=
"heartbeat", type=int, help=
"progress report", default=10000)
21parser.add_argument(
"-n",
"--nEvents", dest=
"nEvents", type=int, help=
"number of events", default=10000)
22parser.add_argument(
"-s",
"--setup", dest=
"s", type=str, help=
"setup to simulate", default=
'Fig3')
23options = parser.parse_args()
26thickness = setup[s][
'thickness']
27material = setup[s][
'material']
28momentum = setup[s][
'momentum']
29maxTheta = setup[s][
'maxTheta']
34outFile =
"msc"+s+
".root"
35theSeed =
int(10000 * time.time() % 10000000)
39ROOT.gRandom.SetSeed(theSeed)
41ship_geo = ConfigRegistry.loadpy(
"$FAIRSHIP/geometry/geometry_config.py", Yheight = 10, tankDesign = 5, muShieldDesign = 7, nuTauTargetDesign=1)
44timer = ROOT.TStopwatch()
48run = ROOT.FairRunSim()
50run.SetOutputFile(outFile)
51run.SetUserConfig(
"g4Config.C")
52rtdb = run.GetRuntimeDb()
55run.SetMaterials(
"media.geo")
57cave= ROOT.ShipCave(
"CAVE")
58cave.SetGeometryFileName(
"cave.geo")
61target = ROOT.boxTarget()
62target.SetTarget(material,thickness)
65primGen = ROOT.FairPrimaryGenerator()
66myPgun = ROOT.FairBoxGenerator(13,1)
67myPgun.SetPRange(momentum-0.01,momentum+0.01)
68myPgun.SetPhiRange(0,0)
69myPgun.SetThetaRange(0,0)
70myPgun.SetXYZ(0.*u.cm, 0.*u.cm, -10.*u.cm - (thickness) )
71ROOT.FairLogger.GetLogger().SetLogScreenLevel(
"WARNING")
73primGen.AddGenerator(myPgun)
74run.SetGenerator(primGen)
76run.SetGenerator(primGen)
79gMC = ROOT.TVirtualMC.GetMC()
81fStack = gMC.GetStack()
83fStack.SetEnergyCut(-1.)
89ROOT.gROOT.ProcessLine(
'#include "Geant4/G4EmParameters.hh"')
90emP = ROOT.G4EmParameters.Instance()
97ut.bookHist(h,
'theta',
'scattering angle '+
str(momentum)+
'GeV/c;{Theta}(rad)',5000,0,maxTheta)
98ut.bookHist(h,
'theta2D',
'scattering angle '+
str(momentum)+
'GeV/c;{Theta}(rad)',5000,-maxTheta,maxTheta)
100for n
in range(sTree.GetEntries()):
101 rc = sTree.GetEvent(n)
102 for aHit
in sTree.vetoPoint:
103 if not aHit.GetTrackID()==0:
continue
104 pt = ROOT.TMath.Sqrt(aHit.GetPx()**2+aHit.GetPy()**2)
105 scat = ROOT.TMath.ATan2(pt,aHit.GetPz())
106 rc = h[
'theta'].Fill(scat)
107 scatX = ROOT.TMath.ATan2(aHit.GetPx(),aHit.GetPz())
108 scatY = ROOT.TMath.ATan2(aHit.GetPy(),aHit.GetPz())
109 rc = h[
'theta'].Fill(scat)
110 rc = h[
'theta2D'].Fill(scatX)
111 rc = h[
'theta2D'].Fill(scatY)
112ut.bookCanvas(h,key=s,title=s,nx=900,ny=600,cx=1,cy=1)
115h[
'theta_100']=h[
'theta'].Clone(
'theta_100')
116h[
'theta_100']=h[
'theta'].Rebin(5)
117h[
'theta_100'].Scale(1./h[
'theta_100'].GetMaximum())
122f.Write(h[
'theta'].GetName())
123f.Write(h[
'theta_100'].GetName())
127rtime = timer.RealTime()
128ctime = timer.CpuTime()
130print(
"Macro finished succesfully.")
131print(
"Output file is ", outFile)
132print(
"Real time ",rtime,
" s, CPU time ",ctime,
"s")
configure(darkphoton=None)