]>
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" | |
829b5a81 | 25 | #include "TH1I.h" |
c88234ad | 26 | #include "TH2F.h" |
27 | #include "TCanvas.h" | |
28 | #include "AliAnalysisTask.h" | |
29 | #include "AliAnalysisManager.h" | |
30 | #include "AliAODTrack.h" | |
a508c9dc | 31 | #include "AliPIDResponse.h" |
ae0fdd7d | 32 | #include "AliExternalTrackParam.h" |
c88234ad | 33 | #include "AliAODMCParticle.h" |
34 | #include "AliAODEvent.h" | |
35 | #include "AliAODInputHandler.h" | |
36 | #include "AliAnalysisTaskESDfilter.h" | |
37 | #include "AliAnalysisDataContainer.h" | |
38 | #include "AliSpectraAODTrackCuts.h" | |
c88234ad | 39 | #include <iostream> |
40 | ||
41 | using namespace std; | |
42 | ||
c13dd339 | 43 | const char * AliSpectraAODTrackCuts::kBinLabel[] ={"TrkBit", |
44 | "TrkCuts", | |
45 | "TrkEta", | |
46 | "TrkDCA", | |
47 | "TrkP", | |
48 | "TrkPt", | |
49 | "TrkPtTOF", | |
50 | "TOFMatching", | |
51 | "kTOFout", | |
52 | "kTIME", | |
53 | "kTOFpid", | |
54 | "Accepted"}; | |
55 | ||
56 | ||
c88234ad | 57 | ClassImp(AliSpectraAODTrackCuts) |
58 | ||
59 | ||
90efeed2 | 60 | AliSpectraAODTrackCuts::AliSpectraAODTrackCuts(const char *name) : TNamed(name, "AOD Track Cuts"), fIsSelected(0), fTrackBits(0), fMinTPCcls(0), fRequestSPDcls(0), fEtaCutMin(0), fEtaCutMax(0), fDCACut(0), fPCut(0), fPtCut(0), fYCut(0), |
a508c9dc | 61 | fPtCutTOFMatching(0), fHistoCuts(0), fHistoNSelectedPos(0), fHistoNSelectedNeg(0), fHistoNMatchedPos(0), fHistoNMatchedNeg(0), fHistoEtaPhiHighPt(0), fTrack(0), fPIDResponse(0) |
c88234ad | 62 | { |
00221bed | 63 | // Constructor |
64 | fHistoCuts = new TH1I("fTrkCuts", "Track Cuts", kNTrkCuts, -0.5, kNTrkCuts - 0.5); | |
65 | for(Int_t ibin=1;ibin<=kNTrkCuts;ibin++)fHistoCuts->GetXaxis()->SetBinLabel(ibin,kBinLabel[ibin-1]); | |
3d1f02f9 | 66 | //standard histo |
9c04e3d3 LM |
67 | const Double_t templBins[] = {0.20,0.30,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.2,1.4,1.6,1.8,2.0,2.4,2.8,3.2,3.6,4.0,5.0,6.0,7.0,8.0,9.0,10.,12.,15.}; |
68 | const Int_t nbinsTempl=26; | |
69 | ||
3d1f02f9 | 70 | fHistoNSelectedPos=new TH1F("fHistoNSelectedPos","fHistoNSelectedPos",nbinsTempl,templBins); |
71 | fHistoNSelectedPos->GetXaxis()->SetTitle("P_{T} (GeV / c)"); | |
72 | fHistoNSelectedNeg=new TH1F("fHistoNSelectedNeg","fHistoNSelectedNeg",nbinsTempl,templBins); | |
73 | fHistoNSelectedNeg->GetXaxis()->SetTitle("P_{T} (GeV / c)"); | |
74 | fHistoNMatchedPos=new TH1F("fHistoNMatchedPos","fHistoNMatchedPos",nbinsTempl,templBins); | |
75 | fHistoNMatchedPos->GetXaxis()->SetTitle("P_{T} (GeV / c)"); | |
76 | fHistoNMatchedNeg=new TH1F("fHistoNMatchedNeg","fHistoNMatchedNeg",nbinsTempl,templBins); | |
77 | fHistoNMatchedNeg->GetXaxis()->SetTitle("P_{T} (GeV / c)"); | |
ae0fdd7d | 78 | fHistoEtaPhiHighPt=new TH2F("fHistoEtaPhiHighPt","fHistoEtaPhiHighPt",200,-1,1,400,0,7); |
79 | fHistoEtaPhiHighPt->SetXTitle("eta"); | |
80 | fHistoEtaPhiHighPt->SetYTitle("phi"); | |
3d1f02f9 | 81 | |
decf69d9 | 82 | fEtaCutMin = -100000.0; // default value of eta cut ~ no cut |
83 | fEtaCutMax = 100000.0; // default value of eta cut ~ no cut | |
00221bed | 84 | fDCACut = 100000.0; // default value of dca cut ~ no cut |
85 | fPCut = 100000.0; // default value of p cut ~ no cut | |
86 | fPtCut = 100000.0; // default value of pt cut ~ no cut | |
87 | fPtCutTOFMatching=0.6; //default value fot matching with TOF | |
00221bed | 88 | fYCut = 100000.0; // default value of y cut ~ no cut |
829b5a81 | 89 | fMinTPCcls=70; // ncls in TPC |
90efeed2 | 90 | fRequestSPDcls=kFALSE; //request a hit in the SPD |
c88234ad | 91 | } |
92 | ||
93 | //_______________________________________________________ | |
decf69d9 | 94 | Bool_t AliSpectraAODTrackCuts::IsSelected(AliAODTrack * track,Bool_t FillHistStat) |
c88234ad | 95 | { |
00221bed | 96 | // Returns true if Track Cuts are selected and applied |
97 | if (!track) | |
98 | { | |
c88234ad | 99 | printf("ERROR: Could not receive track"); |
100 | return kFALSE; | |
00221bed | 101 | } |
102 | fTrack = track; | |
103 | ||
104 | if(!CheckTrackType()){ | |
105 | return kFALSE; | |
106 | } | |
decf69d9 | 107 | if(FillHistStat)fHistoCuts->Fill(kTrkBit); |
936e2842 | 108 | |
109 | if(!CheckTrackCuts()){ | |
110 | return kFALSE; | |
111 | } | |
decf69d9 | 112 | if(FillHistStat)fHistoCuts->Fill(kTrkCuts); |
00221bed | 113 | if(!CheckEtaCut()){ |
114 | return kFALSE; | |
115 | } | |
decf69d9 | 116 | if(FillHistStat)fHistoCuts->Fill(kTrkEta); |
00221bed | 117 | if(!CheckDCACut()){ |
118 | return kFALSE; | |
119 | } | |
decf69d9 | 120 | if(FillHistStat)fHistoCuts->Fill(kTrkDCA); |
00221bed | 121 | if(!CheckPCut()){ |
122 | return kFALSE; | |
123 | } | |
decf69d9 | 124 | if(FillHistStat)fHistoCuts->Fill(kTrkP); |
00221bed | 125 | if(!CheckPtCut()){ |
126 | return kFALSE; | |
127 | } | |
decf69d9 | 128 | if(FillHistStat)fHistoCuts->Fill(kTrkPt); |
129 | if(!CheckTOFMatching(FillHistStat)){ | |
00221bed | 130 | return kFALSE; |
131 | } | |
decf69d9 | 132 | if(FillHistStat)fHistoCuts->Fill(kAccepted); |
00221bed | 133 | return kTRUE; |
c88234ad | 134 | } |
135 | //_________________________________________________________ | |
136 | ||
137 | Bool_t AliSpectraAODTrackCuts::CheckTrackType() | |
138 | { | |
936e2842 | 139 | // Check track Type |
00221bed | 140 | if (fTrack->TestFilterBit(fTrackBits)) return kTRUE; |
141 | return kFALSE; | |
c88234ad | 142 | } |
936e2842 | 143 | //_________________________________________________________ |
144 | ||
145 | Bool_t AliSpectraAODTrackCuts::CheckTrackCuts() | |
146 | { | |
147 | // Check additional track Cuts | |
00493191 | 148 | Bool_t PassTrackCuts=kTRUE; |
738deccf | 149 | if (!fTrack->HasPointOnITSLayer(0) && !fTrack->HasPointOnITSLayer(1) && fRequestSPDcls)PassTrackCuts=kFALSE; //FIXME 1 SPD for the moment |
829b5a81 | 150 | if (fTrack->GetTPCNcls()<fMinTPCcls)PassTrackCuts=kFALSE; |
00493191 | 151 | return PassTrackCuts; |
936e2842 | 152 | } |
c88234ad | 153 | //________________________________________________________ |
154 | Bool_t AliSpectraAODTrackCuts::CheckEtaCut() | |
155 | { | |
1ac45dd7 | 156 | // Check eta cut |
157 | if (fTrack->Eta() < fEtaCutMax && fTrack->Eta() > fEtaCutMin) return kTRUE; | |
158 | return kFALSE; | |
c88234ad | 159 | } |
e8b0fe64 | 160 | |
50878ee1 | 161 | Bool_t AliSpectraAODTrackCuts::CheckYCut(Double_t mass) |
e8b0fe64 | 162 | { |
163 | // check if the rapidity is within the set range | |
0eeb2f95 | 164 | Double_t y=-1000; |
50878ee1 | 165 | if (mass > 0.) { y = fTrack->Y(mass); }//negative mass for unidentified particles |
e8b0fe64 | 166 | if (TMath::Abs(y) > fYCut || y < -998.) return kFALSE; |
167 | return kTRUE; | |
168 | } | |
c88234ad | 169 | //_______________________________________________________ |
170 | Bool_t AliSpectraAODTrackCuts::CheckDCACut() | |
171 | { | |
1ac45dd7 | 172 | // Check DCA cut |
829b5a81 | 173 | if (TMath::Abs(fTrack->DCA()) < fDCACut) return kTRUE; //FIXME for newest AOD fTrack->DCA() always gives -999 |
1ac45dd7 | 174 | return kFALSE; |
c88234ad | 175 | } |
176 | //________________________________________________________ | |
177 | Bool_t AliSpectraAODTrackCuts::CheckPCut() | |
178 | { | |
1ac45dd7 | 179 | // Check P cut |
180 | if (fTrack->P() < fPCut) return kTRUE; | |
181 | return kFALSE; | |
c88234ad | 182 | } |
183 | //_______________________________________________________ | |
184 | Bool_t AliSpectraAODTrackCuts::CheckPtCut() | |
185 | { | |
1ac45dd7 | 186 | // check Pt cut |
187 | if (fTrack->Pt() < fPtCut) return kTRUE; | |
188 | return kFALSE; | |
c88234ad | 189 | } |
823864bf | 190 | |
191 | //_______________________________________________________ | |
decf69d9 | 192 | Bool_t AliSpectraAODTrackCuts::CheckTOFMatching(Bool_t FillHistStat) |
823864bf | 193 | { |
823864bf | 194 | if (fTrack->Pt() < fPtCutTOFMatching) return kTRUE; |
195 | else{ | |
decf69d9 | 196 | if(FillHistStat)fHistoCuts->Fill(kTrkPtTOF); |
3d1f02f9 | 197 | if(fTrack->Charge()>0)fHistoNSelectedPos->Fill(fTrack->Pt()); |
198 | else fHistoNSelectedNeg->Fill(fTrack->Pt()); | |
a508c9dc | 199 | |
200 | // Get PID response object, if needed | |
201 | if(!fPIDResponse) { | |
202 | AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager(); | |
203 | AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler()); | |
204 | fPIDResponse = inputHandler->GetPIDResponse(); | |
205 | } | |
206 | if(!fPIDResponse) { | |
207 | AliFatal("Cannot get pid response"); | |
208 | return 0; | |
209 | } | |
210 | ||
211 | if(fPIDResponse->CheckPIDStatus(AliPIDResponse::kTOF,fTrack)==0)return kFALSE; | |
212 | ||
213 | //check the bits of the selected particles | |
823864bf | 214 | UInt_t status; |
215 | status=fTrack->GetStatus(); | |
decf69d9 | 216 | if((status&AliAODTrack::kTOFout)&&FillHistStat)fHistoCuts->Fill(kTrTOFout); |
217 | if((status&AliAODTrack::kTIME)&&FillHistStat)fHistoCuts->Fill(kTrTIME); | |
218 | if((status&AliAODTrack::kTOFpid)&&FillHistStat)fHistoCuts->Fill(kTrTOFpid); | |
00221bed | 219 | |
a508c9dc | 220 | |
decf69d9 | 221 | if(FillHistStat)fHistoCuts->Fill(kTOFMatching); |
3d1f02f9 | 222 | if(fTrack->Charge()>0)fHistoNMatchedPos->Fill(fTrack->Pt()); |
223 | else fHistoNMatchedNeg->Fill(fTrack->Pt()); | |
ae0fdd7d | 224 | if(fTrack->Pt()>1.5){ |
225 | //fHistoEtaPhiHighPt->Fill(fTrack->GetOuterParam()->Eta(),fTrack->GetOuterParam()->Phi()); | |
226 | //Printf("AliExternalTrackParam * extpar=(AliExternalTrackParam*)fTrack->GetOuterParam();"); | |
227 | //AliExternalTrackParam * extpar=(AliExternalTrackParam*)fTrack->GetOuterParam(); | |
228 | fHistoEtaPhiHighPt->Fill(fTrack->Eta(),fTrack->Phi()); | |
229 | //Printf("fHistoEtaPhiHighPt->Fill(extpar->Eta(),extpar->Phi());"); | |
230 | //fHistoEtaPhiHighPt->Fill(extpar->Eta(),extpar->Phi()); | |
231 | //delete extpar; | |
232 | } | |
823864bf | 233 | return kTRUE; |
234 | } | |
235 | } | |
c88234ad | 236 | //_______________________________________________________ |
237 | void AliSpectraAODTrackCuts::PrintCuts() const | |
238 | { | |
239 | // Print cuts | |
1ac45dd7 | 240 | cout << "Track Cuts" << endl; |
241 | cout << " > TrackBit\t" << fTrackBits << endl; | |
242 | cout << " > Eta cut\t" << fEtaCutMin <<","<< fEtaCutMax << endl; | |
243 | cout << " > DCA cut\t" << fDCACut << endl; | |
244 | cout << " > P cut\t" << fPCut << endl; | |
245 | cout << " > Pt cut \t" << fPtCut << endl; | |
246 | cout << " > TPC cls \t" << fMinTPCcls << endl; | |
c88234ad | 247 | } |
248 | //_______________________________________________________ | |
249 | void AliSpectraAODTrackCuts::SetTrackType(UInt_t bit) | |
250 | { | |
1ac45dd7 | 251 | // Set the type of track to be used. The argument should be the bit number. The mask is produced automatically. |
252 | fTrackBits = (0x1 << (bit - 1)); | |
c88234ad | 253 | } |
254 | //_______________________________________________________ | |
255 | ||
256 | Long64_t AliSpectraAODTrackCuts::Merge(TCollection* list) | |
257 | { | |
258 | // Merge a list of AliSpectraAODTrackCuts objects with this. | |
259 | // Returns the number of merged objects (including this). | |
260 | ||
261 | // AliInfo("Merging"); | |
262 | ||
263 | if (!list) | |
264 | return 0; | |
265 | ||
266 | if (list->IsEmpty()) | |
267 | return 1; | |
268 | ||
269 | TIterator* iter = list->MakeIterator(); | |
270 | TObject* obj; | |
271 | ||
272 | // collections of all histograms | |
3d1f02f9 | 273 | TList collections;//FIXME we should only 1 collection |
274 | TList collections_histoNSelectedPos; | |
275 | TList collections_histoNSelectedNeg; | |
276 | TList collections_histoNMatchedPos; | |
277 | TList collections_histoNMatchedNeg; | |
ae0fdd7d | 278 | TList collections_histoEtaPhiHighPt; |
c88234ad | 279 | |
280 | Int_t count = 0; | |
281 | ||
282 | while ((obj = iter->Next())) { | |
283 | AliSpectraAODTrackCuts* entry = dynamic_cast<AliSpectraAODTrackCuts*> (obj); | |
284 | if (entry == 0) | |
285 | continue; | |
3d1f02f9 | 286 | |
c88234ad | 287 | TH1I * histo = entry->GetHistoCuts(); |
288 | collections.Add(histo); | |
3d1f02f9 | 289 | TH1F * histoNSelectedPos = entry->GetHistoNSelectedPos(); |
290 | collections_histoNSelectedPos.Add(histoNSelectedPos); | |
291 | TH1F * histoNSelectedNeg = entry->GetHistoNSelectedNeg(); | |
292 | collections_histoNSelectedNeg.Add(histoNSelectedNeg); | |
293 | TH1F * histoNMatchedPos = entry->GetHistoNMatchedPos(); | |
294 | collections_histoNMatchedPos.Add(histoNMatchedPos); | |
295 | TH1F * histoNMatchedNeg = entry->GetHistoNMatchedNeg(); | |
296 | collections_histoNMatchedNeg.Add(histoNMatchedNeg); | |
ae0fdd7d | 297 | TH2F * histoEtaPhiHighPt = entry->GetHistoEtaPhiHighPt(); |
298 | collections_histoEtaPhiHighPt.Add(histoEtaPhiHighPt); | |
c88234ad | 299 | count++; |
300 | } | |
301 | ||
302 | fHistoCuts->Merge(&collections); | |
3d1f02f9 | 303 | fHistoNSelectedPos->Merge(&collections_histoNSelectedPos); |
304 | fHistoNSelectedNeg->Merge(&collections_histoNSelectedNeg); | |
305 | fHistoNMatchedPos->Merge(&collections_histoNMatchedPos); | |
306 | fHistoNMatchedNeg->Merge(&collections_histoNMatchedNeg); | |
ae0fdd7d | 307 | fHistoEtaPhiHighPt->Merge(&collections_histoEtaPhiHighPt); |
c88234ad | 308 | |
309 | delete iter; | |
310 | ||
311 | return count+1; | |
312 | } | |
313 |