TENDER becomes Tender
[u/mrichter/AliRoot.git] / PWGPP / TPC / macros / RunPerformanceTaskResEffMC.C
CommitLineData
d544c11d 1// Macro to run TPC performance task (locally, proof).
2//
3// By default 2 performance components are added to
4// AliPerformanceRes - resloution at DCA to prim. vertex
5// AliPerformanceEff - efficiency for prim. tracks
6//
7
8/*
9
10 //1. Run locally
e52d2896 11 gSystem->Load("libANALYSIS");
12 gSystem->Load("libANALYSISalice");
af472fff 13 gSystem->Load("libTender");
e52d2896 14 gSystem->Load("libCORRFW");
2bfe5463 15 gSystem->Load("libPWGPP");
d544c11d 16
17 gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
e52d2896 18 TChain* chain = CreateESDChain("esds.txt",10, 0);
d544c11d 19 //TChain* chain = CreateESDChain("/u/jacek/alice/dNdPt/input/LHC10a8/esds_104867_MC_LHC10a8.txt",3, 0);
20 chain->Lookup();
21
2bfe5463 22 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/RunPerformanceTaskResEffMC.C");
e52d2896 23 RunPerformanceTaskResEffMC(chain, kTRUE, kFALSE, kFALSE);
d544c11d 24
25 //2. Make final spectra and store them in the
26 // output folder and generate control pictures
27
28 aliroot -b
29 TFile f("TPC.MC.Performance.root");
30
31 AliPerformanceRes * compObjRes = (AliPerformanceRes*)TPCMC->FindObject("AliPerformanceRes");
32 compObjRes->Analyse();
33 compObjRes->GetAnalysisFolder()->ls("*");
34 // create control pictures
35 compObjRes->PrintHisto(kTRUE,"TPC.MC.PerformanceRes.Pict.ps");
36 // store output QA histograms in file
37 TFile fout("TPC.MC.PerformanceRes.Histo.root","recreate");
38 compObjRes->GetAnalysisFolder()->Write();
39 fout.Close();
40
41 //
42 f->cd();
43 AliPerformanceEff * compObjEff = (AliPerformanceEff*)TPCMC->FindObject("AliPerformanceEff");
44 compObjEff->Analyse();
45 compObjEff->GetAnalysisFolder()->ls("*");
46 // create control pictures
47 compObjEff->PrintHisto(kTRUE,"TPC.MC.PerformanceEff.Pict.ps");
48 // store output QA histograms in file
49 TFile fout("TPC.MC.PerformanceEff.Histo.root","recreate");
50 compObjEff->GetAnalysisFolder()->Write();
51 fout.Close();
52
53 f.Close();
54
55*/
56
57//_____________________________________________________________________________
58void RunPerformanceTaskResEffMC(TChain *chain, Bool_t bUseMCInfo=kTRUE, Bool_t bUseESDfriend=kTRUE, Bool_t bProof=kTRUE)
59{
60 if(!chain)
61 {
62 AliDebug(AliLog::kError, "ERROR: No input chain available");
63 return;
64 }
65 //
66 // Swtich off all AliInfo (too much output!)
67 //
68 AliLog::SetGlobalLogLevel(AliLog::kError);
69
70 //
71 // Create analysis manager
72 //
73 AliAnalysisManager *mgr = new AliAnalysisManager;
74 if(!mgr) {
75 Error("runTPCQA","AliAnalysisManager not set!");
76 return;
77 }
78
79 //
80 // Set ESD input handler
81 //
82 AliESDInputHandler* esdH = new AliESDInputHandler;
83 if(!esdH) {
84 Error("runTPCQA","AliESDInputHandler not created!");
85 return;
86 }
87 if(bUseESDfriend) esdH->SetActiveBranches("ESDfriend");
88 mgr->SetInputEventHandler(esdH);
89
90 //
91 // Set MC input handler
92 //
93 if(bUseMCInfo) {
94 AliMCEventHandler* mcH = new AliMCEventHandler;
95 if(!esdH) {
96 Error("runTPCQA","AliMCEventHandler not created!");
97 return;
98 }
99 mcH->SetReadTR(kTRUE);
100 mgr->SetMCtruthEventHandler(mcH);
101 }
102
103 //
104 // Create task
105 //
106 AliPerformanceTask *task = new AliPerformanceTask("Performance","TPC Performance");
107 if (!task) {
108 Error("AddTaskPerformanceTPC", "TPC performance task cannot be created!");
109 return NULL;
110 }
111 task->SetUseMCInfo(bUseMCInfo);
112 task->SetUseESDfriend(bUseESDfriend);
113
114 //
115 // Add task to analysis manager
116 //
117 mgr->AddTask(task);
118
119 //
120 // Create TPC-ESD track reconstruction cuts
121 // MB tracks
122 //
123 AliRecInfoCuts *pRecInfoCutsTPC = new AliRecInfoCuts();
124 if(pRecInfoCutsTPC) {
125 pRecInfoCutsTPC->SetMaxDCAToVertexXY(3.0);
126 pRecInfoCutsTPC->SetMaxDCAToVertexZ(30.0);
127 //pRecInfoCutsTPC->SetMaxDCAToVertexZ(3.0);
128 pRecInfoCutsTPC->SetRequireSigmaToVertex(kFALSE);
129 pRecInfoCutsTPC->SetRequireTPCRefit(kFALSE);
130 pRecInfoCutsTPC->SetAcceptKinkDaughters(kTRUE);
131 pRecInfoCutsTPC->SetMinNClustersTPC(50);
132 pRecInfoCutsTPC->SetMaxChi2PerClusterTPC(1000000.);
133 pRecInfoCutsTPC->SetDCAToVertex2D(kFALSE);
134
135 pRecInfoCutsTPC->SetHistogramsOn(kFALSE);
136 }
137 else {
138 Error("AddTaskPerformanceTPC", "AliRecInfoCutsTPC cannot be created!");
139 return NULL;
140 }
141
142 //
143 // Create TPC-ESD track reconstruction cuts
144 // MATCH tracks
145 //
146 AliRecInfoCuts *pRecInfoCutsMATCH = new AliRecInfoCuts();
147 if(pRecInfoCutsMATCH) {
148 pRecInfoCutsMATCH->SetMaxDCAToVertexXY(3.0);
149 pRecInfoCutsMATCH->SetMaxDCAToVertexZ(3.0);
150 pRecInfoCutsMATCH->SetRequireSigmaToVertex(kFALSE);
151 pRecInfoCutsMATCH->SetRequireTPCRefit(kFALSE);
152 pRecInfoCutsMATCH->SetAcceptKinkDaughters(kTRUE);
153 pRecInfoCutsMATCH->SetMinNClustersTPC(50);
154 pRecInfoCutsMATCH->SetMaxChi2PerClusterTPC(1000000.);
155 pRecInfoCutsMATCH->SetDCAToVertex2D(kFALSE);
156 pRecInfoCutsMATCH->SetTPCITSMatchingRadius(70);
157 pRecInfoCutsMATCH->SetTPCTRDMatchingRadius(260);
158 pRecInfoCutsMATCH->SetMinNClustersITS(3);
159
160 pRecInfoCutsMATCH->SetHistogramsOn(kFALSE);
161 }
162 else {
163 Error("AddTaskPerformanceTPC", "AliRecInfoCutsTPC cannot be created!");
164 return NULL;
165 }
166
167 //
168 // Create TPC-ESD track reconstruction cuts
169 // standard cuts
170 AliRecInfoCuts *pRecInfoCuts = new AliRecInfoCuts();
171 if(pRecInfoCuts) {
172 pRecInfoCuts->SetMaxDCAToVertexXY(3.0);
173 pRecInfoCuts->SetMaxDCAToVertexZ(3.0);
174 pRecInfoCuts->SetMinNClustersTPC(50);
175 pRecInfoCuts->SetMinNClustersITS(2);
176 pRecInfoCuts->SetHistogramsOn(kFALSE);
177 pRecInfoCuts->SetTPCITSMatchingRadius(70);
178 pRecInfoCuts->SetTPCTRDMatchingRadius(260);
179 }
180 else {
181 Error("AddTaskPerformanceTPC", "AliRecInfoCuts cannot be created!");
182 return NULL;
183 }
184 //
185 // Create TPC-MC track reconstruction cuts
186 //
187 AliMCInfoCuts *pMCInfoCuts = new AliMCInfoCuts();
188 if(pMCInfoCuts) {
189 pMCInfoCuts->SetMinTrackLength(70);
190 }
191 else {
192 Error("AddTaskPerformanceTPC", "AliMCInfoCuts cannot be created!");
193 return NULL;
194 }
195
196 //
197 // Create performance objects for TPC and set cuts
198 //
199 enum { kTPC = 0, kTPCITS, kConstrained, kTPCInner, kTPCOuter, kTPCSec };
200
201 //
202 // Resolution
203 //
204 AliPerformanceRes *pCompRes0 = new AliPerformanceRes("AliPerformanceRes","AliPerformanceRes",kTPC,kFALSE);
205 if(!pCompRes0) {
206 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceRes");
207 }
208 pCompRes0->SetAliRecInfoCuts(pRecInfoCuts);
209 pCompRes0->SetAliMCInfoCuts(pMCInfoCuts);
210
211 AliPerformanceRes *pCompRes3 = new AliPerformanceRes("AliPerformanceResTPCInner","AliPerformanceResTPCInner",kTPCInner,kFALSE);
212 if(!pCompRes3) {
213 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceResTPCInner");
214 }
215 pCompRes3->SetAliRecInfoCuts(pRecInfoCuts);
216 pCompRes3->SetAliMCInfoCuts(pMCInfoCuts);
217
218 AliPerformanceRes *pCompRes4 = new AliPerformanceRes("AliPerformanceResTPCOuter","AliPerformanceResTPCOuter",kTPCOuter,kFALSE);
219 if(!pCompRes4) {
220 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceResTPCOuter");
221 }
222 pCompRes4->SetAliRecInfoCuts(pRecInfoCuts);
223 pCompRes4->SetAliMCInfoCuts(pMCInfoCuts);
224 //
225 // Efficiency
226 //
227 AliPerformanceEff *pCompEff0 = new AliPerformanceEff("AliPerformanceEff","AliPerformanceEff",kTPC,kFALSE);
228 if(!pCompEff0) {
229 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceEff");
230 }
231 pCompEff0->SetAliRecInfoCuts(pRecInfoCuts);
232 pCompEff0->SetAliMCInfoCuts(pMCInfoCuts);
233 //
234 // dEdx
235 //
236 AliPerformanceDEdx *pCompDEdx3 = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner","AliPerformanceDEdxTPCInner",kTPCInner,kFALSE);
237 if(!pCompDEdx3) {
238 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceDEdxTPCInner");
239 }
240 pCompDEdx3->SetAliRecInfoCuts(pRecInfoCuts);
241 pCompDEdx3->SetAliMCInfoCuts(pMCInfoCuts);
242 //
243 // DCA
244 //
245 AliPerformanceDCA *pCompDCA0 = new AliPerformanceDCA("AliPerformanceDCA","AliPerformanceDCA",kTPC,kFALSE);
246 if(!pCompDCA0) {
247 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceDCA");
248 }
249 pCompDCA0->SetAliRecInfoCuts(pRecInfoCuts);
250 pCompDCA0->SetAliMCInfoCuts(pMCInfoCuts);
251 //
252 // TPC performance
253 //
254 AliPerformanceTPC *pCompTPC0 = new AliPerformanceTPC("AliPerformanceTPC","AliPerformanceTPC",kTPC,kFALSE);
255 if(!pCompTPC0) {
256 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceTPC");
257 }
258 pCompTPC0->SetAliRecInfoCuts(pRecInfoCutsTPC);
259 pCompTPC0->SetAliMCInfoCuts(pMCInfoCuts);
260 //
261 // TPC+ITS matching performance
262 //
263 AliPerformanceMatch *pCompMatch0 = new AliPerformanceMatch("AliPerformanceMatchTPCITS","AliPerformanceMatchTPCITS",0,kFALSE);
264 if(!pCompMatch0) {
265 Error("AddTaskPerformanceMatch", "Cannot create AliPerformanceMatchTPCITS");
266 }
267 pCompMatch0->SetAliRecInfoCuts(pRecInfoCutsMATCH);
268 pCompMatch0->SetAliMCInfoCuts(pMCInfoCuts);
269 //
270 // TPC+TRD matching performance
271 //
272 AliPerformanceMatch *pCompMatch1 = new AliPerformanceMatch("AliPerformanceMatchTPCTRD","AliPerformanceMatchTPCTRD",1,kFALSE);
273 if(!pCompMatch1) {
274 Error("AddTaskPerformanceMatch", "Cannot create AliPerformanceMatchTPCTRD");
275 }
276 pCompMatch1->SetAliRecInfoCuts(pRecInfoCutsMATCH);
277 pCompMatch1->SetAliMCInfoCuts(pMCInfoCuts);
278
279 AliPerformanceMatch *pCompMatch2 = new AliPerformanceMatch("AliPerformanceMatchTPCEFF","AliPerformanceMatchTPCEFF",2,kFALSE);
280 if(!pCompMatch2) {
281 Error("AddTaskPerformanceMatch", "Cannot create AliPerformanceMatchTPCEFF");
282 }
283 pCompMatch2->SetAliRecInfoCuts(pRecInfoCutsMATCH);
284 pCompMatch2->SetAliMCInfoCuts(pMCInfoCuts);
285
286 //
287 // Add components to the performance task
288 //
289 //task->AddPerformanceObject( pCompDEdx3 );
290 //task->AddPerformanceObject( pCompDCA0 );
291 //task->AddPerformanceObject( pCompTPC0 );
292 //task->AddPerformanceObject( pCompMatch0 );
293 //task->AddPerformanceObject( pCompMatch1 );
294 //task->AddPerformanceObject( pCompMatch2 );
295
296 //
297 if(bUseMCInfo) {
298 task->AddPerformanceObject( pCompRes0 );
299 //task->AddPerformanceObject( pCompRes3 );
300 //task->AddPerformanceObject( pCompRes4 );
301 task->AddPerformanceObject( pCompEff0 );
302 }
303
304 //
305 if(!bUseMCInfo) {
306 pCompDEdx3->SetTriggerClass(triggerClass);
307 pCompDCA0->SetTriggerClass(triggerClass);
308 pCompTPC0->SetTriggerClass(triggerClass);
309 pCompMatch0->SetTriggerClass(triggerClass);
310 pCompMatch1->SetTriggerClass(triggerClass);
311 pCompMatch2->SetTriggerClass(triggerClass);
312 }
313
314 //
315 // Create containers for input
316 //
317 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
318
319 //
320 // Create containers for output
321 //
322 AliAnalysisDataContainer *coutput_tpc = mgr->CreateContainer("TPCMC", TList::Class(), AliAnalysisManager::kOutputContainer, Form("TPC.MC.%s.root", task->GetName()));
323 mgr->ConnectOutput(task, 1, coutput_tpc);
324
325 // Enable debug printouts
326 mgr->SetDebugLevel(0);
327
328 if (!mgr->InitAnalysis())
329 return;
330
331 mgr->PrintStatus();
332
333 if(bProof) mgr->StartAnalysis("proof",chain);
334 else mgr->StartAnalysis("local",chain);
335}
336