ROOT logo
AliAnalysisTaskEfficiency * AddTaskEfficiency(Int_t runNumber)

{
  // Creates a QA task exploiting simple symmetries phi, eta +/-, charge ...
  
  // Get the pointer to the existing analysis manager via the static access method.
  //==============================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskEfficiency", "No analysis manager to connect to.");
    return NULL;
  }  
  
  // Check the analysis type using the event handlers connected to the analysis manager.
  //==============================================================================
  if (!mgr->GetInputEventHandler()) {
    ::Error("AddTaskEfficiency", "This task requires an input event handler");
    return NULL;
  }
   
  TString inputDataType = mgr->GetInputEventHandler()->GetDataType(); 
  // can be "ESD" or "AOD"
  
  // Configure analysis
  //===========================================================================
  
  //TASKS
  //Task for global tracks
  AliAnalysisTaskEfficiency *task0 = 
    new AliAnalysisTaskEfficiency("AliAnalysisTaskEfficiency_Global");
  task0->SelectCollisionCandidates(); // default setting: kMB = min bias trigger
  task0->SetTrackType(0);// global tracks

  // Task for ITS tracks
  AliAnalysisTaskEfficiency *task1 = 
    new AliAnalysisTaskEfficiency("AliAnalysisTaskEfficiency_ITS");
  task1->SelectCollisionCandidates();
  task1->SetTrackType(1);// ITS tracks

  //Task for ITS_SA tracks
  AliAnalysisTaskEfficiency *task1sa = 
    new AliAnalysisTaskEfficiency("AliAnalysisTaskEfficiency_ITS_SA");
  task1sa->SelectCollisionCandidates();
  task1sa->SetTrackType(1);// ITS tracks
   
  //Task for TPC tracks 
  AliAnalysisTaskEfficiency *task2 = 
    new AliAnalysisTaskEfficiency("AliAnalysisTaskEfficiency_TPC");
  task2->SelectCollisionCandidates();
  task2->SetTrackType(2);// TPC only tracks
 
  //CUTS
  //cuts for global tracks
  AliESDtrackCuts* esdTrackCutsL0 = new AliESDtrackCuts("AliESDtrackCuts0","Global");
  esdTrackCutsL0->SetMinNClustersTPC(70);
  esdTrackCutsL0->SetRequireTPCRefit(kTRUE);
  esdTrackCutsL0->SetRequireITSRefit(kTRUE);
  esdTrackCutsL0->SetMaxDCAToVertexXY(3.);
  esdTrackCutsL0->SetMaxDCAToVertexZ(3.);
  esdTrackCutsL0->SetAcceptKinkDaughters(kFALSE);
   
  //cuts for ITS tracks
  AliESDtrackCuts* esdTrackCutsL1 = new AliESDtrackCuts("AliESDtrackCuts1","ITS");
  esdTrackCutsL1->SetMaxDCAToVertexXY(3.);
  esdTrackCutsL1->SetMaxDCAToVertexZ(3.);
  esdTrackCutsL1->SetAcceptKinkDaughters(kFALSE);
  esdTrackCutsL1->SetRequireITSRefit(kTRUE);
  esdTrackCutsL1->SetRequireITSStandAlone(kTRUE); 

  //cuts for ITS tracks SA
  AliESDtrackCuts* esdTrackCutsL1sa = new AliESDtrackCuts("AliESDtrackCuts1sa","ITS_SA");
  esdTrackCutsL1sa->SetMaxDCAToVertexXY(3.);
  esdTrackCutsL1sa->SetMaxDCAToVertexZ(3.);
  esdTrackCutsL1sa->SetAcceptKinkDaughters(kFALSE);
  esdTrackCutsL1sa->SetRequireITSRefit(kTRUE);
  esdTrackCutsL1sa->SetRequireITSPureStandAlone(kTRUE);
   
  //cuts for TPC tracks
  AliESDtrackCuts* esdTrackCutsL2 = new AliESDtrackCuts("AliESDtrackCuts2","TPC");
  esdTrackCutsL2->SetRequireTPCRefit(kFALSE);
  esdTrackCutsL2->SetAcceptKinkDaughters(kFALSE);
  //jacek's cuts:
  esdTrackCutsL2->SetMinNClustersTPC(70);
  // cut on max ncl=160 in Task
  esdTrackCutsL2->SetMaxDCAToVertexXY(3.);
  esdTrackCutsL2->SetMaxDCAToVertexZ(3.);
  esdTrackCutsL2->SetMaxChi2PerClusterTPC(3.999);
  //cut minChi=0 in task
  //esdTrackCutsL2->SetPRange(0.15,16); // not needed for QA
  //esdTrackCutsL2->SetEtaRange(-0.8, 0.7999); // not needed for QA
  //cuts for ITS tracks
  
  //add cuts to tasks
  task0->SetCuts(esdTrackCutsL0);
  task1->SetCuts(esdTrackCutsL1);
  task1sa->SetCuts(esdTrackCutsL1sa);
  task2->SetCuts(esdTrackCutsL2);

  // add tasks to manager
  mgr->AddTask(task0);
  mgr->AddTask(task1);
  mgr->AddTask(task1sa);
  mgr->AddTask(task2);
     
  //output container for tasks
  AliAnalysisDataContainer *cout0    = 0;
  AliAnalysisDataContainer *cout1    = 0;
  AliAnalysisDataContainer *cout1sa  = 0;
  AliAnalysisDataContainer *cout2    = 0;

   
  if(runNumber>0){ 
    cout0   =  mgr->CreateContainer("QAHists_Global",TList::Class(),
				    AliAnalysisManager::kOutputContainer, 
				    Form("run%d.root",runNumber));
    cout1   =  mgr->CreateContainer("QAHists_ITS",TList::Class(),
				    AliAnalysisManager::kOutputContainer,
				    Form("run%d.root",runNumber));
    cout1sa =  mgr->CreateContainer("QAHists_ITS_SA",TList::Class(),
				    AliAnalysisManager::kOutputContainer, 
				    Form("run%d.root",runNumber));
    cout2   =  mgr->CreateContainer("QAHists_TPC",TList::Class(),
				    AliAnalysisManager::kOutputContainer, 
				    Form("run%d.root",runNumber));
  }
   
  else{
    cout0   = mgr->CreateContainer("QAHists_Global",TList::Class(),
				   AliAnalysisManager::kOutputContainer, 
				   Form("%s:QAHists",AliAnalysisManager::
					GetCommonFileName()));
    cout1   = mgr->CreateContainer("QAHists_ITS",TList::Class(),
				   AliAnalysisManager::kOutputContainer, 
				   Form("%s:QAHists",AliAnalysisManager::
					GetCommonFileName()));
    cout1sa = mgr->CreateContainer("QAHists_ITS_SA",TList::Class(),
				   AliAnalysisManager::kOutputContainer, 
				   Form("%s:QAHists",AliAnalysisManager::
					GetCommonFileName()));
    cout2   = mgr->CreateContainer("QAHists_TPC",TList::Class(),
				   AliAnalysisManager::kOutputContainer, 
				   Form("%s:QAHists",AliAnalysisManager::
					GetCommonFileName()));
  }
  
  //connect input to task
  mgr->ConnectInput  (task0,   0, mgr->GetCommonInputContainer());
  mgr->ConnectInput  (task1,   0, mgr->GetCommonInputContainer());
  mgr->ConnectInput  (task1sa, 0, mgr->GetCommonInputContainer());
  mgr->ConnectInput  (task2,   0, mgr->GetCommonInputContainer());

  //connect output to task
  mgr->ConnectOutput (task0,   1, cout0);
  mgr->ConnectOutput (task1,   1, cout1);
  mgr->ConnectOutput (task1sa, 1, cout1sa);
  mgr->ConnectOutput (task2,   1, cout2);

  
  return task0;

}


 AddTaskEfficiency.C:1
 AddTaskEfficiency.C:2
 AddTaskEfficiency.C:3
 AddTaskEfficiency.C:4
 AddTaskEfficiency.C:5
 AddTaskEfficiency.C:6
 AddTaskEfficiency.C:7
 AddTaskEfficiency.C:8
 AddTaskEfficiency.C:9
 AddTaskEfficiency.C:10
 AddTaskEfficiency.C:11
 AddTaskEfficiency.C:12
 AddTaskEfficiency.C:13
 AddTaskEfficiency.C:14
 AddTaskEfficiency.C:15
 AddTaskEfficiency.C:16
 AddTaskEfficiency.C:17
 AddTaskEfficiency.C:18
 AddTaskEfficiency.C:19
 AddTaskEfficiency.C:20
 AddTaskEfficiency.C:21
 AddTaskEfficiency.C:22
 AddTaskEfficiency.C:23
 AddTaskEfficiency.C:24
 AddTaskEfficiency.C:25
 AddTaskEfficiency.C:26
 AddTaskEfficiency.C:27
 AddTaskEfficiency.C:28
 AddTaskEfficiency.C:29
 AddTaskEfficiency.C:30
 AddTaskEfficiency.C:31
 AddTaskEfficiency.C:32
 AddTaskEfficiency.C:33
 AddTaskEfficiency.C:34
 AddTaskEfficiency.C:35
 AddTaskEfficiency.C:36
 AddTaskEfficiency.C:37
 AddTaskEfficiency.C:38
 AddTaskEfficiency.C:39
 AddTaskEfficiency.C:40
 AddTaskEfficiency.C:41
 AddTaskEfficiency.C:42
 AddTaskEfficiency.C:43
 AddTaskEfficiency.C:44
 AddTaskEfficiency.C:45
 AddTaskEfficiency.C:46
 AddTaskEfficiency.C:47
 AddTaskEfficiency.C:48
 AddTaskEfficiency.C:49
 AddTaskEfficiency.C:50
 AddTaskEfficiency.C:51
 AddTaskEfficiency.C:52
 AddTaskEfficiency.C:53
 AddTaskEfficiency.C:54
 AddTaskEfficiency.C:55
 AddTaskEfficiency.C:56
 AddTaskEfficiency.C:57
 AddTaskEfficiency.C:58
 AddTaskEfficiency.C:59
 AddTaskEfficiency.C:60
 AddTaskEfficiency.C:61
 AddTaskEfficiency.C:62
 AddTaskEfficiency.C:63
 AddTaskEfficiency.C:64
 AddTaskEfficiency.C:65
 AddTaskEfficiency.C:66
 AddTaskEfficiency.C:67
 AddTaskEfficiency.C:68
 AddTaskEfficiency.C:69
 AddTaskEfficiency.C:70
 AddTaskEfficiency.C:71
 AddTaskEfficiency.C:72
 AddTaskEfficiency.C:73
 AddTaskEfficiency.C:74
 AddTaskEfficiency.C:75
 AddTaskEfficiency.C:76
 AddTaskEfficiency.C:77
 AddTaskEfficiency.C:78
 AddTaskEfficiency.C:79
 AddTaskEfficiency.C:80
 AddTaskEfficiency.C:81
 AddTaskEfficiency.C:82
 AddTaskEfficiency.C:83
 AddTaskEfficiency.C:84
 AddTaskEfficiency.C:85
 AddTaskEfficiency.C:86
 AddTaskEfficiency.C:87
 AddTaskEfficiency.C:88
 AddTaskEfficiency.C:89
 AddTaskEfficiency.C:90
 AddTaskEfficiency.C:91
 AddTaskEfficiency.C:92
 AddTaskEfficiency.C:93
 AddTaskEfficiency.C:94
 AddTaskEfficiency.C:95
 AddTaskEfficiency.C:96
 AddTaskEfficiency.C:97
 AddTaskEfficiency.C:98
 AddTaskEfficiency.C:99
 AddTaskEfficiency.C:100
 AddTaskEfficiency.C:101
 AddTaskEfficiency.C:102
 AddTaskEfficiency.C:103
 AddTaskEfficiency.C:104
 AddTaskEfficiency.C:105
 AddTaskEfficiency.C:106
 AddTaskEfficiency.C:107
 AddTaskEfficiency.C:108
 AddTaskEfficiency.C:109
 AddTaskEfficiency.C:110
 AddTaskEfficiency.C:111
 AddTaskEfficiency.C:112
 AddTaskEfficiency.C:113
 AddTaskEfficiency.C:114
 AddTaskEfficiency.C:115
 AddTaskEfficiency.C:116
 AddTaskEfficiency.C:117
 AddTaskEfficiency.C:118
 AddTaskEfficiency.C:119
 AddTaskEfficiency.C:120
 AddTaskEfficiency.C:121
 AddTaskEfficiency.C:122
 AddTaskEfficiency.C:123
 AddTaskEfficiency.C:124
 AddTaskEfficiency.C:125
 AddTaskEfficiency.C:126
 AddTaskEfficiency.C:127
 AddTaskEfficiency.C:128
 AddTaskEfficiency.C:129
 AddTaskEfficiency.C:130
 AddTaskEfficiency.C:131
 AddTaskEfficiency.C:132
 AddTaskEfficiency.C:133
 AddTaskEfficiency.C:134
 AddTaskEfficiency.C:135
 AddTaskEfficiency.C:136
 AddTaskEfficiency.C:137
 AddTaskEfficiency.C:138
 AddTaskEfficiency.C:139
 AddTaskEfficiency.C:140
 AddTaskEfficiency.C:141
 AddTaskEfficiency.C:142
 AddTaskEfficiency.C:143
 AddTaskEfficiency.C:144
 AddTaskEfficiency.C:145
 AddTaskEfficiency.C:146
 AddTaskEfficiency.C:147
 AddTaskEfficiency.C:148
 AddTaskEfficiency.C:149
 AddTaskEfficiency.C:150
 AddTaskEfficiency.C:151
 AddTaskEfficiency.C:152
 AddTaskEfficiency.C:153
 AddTaskEfficiency.C:154
 AddTaskEfficiency.C:155
 AddTaskEfficiency.C:156
 AddTaskEfficiency.C:157
 AddTaskEfficiency.C:158
 AddTaskEfficiency.C:159
 AddTaskEfficiency.C:160
 AddTaskEfficiency.C:161
 AddTaskEfficiency.C:162
 AddTaskEfficiency.C:163
 AddTaskEfficiency.C:164