ROOT logo
///////////////////////////////////////////////////////////////////////////////
// Macro to setup AliPerformanceTask for 
// TPC performance QA to run on PWGPP QA train. 
//
// Input: ESDs, ESDfriends (optional), Kinematics (optional), TrackRefs (optional)
// ESD and MC input handlers must be attached to AliAnalysisManager
// to run default configuration. 
//
// By default 1 performance components are added to 
// the task: 
// 1. AliPerformanceTPC (TPC cluster and track and event information)
//
// Usage on the analysis train (default configuration):
// gSystem->Load("libANALYSIS");
// gSystem->Load("libANALYSISalice");
// gSystem->Load("libTPCcalib.so");
// gSystem->Load("libTENDER.so");
// gSystem->Load("libPWGPP.so");
//
// gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceTPCQA.C");
// AliPerformanceTask *tpcQA = AddTaskPerformanceTPC("kFALSE","kTRUE","triggerClass"); 
// 
// Output:
// TPC.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.
//
//14.12.2009 -  J.Otwinowski@gsi.de
///////////////////////////////////////////////////////////////////////////////

//____________________________________________
AliPerformanceTask* AddTaskPerformanceTPCQA(Bool_t bUseMCInfo=kFALSE, Bool_t bUseESDfriend=kTRUE, const char *triggerClass=0)
{
  //
  // Add AliPerformanceTask with TPC performance components
  //
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if(!mgr) { 
    Error("AddTaskPerformanceTPC","AliAnalysisManager not set!");
    return NULL;
  }
  
  TString type = mgr->GetInputEventHandler()->GetDataType();
  if (!type.Contains("ESD")) {
    Error("AddTaskPerformanceTPC", "ESD input handler needed!");
    return NULL;
  }
  
  AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
  if (!mcH && bUseMCInfo) {
    Error("AddTaskPerformanceTPC", "MC input handler needed!");
    return NULL;
  }

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

  //
  // Add task to analysis manager
  //
  mgr->AddTask(task);

  //
  // Create TPC-ESD track reconstruction cuts
  // MB tracks
  //
  AliRecInfoCuts *pRecInfoCutsTPC = new AliRecInfoCuts(); 
  if(pRecInfoCutsTPC) {
    pRecInfoCutsTPC->SetMaxDCAToVertexXY(3.0);
    pRecInfoCutsTPC->SetMaxDCAToVertexZ(3.0);
    pRecInfoCutsTPC->SetRequireSigmaToVertex(kFALSE);
    pRecInfoCutsTPC->SetRequireTPCRefit(kFALSE);
    pRecInfoCutsTPC->SetAcceptKinkDaughters(kTRUE);
    pRecInfoCutsTPC->SetMinNClustersTPC(70);
    pRecInfoCutsTPC->SetMaxChi2PerClusterTPC(1000000.);
    pRecInfoCutsTPC->SetDCAToVertex2D(kFALSE);

    pRecInfoCutsTPC->SetHistogramsOn(kFALSE); 
  } 
  else {
    Error("AddTaskPerformanceTPC", "AliRecInfoCutsTPC cannot be created!");
    return NULL;
  }

  //
  // Create TPC-MC track reconstruction cuts
  //
  AliMCInfoCuts  *pMCInfoCuts = new AliMCInfoCuts();
  if(pMCInfoCuts) {
    pMCInfoCuts->SetMinTrackLength(70);
  } 
  else {
    Error("AddTaskPerformanceTPC", "AliMCInfoCuts cannot be created!");
    return NULL;
  }

  //
  // Create performance objects for TPC and set cuts 
  //
  enum { kTPC = 0};

  //
  // TPC performance
  //
  AliPerformanceTPC *pCompTPC0 = new AliPerformanceTPC("AliPerformanceTPC","AliPerformanceTPC",kTPC,kFALSE); 
  if(!pCompTPC0) {
    Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceTPC");
  }
  pCompTPC0->SetAliRecInfoCuts(pRecInfoCutsTPC);
  pCompTPC0->SetAliMCInfoCuts(pMCInfoCuts);

  //
  // Add components to the performance task
  //
  if(!bUseMCInfo) pCompTPC0->SetTriggerClass(triggerClass);
  task->AddPerformanceObject( pCompTPC0 );

  //
  // Create containers for input
  //
  mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());

  //
  // Create containers for output
  //
  AliAnalysisDataContainer *coutput_tpc = mgr->CreateContainer("TPCQA", TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:TPC_%s", mgr->GetCommonFileName(), task->GetName()));
  mgr->ConnectOutput(task, 1, coutput_tpc);

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