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
10 // Author: J.Otwinowski 04/02/2008
\r
11 //------------------------------------------------------------------------------
\r
15 // after running comparison task, read the file, and get component
\r
16 gROOT->LoadMacro("$ALICE_ROOT/PWG1/Macros/LoadMyLibs.C");
\r
18 TFile f("Output.root");
\r
19 //AliComparisonEff * compObj = (AliComparisonEff*)f.Get("AliComparisonEff");
\r
20 AliComparisonEff * compObj = (AliComparisonEff*)cOutput->FindObject("AliComparisonEff");
\r
22 // Analyse comparison data
\r
25 // the output histograms/graphs will be stored in the folder "folderEff"
\r
26 compObj->GetAnalysisFolder()->ls("*");
\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
37 #include "AliESDtrack.h"
\r
38 #include "AliRecInfoCuts.h"
\r
39 #include "AliMCInfoCuts.h"
\r
40 #include "AliLog.h"
\r
41 #include "AliESDVertex.h"
\r
42 #include "AliExternalTrackParam.h"
\r
43 #include "AliTracker.h"
\r
44 #include "AliMCInfo.h"
\r
45 #include "AliESDRecInfo.h"
\r
46 #include "AliComparisonEff.h"
\r
48 using namespace std;
\r
50 ClassImp(AliComparisonEff)
\r
52 //_____________________________________________________________________________
\r
53 AliComparisonEff::AliComparisonEff():
\r
54 AliComparisonObject("AliComparisonEff"),
\r
64 // histogram folder
\r
67 // default consttructor
\r
70 //_____________________________________________________________________________
\r
71 AliComparisonEff::AliComparisonEff(Char_t* name="AliComparisonEff",Char_t*title="AliComparisonEff",Int_t analysisMode=0, Bool_t hptGenerator=kFALSE):
\r
72 AliComparisonObject(name,title),
\r
81 // histogram folder
\r
84 // named constructor
\r
86 SetAnalysisMode(analysisMode);
\r
87 SetHptGenerator(hptGenerator);
\r
93 //_____________________________________________________________________________
\r
94 AliComparisonEff::~AliComparisonEff()
\r
98 if(fEffHisto) delete fEffHisto; fEffHisto=0;
\r
100 if(fCutsRC) delete fCutsRC; fCutsRC=0;
\r
101 if(fCutsMC) delete fCutsMC; fCutsMC=0;
\r
103 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
\r
106 //_____________________________________________________________________________
\r
107 void AliComparisonEff::Init()
\r
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
115 if(IsHptGenerator() == kTRUE) {
\r
117 ptMin = 0.; ptMax = 100.;
\r
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
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
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
139 AliDebug(AliLog::kError, "ERROR: Cannot find AliMCInfoCuts object");
\r
141 AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");
\r
144 fAnalysisFolder = CreateFolder("folderEff","Analysis Efficiency Folder");
\r
147 //_____________________________________________________________________________
\r
148 void AliComparisonEff::ProcessTPC(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)
\r
150 // Fill efficiency comparison information
\r
152 AliExternalTrackParam *track = 0;
\r
153 Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]
\r
154 Double_t kMaxD = 123456.0; // max distance
\r
155 Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
\r
156 AliESDVertex vertexMC; // MC primary vertex
\r
158 // distance to Prim. vertex
\r
159 const Double_t* dv = infoMC->GetVDist();
\r
161 Float_t mcpt = infoMC->GetParticle().Pt();
\r
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
166 Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();
\r
167 Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());
\r
168 Bool_t recStatus = kFALSE;
\r
170 // calculate and set prim. vertex
\r
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
175 // Only 5 charged particle species (e,mu,pi,K,p)
\r
176 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\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
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
188 if (infoRC->GetESDtrack() && infoRC->GetESDtrack()->GetTPCInnerParam())
\r
190 if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0)
\r
192 Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);
\r
194 if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())
\r
204 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable };
\r
205 fEffHisto->Fill(vEffHisto);
\r
208 //_____________________________________________________________________________
\r
209 void AliComparisonEff::ProcessTPCITS(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)
\r
211 // Fill efficiency comparison information
\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
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
221 // distance to Prim. vertex
\r
222 const Double_t* dv = infoMC->GetVDist();
\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
228 // Only 5 charged particle species (e,mu,pi,K,p)
\r
229 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\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
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
241 if(!infoRC->GetESDtrack()) return;
\r
242 if(infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS())
\r
244 infoRC->GetESDtrack()->GetImpactParameters(dca,cov);
\r
245 if(TMath::Abs(dca[0]) < fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1]) < fCutsRC->GetMaxDCAToVertexZ())
\r
247 recStatus =(infoRC->GetStatus(1)==3);
\r
252 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable };
\r
253 fEffHisto->Fill(vEffHisto);
\r
256 //_____________________________________________________________________________
\r
257 void AliComparisonEff::ProcessConstrained(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)
\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
266 // distance to Prim. vertex
\r
267 const Double_t* dv = infoMC->GetVDist();
\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
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
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
283 // Only 5 charged particle species (e,mu,pi,K,p)
\r
284 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\r
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
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
296 // constrained parameters resolution
\r
297 if (!infoRC->GetESDtrack()) return;
\r
298 const AliExternalTrackParam * cparam = infoRC->GetESDtrack()->GetConstrainedParam();
\r
299 if(!cparam) return;
\r
301 if ((track = new AliExternalTrackParam(*cparam)) != 0)
\r
303 Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);
\r
305 if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())
\r
307 recStatus = (infoRC->GetStatus(1)!=3);
\r
314 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable };
\r
315 fEffHisto->Fill(vEffHisto);
\r
318 //_____________________________________________________________________________
\r
319 void AliComparisonEff::Exec(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)
\r
321 // Process comparison information
\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
327 printf("ERROR: AnalysisMode %d \n",fAnalysisMode);
\r
332 //_____________________________________________________________________________
\r
333 Long64_t AliComparisonEff::Merge(TCollection* const list)
\r
335 // Merge list of objects (needed by PROOF)
\r
340 if (list->IsEmpty())
\r
343 TIterator* iter = list->MakeIterator();
\r
346 // collection of generated histograms
\r
349 while((obj = iter->Next()) != 0)
\r
351 AliComparisonEff* entry = dynamic_cast<AliComparisonEff*>(obj);
\r
352 if (entry == 0) continue;
\r
354 fEffHisto->Add(entry->fEffHisto);
\r
361 //_____________________________________________________________________________
\r
362 void AliComparisonEff::Analyse()
\r
364 // Analyse comparison information and store output histograms
\r
365 // in the folder "folderEff"
\r
367 TH1::AddDirectory(kFALSE);
\r
368 TObjArray *aFolderObj = new TObjArray;
\r
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
374 // rec efficiency vs pt
\r
375 TH1D *ptAll = fEffHisto->Projection(2);
\r
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
382 aFolderObj->Add(ptRec);
\r
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
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
395 aFolderObj->Add(ptRecPi);
\r
397 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.);
\r
398 fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons
\r
399 TH1D *ptAllK = fEffHisto->Projection(2);
\r
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
406 aFolderObj->Add(ptRecK);
\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
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
417 aFolderObj->Add(ptRecP);
\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
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
431 aFolderObj->Add(ptRecF);
\r
434 // efficiency vs eta
\r
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
443 // rec efficiency vs eta
\r
444 TH1D *etaAll = fEffHisto->Projection(0);
\r
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
451 aFolderObj->Add(etaRec);
\r
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
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
463 aFolderObj->Add(etaRecPi);
\r
465 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.);
\r
466 fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons
\r
467 TH1D *etaAllK = fEffHisto->Projection(0);
\r
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
474 aFolderObj->Add(etaRecK);
\r
476 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.);
\r
477 fEffHisto->GetAxis(3)->SetRangeUser(4.,4.); // protons
\r
478 TH1D *etaAllP = fEffHisto->Projection(0);
\r
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
485 aFolderObj->Add(etaRecP);
\r
488 // findable efficiency
\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
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
501 aFolderObj->Add(etaRecF);
\r
503 // export objects to analysis folder
\r
504 fAnalysisFolder = ExportToFolder(aFolderObj);
\r
506 // delete only TObjArray
\r
507 if(aFolderObj) delete aFolderObj;
\r
510 //_____________________________________________________________________________
\r
511 TFolder* AliComparisonEff::ExportToFolder(TObjArray * array)
\r
513 // recreate folder avery time and export objects to new one
\r
515 AliComparisonEff * comp=this;
\r
516 TFolder *folder = comp->GetAnalysisFolder();
\r
518 TString name, title;
\r
519 TFolder *newFolder = 0;
\r
521 Int_t size = array->GetSize();
\r
524 // get name and title from old folder
\r
525 name = folder->GetName();
\r
526 title = folder->GetTitle();
\r
532 newFolder = CreateFolder(name.Data(),title.Data());
\r
533 newFolder->SetOwner();
\r
535 // add objects to folder
\r
537 newFolder->Add(array->At(i));
\r
546 //_____________________________________________________________________________
\r
547 TFolder* AliComparisonEff::CreateFolder(TString name,TString title) {
\r
548 // create folder for analysed histograms
\r
550 TFolder *folder = 0;
\r
551 folder = new TFolder(name.Data(),title.Data());
\r