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