]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CORRFW/test/AliCFSingleTrackTask.cxx
corrected bad default constructor (A. Gheata)
[u/mrichter/AliRoot.git] / CORRFW / test / AliCFSingleTrackTask.cxx
index d42c0800b747063f834080d657c8c0524ab7be24..5bcff8c25a97842420cfeb44b8e41882e0e49bc9 100644 (file)
@@ -14,7 +14,7 @@
  **************************************************************************/
 
 //-----------------------------------------------------------------------
-// Example of task running on AliEn (CAF?)
+// Example of task (running locally, on AliEn and CAF),
 // which provides standard way of calculating acceptance and efficiency
 // between different steps of the procedure.
 // The ouptut of the task is a AliCFContainer from which the efficiencies
 
 #ifndef ALICFSINGLETRACKTASK_CXX
 #define ALICFSINGLETRACKTASK_CXX
-#include <TROOT.h>
-#include <TInterpreter.h>
 
 #include "AliCFSingleTrackTask.h"
 #include "TCanvas.h"
 #include "AliStack.h"
 #include "TParticle.h"
 #include "TH1I.h"
-#include "TChain.h"
-#include "AliMCEventHandler.h"
 #include "AliMCEvent.h"
 #include "AliAnalysisManager.h"
 #include "AliESDEvent.h"
+#include "AliAODEvent.h"
 #include "AliCFManager.h"
 #include "AliCFCutBase.h"
 #include "AliCFContainer.h"
 #include "TChain.h"
 #include "AliESDtrack.h"
 #include "AliLog.h"
+
 ClassImp(AliCFSingleTrackTask)
+
 //__________________________________________________________________________
 AliCFSingleTrackTask::AliCFSingleTrackTask() :
-  fChain(0x0),
-  fESD(0x0),
+  fReadTPCTracks(0),
+  fReadAODData(0),
   fCFManager(0x0),
   fQAHistList(0x0),
   fHistEventsProcessed(0x0)
 {
-//Defual ctor
+  //
+  //Default ctor
+  //
 }
 //___________________________________________________________________________
 AliCFSingleTrackTask::AliCFSingleTrackTask(const Char_t* name) :
-  AliAnalysisTask(name,"AliCFSingleTrackTask"),
-  fChain(0x0),
-  fESD(0x0),
+  AliAnalysisTaskSE(name),
+  fReadTPCTracks(0),
+  fReadAODData(0),
   fCFManager(0x0),
   fQAHistList(0x0),
   fHistEventsProcessed(0x0)
@@ -69,10 +70,14 @@ AliCFSingleTrackTask::AliCFSingleTrackTask(const Char_t* name) :
   // Constructor. Initialization of Inputs and Outputs
   //
   Info("AliCFSingleTrackTask","Calling Constructor");
-  DefineInput (0,TChain::Class());
-  DefineOutput(0,TH1I::Class());
-  DefineOutput(1,AliCFContainer::Class());
-  DefineOutput(2,TList::Class());
+
+  /*
+    DefineInput(0) and DefineOutput(0)
+    are taken care of by AliAnalysisTaskSE constructor
+  */
+  DefineOutput(1,TH1I::Class());
+  DefineOutput(2,AliCFContainer::Class());
+  DefineOutput(3,TList::Class());
 }
 
 //___________________________________________________________________________
@@ -82,9 +87,9 @@ AliCFSingleTrackTask& AliCFSingleTrackTask::operator=(const AliCFSingleTrackTask
   // Assignment operator
   //
   if (this!=&c) {
-    AliAnalysisTask::operator=(c) ;
-    fChain      = c.fChain;
-    fESD        = c.fESD;
+    AliAnalysisTaskSE::operator=(c) ;
+    fReadTPCTracks = c.fReadTPCTracks ;
+    fReadAODData = c.fReadAODData ;
     fCFManager  = c.fCFManager;
     fQAHistList = c.fQAHistList ;
     fHistEventsProcessed = c.fHistEventsProcessed;
@@ -94,9 +99,9 @@ AliCFSingleTrackTask& AliCFSingleTrackTask::operator=(const AliCFSingleTrackTask
 
 //___________________________________________________________________________
 AliCFSingleTrackTask::AliCFSingleTrackTask(const AliCFSingleTrackTask& c) :
-  AliAnalysisTask(c),
-  fChain(c.fChain),
-  fESD(c.fESD),
+  AliAnalysisTaskSE(c),
+  fReadTPCTracks(c.fReadTPCTracks),
+  fReadAODData(c.fReadAODData),
   fCFManager(c.fCFManager),
   fQAHistList(c.fQAHistList),
   fHistEventsProcessed(c.fHistEventsProcessed)
@@ -112,48 +117,38 @@ AliCFSingleTrackTask::~AliCFSingleTrackTask() {
   //destructor
   //
   Info("~AliCFSingleTrackTask","Calling Destructor");
-  if (fChain)               delete fChain ;
-  if (fESD)                 delete fESD ;
   if (fCFManager)           delete fCFManager ;
   if (fHistEventsProcessed) delete fHistEventsProcessed ;
   if (fQAHistList) {fQAHistList->Clear(); delete fQAHistList;}
 }
 
-//___________________________________________________________________________
-
-void AliCFSingleTrackTask::Init()
-{
-
-}
 //_________________________________________________
-void AliCFSingleTrackTask::Exec(Option_t *)
+void AliCFSingleTrackTask::UserExec(Option_t *)
 {
   //
   // Main loop function
   //
-  Info("Exec","") ;
-  // Get the mc truth
-  AliMCEventHandler* mcTruth = (AliMCEventHandler*)((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
-
-  if (!mcTruth) Error("Exec","NO MC INFO FOUND... EXITING\n");
-
-  // transform possible old AliESD into AliESDEvent
+  Info("UserExec","") ;
 
-  if (fESD->GetAliESDOld()) fESD->CopyFromOldESD(); //transition to new ESD format
+  AliVEvent*    fEvent = fInputEvent ;
+  AliVParticle* track ;
+  
+  if (!fEvent) {
+    Error("UserExec","NO EVENT FOUND!");
+    return;
+  }
 
+  if (!fMCEvent) Error("UserExec","NO MC INFO FOUND");
+  
   //pass the MC evt handler to the cuts that need it 
-
-  fCFManager->SetEventInfo(mcTruth);
-
-  // Get the MC event 
-  AliMCEvent* mcEvent = mcTruth->MCEvent();
+  fCFManager->SetEventInfo(fMCEvent);
 
   // MC-event selection
-  Float_t containerInput[2] ;
+  Double_t containerInput[2] ;
         
   //loop on the MC event
-  for (Int_t ipart=0; ipart<mcEvent->GetNumberOfTracks(); ipart++) { 
-    AliMCParticle *mcPart  = mcEvent->GetTrack(ipart);
+  for (Int_t ipart=0; ipart<fMCEvent->GetNumberOfTracks(); ipart++) { 
+    AliMCParticle *mcPart  = fMCEvent->GetTrack(ipart);
 
     //check the MC-level cuts
     if (!fCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,mcPart)) continue;
@@ -162,7 +157,7 @@ void AliCFSingleTrackTask::Exec(Option_t *)
     containerInput[1] = mcPart->Eta() ;
     //fill the container for Gen-level selection
     fCFManager->GetParticleContainer()->Fill(containerInput,kStepGenerated);
-    
+
     //check the Acceptance-level cuts
     if (!fCFManager->CheckParticleCuts(AliCFManager::kPartAccCuts,mcPart)) continue;
     //fill the container for Acceptance-level selection
@@ -170,36 +165,56 @@ void AliCFSingleTrackTask::Exec(Option_t *)
   }    
 
   //Now go to rec level
-  for (Int_t iTrack = 0; iTrack<fESD->GetNumberOfTracks(); iTrack++) {
-
-    AliESDtrack* track = fESD->GetTrack(iTrack);
+  for (Int_t iTrack = 0; iTrack<fEvent->GetNumberOfTracks(); iTrack++) {
     
-    fCFManager->FillQABeforeParticleCuts(AliCFManager::kPartRecCuts,track);  
-    if (!fCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,track)) continue;
-    fCFManager->FillQAAfterParticleCuts(AliCFManager::kPartRecCuts,track);
+    track = fEvent->GetTrack(iTrack);
+    
+    if (fReadTPCTracks) {
+      if (fReadAODData) {
+       Error("UserExec","TPC-only tracks are not supported with AOD");
+       return ;
+      }
+      AliESDtrack* esdTrack    = (AliESDtrack*) track;
+      AliESDtrack* esdTrackTPC = new AliESDtrack();
+      if (!esdTrack->FillTPCOnlyTrack(*esdTrackTPC)) {
+       Error("UserExec","Could not retrieve TPC info");
+       continue;
+      }
+      track = esdTrackTPC ;
+    }
 
+    if (!fCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,track)) continue;
+    
     // is track associated to particle ?
-    if (track->GetLabel()<0) continue;
-    AliMCParticle *mcPart  = mcEvent->GetTrack(track->GetLabel());
+
+    Int_t label = track->GetLabel();
+
+    if (label<0) continue;
+    AliMCParticle *mcPart  = fMCEvent->GetTrack(label);
     
     // check if this track was part of the signal
     if (!fCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,mcPart)) continue; 
     
     //fill the container
     Double_t mom[3];
-    track->GetPxPyPz(mom);
+    track->PxPyPz(mom);
     Double_t pt=TMath::Sqrt(mom[0]*mom[0]+mom[1]*mom[1]);
     containerInput[0] = pt ;
     containerInput[1] = track->Eta();
     fCFManager->GetParticleContainer()->Fill(containerInput,kStepReconstructed) ;   
+
     if (!fCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,track)) continue ;
     fCFManager->GetParticleContainer()->Fill(containerInput,kStepSelected);
+
+    if (fReadTPCTracks) delete track;
   }
   
   fHistEventsProcessed->Fill(0);
-  PostData(0,fHistEventsProcessed) ;
-  PostData(1,fCFManager->GetParticleContainer()) ;
-  PostData(2,fQAHistList) ;
+
+  /* PostData(0) is taken care of by AliAnalysisTaskSE */
+  PostData(1,fHistEventsProcessed) ;
+  PostData(2,fCFManager->GetParticleContainer()) ;
+  PostData(3,fQAHistList) ;
 }
 
 
@@ -211,88 +226,82 @@ void AliCFSingleTrackTask::Terminate(Option_t*)
   // the results graphically or save the results to file.
 
   Info("Terminate","");
-  AliAnalysisTask::Terminate();
+  AliAnalysisTaskSE::Terminate();
 
+  //draw some example plots....
 
-  Double_t max1 = fCFManager->GetParticleContainer()->ShowProjection(0,0)->GetMaximum();
-  Double_t max2 = fCFManager->GetParticleContainer()->ShowProjection(1,0)->GetMaximum();
+  AliCFContainer *cont= dynamic_cast<AliCFContainer*> (GetOutputData(2));
 
-  fCFManager->GetParticleContainer()->ShowProjection(0,0)->GetYaxis()->SetRangeUser(0,max1*1.2);
-  fCFManager->GetParticleContainer()->ShowProjection(0,1)->GetYaxis()->SetRangeUser(0,max1*1.2);
-  fCFManager->GetParticleContainer()->ShowProjection(0,2)->GetYaxis()->SetRangeUser(0,max1*1.2);
-  fCFManager->GetParticleContainer()->ShowProjection(0,3)->GetYaxis()->SetRangeUser(0,max1*1.2);
+  TH1D* h00 =   cont->ShowProjection(0,0) ;
+  TH1D* h01 =   cont->ShowProjection(0,1) ;
+  TH1D* h02 =   cont->ShowProjection(0,2) ;
+  TH1D* h03 =   cont->ShowProjection(0,3) ;
 
-  fCFManager->GetParticleContainer()->ShowProjection(1,0)->GetYaxis()->SetRangeUser(0,max2*1.2);
-  fCFManager->GetParticleContainer()->ShowProjection(1,1)->GetYaxis()->SetRangeUser(0,max2*1.2);
-  fCFManager->GetParticleContainer()->ShowProjection(1,2)->GetYaxis()->SetRangeUser(0,max2*1.2);
-  fCFManager->GetParticleContainer()->ShowProjection(1,3)->GetYaxis()->SetRangeUser(0,max2*1.2);
+  TH1D* h10 =   cont->ShowProjection(1,0) ;
+  TH1D* h11 =   cont->ShowProjection(1,1) ;
+  TH1D* h12 =   cont->ShowProjection(1,2) ;
+  TH1D* h13 =   cont->ShowProjection(1,3) ;
 
-  fCFManager->GetParticleContainer()->ShowProjection(0,0)->SetMarkerStyle(23) ;
-  fCFManager->GetParticleContainer()->ShowProjection(0,1)->SetMarkerStyle(24) ;
-  fCFManager->GetParticleContainer()->ShowProjection(0,2)->SetMarkerStyle(25) ;
-  fCFManager->GetParticleContainer()->ShowProjection(0,3)->SetMarkerStyle(26) ;
+  Double_t max1 = h00->GetMaximum();
+  Double_t max2 = h10->GetMaximum();
 
-  fCFManager->GetParticleContainer()->ShowProjection(1,0)->SetMarkerStyle(23) ;
-  fCFManager->GetParticleContainer()->ShowProjection(1,1)->SetMarkerStyle(24) ;
-  fCFManager->GetParticleContainer()->ShowProjection(1,2)->SetMarkerStyle(25) ;
-  fCFManager->GetParticleContainer()->ShowProjection(1,3)->SetMarkerStyle(26) ;
+  h00->GetYaxis()->SetRangeUser(0,max1*1.2);
+  h01->GetYaxis()->SetRangeUser(0,max1*1.2);
+  h02->GetYaxis()->SetRangeUser(0,max1*1.2);
+  h03->GetYaxis()->SetRangeUser(0,max1*1.2);
+
+  h10->GetYaxis()->SetRangeUser(0,max2*1.2);
+  h11->GetYaxis()->SetRangeUser(0,max2*1.2);
+  h12->GetYaxis()->SetRangeUser(0,max2*1.2);
+  h13->GetYaxis()->SetRangeUser(0,max2*1.2);
+
+  h00->SetMarkerStyle(23) ;
+  h01->SetMarkerStyle(24) ;
+  h02->SetMarkerStyle(25) ;
+  h03->SetMarkerStyle(26) ;
+
+  h10->SetMarkerStyle(23) ;
+  h11->SetMarkerStyle(24) ;
+  h12->SetMarkerStyle(25) ;
+  h13->SetMarkerStyle(26) ;
 
   TCanvas * c =new TCanvas("c","",1400,800);
   c->Divide(4,2);
 
-//   TCanvas * c1 =new TCanvas("c1","",600,400);
   c->cd(1);
-  fCFManager->GetParticleContainer()->ShowProjection(0,0)->Draw("p");
+  h00->Draw("p");
   c->cd(2);
-  fCFManager->GetParticleContainer()->ShowProjection(0,1)->Draw("p");
+  h01->Draw("p");
   c->cd(3);
-  fCFManager->GetParticleContainer()->ShowProjection(0,2)->Draw("p");
+  h02->Draw("p");
   c->cd(4);
-  fCFManager->GetParticleContainer()->ShowProjection(0,3)->Draw("p");
-
-//   TCanvas * c2 =new TCanvas("c2","",600,400);
+  h03->Draw("p");
   c->cd(5);
-  fCFManager->GetParticleContainer()->ShowProjection(1,0)->Draw("p");
+  h10->Draw("p");
   c->cd(6);
-  fCFManager->GetParticleContainer()->ShowProjection(1,1)->Draw("p");
+  h11->Draw("p");
   c->cd(7);
-  fCFManager->GetParticleContainer()->ShowProjection(1,2)->Draw("p");
+  h12->Draw("p");
   c->cd(8);
-  fCFManager->GetParticleContainer()->ShowProjection(1,3)->Draw("p");
+  h13->Draw("p");
 
   c->SaveAs("plots.eps");
-
-  delete fHistEventsProcessed ;
 }
 
-//___________________________________________________________________________
-void AliCFSingleTrackTask::ConnectInputData(Option_t *) {
-  //
-  // Initialize branches.
-  //
-  Info("ConnectInputData","ConnectInputData of task %s\n",GetName());
-
-  fChain = (TChain*)GetInputData(0);
-  fChain->SetBranchStatus("*FMD*",0);
-  fChain->SetBranchStatus("*CaloClusters*",0);
-  fESD = new AliESDEvent();
-  fESD->ReadFromTree(fChain);
-}
 
 //___________________________________________________________________________
-void AliCFSingleTrackTask::CreateOutputObjects() {
+void AliCFSingleTrackTask::UserCreateOutputObjects() {
   //HERE ONE CAN CREATE OUTPUT OBJECTS, IN PARTICULAR IF THE OBJECT PARAMETERS DON'T NEED
   //TO BE SET BEFORE THE EXECUTION OF THE TASK
   //
-  Info("CreateOutputObjects","CreateOutputObjects of task %s\n", GetName());
+  Info("CreateOutputObjects","CreateOutputObjects of task %s", GetName());
 
-  //slot #0
+  //slot #1
+  OpenFile(1);
   fHistEventsProcessed = new TH1I("fHistEventsProcessed","",1,0,1) ;
 
-  //slot #2
-  fQAHistList = new TList();
-  fCFManager->InitQAHistos();
-  fCFManager->AddQAHistosToList(fQAHistList);
+//   OpenFile(2);
+//   OpenFile(3);
 }
 
 #endif