]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/AliComparisonEff.cxx
Update in the Comparison tasks
[u/mrichter/AliRoot.git] / PWG1 / AliComparisonEff.cxx
1 //------------------------------------------------------------------------------\r
2 // Implementation of AliComparisonEff class. It keeps information from \r
3 // comparison of reconstructed and MC particle tracks. In addtion, \r
4 // it keeps selection cuts used during comparison. The comparison \r
5 // information is stored in the ROOT histograms. Analysis of these \r
6 // histograms can be done by using Analyse() class function. The result of \r
7 // the analysis (histograms/graphs) are stored in the folder which is \r
8 // a data member of AliComparisonEff.\r
9 // \r
10 // Author: J.Otwinowski 04/02/2008 \r
11 //------------------------------------------------------------------------------\r
12 \r
13 /*\r
14  \r
15   // after running comparison task, read the file, and get component\r
16   gROOT->LoadMacro("$ALICE_ROOT/PWG1/Macros/LoadMyLibs.C");\r
17   LoadMyLibs();\r
18   TFile f("Output.root");\r
19   //AliComparisonEff * compObj = (AliComparisonEff*)f.Get("AliComparisonEff");\r
20   AliComparisonEff * compObj = (AliComparisonEff*)cOutput->FindObject("AliComparisonEff");\r
21 \r
22   // Analyse comparison data\r
23   compObj->Analyse();\r
24 \r
25   // the output histograms/graphs will be stored in the folder "folderEff" \r
26   compObj->GetAnalysisFolder()->ls("*");\r
27 \r
28   // user can save whole comparison object (or only folder with anlysed histograms) \r
29   // in the seperate output file (e.g.)\r
30   TFile fout("Analysed_Eff.root","recreate");\r
31   compObj->Write(); // compObj->GetAnalysisFolder()->Write();\r
32   fout.Close();\r
33 \r
34 */\r
35 \r
36 \r
37 #include <iostream>\r
38 \r
39 #include "TFile.h"\r
40 #include "TCint.h"\r
41 #include "TH3F.h"\r
42 #include "TH2F.h"\r
43 #include "TF1.h"\r
44 #include "TProfile.h"\r
45 #include "TProfile2D.h"\r
46 #include "TGraph2D.h"\r
47 #include "TCanvas.h"\r
48 #include "TGraph.h"\r
49 // \r
50 #include "AliESDEvent.h"  \r
51 #include "AliESD.h"\r
52 #include "AliESDfriend.h"\r
53 #include "AliESDfriendTrack.h"\r
54 #include "AliRecInfoCuts.h" \r
55 #include "AliMCInfoCuts.h" \r
56 #include "AliLog.h" \r
57 //\r
58 #include "AliMathBase.h"\r
59 #include "AliTreeDraw.h" \r
60 #include "AliMagF.h" \r
61 #include "AliESDVertex.h" \r
62 #include "AliExternalTrackParam.h" \r
63 #include "AliTracker.h" \r
64 \r
65 #include "AliMCInfo.h" \r
66 #include "AliESDRecInfo.h" \r
67 #include "AliComparisonEff.h" \r
68 \r
69 using namespace std;\r
70 \r
71 \r
72 ClassImp(AliComparisonEff)\r
73 \r
74 //_____________________________________________________________________________\r
75 AliComparisonEff::AliComparisonEff():\r
76   AliComparisonObject("AliComparisonEff"),\r
77 \r
78   // histograms\r
79  \r
80   fMCPt(0),\r
81   fMCRecPt(0),\r
82   fMCRecPrimPt(0),\r
83   fMCRecSecPt(0),\r
84 \r
85   fEffTPCPt(0),\r
86   fEffTPCPtMC(0),\r
87   fEffTPCPtF(0),\r
88   //\r
89   fEffTPCPt_P(0),\r
90   fEffTPCPtMC_P(0),\r
91   fEffTPCPtF_P(0),\r
92   //\r
93   fEffTPCPt_Pi(0),\r
94   fEffTPCPtMC_Pi(0),\r
95   fEffTPCPtF_Pi(0),\r
96   //\r
97   fEffTPCPt_K(0),\r
98   fEffTPCPtMC_K(0),\r
99   fEffTPCPtF_K(0),\r
100  \r
101   fEffTPCTan(0),\r
102   fEffTPCTanMC(0),\r
103   fEffTPCTanF(0),\r
104   //\r
105   fEffTPCPtTan(0),\r
106   fEffTPCPtTanMC(0),\r
107   fEffTPCPtTanF(0),\r
108   // TPC+ITS\r
109   fEffTPCITSPt(0),\r
110   fEffTPCITSTan(0),\r
111 \r
112   // Cuts \r
113   fCutsRC(0), \r
114   fCutsMC(0),\r
115 \r
116   fVertex(0),\r
117 \r
118   // histogram folder \r
119   fAnalysisFolder(0)\r
120 {\r
121   // init vertex\r
122   fVertex = new AliESDVertex();\r
123   fVertex->SetXv(0.0); fVertex->SetYv(0.0); fVertex->SetZv(0.0); \r
124 \r
125   for(Int_t i=0; i<4; ++i)\r
126   {\r
127     fTPCPtDCASigmaIdeal[i]=0;\r
128     fTPCPtDCASigmaFull[i]=0;\r
129     fTPCPtDCASigmaDay0[i]=0;\r
130 \r
131     fTPCPtDCAXY[i]=0;\r
132     fTPCPtDCAZ[i]=0;\r
133 \r
134         fTPCPtDCASigmaIdealPid[i]=0;\r
135         fTPCPtDCASigmaFullPid[i]=0;\r
136         fTPCPtDCASigmaDay0Pid[i]=0;\r
137 \r
138         fTPCPtDCAXYPid[i]=0;   \r
139         fTPCPtDCAZPid[i]=0; \r
140   }\r
141 \r
142   Init();\r
143 }\r
144 \r
145 //_____________________________________________________________________________\r
146 AliComparisonEff::~AliComparisonEff(){\r
147 \r
148   // \r
149   if(fMCPt)  delete  fMCPt; fMCPt=0;\r
150   if(fMCRecPt)  delete  fMCRecPt; fMCRecPt=0;\r
151   if(fMCRecPrimPt)  delete  fMCRecPrimPt; fMCRecPrimPt=0;\r
152   if(fMCRecSecPt)  delete  fMCRecSecPt; fMCRecSecPt=0;\r
153 \r
154   // \r
155   if(fEffTPCPt)   delete  fEffTPCPt;   fEffTPCPt=0;\r
156   if(fEffTPCPtMC) delete  fEffTPCPtMC; fEffTPCPtMC=0;\r
157   if(fEffTPCPtF)  delete  fEffTPCPtF;  fEffTPCPtF=0;\r
158 \r
159   // \r
160   if(fEffTPCPt_P)   delete  fEffTPCPt_P;   fEffTPCPt_P=0;\r
161   if(fEffTPCPtMC_P) delete  fEffTPCPtMC_P; fEffTPCPtMC_P=0;\r
162   if(fEffTPCPtF_P)  delete  fEffTPCPtF_P;  fEffTPCPtF_P=0;\r
163 \r
164   // \r
165   if(fEffTPCPt_Pi)   delete  fEffTPCPt_Pi;   fEffTPCPt_Pi=0;\r
166   if(fEffTPCPtMC_Pi) delete  fEffTPCPtMC_Pi; fEffTPCPtMC_Pi=0;\r
167   if(fEffTPCPtF_Pi)  delete  fEffTPCPtF_Pi;  fEffTPCPtF_Pi=0;\r
168 \r
169   // \r
170   if(fEffTPCPt_K)   delete  fEffTPCPt_K;   fEffTPCPt_K=0;\r
171   if(fEffTPCPtMC_K) delete  fEffTPCPtMC_K; fEffTPCPtMC_K=0;\r
172   if(fEffTPCPtF_K)  delete  fEffTPCPtF_K;  fEffTPCPtF_K=0;\r
173 \r
174   // \r
175   if(fEffTPCTan)   delete  fEffTPCTan;   fEffTPCTan=0;\r
176   if(fEffTPCTanMC) delete  fEffTPCTanMC; fEffTPCTanMC=0;\r
177   if(fEffTPCTanF)  delete  fEffTPCTanF;  fEffTPCTanF=0;\r
178 \r
179   //\r
180   if(fEffTPCPtTan)   delete  fEffTPCPtTan;   fEffTPCPtTan=0;\r
181   if(fEffTPCPtTanMC) delete  fEffTPCPtTanMC; fEffTPCPtTanMC=0;\r
182   if(fEffTPCPtTanF)  delete  fEffTPCPtTanF;  fEffTPCPtTanF=0;\r
183 \r
184   if(fEffTPCITSPt)   delete  fEffTPCITSPt;   fEffTPCITSPt=0;\r
185   if(fEffTPCITSTan)   delete  fEffTPCITSTan;   fEffTPCITSTan=0;\r
186 \r
187   for(Int_t i=0; i<4; ++i)\r
188   {\r
189     if(fTPCPtDCASigmaIdeal[i]) delete  fTPCPtDCASigmaIdeal[i];  fTPCPtDCASigmaIdeal[i]=0;\r
190     if(fTPCPtDCASigmaFull[i]) delete  fTPCPtDCASigmaFull[i];  fTPCPtDCASigmaFull[i]=0;\r
191     if(fTPCPtDCASigmaDay0[i]) delete  fTPCPtDCASigmaDay0[i];  fTPCPtDCASigmaDay0[i]=0;\r
192 \r
193     if(fTPCPtDCAXY[i]) delete  fTPCPtDCAXY[i];  fTPCPtDCAXY[i]=0;\r
194     if(fTPCPtDCAZ[i]) delete  fTPCPtDCAZ[i];  fTPCPtDCAZ[i]=0;\r
195 \r
196         if(fTPCPtDCASigmaIdealPid[i]) delete  fTPCPtDCASigmaIdealPid[i];  fTPCPtDCASigmaIdealPid[i]=0;\r
197         if(fTPCPtDCASigmaFullPid[i]) delete  fTPCPtDCASigmaFullPid[i];  fTPCPtDCASigmaFullPid[i]=0;\r
198         if(fTPCPtDCASigmaDay0Pid[i]) delete  fTPCPtDCASigmaDay0Pid[i];  fTPCPtDCASigmaDay0Pid[i]=0;\r
199 \r
200         if(fTPCPtDCAXYPid[i]) delete  fTPCPtDCAXYPid[i]; fTPCPtDCAXYPid[i]=0;\r
201         if(fTPCPtDCAZPid[i]) delete   fTPCPtDCAZPid[i];  fTPCPtDCAZPid[i]=0;\r
202   }\r
203 \r
204   if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r
205 }\r
206 \r
207 //_____________________________________________________________________________\r
208 void AliComparisonEff::Init(){\r
209 \r
210   // Init histograms\r
211   //\r
212   fMCPt = new TH1F("fMCPt","fMCPt",50,0.1,3);           \r
213   fMCPt->SetXTitle("p_{t}");\r
214   fMCPt->SetYTitle("yield");\r
215 \r
216   fMCRecPt = new TH1F("fMCRecPt","fMCRecPt",50,0.1,3);           \r
217   fMCRecPt->SetXTitle("p_{t}");\r
218   fMCRecPt->SetYTitle("yield");\r
219 \r
220   fMCRecPrimPt = new TH1F("fMCRecPrimPt","fMCRecPrimPt",50,0.1,3);           \r
221   fMCRecPrimPt->SetXTitle("p_{t}");\r
222   fMCRecPrimPt->SetYTitle("yield");\r
223 \r
224   fMCRecSecPt = new TH1F("fMCRecSecPt","fMCRecSecPt",50,0.1,3);           \r
225   fMCRecSecPt->SetXTitle("p_{t}");\r
226   fMCRecSecPt->SetYTitle("yield");\r
227 \r
228   // Efficiency as function of pt\r
229   fEffTPCPt = new TProfile("Eff_pt","Eff_Pt",50,0.1,3);           \r
230   fEffTPCPt->SetXTitle("p_{t}");\r
231   fEffTPCPt->SetYTitle("TPC Efficiency");\r
232 \r
233 // Efficiency as function of pt (TPC+ITS)\r
234   fEffTPCITSPt = new TProfile("Eff_pt_TPCITS","Eff_Pt_TPCITS",50,0.1,3);           \r
235   fEffTPCITSPt->SetXTitle("p_{t}");\r
236   fEffTPCITSPt->SetYTitle("TPCITS Efficiency");\r
237 \r
238 \r
239   fEffTPCPtMC = new TProfile("MC_Eff_pt","MC_Eff_Pt",50,0.1,3);   \r
240   fEffTPCPtMC->SetXTitle("p_{t}");\r
241   fEffTPCPtMC->SetYTitle("MC TPC Efficiency");\r
242 \r
243   fEffTPCPtF = new TProfile("F_Eff_pt","F_Eff_Pt",50,0.1,3);     \r
244   fEffTPCPtF->SetXTitle("p_{t}");\r
245   fEffTPCPtF->SetYTitle("TPC Findable Efficiency");\r
246 \r
247   // Efficiency as function of pt protons\r
248   fEffTPCPt_P = new TProfile("Eff_pt_P","Eff_Pt_P",50,0.1,3);           \r
249   fEffTPCPt_P->SetXTitle("p_{t}");\r
250   fEffTPCPt_P->SetYTitle("TPC Efficiency");\r
251 \r
252   fEffTPCPtMC_P = new TProfile("MC_Eff_pt_P","MC_Eff_Pt_P",50,0.1,3);   \r
253   fEffTPCPtMC_P->SetXTitle("p_{t}");\r
254   fEffTPCPtMC_P->SetYTitle("MC TPC Efficiency");\r
255 \r
256   fEffTPCPtF_P = new TProfile("F_Eff_pt_P","F_Eff_Pt_P",50,0.1,3);     \r
257   fEffTPCPtF_P->SetXTitle("p_{t}");\r
258   fEffTPCPtF_P->SetYTitle("TPC Findable Efficiency");\r
259 \r
260   // Efficiency as function of pt pions\r
261   fEffTPCPt_Pi = new TProfile("Eff_pt_Pi","Eff_Pit_Pi",50,0.1,3);           \r
262   fEffTPCPt_Pi->SetXTitle("p_{t}");\r
263   fEffTPCPt_Pi->SetYTitle("TPC Efficiency");\r
264 \r
265   fEffTPCPtMC_Pi = new TProfile("MC_Eff_pt_Pi","MC_Eff_Pit_Pi",50,0.1,3);   \r
266   fEffTPCPtMC_Pi->SetXTitle("p_{t}");\r
267   fEffTPCPtMC_Pi->SetYTitle("MC TPC Efficiency");\r
268 \r
269   fEffTPCPtF_Pi = new TProfile("F_Eff_pt_Pi","F_Eff_Pit_Pi",50,0.1,3);     \r
270   fEffTPCPtF_Pi->SetXTitle("p_{t}");\r
271   fEffTPCPtF_Pi->SetYTitle("TPC Findable Efficiency");\r
272 \r
273   // Efficiency as function of pt kaons\r
274   fEffTPCPt_K = new TProfile("Eff_pt_K","Eff_Kt_K",50,0.1,3);           \r
275   fEffTPCPt_K->SetXTitle("p_{t}");\r
276   fEffTPCPt_K->SetYTitle("TPC Efficiency");\r
277 \r
278   fEffTPCPtMC_K = new TProfile("MC_Eff_pt_K","MC_Eff_Kt_K",50,0.1,3);   \r
279   fEffTPCPtMC_K->SetXTitle("p_{t}");\r
280   fEffTPCPtMC_K->SetYTitle("MC TPC Efficiency");\r
281 \r
282   fEffTPCPtF_K = new TProfile("F_Eff_pt_K","F_Eff_Kt_K",50,0.1,3);     \r
283   fEffTPCPtF_K->SetXTitle("p_{t}");\r
284   fEffTPCPtF_K->SetYTitle("TPC Findable Efficiency");\r
285 \r
286   // Efficiency as function of tan(theta) \r
287   fEffTPCTan = new TProfile("Eff_tan","Eff_tan",50,-2.5,2.5);         \r
288   fEffTPCTan->SetXTitle("tan(#theta)");\r
289   fEffTPCTan->SetYTitle("TPC Efficiency");\r
290 \r
291 // Efficiency as function of tan(theta) (TPC+ITS)\r
292   fEffTPCITSTan = new TProfile("Eff_tan_TPCITS","Eff_tan_TPCITS",50,-2.5,2.5);         \r
293   fEffTPCITSTan->SetXTitle("tan(#theta)");\r
294   fEffTPCITSTan->SetYTitle("TPCITS Efficiency");\r
295 \r
296 \r
297   fEffTPCTanMC = new TProfile("MC_Eff_tan","MC_Eff_tan",50,-2.5,2.5); \r
298   fEffTPCTanMC->SetXTitle("tan(#theta)");\r
299   fEffTPCTanMC->SetYTitle("MC TPC Efficiency");\r
300 \r
301   fEffTPCTanF = new TProfile("F_Eff_tan","F_Eff_tan",50,-2.5,2.5);   \r
302   fEffTPCPtF->SetXTitle("tan(#theta)");\r
303   fEffTPCPtF->SetYTitle("TPC Findable Efficiency");\r
304 \r
305   // Efficiency as function of pt and tan(theta) \r
306   fEffTPCPtTan = new TProfile2D("Eff_pt_tan","Eff_Pt_tan",10,0.1,3,20,-2.,2.);\r
307   fEffTPCPtTan->SetXTitle("tan(#theta)");\r
308   fEffTPCPtTan->SetYTitle("p_{t}");\r
309 \r
310   fEffTPCPtTanMC = new TProfile2D("MC_Eff_pt_tan_MC","MC Eff Pt",10,0.1,3,20,-2.,2.);\r
311   fEffTPCPtTanMC->SetXTitle("tan(#theta)");\r
312   fEffTPCPtTanMC->SetYTitle("p_{t}");\r
313 \r
314   fEffTPCPtTanF = new TProfile2D("MC_Eff_pt_tan_F","MC Eff Pt",10,0.1,3,20,-2.,2.);\r
315   fEffTPCPtTanF->SetXTitle("tan(#theta)");\r
316   fEffTPCPtTanF->SetYTitle("p_{t}");\r
317 \r
318   char name[256];\r
319   for(Int_t i=0; i<4; ++i)\r
320   {\r
321     sprintf(name, "fTPCPtDCASigmaIdeal_%d",i);\r
322     fTPCPtDCASigmaIdeal[i] = new TH2F(name,name,50,0.1,3,100,0,100);\r
323 \r
324     sprintf(name, "fTPCPtDCASigmaFull_%d",i);\r
325     fTPCPtDCASigmaFull[i] = new TH2F(name,name,50,0.1,3,100,0,100);\r
326 \r
327     sprintf(name, "fTPCPtDCASigmaDay0_%d",i);\r
328     fTPCPtDCASigmaDay0[i] = new TH2F(name,name,50,0.1,3,100,0,100);\r
329 \r
330     sprintf(name, "fTPCPtDCAXY_%d",i);\r
331     fTPCPtDCAXY[i]= new TH2F(name,name,50,0.1,3,100,0,100);\r
332     sprintf(name, "fTPCPtDCAZ_%d",i);\r
333     fTPCPtDCAZ[i]= new TH2F(name,name,50,0.1,3,100,0,100);\r
334 \r
335     sprintf(name, "fTPCPtDCASigmaIdealPid_%d",i);\r
336         fTPCPtDCASigmaIdealPid[i] = new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
337 \r
338     sprintf(name, "fTPCPtDCASigmaFullPid_%d",i);\r
339         fTPCPtDCASigmaFullPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
340 \r
341     sprintf(name, "fTPCPtDCASigmaDay0Pid_%d",i);\r
342         fTPCPtDCASigmaDay0Pid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
343 \r
344     sprintf(name, "fTPCPtDCAXYPid_%d",i);\r
345         fTPCPtDCAXYPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
346 \r
347     sprintf(name, "fTPCPtDCAZPid_%d",i);\r
348         fTPCPtDCAZPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);\r
349   }\r
350 \r
351   // init cuts\r
352   if(!fCutsMC) \r
353     AliDebug(AliLog::kError, "ERROR: Cannot find AliMCInfoCuts object");\r
354   if(!fCutsRC) \r
355     AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");\r
356 \r
357   // init folder\r
358   fAnalysisFolder = CreateFolder("folderEff","Analysis Efficiency Folder");\r
359 }\r
360 \r
361 //_____________________________________________________________________________\r
362 void AliComparisonEff::Process(AliMCInfo* infoMC, AliESDRecInfo *infoRC)\r
363 {\r
364   // Fill efficiency comparison information\r
365   \r
366   AliExternalTrackParam *track = 0;\r
367   Double_t field      = AliTracker::GetBz(); // nominal Bz field [kG]\r
368   Double_t kMaxD      = 123456.0; // max distance\r
369   Int_t clusterITS[200];\r
370 \r
371   // systematics\r
372   const Double_t kSigma2Full_xy  = 0.25; // ExB full systematics  [cm]\r
373   const Double_t kSigma2Full_z  =  5.0;  // drift velocity (goofie) [cm] \r
374 \r
375   const Double_t kSigma2Day0_xy  = 0.02; //  ExB  [cm]\r
376   const Double_t kSigma2Day0_z  =  0.1;  //  drift velocity (goofie) [cm]  \r
377 \r
378   //  \r
379   Double_t  DCASigmaIdeal=0;\r
380   Double_t  DCASigmaFull=0;\r
381   Double_t  DCASigmaDay0=0;\r
382 \r
383   Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r
384 \r
385   // distance to Prim. vertex \r
386   const Double_t* dv = infoMC->GetVDist(); \r
387 \r
388   Float_t mcpt = infoMC->GetParticle().Pt();\r
389   Float_t tantheta = TMath::Tan(infoMC->GetParticle().Theta()-TMath::Pi()*0.5);\r
390   Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r
391  \r
392   // calculate and set prim. vertex\r
393   fVertex->SetXv( infoMC->GetParticle().Vx() - dv[0] );\r
394   fVertex->SetYv( infoMC->GetParticle().Vy() - dv[1] );\r
395   fVertex->SetZv( infoMC->GetParticle().Vz() - dv[2] );\r
396   \r
397   // Check selection cuts\r
398   if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r
399 \r
400   // transform Pdg to Pid\r
401   // Pdg convension is different for hadrons and leptons \r
402   // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r
403   Double_t pid = -1;\r
404   if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r
405   if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r
406   if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r
407   if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r
408   if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r
409 \r
410   //cout << "dv[0] " << dv[0] << " dv[1] " << dv[1]  <<  " dv[2] " << dv[2] << endl; \r
411   //cout << "v[0] " << fVertex->GetXv()  << " v[1] " << fVertex->GetYv()  <<  " v[2] " << fVertex->GetZv()<< endl; \r
412   if (TMath::Abs(tantheta)<fCutsRC->GetMaxAbsTanTheta())\r
413   {\r
414     if (infoRC->GetESDtrack() && infoRC->GetESDtrack()->GetTPCInnerParam()) \r
415     {\r
416       if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0 )\r
417       {\r
418         Bool_t bDCAStatus = track->PropagateToDCA(fVertex,field,kMaxD,dca,cov);\r
419                 if(bDCAStatus) {\r
420                 //\r
421                 cov[2] = track->GetCovariance()[2];\r
422 \r
423             // Eff = infoRC->GetStatus(1)==3 && isPrim / isPrim;\r
424         // Pt vs ( dca[0]^2/cov[0]^2 + dca[1]^2/cov[2]^2 ) \r
425         // Pt vs ( dca[0]^2/(cov[0]^2 + kSigma2Full_xy)  + dca[1]^2/( cov[2]^2 + kSigma2Full_z ) \r
426         // Pt vs ( dca[0]^2/(cov[0]^2 + kSigma2_xy)  + dca[1]^2/( cov[2]^2 + kSigma2_z ) \r
427 \r
428          if(cov[0]>0.0 && cov[2]>0.0)\r
429                  {\r
430                          DCASigmaIdeal = TMath::Power(dca[0],2)/cov[0] \r
431                                                                           + TMath::Power(dca[1],2)/cov[2]; \r
432 \r
433                          DCASigmaFull = TMath::Power(dca[0],2)/(cov[0]+kSigma2Full_xy) \r
434                                                                          + TMath::Power(dca[1],2)/(cov[2]+kSigma2Full_z); \r
435 \r
436                          DCASigmaDay0 = TMath::Power(dca[0],2)/(cov[0]+kSigma2Day0_xy) \r
437                                                                          + TMath::Power(dca[1],2)/(cov[2]+kSigma2Day0_z); \r
438 \r
439               //cout << "dca[0] " << dca[0]  << " dca[1] " << dca[1]  << endl; \r
440               //cout << "cov[0] " << cov[0]  << " cov[2] " << cov[2]  << endl; \r
441               //cout << "DCASigmaIdeal " << DCASigmaIdeal  << " DCASigmaFull " << DCASigmaFull  << " DCASigmaDay0 "  <<DCASigmaDay0 <<  endl; \r
442             //cout << " -------------------------------------------------------- "<<  endl; \r
443                  }\r
444 \r
445          // MC pt\r
446          fMCPt->Fill(mcpt); \r
447          if(infoRC->GetStatus(1)==3) fMCRecPt->Fill(mcpt); \r
448          if(infoRC->GetStatus(1)==3 && isPrim) fMCRecPrimPt->Fill(mcpt); \r
449          if(infoRC->GetStatus(1)==3 && !isPrim) fMCRecSecPt->Fill(mcpt); \r
450 \r
451          if(isPrim)\r
452                  {\r
453            fTPCPtDCASigmaIdeal[0]->Fill(mcpt,DCASigmaIdeal);\r
454            fTPCPtDCASigmaFull[0]->Fill(mcpt,DCASigmaFull);\r
455            fTPCPtDCASigmaDay0[0]->Fill(mcpt,DCASigmaDay0);\r
456 \r
457            fTPCPtDCAXY[0]->Fill(mcpt,dca[0]);\r
458            fTPCPtDCAZ[0]->Fill(mcpt,dca[1]);\r
459 \r
460            fTPCPtDCASigmaIdealPid[0]->Fill(mcpt,DCASigmaIdeal,pid);\r
461            fTPCPtDCASigmaFullPid[0]->Fill(mcpt,DCASigmaFull,pid);\r
462            fTPCPtDCASigmaDay0Pid[0]->Fill(mcpt,DCASigmaDay0,pid);\r
463 \r
464            fTPCPtDCAXYPid[0]->Fill(mcpt,dca[0],pid);\r
465            fTPCPtDCAZPid[0]->Fill(mcpt,dca[1],pid);\r
466                            \r
467                    if(infoRC->GetStatus(1)==3)\r
468                    {\r
469              fTPCPtDCASigmaIdeal[1]->Fill(mcpt,DCASigmaIdeal);\r
470              fTPCPtDCASigmaFull[1]->Fill(mcpt,DCASigmaFull);\r
471              fTPCPtDCASigmaDay0[1]->Fill(mcpt,DCASigmaDay0);\r
472 \r
473              fTPCPtDCAXY[1]->Fill(mcpt,dca[0]);\r
474              fTPCPtDCAZ[1]->Fill(mcpt,dca[1]);\r
475 \r
476              fTPCPtDCASigmaIdealPid[1]->Fill(mcpt,DCASigmaIdeal,pid);\r
477              fTPCPtDCASigmaFullPid[1]->Fill(mcpt,DCASigmaFull,pid);\r
478              fTPCPtDCASigmaDay0Pid[1]->Fill(mcpt,DCASigmaDay0,pid);\r
479 \r
480              fTPCPtDCAXYPid[1]->Fill(mcpt,dca[0],pid);\r
481              fTPCPtDCAZPid[1]->Fill(mcpt,dca[1],pid);\r
482            }\r
483                  }\r
484 \r
485         // Cont = infoRC->GetStatus(1)==3 && !isPrim / infoRC->GetStatus(1)==3   \r
486         // Pt vs ( dz[0]^2/cov[0]^2 + dz[1]^2/cov[2]^2 ) \r
487         // Pt vs ( dz[0]^2/(cov[0]^2 + kSigma2Full_xy)  + dz[1]^2/( cov[2]^2 + kSigma2Full_z ) \r
488         // Pt vs ( dz[0]^2/(cov[0]^2 + kSigma2_xy)  + dz[1]^2/( cov[2]^2 + kSigma2_z ) \r
489 \r
490                  if(infoRC->GetStatus(1)==3) \r
491                  {\r
492                    fTPCPtDCASigmaIdeal[2]->Fill(mcpt,DCASigmaIdeal);\r
493            fTPCPtDCASigmaFull[2]->Fill(mcpt,DCASigmaFull);\r
494            fTPCPtDCASigmaDay0[2]->Fill(mcpt,DCASigmaDay0);\r
495 \r
496            fTPCPtDCAXY[2]->Fill(mcpt,dca[0]);\r
497            fTPCPtDCAZ[2]->Fill(mcpt,dca[1]);\r
498 \r
499            fTPCPtDCASigmaIdealPid[2]->Fill(mcpt,DCASigmaIdeal,pid);\r
500            fTPCPtDCASigmaFullPid[2]->Fill(mcpt,DCASigmaFull,pid);\r
501            fTPCPtDCASigmaDay0Pid[2]->Fill(mcpt,DCASigmaDay0,pid);\r
502 \r
503            fTPCPtDCAXYPid[2]->Fill(mcpt,dca[0],pid);\r
504            fTPCPtDCAZPid[2]->Fill(mcpt,dca[1],pid);\r
505  \r
506                    if(isPrim==0)\r
507                    {\r
508              fTPCPtDCASigmaIdeal[3]->Fill(mcpt,DCASigmaIdeal);\r
509              fTPCPtDCASigmaFull[3]->Fill(mcpt,DCASigmaFull);\r
510              fTPCPtDCASigmaDay0[3]->Fill(mcpt,DCASigmaDay0);\r
511 \r
512              fTPCPtDCAXY[3]->Fill(mcpt,dca[0]);\r
513              fTPCPtDCAZ[3]->Fill(mcpt,dca[1]);\r
514 \r
515              fTPCPtDCASigmaIdealPid[3]->Fill(mcpt,DCASigmaIdeal,pid);\r
516              fTPCPtDCASigmaFullPid[3]->Fill(mcpt,DCASigmaFull,pid);\r
517              fTPCPtDCASigmaDay0Pid[3]->Fill(mcpt,DCASigmaDay0,pid);\r
518 \r
519              fTPCPtDCAXYPid[3]->Fill(mcpt,dca[0],pid);\r
520              fTPCPtDCAZPid[3]->Fill(mcpt,dca[1],pid);\r
521            }\r
522              }\r
523            delete track;\r
524        }\r
525        }\r
526      } \r
527          else \r
528          {\r
529        if(isPrim)\r
530            {\r
531              fTPCPtDCASigmaIdeal[0]->Fill(mcpt,0.0);\r
532          fTPCPtDCASigmaFull[0]->Fill(mcpt,0.0);\r
533          fTPCPtDCASigmaDay0[0]->Fill(mcpt,0.0);\r
534 \r
535          fTPCPtDCAXY[0]->Fill(mcpt,0.0);\r
536          fTPCPtDCAZ[0]->Fill(mcpt,0.0);\r
537 \r
538          fTPCPtDCASigmaIdealPid[0]->Fill(mcpt,0.0,pid);\r
539          fTPCPtDCASigmaFullPid[0]->Fill(mcpt,0.0,pid);\r
540          fTPCPtDCASigmaDay0Pid[0]->Fill(mcpt,0.0,pid);\r
541 \r
542          fTPCPtDCAXYPid[0]->Fill(mcpt,0.0,pid);\r
543          fTPCPtDCAZPid[0]->Fill(mcpt,0.0,pid);\r
544            }\r
545      }\r
546   }\r
547 \r
548   // only primary particles\r
549   if (!isPrim) return;\r
550 \r
551   // pt\r
552   if (TMath::Abs(tantheta)<fCutsRC->GetMaxAbsTanTheta()){\r
553 \r
554     fEffTPCPt->Fill(mcpt, infoRC->GetStatus(1)==3);\r
555     fEffTPCPtMC->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
556     if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){\r
557       fEffTPCPtF->Fill(mcpt, infoRC->GetStatus(1)==3);\r
558     }\r
559   \r
560     fEffTPCITSPt->Fill(mcpt, infoRC->GetStatus(1)==3 && (infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS()));\r
561 \r
562     // protons\r
563     if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt()) { \r
564            fEffTPCPt_P->Fill(mcpt, infoRC->GetStatus(1)==3);\r
565        fEffTPCPtMC_P->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
566 \r
567        if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {\r
568          fEffTPCPtF_P->Fill(mcpt, infoRC->GetStatus(1)==3);\r
569        }\r
570         }\r
571 \r
572     // pions\r
573     if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP()) {\r
574           fEffTPCPt_Pi->Fill(mcpt, infoRC->GetStatus(1)==3);\r
575       fEffTPCPtMC_Pi->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
576 \r
577        if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {\r
578          fEffTPCPtF_Pi->Fill(mcpt, infoRC->GetStatus(1)==3);\r
579        }\r
580         }\r
581 \r
582         // kaons\r
583     if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP()) {\r
584           fEffTPCPt_K->Fill(mcpt, infoRC->GetStatus(1)==3);\r
585       fEffTPCPtMC_K->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
586 \r
587        if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {\r
588          fEffTPCPtF_K->Fill(mcpt, infoRC->GetStatus(1)==3);\r
589        }\r
590     }\r
591   }\r
592 \r
593   // theta\r
594   if (TMath::Abs(mcpt)>fCutsRC->GetPtMin()){\r
595     fEffTPCTan->Fill(tantheta, infoRC->GetStatus(1)==3);\r
596     fEffTPCTanMC->Fill(tantheta, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
597     if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){\r
598       fEffTPCTanF->Fill(tantheta, infoRC->GetStatus(1)==3);\r
599     }\r
600 \r
601     fEffTPCITSTan->Fill(tantheta, infoRC->GetStatus(1)==3 && (infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS()));\r
602   }\r
603 \r
604   // pt-theta\r
605   fEffTPCPtTan->Fill(mcpt,tantheta,infoRC->GetStatus(1)==3);\r
606   fEffTPCPtTanMC->Fill(mcpt,tantheta,infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()); \r
607   if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){\r
608     fEffTPCPtTanF->Fill(mcpt,tantheta,infoRC->GetStatus(1)==3); \r
609   }\r
610 }\r
611 \r
612 //_____________________________________________________________________________\r
613 void AliComparisonEff::Exec(AliMCInfo* infoMC, AliESDRecInfo *infoRC)\r
614 {\r
615   // Process comparison information\r
616   Process(infoMC,infoRC);\r
617 }\r
618 \r
619 //_____________________________________________________________________________\r
620 Long64_t AliComparisonEff::Merge(TCollection* list) \r
621 {\r
622   // Merge list of objects (needed by PROOF)\r
623 \r
624   if (!list)\r
625   return 0;\r
626 \r
627   if (list->IsEmpty())\r
628   return 1;\r
629 \r
630   TIterator* iter = list->MakeIterator();\r
631   TObject* obj = 0;\r
632 \r
633   // collection of generated histograms\r
634 \r
635   Int_t count=0;\r
636   while((obj = iter->Next()) != 0) \r
637   {\r
638     AliComparisonEff* entry = dynamic_cast<AliComparisonEff*>(obj);\r
639     if (entry == 0) continue; \r
640   \r
641     fMCPt->Add(entry->fMCPt);\r
642     fMCRecPt->Add(entry->fMCRecPt);\r
643     fMCRecPrimPt->Add(entry->fMCRecPrimPt);\r
644     fMCRecSecPt->Add(entry->fMCRecSecPt);\r
645 \r
646     fEffTPCPt->Add(entry->fEffTPCPt);\r
647         fEffTPCPtMC->Add(entry->fEffTPCPtMC);\r
648         fEffTPCPtF->Add(entry->fEffTPCPtF);\r
649 \r
650     fEffTPCPt_P->Add(entry->fEffTPCPt_P);\r
651         fEffTPCPtMC_P->Add(entry->fEffTPCPtMC_P);\r
652         fEffTPCPtF_P->Add(entry->fEffTPCPtF_P);\r
653 \r
654     fEffTPCPt_Pi->Add(entry->fEffTPCPt_Pi);\r
655         fEffTPCPtMC_Pi->Add(entry->fEffTPCPtMC_Pi);\r
656         fEffTPCPtF_Pi->Add(entry->fEffTPCPtF_Pi);\r
657 \r
658     fEffTPCPt_K->Add(entry->fEffTPCPt_K);\r
659         fEffTPCPtMC_K->Add(entry->fEffTPCPtMC_K);\r
660         fEffTPCPtF_K->Add(entry->fEffTPCPtF_K);\r
661 \r
662         fEffTPCTan->Add(entry->fEffTPCTan);\r
663         fEffTPCTanMC->Add(entry->fEffTPCTanMC);\r
664         fEffTPCTanF->Add(entry->fEffTPCTanF);\r
665           \r
666         fEffTPCPtTan->Add(entry->fEffTPCPtTan);\r
667         fEffTPCPtTanMC->Add(entry->fEffTPCPtTanMC);\r
668         fEffTPCPtTanF->Add(entry->fEffTPCPtTanF);\r
669     \r
670     fEffTPCITSPt->Add(entry->fEffTPCITSPt);\r
671     fEffTPCITSTan->Add(entry->fEffTPCITSTan);\r
672 \r
673     for(Int_t i=0; i<4; ++i)\r
674     {\r
675       fTPCPtDCASigmaIdeal[i]->Add(entry->fTPCPtDCASigmaIdeal[i]);\r
676       fTPCPtDCASigmaFull[i]->Add(entry->fTPCPtDCASigmaFull[i]);\r
677       fTPCPtDCASigmaDay0[i]->Add(entry->fTPCPtDCASigmaDay0[i]);\r
678 \r
679       fTPCPtDCAXY[i]->Add(entry->fTPCPtDCAXY[i]);\r
680       fTPCPtDCAZ[i]->Add(entry->fTPCPtDCAXY[i]);\r
681 \r
682       fTPCPtDCASigmaIdealPid[i]->Add(entry->fTPCPtDCASigmaIdealPid[i]);\r
683       fTPCPtDCASigmaFullPid[i]->Add(entry->fTPCPtDCASigmaFullPid[i]);\r
684       fTPCPtDCASigmaDay0Pid[i]->Add(entry->fTPCPtDCASigmaDay0Pid[i]);\r
685 \r
686       fTPCPtDCAXYPid[i]->Add(entry->fTPCPtDCAXYPid[i]);\r
687       fTPCPtDCAZPid[i]->Add(entry->fTPCPtDCAXYPid[i]);\r
688     }\r
689 \r
690   count++;\r
691   }\r
692 \r
693 return count;\r
694 }\r
695  \r
696 //_____________________________________________________________________________\r
697 void AliComparisonEff::Analyse() \r
698 {\r
699   // Analyse comparison information and store output histograms\r
700   // in the folder "folderEff" \r
701   //\r
702   \r
703   TH1::AddDirectory(kFALSE);\r
704 \r
705   AliComparisonEff * comp=this;\r
706   TObjArray *aFolderObj = new TObjArray;\r
707 \r
708   // calculate efficiency and contamination (4 sigma) \r
709   TH1 *h_sigmaidealpid[20];\r
710   TH1 *h_sigmafullpid[20];\r
711   TH1 *h_sigmaday0pid[20];\r
712 \r
713   TH1 *h_sigmaidealpidtot[4];\r
714   TH1 *h_sigmafullpidtot[4];\r
715   TH1 *h_sigmaday0pidtot[4];\r
716 \r
717   char name[256];\r
718   char name1[256];\r
719   Int_t idx;\r
720 \r
721   for(Int_t i=0; i<4; ++i)\r
722   {\r
723      //total\r
724      comp->fTPCPtDCASigmaIdealPid[i]->GetYaxis()->SetRange(1,4);\r
725      sprintf(name,"h_sigmaidealpidtot_%d",i);\r
726      h_sigmaidealpidtot[i] = comp->fTPCPtDCASigmaIdealPid[i]->Project3D();\r
727      h_sigmaidealpidtot[i]->SetName(name);\r
728 \r
729      comp->fTPCPtDCASigmaFullPid[i]->GetYaxis()->SetRange(1,4);\r
730      sprintf(name,"h_sigmafullpidtot_%d",i);\r
731      h_sigmafullpidtot[i] = comp->fTPCPtDCASigmaFullPid[i]->Project3D();\r
732      h_sigmafullpidtot[i]->SetName(name);\r
733 \r
734      comp->fTPCPtDCASigmaDay0Pid[i]->GetYaxis()->SetRange(1,4);\r
735      sprintf(name,"h_sigmaday0pidtot_%d",i);\r
736      h_sigmaday0pidtot[i] = comp->fTPCPtDCASigmaDay0Pid[i]->Project3D();\r
737      h_sigmaday0pidtot[i]->SetName(name);\r
738 \r
739      // pid wise\r
740      for(Int_t j=0; j<5; ++j)\r
741          {\r
742        idx = i*5 + j;\r
743 \r
744        comp->fTPCPtDCASigmaIdealPid[i]->GetYaxis()->SetRange(1,4);\r
745        comp->fTPCPtDCASigmaIdealPid[i]->GetZaxis()->SetRange(j+1,j+1);\r
746 \r
747        sprintf(name,"h_sigmaidealpid_%d",idx);\r
748        h_sigmaidealpid[idx] = comp->fTPCPtDCASigmaIdealPid[i]->Project3D();\r
749        h_sigmaidealpid[idx]->SetName(name);\r
750            \r
751 \r
752        comp->fTPCPtDCASigmaFullPid[i]->GetYaxis()->SetRange(1,4);\r
753        comp->fTPCPtDCASigmaFullPid[i]->GetZaxis()->SetRange(j+1,j+1);\r
754 \r
755        sprintf(name,"h_sigmafullpid_%d",idx);\r
756        h_sigmafullpid[idx] = comp->fTPCPtDCASigmaFullPid[i]->Project3D();\r
757        h_sigmafullpid[idx]->SetName(name);\r
758        \r
759        comp->fTPCPtDCASigmaDay0Pid[i]->GetYaxis()->SetRange(1,4);\r
760        comp->fTPCPtDCASigmaDay0Pid[i]->GetZaxis()->SetRange(j+1,j+1);\r
761 \r
762        sprintf(name,"h_sigmaday0pid_%d",idx);\r
763        h_sigmaday0pid[idx] = comp->fTPCPtDCASigmaDay0Pid[i]->Project3D();\r
764        h_sigmaday0pid[idx]->SetName(name);\r
765         } \r
766   }\r
767 \r
768   // calculate efficiency and contamination (all pids)\r
769   h_sigmaidealpidtot[0]->Sumw2();\r
770   h_sigmaidealpidtot[1]->Divide(h_sigmaidealpidtot[0]);\r
771   h_sigmaidealpidtot[2]->Sumw2();\r
772   h_sigmaidealpidtot[3]->Divide(h_sigmaidealpidtot[2]);\r
773 \r
774   h_sigmafullpidtot[0]->Sumw2();\r
775   h_sigmafullpidtot[1]->Divide(h_sigmafullpidtot[0]);\r
776   h_sigmafullpidtot[2]->Sumw2();\r
777   h_sigmafullpidtot[3]->Divide(h_sigmafullpidtot[2]);\r
778 \r
779   h_sigmaday0pidtot[0]->Sumw2();\r
780   h_sigmaday0pidtot[1]->Divide(h_sigmaday0pidtot[0]);\r
781   h_sigmaday0pidtot[2]->Sumw2();\r
782   h_sigmaday0pidtot[3]->Divide(h_sigmaday0pidtot[2]);\r
783 \r
784   // calculate efficiency pid wise\r
785   for(Int_t jdx = 0; jdx<5; jdx++)\r
786   {\r
787     h_sigmaidealpid[jdx]->Sumw2();\r
788     h_sigmaidealpid[jdx+5]->Divide(h_sigmaidealpid[jdx]);\r
789 \r
790     h_sigmafullpid[jdx]->Sumw2();\r
791     h_sigmafullpid[jdx+5]->Divide(h_sigmafullpid[jdx]);\r
792 \r
793     h_sigmaday0pid[jdx]->Sumw2();\r
794     h_sigmaday0pid[jdx+5]->Divide(h_sigmaday0pid[jdx]);\r
795   }\r
796 \r
797   // calculate cont. pid wise\r
798   for(Int_t jdx = 0; jdx<5; jdx++)\r
799   {\r
800     h_sigmaidealpid[jdx+15]->Divide(h_sigmaidealpidtot[2]);\r
801     h_sigmafullpid[jdx+15]->Divide(h_sigmafullpidtot[2]);\r
802     h_sigmaday0pid[jdx+15]->Divide(h_sigmaday0pidtot[2]);\r
803   }\r
804 \r
805   TCanvas * c = new TCanvas("Efficiency","Track efficiency");\r
806   c->cd();\r
807   c->Divide(1,2);\r
808 \r
809   //\r
810   c->cd(1);\r
811   comp->fEffTPCTanF->SetXTitle("Tan(#theta)");\r
812   comp->fEffTPCTanF->SetYTitle("eff_{findable}");\r
813   comp->fEffTPCTanF->SetName("EffTanFindable");\r
814   comp->fEffTPCTanF->Draw();\r
815   //\r
816   c->cd(2);\r
817   comp->fEffTPCTan->SetXTitle("Tan(#theta)");\r
818   comp->fEffTPCTan->SetYTitle("eff_{all}");\r
819   comp->fEffTPCTan->SetName("EffTanAll");\r
820   comp->fEffTPCTan->Draw();\r
821 \r
822   aFolderObj->Add(comp->fEffTPCTanF);\r
823   aFolderObj->Add(comp->fEffTPCTan);\r
824 \r
825   h_sigmaidealpidtot[1]->SetXTitle("p_{t}");\r
826   h_sigmaidealpidtot[1]->SetYTitle("efficiency");\r
827   h_sigmaidealpidtot[1]->SetTitle("Eff_SigmaIdeal");\r
828   h_sigmaidealpidtot[1]->SetName("Eff_SigmaIdeal");\r
829 \r
830   h_sigmaidealpidtot[3]->SetXTitle("p_{t}");\r
831   h_sigmaidealpidtot[3]->SetYTitle("contamination");\r
832   h_sigmaidealpidtot[3]->SetTitle("Cont_SigmaIdeal");\r
833   h_sigmaidealpidtot[3]->SetName("Cont_SigmaIdeal");\r
834 \r
835   aFolderObj->Add(h_sigmaidealpidtot[1]);\r
836   aFolderObj->Add(h_sigmaidealpidtot[3]);\r
837 \r
838   h_sigmafullpidtot[1]->SetXTitle("p_{t}");\r
839   h_sigmafullpidtot[1]->SetYTitle("efficiency");\r
840   h_sigmafullpidtot[1]->SetTitle("Eff_SigmaFull");\r
841   h_sigmafullpidtot[1]->SetName("Eff_SigmaFull");\r
842 \r
843   h_sigmafullpidtot[3]->SetXTitle("p_{t}");\r
844   h_sigmafullpidtot[3]->SetYTitle("contamination");\r
845   h_sigmafullpidtot[3]->SetTitle("Cont_SigmaFull");\r
846   h_sigmafullpidtot[3]->SetName("Cont_SigmaFull");\r
847 \r
848   aFolderObj->Add(h_sigmafullpidtot[1]);\r
849   aFolderObj->Add(h_sigmafullpidtot[3]);\r
850 \r
851   h_sigmaday0pidtot[1]->SetXTitle("p_{t}");\r
852   h_sigmaday0pidtot[1]->SetYTitle("efficiency");\r
853   h_sigmaday0pidtot[1]->SetTitle("Eff_SigmaDay0");\r
854   h_sigmaday0pidtot[1]->SetName("Eff_SigmaDay0");\r
855 \r
856   h_sigmaday0pidtot[3]->SetXTitle("p_{t}");\r
857   h_sigmaday0pidtot[3]->SetYTitle("contamination");\r
858   h_sigmaday0pidtot[3]->SetTitle("Cont_SigmaDay0");\r
859   h_sigmaday0pidtot[3]->SetName("Cont_SigmaDay0");\r
860 \r
861   aFolderObj->Add(h_sigmaday0pidtot[1]);\r
862   aFolderObj->Add(h_sigmaday0pidtot[3]);\r
863 \r
864   for(Int_t jdx = 0; jdx<5; jdx++)\r
865   {\r
866     sprintf(name,"Eff_SigmaIdeal_%d",jdx);\r
867     sprintf(name1,"Cont_SigmaIdeal_%d",jdx);\r
868 \r
869 \r
870     h_sigmaidealpid[jdx+5]->SetXTitle("p_{t}");\r
871     h_sigmaidealpid[jdx+5]->SetYTitle("efficiency");\r
872     h_sigmaidealpid[jdx+5]->SetTitle(name);\r
873     h_sigmaidealpid[jdx+5]->SetName(name);\r
874 \r
875     h_sigmaidealpid[jdx+15]->SetXTitle("p_{t}");\r
876     h_sigmaidealpid[jdx+15]->SetYTitle("contamination");\r
877     h_sigmaidealpid[jdx+15]->SetTitle(name1);\r
878     h_sigmaidealpid[jdx+15]->SetName(name1);\r
879 \r
880         aFolderObj->Add(h_sigmaidealpid[jdx+5]);\r
881         aFolderObj->Add(h_sigmaidealpid[jdx+15]);\r
882 \r
883     sprintf(name,"Eff_SigmaFull_%d",jdx);\r
884     sprintf(name1,"Cont_SigmaFull_%d",jdx);\r
885 \r
886     h_sigmafullpid[jdx+5]->SetXTitle("p_{t}");\r
887     h_sigmafullpid[jdx+5]->SetYTitle("efficiency");\r
888     h_sigmafullpid[jdx+5]->SetTitle(name);\r
889     h_sigmafullpid[jdx+5]->SetName(name);\r
890 \r
891     h_sigmafullpid[jdx+15]->SetXTitle("p_{t}");\r
892     h_sigmafullpid[jdx+15]->SetYTitle("contamination");\r
893     h_sigmafullpid[jdx+15]->SetTitle(name1);\r
894     h_sigmafullpid[jdx+15]->SetName(name1);\r
895 \r
896         aFolderObj->Add(h_sigmafullpid[jdx+5]);\r
897         aFolderObj->Add(h_sigmafullpid[jdx+15]);\r
898 \r
899     sprintf(name,"Eff_SigmaDay0_%d",jdx);\r
900     sprintf(name1,"Cont_SigmaDay0_%d",jdx);\r
901 \r
902     h_sigmaday0pid[jdx+5]->SetXTitle("p_{t}");\r
903     h_sigmaday0pid[jdx+5]->SetYTitle("efficiency");\r
904     h_sigmaday0pid[jdx+5]->SetTitle(name);\r
905     h_sigmaday0pid[jdx+5]->SetName(name);\r
906 \r
907     h_sigmaday0pid[jdx+15]->SetXTitle("p_{t}");\r
908     h_sigmaday0pid[jdx+15]->SetYTitle("contamination");\r
909     h_sigmaday0pid[jdx+15]->SetTitle(name1);\r
910     h_sigmaday0pid[jdx+15]->SetName(name1);\r
911 \r
912         aFolderObj->Add(h_sigmaday0pid[jdx+5]);\r
913         aFolderObj->Add(h_sigmaday0pid[jdx+15]);\r
914   }\r
915 \r
916   // export objects to analysis folder\r
917   fAnalysisFolder = ExportToFolder(aFolderObj);\r
918 \r
919   // delete only TObjArray\r
920   if(aFolderObj) delete aFolderObj;\r
921 }\r
922 \r
923 //_____________________________________________________________________________\r
924 TFolder* AliComparisonEff::ExportToFolder(TObjArray * array) \r
925 {\r
926   // recreate folder avery time and export objects to new one\r
927   //\r
928   AliComparisonEff * comp=this;\r
929   TFolder *folder = comp->GetAnalysisFolder();\r
930 \r
931   TString name, title;\r
932   TFolder *newFolder = 0;\r
933   Int_t i = 0;\r
934   Int_t size = array->GetSize();\r
935 \r
936   if(folder) { \r
937      // get name and title from old folder\r
938      name = folder->GetName();  \r
939      title = folder->GetTitle();  \r
940 \r
941          // delete old one\r
942      delete folder;\r
943 \r
944          // create new one\r
945      newFolder = CreateFolder(name.Data(),title.Data());\r
946      newFolder->SetOwner();\r
947 \r
948          // add objects to folder\r
949      while(i < size) {\r
950            newFolder->Add(array->At(i));\r
951            i++;\r
952          }\r
953   }\r
954 \r
955 return newFolder;\r
956 }\r
957 \r
958 \r
959 //_____________________________________________________________________________\r
960 TFolder* AliComparisonEff::CreateFolder(TString name,TString title) { \r
961 // create folder for analysed histograms\r
962 //\r
963 TFolder *folder = 0;\r
964   folder = new TFolder(name.Data(),title.Data());\r
965 \r
966   return folder;\r
967 }\r