]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CORRFW/test/AliCFSingleTrackTask.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / CORRFW / test / AliCFSingleTrackTask.C
index 41e25ff2c4f78c6e4eac75fa73e16299a6cf9550..04b0d597eb84768d32121b1dca6d103559bf4273 100644 (file)
@@ -12,6 +12,8 @@ const Int_t    minclustersTPC = 50 ;
 
 Bool_t AliCFSingleTrackTask(
                            const Bool_t useGrid = 1,
+                           const Bool_t readAOD = 0,
+                           const Bool_t readTPCTracks = 0,
                            const char * kTagXMLFile="wn.xml" // XML file containing tags
                            )
 {
@@ -36,7 +38,8 @@ Bool_t AliCFSingleTrackTask(
 
     //  Create an AliTagAnalysis Object and chain the tags
     AliTagAnalysis   *tagAna = new AliTagAnalysis(); 
-    tagAna->SetType("ESD");  //for aliroot > v4-05
+    if (readAOD) tagAna->SetType("AOD");  //for aliroot > v4-05
+    else         tagAna->SetType("ESD");  //for aliroot > v4-05
     TAlienCollection *coll   = TAlienCollection::Open(kTagXMLFile); 
     TGridResult      *tagResult = coll->GetGridResult("",0,0);
     tagResult->Print();
@@ -47,10 +50,19 @@ Bool_t AliCFSingleTrackTask(
   }
 
   else {// local data
-    analysisChain = new TChain("esdTree");
     //here put your input data path
     printf("\n\nRunning on local file, please check the path\n\n");
-    analysisChain->Add("AliESDs.root");
+
+    if (readAOD) {
+      analysisChain = new TChain("aodTree");
+      analysisChain->Add("your_data_path/001/AliAOD.root");
+      analysisChain->Add("your_data_path/002/AliAOD.root");
+    }
+    else {
+      analysisChain = new TChain("esdTree");
+      analysisChain->Add("your_data_path/001/AliESDs.root");
+      analysisChain->Add("your_data_path/002/AliESDs.root");
+    }
   }
   
 
@@ -84,13 +96,25 @@ Bool_t AliCFSingleTrackTask(
   //setting the bin limits
   container -> SetBinLimits(ipt,binLim1);
   container -> SetBinLimits(iy,binLim2);
-
+  container -> SetVarTitle(ipt,"pt");
+  container -> SetVarTitle(iy, "y");
+  container -> SetStepTitle(0, "generated");
+  container -> SetStepTitle(1, "in acceptance");
+  container -> SetStepTitle(2, "reconstructed");
+  container -> SetStepTitle(3, "after PID");
 
   // SET TLIST FOR QA HISTOS
   TList* qaList = new TList();
 
   //CREATE THE  CUTS -----------------------------------------------
 
+  //Event-level cuts:
+  AliCFEventRecCuts* evtRecCuts = new AliCFEventRecCuts("evtRecCuts","Rec-event cuts");
+//   evtRecCuts->SetUseTPCVertex();
+//   evtRecCuts->SetRequireVtxCuts(kTRUE);
+//   evtRecCuts->SetVertexNContributors(-2,5);
+  evtRecCuts->SetQAOn(qaList);
+
   // Gen-Level kinematic cuts
   AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts");
   mcKineCuts->SetPtRange(ptmin,ptmax);
@@ -101,7 +125,7 @@ Bool_t AliCFSingleTrackTask(
   //Particle-Level cuts:  
   AliCFParticleGenCuts* mcGenCuts = new AliCFParticleGenCuts("mcGenCuts","MC particle generation cuts");
   mcGenCuts->SetRequireIsPrimary();
-  mcGenCuts->SetRequirePdgCode(PDG);
+  mcGenCuts->SetRequirePdgCode(PDG,/*absolute=*/kTRUE);
   mcGenCuts->SetQAOn(qaList);
 
   //Acceptance Cuts
@@ -118,12 +142,16 @@ Bool_t AliCFSingleTrackTask(
   recKineCuts->SetQAOn(qaList);
 
   AliCFTrackQualityCuts *recQualityCuts = new AliCFTrackQualityCuts("recQualityCuts","rec-level quality cuts");
-  recQualityCuts->SetMinNClusterTPC(minclustersTPC);
-  recQualityCuts->SetRequireITSRefit(kTRUE);
+  if (!readAOD)       {
+//     recQualityCuts->SetMinNClusterTRD(0);
+//     recQualityCuts->SetMaxChi2PerClusterTRD(10.);
+  }
+  recQualityCuts->SetStatus(AliESDtrack::kTPCrefit);
   recQualityCuts->SetQAOn(qaList);
 
   AliCFTrackIsPrimaryCuts *recIsPrimaryCuts = new AliCFTrackIsPrimaryCuts("recIsPrimaryCuts","rec-level isPrimary cuts");
-  recIsPrimaryCuts->SetMaxNSigmaToVertex(3);
+  if (readAOD) recIsPrimaryCuts->SetAODType(AliAODTrack::kPrimary);
+  else         recIsPrimaryCuts->SetMaxNSigmaToVertex(3);
   recIsPrimaryCuts->SetQAOn(qaList);
 
   AliCFTrackCutPid* cutPID = new AliCFTrackCutPid("cutPID","ESD_PID") ;
@@ -138,7 +166,10 @@ Bool_t AliCFSingleTrackTask(
   
   cutPID->SetPriors(prior);
   cutPID->SetProbabilityCut(0.0);
-  cutPID->SetDetectors("TPC TOF");
+  if (readTPCTracks) cutPID->SetDetectors("TPC");
+  else               cutPID->SetDetectors("ALL");
+  if (readAOD) cutPID->SetAODmode(kTRUE );
+  else         cutPID->SetAODmode(kFALSE);
   switch(TMath::Abs(PDG)) {
   case 11   : cutPID->SetParticleType(AliPID::kElectron, kTRUE); break;
   case 13   : cutPID->SetParticleType(AliPID::kMuon    , kTRUE); break;
@@ -149,6 +180,10 @@ Bool_t AliCFSingleTrackTask(
   }
   cutPID->SetQAOn(qaList);
 
+  printf("CREATE EVENT LEVEL CUTS\n");
+  TObjArray* evtList = new TObjArray(0) ;
+//   evtList->AddLast(evtRecCuts);
+  
   printf("CREATE MC KINE CUTS\n");
   TObjArray* mcList = new TObjArray(0) ;
   mcList->AddLast(mcKineCuts);
@@ -171,11 +206,15 @@ Bool_t AliCFSingleTrackTask(
   //CREATE THE INTERFACE TO CORRECTION FRAMEWORK USED IN THE TASK
   printf("CREATE INTERFACE AND CUTS\n");
   AliCFManager* man = new AliCFManager() ;
-  man->SetParticleContainer     (container);
-  man->SetParticleCutsList(AliCFManager::kPartGenCuts,mcList);
-  man->SetParticleCutsList(AliCFManager::kPartAccCuts,accList);
-  man->SetParticleCutsList(AliCFManager::kPartRecCuts,recList);
-  man->SetParticleCutsList(AliCFManager::kPartSelCuts,fPIDCutList);
+
+  man->SetNStepEvent(1);
+  man->SetEventCutsList(0,evtList);
+
+  man->SetParticleContainer(container);
+  man->SetParticleCutsList(0,mcList);
+  man->SetParticleCutsList(1,accList);
+  man->SetParticleCutsList(2,recList);
+  man->SetParticleCutsList(3,fPIDCutList);
 
 
   //CREATE THE TASK
@@ -184,6 +223,8 @@ Bool_t AliCFSingleTrackTask(
   AliCFSingleTrackTask *task = new AliCFSingleTrackTask("AliSingleTrackTask");
   task->SetCFManager(man); //here is set the CF manager
   task->SetQAList(qaList);
+  if (readAOD)       task->SetReadAODData() ;
+  if (readTPCTracks) task->SetReadTPCTracks();
 
   //SETUP THE ANALYSIS MANAGER TO READ INPUT CHAIN AND WRITE DESIRED OUTPUTS
   printf("CREATE ANALYSIS MANAGER\n");
@@ -193,10 +234,15 @@ Bool_t AliCFSingleTrackTask(
   if (useGrid) mgr->SetAnalysisType(AliAnalysisManager::kGridAnalysis);
   else mgr->SetAnalysisType(AliAnalysisManager::kLocalAnalysis);
 
+
   AliMCEventHandler*  mcHandler = new AliMCEventHandler();
-  AliESDInputHandler* esdHandler = new AliESDInputHandler();
   mgr->SetMCtruthEventHandler(mcHandler);
-  mgr->SetInputEventHandler(esdHandler);
+  AliInputEventHandler* dataHandler ;
+  
+  if   (readAOD) dataHandler = new AliAODInputHandler();
+  else           dataHandler = new AliESDInputHandler();
+  mgr->SetInputEventHandler(dataHandler);
 
   // Create and connect containers for input/output
 
@@ -220,7 +266,7 @@ Bool_t AliCFSingleTrackTask(
   cinput0->SetData(analysisChain);
 
   mgr->AddTask(task);
-  mgr->ConnectInput(task,0,cinput0);
+  mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
   mgr->ConnectOutput(task,0,coutput0);
   mgr->ConnectOutput(task,1,coutput1);
   mgr->ConnectOutput(task,2,coutput2);
@@ -244,9 +290,9 @@ void Load() {
   //load the required aliroot libraries
   gSystem->Load("libANALYSIS") ;
   gSystem->Load("libANALYSISalice") ;
-  gSystem->Load("libCORRFW.so") ;
+  gSystem->Load("libCORRFW") ;
 
   //compile online the task class
   gSystem->SetIncludePath("-I. -I$ALICE_ROOT/include -I$ROOTSYS/include");
-  gROOT->LoadMacro("./AliCFSingleTrackTask.cxx+");
+  gROOT->LoadMacro("./AliCFSingleTrackTask.cxx++g");
 }