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