]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/AliComparisonEff.cxx
comments added to satisfy voilations
[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
35771050 19 //AliComparisonEff * compObj = (AliComparisonEff*)f.Get("AliComparisonEff");\r
20 AliComparisonEff * compObj = (AliComparisonEff*)cOutput->FindObject("AliComparisonEff");\r
6d1c79ca 21\r
b4126c69 22 // Analyse comparison data\r
3baa4bfd 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
6d1c79ca 33\r
6d1c79ca 34*/\r
35\r
6d1c79ca 36// \r
71a14197 37#include "AliESDtrack.h"\r
6d1c79ca 38#include "AliRecInfoCuts.h" \r
39#include "AliMCInfoCuts.h" \r
40#include "AliLog.h" \r
6d1c79ca 41#include "AliESDVertex.h" \r
42#include "AliExternalTrackParam.h" \r
43#include "AliTracker.h" \r
6d1c79ca 44#include "AliMCInfo.h" \r
45#include "AliESDRecInfo.h" \r
46#include "AliComparisonEff.h" \r
47\r
48using namespace std;\r
49\r
6d1c79ca 50ClassImp(AliComparisonEff)\r
51\r
52//_____________________________________________________________________________\r
53AliComparisonEff::AliComparisonEff():\r
3baa4bfd 54 AliComparisonObject("AliComparisonEff"),\r
6d1c79ca 55\r
56 // histograms\r
57 \r
71a14197 58 fEffHisto(0),\r
6d1c79ca 59\r
60 // Cuts \r
61 fCutsRC(0), \r
62 fCutsMC(0),\r
63\r
3baa4bfd 64 // histogram folder \r
65 fAnalysisFolder(0)\r
6d1c79ca 66{\r
71a14197 67 // default consttructor \r
68}\r
6d1c79ca 69\r
71a14197 70//_____________________________________________________________________________\r
71AliComparisonEff::AliComparisonEff(Char_t* name="AliComparisonEff",Char_t*title="AliComparisonEff",Int_t analysisMode=0, Bool_t hptGenerator=kFALSE):\r
72 AliComparisonObject(name,title),\r
6d1c79ca 73\r
71a14197 74 // histograms\r
75 fEffHisto(0),\r
6d1c79ca 76\r
71a14197 77 // Cuts \r
78 fCutsRC(0), \r
79 fCutsMC(0),\r
6d1c79ca 80\r
71a14197 81 // histogram folder \r
82 fAnalysisFolder(0)\r
83{\r
84 // named constructor\r
85 //\r
86 SetAnalysisMode(analysisMode);\r
87 SetHptGenerator(hptGenerator);\r
b4126c69 88\r
3baa4bfd 89 Init();\r
6d1c79ca 90}\r
91\r
6d1c79ca 92\r
71a14197 93//_____________________________________________________________________________\r
94AliComparisonEff::~AliComparisonEff()\r
95{\r
96// destructor\r
6d1c79ca 97\r
71a14197 98 if(fEffHisto) delete fEffHisto; fEffHisto=0;\r
6d1c79ca 99\r
71a14197 100 if(fCutsRC) delete fCutsRC; fCutsRC=0;\r
101 if(fCutsMC) delete fCutsMC; fCutsMC=0;\r
3baa4bfd 102\r
103 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;\r
6d1c79ca 104}\r
105\r
106//_____________________________________________________________________________\r
71a14197 107void AliComparisonEff::Init()\r
108{\r
6d1c79ca 109 // Init histograms\r
110 //\r
71a14197 111 Int_t nPtBins = 31;\r
112 Double_t binsPt[32] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.7,0.8,0.9,1.0,1.2,1.4,1.6,1.8,2.0,2.25,2.5,2.75,3.,3.5,4.,5.,6.,8.,10.};\r
113 Double_t ptMin = 0., ptMax = 10.;\r
6d1c79ca 114\r
71a14197 115 if(IsHptGenerator() == kTRUE) {\r
116 nPtBins = 100;\r
117 ptMin = 0.; ptMax = 100.;\r
118 }\r
6d1c79ca 119\r
71a14197 120 //mceta:mcphi:mcpt:pid:isPrim:recStatus:findable\r
121 Int_t binsEffHisto[7]={30,144,nPtBins,5,2,2,2};\r
122 Double_t minEffHisto[7]={-1.5,0.,ptMin,0.,0.,0.,0.};\r
123 Double_t maxEffHisto[7]={ 1.5,2.*TMath::Pi(), ptMax,5.,2.,2.,2.};\r
6d1c79ca 124\r
71a14197 125 fEffHisto = new THnSparseF("fEffHisto","mceta:mcphi:mcpt:pid:isPrim:recStatus:findable",7,binsEffHisto,minEffHisto,maxEffHisto);\r
126 if(!IsHptGenerator()) fEffHisto->SetBinEdges(2,binsPt);\r
6d1c79ca 127\r
71a14197 128 fEffHisto->GetAxis(0)->SetTitle("eta");\r
129 fEffHisto->GetAxis(1)->SetTitle("phi (rad)");\r
130 fEffHisto->GetAxis(2)->SetTitle("pt (GeV/c)");\r
131 fEffHisto->GetAxis(3)->SetTitle("pid");\r
132 fEffHisto->GetAxis(4)->SetTitle("isPrim");\r
133 fEffHisto->GetAxis(5)->SetTitle("recStatus");\r
134 fEffHisto->GetAxis(6)->SetTitle("findable");\r
135 fEffHisto->Sumw2();\r
6d1c79ca 136\r
3baa4bfd 137 // init cuts\r
6d1c79ca 138 if(!fCutsMC) \r
139 AliDebug(AliLog::kError, "ERROR: Cannot find AliMCInfoCuts object");\r
140 if(!fCutsRC) \r
141 AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");\r
3baa4bfd 142\r
143 // init folder\r
144 fAnalysisFolder = CreateFolder("folderEff","Analysis Efficiency Folder");\r
6d1c79ca 145}\r
146\r
147//_____________________________________________________________________________\r
71a14197 148void AliComparisonEff::ProcessTPC(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r
6d1c79ca 149{\r
150 // Fill efficiency comparison information\r
71a14197 151\r
6d1c79ca 152 AliExternalTrackParam *track = 0;\r
6d1c79ca 153 Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]\r
154 Double_t kMaxD = 123456.0; // max distance\r
6d1c79ca 155 Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r
71a14197 156 AliESDVertex vertexMC; // MC primary vertex\r
6d1c79ca 157\r
158 // distance to Prim. vertex \r
159 const Double_t* dv = infoMC->GetVDist(); \r
160\r
161 Float_t mcpt = infoMC->GetParticle().Pt();\r
71a14197 162 Float_t mceta = infoMC->GetParticle().Eta();\r
163 Float_t mcphi = infoMC->GetParticle().Phi();\r
164 if(mcphi<0) mcphi += 2.*TMath::Pi();\r
165\r
6d1c79ca 166 Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r
71a14197 167 Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
168 Bool_t recStatus = kFALSE;\r
6d1c79ca 169 \r
170 // calculate and set prim. vertex\r
71a14197 171 vertexMC.SetXv( infoMC->GetParticle().Vx() - dv[0] );\r
172 vertexMC.SetYv( infoMC->GetParticle().Vy() - dv[1] );\r
173 vertexMC.SetZv( infoMC->GetParticle().Vz() - dv[2] );\r
6d1c79ca 174 \r
71a14197 175 // Only 5 charged particle species (e,mu,pi,K,p)\r
6d1c79ca 176 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r
177\r
178 // transform Pdg to Pid\r
179 // Pdg convension is different for hadrons and leptons \r
180 // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r
181 Double_t pid = -1;\r
182 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r
183 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r
184 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r
185 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r
186 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r
187\r
71a14197 188 if (infoRC->GetESDtrack() && infoRC->GetESDtrack()->GetTPCInnerParam()) \r
6d1c79ca 189 {\r
71a14197 190 if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0)\r
6d1c79ca 191 {\r
71a14197 192 Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);\r
193 if(bDCAStatus) {\r
194 if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())\r
195 {\r
196 recStatus = kTRUE;\r
197 }\r
198 }\r
199 delete track;\r
200 }\r
201 }\r
202\r
203 // Fill histograms\r
204 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r
205 fEffHisto->Fill(vEffHisto);\r
206}\r
207\r
208//_____________________________________________________________________________\r
209void AliComparisonEff::ProcessTPCITS(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r
210{\r
211 // Fill efficiency comparison information\r
212 \r
213 Int_t clusterITS[200];\r
214 Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r
215\r
216 Float_t mcpt = infoMC->GetParticle().Pt();\r
217 Float_t mceta = infoMC->GetParticle().Eta();\r
218 Float_t mcphi = infoMC->GetParticle().Phi();\r
219 if(mcphi<0) mcphi += 2.*TMath::Pi();\r
220\r
221 // distance to Prim. vertex \r
222 const Double_t* dv = infoMC->GetVDist(); \r
223\r
224 Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r
225 Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
226 Bool_t recStatus =kFALSE;\r
6d1c79ca 227 \r
71a14197 228 // Only 5 charged particle species (e,mu,pi,K,p)\r
229 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r
230\r
231 // transform Pdg to Pid\r
232 // Pdg convension is different for hadrons and leptons \r
233 // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r
234 Double_t pid = -1;\r
235 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r
236 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r
237 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r
238 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r
239 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r
240\r
241 if(!infoRC->GetESDtrack()) return;\r
242 if(infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS())\r
243 {\r
244 infoRC->GetESDtrack()->GetImpactParameters(dca,cov);\r
245 if(TMath::Abs(dca[0]) < fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1]) < fCutsRC->GetMaxDCAToVertexZ()) \r
246 {\r
247 recStatus =(infoRC->GetStatus(1)==3);\r
248 } \r
6d1c79ca 249 }\r
250\r
71a14197 251 // fill histograms\r
252 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r
253 fEffHisto->Fill(vEffHisto);\r
254}\r
6d1c79ca 255\r
71a14197 256//_____________________________________________________________________________\r
257void AliComparisonEff::ProcessConstrained(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r
258{\r
259 // Fill efficiency comparison information\r
260 AliExternalTrackParam *track = 0;\r
261 Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]\r
262 Double_t kMaxD = 123456.0; // max distance\r
263 Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z\r
264 AliESDVertex vertexMC; // MC primary vertex\r
6d1c79ca 265\r
71a14197 266 // distance to Prim. vertex \r
267 const Double_t* dv = infoMC->GetVDist(); \r
268\r
269 Float_t mcpt = infoMC->GetParticle().Pt();\r
270 Float_t mceta = infoMC->GetParticle().Eta();\r
271 Float_t mcphi = infoMC->GetParticle().Phi();\r
272 if(mcphi<0) mcphi += 2.*TMath::Pi();\r
273\r
274 Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();\r
275 Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());\r
276 Bool_t recStatus = kFALSE;\r
277 \r
278 // calculate and set prim. vertex\r
279 vertexMC.SetXv( infoMC->GetParticle().Vx() - dv[0] );\r
280 vertexMC.SetYv( infoMC->GetParticle().Vy() - dv[1] );\r
281 vertexMC.SetZv( infoMC->GetParticle().Vz() - dv[2] );\r
35771050 282 \r
71a14197 283 // Only 5 charged particle species (e,mu,pi,K,p)\r
284 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return; \r
6d1c79ca 285\r
71a14197 286 // transform Pdg to Pid\r
287 // Pdg convension is different for hadrons and leptons \r
288 // (e.g. K+/K- = 321/-321; e+/e- = -11/11 ) \r
289 Double_t pid = -1;\r
290 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0; \r
291 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1; \r
292 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2; \r
293 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3; \r
294 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4; \r
35771050 295\r
71a14197 296 // constrained parameters resolution\r
297 if (!infoRC->GetESDtrack()) return;\r
298 const AliExternalTrackParam * cparam = infoRC->GetESDtrack()->GetConstrainedParam();\r
299 if(!cparam) return;\r
6d1c79ca 300\r
71a14197 301 if ((track = new AliExternalTrackParam(*cparam)) != 0)\r
302 {\r
303 Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);\r
304 if(bDCAStatus) {\r
305 if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())\r
306 {\r
307 recStatus = (infoRC->GetStatus(1)!=3);\r
308 }\r
309 }\r
310 delete track;\r
6d1c79ca 311 }\r
71a14197 312\r
313 // Fill histograms\r
314 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable }; \r
315 fEffHisto->Fill(vEffHisto);\r
6d1c79ca 316}\r
317\r
318//_____________________________________________________________________________\r
71a14197 319void AliComparisonEff::Exec(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)\r
6d1c79ca 320{\r
321 // Process comparison information\r
71a14197 322\r
323 if(GetAnalysisMode() == 0) ProcessTPC(infoMC,infoRC);\r
324 else if(GetAnalysisMode() == 1) ProcessTPCITS(infoMC,infoRC);\r
325 else if(GetAnalysisMode() == 2) ProcessConstrained(infoMC,infoRC);\r
326 else {\r
327 printf("ERROR: AnalysisMode %d \n",fAnalysisMode);\r
328 return;\r
329 }\r
6d1c79ca 330}\r
331\r
332//_____________________________________________________________________________\r
71a14197 333Long64_t AliComparisonEff::Merge(TCollection* const list) \r
6d1c79ca 334{\r
335 // Merge list of objects (needed by PROOF)\r
336\r
337 if (!list)\r
338 return 0;\r
339\r
340 if (list->IsEmpty())\r
341 return 1;\r
342\r
343 TIterator* iter = list->MakeIterator();\r
344 TObject* obj = 0;\r
345\r
346 // collection of generated histograms\r
347\r
348 Int_t count=0;\r
349 while((obj = iter->Next()) != 0) \r
350 {\r
351 AliComparisonEff* entry = dynamic_cast<AliComparisonEff*>(obj);\r
3baa4bfd 352 if (entry == 0) continue; \r
6d1c79ca 353 \r
71a14197 354 fEffHisto->Add(entry->fEffHisto);\r
6d1c79ca 355 count++;\r
356 }\r
357\r
358return count;\r
359}\r
360 \r
361//_____________________________________________________________________________\r
362void AliComparisonEff::Analyse() \r
363{\r
3baa4bfd 364 // Analyse comparison information and store output histograms\r
365 // in the folder "folderEff" \r
366 //\r
3baa4bfd 367 TH1::AddDirectory(kFALSE);\r
b4126c69 368 TObjArray *aFolderObj = new TObjArray;\r
6d1c79ca 369\r
71a14197 370 // efficiency vs pt\r
371 fEffHisto->GetAxis(0)->SetRangeUser(-0.9,0.9); // eta range\r
372 fEffHisto->GetAxis(4)->SetRangeUser(1.,1.); // primary tracks\r
6d1c79ca 373\r
71a14197 374 // rec efficiency vs pt\r
375 TH1D *ptAll = fEffHisto->Projection(2);\r
6d1c79ca 376\r
71a14197 377 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed \r
378 TH1D *ptRec = fEffHisto->Projection(2);\r
379 ptRec->Divide(ptAll);\r
380 ptRec->SetName("ptRecEff");\r
6d1c79ca 381\r
71a14197 382 aFolderObj->Add(ptRec);\r
6d1c79ca 383\r
6d1c79ca 384\r
71a14197 385 // rec efficiency vs pid vs pt\r
386 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
387 fEffHisto->GetAxis(3)->SetRangeUser(2.,2.); // pions\r
388 TH1D *ptAllPi = fEffHisto->Projection(2);\r
6d1c79ca 389\r
71a14197 390 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
391 TH1D *ptRecPi = fEffHisto->Projection(2);\r
392 ptRecPi->Divide(ptAllPi);\r
393 ptRecPi->SetName("ptRecEffPi");\r
6d1c79ca 394\r
71a14197 395 aFolderObj->Add(ptRecPi);\r
6d1c79ca 396\r
71a14197 397 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
398 fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons\r
399 TH1D *ptAllK = fEffHisto->Projection(2);\r
6d1c79ca 400\r
71a14197 401 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
402 TH1D *ptRecK = fEffHisto->Projection(2);\r
403 ptRecK->Divide(ptAllK);\r
404 ptRecK->SetName("ptRecEffK");\r
6d1c79ca 405\r
71a14197 406 aFolderObj->Add(ptRecK);\r
407\r
408 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
409 fEffHisto->GetAxis(3)->SetRangeUser(4.,4.); // protons\r
410 TH1D *ptAllP = fEffHisto->Projection(2);\r
6d1c79ca 411\r
71a14197 412 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
413 TH1D *ptRecP = fEffHisto->Projection(2);\r
414 ptRecP->Divide(ptAllP);\r
415 ptRecP->SetName("ptRecEffP");\r
416\r
417 aFolderObj->Add(ptRecP);\r
418 \r
419 // findable efficiency \r
420 fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); \r
421 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
422 fEffHisto->GetAxis(6)->SetRangeUser(1.,1.); // findable\r
423 TH1D *ptAllF = fEffHisto->Projection(2);\r
424\r
425 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.);\r
426 fEffHisto->GetAxis(6)->SetRangeUser(1.,1.);\r
427 TH1D *ptRecF = fEffHisto->Projection(2); // rec findable\r
428 ptRecF->Divide(ptAllF);\r
429 ptRecF->SetName("ptRecFindableEff");\r
430\r
431 aFolderObj->Add(ptRecF);\r
6d1c79ca 432\r
6d1c79ca 433 //\r
71a14197 434 // efficiency vs eta\r
6d1c79ca 435 //\r
6d1c79ca 436\r
71a14197 437 fEffHisto->GetAxis(0)->SetRangeUser(-1.5,1.5); // eta range\r
438 fEffHisto->GetAxis(2)->SetRangeUser(0.2,10.); // pt range\r
439 fEffHisto->GetAxis(4)->SetRangeUser(1.,1.); // primary tracks\r
440 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); // all\r
441 fEffHisto->GetAxis(6)->SetRangeUser(0.,1.); // all\r
b4126c69 442\r
71a14197 443 // rec efficiency vs eta\r
444 TH1D *etaAll = fEffHisto->Projection(0);\r
b4126c69 445\r
71a14197 446 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed \r
447 TH1D *etaRec = fEffHisto->Projection(0);\r
448 etaRec->Divide(etaAll);\r
449 etaRec->SetName("etaRecEff");\r
3baa4bfd 450\r
71a14197 451 aFolderObj->Add(etaRec);\r
6d1c79ca 452\r
71a14197 453 // rec efficiency vs pid vs eta\r
454 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
455 fEffHisto->GetAxis(3)->SetRangeUser(2.,2.); // pions\r
456 TH1D *etaAllPi = fEffHisto->Projection(0);\r
6d1c79ca 457\r
71a14197 458 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
459 TH1D *etaRecPi = fEffHisto->Projection(0);\r
460 etaRecPi->Divide(etaAllPi);\r
461 etaRecPi->SetName("etaRecEffPi");\r
b4126c69 462\r
71a14197 463 aFolderObj->Add(etaRecPi);\r
3baa4bfd 464\r
71a14197 465 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
466 fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons\r
467 TH1D *etaAllK = fEffHisto->Projection(0);\r
6d1c79ca 468\r
71a14197 469 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
470 TH1D *etaRecK = fEffHisto->Projection(0);\r
471 etaRecK->Divide(etaAllK);\r
472 etaRecK->SetName("etaRecEffK");\r
6d1c79ca 473\r
71a14197 474 aFolderObj->Add(etaRecK);\r
b4126c69 475\r
71a14197 476 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
477 fEffHisto->GetAxis(3)->SetRangeUser(4.,4.); // protons\r
478 TH1D *etaAllP = fEffHisto->Projection(0);\r
3baa4bfd 479\r
71a14197 480 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.); // reconstructed\r
481 TH1D *etaRecP = fEffHisto->Projection(0);\r
482 etaRecP->Divide(etaAllP);\r
483 etaRecP->SetName("etaRecEffP");\r
484\r
485 aFolderObj->Add(etaRecP);\r
486 \r
487 //\r
488 // findable efficiency \r
489 //\r
490 fEffHisto->GetAxis(3)->SetRangeUser(0.,4.); \r
491 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.); \r
492 fEffHisto->GetAxis(6)->SetRangeUser(1.,1.); // findable\r
493 TH1D *etaAllF = fEffHisto->Projection(0);\r
494\r
495 fEffHisto->GetAxis(5)->SetRangeUser(1.,1.);\r
496 fEffHisto->GetAxis(6)->SetRangeUser(1.,1.);\r
497 TH1D *etaRecF = fEffHisto->Projection(0); // rec findable\r
498 etaRecF->Divide(etaAllF);\r
499 etaRecF->SetName("etaRecFindableEff");\r
500\r
501 aFolderObj->Add(etaRecF);\r
6d1c79ca 502\r
b4126c69 503 // export objects to analysis folder\r
504 fAnalysisFolder = ExportToFolder(aFolderObj);\r
3baa4bfd 505\r
b4126c69 506 // delete only TObjArray\r
507 if(aFolderObj) delete aFolderObj;\r
3baa4bfd 508}\r
509\r
b4126c69 510//_____________________________________________________________________________\r
511TFolder* AliComparisonEff::ExportToFolder(TObjArray * array) \r
512{\r
513 // recreate folder avery time and export objects to new one\r
514 //\r
515 AliComparisonEff * comp=this;\r
516 TFolder *folder = comp->GetAnalysisFolder();\r
517\r
518 TString name, title;\r
519 TFolder *newFolder = 0;\r
520 Int_t i = 0;\r
521 Int_t size = array->GetSize();\r
522\r
523 if(folder) { \r
524 // get name and title from old folder\r
525 name = folder->GetName(); \r
526 title = folder->GetTitle(); \r
527\r
528 // delete old one\r
529 delete folder;\r
530\r
531 // create new one\r
532 newFolder = CreateFolder(name.Data(),title.Data());\r
533 newFolder->SetOwner();\r
534\r
535 // add objects to folder\r
536 while(i < size) {\r
537 newFolder->Add(array->At(i));\r
538 i++;\r
539 }\r
540 }\r
541\r
542return newFolder;\r
543}\r
544\r
545\r
3baa4bfd 546//_____________________________________________________________________________\r
547TFolder* AliComparisonEff::CreateFolder(TString name,TString title) { \r
548// create folder for analysed histograms\r
549//\r
550TFolder *folder = 0;\r
551 folder = new TFolder(name.Data(),title.Data());\r
552\r
553 return folder;\r
6d1c79ca 554}\r