]>
Commit | Line | Data |
---|---|---|
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 | ||
43 | using namespace std; | |
44 | ||
45 | const 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 | ||
59 | ClassImp(AliSpectraBothTrackCuts) | |
60 | ||
61 | ||
b3ea73e1 | 62 | AliSpectraBothTrackCuts::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 | 64 | fHistoCuts(0), fHistoNSelectedPos(0), fHistoNSelectedNeg(0), fHistoNMatchedPos(0), fHistoNMatchedNeg(0), fHistoEtaPhiHighPt(0), fHistoNclustersITS(0), |
65 | fHistoDCAzQA(0),fHistoNclustersQA(0),fHistochi2perNDFQA(0), | |
66 | fTrack(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 | //__________________________________________________________________ | |
105 | void 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 | //_______________________________________________________ |
155 | AliSpectraBothTrackCuts::~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 | //_______________________________________________________ |
182 | Bool_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 | ||
232 | Bool_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 | ||
258 | Bool_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 | //________________________________________________________ | |
308 | Bool_t AliSpectraBothTrackCuts::CheckEtaCut() | |
309 | { | |
310 | // Check eta cut | |
311 | if (fTrack->Eta() < fEtaCutMax && fTrack->Eta() > fEtaCutMin) return kTRUE; | |
312 | return kFALSE; | |
313 | } | |
314 | ||
315 | Bool_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 | //_______________________________________________________ | |
340 | Bool_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 | //________________________________________________________ | |
374 | Bool_t AliSpectraBothTrackCuts::CheckPCut() | |
375 | { | |
376 | // Check P cut | |
377 | if (fTrack->P() < fPCut) return kTRUE; | |
378 | return kFALSE; | |
379 | } | |
380 | //_______________________________________________________ | |
381 | Bool_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 | //_______________________________________________________ | |
390 | Bool_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 | //_______________________________________________________ | |
425 | void 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 | //_______________________________________________________ | |
437 | void 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 | ||
444 | Long64_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 |