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