1 ///////////////////////////////////////////////////////////////////////////////
2 // Macro to setup AliPerformanceTask for
3 // TPC performance QA to run on PWG1 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 7 performance components are added to
11 // 1. AliPerformanceRes (TPC track resolution w.r.t MC at DCA)
12 // 2. AliPerformanceResTPCInner (TPC track resolution w.r.t MC at inner TPC wall)
13 // 3. AliPerformanceResTPCOuter (TPC track resolution w.r.t MC at outer TPC wall)
14 // 4. AliPerformanceEff (TPC track reconstruction efficiency, MC primaries)
15 // 5. AliPerformanceDEdxTPCInner (TPC dEdx response - track parameters at TPC inner wall)
16 // 6. AliPerformanceDCA (TPC impact parameters resolution at DCA)
17 // 7. AliPerformanceTPC (TPC cluster and track and event information)
18 // 8. AliPerformanceMatch (TPC and ITS/TRD matching and TPC eff w.r.t ITS)
20 // Usage on the analysis train (default configuration):
21 // gSystem->Load("libANALYSIS");
22 // gSystem->Load("libANALYSISalice");
23 // gSystem->Load("libTPCcalib.so");
24 // gSystem->Load("libTENDER.so");
25 // gSystem->Load("libPWG1.so");
27 // gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTaskPerformanceTPC.C");
28 // AliPerformanceTask *tpcQA = AddTaskPerformanceTPC("kTRUE","kTRUE","triggerClass");
31 // TPC.Performance.root file with TPC performance components is created.
33 // Each of the components contains THnSparse generic histograms which
34 // have to be analysed (post-analysis) by using Analyse() function.
35 // Each component contains such function.
37 //13.10.2009 - J.Otwinowski@gsi.de
38 ///////////////////////////////////////////////////////////////////////////////
40 //____________________________________________
41 AliPerformanceTask* AddTaskPerformanceTPC(Bool_t bUseMCInfo=kFALSE, Bool_t bUseESDfriend=kTRUE, const char *triggerClass=0)
44 // Add AliPerformanceTask with TPC performance components
46 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
48 Error("AddTaskPerformanceTPC","AliAnalysisManager not set!");
52 TString type = mgr->GetInputEventHandler()->GetDataType();
53 if (!type.Contains("ESD")) {
54 Error("AddTaskPerformanceTPC", "ESD input handler needed!");
58 AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
59 if (!mcH && bUseMCInfo) {
60 Error("AddTaskPerformanceTPC", "MC input handler needed!");
67 AliPerformanceTask *task = new AliPerformanceTask("Performance","TPC Performance");
69 Error("AddTaskPerformanceTPC", "TPC performance task cannot be created!");
72 task->SetUseMCInfo(bUseMCInfo);
73 task->SetUseESDfriend(bUseESDfriend);
76 // Add task to analysis manager
81 // Create TPC-ESD track reconstruction cuts
84 AliRecInfoCuts *pRecInfoCutsTPC = new AliRecInfoCuts();
86 pRecInfoCutsTPC->SetMaxDCAToVertexXY(3.0);
87 pRecInfoCutsTPC->SetMaxDCAToVertexZ(30.0);
88 //pRecInfoCutsTPC->SetMaxDCAToVertexZ(3.0);
89 pRecInfoCutsTPC->SetRequireSigmaToVertex(kFALSE);
90 pRecInfoCutsTPC->SetRequireTPCRefit(kFALSE);
91 pRecInfoCutsTPC->SetAcceptKinkDaughters(kTRUE);
92 pRecInfoCutsTPC->SetMinNClustersTPC(50);
93 pRecInfoCutsTPC->SetMaxChi2PerClusterTPC(1000000.);
94 pRecInfoCutsTPC->SetDCAToVertex2D(kFALSE);
96 pRecInfoCutsTPC->SetHistogramsOn(kFALSE);
99 Error("AddTaskPerformanceTPC", "AliRecInfoCutsTPC cannot be created!");
104 // Create TPC-ESD track reconstruction cuts
107 AliRecInfoCuts *pRecInfoCutsMATCH = new AliRecInfoCuts();
108 if(pRecInfoCutsMATCH) {
109 pRecInfoCutsMATCH->SetMaxDCAToVertexXY(3.0);
110 pRecInfoCutsMATCH->SetMaxDCAToVertexZ(3.0);
111 pRecInfoCutsMATCH->SetRequireSigmaToVertex(kFALSE);
112 pRecInfoCutsMATCH->SetRequireTPCRefit(kFALSE);
113 pRecInfoCutsMATCH->SetAcceptKinkDaughters(kTRUE);
114 pRecInfoCutsMATCH->SetMinNClustersTPC(50);
115 pRecInfoCutsMATCH->SetMaxChi2PerClusterTPC(1000000.);
116 pRecInfoCutsMATCH->SetDCAToVertex2D(kFALSE);
117 pRecInfoCutsMATCH->SetTPCITSMatchingRadius(70);
118 pRecInfoCutsMATCH->SetTPCTRDMatchingRadius(260);
119 pRecInfoCutsMATCH->SetMinNClustersITS(3);
121 pRecInfoCutsMATCH->SetHistogramsOn(kFALSE);
124 Error("AddTaskPerformanceTPC", "AliRecInfoCutsTPC cannot be created!");
129 // Create TPC-ESD track reconstruction cuts
131 AliRecInfoCuts *pRecInfoCuts = new AliRecInfoCuts();
133 pRecInfoCuts->SetMaxDCAToVertexXY(3.0);
134 pRecInfoCuts->SetMaxDCAToVertexZ(3.0);
135 pRecInfoCuts->SetMinNClustersTPC(50);
136 pRecInfoCuts->SetMinNClustersITS(2);
137 pRecInfoCuts->SetHistogramsOn(kFALSE);
138 pRecInfoCuts->SetTPCITSMatchingRadius(70);
139 pRecInfoCuts->SetTPCTRDMatchingRadius(260);
142 Error("AddTaskPerformanceTPC", "AliRecInfoCuts cannot be created!");
146 // Create TPC-MC track reconstruction cuts
148 AliMCInfoCuts *pMCInfoCuts = new AliMCInfoCuts();
150 pMCInfoCuts->SetMinTrackLength(70);
153 Error("AddTaskPerformanceTPC", "AliMCInfoCuts cannot be created!");
158 // Create performance objects for TPC and set cuts
160 enum { kTPC = 0, kTPCITS, kConstrained, kTPCInner, kTPCOuter, kTPCSec };
165 AliPerformanceRes *pCompRes0 = new AliPerformanceRes("AliPerformanceRes","AliPerformanceRes",kTPC,kFALSE);
167 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceRes");
169 pCompRes0->SetAliRecInfoCuts(pRecInfoCuts);
170 pCompRes0->SetAliMCInfoCuts(pMCInfoCuts);
172 AliPerformanceRes *pCompRes3 = new AliPerformanceRes("AliPerformanceResTPCInner","AliPerformanceResTPCInner",kTPCInner,kFALSE);
174 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceResTPCInner");
176 pCompRes3->SetAliRecInfoCuts(pRecInfoCuts);
177 pCompRes3->SetAliMCInfoCuts(pMCInfoCuts);
179 AliPerformanceRes *pCompRes4 = new AliPerformanceRes("AliPerformanceResTPCOuter","AliPerformanceResTPCOuter",kTPCOuter,kFALSE);
181 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceResTPCOuter");
183 pCompRes4->SetAliRecInfoCuts(pRecInfoCuts);
184 pCompRes4->SetAliMCInfoCuts(pMCInfoCuts);
188 AliPerformanceEff *pCompEff0 = new AliPerformanceEff("AliPerformanceEff","AliPerformanceEff",kTPC,kFALSE);
190 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceEff");
192 pCompEff0->SetAliRecInfoCuts(pRecInfoCuts);
193 pCompEff0->SetAliMCInfoCuts(pMCInfoCuts);
197 AliPerformanceDEdx *pCompDEdx3 = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner","AliPerformanceDEdxTPCInner",kTPCInner,kFALSE);
199 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceDEdxTPCInner");
201 pCompDEdx3->SetAliRecInfoCuts(pRecInfoCuts);
202 pCompDEdx3->SetAliMCInfoCuts(pMCInfoCuts);
206 AliPerformanceDCA *pCompDCA0 = new AliPerformanceDCA("AliPerformanceDCA","AliPerformanceDCA",kTPC,kFALSE);
208 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceDCA");
210 pCompDCA0->SetAliRecInfoCuts(pRecInfoCuts);
211 pCompDCA0->SetAliMCInfoCuts(pMCInfoCuts);
215 AliPerformanceTPC *pCompTPC0 = new AliPerformanceTPC("AliPerformanceTPC","AliPerformanceTPC",kTPC,kFALSE);
217 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceTPC");
219 pCompTPC0->SetAliRecInfoCuts(pRecInfoCutsTPC);
220 pCompTPC0->SetAliMCInfoCuts(pMCInfoCuts);
222 // TPC+ITS matching performance
224 AliPerformanceMatch *pCompMatch0 = new AliPerformanceMatch("AliPerformanceMatchTPCITS","AliPerformanceMatchTPCITS",0,kFALSE);
226 Error("AddTaskPerformanceMatch", "Cannot create AliPerformanceMatchTPCITS");
228 pCompMatch0->SetAliRecInfoCuts(pRecInfoCutsMATCH);
229 pCompMatch0->SetAliMCInfoCuts(pMCInfoCuts);
231 // TPC+TRD matching performance
233 AliPerformanceMatch *pCompMatch1 = new AliPerformanceMatch("AliPerformanceMatchTPCTRD","AliPerformanceMatchTPCTRD",1,kFALSE);
235 Error("AddTaskPerformanceMatch", "Cannot create AliPerformanceMatchTPCTRD");
237 pCompMatch1->SetAliRecInfoCuts(pRecInfoCutsMATCH);
238 pCompMatch1->SetAliMCInfoCuts(pMCInfoCuts);
240 AliPerformanceMatch *pCompMatch2 = new AliPerformanceMatch("AliPerformanceMatchTPCEFF","AliPerformanceMatchTPCEFF",2,kFALSE);
242 Error("AddTaskPerformanceMatch", "Cannot create AliPerformanceMatchTPCEFF");
244 pCompMatch2->SetAliRecInfoCuts(pRecInfoCutsMATCH);
245 pCompMatch2->SetAliMCInfoCuts(pMCInfoCuts);
248 // Add components to the performance task
250 task->AddPerformanceObject( pCompDEdx3 );
251 task->AddPerformanceObject( pCompDCA0 );
252 task->AddPerformanceObject( pCompTPC0 );
253 task->AddPerformanceObject( pCompMatch0 );
254 task->AddPerformanceObject( pCompMatch1 );
255 task->AddPerformanceObject( pCompMatch2 );
259 task->AddPerformanceObject( pCompRes0 );
260 task->AddPerformanceObject( pCompRes3 );
261 task->AddPerformanceObject( pCompRes4 );
262 task->AddPerformanceObject( pCompEff0 );
266 if(!bUseMCInfo && triggerClass) {
267 pCompDEdx3->SetTriggerClass(triggerClass);
268 pCompDCA0->SetTriggerClass(triggerClass);
269 pCompTPC0->SetTriggerClass(triggerClass);
270 pCompMatch0->SetTriggerClass(triggerClass);
271 pCompMatch1->SetTriggerClass(triggerClass);
272 pCompMatch2->SetTriggerClass(triggerClass);
276 // Create containers for input
278 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
281 // Create containers for output
283 AliAnalysisDataContainer *coutput_tpc = mgr->CreateContainer("TPCPerform", TList::Class(), AliAnalysisManager::kOutputContainer, Form("TPC.%sDet.root", task->GetName()));
284 mgr->ConnectOutput(task, 1, coutput_tpc);