TENDER becomes Tender
[u/mrichter/AliRoot.git] / PWGPP / TPC / macros / AddTaskPerformanceTPCQA.C
1 ///////////////////////////////////////////////////////////////////////////////
2 // Macro to setup AliPerformanceTask for 
3 // TPC performance QA to run on PWGPP QA train. 
4 //
5 // Input: ESDs, ESDfriends (optional), Kinematics (optional), TrackRefs (optional)
6 // ESD and MC input handlers must be attached to AliAnalysisManager
7 // to run default configuration. 
8 //
9 // By default 1 performance components are added to 
10 // the task: 
11 // 1. AliPerformanceTPC (TPC cluster and track and event information)
12 //
13 // Usage on the analysis train (default configuration):
14 // gSystem->Load("libANALYSIS");
15 // gSystem->Load("libANALYSISalice");
16 // gSystem->Load("libTPCcalib.so");
17 // gSystem->Load("libTender.so");
18 // gSystem->Load("libPWGPP.so");
19 //
20 // gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceTPCQA.C");
21 // AliPerformanceTask *tpcQA = AddTaskPerformanceTPC("kFALSE","kTRUE","triggerClass"); 
22 // 
23 // Output:
24 // TPC.Performance.root file with TPC performance components is created.
25 //
26 // Each of the components contains THnSparse generic histograms which 
27 // have to be analysed (post-analysis) by using Analyse() function. 
28 // Each component contains such function.
29 //
30 //14.12.2009 -  J.Otwinowski@gsi.de
31 ///////////////////////////////////////////////////////////////////////////////
32
33 //____________________________________________
34 AliPerformanceTask* AddTaskPerformanceTPCQA(Bool_t bUseMCInfo=kFALSE, Bool_t bUseESDfriend=kTRUE, const char *triggerClass=0)
35 {
36   //
37   // Add AliPerformanceTask with TPC performance components
38   //
39   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
40   if(!mgr) { 
41     Error("AddTaskPerformanceTPC","AliAnalysisManager not set!");
42     return NULL;
43   }
44   
45   TString type = mgr->GetInputEventHandler()->GetDataType();
46   if (!type.Contains("ESD")) {
47     Error("AddTaskPerformanceTPC", "ESD input handler needed!");
48     return NULL;
49   }
50   
51   AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
52   if (!mcH && bUseMCInfo) {
53     Error("AddTaskPerformanceTPC", "MC input handler needed!");
54     return NULL;
55   }
56
57   //
58   // Create task
59   //
60   AliPerformanceTask *task = new AliPerformanceTask("PerformanceQA","TPC Performance");
61   if (!task) {
62     Error("AddTaskPerformanceTPC", "TPC performance task cannot be created!");
63     return NULL;
64   }
65   task->SetUseMCInfo(bUseMCInfo);
66   task->SetUseESDfriend(bUseESDfriend);
67   task->SelectCollisionCandidates();
68
69   //
70   // Add task to analysis manager
71   //
72   mgr->AddTask(task);
73
74   //
75   // Create TPC-ESD track reconstruction cuts
76   // MB tracks
77   //
78   AliRecInfoCuts *pRecInfoCutsTPC = new AliRecInfoCuts(); 
79   if(pRecInfoCutsTPC) {
80     pRecInfoCutsTPC->SetMaxDCAToVertexXY(3.0);
81     pRecInfoCutsTPC->SetMaxDCAToVertexZ(3.0);
82     pRecInfoCutsTPC->SetRequireSigmaToVertex(kFALSE);
83     pRecInfoCutsTPC->SetRequireTPCRefit(kFALSE);
84     pRecInfoCutsTPC->SetAcceptKinkDaughters(kTRUE);
85     pRecInfoCutsTPC->SetMinNClustersTPC(70);
86     pRecInfoCutsTPC->SetMaxChi2PerClusterTPC(1000000.);
87     pRecInfoCutsTPC->SetDCAToVertex2D(kFALSE);
88
89     pRecInfoCutsTPC->SetHistogramsOn(kFALSE); 
90   } 
91   else {
92     Error("AddTaskPerformanceTPC", "AliRecInfoCutsTPC cannot be created!");
93     return NULL;
94   }
95
96   //
97   // Create TPC-MC track reconstruction cuts
98   //
99   AliMCInfoCuts  *pMCInfoCuts = new AliMCInfoCuts();
100   if(pMCInfoCuts) {
101     pMCInfoCuts->SetMinTrackLength(70);
102   } 
103   else {
104     Error("AddTaskPerformanceTPC", "AliMCInfoCuts cannot be created!");
105     return NULL;
106   }
107
108   //
109   // Create performance objects for TPC and set cuts 
110   //
111   enum { kTPC = 0};
112
113   //
114   // TPC performance
115   //
116   AliPerformanceTPC *pCompTPC0 = new AliPerformanceTPC("AliPerformanceTPC","AliPerformanceTPC",kTPC,kFALSE); 
117   if(!pCompTPC0) {
118     Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceTPC");
119   }
120   pCompTPC0->SetAliRecInfoCuts(pRecInfoCutsTPC);
121   pCompTPC0->SetAliMCInfoCuts(pMCInfoCuts);
122
123   //
124   // Add components to the performance task
125   //
126   if(!bUseMCInfo) pCompTPC0->SetTriggerClass(triggerClass);
127   task->AddPerformanceObject( pCompTPC0 );
128
129   //
130   // Create containers for input
131   //
132   mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
133
134   //
135   // Create containers for output
136   //
137   AliAnalysisDataContainer *coutput_tpc = mgr->CreateContainer("TPCQA", TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:TPC_%s", mgr->GetCommonFileName(), task->GetName()));
138   mgr->ConnectOutput(task, 1, coutput_tpc);
139
140 return task;  
141 }