167def mergeMbiasAndCharm(flavour="charm"):
168 done = []
169 timer = ROOT.TStopwatch()
170 timer.Start()
171 pp = os.environ['EOSSHIP']+path
172 Rndm=ROOT.TRandom3()
173 Rndm.SetSeed(0)
174 if flavour=="charm":
175 allFiles = {'charm':"pythia8_Geant4_charm_102.2B_10.0_mu.root"}
176 tmp = "pythia8_Geant4_10.0_cXX_mu.root"
177 else:
178 allFiles = {'beauty':"pythia8_Geant4_beauty_5336B_10.0_mu.root"}
179 tmp = "pythia8_Geant4_10.0_withCharmXX_mu.root"
180 for run in range(0,67000,1000):
181 allFiles[str(run)] = tmp.replace('XX',str(run))
182 nEntries = {}
183 Nall = 0
184 for x in allFiles:
185 f=ROOT.TFile.Open(pp+allFiles[x])
186 nEntries[x]=f.cbmsim.GetEntries()
187 Nall += nEntries[x]
188 nCharm = 0
189 nDone = 0
190 frac = nEntries[flavour]/float(Nall)
191 print("debug",frac)
192 os.system('xrdcp '+pp +allFiles[flavour] +' '+allFiles[flavour])
193 for k in allFiles:
194 if k==flavour: continue
195 if k in done: continue
196 os.system('xrdcp '+pp +allFiles[k] +' ' +allFiles[k])
197 os.system('hadd -f tmp.root '+ allFiles[flavour] + ' '+ allFiles[k] )
198 os.system('rm '+allFiles[k])
199 f = ROOT.TFile('tmp.root')
200 sTree = f.cbmsim
201 sTree.LoadBaskets(30000000000)
202 if flavour=="charm":
203 outFile = tmp.replace('cXX','withCharm'+k)
204 else:
205 outFile = tmp.replace('XX','andBeauty'+k)
206 fmu = ROOT.TFile(outFile,"recreate")
207 newTree = sTree.CloneTree(0)
208 nMbias = 0
209
210
211 myList = []
212 while nMbias<nEntries[k]:
213 copyEvent = True
214 if Rndm.Rndm() > frac:
215
216 myList.append( nMbias+nEntries[flavour] )
217 nMbias+=1
218 else:
219 if nEntries[flavour]>nCharm:
220
221 myList.append( nCharm )
222 nCharm+=1
223 else: copyEvent = False
224
225
226 nev = len(myList)
227 print("start:",outFile,nev)
228 for iev in range(nev) :
229 rc =sTree.GetEntry(myList[iev])
230 rc = newTree.Fill()
231 if (iev)%100000==0:
232 timer.Stop()
233 print("status:",timer.RealTime(),k,iev)
234 timer.Start()
235 newTree.AutoSave()
236 print("finished one file",outFile,nMbias,nCharm)
237 if flavour=="charm":
238 ff = f.FileHeader.Clone('With Charm Merged Muon Background File')
239 else:
240 ff = f.FileHeader.Clone('With Charm and Beauty Merged Muon Background File')
241 txt = ff.GetTitle()
242 fmu.cd()
243 ff.Write("FileHeader", ROOT.TObject.kSingleKey)
244 fmu.Close()
245 f.Close()
246 rc = os.system("xrdcp "+outFile+" $EOSSHIP/eos/experiment/ship/data/Mbias/background-prod-2018/"+outFile)
247 if rc != 0:
248 print("copy to EOS failed",outFile)
249 else:
250 rc = os.system("rm "+outFile)
251