]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraAODTrackCuts.cxx
including modifications from user saiola
[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"
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
40using namespace std;
41
42ClassImp(AliSpectraAODTrackCuts)
43
44
e8b0fe64 45AliSpectraAODTrackCuts::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//_______________________________________________________
80Bool_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
124Bool_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
132Bool_t AliSpectraAODTrackCuts::CheckTrackCuts()
133{
134 // Check additional track Cuts
135 return fTrack->HasPointOnITSLayer(0); //FIXME 1 SPD for the moment
136
137}
c88234ad 138//________________________________________________________
139Bool_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
146Bool_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//_______________________________________________________
157Bool_t AliSpectraAODTrackCuts::CheckDCACut()
158{
159 // Check DCA cut
00221bed 160 if (TMath::Abs(fTrack->DCA()) < fDCACut) return kTRUE;
c88234ad 161 return kFALSE;
162}
163//________________________________________________________
164Bool_t AliSpectraAODTrackCuts::CheckPCut()
165{
166 // Check P cut
167 if (fTrack->P() < fPCut) return kTRUE;
c88234ad 168 return kFALSE;
169}
170//_______________________________________________________
171Bool_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//_______________________________________________________
180Bool_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//_______________________________________________________
215void 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//_______________________________________________________
228void 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
235Long64_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