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
44 #include "TProfile.h"
\r
45 #include "TProfile2D.h"
\r
46 #include "TGraph2D.h"
\r
47 #include "TCanvas.h"
\r
50 #include "AliESDEvent.h"
\r
52 #include "AliESDfriend.h"
\r
53 #include "AliESDfriendTrack.h"
\r
54 #include "AliRecInfoCuts.h"
\r
55 #include "AliMCInfoCuts.h"
\r
56 #include "AliLog.h"
\r
58 #include "AliMathBase.h"
\r
59 #include "AliTreeDraw.h"
\r
60 #include "AliMagF.h"
\r
61 #include "AliESDVertex.h"
\r
62 #include "AliExternalTrackParam.h"
\r
63 #include "AliTracker.h"
\r
65 #include "AliMCInfo.h"
\r
66 #include "AliESDRecInfo.h"
\r
67 #include "AliComparisonEff.h"
\r
69 using namespace std;
\r
72 ClassImp(AliComparisonEff)
\r
74 //_____________________________________________________________________________
\r
75 AliComparisonEff::AliComparisonEff():
\r
76 AliComparisonObject("AliComparisonEff"),
\r
118 // histogram folder
\r
122 fVertex = new AliESDVertex();
\r
123 fVertex->SetXv(0.0); fVertex->SetYv(0.0); fVertex->SetZv(0.0);
\r
125 for(Int_t i=0; i<4; ++i)
\r
127 fTPCPtDCASigmaIdeal[i]=0;
\r
128 fTPCPtDCASigmaFull[i]=0;
\r
129 fTPCPtDCASigmaDay0[i]=0;
\r
134 fTPCPtDCASigmaIdealPid[i]=0;
\r
135 fTPCPtDCASigmaFullPid[i]=0;
\r
136 fTPCPtDCASigmaDay0Pid[i]=0;
\r
138 fTPCPtDCAXYPid[i]=0;
\r
139 fTPCPtDCAZPid[i]=0;
\r
145 //_____________________________________________________________________________
\r
146 AliComparisonEff::~AliComparisonEff(){
\r
149 if(fMCPt) delete fMCPt; fMCPt=0;
\r
150 if(fMCRecPt) delete fMCRecPt; fMCRecPt=0;
\r
151 if(fMCRecPrimPt) delete fMCRecPrimPt; fMCRecPrimPt=0;
\r
152 if(fMCRecSecPt) delete fMCRecSecPt; fMCRecSecPt=0;
\r
155 if(fEffTPCPt) delete fEffTPCPt; fEffTPCPt=0;
\r
156 if(fEffTPCPtMC) delete fEffTPCPtMC; fEffTPCPtMC=0;
\r
157 if(fEffTPCPtF) delete fEffTPCPtF; fEffTPCPtF=0;
\r
160 if(fEffTPCPt_P) delete fEffTPCPt_P; fEffTPCPt_P=0;
\r
161 if(fEffTPCPtMC_P) delete fEffTPCPtMC_P; fEffTPCPtMC_P=0;
\r
162 if(fEffTPCPtF_P) delete fEffTPCPtF_P; fEffTPCPtF_P=0;
\r
165 if(fEffTPCPt_Pi) delete fEffTPCPt_Pi; fEffTPCPt_Pi=0;
\r
166 if(fEffTPCPtMC_Pi) delete fEffTPCPtMC_Pi; fEffTPCPtMC_Pi=0;
\r
167 if(fEffTPCPtF_Pi) delete fEffTPCPtF_Pi; fEffTPCPtF_Pi=0;
\r
170 if(fEffTPCPt_K) delete fEffTPCPt_K; fEffTPCPt_K=0;
\r
171 if(fEffTPCPtMC_K) delete fEffTPCPtMC_K; fEffTPCPtMC_K=0;
\r
172 if(fEffTPCPtF_K) delete fEffTPCPtF_K; fEffTPCPtF_K=0;
\r
175 if(fEffTPCTan) delete fEffTPCTan; fEffTPCTan=0;
\r
176 if(fEffTPCTanMC) delete fEffTPCTanMC; fEffTPCTanMC=0;
\r
177 if(fEffTPCTanF) delete fEffTPCTanF; fEffTPCTanF=0;
\r
180 if(fEffTPCPtTan) delete fEffTPCPtTan; fEffTPCPtTan=0;
\r
181 if(fEffTPCPtTanMC) delete fEffTPCPtTanMC; fEffTPCPtTanMC=0;
\r
182 if(fEffTPCPtTanF) delete fEffTPCPtTanF; fEffTPCPtTanF=0;
\r
184 if(fEffTPCITSPt) delete fEffTPCITSPt; fEffTPCITSPt=0;
\r
185 if(fEffTPCITSTan) delete fEffTPCITSTan; fEffTPCITSTan=0;
\r
187 for(Int_t i=0; i<4; ++i)
\r
189 if(fTPCPtDCASigmaIdeal[i]) delete fTPCPtDCASigmaIdeal[i]; fTPCPtDCASigmaIdeal[i]=0;
\r
190 if(fTPCPtDCASigmaFull[i]) delete fTPCPtDCASigmaFull[i]; fTPCPtDCASigmaFull[i]=0;
\r
191 if(fTPCPtDCASigmaDay0[i]) delete fTPCPtDCASigmaDay0[i]; fTPCPtDCASigmaDay0[i]=0;
\r
193 if(fTPCPtDCAXY[i]) delete fTPCPtDCAXY[i]; fTPCPtDCAXY[i]=0;
\r
194 if(fTPCPtDCAZ[i]) delete fTPCPtDCAZ[i]; fTPCPtDCAZ[i]=0;
\r
196 if(fTPCPtDCASigmaIdealPid[i]) delete fTPCPtDCASigmaIdealPid[i]; fTPCPtDCASigmaIdealPid[i]=0;
\r
197 if(fTPCPtDCASigmaFullPid[i]) delete fTPCPtDCASigmaFullPid[i]; fTPCPtDCASigmaFullPid[i]=0;
\r
198 if(fTPCPtDCASigmaDay0Pid[i]) delete fTPCPtDCASigmaDay0Pid[i]; fTPCPtDCASigmaDay0Pid[i]=0;
\r
200 if(fTPCPtDCAXYPid[i]) delete fTPCPtDCAXYPid[i]; fTPCPtDCAXYPid[i]=0;
\r
201 if(fTPCPtDCAZPid[i]) delete fTPCPtDCAZPid[i]; fTPCPtDCAZPid[i]=0;
\r
204 if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
\r
207 //_____________________________________________________________________________
\r
208 void AliComparisonEff::Init(){
\r
212 fMCPt = new TH1F("fMCPt","fMCPt",50,0.1,3);
\r
213 fMCPt->SetXTitle("p_{t}");
\r
214 fMCPt->SetYTitle("yield");
\r
216 fMCRecPt = new TH1F("fMCRecPt","fMCRecPt",50,0.1,3);
\r
217 fMCRecPt->SetXTitle("p_{t}");
\r
218 fMCRecPt->SetYTitle("yield");
\r
220 fMCRecPrimPt = new TH1F("fMCRecPrimPt","fMCRecPrimPt",50,0.1,3);
\r
221 fMCRecPrimPt->SetXTitle("p_{t}");
\r
222 fMCRecPrimPt->SetYTitle("yield");
\r
224 fMCRecSecPt = new TH1F("fMCRecSecPt","fMCRecSecPt",50,0.1,3);
\r
225 fMCRecSecPt->SetXTitle("p_{t}");
\r
226 fMCRecSecPt->SetYTitle("yield");
\r
228 // Efficiency as function of pt
\r
229 fEffTPCPt = new TProfile("Eff_pt","Eff_Pt",50,0.1,3);
\r
230 fEffTPCPt->SetXTitle("p_{t}");
\r
231 fEffTPCPt->SetYTitle("TPC Efficiency");
\r
233 // Efficiency as function of pt (TPC+ITS)
\r
234 fEffTPCITSPt = new TProfile("Eff_pt_TPCITS","Eff_Pt_TPCITS",50,0.1,3);
\r
235 fEffTPCITSPt->SetXTitle("p_{t}");
\r
236 fEffTPCITSPt->SetYTitle("TPCITS Efficiency");
\r
239 fEffTPCPtMC = new TProfile("MC_Eff_pt","MC_Eff_Pt",50,0.1,3);
\r
240 fEffTPCPtMC->SetXTitle("p_{t}");
\r
241 fEffTPCPtMC->SetYTitle("MC TPC Efficiency");
\r
243 fEffTPCPtF = new TProfile("F_Eff_pt","F_Eff_Pt",50,0.1,3);
\r
244 fEffTPCPtF->SetXTitle("p_{t}");
\r
245 fEffTPCPtF->SetYTitle("TPC Findable Efficiency");
\r
247 // Efficiency as function of pt protons
\r
248 fEffTPCPt_P = new TProfile("Eff_pt_P","Eff_Pt_P",50,0.1,3);
\r
249 fEffTPCPt_P->SetXTitle("p_{t}");
\r
250 fEffTPCPt_P->SetYTitle("TPC Efficiency");
\r
252 fEffTPCPtMC_P = new TProfile("MC_Eff_pt_P","MC_Eff_Pt_P",50,0.1,3);
\r
253 fEffTPCPtMC_P->SetXTitle("p_{t}");
\r
254 fEffTPCPtMC_P->SetYTitle("MC TPC Efficiency");
\r
256 fEffTPCPtF_P = new TProfile("F_Eff_pt_P","F_Eff_Pt_P",50,0.1,3);
\r
257 fEffTPCPtF_P->SetXTitle("p_{t}");
\r
258 fEffTPCPtF_P->SetYTitle("TPC Findable Efficiency");
\r
260 // Efficiency as function of pt pions
\r
261 fEffTPCPt_Pi = new TProfile("Eff_pt_Pi","Eff_Pit_Pi",50,0.1,3);
\r
262 fEffTPCPt_Pi->SetXTitle("p_{t}");
\r
263 fEffTPCPt_Pi->SetYTitle("TPC Efficiency");
\r
265 fEffTPCPtMC_Pi = new TProfile("MC_Eff_pt_Pi","MC_Eff_Pit_Pi",50,0.1,3);
\r
266 fEffTPCPtMC_Pi->SetXTitle("p_{t}");
\r
267 fEffTPCPtMC_Pi->SetYTitle("MC TPC Efficiency");
\r
269 fEffTPCPtF_Pi = new TProfile("F_Eff_pt_Pi","F_Eff_Pit_Pi",50,0.1,3);
\r
270 fEffTPCPtF_Pi->SetXTitle("p_{t}");
\r
271 fEffTPCPtF_Pi->SetYTitle("TPC Findable Efficiency");
\r
273 // Efficiency as function of pt kaons
\r
274 fEffTPCPt_K = new TProfile("Eff_pt_K","Eff_Kt_K",50,0.1,3);
\r
275 fEffTPCPt_K->SetXTitle("p_{t}");
\r
276 fEffTPCPt_K->SetYTitle("TPC Efficiency");
\r
278 fEffTPCPtMC_K = new TProfile("MC_Eff_pt_K","MC_Eff_Kt_K",50,0.1,3);
\r
279 fEffTPCPtMC_K->SetXTitle("p_{t}");
\r
280 fEffTPCPtMC_K->SetYTitle("MC TPC Efficiency");
\r
282 fEffTPCPtF_K = new TProfile("F_Eff_pt_K","F_Eff_Kt_K",50,0.1,3);
\r
283 fEffTPCPtF_K->SetXTitle("p_{t}");
\r
284 fEffTPCPtF_K->SetYTitle("TPC Findable Efficiency");
\r
286 // Efficiency as function of tan(theta)
\r
287 fEffTPCTan = new TProfile("Eff_tan","Eff_tan",50,-2.5,2.5);
\r
288 fEffTPCTan->SetXTitle("tan(#theta)");
\r
289 fEffTPCTan->SetYTitle("TPC Efficiency");
\r
291 // Efficiency as function of tan(theta) (TPC+ITS)
\r
292 fEffTPCITSTan = new TProfile("Eff_tan_TPCITS","Eff_tan_TPCITS",50,-2.5,2.5);
\r
293 fEffTPCITSTan->SetXTitle("tan(#theta)");
\r
294 fEffTPCITSTan->SetYTitle("TPCITS Efficiency");
\r
297 fEffTPCTanMC = new TProfile("MC_Eff_tan","MC_Eff_tan",50,-2.5,2.5);
\r
298 fEffTPCTanMC->SetXTitle("tan(#theta)");
\r
299 fEffTPCTanMC->SetYTitle("MC TPC Efficiency");
\r
301 fEffTPCTanF = new TProfile("F_Eff_tan","F_Eff_tan",50,-2.5,2.5);
\r
302 fEffTPCPtF->SetXTitle("tan(#theta)");
\r
303 fEffTPCPtF->SetYTitle("TPC Findable Efficiency");
\r
305 // Efficiency as function of pt and tan(theta)
\r
306 fEffTPCPtTan = new TProfile2D("Eff_pt_tan","Eff_Pt_tan",10,0.1,3,20,-2.,2.);
\r
307 fEffTPCPtTan->SetXTitle("tan(#theta)");
\r
308 fEffTPCPtTan->SetYTitle("p_{t}");
\r
310 fEffTPCPtTanMC = new TProfile2D("MC_Eff_pt_tan_MC","MC Eff Pt",10,0.1,3,20,-2.,2.);
\r
311 fEffTPCPtTanMC->SetXTitle("tan(#theta)");
\r
312 fEffTPCPtTanMC->SetYTitle("p_{t}");
\r
314 fEffTPCPtTanF = new TProfile2D("MC_Eff_pt_tan_F","MC Eff Pt",10,0.1,3,20,-2.,2.);
\r
315 fEffTPCPtTanF->SetXTitle("tan(#theta)");
\r
316 fEffTPCPtTanF->SetYTitle("p_{t}");
\r
319 for(Int_t i=0; i<4; ++i)
\r
321 sprintf(name, "fTPCPtDCASigmaIdeal_%d",i);
\r
322 fTPCPtDCASigmaIdeal[i] = new TH2F(name,name,50,0.1,3,100,0,100);
\r
324 sprintf(name, "fTPCPtDCASigmaFull_%d",i);
\r
325 fTPCPtDCASigmaFull[i] = new TH2F(name,name,50,0.1,3,100,0,100);
\r
327 sprintf(name, "fTPCPtDCASigmaDay0_%d",i);
\r
328 fTPCPtDCASigmaDay0[i] = new TH2F(name,name,50,0.1,3,100,0,100);
\r
330 sprintf(name, "fTPCPtDCAXY_%d",i);
\r
331 fTPCPtDCAXY[i]= new TH2F(name,name,50,0.1,3,100,0,100);
\r
332 sprintf(name, "fTPCPtDCAZ_%d",i);
\r
333 fTPCPtDCAZ[i]= new TH2F(name,name,50,0.1,3,100,0,100);
\r
335 sprintf(name, "fTPCPtDCASigmaIdealPid_%d",i);
\r
336 fTPCPtDCASigmaIdealPid[i] = new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);
\r
338 sprintf(name, "fTPCPtDCASigmaFullPid_%d",i);
\r
339 fTPCPtDCASigmaFullPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);
\r
341 sprintf(name, "fTPCPtDCASigmaDay0Pid_%d",i);
\r
342 fTPCPtDCASigmaDay0Pid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);
\r
344 sprintf(name, "fTPCPtDCAXYPid_%d",i);
\r
345 fTPCPtDCAXYPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);
\r
347 sprintf(name, "fTPCPtDCAZPid_%d",i);
\r
348 fTPCPtDCAZPid[i]= new TH3F(name,name,50,0.1,3,100,0,100,5,0,5);
\r
353 AliDebug(AliLog::kError, "ERROR: Cannot find AliMCInfoCuts object");
\r
355 AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");
\r
358 fAnalysisFolder = CreateFolder("folderEff","Analysis Efficiency Folder");
\r
361 //_____________________________________________________________________________
\r
362 void AliComparisonEff::Process(AliMCInfo* infoMC, AliESDRecInfo *infoRC)
\r
364 // Fill efficiency comparison information
\r
366 AliExternalTrackParam *track = 0;
\r
367 Double_t field = AliTracker::GetBz(); // nominal Bz field [kG]
\r
368 Double_t kMaxD = 123456.0; // max distance
\r
369 Int_t clusterITS[200];
\r
372 const Double_t kSigma2Full_xy = 0.25; // ExB full systematics [cm]
\r
373 const Double_t kSigma2Full_z = 5.0; // drift velocity (goofie) [cm]
\r
375 const Double_t kSigma2Day0_xy = 0.02; // ExB [cm]
\r
376 const Double_t kSigma2Day0_z = 0.1; // drift velocity (goofie) [cm]
\r
379 Double_t DCASigmaIdeal=0;
\r
380 Double_t DCASigmaFull=0;
\r
381 Double_t DCASigmaDay0=0;
\r
383 Double_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
\r
385 // distance to Prim. vertex
\r
386 const Double_t* dv = infoMC->GetVDist();
\r
388 Float_t mcpt = infoMC->GetParticle().Pt();
\r
389 Float_t tantheta = TMath::Tan(infoMC->GetParticle().Theta()-TMath::Pi()*0.5);
\r
390 Bool_t isPrim = TMath::Sqrt(dv[0]*dv[0] + dv[1]*dv[1])<fCutsMC->GetMaxR() && TMath::Abs(dv[2])<fCutsMC->GetMaxVz();
\r
392 // calculate and set prim. vertex
\r
393 fVertex->SetXv( infoMC->GetParticle().Vx() - dv[0] );
\r
394 fVertex->SetYv( infoMC->GetParticle().Vy() - dv[1] );
\r
395 fVertex->SetZv( infoMC->GetParticle().Vz() - dv[2] );
\r
397 // Check selection cuts
\r
398 if (fCutsMC->IsPdgParticle(TMath::Abs(infoMC->GetParticle().GetPdgCode())) == kFALSE) return;
\r
400 // transform Pdg to Pid
\r
401 // Pdg convension is different for hadrons and leptons
\r
402 // (e.g. K+/K- = 321/-321; e+/e- = -11/11 )
\r
404 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetEM() ) pid = 0;
\r
405 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetMuM() ) pid = 1;
\r
406 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP() ) pid = 2;
\r
407 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP() ) pid = 3;
\r
408 if( TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt() ) pid = 4;
\r
410 //cout << "dv[0] " << dv[0] << " dv[1] " << dv[1] << " dv[2] " << dv[2] << endl;
\r
411 //cout << "v[0] " << fVertex->GetXv() << " v[1] " << fVertex->GetYv() << " v[2] " << fVertex->GetZv()<< endl;
\r
412 if (TMath::Abs(tantheta)<fCutsRC->GetMaxAbsTanTheta())
\r
414 if (infoRC->GetESDtrack() && infoRC->GetESDtrack()->GetTPCInnerParam())
\r
416 if ((track = new AliExternalTrackParam(*infoRC->GetESDtrack()->GetTPCInnerParam())) != 0 )
\r
418 Bool_t bDCAStatus = track->PropagateToDCA(fVertex,field,kMaxD,dca,cov);
\r
421 cov[2] = track->GetCovariance()[2];
\r
423 // Eff = infoRC->GetStatus(1)==3 && isPrim / isPrim;
\r
424 // Pt vs ( dca[0]^2/cov[0]^2 + dca[1]^2/cov[2]^2 )
\r
425 // Pt vs ( dca[0]^2/(cov[0]^2 + kSigma2Full_xy) + dca[1]^2/( cov[2]^2 + kSigma2Full_z )
\r
426 // Pt vs ( dca[0]^2/(cov[0]^2 + kSigma2_xy) + dca[1]^2/( cov[2]^2 + kSigma2_z )
\r
428 if(cov[0]>0.0 && cov[2]>0.0)
\r
430 DCASigmaIdeal = TMath::Power(dca[0],2)/cov[0]
\r
431 + TMath::Power(dca[1],2)/cov[2];
\r
433 DCASigmaFull = TMath::Power(dca[0],2)/(cov[0]+kSigma2Full_xy)
\r
434 + TMath::Power(dca[1],2)/(cov[2]+kSigma2Full_z);
\r
436 DCASigmaDay0 = TMath::Power(dca[0],2)/(cov[0]+kSigma2Day0_xy)
\r
437 + TMath::Power(dca[1],2)/(cov[2]+kSigma2Day0_z);
\r
439 //cout << "dca[0] " << dca[0] << " dca[1] " << dca[1] << endl;
\r
440 //cout << "cov[0] " << cov[0] << " cov[2] " << cov[2] << endl;
\r
441 //cout << "DCASigmaIdeal " << DCASigmaIdeal << " DCASigmaFull " << DCASigmaFull << " DCASigmaDay0 " <<DCASigmaDay0 << endl;
\r
442 //cout << " -------------------------------------------------------- "<< endl;
\r
446 fMCPt->Fill(mcpt);
\r
447 if(infoRC->GetStatus(1)==3) fMCRecPt->Fill(mcpt);
\r
448 if(infoRC->GetStatus(1)==3 && isPrim) fMCRecPrimPt->Fill(mcpt);
\r
449 if(infoRC->GetStatus(1)==3 && !isPrim) fMCRecSecPt->Fill(mcpt);
\r
453 fTPCPtDCASigmaIdeal[0]->Fill(mcpt,DCASigmaIdeal);
\r
454 fTPCPtDCASigmaFull[0]->Fill(mcpt,DCASigmaFull);
\r
455 fTPCPtDCASigmaDay0[0]->Fill(mcpt,DCASigmaDay0);
\r
457 fTPCPtDCAXY[0]->Fill(mcpt,dca[0]);
\r
458 fTPCPtDCAZ[0]->Fill(mcpt,dca[1]);
\r
460 fTPCPtDCASigmaIdealPid[0]->Fill(mcpt,DCASigmaIdeal,pid);
\r
461 fTPCPtDCASigmaFullPid[0]->Fill(mcpt,DCASigmaFull,pid);
\r
462 fTPCPtDCASigmaDay0Pid[0]->Fill(mcpt,DCASigmaDay0,pid);
\r
464 fTPCPtDCAXYPid[0]->Fill(mcpt,dca[0],pid);
\r
465 fTPCPtDCAZPid[0]->Fill(mcpt,dca[1],pid);
\r
467 if(infoRC->GetStatus(1)==3)
\r
469 fTPCPtDCASigmaIdeal[1]->Fill(mcpt,DCASigmaIdeal);
\r
470 fTPCPtDCASigmaFull[1]->Fill(mcpt,DCASigmaFull);
\r
471 fTPCPtDCASigmaDay0[1]->Fill(mcpt,DCASigmaDay0);
\r
473 fTPCPtDCAXY[1]->Fill(mcpt,dca[0]);
\r
474 fTPCPtDCAZ[1]->Fill(mcpt,dca[1]);
\r
476 fTPCPtDCASigmaIdealPid[1]->Fill(mcpt,DCASigmaIdeal,pid);
\r
477 fTPCPtDCASigmaFullPid[1]->Fill(mcpt,DCASigmaFull,pid);
\r
478 fTPCPtDCASigmaDay0Pid[1]->Fill(mcpt,DCASigmaDay0,pid);
\r
480 fTPCPtDCAXYPid[1]->Fill(mcpt,dca[0],pid);
\r
481 fTPCPtDCAZPid[1]->Fill(mcpt,dca[1],pid);
\r
485 // Cont = infoRC->GetStatus(1)==3 && !isPrim / infoRC->GetStatus(1)==3
\r
486 // Pt vs ( dz[0]^2/cov[0]^2 + dz[1]^2/cov[2]^2 )
\r
487 // Pt vs ( dz[0]^2/(cov[0]^2 + kSigma2Full_xy) + dz[1]^2/( cov[2]^2 + kSigma2Full_z )
\r
488 // Pt vs ( dz[0]^2/(cov[0]^2 + kSigma2_xy) + dz[1]^2/( cov[2]^2 + kSigma2_z )
\r
490 if(infoRC->GetStatus(1)==3)
\r
492 fTPCPtDCASigmaIdeal[2]->Fill(mcpt,DCASigmaIdeal);
\r
493 fTPCPtDCASigmaFull[2]->Fill(mcpt,DCASigmaFull);
\r
494 fTPCPtDCASigmaDay0[2]->Fill(mcpt,DCASigmaDay0);
\r
496 fTPCPtDCAXY[2]->Fill(mcpt,dca[0]);
\r
497 fTPCPtDCAZ[2]->Fill(mcpt,dca[1]);
\r
499 fTPCPtDCASigmaIdealPid[2]->Fill(mcpt,DCASigmaIdeal,pid);
\r
500 fTPCPtDCASigmaFullPid[2]->Fill(mcpt,DCASigmaFull,pid);
\r
501 fTPCPtDCASigmaDay0Pid[2]->Fill(mcpt,DCASigmaDay0,pid);
\r
503 fTPCPtDCAXYPid[2]->Fill(mcpt,dca[0],pid);
\r
504 fTPCPtDCAZPid[2]->Fill(mcpt,dca[1],pid);
\r
508 fTPCPtDCASigmaIdeal[3]->Fill(mcpt,DCASigmaIdeal);
\r
509 fTPCPtDCASigmaFull[3]->Fill(mcpt,DCASigmaFull);
\r
510 fTPCPtDCASigmaDay0[3]->Fill(mcpt,DCASigmaDay0);
\r
512 fTPCPtDCAXY[3]->Fill(mcpt,dca[0]);
\r
513 fTPCPtDCAZ[3]->Fill(mcpt,dca[1]);
\r
515 fTPCPtDCASigmaIdealPid[3]->Fill(mcpt,DCASigmaIdeal,pid);
\r
516 fTPCPtDCASigmaFullPid[3]->Fill(mcpt,DCASigmaFull,pid);
\r
517 fTPCPtDCASigmaDay0Pid[3]->Fill(mcpt,DCASigmaDay0,pid);
\r
519 fTPCPtDCAXYPid[3]->Fill(mcpt,dca[0],pid);
\r
520 fTPCPtDCAZPid[3]->Fill(mcpt,dca[1],pid);
\r
531 fTPCPtDCASigmaIdeal[0]->Fill(mcpt,0.0);
\r
532 fTPCPtDCASigmaFull[0]->Fill(mcpt,0.0);
\r
533 fTPCPtDCASigmaDay0[0]->Fill(mcpt,0.0);
\r
535 fTPCPtDCAXY[0]->Fill(mcpt,0.0);
\r
536 fTPCPtDCAZ[0]->Fill(mcpt,0.0);
\r
538 fTPCPtDCASigmaIdealPid[0]->Fill(mcpt,0.0,pid);
\r
539 fTPCPtDCASigmaFullPid[0]->Fill(mcpt,0.0,pid);
\r
540 fTPCPtDCASigmaDay0Pid[0]->Fill(mcpt,0.0,pid);
\r
542 fTPCPtDCAXYPid[0]->Fill(mcpt,0.0,pid);
\r
543 fTPCPtDCAZPid[0]->Fill(mcpt,0.0,pid);
\r
548 // only primary particles
\r
549 if (!isPrim) return;
\r
552 if (TMath::Abs(tantheta)<fCutsRC->GetMaxAbsTanTheta()){
\r
554 fEffTPCPt->Fill(mcpt, infoRC->GetStatus(1)==3);
\r
555 fEffTPCPtMC->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());
\r
556 if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){
\r
557 fEffTPCPtF->Fill(mcpt, infoRC->GetStatus(1)==3);
\r
560 fEffTPCITSPt->Fill(mcpt, infoRC->GetStatus(1)==3 && (infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS()));
\r
563 if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetProt()) {
\r
564 fEffTPCPt_P->Fill(mcpt, infoRC->GetStatus(1)==3);
\r
565 fEffTPCPtMC_P->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());
\r
567 if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {
\r
568 fEffTPCPtF_P->Fill(mcpt, infoRC->GetStatus(1)==3);
\r
573 if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetPiP()) {
\r
574 fEffTPCPt_Pi->Fill(mcpt, infoRC->GetStatus(1)==3);
\r
575 fEffTPCPtMC_Pi->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());
\r
577 if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {
\r
578 fEffTPCPtF_Pi->Fill(mcpt, infoRC->GetStatus(1)==3);
\r
583 if(TMath::Abs(infoMC->GetParticle().GetPdgCode())==fCutsMC->GetKP()) {
\r
584 fEffTPCPt_K->Fill(mcpt, infoRC->GetStatus(1)==3);
\r
585 fEffTPCPtMC_K->Fill(mcpt, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());
\r
587 if(infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()) {
\r
588 fEffTPCPtF_K->Fill(mcpt, infoRC->GetStatus(1)==3);
\r
594 if (TMath::Abs(mcpt)>fCutsRC->GetPtMin()){
\r
595 fEffTPCTan->Fill(tantheta, infoRC->GetStatus(1)==3);
\r
596 fEffTPCTanMC->Fill(tantheta, infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());
\r
597 if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){
\r
598 fEffTPCTanF->Fill(tantheta, infoRC->GetStatus(1)==3);
\r
601 fEffTPCITSTan->Fill(tantheta, infoRC->GetStatus(1)==3 && (infoRC->GetESDtrack()->GetITSclusters(clusterITS)>fCutsRC->GetMinNClustersITS()));
\r
605 fEffTPCPtTan->Fill(mcpt,tantheta,infoRC->GetStatus(1)==3);
\r
606 fEffTPCPtTanMC->Fill(mcpt,tantheta,infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits());
\r
607 if (infoMC->GetRowsWithDigits()>fCutsMC->GetMinRowsWithDigits()){
\r
608 fEffTPCPtTanF->Fill(mcpt,tantheta,infoRC->GetStatus(1)==3);
\r
612 //_____________________________________________________________________________
\r
613 void AliComparisonEff::Exec(AliMCInfo* infoMC, AliESDRecInfo *infoRC)
\r
615 // Process comparison information
\r
616 Process(infoMC,infoRC);
\r
619 //_____________________________________________________________________________
\r
620 Long64_t AliComparisonEff::Merge(TCollection* list)
\r
622 // Merge list of objects (needed by PROOF)
\r
627 if (list->IsEmpty())
\r
630 TIterator* iter = list->MakeIterator();
\r
633 // collection of generated histograms
\r
636 while((obj = iter->Next()) != 0)
\r
638 AliComparisonEff* entry = dynamic_cast<AliComparisonEff*>(obj);
\r
639 if (entry == 0) continue;
\r
641 fMCPt->Add(entry->fMCPt);
\r
642 fMCRecPt->Add(entry->fMCRecPt);
\r
643 fMCRecPrimPt->Add(entry->fMCRecPrimPt);
\r
644 fMCRecSecPt->Add(entry->fMCRecSecPt);
\r
646 fEffTPCPt->Add(entry->fEffTPCPt);
\r
647 fEffTPCPtMC->Add(entry->fEffTPCPtMC);
\r
648 fEffTPCPtF->Add(entry->fEffTPCPtF);
\r
650 fEffTPCPt_P->Add(entry->fEffTPCPt_P);
\r
651 fEffTPCPtMC_P->Add(entry->fEffTPCPtMC_P);
\r
652 fEffTPCPtF_P->Add(entry->fEffTPCPtF_P);
\r
654 fEffTPCPt_Pi->Add(entry->fEffTPCPt_Pi);
\r
655 fEffTPCPtMC_Pi->Add(entry->fEffTPCPtMC_Pi);
\r
656 fEffTPCPtF_Pi->Add(entry->fEffTPCPtF_Pi);
\r
658 fEffTPCPt_K->Add(entry->fEffTPCPt_K);
\r
659 fEffTPCPtMC_K->Add(entry->fEffTPCPtMC_K);
\r
660 fEffTPCPtF_K->Add(entry->fEffTPCPtF_K);
\r
662 fEffTPCTan->Add(entry->fEffTPCTan);
\r
663 fEffTPCTanMC->Add(entry->fEffTPCTanMC);
\r
664 fEffTPCTanF->Add(entry->fEffTPCTanF);
\r
666 fEffTPCPtTan->Add(entry->fEffTPCPtTan);
\r
667 fEffTPCPtTanMC->Add(entry->fEffTPCPtTanMC);
\r
668 fEffTPCPtTanF->Add(entry->fEffTPCPtTanF);
\r
670 fEffTPCITSPt->Add(entry->fEffTPCITSPt);
\r
671 fEffTPCITSTan->Add(entry->fEffTPCITSTan);
\r
673 for(Int_t i=0; i<4; ++i)
\r
675 fTPCPtDCASigmaIdeal[i]->Add(entry->fTPCPtDCASigmaIdeal[i]);
\r
676 fTPCPtDCASigmaFull[i]->Add(entry->fTPCPtDCASigmaFull[i]);
\r
677 fTPCPtDCASigmaDay0[i]->Add(entry->fTPCPtDCASigmaDay0[i]);
\r
679 fTPCPtDCAXY[i]->Add(entry->fTPCPtDCAXY[i]);
\r
680 fTPCPtDCAZ[i]->Add(entry->fTPCPtDCAXY[i]);
\r
682 fTPCPtDCASigmaIdealPid[i]->Add(entry->fTPCPtDCASigmaIdealPid[i]);
\r
683 fTPCPtDCASigmaFullPid[i]->Add(entry->fTPCPtDCASigmaFullPid[i]);
\r
684 fTPCPtDCASigmaDay0Pid[i]->Add(entry->fTPCPtDCASigmaDay0Pid[i]);
\r
686 fTPCPtDCAXYPid[i]->Add(entry->fTPCPtDCAXYPid[i]);
\r
687 fTPCPtDCAZPid[i]->Add(entry->fTPCPtDCAXYPid[i]);
\r
696 //_____________________________________________________________________________
\r
697 void AliComparisonEff::Analyse()
\r
699 // Analyse comparison information and store output histograms
\r
700 // in the folder "folderEff"
\r
703 TH1::AddDirectory(kFALSE);
\r
705 AliComparisonEff * comp=this;
\r
706 TObjArray *aFolderObj = new TObjArray;
\r
708 // calculate efficiency and contamination (4 sigma)
\r
709 TH1 *h_sigmaidealpid[20];
\r
710 TH1 *h_sigmafullpid[20];
\r
711 TH1 *h_sigmaday0pid[20];
\r
713 TH1 *h_sigmaidealpidtot[4];
\r
714 TH1 *h_sigmafullpidtot[4];
\r
715 TH1 *h_sigmaday0pidtot[4];
\r
721 for(Int_t i=0; i<4; ++i)
\r
724 comp->fTPCPtDCASigmaIdealPid[i]->GetYaxis()->SetRange(1,4);
\r
725 sprintf(name,"h_sigmaidealpidtot_%d",i);
\r
726 h_sigmaidealpidtot[i] = comp->fTPCPtDCASigmaIdealPid[i]->Project3D();
\r
727 h_sigmaidealpidtot[i]->SetName(name);
\r
729 comp->fTPCPtDCASigmaFullPid[i]->GetYaxis()->SetRange(1,4);
\r
730 sprintf(name,"h_sigmafullpidtot_%d",i);
\r
731 h_sigmafullpidtot[i] = comp->fTPCPtDCASigmaFullPid[i]->Project3D();
\r
732 h_sigmafullpidtot[i]->SetName(name);
\r
734 comp->fTPCPtDCASigmaDay0Pid[i]->GetYaxis()->SetRange(1,4);
\r
735 sprintf(name,"h_sigmaday0pidtot_%d",i);
\r
736 h_sigmaday0pidtot[i] = comp->fTPCPtDCASigmaDay0Pid[i]->Project3D();
\r
737 h_sigmaday0pidtot[i]->SetName(name);
\r
740 for(Int_t j=0; j<5; ++j)
\r
744 comp->fTPCPtDCASigmaIdealPid[i]->GetYaxis()->SetRange(1,4);
\r
745 comp->fTPCPtDCASigmaIdealPid[i]->GetZaxis()->SetRange(j+1,j+1);
\r
747 sprintf(name,"h_sigmaidealpid_%d",idx);
\r
748 h_sigmaidealpid[idx] = comp->fTPCPtDCASigmaIdealPid[i]->Project3D();
\r
749 h_sigmaidealpid[idx]->SetName(name);
\r
752 comp->fTPCPtDCASigmaFullPid[i]->GetYaxis()->SetRange(1,4);
\r
753 comp->fTPCPtDCASigmaFullPid[i]->GetZaxis()->SetRange(j+1,j+1);
\r
755 sprintf(name,"h_sigmafullpid_%d",idx);
\r
756 h_sigmafullpid[idx] = comp->fTPCPtDCASigmaFullPid[i]->Project3D();
\r
757 h_sigmafullpid[idx]->SetName(name);
\r
759 comp->fTPCPtDCASigmaDay0Pid[i]->GetYaxis()->SetRange(1,4);
\r
760 comp->fTPCPtDCASigmaDay0Pid[i]->GetZaxis()->SetRange(j+1,j+1);
\r
762 sprintf(name,"h_sigmaday0pid_%d",idx);
\r
763 h_sigmaday0pid[idx] = comp->fTPCPtDCASigmaDay0Pid[i]->Project3D();
\r
764 h_sigmaday0pid[idx]->SetName(name);
\r
768 // calculate efficiency and contamination (all pids)
\r
769 h_sigmaidealpidtot[0]->Sumw2();
\r
770 h_sigmaidealpidtot[1]->Divide(h_sigmaidealpidtot[0]);
\r
771 h_sigmaidealpidtot[2]->Sumw2();
\r
772 h_sigmaidealpidtot[3]->Divide(h_sigmaidealpidtot[2]);
\r
774 h_sigmafullpidtot[0]->Sumw2();
\r
775 h_sigmafullpidtot[1]->Divide(h_sigmafullpidtot[0]);
\r
776 h_sigmafullpidtot[2]->Sumw2();
\r
777 h_sigmafullpidtot[3]->Divide(h_sigmafullpidtot[2]);
\r
779 h_sigmaday0pidtot[0]->Sumw2();
\r
780 h_sigmaday0pidtot[1]->Divide(h_sigmaday0pidtot[0]);
\r
781 h_sigmaday0pidtot[2]->Sumw2();
\r
782 h_sigmaday0pidtot[3]->Divide(h_sigmaday0pidtot[2]);
\r
784 // calculate efficiency pid wise
\r
785 for(Int_t jdx = 0; jdx<5; jdx++)
\r
787 h_sigmaidealpid[jdx]->Sumw2();
\r
788 h_sigmaidealpid[jdx+5]->Divide(h_sigmaidealpid[jdx]);
\r
790 h_sigmafullpid[jdx]->Sumw2();
\r
791 h_sigmafullpid[jdx+5]->Divide(h_sigmafullpid[jdx]);
\r
793 h_sigmaday0pid[jdx]->Sumw2();
\r
794 h_sigmaday0pid[jdx+5]->Divide(h_sigmaday0pid[jdx]);
\r
797 // calculate cont. pid wise
\r
798 for(Int_t jdx = 0; jdx<5; jdx++)
\r
800 h_sigmaidealpid[jdx+15]->Divide(h_sigmaidealpidtot[2]);
\r
801 h_sigmafullpid[jdx+15]->Divide(h_sigmafullpidtot[2]);
\r
802 h_sigmaday0pid[jdx+15]->Divide(h_sigmaday0pidtot[2]);
\r
805 TCanvas * c = new TCanvas("Efficiency","Track efficiency");
\r
811 comp->fEffTPCTanF->SetXTitle("Tan(#theta)");
\r
812 comp->fEffTPCTanF->SetYTitle("eff_{findable}");
\r
813 comp->fEffTPCTanF->SetName("EffTanFindable");
\r
814 comp->fEffTPCTanF->Draw();
\r
817 comp->fEffTPCTan->SetXTitle("Tan(#theta)");
\r
818 comp->fEffTPCTan->SetYTitle("eff_{all}");
\r
819 comp->fEffTPCTan->SetName("EffTanAll");
\r
820 comp->fEffTPCTan->Draw();
\r
822 aFolderObj->Add(comp->fEffTPCTanF);
\r
823 aFolderObj->Add(comp->fEffTPCTan);
\r
825 h_sigmaidealpidtot[1]->SetXTitle("p_{t}");
\r
826 h_sigmaidealpidtot[1]->SetYTitle("efficiency");
\r
827 h_sigmaidealpidtot[1]->SetTitle("Eff_SigmaIdeal");
\r
828 h_sigmaidealpidtot[1]->SetName("Eff_SigmaIdeal");
\r
830 h_sigmaidealpidtot[3]->SetXTitle("p_{t}");
\r
831 h_sigmaidealpidtot[3]->SetYTitle("contamination");
\r
832 h_sigmaidealpidtot[3]->SetTitle("Cont_SigmaIdeal");
\r
833 h_sigmaidealpidtot[3]->SetName("Cont_SigmaIdeal");
\r
835 aFolderObj->Add(h_sigmaidealpidtot[1]);
\r
836 aFolderObj->Add(h_sigmaidealpidtot[3]);
\r
838 h_sigmafullpidtot[1]->SetXTitle("p_{t}");
\r
839 h_sigmafullpidtot[1]->SetYTitle("efficiency");
\r
840 h_sigmafullpidtot[1]->SetTitle("Eff_SigmaFull");
\r
841 h_sigmafullpidtot[1]->SetName("Eff_SigmaFull");
\r
843 h_sigmafullpidtot[3]->SetXTitle("p_{t}");
\r
844 h_sigmafullpidtot[3]->SetYTitle("contamination");
\r
845 h_sigmafullpidtot[3]->SetTitle("Cont_SigmaFull");
\r
846 h_sigmafullpidtot[3]->SetName("Cont_SigmaFull");
\r
848 aFolderObj->Add(h_sigmafullpidtot[1]);
\r
849 aFolderObj->Add(h_sigmafullpidtot[3]);
\r
851 h_sigmaday0pidtot[1]->SetXTitle("p_{t}");
\r
852 h_sigmaday0pidtot[1]->SetYTitle("efficiency");
\r
853 h_sigmaday0pidtot[1]->SetTitle("Eff_SigmaDay0");
\r
854 h_sigmaday0pidtot[1]->SetName("Eff_SigmaDay0");
\r
856 h_sigmaday0pidtot[3]->SetXTitle("p_{t}");
\r
857 h_sigmaday0pidtot[3]->SetYTitle("contamination");
\r
858 h_sigmaday0pidtot[3]->SetTitle("Cont_SigmaDay0");
\r
859 h_sigmaday0pidtot[3]->SetName("Cont_SigmaDay0");
\r
861 aFolderObj->Add(h_sigmaday0pidtot[1]);
\r
862 aFolderObj->Add(h_sigmaday0pidtot[3]);
\r
864 for(Int_t jdx = 0; jdx<5; jdx++)
\r
866 sprintf(name,"Eff_SigmaIdeal_%d",jdx);
\r
867 sprintf(name1,"Cont_SigmaIdeal_%d",jdx);
\r
870 h_sigmaidealpid[jdx+5]->SetXTitle("p_{t}");
\r
871 h_sigmaidealpid[jdx+5]->SetYTitle("efficiency");
\r
872 h_sigmaidealpid[jdx+5]->SetTitle(name);
\r
873 h_sigmaidealpid[jdx+5]->SetName(name);
\r
875 h_sigmaidealpid[jdx+15]->SetXTitle("p_{t}");
\r
876 h_sigmaidealpid[jdx+15]->SetYTitle("contamination");
\r
877 h_sigmaidealpid[jdx+15]->SetTitle(name1);
\r
878 h_sigmaidealpid[jdx+15]->SetName(name1);
\r
880 aFolderObj->Add(h_sigmaidealpid[jdx+5]);
\r
881 aFolderObj->Add(h_sigmaidealpid[jdx+15]);
\r
883 sprintf(name,"Eff_SigmaFull_%d",jdx);
\r
884 sprintf(name1,"Cont_SigmaFull_%d",jdx);
\r
886 h_sigmafullpid[jdx+5]->SetXTitle("p_{t}");
\r
887 h_sigmafullpid[jdx+5]->SetYTitle("efficiency");
\r
888 h_sigmafullpid[jdx+5]->SetTitle(name);
\r
889 h_sigmafullpid[jdx+5]->SetName(name);
\r
891 h_sigmafullpid[jdx+15]->SetXTitle("p_{t}");
\r
892 h_sigmafullpid[jdx+15]->SetYTitle("contamination");
\r
893 h_sigmafullpid[jdx+15]->SetTitle(name1);
\r
894 h_sigmafullpid[jdx+15]->SetName(name1);
\r
896 aFolderObj->Add(h_sigmafullpid[jdx+5]);
\r
897 aFolderObj->Add(h_sigmafullpid[jdx+15]);
\r
899 sprintf(name,"Eff_SigmaDay0_%d",jdx);
\r
900 sprintf(name1,"Cont_SigmaDay0_%d",jdx);
\r
902 h_sigmaday0pid[jdx+5]->SetXTitle("p_{t}");
\r
903 h_sigmaday0pid[jdx+5]->SetYTitle("efficiency");
\r
904 h_sigmaday0pid[jdx+5]->SetTitle(name);
\r
905 h_sigmaday0pid[jdx+5]->SetName(name);
\r
907 h_sigmaday0pid[jdx+15]->SetXTitle("p_{t}");
\r
908 h_sigmaday0pid[jdx+15]->SetYTitle("contamination");
\r
909 h_sigmaday0pid[jdx+15]->SetTitle(name1);
\r
910 h_sigmaday0pid[jdx+15]->SetName(name1);
\r
912 aFolderObj->Add(h_sigmaday0pid[jdx+5]);
\r
913 aFolderObj->Add(h_sigmaday0pid[jdx+15]);
\r
916 // export objects to analysis folder
\r
917 fAnalysisFolder = ExportToFolder(aFolderObj);
\r
919 // delete only TObjArray
\r
920 if(aFolderObj) delete aFolderObj;
\r
923 //_____________________________________________________________________________
\r
924 TFolder* AliComparisonEff::ExportToFolder(TObjArray * array)
\r
926 // recreate folder avery time and export objects to new one
\r
928 AliComparisonEff * comp=this;
\r
929 TFolder *folder = comp->GetAnalysisFolder();
\r
931 TString name, title;
\r
932 TFolder *newFolder = 0;
\r
934 Int_t size = array->GetSize();
\r
937 // get name and title from old folder
\r
938 name = folder->GetName();
\r
939 title = folder->GetTitle();
\r
945 newFolder = CreateFolder(name.Data(),title.Data());
\r
946 newFolder->SetOwner();
\r
948 // add objects to folder
\r
950 newFolder->Add(array->At(i));
\r
959 //_____________________________________________________________________________
\r
960 TFolder* AliComparisonEff::CreateFolder(TString name,TString title) {
\r
961 // create folder for analysed histograms
\r
963 TFolder *folder = 0;
\r
964 folder = new TFolder(name.Data(),title.Data());
\r