- update to runGrid and runAOD - KTOFPID added
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TestAOD / AliSpectraAODTrackCuts.cxx
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 "AliAODMCParticle.h"
31 #include "AliAODEvent.h"
32 #include "AliAODInputHandler.h"
33 #include "AliAnalysisTaskESDfilter.h"
34 #include "AliAnalysisDataContainer.h"
35 #include "AliSpectraAODTrackCuts.h"
36 #include "AliSpectraAODHistoManager.h"
37 #include <iostream>
38
39 using namespace std;
40
41 ClassImp(AliSpectraAODTrackCuts)
42
43
44 AliSpectraAODTrackCuts::AliSpectraAODTrackCuts(const char *name) : TNamed(name, "AOD Track Cuts"), fIsSelected(0), fTrackBits(0), fEtaCut(0), fDCACut(0), fPCut(0), fPtCut(0), fYCut(0),
45  fPtCutTOFMatching(0),fQvecCutMin(0),fQvecCutMax(0), fHistoCuts(0), fTrack(0)
46
47 {
48    // Constructor
49    fHistoCuts = new TH1I("fTrkCuts", "Track Cuts", kNTrkCuts, -0.5, kNTrkCuts - 0.5);
50    fEtaCut = 100000.0; // default value of eta cut ~ no cut
51    fDCACut = 100000.0; // default value of dca cut ~ no cut
52    fPCut = 100000.0; // default value of p cut ~ no cut
53    fPtCut = 100000.0; // default value of pt cut ~ no cut 
54    fPtCutTOFMatching=0.6; //default value fot matching with TOF
55    fQvecCutMin = -100000.0; // default value of qvec cut ~ no cut 
56    fQvecCutMax = 100000.0; // default value of qvec cut ~ no cut 
57    fYCut       = 100000.0; // default value of y cut ~ no cut 
58    
59 }
60
61 //_______________________________________________________
62 Bool_t AliSpectraAODTrackCuts::IsSelected(AliAODTrack * track)
63 {
64 // Returns true if Track Cuts are selected and applied
65    if (!track)
66    {
67       printf("ERROR: Could not receive track");
68       return kFALSE;
69    }
70    fTrack = track;
71    fIsSelected = (CheckTrackType() && CheckEtaCut() && CheckDCACut() && CheckPCut() && CheckPtCut() && CheckTOFMatching());
72    return fIsSelected ;
73 }
74 //_________________________________________________________
75
76 Bool_t AliSpectraAODTrackCuts::CheckTrackType()
77 {
78    // Check track cuts
79    if (fTrack->TestFilterBit(fTrackBits)) return kTRUE;
80    fHistoCuts->Fill(kTrkBit);
81    return kFALSE;
82 }
83 //________________________________________________________
84 Bool_t AliSpectraAODTrackCuts::CheckEtaCut()
85 {
86    // Check eta cut
87    if (fTrack->Eta() < fEtaCut && fTrack->Eta() > - fEtaCut) return kTRUE;
88    fHistoCuts->Fill(kTrkEta);
89    return kFALSE;
90 }
91
92 Bool_t AliSpectraAODTrackCuts::CheckYCut(AODParticleSpecies_t species) 
93 {
94   // check if the rapidity is within the set range
95   Double_t y;
96   if (species == kSpProton) { y = fTrack->Y(9.38271999999999995e-01); }
97   if ( species == kSpKaon ) { y = fTrack->Y(4.93676999999999977e-01); }
98   if ( species == kSpPion)  { y = fTrack->Y(1.39570000000000000e-01); }
99   if (TMath::Abs(y) > fYCut || y < -998.) return kFALSE;
100   return kTRUE;
101 }
102 //_______________________________________________________
103 Bool_t AliSpectraAODTrackCuts::CheckDCACut()
104 {
105    // Check DCA cut
106    if (fTrack->DCA() < fDCACut) return kTRUE;
107    fHistoCuts->Fill(kTrkDCA);
108    return kFALSE;
109 }
110 //________________________________________________________
111 Bool_t AliSpectraAODTrackCuts::CheckPCut()
112 {
113    // Check P cut
114    if (fTrack->P() < fPCut) return kTRUE;
115    fHistoCuts->Fill(kTrkP);
116    return kFALSE;
117 }
118 //_______________________________________________________
119 Bool_t AliSpectraAODTrackCuts::CheckPtCut()
120 {
121     // check Pt cut
122 //    if ((fTrack->Pt() < fPtCut) && (fTrack->Pt() > 0.3 )) return kTRUE;
123    if (fTrack->Pt() < fPtCut) return kTRUE;
124     fHistoCuts->Fill(kTrkPt);
125     return kFALSE;
126 }
127
128 //_______________________________________________________
129 Bool_t AliSpectraAODTrackCuts::CheckTOFMatching()
130 {
131   // check Pt cut
132   //    if ((fTrack->Pt() < fPtCut) && (fTrack->Pt() > 0.3 )) return kTRUE;
133   
134   if (fTrack->Pt() < fPtCutTOFMatching) return kTRUE;
135   else{
136     UInt_t status; 
137     status=fTrack->GetStatus();
138     if((status&AliAODTrack::kTOFout)==0 || (status&AliAODTrack::kTIME)==0 || (status&AliAODTrack::kTOFpid)==0){
139       fHistoCuts->Fill(kTOFMatching);
140       return kFALSE; //tof matching and PID
141     } 
142     return kTRUE;
143   }
144 }
145 //_______________________________________________________
146 void AliSpectraAODTrackCuts::PrintCuts() const
147 {
148   // Print cuts
149     cout << "Track Cuts" << endl;
150     cout << " > TrackBit\t" << fTrackBits << endl;
151     cout << " > Eta cut\t" << fEtaCut << endl;
152     cout << " > DCA cut\t" << fDCACut << endl;
153     cout << " > P cut\t" << fPCut << endl;
154     cout << " > Pt cut \t" << fPtCut << endl;
155     cout << " > Q vactor Min \t" << fQvecCutMin << endl;
156     cout << " > Q vactor Max \t" << fQvecCutMax << endl;
157 }
158 //_______________________________________________________
159 void AliSpectraAODTrackCuts::SetTrackType(UInt_t bit)
160 {
161    // Set the type of track to be used. The argument should be the bit number. The mask is produced automatically.
162    fTrackBits = (0x1 << (bit - 1));
163 }
164 //_______________________________________________________
165
166 Long64_t AliSpectraAODTrackCuts::Merge(TCollection* list)
167 {
168   // Merge a list of AliSpectraAODTrackCuts objects with this.
169   // Returns the number of merged objects (including this).
170
171   //  AliInfo("Merging");
172
173   if (!list)
174     return 0;
175
176   if (list->IsEmpty())
177     return 1;
178
179   TIterator* iter = list->MakeIterator();
180   TObject* obj;
181
182   // collections of all histograms
183   TList collections;
184
185   Int_t count = 0;
186
187   while ((obj = iter->Next())) {
188     AliSpectraAODTrackCuts* entry = dynamic_cast<AliSpectraAODTrackCuts*> (obj);
189     if (entry == 0) 
190       continue;
191
192     TH1I * histo = entry->GetHistoCuts();      
193     collections.Add(histo);
194     count++;
195   }
196   
197   fHistoCuts->Merge(&collections);
198   
199   delete iter;
200
201   return count+1;
202 }
203