]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/AliComparisonEff.cxx
TPC KrCF and Cluster property plotting (Kenneth & Gaute)
[u/mrichter/AliRoot.git] / PWG1 / AliComparisonEff.cxx
CommitLineData
6d1c79ca 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
3baa4bfd 7// the analysis (histograms/graphs) are stored in the folder which is \r
8// a data member of AliComparisonEff.\r
9// \r
6d1c79ca 10// Author: J.Otwinowski 04/02/2008 \r
11//------------------------------------------------------------------------------\r
12\r
13/*\r
3baa4bfd 14 \r
15 // after running comparison task, read the file, and get component\r
b4126c69 16 gROOT->LoadMacro("$ALICE_ROOT/PWG1/Macros/LoadMyLibs.C");\r
17 LoadMyLibs();\r
6d1c79ca 18 TFile f("Output.root");\r
3baa4bfd 19 AliComparisonEff * compObj = (AliComparisonEff*)f.Get("AliComparisonEff");\r
6d1c79ca 20\r
b4126c69 21 // Analyse comparison data\r
3baa4bfd 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
6d1c79ca 32\r
6d1c79ca 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
68using namespace std;\r
69\r
70\r
71ClassImp(AliComparisonEff)\r
72\r
73//_____________________________________________________________________________\r
74AliComparisonEff::AliComparisonEff():\r
3baa4bfd 75 AliComparisonObject("AliComparisonEff"),\r
6d1c79ca 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
3baa4bfd 112 fVertex(0),\r
113\r
114 // histogram folder \r
115 fAnalysisFolder(0)\r
6d1c79ca 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
b4126c69 137\r
3baa4bfd 138 Init();\r
6d1c79ca 139}\r
140\r
141//_____________________________________________________________________________\r
142AliComparisonEff::~AliComparisonEff(){\r
143\r
144 // \r
3baa4bfd 145 if(fMCPt) delete fMCPt; fMCPt=0;\r
6d1c79ca 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
3baa4bfd 196\r
197 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r
6d1c79ca 198}\r
199\r
200//_____________________________________________________________________________\r
3baa4bfd 201void AliComparisonEff::Init(){\r
6d1c79ca 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
6d1c79ca 331\r
3baa4bfd 332 // init cuts\r
6d1c79ca 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
3baa4bfd 337\r
338 // init folder\r
339 fAnalysisFolder = CreateFolder("folderEff","Analysis Efficiency Folder");\r
6d1c79ca 340}\r
341\r
342//_____________________________________________________________________________\r
343void AliComparisonEff::Process(AliMCInfo* infoMC, AliESDRecInfo *infoRC)\r
344{\r
345 // Fill efficiency comparison information\r
346 \r
347 AliExternalTrackParam *track = 0;\r
6d1c79ca 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
b4126c69 353 const Double_t kSigma2Full_z = 5.0; // drift velocity (goofie) [cm] \r
6d1c79ca 354\r
355 const Double_t kSigma2Day0_xy = 0.02; // ExB [cm]\r
b4126c69 356 const Double_t kSigma2Day0_z = 0.1; // drift velocity (goofie) [cm] \r
6d1c79ca 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
6d1c79ca 398 Bool_t bDCAStatus = track->PropagateToDCA(fVertex,field,kMaxD,dca,cov);\r
3baa4bfd 399 if(bDCAStatus) {\r
6d1c79ca 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
589void 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
596Long64_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
3baa4bfd 615 if (entry == 0) continue; \r
6d1c79ca 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
666return count;\r
667}\r
668 \r
669//_____________________________________________________________________________\r
670void AliComparisonEff::Analyse() \r
671{\r
3baa4bfd 672 // Analyse comparison information and store output histograms\r
673 // in the folder "folderEff" \r
674 //\r
6d1c79ca 675 \r
3baa4bfd 676 TH1::AddDirectory(kFALSE);\r
677\r
6d1c79ca 678 AliComparisonEff * comp=this;\r
b4126c69 679 TObjArray *aFolderObj = new TObjArray;\r
6d1c79ca 680\r
3baa4bfd 681 // calculate efficiency and contamination (4 sigma) \r
6d1c79ca 682 TH1 *h_sigmaidealpid[20];\r
683 TH1 *h_sigmafullpid[20];\r
684 TH1 *h_sigmaday0pid[20];\r
685\r
6d1c79ca 686 TH1 *h_sigmaidealpidtot[4];\r
687 TH1 *h_sigmafullpidtot[4];\r
688 TH1 *h_sigmaday0pidtot[4];\r
689\r
6d1c79ca 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
6d1c79ca 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
6d1c79ca 778 TCanvas * c = new TCanvas("Efficiency","Track efficiency");\r
779 c->cd();\r
b4126c69 780 c->Divide(1,2);\r
6d1c79ca 781\r
6d1c79ca 782 //\r
b4126c69 783 c->cd(1);\r
6d1c79ca 784 comp->fEffTPCTanF->SetXTitle("Tan(#theta)");\r
785 comp->fEffTPCTanF->SetYTitle("eff_{findable}");\r
3baa4bfd 786 comp->fEffTPCTanF->SetName("EffTanFindable");\r
b4126c69 787 comp->fEffTPCTanF->Draw();\r
6d1c79ca 788 //\r
b4126c69 789 c->cd(2);\r
6d1c79ca 790 comp->fEffTPCTan->SetXTitle("Tan(#theta)");\r
791 comp->fEffTPCTan->SetYTitle("eff_{all}");\r
3baa4bfd 792 comp->fEffTPCTan->SetName("EffTanAll");\r
b4126c69 793 comp->fEffTPCTan->Draw();\r
6d1c79ca 794\r
b4126c69 795 aFolderObj->Add(comp->fEffTPCTanF);\r
796 aFolderObj->Add(comp->fEffTPCTan);\r
6d1c79ca 797\r
b4126c69 798 h_sigmaidealpidtot[1]->SetXTitle("p_{t}");\r
799 h_sigmaidealpidtot[1]->SetYTitle("efficiency");\r
800 h_sigmaidealpidtot[1]->SetTitle("Eff_SigmaIdeal");\r
3baa4bfd 801 h_sigmaidealpidtot[1]->SetName("Eff_SigmaIdeal");\r
b4126c69 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
3baa4bfd 806 h_sigmaidealpidtot[3]->SetName("Cont_SigmaIdeal");\r
6d1c79ca 807\r
b4126c69 808 aFolderObj->Add(h_sigmaidealpidtot[1]);\r
809 aFolderObj->Add(h_sigmaidealpidtot[3]);\r
3baa4bfd 810\r
b4126c69 811 h_sigmafullpidtot[1]->SetXTitle("p_{t}");\r
812 h_sigmafullpidtot[1]->SetYTitle("efficiency");\r
813 h_sigmafullpidtot[1]->SetTitle("Eff_SigmaFull");\r
3baa4bfd 814 h_sigmafullpidtot[1]->SetName("Eff_SigmaFull");\r
b4126c69 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
3baa4bfd 819 h_sigmafullpidtot[3]->SetName("Cont_SigmaFull");\r
820\r
b4126c69 821 aFolderObj->Add(h_sigmafullpidtot[1]);\r
822 aFolderObj->Add(h_sigmafullpidtot[3]);\r
3baa4bfd 823\r
b4126c69 824 h_sigmaday0pidtot[1]->SetXTitle("p_{t}");\r
825 h_sigmaday0pidtot[1]->SetYTitle("efficiency");\r
826 h_sigmaday0pidtot[1]->SetTitle("Eff_SigmaDay0");\r
3baa4bfd 827 h_sigmaday0pidtot[1]->SetName("Eff_SigmaDay0");\r
b4126c69 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
3baa4bfd 832 h_sigmaday0pidtot[3]->SetName("Cont_SigmaDay0");\r
833\r
b4126c69 834 aFolderObj->Add(h_sigmaday0pidtot[1]);\r
835 aFolderObj->Add(h_sigmaday0pidtot[3]);\r
6d1c79ca 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
b4126c69 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
3baa4bfd 846 h_sigmaidealpid[idx+5]->SetName(name);\r
b4126c69 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
3baa4bfd 851 h_sigmaidealpid[idx+15]->SetName(name1);\r
852\r
b4126c69 853 aFolderObj->Add(h_sigmaidealpid[idx+5]);\r
854 aFolderObj->Add(h_sigmaidealpid[idx+15]);\r
6d1c79ca 855\r
856 sprintf(name,"Eff_SigmaFull_%d",idx);\r
857 sprintf(name1,"Cont_SigmaFull_%d",idx);\r
858\r
b4126c69 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
3baa4bfd 862 h_sigmafullpid[idx+5]->SetName(name);\r
b4126c69 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
3baa4bfd 867 h_sigmafullpid[idx+15]->SetName(name1);\r
868\r
b4126c69 869 aFolderObj->Add(h_sigmafullpid[idx+5]);\r
870 aFolderObj->Add(h_sigmafullpid[idx+15]);\r
6d1c79ca 871\r
872 sprintf(name,"Eff_SigmaDay0_%d",idx);\r
873 sprintf(name1,"Cont_SigmaDay0_%d",idx);\r
874\r
b4126c69 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
3baa4bfd 878 h_sigmaday0pid[idx+5]->SetName(name);\r
b4126c69 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
3baa4bfd 883 h_sigmaday0pid[idx+15]->SetName(name1);\r
884\r
b4126c69 885 aFolderObj->Add(h_sigmaday0pid[idx+5]);\r
886 aFolderObj->Add(h_sigmaday0pid[idx+15]);\r
6d1c79ca 887 }\r
888\r
b4126c69 889 // export objects to analysis folder\r
890 fAnalysisFolder = ExportToFolder(aFolderObj);\r
3baa4bfd 891\r
b4126c69 892 // delete only TObjArray\r
893 if(aFolderObj) delete aFolderObj;\r
3baa4bfd 894}\r
895\r
b4126c69 896//_____________________________________________________________________________\r
897TFolder* 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
928return newFolder;\r
929}\r
930\r
931\r
3baa4bfd 932//_____________________________________________________________________________\r
933TFolder* AliComparisonEff::CreateFolder(TString name,TString title) { \r
934// create folder for analysed histograms\r
935//\r
936TFolder *folder = 0;\r
937 folder = new TFolder(name.Data(),title.Data());\r
938\r
939 return folder;\r
6d1c79ca 940}\r