9ROOT.gROOT.LoadMacro(
"$VMCWORKDIR/gconfig/basiclibs.C")
14muonIn =
"$SHIPSOFT/data/muConcrete.root"
18 nJob = int(sys.argv[1])
20 nMult = int(sys.argv[2])
24 nPerJob = int(sys.argv[4])
27from array
import array
29PDG = ROOT.TDatabasePDG.Instance()
30myPythia = ROOT.TPythia6()
33for kf
in [211, 321, 130, 310, 3112, 3122, 3222, 3312, 3322, 3334]:
34 kc = myPythia.Pycomp(kf)
35 myPythia.SetMDCY(kc, 1, 0)
42 if apid
not in masssq:
43 masssq[apid] = PDG.GetParticle(apid).Mass() ** 2
47R = int(time.time() % 900000000)
49mutype = {-13:
"gamma/mu+", 13:
"gamma/mu-"}
54fout = ROOT.TFile(
"muonDis_" + str(nJob) +
".root",
"recreate")
55dTree = ROOT.TTree(
"DIS",
"muon DIS")
56iMuon = ROOT.TClonesArray(
"TVectorD")
57iMuonBranch = dTree.Branch(
"InMuon", iMuon, 32000, -1)
58dPart = ROOT.TClonesArray(
"TVectorD")
59dPartBranch = dTree.Branch(
"Particles", dPart, 32000, -1)
62fin = ROOT.TFile(muonIn)
66def rotate(ctheta, stheta, cphi, sphi, px, py, pz):
68 px1 = ctheta * px + stheta * pz
69 pzr = -stheta * px + ctheta * pz
71 pxr = cphi * px1 - sphi * py
72 pyr = sphi * px1 + cphi * py
76nTOT = sTree.GetEntries()
78nStart = nPerJob * nJob
79nEnd = min(nTOT, nStart + nPerJob)
80if muonIn.find(
"Concrete") < 0:
85myPythia.SetMSTU(11, 11)
86print(
"start production ", nStart, nEnd)
88for k
in range(nStart, nEnd):
89 rc = sTree.GetEvent(k)
91 px, py, pz = sTree.px, sTree.py, sTree.pz
92 x, y, z = sTree.x, sTree.y, sTree.z
93 pid, w = sTree.id, sTree.w
94 p = ROOT.TMath.Sqrt(px * px + py * py + pz * pz)
97 theta = ROOT.TMath.ACos(pz / p)
98 phi = ROOT.TMath.ATan2(py, px)
99 ctheta, stheta = ROOT.TMath.Cos(theta), ROOT.TMath.Sin(theta)
100 cphi, sphi = ROOT.TMath.Cos(phi), ROOT.TMath.Sin(phi)
101 mu = array(
"d", [pid, px, py, pz, E, x, y, z, w])
102 myPythia.Initialize(
"FIXT", mutype[pid],
"p+", p)
103 for n
in range(nMult):
106 tca_vec = iMuon.ConstructedAt(0)
107 muPart = ROOT.TVectorD(9, mu)
108 tca_vec.ResizeTo(muPart)
109 ROOT.std.swap(tca_vec, muPart)
110 myPythia.GenerateEvent()
113 for itrk
in range(1, myPythia.GetN() + 1):
114 did = myPythia.GetK(itrk, 2)
116 ctheta, stheta, cphi, sphi, myPythia.GetP(itrk, 1), myPythia.GetP(itrk, 2), myPythia.GetP(itrk, 3)
118 psq = dpx**2 + dpy**2 + dpz**2
119 E = ROOT.TMath.Sqrt(
getMasssq(did) + psq)
120 m = array(
"d", [did, dpx, dpy, dpz, E])
121 part = ROOT.TVectorD(5, m)
124 if dPart.GetSize() == nPart:
125 dPart.Expand(nPart + 10)
126 tca_vec = dPart.ConstructedAt(nPart)
127 tca_vec.ResizeTo(part)
128 ROOT.std.swap(tca_vec, part)
130 if nMade % 10000 == 0:
131 print(
"made so far ", nMade)
135myPythia.SetMSTU(11, 6)
136print(
"created nJob ", nJob,
":", nStart,
" - ", nEnd,
" events")
def rotate(px, py, pz, theta, phi)