8 #include "AliAnalysisTask.h"
9 #include "AliInputEventHandler.h"
10 #include "AliESDtrack.h"
11 #include "AliAODVertex.h"
12 #include "AliAODCluster.h"
17 #include <TInterpreter.h>
26 #include <TLorentzVector.h>
27 #include <TClonesArray.h>
28 #include <TRefArray.h>
30 #include "TDatabasePDG.h"
31 #include "AliAnalysisManager.h"
32 #include "AliJetFinder.h"
33 #include "AliJetHeader.h"
34 #include "AliJetReader.h"
35 #include "AliJetReaderHeader.h"
36 #include "AliUA1JetHeaderV1.h"
37 #include "AliSISConeJetHeader.h"
38 #include "AliESDEvent.h"
39 #include "AliAODEvent.h"
40 #include "AliAODHandler.h"
41 #include "AliAODInputHandler.h"
42 #include "AliAODTrack.h"
43 #include "AliVParticle.h"
44 #include "AliAODJet.h"
45 #include "AliAODJetEventBackground.h"
46 #include "AliMCParticle.h"
47 #include "AliAODMCParticle.h"
48 #include "AliMCEventHandler.h"
49 #include "AliMCEvent.h"
52 #include "AliAODHeader.h"
53 #include "AliAODMCHeader.h"
54 #include "AliJetKineReaderHeader.h"
55 #include "AliGenCocktailEventHeader.h"
56 #include "AliInputEventHandler.h"
57 #include "AliGenEventHeader.h"
58 #include "AliGenDPMjetEventHeader.h"
62 #include "AliAnalysisTaskCheckSingleTrackJetRejection.h"
63 #include "AliAnalysisTaskPhiCorrelations.h"
64 #include "AliAnalysisHelperJetTasks.h"
65 #include "AliPWG4HighPtQAMC.h"
72 ClassImp(AliAnalysisTaskCheckSingleTrackJetRejection)
74 //________________________________________________________________________
75 AliAnalysisTaskCheckSingleTrackJetRejection::AliAnalysisTaskCheckSingleTrackJetRejection():
94 fJetRecEtaWindow(0.5),
100 fH2jetMCAKT04_Jetpt_maxpt(0x0),
101 fH2jetAKT04_Jetpt_maxpt (0x0)
104 for(int j=0;j<6;j++){
105 fH1jetMCAKT04_pt [j]=0;
106 fH1jetAKT04_pt [j]=0;
108 fH2jetMCAKT04_Eratio [j]=0;
109 fH1jetMCAKT04_ptmatch [j]=0;
112 // Default constructor
115 //________________________________________________________________________
116 AliAnalysisTaskCheckSingleTrackJetRejection::AliAnalysisTaskCheckSingleTrackJetRejection(const char *name):
117 AliAnalysisTaskSE(name),
118 fUseAODInput(kFALSE),
135 fJetRecEtaWindow(0.5),
140 fH2jetMCAKT04_Jetpt_maxpt(0x0),
141 fH2jetAKT04_Jetpt_maxpt (0x0)
145 for(int j=0;j<6;j++){
146 fH1jetMCAKT04_pt [j]=0;
147 fH1jetAKT04_pt [j]=0;
149 fH2jetMCAKT04_Eratio [j]=0;
150 fH1jetMCAKT04_ptmatch [j]=0;
154 // Define input and output slots here
155 // Input slot #0 works with a TChain
156 DefineInput(0, TChain::Class());
157 // Output slot #0 id reserved by the base class for AOD
158 // Output slot #1 writes into a TH1 container
159 DefineOutput(1, TList::Class());
163 //________________________________________________________________________
164 void AliAnalysisTaskCheckSingleTrackJetRejection::UserCreateOutputObjects()
169 if (!fHistList){ fHistList = new TList();fHistList->SetOwner(kTRUE); cout<<"TList is created for output "<<endl;}
171 Bool_t oldStatus = TH1::AddDirectoryStatus();
172 TH1::AddDirectory(kFALSE);
176 fH1Xsec = new TProfile("Xsec","Xsec",1,0,1);
177 fH1Trials = new TH1F ("Trials","Trials",1,0,1);
178 histname = Form("fH2jetMCAKT04_Jetpt_maxpt");
179 fH2jetMCAKT04_Jetpt_maxpt = new TH2F(histname,histname,400,0,400,400,0,400);
180 histname = Form("fH2jetAKT04_Jetpt_maxpt");
181 fH2jetAKT04_Jetpt_maxpt = new TH2F(histname,histname,400,0,400,400,0,400);
182 for(int j=0;j<6;j++){
183 histname = Form("fH1jetMCAKT04_pt%d",j);
184 fH1jetMCAKT04_pt[j] = new TH1F(histname,histname,200,0,200);
185 histname = Form("fH1jetAKT04_pt%d",j);
186 fH1jetAKT04_pt[j] = new TH1F(histname,histname,200,0,200);
188 histname = Form("fH2jetMCAKT04_Eratio%d",j);
189 fH2jetMCAKT04_Eratio[j] = new TH2F(histname,histname,200,0,200,100,0,30);
190 histname = Form("fH1jetMCAKT04_ptmatch%d",j);
191 fH1jetMCAKT04_ptmatch[j] = new TH1F(histname,histname,200,0,200);
193 fHistList->Add(fH1Xsec);
194 fHistList->Add(fH1Trials);
195 fHistList->Add(fH2jetMCAKT04_Jetpt_maxpt);
196 fHistList->Add(fH2jetAKT04_Jetpt_maxpt);
197 for(int j=0;j<6;j++){
198 fHistList->Add(fH1jetAKT04_pt[j]);
199 fHistList->Add(fH1jetMCAKT04_pt[j]);
200 fHistList->Add(fH2jetMCAKT04_Eratio[j]);
201 fHistList->Add(fH1jetMCAKT04_ptmatch[j]);
205 fH1Events = new TH1F("Events","Number of Events",1,0,1);
206 histname = Form("fH2jetAKT04_Jetpt_maxpt");
207 fH2jetAKT04_Jetpt_maxpt = new TH2F(histname,histname,400,0,400,400,0,400);
208 for(int j=0;j<6;j++){
209 histname = Form("fH1jetAKT04_pt%d",j);
210 fH1jetAKT04_pt[j] = new TH1F(histname,histname,200,0,200);
212 fHistList->Add(fH1Events);
213 fHistList->Add(fH2jetAKT04_Jetpt_maxpt);
214 for(int j=0;j<6;j++){
215 fHistList->Add(fH1jetAKT04_pt[j]);
220 // =========== Switch on Sumw2 for all histos ===========
221 for (Int_t i=0; i<fHistList->GetEntries(); ++i)
223 TH1 *h1 = dynamic_cast<TH1*>(fHistList->At(i));
229 THnSparse *hn = dynamic_cast<THnSparse*>(fHistList->At(i));
232 TH1::AddDirectory(oldStatus);
235 PostData(1,fHistList);
239 //----------------------------------------------------------------------
240 void AliAnalysisTaskCheckSingleTrackJetRejection::Init()
243 if (fDebug) printf("AnalysisTaskCheckSingleTrackJetRejection::Init() \n");
247 Bool_t AliAnalysisTaskCheckSingleTrackJetRejection::Notify()
249 fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
250 fAODOut = AODEvent();
251 if(fNonStdFile.Length()!=0){
252 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
253 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
255 if(fDebug>1)Printf("AODExtension found for %s ",fNonStdFile.Data());
259 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
264 TFile *curfile = tree->GetCurrentFile();
266 Error("Notify","No current file");
271 PythiaInfoFromFile(curfile->GetName(),fxsec,ftrial);
272 //cout<<" Xsec "<<fxsec<<" trial "<<ftrial<<endl;
273 fH1Xsec ->Fill(0.,fxsec);
274 fH1Trials->Fill(0.,ftrial);
277 //Float_t totalEvent;
278 //totalEvent = GetTotalEvents(curfile->GetName());
279 //fH1Events->Fill(0.,totalEvent);
284 printf("Reading File %s ",fInputHandler->GetTree()->GetCurrentFile()->GetName());
288 void AliAnalysisTaskCheckSingleTrackJetRejection::FinishTaskOutput()
294 //________________________________________________________________________
295 void AliAnalysisTaskCheckSingleTrackJetRejection::UserExec(Option_t *)
299 // Main loop (called each event)
300 // Execute analysis for current event
303 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
304 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
305 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
306 if(fUseAODInput) fAODIn = fAOD;
307 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
310 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
311 if( handler && handler->InheritsFrom("AliAODHandler") ) {
312 fAOD = ((AliAODHandler*)handler)->GetAOD();
314 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
318 if(!fAODIn && !fUseAODInput){ // case we have AOD in input & output and want jets from output
319 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
320 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
321 fAODIn = ((AliAODHandler*)outHandler)->GetAOD();
322 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
326 //if(fNonStdFile.Length()!=0){
327 // // case we have an AOD extension - fetch the jets from the extended output
328 // AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
329 // fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
330 // if(!fAODExtension){
331 // if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
334 //fAODIn = dynamic_cast<AliAODEvent*>(InputEvent());
336 Printf("ERROR %s : fAODIn not available",(char*)__FILE__);
340 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
341 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
342 if(!(inputHandler->IsEventSelected() & AliVEvent::kMB)){
343 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
346 if(!IsMC)fH1Events->Fill(0);
350 // start jet analysis
353 Double_t Jet_pt [20][10000];
354 Double_t Jet_eta[20][10000];
355 Double_t Jet_phi[20][10000];
357 for(int i=0;i<20;i++){
359 for(int j=0;j<10000;j++){
366 // get AOD event from input/ouput
368 cAdd += Form("%02d_",(int)((Radius+0.01)*10.));
369 cAdd += Form("B%d",(int)BackM);
370 cAdd += Form("_Filter%05d",Filtermask);
371 cAdd += Form("_Cut%05d",(int)(1000.*TrackPtcut));
372 cAdd += Form("_Skip%02d",SkipCone);
373 TString Branchname_gen,Branchname_rec;
374 //Branchname_gen = Form("clustersMCKINE2_%s%s",JFAlg.Data(),cAdd.Data());
375 Branchname_gen = Form("clustersAODMC2_%s%s",JFAlg.Data(),cAdd.Data());
376 Branchname_rec = Form("clustersAOD_%s%s",JFAlg.Data(),cAdd.Data());
380 double maxpt[2][1000];for(int i=0;i<1000;i++){maxpt[0][i]=0;maxpt[1][i]=0;}
381 int nearrecID[1000]; for(int i=0;i<1000;i++){nearrecID[i]=99999;}
383 for(int algorithm=0;algorithm<2;algorithm++){
384 //for LHC11a1 LHC11a2 official
385 if((!IsMC&&algorithm==0))continue;
387 if(algorithm==0)fJetBranch = Branchname_gen.Data();
388 if(algorithm==1)fJetBranch = Branchname_rec.Data();
390 TClonesArray* jets = dynamic_cast <TClonesArray*> (fAODIn->FindListObject(fJetBranch.Data()));
392 printf(" Tere are no Branch named %s \n",fJetBranch.Data());
395 Int_t nj = jets->GetEntriesFast();
396 if (fDebug) printf("There are %5d jets in the event \n", nj);
399 Jet_n[algorithm] = nj;
400 for(int njet =0;njet<nj;njet++){
401 jetsAOD = (AliAODJet*) (jets->At(njet));
402 Jet_pt [algorithm][njet] = jetsAOD->Pt();
403 Jet_phi [algorithm][njet] = jetsAOD->Phi();
404 Jet_eta [algorithm][njet] = jetsAOD->Eta();
405 double eta_cut_Jet=0.5;
406 TRefArray *reftracks = jetsAOD->GetRefTracks();
407 int ntracks=reftracks->GetEntriesFast();
408 if(TMath::Abs(Jet_eta[algorithm][njet])<eta_cut_Jet){
409 //------------calc max pt in Jet----------------
411 double sumtrackpt=0;//test
412 for(int ntr=0;ntr<ntracks;ntr++){// calc. max pt of track which is in Jet
413 AliAODTrack *AODtrack = dynamic_cast<AliAODTrack*>(reftracks->At(ntr));
417 if(AODtrack->TestFilterMask(Filtermask))bgoodT=true;
420 if(AODtrack->IsHybridGlobalConstrainedGlobal())bgoodT=true; //for hybrid Track cuts
423 trackpt = AODtrack->Pt();
424 sumtrackpt += trackpt;
425 if(trackpt>maxpt[algorithm][njet]){
426 maxpt[algorithm][njet] = trackpt;
432 fH1jetMCAKT04_pt[0]->Fill(Jet_pt[algorithm][njet]);
433 if(maxpt[algorithm][njet]<40)fH1jetMCAKT04_pt[1]->Fill(Jet_pt[algorithm][njet]);
434 if(ntracks>1) fH1jetMCAKT04_pt[2]->Fill(Jet_pt[algorithm][njet]);
435 if(ntracks>2) fH1jetMCAKT04_pt[3]->Fill(Jet_pt[algorithm][njet]);
436 if(ntracks>3) fH1jetMCAKT04_pt[4]->Fill(Jet_pt[algorithm][njet]);
437 if((maxpt[algorithm][njet]<40)&&(ntracks>1))fH1jetMCAKT04_pt[5]->Fill(Jet_pt[algorithm][njet]);
438 fH2jetMCAKT04_Jetpt_maxpt->Fill(maxpt[algorithm][njet],Jet_pt[algorithm][njet]);
441 fH1jetAKT04_pt[0]->Fill(Jet_pt[algorithm][njet]);
442 if(maxpt[algorithm][njet]<40)fH1jetAKT04_pt[1]->Fill(Jet_pt[algorithm][njet]);
443 if(ntracks>1) fH1jetAKT04_pt[2]->Fill(Jet_pt[algorithm][njet]);
444 if(ntracks>2) fH1jetAKT04_pt[3]->Fill(Jet_pt[algorithm][njet]);
445 if(ntracks>3) fH1jetAKT04_pt[4]->Fill(Jet_pt[algorithm][njet]);
446 if((maxpt[algorithm][njet]<40)&&(ntracks>1))fH1jetAKT04_pt[5]->Fill(Jet_pt[algorithm][njet]);
447 fH2jetAKT04_Jetpt_maxpt->Fill(maxpt[algorithm][njet],Jet_pt[algorithm][njet]);
451 if(!(IsMC&&algorithm==1))continue;
452 for(int njetMC =0;njetMC<Jet_n[0];njetMC++){
453 double eta_cut_Jet=0.5;
454 if(TMath::Abs(Jet_eta[0][njetMC])<eta_cut_Jet){
455 //Find muched jet pare=====================================
456 for(int cut=0;cut<6;cut++){
458 for(int njetAOD=0;njetAOD<Jet_n[1];njetAOD++){
459 jets = dynamic_cast <TClonesArray*> (fAODIn->FindListObject(fJetBranch.Data()));
461 jetsAOD = (AliAODJet*) (jets->At(njetAOD));
462 TRefArray *reftracks = jetsAOD->GetRefTracks();
463 int ntracks=reftracks->GetEntriesFast();
464 if(cut==1){if(maxpt[1][njetAOD]>=40.)continue;}
465 if(cut==2){if(ntracks==1)continue;}
466 if(cut==3){if(ntracks<=2)continue;}
467 if(cut==4){if(ntracks<=3)continue;}
468 if(cut==5){if(maxpt[1][njetAOD]>=40.)continue;if(ntracks==1)continue;}
469 double DelR = DeltaR(Jet_phi[0][njetMC],Jet_phi[1][njetAOD],Jet_eta[0][njetMC],Jet_eta[1][njetAOD]);
471 nearrecID[njetMC]=njetAOD;
478 for(int njet =0;njet<Jet_n[0];njet++){
479 double DelR = DeltaR(Jet_phi[0][njet],Jet_phi[1][nearrecID[njetMC]],Jet_eta[0][njet],Jet_eta[1][nearrecID[njetMC]]);
485 if((min_R<0.4)&&(neargenID==njetMC))fFIND[cut][njetMC]=true;
488 //======================================================
493 for(int njetMC =0;njetMC<Jet_n[0];njetMC++){
494 double eta_cut_Jet=0.5;
495 if(TMath::Abs(Jet_eta[0][njetMC])<eta_cut_Jet){
496 for(int cut=0;cut<6;cut++){
497 if(fFIND[cut][njetMC]==true){
498 fH1jetMCAKT04_ptmatch[cut]->Fill(Jet_pt[0][njetMC]);
499 fH2jetMCAKT04_Eratio[cut]->Fill(Jet_pt[0][njetMC],Jet_pt[1][nearrecID[njetMC]]/Jet_pt[0][njetMC]);
506 // End of jet analysis ---------
508 PostData(1, fHistList);
512 //________________________________________________________________________
513 void AliAnalysisTaskCheckSingleTrackJetRejection::Terminate(Option_t *)
515 // Terminate analysis
517 if (fDebug) printf("AnalysisTaskPt: Terminate() \n");
522 Bool_t AliAnalysisTaskCheckSingleTrackJetRejection::JetSelected(AliAODJet *jet){
523 Bool_t selected = false;
525 if(!jet)return selected;
527 if(fabs(jet->Eta())<fJetRecEtaWindow&&jet->Pt()>fMinJetPt){
535 Double_t AliAnalysisTaskCheckSingleTrackJetRejection::DeltaPhi(Double_t phi1,Double_t phi2){
536 Float_t pi=TMath::Pi();
537 Double_t dphi = phi1-phi2;
538 if (dphi<(-1./2*pi))dphi = dphi +2*pi;
539 else if(dphi>( 3./2*pi))dphi = dphi -2*pi;
542 Double_t AliAnalysisTaskCheckSingleTrackJetRejection::DeltaR(Double_t phi1,Double_t phi2,Double_t eta1,Double_t eta2){
543 Float_t pi=TMath::Pi();
544 Double_t dphi = DeltaPhi(phi1,phi2);
545 if (dphi<(-1./2*pi))dphi = dphi +2*pi;
546 else if(dphi>( 3./2*pi))dphi = dphi -2*pi;
547 Double_t Deta = eta1 - eta2;
548 Double_t deltaR = sqrt(pow(dphi,2)+pow(Deta,2));
552 Bool_t AliAnalysisTaskCheckSingleTrackJetRejection::PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials){
554 // get the cross section and the trails either from pyxsec.root or from pysec_hists.root
555 // This is to called in Notify and should provide the path to the AOD/ESD file
556 // Copied from AliAnalysisTaskJetSpectrum2
559 TString file(currFile);
563 if(file.Contains("root_archive.zip#")){
564 Ssiz_t pos1 = file.Index("root_archive",12,TString::kExact);
565 Ssiz_t pos = file.Index("#",1,pos1,TString::kExact);
566 file.Replace(pos+1,20,"");
569 // not an archive take the basename....
570 file.ReplaceAll(gSystem->BaseName(file.Data()),"");
572 // Printf("%s",file.Data());
575 TFile *filexsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec.root")); // problem that we cannot really
576 //test the existance of a file in a archive so we have to lvie with open error message from root
578 // next trial fetch the histgram file
579 filexsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec_hists.root"));
581 // not a severe condition but inciate that we have no information
585 // find the tlist we want to be independtent of the name so use the Tkey
586 TKey* key = (TKey*)filexsec->GetListOfKeys()->At(0);
591 TList *list = dynamic_cast<TList*>(key->ReadObj());
596 fXsec = ((TProfile*)list->FindObject("h1Xsec"))->GetBinContent(1);
597 fTrials = ((TH1F*)list->FindObject("h1Trials"))->GetBinContent(1);
600 } // no tree pyxsec.root
602 TTree *xtree = (TTree*)filexsec->Get("Xsection");
608 Double_t xsection = 0;
609 xtree->SetBranchAddress("xsection",&xsection);
610 xtree->SetBranchAddress("ntrials",&ntrials);
620 //Float_t AliAnalysisTaskCheckSingleTrackJetRejection::GetTotalEvents(const char* currFile){
621 // Float_t totalevent;
622 // TString file_es(currFile);
623 // if(file_es.Contains("root_archive.zip#")){
624 // Ssiz_t pos1 = file_es.Index("root_archive",12,TString::kExact);
625 // Ssiz_t pos = file_es.Index("#",1,pos1,TString::kExact);
626 // file_es.Replace(pos+1,20,"");
629 // // not an archive take the basename....
630 // file_es.ReplaceAll(gSystem->BaseName(file_es.Data()),"");
633 // TString cAdd = "";
634 // cAdd += Form("%02d_",(int)((Radius+0.01)*10.));
635 // cAdd += Form("B%d",(int)BackM);
636 // cAdd += Form("_Filter%05d",Filtermask);
637 // cAdd += Form("_Cut%05d",(int)(1000.*TrackPtcut));
638 // cAdd += Form("_Skip%02d",SkipCone);
639 // TString Dirname,Listname;
640 // Dirname = Form("PWG4_cluster_AOD__%s%s",JFAlg.Data(),cAdd.Data());
641 // Listname = Form("pwg4cluster_AOD__%s%s",JFAlg.Data(),cAdd.Data());
643 // TFile *feventstat = TFile::Open(Form("%s%s",file_es.Data(),"JetTasksOutput.root"));
644 // gROOT->Cd(Dirname.Data());
645 // TList *templist = (TList*)gROOT->FindObject(Listname.Data());
646 // TH1F* temphist = (TH1F*)templist->FindObject("fh1Trials");
647 // totalevent = temphist->Integral();
648 // //cout<<temphist->Integral()<<endl;
649 // delete feventstat;
650 // return totalevent;