1 ///////////////////////////////////////////////////////////////////////////////
2 // Macro to setup AliPerformanceTask for
3 // TPC performance QA to run on PWGPP QA train.
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.
9 // By default 1 performance components are added to
11 // 1. AliPerformanceTPC (TPC cluster and track and event information)
12 // 2. AliPerformancedEdx (TPC dEdx information)
14 // Usage on the analysis train (default configuration):
15 // gSystem->Load("libANALYSIS");
16 // gSystem->Load("libANALYSISalice");
17 // gSystem->Load("libTPCcalib");
18 // gSystem->Load("libTender");
19 // gSystem->Load("libPWGPP");
21 // gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCPbPb.C");
22 // AliPerformanceTask *tpcQA = AddTaskPerformanceTPCPbPb("kFALSE","kTRUE","triggerClass");
25 // TPC.Performance.root file with TPC performance components is created.
27 // Each of the components contains THnSparse generic histograms which
28 // have to be analysed (post-analysis) by using Analyse() function.
29 // Each component contains such function.
31 //30.09.2010 - J.Otwinowski@gsi.de
32 ///////////////////////////////////////////////////////////////////////////////
34 //____________________________________________
35 AliPerformanceTask* AddTaskPerformanceTPCPbPb(Bool_t bUseMCInfo=kFALSE, Bool_t bUseESDfriend=kTRUE, const char *triggerClass=0)
38 // Add AliPerformanceTask with TPC performance components
40 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
42 Error("AddTaskPerformanceTPCPbPb","AliAnalysisManager not set!");
46 TString type = mgr->GetInputEventHandler()->GetDataType();
47 if (!type.Contains("ESD")) {
48 Error("AddTaskPerformanceTPCPbPb", "ESD input handler needed!");
52 AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
53 if (!mcH && bUseMCInfo) {
54 Error("AddTaskPerformanceTPCPbPb", "MC input handler needed!");
61 AliPerformanceTask *task = new AliPerformanceTask("PerformanceQA","TPC Performance");
63 Error("AddTaskPerformanceTPCPbPb", "TPC performance task cannot be created!");
66 task->SetUseMCInfo(bUseMCInfo);
67 task->SetUseESDfriend(bUseESDfriend);
69 task->SetUseTerminate(kFALSE);
71 task->SetUseCentrality(1); // 0=off,1=Vzero,2=SPD
77 // Add task to analysis manager
82 // Create TPC-ESD track reconstruction cuts
85 AliRecInfoCuts *pRecInfoCutsTPC = new AliRecInfoCuts();
87 pRecInfoCutsTPC->SetMaxDCAToVertexXY(3.0);
88 pRecInfoCutsTPC->SetMaxDCAToVertexZ(3.0);
89 pRecInfoCutsTPC->SetRequireSigmaToVertex(kFALSE);
90 pRecInfoCutsTPC->SetRequireTPCRefit(kFALSE);
91 pRecInfoCutsTPC->SetAcceptKinkDaughters(kTRUE);
92 pRecInfoCutsTPC->SetMinNClustersTPC(70);
93 pRecInfoCutsTPC->SetMaxChi2PerClusterTPC(1000000.);
94 pRecInfoCutsTPC->SetDCAToVertex2D(kFALSE);
96 pRecInfoCutsTPC->SetHistogramsOn(kFALSE);
99 Error("AddTaskPerformanceTPC", "AliRecInfoCutsTPC cannot be created!");
104 // Create TPC-MC track reconstruction cuts
106 AliMCInfoCuts *pMCInfoCuts = new AliMCInfoCuts();
108 pMCInfoCuts->SetMinTrackLength(70);
111 Error("AddTaskPerformanceTPC", "AliMCInfoCuts cannot be created!");
116 // Create performance objects for TPC and set cuts
118 enum { kTPC = 0, kTPCITS, kConstrained, kTPCInner, kTPCOuter, kTPCSec };
121 // TPC performance ------------------------------------------------------------------------------------
124 AliPerformanceTPC *pCompTPC0 = NULL;
125 AliPerformanceTPC *pCompTPCc0 = NULL;
126 AliPerformanceTPC *pCompTPCc1 = NULL;
127 AliPerformanceTPC *pCompTPCc2 = NULL;
129 if( !task->GetUseCentrality() ) {
131 pCompTPC0 = new AliPerformanceTPC("AliPerformanceTPC","AliPerformanceTPC",kTPC,kFALSE);
133 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceTPC");
135 pCompTPC0->SetAliRecInfoCuts(pRecInfoCutsTPC);
136 pCompTPC0->SetAliMCInfoCuts(pMCInfoCuts);
137 pCompTPC0->SetUseTrackVertex(kFALSE);
138 pCompTPC0->SetUseHLT(kFALSE);
141 pCompTPCc0 = new AliPerformanceTPC("AliPerformanceTPC",Form("AliPerformanceTPC_cent_%d",cent0),kTPC,kFALSE);
143 Error(Form("AddTaskPerformanceTPC_cent_%d",cent0), "Cannot create AliPerformanceTPC");
145 pCompTPCc0->SetAliRecInfoCuts(pRecInfoCutsTPC);
146 pCompTPCc0->SetAliMCInfoCuts(pMCInfoCuts);
147 pCompTPCc0->SetUseTrackVertex(kFALSE);
148 pCompTPCc0->SetUseHLT(kFALSE);
149 pCompTPCc0->SetUseCentralityBin(cent0);
151 pCompTPCc1 = new AliPerformanceTPC("AliPerformanceTPC",Form("AliPerformanceTPC_cent_%d",cent1),kTPC,kFALSE);
153 Error(Form("AddTaskPerformanceTPC_cent_%d",cent1), "Cannot create AliPerformanceTPC");
155 pCompTPCc1->SetAliRecInfoCuts(pRecInfoCutsTPC);
156 pCompTPCc1->SetAliMCInfoCuts(pMCInfoCuts);
157 pCompTPCc1->SetUseTrackVertex(kFALSE);
158 pCompTPCc1->SetUseHLT(kFALSE);
159 pCompTPCc1->SetUseCentralityBin(cent1);
161 pCompTPCc2 = new AliPerformanceTPC("AliPerformanceTPC",Form("AliPerformanceTPC_cent_%d",cent2),kTPC,kFALSE);
163 Error(Form("AddTaskPerformanceTPC_cent_%d",cent2), "Cannot create AliPerformanceTPC");
165 pCompTPCc2->SetAliRecInfoCuts(pRecInfoCutsTPC);
166 pCompTPCc2->SetAliMCInfoCuts(pMCInfoCuts);
167 pCompTPCc2->SetUseTrackVertex(kFALSE);
168 pCompTPCc2->SetUseHLT(kFALSE);
169 pCompTPCc2->SetUseCentralityBin(cent2);
173 // dEdx ------------------------------------------------------------------------------------
176 AliPerformanceDEdx *pCompDEdx0 = NULL;
177 AliPerformanceDEdx *pCompDEdxc0 = NULL;
178 AliPerformanceDEdx *pCompDEdxc1 = NULL;
179 AliPerformanceDEdx *pCompDEdxc2 = NULL;
181 if( !task->GetUseCentrality() ) {
182 pCompDEdx0 = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner","AliPerformanceDEdxTPCInner",kTPCInner,kFALSE);
184 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceDEdxTPCInner");
186 pCompDEdx0->SetAliRecInfoCuts(pRecInfoCutsTPC);
187 pCompDEdx0->SetAliMCInfoCuts(pMCInfoCuts);
188 pCompDEdx0->SetUseTrackVertex(kFALSE);
191 pCompDEdxc0 = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner",
192 Form("AliPerformanceDEdxTPCInner_cent_%d",cent0),kTPCInner,kFALSE);
194 Error(Form("AddTaskPerformanceTPC_cent_%d",cent0), "Cannot create AliPerformanceDEdxTPCInner");
196 pCompDEdxc0->SetAliRecInfoCuts(pRecInfoCutsTPC);
197 pCompDEdxc0->SetAliMCInfoCuts(pMCInfoCuts);
198 pCompDEdxc0->SetUseTrackVertex(kFALSE);
199 pCompDEdxc0->SetUseCentralityBin(cent0);
201 pCompDEdxc1 = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner",
202 Form("AliPerformanceDEdxTPCInner_cent_%d",cent1),kTPCInner,kFALSE);
204 Error(Form("AddTaskPerformanceTPC_cent_%d",cent1), "Cannot create AliPerformanceDEdxTPCInner");
206 pCompDEdxc1->SetAliRecInfoCuts(pRecInfoCutsTPC);
207 pCompDEdxc1->SetAliMCInfoCuts(pMCInfoCuts);
208 pCompDEdxc1->SetUseTrackVertex(kFALSE);
209 pCompDEdxc1->SetUseCentralityBin(cent1);
211 pCompDEdxc2 = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner",
212 Form("AliPerformanceDEdxTPCInner_cent_%d",cent2),kTPCInner,kFALSE);
214 Error(Form("AddTaskPerformanceTPC_cent_%d",cent2), "Cannot create AliPerformanceDEdxTPCInner");
216 pCompDEdxc2->SetAliRecInfoCuts(pRecInfoCutsTPC);
217 pCompDEdxc2->SetAliMCInfoCuts(pMCInfoCuts);
218 pCompDEdxc2->SetUseTrackVertex(kFALSE);
219 pCompDEdxc2->SetUseCentralityBin(cent2);
223 // Efficiency ------------------------------------------------------------------------------------
226 AliPerformanceEff *pCompEff0 = NULL;
227 AliPerformanceEff *pCompEffc0 = NULL;
228 AliPerformanceEff *pCompEffc1 = NULL;
229 AliPerformanceEff *pCompEffc2 = NULL;
231 if( !task->GetUseCentrality() ) {
232 pCompEff0 = new AliPerformanceEff("AliPerformanceEff", "AliPerformanceEff",kTPC,kFALSE);
234 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceEff");
236 pCompEff0->SetAliRecInfoCuts(pRecInfoCutsTPC);
237 pCompEff0->SetAliMCInfoCuts(pMCInfoCuts);
238 pCompEff0->SetUseTrackVertex(kFALSE);
239 pCompEff0->InitHighMult();
242 pCompEffc0 = new AliPerformanceEff("AliPerformanceEff", Form("AliPerformanceEff_cent_%d",cent0),kTPC,kFALSE);
244 Error(Form("AddTaskPerformanceTPC_cent_%d",cent0), "Cannot create AliPerformanceEff");
246 pCompEffc0->SetAliRecInfoCuts(pRecInfoCutsTPC);
247 pCompEffc0->SetAliMCInfoCuts(pMCInfoCuts);
248 pCompEffc0->SetUseTrackVertex(kFALSE);
249 pCompEffc0->InitHighMult();
250 pCompEffc0->SetUseCentralityBin(cent0);
252 pCompEffc1 = new AliPerformanceEff("AliPerformanceEff", Form("AliPerformanceEff_cent_%d",cent1),kTPC,kFALSE);
254 Error(Form("AddTaskPerformanceTPC_cent_%d",cent1), "Cannot create AliPerformanceEff");
256 pCompEffc1->SetAliRecInfoCuts(pRecInfoCutsTPC);
257 pCompEffc1->SetAliMCInfoCuts(pMCInfoCuts);
258 pCompEffc1->SetUseTrackVertex(kFALSE);
259 pCompEffc1->InitHighMult();
260 pCompEffc1->SetUseCentralityBin(cent1);
262 pCompEffc2 = new AliPerformanceEff("AliPerformanceEff", Form("AliPerformanceEff_cent_%d",cent2),kTPC,kFALSE);
264 Error(Form("AddTaskPerformanceTPC_cent_%d",cent2), "Cannot create AliPerformanceEff");
266 pCompEffc2->SetAliRecInfoCuts(pRecInfoCutsTPC);
267 pCompEffc2->SetAliMCInfoCuts(pMCInfoCuts);
268 pCompEffc2->SetUseTrackVertex(kFALSE);
269 pCompEffc2->InitHighMult();
270 pCompEffc2->SetUseCentralityBin(cent2);
274 // Resolution ------------------------------------------------------------------------------------
277 AliPerformanceRes *pCompRes0 = NULL;
278 AliPerformanceRes *pCompResc0 = NULL;
279 AliPerformanceRes *pCompResc1 = NULL;
280 AliPerformanceRes *pCompResc2 = NULL;
282 if( !task->GetUseCentrality() ) {
283 pCompRes0 = new AliPerformanceRes("AliPerformanceRes", "AliPerformanceRes",kTPC,kFALSE);
285 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceRes");
287 pCompRes0->SetAliRecInfoCuts(pRecInfoCutsTPC);
288 pCompRes0->SetAliMCInfoCuts(pMCInfoCuts);
289 pCompRes0->SetUseTrackVertex(kFALSE);
290 pCompRes0->InitHighMult();
293 pCompResc0 = new AliPerformanceRes("AliPerformanceRes", Form("AliPerformanceRes_cent_%d",cent0), kTPC, kFALSE);
295 Error(Form("AddTaskPerformanceTPC_cent_%d",cent0), "Cannot create AliPerformanceRes");
297 pCompResc0->SetAliRecInfoCuts(pRecInfoCutsTPC);
298 pCompResc0->SetAliMCInfoCuts(pMCInfoCuts);
299 pCompResc0->SetUseTrackVertex(kFALSE);
300 pCompResc0->InitHighMult();
301 pCompResc0->SetUseCentralityBin(cent0);
303 pCompResc1 = new AliPerformanceRes("AliPerformanceRes", Form("AliPerformanceRes_cent_%d",cent1), kTPC, kFALSE);
305 Error(Form("AddTaskPerformanceTPC_cent_%d",cent1), "Cannot create AliPerformanceRes");
307 pCompResc1->SetAliRecInfoCuts(pRecInfoCutsTPC);
308 pCompResc1->SetAliMCInfoCuts(pMCInfoCuts);
309 pCompResc1->SetUseTrackVertex(kFALSE);
310 pCompResc1->InitHighMult();
311 pCompResc1->SetUseCentralityBin(cent1);
314 pCompResc2 = new AliPerformanceRes("AliPerformanceRes", Form("AliPerformanceRes_cent_%d",cent2), kTPC, kFALSE);
316 Error(Form("AddTaskPerformanceTPC_cent_%d",cent2), "Cannot create AliPerformanceRes");
318 pCompResc2->SetAliRecInfoCuts(pRecInfoCutsTPC);
319 pCompResc2->SetAliMCInfoCuts(pMCInfoCuts);
320 pCompResc2->SetUseTrackVertex(kFALSE);
321 pCompResc2->InitHighMult();
322 pCompResc2->SetUseCentralityBin(cent2);
325 // ----------------------------------------------------------------------------------------------------------------------------
328 // Add components to the performance task ------------------------------------------------------------------------------------
330 if( !task->GetUseCentrality() ) {
331 task->AddPerformanceObject( pCompTPC0 );
332 task->AddPerformanceObject( pCompDEdx0 );
333 task->AddPerformanceObject( pCompEff0 );
334 task->AddPerformanceObject( pCompRes0 );
337 pCompTPC0->SetTriggerClass(triggerClass);
338 pCompDEdx0->SetTriggerClass(triggerClass);
339 pCompEff0->SetTriggerClass(triggerClass);
340 pCompRes0->SetTriggerClass(triggerClass);
344 task->AddPerformanceObject( pCompTPCc0 );
345 task->AddPerformanceObject( pCompTPCc1 );
346 task->AddPerformanceObject( pCompTPCc2 );
347 task->AddPerformanceObject( pCompDEdxc0 );
348 task->AddPerformanceObject( pCompDEdxc1 );
349 task->AddPerformanceObject( pCompDEdxc2 );
350 task->AddPerformanceObject( pCompEffc0 );
351 task->AddPerformanceObject( pCompEffc1 );
352 task->AddPerformanceObject( pCompEffc2 );
353 task->AddPerformanceObject( pCompResc0 );
354 task->AddPerformanceObject( pCompResc1 );
355 task->AddPerformanceObject( pCompResc2 );
358 pCompTPCc0->SetTriggerClass(triggerClass);
359 pCompDEdxc0->SetTriggerClass(triggerClass);
360 pCompTPCc1->SetTriggerClass(triggerClass);
361 pCompDEdxc1->SetTriggerClass(triggerClass);
362 pCompTPCc2->SetTriggerClass(triggerClass);
363 pCompDEdxc2->SetTriggerClass(triggerClass);
364 pCompEffc0->SetTriggerClass(triggerClass);
365 pCompEffc1->SetTriggerClass(triggerClass);
366 pCompEffc2->SetTriggerClass(triggerClass);
367 pCompResc0->SetTriggerClass(triggerClass);
368 pCompResc1->SetTriggerClass(triggerClass);
369 pCompResc2->SetTriggerClass(triggerClass);
374 // Create containers for input
376 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
379 // Create containers for output
381 AliAnalysisDataContainer *coutput_tpc = mgr->CreateContainer("TPCQA", TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s:TPC_%s", mgr->GetCommonFileName(), task->GetName()));
383 AliAnalysisDataContainer *coutput2_tpc = mgr->CreateContainer("TPCQASummary", TTree::Class(), AliAnalysisManager::kParamContainer, "trending.root:SummaryTPCQA");
385 mgr->ConnectOutput(task, 1, coutput_tpc);
386 mgr->ConnectOutput(task, 2, coutput2_tpc);