ROOT logo
///////////////////////////////////////////////////////////////////////////////
// Macro to setup AliPerformanceTask for 
// TPC performance QA to run on PWGPP QA train. 
//
// By default 1 performance component is added to 
// the task: 
// 1. AliPerformancePtCalib
// or AliPerformancePtCalibMC if bUseMCinfo = kTRUE (use MC info)

// Usage on the analysis train (default configuration):
// gSystem->Load("libANALYSIS");
// gSystem->Load("libANALYSISalice");
// gSystem->Load("libTPCcalib.so");
// gSystem->Load("libPWGPP.so");
//
// gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceTPCPtCalib.C");
// AliPerformanceTask *tpcQA = AddTaskPerformanceTPCPtCalib("kTRUE","kTRUE","CINT1B-ABCE-NOPF-ALL"); 
// 
// Output:
// TPCPtCalib.Performance.root file with TPC performance components is created.
//
// Each of the components contains THnSparse generic histograms which 
// have to be analysed (post-analysis) by using Analyse() function. 
// Each component contains such function.
//
// June 2010 -  Simone Schuchmann sschuchm@ikf.uni-frankfurt.de
///////////////////////////////////////////////////////////////////////////////

//____________________________________________
AliPerformanceTask* AddTaskPerformanceTPCPtCalib(Bool_t bUseMCInfo=kFALSE, Bool_t bUseESDfriend=kFALSE, const char *triggerClass=0)
{

//
  // Create physics trigger selection class
  //
    AliPhysicsSelection *physTrigSel =  new AliPhysicsSelection();
  
  //
  // Add AliPerformanceTask with TPC performance components
  //
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if(!mgr) { 
     Error("AddTaskPerformanceTPCPtCalib","AliAnalysisManager not set!");
    return NULL;
  }
  
  TString type = mgr->GetInputEventHandler()->GetDataType();
  if (!type.Contains("ESD")) {
     Error("AddTaskPerformanceTPCPtCalib", "ESD input handler needed!");
    return NULL;
  }
  
  AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
  if (!mcH && bUseMCInfo) {
    Error("AddTaskPerformanceTPCPtCalib", "MC input handler needed!");
    return NULL;
  }

  //
  // Create task
  //
  AliPerformanceTask *task = new AliPerformanceTask("TPCPerformanceInvPt","TPC Performance PtCalib");
  if (!task) {
    Error("AddTaskPerformanceTPCPtCalib", "TPC performance task cannot be created!");
    return NULL;
  }
  task->SetUseMCInfo(bUseMCInfo);
  task->SetUseESDfriend(kFALSE);
  task->SelectCollisionCandidates();

  //
  // Add physics selection task to analysis manager
  //
  //    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  //    AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
  //    mgr->AddTask(physSelTask);

  mgr->AddTask(task);

  //
  // Create TPC-ESD track reconstruction cuts
  //
  AliRecInfoCuts *pRecInfoCuts = new AliRecInfoCuts(); 
  if(pRecInfoCuts) {
    pRecInfoCuts->SetMaxDCAToVertexXY(3.0);
    pRecInfoCuts->SetMaxDCAToVertexZ(3.0);
    pRecInfoCuts->SetMinNClustersTPC(50);
    pRecInfoCuts->SetMinNClustersITS(2);
    pRecInfoCuts->SetHistogramsOn(kFALSE); 
  } 
  else {
    Error("AddTaskPerformanceTPCPtCalib", "AliRecInfoCuts cannot be created!");
    return NULL;
  }
  //
  // Create TPC-MC track reconstruction cuts
  //
  AliMCInfoCuts  *pMCInfoCuts = new AliMCInfoCuts();
  if(pMCInfoCuts) {
    pMCInfoCuts->SetMinTrackLength(70);
  } 
  else {
    Error("AddTaskPerformanceTPCPtCalib", "AliMCInfoCuts cannot be created!");
    return NULL;
  }

  //
  // Create performance objects for TPC and set cuts 
  //
  enum { kTPC = 0, kTPCITS, kConstrained, kTPCInner, kTPCOuter, kTPCSec };



  AliPerformancePtCalib *ptCalib =  NULL;
  AliPerformancePtCalibMC *ptCalibMC = NULL;

  if(bUseMCInfo){
     ptCalibMC = new AliPerformancePtCalibMC("AliPerformancePtCalibMC","AliPerformancePtCalibMC");
     if(!ptCalibMC) {
	Error("AddTaskPerformanceTPCPtCalib", "Cannot create AliPerformancePtCalibMC");
     }
     // physTrigSel->SetAnalyzeMC();
     // ptCalibMC->SetPhysicsTriggerSelection(physTrigSel); 
     ptCalibMC->SetAliRecInfoCuts(pRecInfoCuts);
     ptCalibMC->SetReadTPCTracks(kTRUE);  
     AliESDtrackCuts* esdtrackCuts = new AliESDtrackCuts("AliESDtrackCutsPtMC");
     esdtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(kTRUE);
     ptCalibMC->SetAliESDtrackCuts(esdtrackCuts);
     //ptCalibMC->SetEtaRange(0.9);
  }
  else{

     ptCalib =  new AliPerformancePtCalib("AliPerformancePtCalib","AliPerformancePtCalib");
     if(!ptCalib) {
	Error("AddTaskPerformanceTPCPtCalib", "Cannot create AliPerformancePtCalib");
     }
     ptCalib->SetAliRecInfoCuts(pRecInfoCuts);
     ptCalib->SetReadTPCTracks(kTRUE);  
     ptCalib->SetEtaRange(0.8);
     // ptCalib->SetAliMCInfoCuts(pMCInfoCut);

     //if(triggerClass) ptCalib->SetTriggerClass(triggerClass);
     //ptCalib->SetPhysicsTriggerSelection(physTrigSel);
     //ptCalib->SetTrigger(AliTriggerAnalysis::kMB1);
     AliESDtrackCuts* esdtrackCuts = new AliESDtrackCuts("AliESDtrackCutsPt");
     esdtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(kTRUE);
     ptCalib->SetAliESDtrackCuts(esdtrackCuts);
      
  }
  
  // add components to the performance task
  
  if(bUseMCInfo) task->AddPerformanceObject(ptCalibMC);
  else task->AddPerformanceObject(ptCalib);
  
  // Create containers for input
  //
  mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
  
  //
  // Create containers for output
  //
  AliAnalysisDataContainer *coutput_tpcptcalib = mgr->CreateContainer("TPCPtCalib", TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s.Performance.root", task->GetName()));
  mgr->ConnectOutput(task, 1, coutput_tpcptcalib);

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