8path =
"/eos/experiment/ship/data/Mbias/background-prod-2018/"
12muSources = {
"eta": 221,
"omega": 223,
"phi": 333,
"rho0": 113,
"eta_prime": 331}
13charmExtern = [4332, 4232, 4132, 4232, 4122, 431, 411, 421]
20weightCharm = 489.24 * 2.0 / 3.0
28 for v
in sTree.vetoPoint:
31 if abs(t.GetPdgCode()) != 13:
33 moID = abs(sTree.MCTrack[t.GetMotherId()].GetPdgCode())
34 if moID
in charmExtern
and noCharm:
37 pName = t.GetProcName().Data()
39 if not pName.find(
"Hadronic inelastic") < 0:
40 t.MultiplyWeight(1.0 / diMuboost)
41 elif not pName.find(
"Lepton pair") < 0
or not pName.find(
"Positron annihilation") < 0:
42 t.MultiplyWeight(1.0 / xSecboost)
43 elif not pName.find(
"Primary particle") < 0
or not pName.find(
"Decay") < 0:
44 if moID
in muSources.values():
45 t.MultiplyWeight(1.0 / diMuboost)
49def PoT(f) -> tuple[float | int, float, float]:
55 for k
in f.GetListOfKeys():
56 if k.GetName() ==
"FileHeader":
58 tmp = txt.split(
"=")[1]
59 tmp2 = tmp.split(
"with")[0]
60 if tmp2.find(
"E") < 0:
69 diMuboost += float(txt[i + 4 :].split(
" ")[0])
74 xSecboost += float(txt[i + 1 :].split(
" ")[0])
75 diMuboost = diMuboost / float(ncycles)
76 xSecboost = xSecboost / float(ncycles)
81 f.Get(
"cbmsim").GetEntries(),
87 return nTot, diMuboost, xSecboost
91 lfiles = os.listdir(path)
94 f = ROOT.TFile(path + fn)
95 nPot, _diMuboost, _xSecboost =
PoT(f)
97 print(
"Total statistics so far", ntot / 1.0e9,
" billion")
101 f = ROOT.TFile.Open(os.environ[
"EOSSHIP"] + path + fin)
102 nPot, diMuboost, xSecboost =
PoT(f)
103 sTree = f.Get(
"cbmsim")
104 outFile = fin.replace(
".root",
"_mu.root")
105 fmu = ROOT.TFile(outFile,
"recreate")
106 newTree = sTree.CloneTree(0)
107 for n
in range(sTree.GetEntries()):
112 ff = f.FileHeader.Clone(
"Extracted Muon Background File")
114 tmp = txt.split(
"=")[1]
115 newTxt = txt.replace(tmp.split(
"with")[0].replace(
" ",
""), str(nPot))
118 ff.Write(
"FileHeader", ROOT.TObject.kSingleKey)
125 tmp =
"pythia8_Geant4_10.0_cXX.root"
128 for run
in range(0, 67000, 1000):
131 fmu = tmp.replace(
"XX", str(run) +
"_mu")
132 rc = os.system(
"xrdcp " + fmu +
" $EOSSHIP/eos/experiment/ship/data/Mbias/background-prod-2018/" + fmu)
134 print(
"copy to EOS failed, stop", fmu)
136 rc = os.system(
"rm " + fmu)
140 tmp =
"pythia8_Geant4_charm_XX-YY_10.0.root"
143 for cycle
in [0, 1, 2]:
144 for run
in range(0, 100, 20):
145 crun = run + cycle * 1000
146 fname = tmp.replace(
"XX", str(crun)).replace(
"YY", str(crun + 19))
149 fmu = fname.replace(
".root",
"_mu.root")
150 rc = os.system(
"xrdcp " + fmu +
" $EOSSHIP/eos/experiment/ship/data/Mbias/background-prod-2018/" + fmu)
152 print(
"copy to EOS failed, stop", fmu)
154 rc = os.system(
"rm " + fmu)
159 weight = weightBeauty
160 fname =
"pythia8_Geant4_beauty_5336B_10.0.root"
163 fmu = fname.replace(
".root",
"_mu.root")
164 rc = os.system(
"xrdcp " + fmu +
" $EOSSHIP/eos/experiment/ship/data/Mbias/background-prod-2018/" + fmu)
166 print(
"copy to EOS failed, stop", fmu)
168 rc = os.system(
"rm " + fmu)
178 tmp =
"pythia8_Geant4_charm_XX-YY_10.0.root"
179 mergedFile =
"pythia8_Geant4_charm_102.2B_10.0_mu.root"
180 cmd =
"hadd " + mergedFile
182 for run
in range(0, 100, 20):
183 crun = run + cycle * 1000
184 fname = tmp.replace(
"XX", str(crun)).replace(
"YY", str(crun + 19))
185 fmu =
" $EOSSHIP/eos/experiment/ship/data/Mbias/background-prod-2018/" + fname.replace(
".root",
"_mu.root")
188 os.system(
"xrdcp " + mergedFile +
" $EOSSHIP/eos/experiment/ship/data/Mbias/background-prod-2018/" + mergedFile)
193 timer = ROOT.TStopwatch()
195 pp = os.environ[
"EOSSHIP"] + path
196 Rndm = ROOT.TRandom3()
198 if flavour ==
"charm":
199 allFiles = {
"charm":
"pythia8_Geant4_charm_102.2B_10.0_mu.root"}
200 tmp =
"pythia8_Geant4_10.0_cXX_mu.root"
202 allFiles = {
"beauty":
"pythia8_Geant4_beauty_5336B_10.0_mu.root"}
203 tmp =
"pythia8_Geant4_10.0_withCharmXX_mu.root"
204 for run
in range(0, 67000, 1000):
205 allFiles[str(run)] = tmp.replace(
"XX", str(run))
209 f = ROOT.TFile.Open(pp + allFiles[x])
210 nEntries[x] = f.Get(
"cbmsim").GetEntries()
213 frac = nEntries[flavour] / float(Nall)
215 os.system(
"xrdcp " + pp + allFiles[flavour] +
" " + allFiles[flavour])
221 os.system(
"xrdcp " + pp + allFiles[k] +
" " + allFiles[k])
222 os.system(
"hadd -f tmp.root " + allFiles[flavour] +
" " + allFiles[k])
223 os.system(
"rm " + allFiles[k])
224 f = ROOT.TFile(
"tmp.root")
225 sTree = f.Get(
"cbmsim")
226 sTree.LoadBaskets(30000000000)
227 if flavour ==
"charm":
228 outFile = tmp.replace(
"cXX",
"withCharm" + k)
230 outFile = tmp.replace(
"XX",
"andBeauty" + k)
231 fmu = ROOT.TFile(outFile,
"recreate")
232 newTree = sTree.CloneTree(0)
237 while nMbias < nEntries[k]:
238 if Rndm.Rndm() > frac:
240 myList.append(nMbias + nEntries[flavour])
243 if nEntries[flavour] > nCharm:
245 myList.append(nCharm)
252 print(
"start:", outFile, nev)
253 for iev
in range(nev):
254 rc = sTree.GetEntry(myList[iev])
256 if (iev) % 100000 == 0:
258 print(
"status:", timer.RealTime(), k, iev)
261 print(
"finished one file", outFile, nMbias, nCharm)
262 if flavour ==
"charm":
263 ff = f.FileHeader.Clone(
"With Charm Merged Muon Background File")
265 ff = f.FileHeader.Clone(
"With Charm and Beauty Merged Muon Background File")
268 ff.Write(
"FileHeader", ROOT.TObject.kSingleKey)
271 rc = os.system(
"xrdcp " + outFile +
" $EOSSHIP/eos/experiment/ship/data/Mbias/background-prod-2018/" + outFile)
273 print(
"copy to EOS failed", outFile)
275 rc = os.system(
"rm " + outFile)
279 f = ROOT.TFile.Open(os.environ[
"EOSSHIP"] + path + fname)
280 sTree = f.Get(
"cbmsim")
281 Nall = sTree.GetEntries()
283 for n
in range(Nall):
285 for m
in sTree.MCTrack:
286 pdgID = abs(m.GetPdgCode())
287 if pdgID
in charmExtern:
290 print(
"charm found", charm,
" ratio ", charm / float(Nall))
int muonUpdateWeight(sTree, float diMuboost, float xSecboost, noCharm=True)
tuple[float|int, float, float] PoT(f)
None mergeMbiasAndCharm(str flavour="charm")
int processFile(str fin, bool noCharm=True)