]>
Commit | Line | Data |
---|---|---|
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" | |
30 | #include "AliExternalTrackParam.h" | |
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 | ||
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), | |
46 | fPtCutTOFMatching(0),fQvecCutMin(0),fQvecCutMax(0), fHistoCuts(0), fHistoNSelectedPos(0), fHistoNSelectedNeg(0), fHistoNMatchedPos(0), fHistoNMatchedNeg(0), fHistoEtaPhiHighPt(0), fTrack(0) | |
47 | ||
48 | { | |
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]); | |
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)"); | |
64 | fHistoEtaPhiHighPt=new TH2F("fHistoEtaPhiHighPt","fHistoEtaPhiHighPt",200,-1,1,400,0,7); | |
65 | fHistoEtaPhiHighPt->SetXTitle("eta"); | |
66 | fHistoEtaPhiHighPt->SetYTitle("phi"); | |
67 | ||
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 | ||
77 | } | |
78 | ||
79 | //_______________________________________________________ | |
80 | Bool_t AliSpectraAODTrackCuts::IsSelected(AliAODTrack * track) | |
81 | { | |
82 | // Returns true if Track Cuts are selected and applied | |
83 | if (!track) | |
84 | { | |
85 | printf("ERROR: Could not receive track"); | |
86 | return kFALSE; | |
87 | } | |
88 | fTrack = track; | |
89 | ||
90 | if(!CheckTrackType()){ | |
91 | return kFALSE; | |
92 | } | |
93 | fHistoCuts->Fill(kTrkBit); | |
94 | ||
95 | if(!CheckTrackCuts()){ | |
96 | return kFALSE; | |
97 | } | |
98 | fHistoCuts->Fill(kTrkCuts); | |
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); | |
119 | //Printf("-------- %d,%d",kTOFMatching,kAccepted); | |
120 | return kTRUE; | |
121 | } | |
122 | //_________________________________________________________ | |
123 | ||
124 | Bool_t AliSpectraAODTrackCuts::CheckTrackType() | |
125 | { | |
126 | // Check track Type | |
127 | if (fTrack->TestFilterBit(fTrackBits)) return kTRUE; | |
128 | return kFALSE; | |
129 | } | |
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 | } | |
138 | //________________________________________________________ | |
139 | Bool_t AliSpectraAODTrackCuts::CheckEtaCut() | |
140 | { | |
141 | // Check eta cut | |
142 | if (fTrack->Eta() < fEtaCut && fTrack->Eta() > - fEtaCut) return kTRUE; | |
143 | return kFALSE; | |
144 | } | |
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 | } | |
156 | //_______________________________________________________ | |
157 | Bool_t AliSpectraAODTrackCuts::CheckDCACut() | |
158 | { | |
159 | // Check DCA cut | |
160 | if (TMath::Abs(fTrack->DCA()) < fDCACut) return kTRUE; | |
161 | return kFALSE; | |
162 | } | |
163 | //________________________________________________________ | |
164 | Bool_t AliSpectraAODTrackCuts::CheckPCut() | |
165 | { | |
166 | // Check P cut | |
167 | if (fTrack->P() < fPCut) return kTRUE; | |
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; | |
176 | return kFALSE; | |
177 | } | |
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{ | |
187 | fHistoCuts->Fill(kTrkPtTOF); | |
188 | if(fTrack->Charge()>0)fHistoNSelectedPos->Fill(fTrack->Pt()); | |
189 | else fHistoNSelectedNeg->Fill(fTrack->Pt()); | |
190 | UInt_t status; | |
191 | status=fTrack->GetStatus(); | |
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 | ||
196 | if((status&AliAODTrack::kTOFout)==0 || (status&AliAODTrack::kTIME)==0){//kTOFout and kTIME | |
197 | return kFALSE; | |
198 | } | |
199 | fHistoCuts->Fill(kTOFMatching); | |
200 | if(fTrack->Charge()>0)fHistoNMatchedPos->Fill(fTrack->Pt()); | |
201 | else fHistoNMatchedNeg->Fill(fTrack->Pt()); | |
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 | } | |
211 | return kTRUE; | |
212 | } | |
213 | } | |
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; | |
224 | cout << " > Q vactor Min \t" << fQvecCutMin << endl; | |
225 | cout << " > Q vactor Max \t" << fQvecCutMax << endl; | |
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 | |
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; | |
257 | TList collections_histoEtaPhiHighPt; | |
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; | |
265 | ||
266 | TH1I * histo = entry->GetHistoCuts(); | |
267 | collections.Add(histo); | |
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); | |
276 | TH2F * histoEtaPhiHighPt = entry->GetHistoEtaPhiHighPt(); | |
277 | collections_histoEtaPhiHighPt.Add(histoEtaPhiHighPt); | |
278 | count++; | |
279 | } | |
280 | ||
281 | fHistoCuts->Merge(&collections); | |
282 | fHistoNSelectedPos->Merge(&collections_histoNSelectedPos); | |
283 | fHistoNSelectedNeg->Merge(&collections_histoNSelectedNeg); | |
284 | fHistoNMatchedPos->Merge(&collections_histoNMatchedPos); | |
285 | fHistoNMatchedNeg->Merge(&collections_histoNMatchedNeg); | |
286 | fHistoEtaPhiHighPt->Merge(&collections_histoEtaPhiHighPt); | |
287 | ||
288 | delete iter; | |
289 | ||
290 | return count+1; | |
291 | } | |
292 |