]>
Commit | Line | Data |
---|---|---|
c88234ad | 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 | // AliSpectraAODTrackCuts class | |
19 | //----------------------------------------------------------------- | |
20 | ||
21 | #include "TChain.h" | |
22 | #include "TTree.h" | |
23 | #include "TLegend.h" | |
24 | #include "TH1F.h" | |
25 | #include "TH2F.h" | |
26 | #include "TCanvas.h" | |
27 | #include "AliAnalysisTask.h" | |
28 | #include "AliAnalysisManager.h" | |
29 | #include "AliAODTrack.h" | |
ae0fdd7d | 30 | #include "AliExternalTrackParam.h" |
c88234ad | 31 | #include "AliAODMCParticle.h" |
32 | #include "AliAODEvent.h" | |
33 | #include "AliAODInputHandler.h" | |
34 | #include "AliAnalysisTaskESDfilter.h" | |
35 | #include "AliAnalysisDataContainer.h" | |
36 | #include "AliSpectraAODTrackCuts.h" | |
37 | #include "AliSpectraAODHistoManager.h" | |
38 | #include <iostream> | |
39 | ||
40 | using namespace std; | |
41 | ||
42 | ClassImp(AliSpectraAODTrackCuts) | |
43 | ||
44 | ||
e8b0fe64 | 45 | AliSpectraAODTrackCuts::AliSpectraAODTrackCuts(const char *name) : TNamed(name, "AOD Track Cuts"), fIsSelected(0), fTrackBits(0), fEtaCut(0), fDCACut(0), fPCut(0), fPtCut(0), fYCut(0), |
ae0fdd7d | 46 | fPtCutTOFMatching(0),fQvecCutMin(0),fQvecCutMax(0), fHistoCuts(0), fHistoNSelectedPos(0), fHistoNSelectedNeg(0), fHistoNMatchedPos(0), fHistoNMatchedNeg(0), fHistoEtaPhiHighPt(0), fTrack(0) |
00221bed | 47 | |
c88234ad | 48 | { |
00221bed | 49 | // Constructor |
50 | fHistoCuts = new TH1I("fTrkCuts", "Track Cuts", kNTrkCuts, -0.5, kNTrkCuts - 0.5); | |
51 | for(Int_t ibin=1;ibin<=kNTrkCuts;ibin++)fHistoCuts->GetXaxis()->SetBinLabel(ibin,kBinLabel[ibin-1]); | |
3d1f02f9 | 52 | //standard histo |
53 | 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}; | |
54 | Int_t nbinsTempl=52; | |
55 | ||
56 | fHistoNSelectedPos=new TH1F("fHistoNSelectedPos","fHistoNSelectedPos",nbinsTempl,templBins); | |
57 | fHistoNSelectedPos->GetXaxis()->SetTitle("P_{T} (GeV / c)"); | |
58 | fHistoNSelectedNeg=new TH1F("fHistoNSelectedNeg","fHistoNSelectedNeg",nbinsTempl,templBins); | |
59 | fHistoNSelectedNeg->GetXaxis()->SetTitle("P_{T} (GeV / c)"); | |
60 | fHistoNMatchedPos=new TH1F("fHistoNMatchedPos","fHistoNMatchedPos",nbinsTempl,templBins); | |
61 | fHistoNMatchedPos->GetXaxis()->SetTitle("P_{T} (GeV / c)"); | |
62 | fHistoNMatchedNeg=new TH1F("fHistoNMatchedNeg","fHistoNMatchedNeg",nbinsTempl,templBins); | |
63 | fHistoNMatchedNeg->GetXaxis()->SetTitle("P_{T} (GeV / c)"); | |
ae0fdd7d | 64 | fHistoEtaPhiHighPt=new TH2F("fHistoEtaPhiHighPt","fHistoEtaPhiHighPt",200,-1,1,400,0,7); |
65 | fHistoEtaPhiHighPt->SetXTitle("eta"); | |
66 | fHistoEtaPhiHighPt->SetYTitle("phi"); | |
3d1f02f9 | 67 | |
00221bed | 68 | fEtaCut = 100000.0; // default value of eta cut ~ no cut |
69 | fDCACut = 100000.0; // default value of dca cut ~ no cut | |
70 | fPCut = 100000.0; // default value of p cut ~ no cut | |
71 | fPtCut = 100000.0; // default value of pt cut ~ no cut | |
72 | fPtCutTOFMatching=0.6; //default value fot matching with TOF | |
73 | fQvecCutMin = -100000.0; // default value of qvec cut ~ no cut | |
74 | fQvecCutMax = 100000.0; // default value of qvec cut ~ no cut | |
75 | fYCut = 100000.0; // default value of y cut ~ no cut | |
76 | ||
c88234ad | 77 | } |
78 | ||
79 | //_______________________________________________________ | |
80 | Bool_t AliSpectraAODTrackCuts::IsSelected(AliAODTrack * track) | |
81 | { | |
00221bed | 82 | // Returns true if Track Cuts are selected and applied |
83 | if (!track) | |
84 | { | |
c88234ad | 85 | printf("ERROR: Could not receive track"); |
86 | return kFALSE; | |
00221bed | 87 | } |
88 | fTrack = track; | |
89 | ||
90 | if(!CheckTrackType()){ | |
91 | return kFALSE; | |
92 | } | |
93 | fHistoCuts->Fill(kTrkBit); | |
936e2842 | 94 | |
95 | if(!CheckTrackCuts()){ | |
96 | return kFALSE; | |
97 | } | |
98 | fHistoCuts->Fill(kTrkCuts); | |
00221bed | 99 | if(!CheckEtaCut()){ |
100 | return kFALSE; | |
101 | } | |
102 | fHistoCuts->Fill(kTrkEta); | |
103 | if(!CheckDCACut()){ | |
104 | return kFALSE; | |
105 | } | |
106 | fHistoCuts->Fill(kTrkDCA); | |
107 | if(!CheckPCut()){ | |
108 | return kFALSE; | |
109 | } | |
110 | fHistoCuts->Fill(kTrkP); | |
111 | if(!CheckPtCut()){ | |
112 | return kFALSE; | |
113 | } | |
114 | fHistoCuts->Fill(kTrkPt); | |
115 | if(!CheckTOFMatching()){ | |
116 | return kFALSE; | |
117 | } | |
118 | fHistoCuts->Fill(kAccepted); | |
ae0fdd7d | 119 | //Printf("-------- %d,%d",kTOFMatching,kAccepted); |
00221bed | 120 | return kTRUE; |
c88234ad | 121 | } |
122 | //_________________________________________________________ | |
123 | ||
124 | Bool_t AliSpectraAODTrackCuts::CheckTrackType() | |
125 | { | |
936e2842 | 126 | // Check track Type |
00221bed | 127 | if (fTrack->TestFilterBit(fTrackBits)) return kTRUE; |
128 | return kFALSE; | |
c88234ad | 129 | } |
936e2842 | 130 | //_________________________________________________________ |
131 | ||
132 | Bool_t AliSpectraAODTrackCuts::CheckTrackCuts() | |
133 | { | |
134 | // Check additional track Cuts | |
135 | return fTrack->HasPointOnITSLayer(0); //FIXME 1 SPD for the moment | |
136 | ||
137 | } | |
c88234ad | 138 | //________________________________________________________ |
139 | Bool_t AliSpectraAODTrackCuts::CheckEtaCut() | |
140 | { | |
141 | // Check eta cut | |
142 | if (fTrack->Eta() < fEtaCut && fTrack->Eta() > - fEtaCut) return kTRUE; | |
00221bed | 143 | return kFALSE; |
c88234ad | 144 | } |
e8b0fe64 | 145 | |
146 | Bool_t AliSpectraAODTrackCuts::CheckYCut(AODParticleSpecies_t species) | |
147 | { | |
148 | // check if the rapidity is within the set range | |
149 | Double_t y; | |
150 | if (species == kSpProton) { y = fTrack->Y(9.38271999999999995e-01); } | |
151 | if ( species == kSpKaon ) { y = fTrack->Y(4.93676999999999977e-01); } | |
152 | if ( species == kSpPion) { y = fTrack->Y(1.39570000000000000e-01); } | |
153 | if (TMath::Abs(y) > fYCut || y < -998.) return kFALSE; | |
154 | return kTRUE; | |
155 | } | |
c88234ad | 156 | //_______________________________________________________ |
157 | Bool_t AliSpectraAODTrackCuts::CheckDCACut() | |
158 | { | |
159 | // Check DCA cut | |
00221bed | 160 | if (TMath::Abs(fTrack->DCA()) < fDCACut) return kTRUE; |
c88234ad | 161 | return kFALSE; |
162 | } | |
163 | //________________________________________________________ | |
164 | Bool_t AliSpectraAODTrackCuts::CheckPCut() | |
165 | { | |
166 | // Check P cut | |
167 | if (fTrack->P() < fPCut) return kTRUE; | |
c88234ad | 168 | return kFALSE; |
169 | } | |
170 | //_______________________________________________________ | |
171 | Bool_t AliSpectraAODTrackCuts::CheckPtCut() | |
172 | { | |
173 | // check Pt cut | |
174 | // if ((fTrack->Pt() < fPtCut) && (fTrack->Pt() > 0.3 )) return kTRUE; | |
175 | if (fTrack->Pt() < fPtCut) return kTRUE; | |
c88234ad | 176 | return kFALSE; |
177 | } | |
823864bf | 178 | |
179 | //_______________________________________________________ | |
180 | Bool_t AliSpectraAODTrackCuts::CheckTOFMatching() | |
181 | { | |
182 | // check Pt cut | |
183 | // if ((fTrack->Pt() < fPtCut) && (fTrack->Pt() > 0.3 )) return kTRUE; | |
184 | ||
185 | if (fTrack->Pt() < fPtCutTOFMatching) return kTRUE; | |
186 | else{ | |
00221bed | 187 | fHistoCuts->Fill(kTrkPtTOF); |
3d1f02f9 | 188 | if(fTrack->Charge()>0)fHistoNSelectedPos->Fill(fTrack->Pt()); |
189 | else fHistoNSelectedNeg->Fill(fTrack->Pt()); | |
823864bf | 190 | UInt_t status; |
191 | status=fTrack->GetStatus(); | |
00221bed | 192 | if((status&AliAODTrack::kTOFout))fHistoCuts->Fill(kTrTOFout); |
193 | if((status&AliAODTrack::kTIME))fHistoCuts->Fill(kTrTIME); | |
194 | if((status&AliAODTrack::kTOFpid))fHistoCuts->Fill(kTrTOFpid); | |
195 | ||
3d1f02f9 | 196 | if((status&AliAODTrack::kTOFout)==0 || (status&AliAODTrack::kTIME)==0){//kTOFout and kTIME |
197 | return kFALSE; | |
84482563 | 198 | } |
00221bed | 199 | fHistoCuts->Fill(kTOFMatching); |
3d1f02f9 | 200 | if(fTrack->Charge()>0)fHistoNMatchedPos->Fill(fTrack->Pt()); |
201 | else fHistoNMatchedNeg->Fill(fTrack->Pt()); | |
ae0fdd7d | 202 | if(fTrack->Pt()>1.5){ |
203 | //fHistoEtaPhiHighPt->Fill(fTrack->GetOuterParam()->Eta(),fTrack->GetOuterParam()->Phi()); | |
204 | //Printf("AliExternalTrackParam * extpar=(AliExternalTrackParam*)fTrack->GetOuterParam();"); | |
205 | //AliExternalTrackParam * extpar=(AliExternalTrackParam*)fTrack->GetOuterParam(); | |
206 | fHistoEtaPhiHighPt->Fill(fTrack->Eta(),fTrack->Phi()); | |
207 | //Printf("fHistoEtaPhiHighPt->Fill(extpar->Eta(),extpar->Phi());"); | |
208 | //fHistoEtaPhiHighPt->Fill(extpar->Eta(),extpar->Phi()); | |
209 | //delete extpar; | |
210 | } | |
823864bf | 211 | return kTRUE; |
212 | } | |
213 | } | |
c88234ad | 214 | //_______________________________________________________ |
215 | void AliSpectraAODTrackCuts::PrintCuts() const | |
216 | { | |
217 | // Print cuts | |
218 | cout << "Track Cuts" << endl; | |
219 | cout << " > TrackBit\t" << fTrackBits << endl; | |
220 | cout << " > Eta cut\t" << fEtaCut << endl; | |
221 | cout << " > DCA cut\t" << fDCACut << endl; | |
222 | cout << " > P cut\t" << fPCut << endl; | |
223 | cout << " > Pt cut \t" << fPtCut << endl; | |
823864bf | 224 | cout << " > Q vactor Min \t" << fQvecCutMin << endl; |
225 | cout << " > Q vactor Max \t" << fQvecCutMax << endl; | |
c88234ad | 226 | } |
227 | //_______________________________________________________ | |
228 | void AliSpectraAODTrackCuts::SetTrackType(UInt_t bit) | |
229 | { | |
230 | // Set the type of track to be used. The argument should be the bit number. The mask is produced automatically. | |
231 | fTrackBits = (0x1 << (bit - 1)); | |
232 | } | |
233 | //_______________________________________________________ | |
234 | ||
235 | Long64_t AliSpectraAODTrackCuts::Merge(TCollection* list) | |
236 | { | |
237 | // Merge a list of AliSpectraAODTrackCuts objects with this. | |
238 | // Returns the number of merged objects (including this). | |
239 | ||
240 | // AliInfo("Merging"); | |
241 | ||
242 | if (!list) | |
243 | return 0; | |
244 | ||
245 | if (list->IsEmpty()) | |
246 | return 1; | |
247 | ||
248 | TIterator* iter = list->MakeIterator(); | |
249 | TObject* obj; | |
250 | ||
251 | // collections of all histograms | |
3d1f02f9 | 252 | TList collections;//FIXME we should only 1 collection |
253 | TList collections_histoNSelectedPos; | |
254 | TList collections_histoNSelectedNeg; | |
255 | TList collections_histoNMatchedPos; | |
256 | TList collections_histoNMatchedNeg; | |
ae0fdd7d | 257 | TList collections_histoEtaPhiHighPt; |
c88234ad | 258 | |
259 | Int_t count = 0; | |
260 | ||
261 | while ((obj = iter->Next())) { | |
262 | AliSpectraAODTrackCuts* entry = dynamic_cast<AliSpectraAODTrackCuts*> (obj); | |
263 | if (entry == 0) | |
264 | continue; | |
3d1f02f9 | 265 | |
c88234ad | 266 | TH1I * histo = entry->GetHistoCuts(); |
267 | collections.Add(histo); | |
3d1f02f9 | 268 | TH1F * histoNSelectedPos = entry->GetHistoNSelectedPos(); |
269 | collections_histoNSelectedPos.Add(histoNSelectedPos); | |
270 | TH1F * histoNSelectedNeg = entry->GetHistoNSelectedNeg(); | |
271 | collections_histoNSelectedNeg.Add(histoNSelectedNeg); | |
272 | TH1F * histoNMatchedPos = entry->GetHistoNMatchedPos(); | |
273 | collections_histoNMatchedPos.Add(histoNMatchedPos); | |
274 | TH1F * histoNMatchedNeg = entry->GetHistoNMatchedNeg(); | |
275 | collections_histoNMatchedNeg.Add(histoNMatchedNeg); | |
ae0fdd7d | 276 | TH2F * histoEtaPhiHighPt = entry->GetHistoEtaPhiHighPt(); |
277 | collections_histoEtaPhiHighPt.Add(histoEtaPhiHighPt); | |
c88234ad | 278 | count++; |
279 | } | |
280 | ||
281 | fHistoCuts->Merge(&collections); | |
3d1f02f9 | 282 | fHistoNSelectedPos->Merge(&collections_histoNSelectedPos); |
283 | fHistoNSelectedNeg->Merge(&collections_histoNSelectedNeg); | |
284 | fHistoNMatchedPos->Merge(&collections_histoNMatchedPos); | |
285 | fHistoNMatchedNeg->Merge(&collections_histoNMatchedNeg); | |
ae0fdd7d | 286 | fHistoEtaPhiHighPt->Merge(&collections_histoEtaPhiHighPt); |
c88234ad | 287 | |
288 | delete iter; | |
289 | ||
290 | return count+1; | |
291 | } | |
292 |