]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraBothTrackCuts.cxx
cxx file
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TestAOD / AliSpectraBothTrackCuts.cxx
CommitLineData
239a080a 1
2/**************************************************************************
3 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
7 * *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
16
17//-----------------------------------------------------------------
18// AliSpectraBothTrackCuts class
19//-----------------------------------------------------------------
20
21#include "TChain.h"
22#include "TTree.h"
23#include "TLegend.h"
24#include "TH1F.h"
25#include "TH1I.h"
26#include "TH2F.h"
2d98dd91 27#include "TH3F.h"
239a080a 28#include "TCanvas.h"
29#include "AliAnalysisTask.h"
30#include "AliAnalysisManager.h"
31#include "AliAODTrack.h"
32#include "AliVTrack.h"
33#include "AliExternalTrackParam.h"
34#include "AliAODMCParticle.h"
35#include "AliAODEvent.h"
36#include "AliAODInputHandler.h"
37#include "AliAnalysisTaskESDfilter.h"
38#include "AliAnalysisDataContainer.h"
39#include "AliSpectraBothTrackCuts.h"
40//#include "AliSpectraBothHistoManager.h"
41#include <iostream>
42
43using namespace std;
44
45const char * AliSpectraBothTrackCuts::kBinLabel[] ={"TrkBit",
46 "TrkCuts",
47 "TrkEta",
48 "TrkDCA",
49 "TrkP",
50 "TrkPt",
51 "TrkPtTOF",
52 "TOFMatching",
53 "kTOFout",
54 "kTIME",
55 "kTOFpid",
56 "Accepted"};
57
58
59ClassImp(AliSpectraBothTrackCuts)
60
61
b3ea73e1 62AliSpectraBothTrackCuts::AliSpectraBothTrackCuts(const char *name) : TNamed(name, "AOD Track Cuts"), fIsSelected(0), fTrackBits(0), fMinTPCcls(0), fEtaCutMin(0), fEtaCutMax(0), fDCACut(0), fPCut(0), fPtCut(0), fYCutMax(0),fYCutMin(0),
8bb435b0 63 fPtCutTOFMatching(0),fAODtrack(kotherobject), fHashitinSPD1(0),fusedadditionalcuts(kTRUE),
2d98dd91 64fHistoCuts(0), fHistoNSelectedPos(0), fHistoNSelectedNeg(0), fHistoNMatchedPos(0), fHistoNMatchedNeg(0), fHistoEtaPhiHighPt(0), fHistoNclustersITS(0),
65fHistoDCAzQA(0),fHistoNclustersQA(0),fHistochi2perNDFQA(0),
66fTrack(0),fCuts(0)
239a080a 67
68{
2d98dd91 69/*
8fda510f 70 Bool_t oldStatus = TH1::AddDirectoryStatus();
71 TH1::AddDirectory(kFALSE);
239a080a 72 // Constructor
73 fHistoCuts = new TH1I("fTrkCuts", "Track Cuts", kNTrkCuts, -0.5, kNTrkCuts - 0.5);
74 for(Int_t ibin=1;ibin<=kNTrkCuts;ibin++)fHistoCuts->GetXaxis()->SetBinLabel(ibin,kBinLabel[ibin-1]);
75 //standard histo
76 const Double_t templBins[] = {0.05,0.1,0.12,0.14,0.16,0.18,0.20,0.25,0.30,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.0,3.2,3.4,3.6,3.8,4.0,4.2,4.4,4.6,4.8,5.0};
77 Int_t nbinsTempl=52;
78
79 fHistoNSelectedPos=new TH1F("fHistoNSelectedPos","fHistoNSelectedPos",nbinsTempl,templBins);
80 fHistoNSelectedPos->GetXaxis()->SetTitle("P_{T} (GeV / c)");
81 fHistoNSelectedNeg=new TH1F("fHistoNSelectedNeg","fHistoNSelectedNeg",nbinsTempl,templBins);
82 fHistoNSelectedNeg->GetXaxis()->SetTitle("P_{T} (GeV / c)");
83 fHistoNMatchedPos=new TH1F("fHistoNMatchedPos","fHistoNMatchedPos",nbinsTempl,templBins);
84 fHistoNMatchedPos->GetXaxis()->SetTitle("P_{T} (GeV / c)");
85 fHistoNMatchedNeg=new TH1F("fHistoNMatchedNeg","fHistoNMatchedNeg",nbinsTempl,templBins);
86 fHistoNMatchedNeg->GetXaxis()->SetTitle("P_{T} (GeV / c)");
87 fHistoEtaPhiHighPt=new TH2F("fHistoEtaPhiHighPt","fHistoEtaPhiHighPt",200,-1,1,400,0,7);
88 fHistoEtaPhiHighPt->SetXTitle("eta");
89 fHistoEtaPhiHighPt->SetYTitle("phi");
90 fHistoNclustersITS=new TH1F("fHistoNclustersITS","fHistoNclustersITS;N;ITSLayer",6,-0.5,5.5);
2d98dd91 91 */
239a080a 92 fEtaCutMin = -100000.0; // default value of eta cut ~ no cut
93 fEtaCutMax = 100000.0; // default value of eta cut ~ no cut
94 fDCACut = 100000.0; // default value of dca cut ~ no cut
95 fPCut = 100000.0; // default value of p cut ~ no cut
96 fPtCut = 100000.0; // default value of pt cut ~ no cut
97 fPtCutTOFMatching=0.6; //default value fot matching with TOF
b3ea73e1 98 fYCutMax = 100000.0; // default value of y cut ~ no cut
99 fYCutMin = -100000.0; // default value of y cut ~ no cut
239a080a 100 fMinTPCcls=70; // ncls in TPC
2d98dd91 101 // TH1::AddDirectory(oldStatus);
8fda510f 102
2d98dd91 103}
104//__________________________________________________________________
105void AliSpectraBothTrackCuts::InitHisto()
106{
107 Bool_t oldStatus = TH1::AddDirectoryStatus();
108 TH1::AddDirectory(kFALSE);
109
110 fHistoCuts = new TH1I("fTrkCuts", "Track Cuts", kNTrkCuts, -0.5, kNTrkCuts - 0.5);
111 for(Int_t ibin=1;ibin<=kNTrkCuts;ibin++)fHistoCuts->GetXaxis()->SetBinLabel(ibin,kBinLabel[ibin-1]);
112 //standard histo
113 const Double_t templBins[] = {0.05,0.1,0.12,0.14,0.16,0.18,0.20,0.25,0.30,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.0,3.2,3.4,3.6,3.8,4.0,4.2,4.4,4.6,4.8,5.0};
114 Int_t nbinsTempl=52;
115 const Double_t parBins[]={-0.5,0.5,1.5,2.5};
116 Int_t nbinsnpar=3;
117 const Double_t dcazBins[] ={-4.0,-3.8,-3.6,-3.4,-3.2,-3.0,-2.8,-2.6,-2.4,-2.2,-2.0,-1.8,-1.6,-1.4,-1.2,-1.0,-0.8,-0.6,-0.4,-0.2,0.0,0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0};
118 Int_t nbinsdcaz=40;
119 const Double_t nclsBins[]={45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160};
120 Int_t nbinsncls=23;
121 const Double_t chindfBins[]={0.0,0.4,0.8,1.2,1.6,2.0,2.4,2.8,3.2,3.6,4.0,4.4,4.8,5.2,5.6,6.0,6.4,6.8,7.2,7.6,8.0};
122 Int_t nbinchindf=20;
123
124 if(!fHistoNSelectedPos)
125 fHistoNSelectedPos=new TH1F("fHistoNSelectedPos","fHistoNSelectedPos",nbinsTempl,templBins);
126 fHistoNSelectedPos->GetXaxis()->SetTitle("P_{T} (GeV / c)");
127 if(!fHistoNSelectedNeg)
128 fHistoNSelectedNeg=new TH1F("fHistoNSelectedNeg","fHistoNSelectedNeg",nbinsTempl,templBins);
129 fHistoNSelectedNeg->GetXaxis()->SetTitle("P_{T} (GeV / c)");
130 if(!fHistoNMatchedPos)
131 fHistoNMatchedPos=new TH1F("fHistoNMatchedPos","fHistoNMatchedPos",nbinsTempl,templBins);
132 fHistoNMatchedPos->GetXaxis()->SetTitle("P_{T} (GeV / c)");
133 if(!fHistoNMatchedNeg)
134 fHistoNMatchedNeg=new TH1F("fHistoNMatchedNeg","fHistoNMatchedNeg",nbinsTempl,templBins);
135 fHistoNMatchedNeg->GetXaxis()->SetTitle("P_{T} (GeV / c)");
136 if(!fHistoEtaPhiHighPt)
137 fHistoEtaPhiHighPt=new TH2F("fHistoEtaPhiHighPt","fHistoEtaPhiHighPt",200,-1,1,400,0,7);
138 fHistoEtaPhiHighPt->SetXTitle("eta");
139 fHistoEtaPhiHighPt->SetYTitle("phi");
140 if(!fHistoNclustersITS)
141 fHistoNclustersITS=new TH1F("fHistoNclustersITS","fHistoNclustersITS;N;ITSLayer",6,-0.5,5.5);
142 if(!fHistoDCAzQA)
143 fHistoDCAzQA=new TH3F("fHistoDCAzQA","QA of DCA z;par type; P_{T} (GeV/C);dcaz",nbinsnpar,parBins,nbinsTempl,templBins,nbinsdcaz,dcazBins);
144 if(!fHistoNclustersQA)
145 fHistoNclustersQA=new TH3F("fHistoNclustersQA","QA of Ncls ;par type ; P_{T} (GeV/C);ncls",nbinsnpar,parBins,nbinsTempl,templBins,nbinsncls,nclsBins);
146 if(!fHistochi2perNDFQA)
147 fHistochi2perNDFQA=new TH3F("fHistochi2perNDFQA","QA of chi2/ndf ;par type; P_{T} (GeV/C);chi2ndf",nbinsnpar,parBins,nbinsTempl,templBins,nbinchindf,chindfBins);
148
149 TH1::AddDirectory(oldStatus);
150
151
152
239a080a 153}
8fda510f 154//_______________________________________________________
155AliSpectraBothTrackCuts::~AliSpectraBothTrackCuts()
156{
157 if(fHistoCuts)
158 delete fHistoCuts;
159 if(fHistoNSelectedPos)
160 delete fHistoNSelectedPos;
161 if(fHistoNSelectedNeg)
162 delete fHistoNSelectedNeg;
163 if(fHistoNMatchedPos)
164 delete fHistoNMatchedPos;
165 if(fHistoNMatchedNeg)
166 delete fHistoNMatchedNeg;
167 if(fHistoEtaPhiHighPt)
168 delete fHistoEtaPhiHighPt;
169 if(fHistoNclustersITS)
170 delete fHistoNclustersITS;
2d98dd91 171 if(fHistoDCAzQA)
172 delete fHistoDCAzQA;
173 if(fHistoNclustersQA)
174 delete fHistoNclustersQA;
175 if(fHistochi2perNDFQA)
176 delete fHistochi2perNDFQA;
8fda510f 177
239a080a 178
8fda510f 179
180}
239a080a 181//_______________________________________________________
182Bool_t AliSpectraBothTrackCuts::IsSelected(AliVTrack * track,Bool_t FillHistStat)
183{
184// Returns true if Track Cuts are selected and applied
185 if (!track)
186 {
187 printf("ERROR: Could not receive track");
188 return kFALSE;
189 }
190 fTrack = track;
191 TString nameoftrack(track->ClassName());
192 if(!nameoftrack.CompareTo("AliESDtrack"))
193 fAODtrack=kESDobject;
194 else if(!nameoftrack.CompareTo("AliAODTrack"))
195 fAODtrack=kAODobject;
196 else
197 fAODtrack=kotherobject;
198 if(!CheckTrackType()){
199 return kFALSE;
200 }
201 if(FillHistStat)fHistoCuts->Fill(kTrkBit);
202 if(!CheckTrackCuts()){
203 return kFALSE;
204 }
205 if(FillHistStat)fHistoCuts->Fill(kTrkCuts);
206 if(!CheckEtaCut()){
207 return kFALSE;
208 }
209 if(FillHistStat)fHistoCuts->Fill(kTrkEta);
210 if(!CheckDCACut()){
211 return kFALSE;
212 }
213 if(FillHistStat)fHistoCuts->Fill(kTrkDCA);
214 if(!CheckPCut()){
215 return kFALSE;
216 }
217 if(FillHistStat)fHistoCuts->Fill(kTrkP);
218 if(!CheckPtCut()){
219 return kFALSE;
220 }
221 if(FillHistStat)fHistoCuts->Fill(kTrkPt);
222 if(!CheckTOFMatching(FillHistStat)){
223 return kFALSE;
224 }
225 if(FillHistStat)fHistoCuts->Fill(kAccepted);
226 //Printf("-------- %d,%d",kTOFMatching,kAccepted);
227
228 return kTRUE;
229}
230//_________________________________________________________
231
232Bool_t AliSpectraBothTrackCuts::CheckTrackType()
233{
234 // Check track Type
235 if(fAODtrack==kESDobject)
236 {
237 AliESDtrack* esdtrack=dynamic_cast<AliESDtrack*>(fTrack);
737ad8ac 238 if(!esdtrack)
239 return kFALSE;
239a080a 240 if(fCuts->AcceptTrack(esdtrack)) return kTRUE;
241 return kFALSE;
242 }
243 else if(fAODtrack==kAODobject)
244 {
245 AliAODTrack* aodtrack=dynamic_cast<AliAODTrack*>(fTrack);
737ad8ac 246 if(!aodtrack)
247 return kFALSE;
239a080a 248 if (aodtrack->TestFilterBit(fTrackBits)) return kTRUE;
249 return kFALSE;
250 }
251
252 else
253 return kFALSE;
254
255}
256//_________________________________________________________
257
258Bool_t AliSpectraBothTrackCuts::CheckTrackCuts()
259{
260 // Check additional track Cuts
261 Bool_t PassTrackCuts=kTRUE;
8bb435b0 262 if(!fusedadditionalcuts)
263 return PassTrackCuts;
239a080a 264 AliAODTrack* aodtrack=0;
265 AliESDtrack* esdtrack=0;
266 if(fAODtrack==kESDobject)
267 {
268 esdtrack=dynamic_cast<AliESDtrack*>(fTrack);
737ad8ac 269 if(!esdtrack)
270 return kFALSE;
239a080a 271 if (!esdtrack->HasPointOnITSLayer(0) && !esdtrack->HasPointOnITSLayer(1))PassTrackCuts=kFALSE; //FIXME 1 SPD for the moment
272 if (fHashitinSPD1&&!esdtrack->HasPointOnITSLayer(0)) PassTrackCuts=kFALSE;
273 if (esdtrack->GetTPCNcls()<fMinTPCcls)PassTrackCuts=kFALSE;
274 if(!esdtrack->IsOn(AliESDtrack::kTPCrefit))PassTrackCuts=kFALSE;
275 if(!esdtrack->IsOn(AliESDtrack::kITSrefit))PassTrackCuts=kFALSE;
276 if(PassTrackCuts)
277 {
278 for(int i=0;i<6;i++)
279 if(esdtrack->HasPointOnITSLayer(i))
280 fHistoNclustersITS->Fill(i);
281 }
282 }
283 else if (fAODtrack==kAODobject)
284 {
285 aodtrack=dynamic_cast<AliAODTrack*>(fTrack);
737ad8ac 286 if(!aodtrack)
287 return kFALSE;
239a080a 288 if (!aodtrack->HasPointOnITSLayer(0) && !aodtrack->HasPointOnITSLayer(1))PassTrackCuts=kFALSE; //FIXME 1 SPD for the moment
289 if (fHashitinSPD1&&!aodtrack->HasPointOnITSLayer(0)) PassTrackCuts=kFALSE;
290 if (aodtrack->GetTPCNcls()<fMinTPCcls)PassTrackCuts=kFALSE;
291 if(!aodtrack->IsOn(AliAODTrack::kTPCrefit))PassTrackCuts=kFALSE;
292 if(!aodtrack->IsOn(AliAODTrack::kITSrefit))PassTrackCuts=kFALSE;
293 if(PassTrackCuts)
294 {
295 for(int i=0;i<6;i++)
296 if(aodtrack->HasPointOnITSLayer(i))
297 fHistoNclustersITS->Fill(i);
298 }
299 }
300 else
301 return kFALSE;
302
303
304
305 return PassTrackCuts;
306}
307//________________________________________________________
308Bool_t AliSpectraBothTrackCuts::CheckEtaCut()
309{
310 // Check eta cut
311 if (fTrack->Eta() < fEtaCutMax && fTrack->Eta() > fEtaCutMin) return kTRUE;
312 return kFALSE;
313}
314
315Bool_t AliSpectraBothTrackCuts::CheckYCut(BothParticleSpecies_t species)
316{
317 // check if the rapidity is within the set range
318 Double_t y;
319
320 Double_t pz=fTrack->Pz();
321 Double_t p=fTrack->P();
322 Double_t mass=-1.0;
323 /*
324 if (species == kSpProton) { y = fTrack->Y(9.38271999999999995e-01); }
325 if ( species == kSpKaon ) { y = fTrack->Y(4.93676999999999977e-01); }
326 if ( species == kSpPion) { y = fTrack->Y(1.39570000000000000e-01); }
327
328 */
329 if (species == kSpProton) { mass=9.38271999999999995e-01; }
330 if ( species == kSpKaon ) { mass=4.93676999999999977e-01; }
331 if ( species == kSpPion) { mass=1.39570000000000000e-01; }
332 if(mass<0.0)
333 y =-999.0 ;
334 else
335 y=0.5*TMath::Log((TMath::Sqrt(mass*mass+p*p)+pz)/(TMath::Sqrt(mass*mass+p*p)-pz));
b3ea73e1 336 if (y > fYCutMax || y<fYCutMin||y < -998.) return kFALSE;
239a080a 337 return kTRUE;
338}
339//_______________________________________________________
340Bool_t AliSpectraBothTrackCuts::CheckDCACut()
341{
342 // Check DCA cut
343 // if (TMath::Abs(fTrack->DCA()) < fDCACut) return kTRUE; //FIXME for newest AOD fTrack->DCA() always gives -999
344
345 AliAODTrack* aodtrack=0;
346 AliESDtrack* esdtrack=0;
347 if(fAODtrack==kESDobject)
348 {
349 esdtrack=dynamic_cast<AliESDtrack*>(fTrack);
737ad8ac 350 if(!esdtrack)
351 return kFALSE;
239a080a 352 Float_t dcaxy=0.0;
353 Float_t dcaz=0.0;
354 esdtrack->GetImpactParameters(dcaxy,dcaz);
355 if (TMath::Abs(dcaxy) < fDCACut)
356 return kTRUE;
357 else
358 return kFALSE;
359 }
360 else if (fAODtrack==kAODobject)
361 {
362 aodtrack=dynamic_cast<AliAODTrack*>(fTrack);
737ad8ac 363 if(!aodtrack)
364 return kFALSE;
239a080a 365 if (TMath::Abs(aodtrack->DCA()) < fDCACut) return kTRUE;
366 else
367 return kFALSE;
368
369 }
370 else
371 return kFALSE;
372}
373//________________________________________________________
374Bool_t AliSpectraBothTrackCuts::CheckPCut()
375{
376 // Check P cut
377 if (fTrack->P() < fPCut) return kTRUE;
378 return kFALSE;
379}
380//_______________________________________________________
381Bool_t AliSpectraBothTrackCuts::CheckPtCut()
382{
383 // check Pt cut
384// if ((fTrack->Pt() < fPtCut) && (fTrack->Pt() > 0.3 )) return kTRUE;
385 if (fTrack->Pt() < fPtCut) return kTRUE;
386 return kFALSE;
387}
388
389//_______________________________________________________
390Bool_t AliSpectraBothTrackCuts::CheckTOFMatching(Bool_t FillHistStat)
391{
392 // check Pt cut
393 // if ((fTrack->Pt() < fPtCut) && (fTrack->Pt() > 0.3 )) return kTRUE;
394
395 if (fTrack->Pt() < fPtCutTOFMatching) return kTRUE;
396 else{
397 if(FillHistStat)fHistoCuts->Fill(kTrkPtTOF);
398 if(fTrack->Charge()>0)fHistoNSelectedPos->Fill(fTrack->Pt());
399 else fHistoNSelectedNeg->Fill(fTrack->Pt());
400 UInt_t status;
401 status=fTrack->GetStatus();
402 if((status&AliAODTrack::kTOFout)&&FillHistStat)fHistoCuts->Fill(kTrTOFout);
403 if((status&AliAODTrack::kTIME)&&FillHistStat)fHistoCuts->Fill(kTrTIME);
404 if((status&AliAODTrack::kTOFpid)&&FillHistStat)fHistoCuts->Fill(kTrTOFpid);
405
406 if((status&AliAODTrack::kTOFout)==0 || (status&AliAODTrack::kTIME)==0){//kTOFout and kTIME
407 return kFALSE;
408 }
409 if(FillHistStat)fHistoCuts->Fill(kTOFMatching);
410 if(fTrack->Charge()>0)fHistoNMatchedPos->Fill(fTrack->Pt());
411 else fHistoNMatchedNeg->Fill(fTrack->Pt());
412 if(fTrack->Pt()>1.5){
413 //fHistoEtaPhiHighPt->Fill(fTrack->GetOuterParam()->Eta(),fTrack->GetOuterParam()->Phi());
414 //Printf("AliExternalTrackParam * extpar=(AliExternalTrackParam*)fTrack->GetOuterParam();");
415 //AliExternalTrackParam * extpar=(AliExternalTrackParam*)fTrack->GetOuterParam();
416 fHistoEtaPhiHighPt->Fill(fTrack->Eta(),fTrack->Phi());
417 //Printf("fHistoEtaPhiHighPt->Fill(extpar->Eta(),extpar->Phi());");
418 //fHistoEtaPhiHighPt->Fill(extpar->Eta(),extpar->Phi());
419 //delete extpar;
420 }
421 return kTRUE;
422 }
423}
424//_______________________________________________________
425void AliSpectraBothTrackCuts::PrintCuts() const
426{
427 // Print cuts
428 cout << "Track Cuts" << endl;
429 cout << " > TrackBit\t" << fTrackBits << endl;
430 cout << " > Eta cut\t" << fEtaCutMin <<","<< fEtaCutMax << endl;
431 cout << " > DCA cut\t" << fDCACut << endl;
432 cout << " > P cut\t" << fPCut << endl;
433 cout << " > Pt cut \t" << fPtCut << endl;
434 cout << " > TPC cls \t" << fMinTPCcls << endl;
435}
436//_______________________________________________________
437void AliSpectraBothTrackCuts::SetTrackType(UInt_t bit)
438{
439 // Set the type of track to be used. The argument should be the bit number. The mask is produced automatically.
440 fTrackBits = (0x1 << (bit - 1));
441}
442//_______________________________________________________
443
444Long64_t AliSpectraBothTrackCuts::Merge(TCollection* list)
445{
446 // Merge a list of AliSpectraBothTrackCuts objects with this.
447 // Returns the number of merged objects (including this).
448
449 // AliInfo("Merging");
450
451
452 if (!list)
453 return 0;
454
455 if (list->IsEmpty())
456 return 1;
457
458 TIterator* iter = list->MakeIterator();
459 TObject* obj;
460
461 // collections of all histograms
462 TList collections;//FIXME we should only 1 collection
463 TList collections_histoNSelectedPos;
464 TList collections_histoNSelectedNeg;
465 TList collections_histoNMatchedPos;
466 TList collections_histoNMatchedNeg;
467 TList collections_histoEtaPhiHighPt;
2d98dd91 468 TList collections_histoDCAzQA;
469 TList collections_histoNclustersQA;
470 TList collections_histochi2perNDFQA;
471
239a080a 472 Int_t count = 0;
473
474 while ((obj = iter->Next())) {
475 AliSpectraBothTrackCuts* entry = dynamic_cast<AliSpectraBothTrackCuts*> (obj);
476 if (entry == 0)
477 continue;
478
479 TH1I * histo = entry->GetHistoCuts();
480 collections.Add(histo);
481 TH1F * histoNSelectedPos = entry->GetHistoNSelectedPos();
482 collections_histoNSelectedPos.Add(histoNSelectedPos);
483 TH1F * histoNSelectedNeg = entry->GetHistoNSelectedNeg();
484 collections_histoNSelectedNeg.Add(histoNSelectedNeg);
485 TH1F * histoNMatchedPos = entry->GetHistoNMatchedPos();
486 collections_histoNMatchedPos.Add(histoNMatchedPos);
487 TH1F * histoNMatchedNeg = entry->GetHistoNMatchedNeg();
488 collections_histoNMatchedNeg.Add(histoNMatchedNeg);
489 TH2F * histoEtaPhiHighPt = entry->GetHistoEtaPhiHighPt();
490 collections_histoEtaPhiHighPt.Add(histoEtaPhiHighPt);
2d98dd91 491 TH3F* histoDCAzQA=entry->GetHistoDCAzQA();
492 collections_histoDCAzQA.Add(histoDCAzQA);
493 TH3F* histoNclustersQA=entry->GetHistoNclustersQA();
494 collections_histoNclustersQA.Add(histoNclustersQA);
495 TH3F* histochi2perNDFQA=entry->GetHistochi2perNDFQA();
496 collections_histochi2perNDFQA.Add(histochi2perNDFQA);
497
498
499
239a080a 500 count++;
501 }
502
503 fHistoCuts->Merge(&collections);
504 fHistoNSelectedPos->Merge(&collections_histoNSelectedPos);
505 fHistoNSelectedNeg->Merge(&collections_histoNSelectedNeg);
506 fHistoNMatchedPos->Merge(&collections_histoNMatchedPos);
507 fHistoNMatchedNeg->Merge(&collections_histoNMatchedNeg);
508 fHistoEtaPhiHighPt->Merge(&collections_histoEtaPhiHighPt);
2d98dd91 509 fHistoDCAzQA->Merge(&collections_histoDCAzQA);
510 fHistoNclustersQA->Merge(&collections_histoNclustersQA);
511 fHistochi2perNDFQA->Merge(&collections_histochi2perNDFQA);
512
239a080a 513 delete iter;
514
515 return count+1;
516}
517