191def mergeMbiasAndCharm(flavour: str = "charm") -> None:
192 done = []
193 timer = ROOT.TStopwatch()
194 timer.Start()
195 pp = os.environ["EOSSHIP"] + path
196 Rndm = ROOT.TRandom3()
197 Rndm.SetSeed(0)
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"
201 else:
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))
206 nEntries = {}
207 Nall = 0
208 for x in allFiles:
209 f = ROOT.TFile.Open(pp + allFiles[x])
210 nEntries[x] = f.Get("cbmsim").GetEntries()
211 Nall += nEntries[x]
212 nCharm = 0
213 frac = nEntries[flavour] / float(Nall)
214 print("debug", frac)
215 os.system("xrdcp " + pp + allFiles[flavour] + " " + allFiles[flavour])
216 for k in allFiles:
217 if k == flavour:
218 continue
219 if k in done:
220 continue
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)
229 else:
230 outFile = tmp.replace("XX", "andBeauty" + k)
231 fmu = ROOT.TFile(outFile, "recreate")
232 newTree = sTree.CloneTree(0)
233 nMbias = 0
234
235
236 myList = []
237 while nMbias < nEntries[k]:
238 if Rndm.Rndm() > frac:
239
240 myList.append(nMbias + nEntries[flavour])
241 nMbias += 1
242 else:
243 if nEntries[flavour] > nCharm:
244
245 myList.append(nCharm)
246 nCharm += 1
247 else:
248 pass
249
250
251 nev = len(myList)
252 print("start:", outFile, nev)
253 for iev in range(nev):
254 rc = sTree.GetEntry(myList[iev])
255 rc = newTree.Fill()
256 if (iev) % 100000 == 0:
257 timer.Stop()
258 print("status:", timer.RealTime(), k, iev)
259 timer.Start()
260 newTree.AutoSave()
261 print("finished one file", outFile, nMbias, nCharm)
262 if flavour == "charm":
263 ff = f.FileHeader.Clone("With Charm Merged Muon Background File")
264 else:
265 ff = f.FileHeader.Clone("With Charm and Beauty Merged Muon Background File")
266 ff.GetTitle()
267 fmu.cd()
268 ff.Write("FileHeader", ROOT.TObject.kSingleKey)
269 fmu.Close()
270 f.Close()
271 rc = os.system("xrdcp " + outFile + " $EOSSHIP/eos/experiment/ship/data/Mbias/background-prod-2018/" + outFile)
272 if rc != 0:
273 print("copy to EOS failed", outFile)
274 else:
275 rc = os.system("rm " + outFile)
276
277