15 #include <TStopwatch.h>
16 #include <TObjArray.h>
17 #include <TObjString.h>
21 #include <TPaveText.h>
24 #include <AliRunLoader.h>
25 #include <AliHeader.h>
26 #include <AliGenPythiaEventHeader.h>
27 #include <AliJetParticle.h>
28 #include <AliJetParticlesReader.h>
29 #include <AliJetParticlesReaderKine.h>
30 #include <AliJetParticlesReaderKineGoodTPC.h>
31 #include <AliJetParticlesReaderESD.h>
32 #include <AliJetParticlesReaderHLT.h>
33 #include <AliJetEventParticles.h>
37 kITSin=0x0001,kITSout=0x0002,kITSrefit=0x0004,kITSpid=0x0008,
38 kTPCin=0x0010,kTPCout=0x0020,kTPCrefit=0x0040,kTPCpid=0x0080,
39 kTRDin=0x0100,kTRDout=0x0200,kTRDrefit=0x0400,kTRDpid=0x0800,
40 kTOFin=0x1000,kTOFout=0x2000,kTOFrefit=0x4000,kTOFpid=0x8000,
41 kPHOSpid=0x10000, kRICHpid=0x20000, kEMCALpid=0x40000,
51 void createEvents(Char_t *dir, Int_t files,Char_t *sdir=".");
52 void createEvents(Int_t esd, TObjArray *dirs, Float_t ptcut, Char_t *savefile);
53 void createEvents(Int_t esd,Char_t *dir="./input",Float_t ptcut=0.05,Char_t *savefile=0);
54 void createEvents(Int_t esd,Char_t *dirfile,Char_t *dir,Float_t ptcut=0.05,Char_t *savefile=0);
55 void createMixedEvents(Char_t *fname,Char_t *hname,Char_t *savefile=0,Int_t nMaxEvents=-1);
56 void createDirs(Char_t *dir,Int_t files,Char_t *savefile);
57 void testEvents(Char_t *sdir);
58 void readEvents(Char_t *filename,Int_t nMaxEvents=-1);
59 void displayMixedEvents(Char_t *fname,Char_t *hname,Float_t ptcut=2.0,Int_t nMaxEvents=-1);
61 //-----------------------
63 void createEvents(Char_t *dir, Int_t files, Char_t *sdir)
65 createDirs(dir,files,"./dirlist.txt");
66 Char_t filename[1000];
67 sprintf(filename,"%s/aliev-type0.root",sdir);
68 createEvents(0,"./dirlist.txt",dir,0.4,filename);
69 sprintf(filename,"%s/aliev-type1.root",sdir);
70 createEvents(1,"./dirlist.txt",dir,0.4,filename);
71 sprintf(filename,"%s/aliev-type2.root",sdir);
72 createEvents(2,"./dirlist.txt",dir,0.4,filename);
73 sprintf(filename,"%s/aliev-type3.root",sdir);
74 createEvents(3,"./dirlist.txt",dir,0.4,filename);
76 sprintf(filename,"%s/aliev-type4.root",sdir);
77 createEvents(4,"./dirlist.txt",dir,0.4,filename);
79 sprintf(filename,"%s/aliev-type10.root",sdir);
80 createEvents(10,"./dirlist.txt",dir,0.4,filename);
81 sprintf(filename,"%s/aliev-type11.root",sdir);
82 createEvents(11,"./dirlist.txt",dir,0.4,filename);
83 sprintf(filename,"%s/aliev-type12.root",sdir);
84 createEvents(12,"./dirlist.txt",dir,0.4,filename);
87 void createEvents(Int_t esd,Char_t *dirfile,Char_t *dir,
88 Float_t ptcut,Char_t *savefile)
90 TObjArray *dirs=new TObjArray(10000);
92 FILE *c=fopen(dirfile,"r");
95 Int_t saveErrIgLevel=gErrorIgnoreLevel;
96 gErrorIgnoreLevel=kFatal;
99 fscanf(c,"%s\n",adddir);
100 dirs->Add(new TObjString(adddir));
101 //cout << adddir << endl;
103 gErrorIgnoreLevel=saveErrIgLevel;
107 sprintf(buffer,"%s",savefile);
109 sprintf(buffer,"%s/aliev-type%d.root",dir,esd);
111 createEvents(esd,dirs,ptcut,buffer);
114 void createEvents(Int_t esd,Char_t *dir,
115 Float_t ptcut,Char_t *savefile)
117 TObjArray *dirs=new TObjArray(1);
118 dirs->Add(new TObjString(dir));
122 sprintf(buffer,"%s",savefile);
124 sprintf(buffer,"%s/aliev-type%d.root",dir,esd);
126 createEvents(esd,dirs,ptcut,buffer);
129 void createEvents(Int_t esd, TObjArray *dirs, Float_t ptcut, Char_t *savefile)
131 AliJetParticlesReader *reader=0;
134 reader=new AliJetParticlesReaderKine(dirs);
135 //((AliJetParticlesReaderKine*)reader)->SetUseTracks(kTRUE);
136 ((AliJetParticlesReaderKine*)reader)->SetCharged(kTRUE);
137 ((AliJetParticlesReaderKine*)reader)->SetEM(kFALSE);
138 ((AliJetParticlesReaderKine*)reader)->SetNeutral(kFALSE);
142 reader=new AliJetParticlesReaderESD(1,dirs);
143 ((AliJetParticlesReaderESD*)reader)->SetCompareFlag(
144 AliESDtrack::kITSrefit+AliESDtrack::kTPCrefit+AliESDtrack::kTRDrefit);
146 reader=new AliJetParticlesReaderESD(0,dirs);
147 ((AliJetParticlesReaderESD*)reader)->SetCompareFlag(AliESDtrack::kTPCin);
151 reader=new AliJetParticlesReaderHLT(kTRUE,dirs);
152 //((AliJetParticlesReaderHLT*)reader)->SetMinHits(30);
155 reader=new AliJetParticlesReaderHLT(kFALSE,dirs);
158 reader=new AliJetParticlesReaderHLT(kFALSE,dirs,"AliESDits.root");
159 //((AliJetParticlesReaderHLT*)reader)->SetMinHits(4);
161 } else if (esd==10) {
162 reader=new AliJetParticlesReaderKine(dirs);
163 //((AliJetParticlesReaderKine*)reader)->SetUseTracks(kTRUE);
164 ((AliJetParticlesReaderKine*)reader)->SetCharged(kTRUE);
165 ((AliJetParticlesReaderKine*)reader)->SetEM(kTRUE);
166 ((AliJetParticlesReaderKine*)reader)->SetNeutral(kTRUE);
168 } else if (esd==11) {
169 reader=new AliJetParticlesReaderKine(dirs);
170 //((AliJetParticlesReaderKine*)reader)->SetUseTracks(kTRUE);
171 ((AliJetParticlesReaderKine*)reader)->SetCharged(kTRUE);
172 ((AliJetParticlesReaderKine*)reader)->SetEM(kTRUE);
173 ((AliJetParticlesReaderKine*)reader)->SetNeutral(kFALSE);
175 } else if (esd==12) {
176 reader=new AliJetParticlesReaderKineGoodTPC(dirs);
179 cout << "Parameter settings: " << endl;
180 cout << "0 == Kine (ch)" << endl;
181 cout << "1 == TPC" << endl;
182 cout << "2 == Conformal" << endl;
183 cout << "3 == Hough" << endl;
184 cout << "4 == ITSHough" << endl;
185 cout << "10 == Kine (all)" << endl;
186 cout << "11 == Kine (ch+em)" << endl;
187 cout << "12 == Kine (good tpc)" << endl;
190 //reader->ReadEventsFromTo(1,0);
191 reader->SetPtCut(ptcut,100);
192 reader->SetEtaCut(-0.9,0.9);
197 TFile* file = new TFile(savefile,"RECREATE");
198 TTree* tree = new TTree("AJEPtree","AliJetEventParticles Tree");
199 reader->SetTree(tree);
201 while(reader->Next())
203 AliJetEventParticles *ev=new AliJetEventParticles(*reader->GetEventParticles());
204 if(gErrorIgnoreLevel<=kWarning){
205 cout << "Read event: " << ++counter << endl;
216 void createDirs(Char_t *dir,Int_t files,Char_t *savefile)
220 sprintf(buffer,"%s",savefile);
222 sprintf(buffer,"%s/dirinput.txt",dir);
224 FILE *c=fopen(buffer,"w");
227 Int_t saveErrIgLevel=gErrorIgnoreLevel;
228 gErrorIgnoreLevel=kFatal;
229 for(Int_t i=0;i<files;i++){
231 //sprintf(adddir,"%s/%05d",dir,i);
232 sprintf(adddir,"%s/%d",dir,i);
234 sprintf(fname,"%s/galice.root",adddir);
236 if(!f.IsOpen()) continue;
237 //cout << f.GetErrno() << endl;
239 AliRunLoader *r = AliRunLoader::Open(fname);
241 if(r->GetNumberOfEvents() <= 0){
245 if(r->LoadKinematics()){
250 sprintf(fname,"%s/AliESDs.root",adddir);
252 if(!g.IsOpen()) continue;
254 TTree *tree = dynamic_cast<TTree*>(g.Get("esdTree"));
255 if(!tree || tree->GetEntries()<=0){
261 sprintf(fname,"%s/AliESDits.root",adddir);
263 if(!h.IsOpen()) continue;
265 tree = dynamic_cast<TTree*>(h.Get("esdTree"));
266 if(!tree || tree->GetEntries()<=0){
273 cout << "Added " << adddir << endl;
274 fprintf(c,"%s\n",adddir);
276 gErrorIgnoreLevel=saveErrIgLevel;
280 void createMixedEvents(Char_t *fname,Char_t *hname,Char_t *savefile,Int_t nMaxEvents)
283 TChain *theTree = new TChain("AJEPtree");
285 AliJetEventParticles *ev=new AliJetEventParticles();
286 theTree->SetBranchAddress("particles",&ev);
288 Int_t treeentries=(Int_t)theTree->GetEntries();
289 if((nMaxEvents<0) || (nMaxEvents>treeentries))
290 nMaxEvents=treeentries;
291 //cout << "Found " << nMaxEvents << " in " << fname << endl;
293 TChain *backtheTree = new TChain("AJEPtree");
294 backtheTree->Add(hname);
295 AliJetEventParticles *backev=new AliJetEventParticles();
296 backtheTree->SetBranchAddress("particles",&backev);
298 Int_t backtreeentries=(Int_t)backtheTree->GetEntries();
299 Int_t nPerBackground=nMaxEvents/backtreeentries;
300 if(nPerBackground==0) nPerBackground=1;
304 sprintf(buffer,"%s",savefile);
306 sprintf(buffer,"./aliev-mixed.root");
307 TFile* file = new TFile(buffer,"RECREATE");
308 TTree* tree = new TTree("AJEPtree","AliJetEventParticles Tree");
309 AliJetEventParticles *mixedev=new AliJetEventParticles(0);
310 tree->Branch("particles","AliJetEventParticles",&mixedev,32000,1);
312 //=========================================================================
313 // start the event loop
314 //=========================================================================
316 Int_t nEventHijing = -1;
317 Int_t nEventHijingCounter = nPerBackground;
318 while(nEvent<nMaxEvents){
321 theTree->GetEvent(nEvent);
323 //load background if needed
324 if(nEventHijingCounter==nPerBackground){
327 backtheTree->GetEvent(nEventHijing);
328 if(nEventHijing==backtreeentries) nEventHijing=0;
329 nEventHijingCounter=0;
332 backev->AddSignal(*ev);
333 TString dummy="Counter: ";
336 //dummy+=ev->GetHeader();
337 dummy+="(Pythia ";dummy+=nEvent;
339 //dummy+=backev->GetHeader();
340 dummy+=", Hijing ";dummy+=nEventHijing;
342 mixedev->Set(*backev);
343 mixedev->SetHeader(dummy);
344 if(gErrorIgnoreLevel<=kWarning){
345 cout << "Read event: " << nEvent << " " << nEventHijing << endl;
352 nEventHijingCounter++;
366 void testEvents(Char_t *sdir)
368 Char_t filename[1000];
369 sprintf(filename,"%s/aliev-type0.root",sdir);
370 readEvents(filename,0);
371 sprintf(filename,"%s/aliev-type1.root",sdir);
372 readEvents(filename,0);
373 sprintf(filename,"%s/aliev-type2.root",sdir);
374 readEvents(filename,0);
375 sprintf(filename,"%s/aliev-type3.root",sdir);
376 readEvents(filename,0);
377 sprintf(filename,"%s/aliev-type10.root",sdir);
378 readEvents(filename,0);
379 sprintf(filename,"%s/aliev-type11.root",sdir);
380 readEvents(filename,0);
381 sprintf(filename,"%s/aliev-type12.root",sdir);
384 void readEvents(Char_t *filename,Int_t nMaxEvents)
387 TChain *theTree = new TChain("AJEPtree");
388 theTree->Add(filename);
389 AliJetEventParticles *ev=new AliJetEventParticles();
390 theTree->SetBranchAddress("particles",&ev);
392 Int_t treeentries=(Int_t)theTree->GetEntries();
393 if((nMaxEvents<0) || (nMaxEvents>treeentries))
394 nMaxEvents=treeentries;
396 cout << "Found " << treeentries << ", but use " << nMaxEvents << " in " << filename << endl;
398 //=========================================================================
399 // start the event loop
400 //=========================================================================
402 while(nEvent<nMaxEvents){
403 if ((nEvent % 100) == 0) {
404 cout << "Reading event " << nEvent << endl;
408 theTree->GetEvent(nEvent);
412 const TClonesArray *p=ev->GetParticles();
413 for(Int_t i=0;i<p->GetEntriesFast();i++) {
415 ((AliJetParticle*)p->At(i))->Print();
426 void displayMixedEvents(Char_t *fname,Char_t *hname,Float_t ptcut,Int_t nMaxEvents)
429 TChain *theTree = new TChain("AJEPtree");
431 AliJetEventParticles *ev=new AliJetEventParticles();
432 theTree->SetBranchAddress("particles",&ev);
434 Int_t treeentries=(Int_t)theTree->GetEntries();
435 if((nMaxEvents<0) || (nMaxEvents>treeentries))
436 nMaxEvents=treeentries;
437 //cout << "Found " << nMaxEvents << " in " << fname << endl;
439 TChain *backtheTree = new TChain("AJEPtree");
440 backtheTree->Add(hname);
441 AliJetEventParticles *backev=new AliJetEventParticles();
442 backtheTree->SetBranchAddress("particles",&backev);
444 Int_t backtreeentries=(Int_t)backtheTree->GetEntries();
445 Int_t nPerBackground=nMaxEvents/backtreeentries;
446 if(nPerBackground==0) nPerBackground=1;
448 AliJetEventParticles *mixedev=new AliJetEventParticles(0);
453 TCanvas *c1=new TCanvas("c1","",1000,500);
456 gStyle->SetLabelSize(0.03,"XYZ");
457 gStyle->SetTitleOffset(1.0,"XYZ");
458 gStyle->SetTitleOffset(1.3,"Y");
461 TH2F *h2pp=new TH2F("h2pp","E_{T}^{ch} in PP [GeV];#phi;#eta",nphi,0,TMath::TwoPi(),neta,-1,1);
463 TH2F *h2pb=new TH2F("h2pb","E_{T}^{ch} in PbPb [GeV];#phi;#eta;",nphi,0,TMath::TwoPi(),neta,-1,1);
466 //=========================================================================
467 // start the event loop
468 //=========================================================================
470 Int_t nEventHijing = -1;
471 Int_t nEventHijingCounter = nPerBackground;
472 while(nEvent<nMaxEvents){
475 theTree->GetEvent(nEvent);
477 //load background if needed
478 if(nEventHijingCounter==nPerBackground){
481 backtheTree->GetEvent(nEventHijing);
482 if(nEventHijing==backtreeentries) nEventHijing=0;
483 nEventHijingCounter=0;
485 backev->AddSignal(*ev);
486 TString dummy="Counter: ";
489 //dummy+=ev->GetHeader();
490 dummy+="(Pythia ";dummy+=nEvent;
492 //dummy+=backev->GetHeader();
493 dummy+=", Hijing ";dummy+=nEventHijing;
495 mixedev->Set(*backev);
496 mixedev->SetHeader(dummy);
497 if(gErrorIgnoreLevel<=kWarning){
498 cout << "Read event: " << nEvent << " " << nEventHijing << endl;
502 // loop over all particles...
505 AliJetParticle *aliparticle = NULL;
506 TIterator *iter = ev->GetParticles()->MakeIterator();
507 while ((aliparticle = (AliJetParticle *) iter->Next()) != NULL) {
508 Float_t pt=aliparticle->Pt();
509 if(pt<ptcut) continue;
510 h2pp->Fill(aliparticle->Phi(),aliparticle->Eta(),pt);
516 iter = mixedev->GetParticles()->MakeIterator();
517 while ((aliparticle = (AliJetParticle *) iter->Next()) != NULL) {
518 Float_t pt=aliparticle->Pt();
519 if(pt<ptcut) continue;
520 h2pb->Fill(aliparticle->Phi(),aliparticle->Eta(),pt);
528 Char_t sfilenamehist[1024];
529 sprintf(sfilenamehist,"./display-planehists-%d-%d.eps",nEvent,nEventHijingCounter);
530 c1->SaveAs(sfilenamehist);
532 else if(c=='q') break;
535 nEventHijingCounter++;