]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/macros/AddTaskPWG4HighPtSpectra.C
Corrected call of output container for proper runnning in the PWG4 train.
[u/mrichter/AliRoot.git] / PWG4 / macros / AddTaskPWG4HighPtSpectra.C
index f59823164d3716d31924787905d8b3f9d9b3e92c..32273dd5ec8d6664eb53bfd114a920982dbf4b4a 100644 (file)
@@ -1,14 +1,16 @@
 //DEFINITION OF A FEW CONSTANTS
-const Double_t ptmin =  2.0 ;
-const Double_t ptmax =  100.0 ;
+const Float_t phimin = 0.;
+const Float_t phimax = 2.*TMath::Pi();
+const Float_t etamin = -0.9;
+const Float_t etamax = 0.9;
 
-const Int_t    mintrackrefsTPC = 1;
-const Int_t    mintrackrefsITS = 1;
-const Int_t    charge  = 1 ;
+const Int_t   mintrackrefsTPC = 1;
+const Int_t   mintrackrefsITS = 1;
+const Int_t   charge  = 1;
 
-AliPWG4HighPtSpectra* AddTaskPWG4HighPtSpectra()//<some_parameters>)
+AliPWG4HighPtSpectra* AddTaskPWG4HighPtSpectra(char *prodType = "LHC10e14")
 {
-  // Creates HighPtSpectra analysis task and adds it to the analysis manager.
+  // Creates HighPtSpectra analysis task and adds it to the analysis manager.
   
   // A. Get the pointer to the existing analysis manager via the static access method.
   //==============================================================================
@@ -22,7 +24,7 @@ AliPWG4HighPtSpectra* AddTaskPWG4HighPtSpectra()//<some_parameters>)
   //    manager. The availability of MC handler can also be checked here.
   //==============================================================================
   if (!mgr->GetInputEventHandler()) {
-    ::Error("AddTaskHighPtSpectra", "This task requires an input event handler");
+    ::Error("AddTaskPWG4HighPtSpectra", "This task requires an input event handler");
     return NULL;
   }  
   TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
@@ -30,55 +32,104 @@ AliPWG4HighPtSpectra* AddTaskPWG4HighPtSpectra()//<some_parameters>)
 
   // C. Create the task, add it to manager.
   //===========================================================================
 //CONTAINER DEFINITION
+ //CONTAINER DEFINITION
   Info("AliPWG4HighPtSpectra","SETUP CONTAINER");
   //the sensitive variables, their indices
-  UInt_t ipt = 0;
+  UInt_t ipt   = 0;
+  UInt_t iphi  = 1;
+  UInt_t ieta  = 2;
+
   //Setting up the container grid... 
-  UInt_t nstep = ; //Steps/Modes for containers
+  UInt_t nstep = 6; //Steps/Modes for containers
   Int_t kStepReconstructed = 0;
   Int_t kStepReconstructedTPCOnly = 1;
   Int_t kStepSecondaries = 2;
-  Int_t kStepMCtrackable = 3;
-  Int_t kStepReconstructedMC = 4;
+  Int_t kStepReconstructedMC = 3;
+  Int_t kStepMCAcceptance = 4;
+  Int_t kStepReconstructedTPCOnlyMC = 5;
+
+  //redefine pt ranges in case of Jet-Jet production
+  Float_t ptBinEdges[2][2];
+  Float_t ptmin =  2.0 ;
+  Float_t ptmax =  50.0 ;
+  Float_t binWidth3 = 5.;
+  if(!strcmp(prodType, "LHC10e14") || !strcmp(prodType, "PbPb")) { 
+    ptmin =  0.0 ;
+    ptmax =  500.0 ;
+
+    ptBinEdges[0][0] = 100.;
+    ptBinEdges[0][1] = 5.;
+    ptBinEdges[1][0] = 300.;
+    ptBinEdges[1][1] = 10.;
+    binWidth3 = 20.;
+  } else { 
+    ptmin =  2.0 ;
+    ptmax =  50.0 ;
+    
+    ptBinEdges[0][0] = 10.;
+    ptBinEdges[0][1] = 1.;
+    ptBinEdges[1][0] = 20.;
+    ptBinEdges[1][1] = 2.;
+    binWidth3 = 5.;
+  }
+    
+  const Int_t nvar   = 3; //number of variables on the grid: pt:phi:eta
+  const Int_t nbin11 = (int)((ptBinEdges[0][0]-ptmin)/ptBinEdges[0][1]);
+  const Int_t nbin12 = (int)((ptBinEdges[1][0]-ptBinEdges[0][0])/ptBinEdges[1][1])+nbin11;
+  const Int_t nbin13 = (int)((ptmax-ptBinEdges[1][0])/binWidth3)+nbin12;
+  const Int_t nbin1  = nbin13; //bins in pt 
+  const Int_t nbin2  =  18;//36; //bins in phi
+  const Int_t nbin3  =  8; //bins in eta
 
-  const Int_t nvar   = 1; //number of variables on the grid:pt
-  const Int_t nbin1  = 98; //bins in pt 98 
   //arrays for the number of bins in each dimension
   Int_t iBin[nvar];
   iBin[0]=nbin1;
-
+  iBin[1]=nbin2;
+  iBin[2]=nbin3;
+   
   //arrays for lower bounds :
   Double_t *binLim1=new Double_t[nbin1+1];
+  Double_t *binLim2=new Double_t[nbin2+1];
+  Double_t *binLim3=new Double_t[nbin3+1];
+  
+  //values for bin lower bounds 
+  for(Int_t i=0; i<=nbin1; i++) {
+    if(i<=nbin11) binLim1[i]=(Double_t)ptmin + (ptBinEdges[0][0]-ptmin)/nbin11*(Double_t)i ;  
+    if(i<=nbin12 && i>nbin11) binLim1[i]=(Double_t)ptBinEdges[0][0] + (ptBinEdges[1][0]-ptBinEdges[0][0])/(nbin12-nbin11)*((Double_t)i-(Double_t)nbin11) ;  
+    if(i<=nbin13 && i>nbin12) binLim1[i]=(Double_t)ptBinEdges[1][0] + (ptmax-ptBinEdges[1][0])/(nbin13-nbin12)*((Double_t)i-(Double_t)nbin12) ;  
+  }
+  for(Int_t i=0; i<=nbin2; i++) binLim2[i]=(Double_t)phimin + (phimax-phimin)/nbin2*(Double_t)i ;
+  for(Int_t i=0; i<=nbin3; i++) binLim3[i]=(Double_t)etamin + (etamax-etamin)/nbin3*(Double_t)i ;  
+  
 
-  //values for bin lower bounds
-  for(Int_t i=0; i<=nbin1; i++) binLim1[i]=(Double_t)ptmin + (ptmax-ptmin)/nbin1*(Double_t)i ; 
-  //one "container" for MC
-  AliCFContainer* container = new AliCFContainer("container","container for tracks",nstep,nvar,iBin);
+  AliCFContainer* containerPos = new AliCFContainer("containerPos","container for positive tracks",nstep,nvar,iBin);
   //setting the bin limits
-  container -> SetBinLimits(ipt,binLim1);
+  containerPos -> SetBinLimits(ipt,binLim1);
+  containerPos -> SetBinLimits(iphi,binLim2);
+  containerPos -> SetBinLimits(ieta,binLim3);
+
+  AliCFContainer* containerNeg = new AliCFContainer("containerNeg","container for negative tracks",nstep,nvar,iBin);
+  //setting the bin limits
+  containerNeg -> SetBinLimits(ipt,binLim1);
+  containerNeg -> SetBinLimits(iphi,binLim2);
+  containerNeg -> SetBinLimits(ieta,binLim3);
+  
   //CREATE THE  CUTS -----------------------------------------------
   //Use AliESDtrackCuts
   AliESDtrackCuts *trackCuts = new AliESDtrackCuts("AliESDtrackCuts","Standard Cuts");
-  //Standard Cuts
-  trackCuts->SetAcceptKinkDaughters(kFALSE);//
-  trackCuts->SetRequireTPCRefit(kTRUE);//
-  trackCuts->SetEtaRange(-0.9,0.9);//-0.5,0.5);//
-  trackCuts->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);//
-  trackCuts->SetPtRange(0.15, 1e10);//
-  trackCuts->SetMinNClustersTPC(50);//
-  trackCuts->SetMaxChi2PerClusterTPC(3.5);//
-  trackCuts->SetRequireITSRefit(kTRUE);
-  trackCuts->SetMaxDCAToVertexXY(2.4);
-  trackCuts->SetMaxDCAToVertexZ(3.2);
-  trackCuts->SetDCAToVertex2D(kTRUE);
+  trackCuts = trackCuts->GetStandardITSTPCTrackCuts2010(kTRUE);//Primary Track Quality Selection for Global tracks
+  trackCuts->SetEtaRange(-0.9,0.9);
+  trackCuts->SetPtRange(0.15, 1e10);
+
+  AliESDtrackCuts *trackCutsTPConly = new AliESDtrackCuts("AliESDtrackCuts","Standard Cuts TPC only tracks");
+  trackCutsTPConly = trackCutsTPConly->GetStandardTPCOnlyTrackCuts();//TPC only Track Quality Cuts
+  trackCutsTPConly->SetEtaRange(-0.9,0.9);
+  trackCutsTPConly->SetPtRange(0.15, 1e10);
+  trackCutsTPConly->SetMinNClustersTPC(70);
+
   // Gen-Level kinematic cuts
   AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts");
-  mcKineCuts->SetPtRange(0.15,1e10); 
+  mcKineCuts->SetPtRange(0.15,1e10);
   mcKineCuts->SetRapidityRange(-0.9,0.9);//-0.5,0.5);
   mcKineCuts->SetRequireIsCharged(kTRUE);
 
@@ -88,9 +139,10 @@ AliPWG4HighPtSpectra* AddTaskPWG4HighPtSpectra()//<some_parameters>)
   mcAccCuts->SetMinNHitTPC(mintrackrefsTPC);
 
   TObjArray* recList = new TObjArray(0);
-  TObjArray* recMCList = new TObjArray(0);
   TObjArray* recTPConlyList = new TObjArray(0);
   TObjArray* secList = new TObjArray(0) ;
+  TObjArray* recMCList = new TObjArray(0);
+  TObjArray* recTPConlyMCList = new TObjArray(0);
 
   printf("CREATE MC KINE CUTS\n");
   TObjArray* mcList = new TObjArray(0) ;
@@ -99,37 +151,55 @@ AliPWG4HighPtSpectra* AddTaskPWG4HighPtSpectra()//<some_parameters>)
 
   //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(0,recList);
-  man->SetParticleCutsList(1,recTPConlyList);
-  man->SetParticleCutsList(2,secList);
-  man->SetParticleCutsList(3,mcList);
-  man->SetParticleCutsList(4,recMCList);
-
-
+  AliCFManager* manPos = new AliCFManager("manPos","Manager for Positive tracks") ;
+  manPos->SetParticleContainer(containerPos);
+  manPos->SetParticleCutsList(kStepReconstructed,recList);
+  manPos->SetParticleCutsList(kStepReconstructedTPCOnly,recTPConlyList);
+  manPos->SetParticleCutsList(kStepSecondaries,secList);
+  manPos->SetParticleCutsList(kStepReconstructedMC,recMCList);
+  manPos->SetParticleCutsList(kStepMCAcceptance,mcList);
+  manPos->SetParticleCutsList(kStepReconstructedTPCOnlyMC,recTPConlyMCList);
+
+  AliCFManager* manNeg = new AliCFManager("manNeg","Manager for Negative tracks") ;
+  manNeg->SetParticleContainer(containerNeg);
+  manNeg->SetParticleCutsList(kStepReconstructed,recList);
+  manNeg->SetParticleCutsList(kStepReconstructedTPCOnly,recTPConlyList);
+  manNeg->SetParticleCutsList(kStepSecondaries,secList);
+  manNeg->SetParticleCutsList(kStepReconstructedMC,recMCList);
+  manNeg->SetParticleCutsList(kStepMCAcceptance,mcList);
+  manNeg->SetParticleCutsList(kStepReconstructedTPCOnlyMC,recTPConlyMCList);
+
+
+  printf("Create task AliPWG4HighPtSpectra\n");
   AliPWG4HighPtSpectra *taskPWG4HighPtSpectra = new AliPWG4HighPtSpectra("taskPWG4HighPtSpectra");
   taskPWG4HighPtSpectra->SetCuts(trackCuts);
-  taskPWG4HighPtSpectra->SetCFManager(man); //here is set the CF manager
-  taskPWG4HighPtSpectra->SelectTrigger(AliAnalysisHelperJetTasks::kMB1); 
+  taskPWG4HighPtSpectra->SetCutsTPConly(trackCutsTPConly);
+  taskPWG4HighPtSpectra->SetCFManagerPos(manPos); //here is set the CF manager +
+  taskPWG4HighPtSpectra->SetCFManagerNeg(manNeg); //here is set the CF manager -
+
 
   // E. Create ONLY the output containers for the data produced by the task.
   // Get and connect other common input/output containers via the manager as below
   //==============================================================================
 
-  //------ input data ------
-  //  AliAnalysisDataContainer *cinput0  = mgr->GetCommonInputContainer();
-//  char *outputfile = "outputAliPWG4HighPtSpectraTestTrain.root";
+  //------ output containers ------
   TString outputfile = AliAnalysisManager::GetCommonFileName();
   outputfile += ":PWG4_HighPtSpectra"; 
-  AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("chist0", TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
-  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("ccontainer0", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+
+  AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("chist0HighPtSpectra", TList::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("ccontainer0HighPtSpectra", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+  AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("ccontainer1HighPtSpectra", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile);
+  AliAnalysisDataContainer *cout_cuts0 = mgr->CreateContainer("qa_trackCuts", AliESDtrackCuts::Class(), AliAnalysisManager::kParamContainer,outputfile);
+  AliAnalysisDataContainer *cout_cuts1 = mgr->CreateContainer("qa_trackCutsTPConly", AliESDtrackCuts::Class(), AliAnalysisManager::kParamContainer,outputfile);
+
   mgr->AddTask(taskPWG4HighPtSpectra);
 
   mgr->ConnectInput(taskPWG4HighPtSpectra,0,mgr->GetCommonInputContainer());
   mgr->ConnectOutput(taskPWG4HighPtSpectra,0,coutput0);
   mgr->ConnectOutput(taskPWG4HighPtSpectra,1,coutput1);
+  mgr->ConnectOutput(taskPWG4HighPtSpectra,2,coutput2);
+  mgr->ConnectOutput(taskPWG4HighPtSpectra,3,cout_cuts0);
+  mgr->ConnectOutput(taskPWG4HighPtSpectra,4,cout_cuts1);
 
   // Return task pointer at the end
   return taskPWG4HighPtSpectra;