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
40 #include "AliESDtrack.h"
\r
41 #include "AliRecInfoCuts.h"
\r
42 #include "AliMCInfoCuts.h"
\r
43 #include "AliLog.h"
\r
44 #include "AliESDVertex.h"
\r
45 #include "AliExternalTrackParam.h"
\r
46 #include "AliTracker.h"
\r
47 #include "AliMCInfo.h"
\r
48 #include "AliESDRecInfo.h"
\r
49 #include "AliComparisonEff.h"
\r
51 using namespace std;
\r
53 ClassImp(AliComparisonEff)
\r
55 //_____________________________________________________________________________
\r
56 AliComparisonEff::AliComparisonEff():
\r
57 AliComparisonObject("AliComparisonEff"),
\r
67 // histogram folder
\r
70 // default consttructor
\r
73 //_____________________________________________________________________________
\r
74 AliComparisonEff::AliComparisonEff(Char_t* name="AliComparisonEff",Char_t*title="AliComparisonEff",Int_t analysisMode=0, Bool_t hptGenerator=kFALSE):
\r
75 AliComparisonObject(name,title),
\r
84 // histogram folder
\r
87 // named constructor
\r
89 SetAnalysisMode(analysisMode);
\r
90 SetHptGenerator(hptGenerator);
\r
96 //_____________________________________________________________________________
\r
97 AliComparisonEff::~AliComparisonEff()
\r
101 if(fEffHisto) delete fEffHisto; fEffHisto=0;
\r
103 if(fCutsRC) delete fCutsRC; fCutsRC=0;
\r
104 if(fCutsMC) delete fCutsMC; fCutsMC=0;
\r
106 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
\r
109 //_____________________________________________________________________________
\r
110 void AliComparisonEff::Init()
\r
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
118 if(IsHptGenerator() == kTRUE) {
\r
120 ptMin = 0.; ptMax = 100.;
\r
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
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
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
142 AliDebug(AliLog::kError, "ERROR: Cannot find AliMCInfoCuts object");
\r
144 AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");
\r
147 fAnalysisFolder = CreateFolder("folderEff","Analysis Efficiency Folder");
\r
150 //_____________________________________________________________________________
\r
151 void AliComparisonEff::ProcessTPC(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)
\r
153 // Fill efficiency comparison information
\r
155 AliExternalTrackParam *track = 0;
\r
156 Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]
\r
157 Double_t kMaxD = 123456.0; // max distance
\r
158 Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
\r
159 AliESDVertex vertexMC; // MC primary vertex
\r
161 // distance to Prim. vertex
\r
162 const Double_t* dv = infoMC->GetVDist();
\r
164 Float_t mcpt = infoMC->GetParticle().Pt();
\r
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
169 Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();
\r
170 Bool_t findable = (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());
\r
171 Bool_t recStatus = kFALSE;
\r
173 // calculate and set prim. vertex
\r
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
178 // Only 5 charged particle species (e,mu,pi,K,p)
\r
179 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\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
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
191 if (infoRC->GetESDtrack() && infoRC->GetESDtrack()->GetTPCInnerParam())
\r
193 if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0)
\r
195 Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);
\r
197 if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())
\r
207 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable };
\r
208 fEffHisto->Fill(vEffHisto);
\r
211 //_____________________________________________________________________________
\r
212 void AliComparisonEff::ProcessTPCITS(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)
\r
214 // Fill efficiency comparison information
\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
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
224 // distance to Prim. vertex
\r
225 const Double_t* dv = infoMC->GetVDist();
\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
231 // Only 5 charged particle species (e,mu,pi,K,p)
\r
232 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\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
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
244 if(!infoRC->GetESDtrack()) return;
\r
245 if(infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS())
\r
247 infoRC->GetESDtrack()->GetImpactParameters(dca,cov);
\r
248 if(TMath::Abs(dca[0]) < fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1]) < fCutsRC->GetMaxDCAToVertexZ())
\r
250 recStatus =(infoRC->GetStatus(1)==3);
\r
255 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable };
\r
256 fEffHisto->Fill(vEffHisto);
\r
259 //_____________________________________________________________________________
\r
260 void AliComparisonEff::ProcessConstrained(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)
\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
269 // distance to Prim. vertex
\r
270 const Double_t* dv = infoMC->GetVDist();
\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
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
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
286 // Only 5 charged particle species (e,mu,pi,K,p)
\r
287 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\r
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
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
299 // constrained parameters resolution
\r
300 if (!infoRC->GetESDtrack()) return;
\r
301 const AliExternalTrackParam * cparam = infoRC->GetESDtrack()->GetConstrainedParam();
\r
302 if(!cparam) return;
\r
304 if ((track = new AliExternalTrackParam(*cparam)) != 0)
\r
306 Bool_t bDCAStatus = track->PropagateToDCA(&vertexMC,field,kMaxD,dca,cov);
\r
308 if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ())
\r
310 recStatus = (infoRC->GetStatus(1)!=3);
\r
317 Double_t vEffHisto[7] = { mceta, mcphi, mcpt, pid, isPrim, recStatus, findable };
\r
318 fEffHisto->Fill(vEffHisto);
\r
321 //_____________________________________________________________________________
\r
322 void AliComparisonEff::Exec(AliMCInfo* const infoMC, AliESDRecInfo* const infoRC)
\r
324 // Process comparison information
\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
330 printf("ERROR: AnalysisMode %d \n",fAnalysisMode);
\r
335 //_____________________________________________________________________________
\r
336 Long64_t AliComparisonEff::Merge(TCollection* const list)
\r
338 // Merge list of objects (needed by PROOF)
\r
343 if (list->IsEmpty())
\r
346 TIterator* iter = list->MakeIterator();
\r
349 // collection of generated histograms
\r
352 while((obj = iter->Next()) != 0)
\r
354 AliComparisonEff* entry = dynamic_cast<AliComparisonEff*>(obj);
\r
355 if (entry == 0) continue;
\r
357 fEffHisto->Add(entry->fEffHisto);
\r
364 //_____________________________________________________________________________
\r
365 void AliComparisonEff::Analyse()
\r
367 // Analyse comparison information and store output histograms
\r
368 // in the folder "folderEff"
\r
370 TH1::AddDirectory(kFALSE);
\r
371 TObjArray *aFolderObj = new TObjArray;
\r
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
377 // rec efficiency vs pt
\r
378 TH1D *ptAll = fEffHisto->Projection(2);
\r
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
385 aFolderObj->Add(ptRec);
\r
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
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
398 aFolderObj->Add(ptRecPi);
\r
400 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.);
\r
401 fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons
\r
402 TH1D *ptAllK = fEffHisto->Projection(2);
\r
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
409 aFolderObj->Add(ptRecK);
\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
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
420 aFolderObj->Add(ptRecP);
\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
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
434 aFolderObj->Add(ptRecF);
\r
437 // efficiency vs eta
\r
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
446 // rec efficiency vs eta
\r
447 TH1D *etaAll = fEffHisto->Projection(0);
\r
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
454 aFolderObj->Add(etaRec);
\r
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
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
466 aFolderObj->Add(etaRecPi);
\r
468 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.);
\r
469 fEffHisto->GetAxis(3)->SetRangeUser(3.,3.); // kaons
\r
470 TH1D *etaAllK = fEffHisto->Projection(0);
\r
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
477 aFolderObj->Add(etaRecK);
\r
479 fEffHisto->GetAxis(5)->SetRangeUser(0.,1.);
\r
480 fEffHisto->GetAxis(3)->SetRangeUser(4.,4.); // protons
\r
481 TH1D *etaAllP = fEffHisto->Projection(0);
\r
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
488 aFolderObj->Add(etaRecP);
\r
491 // findable efficiency
\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
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
504 aFolderObj->Add(etaRecF);
\r
506 // export objects to analysis folder
\r
507 fAnalysisFolder = ExportToFolder(aFolderObj);
\r
509 // delete only TObjArray
\r
510 if(aFolderObj) delete aFolderObj;
\r
513 //_____________________________________________________________________________
\r
514 TFolder* AliComparisonEff::ExportToFolder(TObjArray * array)
\r
516 // recreate folder avery time and export objects to new one
\r
518 AliComparisonEff * comp=this;
\r
519 TFolder *folder = comp->GetAnalysisFolder();
\r
521 TString name, title;
\r
522 TFolder *newFolder = 0;
\r
524 Int_t size = array->GetSize();
\r
527 // get name and title from old folder
\r
528 name = folder->GetName();
\r
529 title = folder->GetTitle();
\r
535 newFolder = CreateFolder(name.Data(),title.Data());
\r
536 newFolder->SetOwner();
\r
538 // add objects to folder
\r
540 newFolder->Add(array->At(i));
\r
549 //_____________________________________________________________________________
\r
550 TFolder* AliComparisonEff::CreateFolder(TString name,TString title) {
\r
551 // create folder for analysed histograms
\r
553 TFolder *folder = 0;
\r
554 folder = new TFolder(name.Data(),title.Data());
\r