ROOT logo
//DEFINITION OF A FEW CONSTANTS
const Double_t ymin  = -1.0 ;
const Double_t ymax  =  1.0 ;
const Double_t ptmin =  0.0 ;
const Double_t ptmax =  8.0 ;
const Int_t    mintrackrefsTPC = 2 ;
const Int_t    mintrackrefsITS = 3 ;
const Int_t    charge  = 1 ;
const Int_t    PDG = 2212; 
const Int_t    minclustersTPC = 50 ;
//----------------------------------------------------

Bool_t AliCFSingleTrackTaskCAF()
{
  
  TBenchmark benchmark;
  benchmark.Start("AliSingleTrackTaskCAF");

  //
  // Connect to proof
  //

  TProof::Reset("proof://user@lxb6046.cern.ch");
  TProof::Open("proof://user@lxb6046.cern.ch");

  //   gProof->ClearPackage("STEERBase");
  //   gProof->ClearPackage("ESD");
  //   gProof->ClearPackage("AOD");
  //   gProof->ClearPackage("ANALYSIS");
  //   gProof->ClearPackage("ANALYSISalice");

  // Enable the STEERBase Package
  gProof->UploadPackage("STEERBase.par");
  gProof->EnablePackage("STEERBase");
  // Enable the ESD Package
  gProof->UploadPackage("ESD.par");
  gProof->EnablePackage("ESD");
  // Enable the AOD Package
  gProof->UploadPackage("AOD.par");
  gProof->EnablePackage("AOD");
  // Enable the Analysis Package
  gProof->UploadPackage("ANALYSIS.par");
  gProof->EnablePackage("ANALYSIS");
  gProof->UploadPackage("ANALYSISalice.par");
  gProof->EnablePackage("ANALYSISalice");
  // Enable the CORRFW Package
  // gProof->ClearPackage("CORRFW");
  gProof->UploadPackage("CORRFW.par");
  gProof->EnablePackage("CORRFW");

  gProof->ShowEnabledPackages();
  gProof->Load("./AliCFSingleTrackTask.cxx+g");

  //
  // Create the chain
  //
  gROOT->LoadMacro("CreateESDChain.C");
  TChain* analysisChain = CreateESDChain("ESD1503X_v1.txt", 2);


  //CONTAINER DEFINITION
  Info("AliCFSingleTrackTaskCAF","SETUP CONTAINER");
  //the sensitive variables (2 in this example), their indices
  UInt_t ipt = 0;
  UInt_t iy  = 1;
  //Setting up the container grid... 
  UInt_t nstep = 4 ; //number of selection steps MC 
  const Int_t nvar   = 2 ; //number of variables on the grid:pt,y
  const Int_t nbin1  = 8 ; //bins in pt
  const Int_t nbin2  = 8 ; //bins in y 

  //arrays for the number of bins in each dimension
  Int_t iBin[nvar];
  iBin[0]=nbin1;
  iBin[1]=nbin2;

  //arrays for lower bounds :
  Double_t *binLim1=new Double_t[nbin1+1];
  Double_t *binLim2=new Double_t[nbin2+1];

  //values for bin lower bounds
  for(Int_t i=0; i<=nbin1; i++) binLim1[i]=(Double_t)ptmin + (ptmax-ptmin)/nbin1*(Double_t)i ; 
  for(Int_t i=0; i<=nbin2; i++) binLim2[i]=(Double_t)ymin  + (ymax-ymin)  /nbin2*(Double_t)i ;
  //one "container" for MC
  AliCFContainer* container = new AliCFContainer("container","container for tracks",nstep,nvar,iBin);
  //setting the bin limits
  container -> SetBinLimits(ipt,binLim1);
  container -> SetBinLimits(iy,binLim2);


  // SET TLIST FOR QA HISTOS
  TList* qaList = new TList();

  //CREATE THE  CUTS -----------------------------------------------

  // Gen-Level kinematic cuts
  AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts");
  mcKineCuts->SetPtRange(ptmin,ptmax);
  mcKineCuts->SetRapidityRange(ymin,ymax);
  mcKineCuts->SetChargeMC(charge);
  mcKineCuts->SetQAOn(qaList);

  //Particle-Level cuts:  
  AliCFParticleGenCuts* mcGenCuts = new AliCFParticleGenCuts("mcGenCuts","MC particle generation cuts");
  mcGenCuts->SetRequireIsPrimary();
  mcGenCuts->SetRequirePdgCode(PDG);
  mcGenCuts->SetQAOn(qaList);

  //Acceptance Cuts
  AliCFAcceptanceCuts *mcAccCuts = new AliCFAcceptanceCuts("mcAccCuts","MC acceptance cuts");
  mcAccCuts->SetMinNHitITS(mintrackrefsITS);
  mcAccCuts->SetMinNHitTPC(mintrackrefsTPC);
  mcAccCuts->SetQAOn(qaList);

  // Rec-Level kinematic cuts
  AliCFTrackKineCuts *recKineCuts = new AliCFTrackKineCuts("recKineCuts","rec-level kine cuts");
  recKineCuts->SetPtRange(ptmin,ptmax);
  recKineCuts->SetRapidityRange(ymin,ymax);
  recKineCuts->SetChargeRec(charge);
  recKineCuts->SetQAOn(qaList);

  AliCFTrackQualityCuts *recQualityCuts = new AliCFTrackQualityCuts("recQualityCuts","rec-level quality cuts");
  recQualityCuts->SetMinNClusterTPC(minclustersTPC);
  recQualityCuts->SetRequireITSRefit(kTRUE);
  recQualityCuts->SetQAOn(qaList);

  AliCFTrackIsPrimaryCuts *recIsPrimaryCuts = new AliCFTrackIsPrimaryCuts("recIsPrimaryCuts","rec-level isPrimary cuts");
  recIsPrimaryCuts->SetMaxNSigmaToVertex(3);
  recIsPrimaryCuts->SetQAOn(qaList);

  AliCFTrackCutPid* cutPID = new AliCFTrackCutPid("cutPID","ESD_PID") ;
  int n_species = AliPID::kSPECIES ;
  Double_t* prior = new Double_t[n_species];
  
  prior[0] = 0.0244519 ;
  prior[1] = 0.0143988 ;
  prior[2] = 0.805747  ;
  prior[3] = 0.0928785 ;
  prior[4] = 0.0625243 ;
  
  cutPID->SetPriors(prior);
  cutPID->SetProbabilityCut(0.0);
  cutPID->SetDetectors("TPC TOF");
  switch(TMath::Abs(PDG)) {
  case 11   : cutPID->SetParticleType(AliPID::kElectron, kTRUE); break;
  case 13   : cutPID->SetParticleType(AliPID::kMuon    , kTRUE); break;
  case 211  : cutPID->SetParticleType(AliPID::kPion    , kTRUE); break;
  case 321  : cutPID->SetParticleType(AliPID::kKaon    , kTRUE); break;
  case 2212 : cutPID->SetParticleType(AliPID::kProton  , kTRUE); break;
  default   : printf("UNDEFINED PID\n"); break;
  }
  cutPID->SetQAOn(qaList);

  printf("CREATE MC KINE CUTS\n");
  TObjArray* mcList = new TObjArray(0) ;
  mcList->AddLast(mcKineCuts);
  mcList->AddLast(mcGenCuts);

  printf("CREATE ACCEPTANCE CUTS\n");
  TObjArray* accList = new TObjArray(0) ;
  accList->AddLast(mcAccCuts);

  printf("CREATE RECONSTRUCTION CUTS\n");
  TObjArray* recList = new TObjArray(0) ;
  recList->AddLast(recKineCuts);
  recList->AddLast(recQualityCuts);
  recList->AddLast(recIsPrimaryCuts);

  printf("CREATE PID CUTS\n");
  TObjArray* fPIDCutList = new TObjArray(0) ;
  fPIDCutList->AddLast(cutPID);

  //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);


  //CREATE THE TASK
  printf("CREATE TASK\n");
  // create the task
  AliCFSingleTrackTask *task = new AliCFSingleTrackTask("AliSingleTrackTask");
  task->SetCFManager(man); //here is set the CF manager
  task->SetQAList(qaList);

  //SETUP THE ANALYSIS MANAGER TO READ INPUT CHAIN AND WRITE DESIRED OUTPUTS
  printf("CREATE ANALYSIS MANAGER\n");
  // Make the analysis manager
  AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");

  AliMCEventHandler*  mcHandler = new AliMCEventHandler();
  AliESDInputHandler* esdHandler = new AliESDInputHandler();
  mgr->SetMCtruthEventHandler(mcHandler);
  mgr->SetInputEventHandler(esdHandler);

  // Create and connect containers for input/output

  //------ input data ------
  AliAnalysisDataContainer *cinput0  = mgr->CreateContainer("cchain0",TChain::Class(),AliAnalysisManager::kInputContainer);

  // ----- output data -----
  
  //slot 0 : default output tree (by default handled by AliAnalysisTaskSE)
  AliAnalysisDataContainer *coutput0 = mgr->CreateContainer("ctree0", TTree::Class(),AliAnalysisManager::kOutputContainer,"output.root");

  //now comes user's output objects :
  
  // output TH1I for event counting
  AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("chist0", TH1I::Class(),AliAnalysisManager::kOutputContainer,"output.root");
  // output Correction Framework Container (for acceptance & efficiency calculations)
  AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("ccontainer0", AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,"output.root");
  // output QA histograms 
  AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("clist0", TList::Class(),AliAnalysisManager::kOutputContainer,"output.root");

  cinput0->SetData(analysisChain);

  mgr->AddTask(task);
  mgr->ConnectInput(task,0,cinput0);
  mgr->ConnectOutput(task,0,coutput0);
  mgr->ConnectOutput(task,1,coutput1);
  mgr->ConnectOutput(task,2,coutput2);
  mgr->ConnectOutput(task,3,coutput3);

  printf("READY TO RUN\n");
  //RUN !!!
  if (mgr->InitAnalysis()) {
    mgr->PrintStatus();
    mgr->StartAnalysis("proof",analysisChain);
  }

  benchmark.Stop("AliSingleTrackTaskCAF");
  benchmark.Show("AliSingleTrackTaskCAF");

  return kTRUE ;
}

 AliCFSingleTrackTaskCAF.C:1
 AliCFSingleTrackTaskCAF.C:2
 AliCFSingleTrackTaskCAF.C:3
 AliCFSingleTrackTaskCAF.C:4
 AliCFSingleTrackTaskCAF.C:5
 AliCFSingleTrackTaskCAF.C:6
 AliCFSingleTrackTaskCAF.C:7
 AliCFSingleTrackTaskCAF.C:8
 AliCFSingleTrackTaskCAF.C:9
 AliCFSingleTrackTaskCAF.C:10
 AliCFSingleTrackTaskCAF.C:11
 AliCFSingleTrackTaskCAF.C:12
 AliCFSingleTrackTaskCAF.C:13
 AliCFSingleTrackTaskCAF.C:14
 AliCFSingleTrackTaskCAF.C:15
 AliCFSingleTrackTaskCAF.C:16
 AliCFSingleTrackTaskCAF.C:17
 AliCFSingleTrackTaskCAF.C:18
 AliCFSingleTrackTaskCAF.C:19
 AliCFSingleTrackTaskCAF.C:20
 AliCFSingleTrackTaskCAF.C:21
 AliCFSingleTrackTaskCAF.C:22
 AliCFSingleTrackTaskCAF.C:23
 AliCFSingleTrackTaskCAF.C:24
 AliCFSingleTrackTaskCAF.C:25
 AliCFSingleTrackTaskCAF.C:26
 AliCFSingleTrackTaskCAF.C:27
 AliCFSingleTrackTaskCAF.C:28
 AliCFSingleTrackTaskCAF.C:29
 AliCFSingleTrackTaskCAF.C:30
 AliCFSingleTrackTaskCAF.C:31
 AliCFSingleTrackTaskCAF.C:32
 AliCFSingleTrackTaskCAF.C:33
 AliCFSingleTrackTaskCAF.C:34
 AliCFSingleTrackTaskCAF.C:35
 AliCFSingleTrackTaskCAF.C:36
 AliCFSingleTrackTaskCAF.C:37
 AliCFSingleTrackTaskCAF.C:38
 AliCFSingleTrackTaskCAF.C:39
 AliCFSingleTrackTaskCAF.C:40
 AliCFSingleTrackTaskCAF.C:41
 AliCFSingleTrackTaskCAF.C:42
 AliCFSingleTrackTaskCAF.C:43
 AliCFSingleTrackTaskCAF.C:44
 AliCFSingleTrackTaskCAF.C:45
 AliCFSingleTrackTaskCAF.C:46
 AliCFSingleTrackTaskCAF.C:47
 AliCFSingleTrackTaskCAF.C:48
 AliCFSingleTrackTaskCAF.C:49
 AliCFSingleTrackTaskCAF.C:50
 AliCFSingleTrackTaskCAF.C:51
 AliCFSingleTrackTaskCAF.C:52
 AliCFSingleTrackTaskCAF.C:53
 AliCFSingleTrackTaskCAF.C:54
 AliCFSingleTrackTaskCAF.C:55
 AliCFSingleTrackTaskCAF.C:56
 AliCFSingleTrackTaskCAF.C:57
 AliCFSingleTrackTaskCAF.C:58
 AliCFSingleTrackTaskCAF.C:59
 AliCFSingleTrackTaskCAF.C:60
 AliCFSingleTrackTaskCAF.C:61
 AliCFSingleTrackTaskCAF.C:62
 AliCFSingleTrackTaskCAF.C:63
 AliCFSingleTrackTaskCAF.C:64
 AliCFSingleTrackTaskCAF.C:65
 AliCFSingleTrackTaskCAF.C:66
 AliCFSingleTrackTaskCAF.C:67
 AliCFSingleTrackTaskCAF.C:68
 AliCFSingleTrackTaskCAF.C:69
 AliCFSingleTrackTaskCAF.C:70
 AliCFSingleTrackTaskCAF.C:71
 AliCFSingleTrackTaskCAF.C:72
 AliCFSingleTrackTaskCAF.C:73
 AliCFSingleTrackTaskCAF.C:74
 AliCFSingleTrackTaskCAF.C:75
 AliCFSingleTrackTaskCAF.C:76
 AliCFSingleTrackTaskCAF.C:77
 AliCFSingleTrackTaskCAF.C:78
 AliCFSingleTrackTaskCAF.C:79
 AliCFSingleTrackTaskCAF.C:80
 AliCFSingleTrackTaskCAF.C:81
 AliCFSingleTrackTaskCAF.C:82
 AliCFSingleTrackTaskCAF.C:83
 AliCFSingleTrackTaskCAF.C:84
 AliCFSingleTrackTaskCAF.C:85
 AliCFSingleTrackTaskCAF.C:86
 AliCFSingleTrackTaskCAF.C:87
 AliCFSingleTrackTaskCAF.C:88
 AliCFSingleTrackTaskCAF.C:89
 AliCFSingleTrackTaskCAF.C:90
 AliCFSingleTrackTaskCAF.C:91
 AliCFSingleTrackTaskCAF.C:92
 AliCFSingleTrackTaskCAF.C:93
 AliCFSingleTrackTaskCAF.C:94
 AliCFSingleTrackTaskCAF.C:95
 AliCFSingleTrackTaskCAF.C:96
 AliCFSingleTrackTaskCAF.C:97
 AliCFSingleTrackTaskCAF.C:98
 AliCFSingleTrackTaskCAF.C:99
 AliCFSingleTrackTaskCAF.C:100
 AliCFSingleTrackTaskCAF.C:101
 AliCFSingleTrackTaskCAF.C:102
 AliCFSingleTrackTaskCAF.C:103
 AliCFSingleTrackTaskCAF.C:104
 AliCFSingleTrackTaskCAF.C:105
 AliCFSingleTrackTaskCAF.C:106
 AliCFSingleTrackTaskCAF.C:107
 AliCFSingleTrackTaskCAF.C:108
 AliCFSingleTrackTaskCAF.C:109
 AliCFSingleTrackTaskCAF.C:110
 AliCFSingleTrackTaskCAF.C:111
 AliCFSingleTrackTaskCAF.C:112
 AliCFSingleTrackTaskCAF.C:113
 AliCFSingleTrackTaskCAF.C:114
 AliCFSingleTrackTaskCAF.C:115
 AliCFSingleTrackTaskCAF.C:116
 AliCFSingleTrackTaskCAF.C:117
 AliCFSingleTrackTaskCAF.C:118
 AliCFSingleTrackTaskCAF.C:119
 AliCFSingleTrackTaskCAF.C:120
 AliCFSingleTrackTaskCAF.C:121
 AliCFSingleTrackTaskCAF.C:122
 AliCFSingleTrackTaskCAF.C:123
 AliCFSingleTrackTaskCAF.C:124
 AliCFSingleTrackTaskCAF.C:125
 AliCFSingleTrackTaskCAF.C:126
 AliCFSingleTrackTaskCAF.C:127
 AliCFSingleTrackTaskCAF.C:128
 AliCFSingleTrackTaskCAF.C:129
 AliCFSingleTrackTaskCAF.C:130
 AliCFSingleTrackTaskCAF.C:131
 AliCFSingleTrackTaskCAF.C:132
 AliCFSingleTrackTaskCAF.C:133
 AliCFSingleTrackTaskCAF.C:134
 AliCFSingleTrackTaskCAF.C:135
 AliCFSingleTrackTaskCAF.C:136
 AliCFSingleTrackTaskCAF.C:137
 AliCFSingleTrackTaskCAF.C:138
 AliCFSingleTrackTaskCAF.C:139
 AliCFSingleTrackTaskCAF.C:140
 AliCFSingleTrackTaskCAF.C:141
 AliCFSingleTrackTaskCAF.C:142
 AliCFSingleTrackTaskCAF.C:143
 AliCFSingleTrackTaskCAF.C:144
 AliCFSingleTrackTaskCAF.C:145
 AliCFSingleTrackTaskCAF.C:146
 AliCFSingleTrackTaskCAF.C:147
 AliCFSingleTrackTaskCAF.C:148
 AliCFSingleTrackTaskCAF.C:149
 AliCFSingleTrackTaskCAF.C:150
 AliCFSingleTrackTaskCAF.C:151
 AliCFSingleTrackTaskCAF.C:152
 AliCFSingleTrackTaskCAF.C:153
 AliCFSingleTrackTaskCAF.C:154
 AliCFSingleTrackTaskCAF.C:155
 AliCFSingleTrackTaskCAF.C:156
 AliCFSingleTrackTaskCAF.C:157
 AliCFSingleTrackTaskCAF.C:158
 AliCFSingleTrackTaskCAF.C:159
 AliCFSingleTrackTaskCAF.C:160
 AliCFSingleTrackTaskCAF.C:161
 AliCFSingleTrackTaskCAF.C:162
 AliCFSingleTrackTaskCAF.C:163
 AliCFSingleTrackTaskCAF.C:164
 AliCFSingleTrackTaskCAF.C:165
 AliCFSingleTrackTaskCAF.C:166
 AliCFSingleTrackTaskCAF.C:167
 AliCFSingleTrackTaskCAF.C:168
 AliCFSingleTrackTaskCAF.C:169
 AliCFSingleTrackTaskCAF.C:170
 AliCFSingleTrackTaskCAF.C:171
 AliCFSingleTrackTaskCAF.C:172
 AliCFSingleTrackTaskCAF.C:173
 AliCFSingleTrackTaskCAF.C:174
 AliCFSingleTrackTaskCAF.C:175
 AliCFSingleTrackTaskCAF.C:176
 AliCFSingleTrackTaskCAF.C:177
 AliCFSingleTrackTaskCAF.C:178
 AliCFSingleTrackTaskCAF.C:179
 AliCFSingleTrackTaskCAF.C:180
 AliCFSingleTrackTaskCAF.C:181
 AliCFSingleTrackTaskCAF.C:182
 AliCFSingleTrackTaskCAF.C:183
 AliCFSingleTrackTaskCAF.C:184
 AliCFSingleTrackTaskCAF.C:185
 AliCFSingleTrackTaskCAF.C:186
 AliCFSingleTrackTaskCAF.C:187
 AliCFSingleTrackTaskCAF.C:188
 AliCFSingleTrackTaskCAF.C:189
 AliCFSingleTrackTaskCAF.C:190
 AliCFSingleTrackTaskCAF.C:191
 AliCFSingleTrackTaskCAF.C:192
 AliCFSingleTrackTaskCAF.C:193
 AliCFSingleTrackTaskCAF.C:194
 AliCFSingleTrackTaskCAF.C:195
 AliCFSingleTrackTaskCAF.C:196
 AliCFSingleTrackTaskCAF.C:197
 AliCFSingleTrackTaskCAF.C:198
 AliCFSingleTrackTaskCAF.C:199
 AliCFSingleTrackTaskCAF.C:200
 AliCFSingleTrackTaskCAF.C:201
 AliCFSingleTrackTaskCAF.C:202
 AliCFSingleTrackTaskCAF.C:203
 AliCFSingleTrackTaskCAF.C:204
 AliCFSingleTrackTaskCAF.C:205
 AliCFSingleTrackTaskCAF.C:206
 AliCFSingleTrackTaskCAF.C:207
 AliCFSingleTrackTaskCAF.C:208
 AliCFSingleTrackTaskCAF.C:209
 AliCFSingleTrackTaskCAF.C:210
 AliCFSingleTrackTaskCAF.C:211
 AliCFSingleTrackTaskCAF.C:212
 AliCFSingleTrackTaskCAF.C:213
 AliCFSingleTrackTaskCAF.C:214
 AliCFSingleTrackTaskCAF.C:215
 AliCFSingleTrackTaskCAF.C:216
 AliCFSingleTrackTaskCAF.C:217
 AliCFSingleTrackTaskCAF.C:218
 AliCFSingleTrackTaskCAF.C:219
 AliCFSingleTrackTaskCAF.C:220
 AliCFSingleTrackTaskCAF.C:221
 AliCFSingleTrackTaskCAF.C:222
 AliCFSingleTrackTaskCAF.C:223
 AliCFSingleTrackTaskCAF.C:224
 AliCFSingleTrackTaskCAF.C:225
 AliCFSingleTrackTaskCAF.C:226
 AliCFSingleTrackTaskCAF.C:227
 AliCFSingleTrackTaskCAF.C:228
 AliCFSingleTrackTaskCAF.C:229
 AliCFSingleTrackTaskCAF.C:230
 AliCFSingleTrackTaskCAF.C:231
 AliCFSingleTrackTaskCAF.C:232
 AliCFSingleTrackTaskCAF.C:233
 AliCFSingleTrackTaskCAF.C:234
 AliCFSingleTrackTaskCAF.C:235
 AliCFSingleTrackTaskCAF.C:236
 AliCFSingleTrackTaskCAF.C:237
 AliCFSingleTrackTaskCAF.C:238
 AliCFSingleTrackTaskCAF.C:239
 AliCFSingleTrackTaskCAF.C:240
 AliCFSingleTrackTaskCAF.C:241