]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraAODTrackCuts.cxx
small fix
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TestAOD / AliSpectraAODTrackCuts.cxx
CommitLineData
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
41using namespace std;
42
c13dd339 43const 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 57ClassImp(AliSpectraAODTrackCuts)
58
59
90efeed2 60AliSpectraAODTrackCuts::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 94Bool_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
137Bool_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
145Bool_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//________________________________________________________
154Bool_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 161Bool_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//_______________________________________________________
170Bool_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//________________________________________________________
177Bool_t AliSpectraAODTrackCuts::CheckPCut()
178{
1ac45dd7 179 // Check P cut
180 if (fTrack->P() < fPCut) return kTRUE;
181 return kFALSE;
c88234ad 182}
183//_______________________________________________________
184Bool_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 192Bool_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//_______________________________________________________
237void 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//_______________________________________________________
249void 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
256Long64_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