]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowCommon/AliStarTrackCuts.cxx
Centrality selection with SPDouter clusters
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowCommon / AliStarTrackCuts.cxx
CommitLineData
b4dba88d 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id$ */
17
18// AliStarTrackCuts:
19// A track cut class for the AliStarTrack
20//
21// origin: Mikolaj Krzewicki (mikolaj.krzewicki@cern.ch)
22
041d7c71 23#include <limits.h>
78f5d284 24#include <float.h>
b4dba88d 25#include "TNamed.h"
26#include "AliStarTrack.h"
27#include "AliStarTrackCuts.h"
28
29ClassImp(AliStarTrackCuts)
30
31//-----------------------------------------------------------------------
32AliStarTrackCuts::AliStarTrackCuts():
33 TNamed(),
34 fCutID(kFALSE),
35 fIDMax(INT_MAX),
78f5d284 36 fIDMin(INT_MIN),
b4dba88d 37 fCutCharge(kFALSE),
38 fChargeMax(INT_MAX),
78f5d284 39 fChargeMin(INT_MIN),
b4dba88d 40 fCutEta(kFALSE),
41 fEtaMax(FLT_MAX),
ded1d842 42 fEtaMin(-FLT_MAX),
b4dba88d 43 fCutPhi(kFALSE),
44 fPhiMax(FLT_MAX),
ded1d842 45 fPhiMin(-FLT_MAX),
b4dba88d 46 fCutPt(kFALSE),
47 fPtMax(FLT_MAX),
ded1d842 48 fPtMin(-FLT_MAX),
b4dba88d 49 fCutDCA(kFALSE),
50 fDCAMax(FLT_MAX),
ded1d842 51 fDCAMin(-FLT_MAX),
b4dba88d 52 fCutNHits(kFALSE),
53 fNHitsMax(INT_MAX),
78f5d284 54 fNHitsMin(INT_MIN),
b4dba88d 55 fCutNHitsFit(kFALSE),
56 fNHitsFitMax(INT_MAX),
78f5d284 57 fNHitsFitMin(INT_MIN),
b4dba88d 58 fCutNHitsPoss(kFALSE),
59 fNHitsPossMax(INT_MAX),
78f5d284 60 fNHitsPossMin(INT_MIN),
b4dba88d 61 fCutNHitsDedx(kFALSE),
62 fNHitsDedxMax(INT_MAX),
78f5d284 63 fNHitsDedxMin(INT_MIN),
b4dba88d 64 fCutdEdx(kFALSE),
65 fdEdxMax(FLT_MAX),
ded1d842 66 fdEdxMin(-FLT_MAX),
b4dba88d 67 fCutNSigElect(kFALSE),
68 fNSigElectMax(FLT_MAX),
ded1d842 69 fNSigElectMin(-FLT_MAX),
b4dba88d 70 fCutNSigPi(kFALSE),
71 fNSigPiMax(FLT_MAX),
ded1d842 72 fNSigPiMin(-FLT_MAX),
b4dba88d 73 fCutNSigK(kFALSE),
74 fNSigKMax(FLT_MAX),
ded1d842 75 fNSigKMin(-FLT_MAX),
b4dba88d 76 fCutNSigProton(kFALSE),
77 fNSigProtonMax(FLT_MAX),
ded1d842 78 fNSigProtonMin(-FLT_MAX),
b4dba88d 79 fCutFitRatio(kFALSE),
80 fFitRatioMax(FLT_MAX),
81 fFitRatioMin(FLT_MIN)
82{
83 //ctor
84}
85
86////-----------------------------------------------------------------------
87//AliStarTrackCuts::AliStarTrackCuts(const AliStarTrackCuts& that):
88// TNamed(),
89// fCutID(that.fCutID),
90// fIDMax(that.fIDMax),
91// fIDMin(that.fIDMin),
92// fCutCharge(that.fCutCharge),
93// fChargeMax(that.fChargeMax),
94// fChargeMin(that.fChargeMin),
95// fCutEta(that.fCutEta),
96// fEtaMax(that.fEtaMax),
97// fEtaMin(that.fEtaMin),
98// fCutPhi(that.fCutPhi),
99// fPhiMax(that.fPhiMax),
100// fPhiMin(that.fPhiMin),
101// fCutPt(that.fCutPt),
102// fPtMax(that.fPtMax),
103// fPtMin(that.fPtMin),
104// fCutDCA(that.fCutDCA),
105// fDCAMax(that.fDCAMax),
106// fDCAMin(that.fDCAMin),
107// fCutNHits(that.fCutNHits),
108// fNHitsMax(that.fNHitsMax),
109// fNHitsMin(that.fNHitsMin),
110// fCutNHitsFit(that.fCutNHitsFit),
111// fNHitsFitMax(that.fNHitsFitMax),
112// fNHitsFitMin(that.fNHitsFitMin),
113// fCutNHitsPoss(that.fCutNHitsPoss),
114// fNHitsPossMax(that.fNHitsPossMax),
115// fNHitsPossMin(that.fNHitsPossMin),
116// fCutNHitsDedx(that.fCutNHitsDedx),
117// fNHitsDedxMax(that.fNHitsDedxMax),
118// fNHitsDedxMin(that.fNHitsDedxMin),
119// fCutdEdx(that.fCutdEdx),
120// fdEdxMax(that.fdEdxMax),
121// fdEdxMin(that.fdEdxMin),
122// fCutNSigElect(that.fCutNSigElect),
123// fNSigElectMax(that.fNSigElectMax),
124// fNSigElectMin(that.fNSigElectMin),
125// fCutNSigPi(that.fCutNSigPi),
126// fNSigPiMax(that.fNSigPiMax),
127// fNSigPiMin(that.fNSigPiMin),
128// fCutNSigK(that.fCutNSigK),
129// fNSigKMax(that.fNSigKMax),
130// fNSigKMin(that.fNSigKMin),
131// fCutNSigProton(that.fCutNSigProton),
132// fNSigProtonMax(that.fNSigProtonMax),
133// fNSigProtonMin(that.fNSigProtonMin),
134// fCutFitRatio(that.fCutFitRatio),
135// fFitRatioMax(that.fFitRatioMax),
136// fFitRatioMin(that.fFitRatioMin)
137//{
138// //copy ctor
139//}
140//
141////-----------------------------------------------------------------------
142//AliStarTrackCuts& AliStarTrackCuts::operator=(const AliStarTrackCuts& that)
143//{
144// //assignment
145// fCutID=that.fCutID;
146// fIDMax=that.fIDMax;
147// fIDMin=that.fIDMin;
148// fCutCharge=that.fCutCharge;
149// fChargeMax=that.fChargeMax;
150// fChargeMin=that.fChargeMin;
151// fCutEta=that.fCutEta;
152// fEtaMax=that.fEtaMax;
153// fEtaMin=that.fEtaMin;
154// fCutPhi=that.fCutPhi;
155// fPhiMax=that.fPhiMax;
156// fPhiMin=that.fPhiMin;
157// fCutPt=that.fCutPt;
158// fPtMax=that.fPtMax;
159// fPtMin=that.fPtMin;
160// fCutDCA=that.fCutDCA;
161// fDCAMax=that.fDCAMax;
162// fDCAMin=that.fDCAMin;
163// fCutNHits=that.fCutNHits;
164// fNHitsMax=that.fNHitsMax;
165// fNHitsMin=that.fNHitsMin;
166// fCutNHitsFit=that.fCutNHitsFit;
167// fNHitsFitMax=that.fNHitsFitMax;
168// fNHitsFitMin=that.fNHitsFitMin;
169// fCutNHitsPoss=that.fCutNHitsPoss;
170// fNHitsPossMax=that.fNHitsPossMax;
171// fNHitsPossMin=that.fNHitsPossMin;
172// fCutNHitsDedx=that.fCutNHitsDedx;
173// fNHitsDedxMax=that.fNHitsDedxMax;
174// fNHitsDedxMin=that.fNHitsDedxMin;
175// fCutdEdx=that.fCutdEdx;
176// fdEdxMax=that.fdEdxMax;
177// fdEdxMin=that.fdEdxMin;
178// fCutNSigElect=that.fCutNSigElect;
179// fNSigElectMax=that.fNSigElectMax;
180// fNSigElectMin=that.fNSigElectMin;
181// fCutNSigPi=that.fCutNSigPi;
182// fNSigPiMax=that.fNSigPiMax;
183// fNSigPiMin=that.fNSigPiMin;
184// fCutNSigK=that.fCutNSigK;
185// fNSigKMax=that.fNSigKMax;
186// fNSigKMin=that.fNSigKMin;
187// fCutNSigProton=that.fCutNSigProton;
188// fNSigProtonMax=that.fNSigProtonMax;
189// fNSigProtonMin=that.fNSigProtonMin;
190// fCutFitRatio=that.fCutFitRatio;
191// fFitRatioMax=that.fFitRatioMax;
192// fFitRatioMin=that.fFitRatioMin;
193//
194// return *this;
195//}
196
197//-----------------------------------------------------------------------
198Bool_t AliStarTrackCuts::PassesCuts(const AliStarTrack *track) const
199{
200 //check is track passes cuts
0c4bf639 201 if(fCutID) {if (track->GetID() < fIDMin || track->GetID() > fIDMax ) return kFALSE;} //integer values: non inclusive bound!
ded1d842 202 if(fCutCharge) {if (track->GetCharge() < fChargeMin || track->GetCharge() > fChargeMax ) return kFALSE;}
0c4bf639 203 if(fCutEta) {if (track->GetEta() < fEtaMin || track->GetEta() >= fEtaMax ) return kFALSE;}
204 if(fCutPhi) {if (track->GetPhi() < fPhiMin || track->GetPhi() >= fPhiMax ) return kFALSE;}
205 if(fCutPt) {if (track->GetPt() < fPtMin || track->GetPt() >= fPtMax ) return kFALSE;}
206 if(fCutDCA) {if (track->GetDCA() < fDCAMin || track->GetDCA() >= fDCAMax ) return kFALSE;}
ded1d842 207 if(fCutNHits) {if (track->GetNHits() < fNHitsMin || track->GetNHits() > fNHitsMax ) return kFALSE;}
208 if(fCutNHitsFit) {if (track->GetNHitsFit() < fNHitsFitMin || track->GetNHitsFit() > fNHitsFitMax ) return kFALSE;}
209 if(fCutNHitsPoss) {if (track->GetNHitsPoss() < fNHitsPossMin || track->GetNHitsPoss() > fNHitsPossMax ) return kFALSE;}
210 if(fCutNHitsDedx) {if (track->GetNHitsDedx() < fNHitsDedxMin || track->GetNHitsDedx() > fNHitsDedxMax ) return kFALSE;}
0c4bf639 211 if(fCutdEdx) {if (track->GetdEdx() < fdEdxMin || track->GetdEdx() >= fdEdxMax ) return kFALSE;}
ded1d842 212 if(fCutNSigElect) {if (track->GetNSigElect() < fNSigElectMin || track->GetNSigElect() > fNSigElectMax ) return kFALSE;}
213 if(fCutNSigPi) {if (track->GetNSigPi() < fNSigPiMin || track->GetNSigPi() > fNSigPiMax ) return kFALSE;}
214 if(fCutNSigK) {if (track->GetNSigK() < fNSigKMin || track->GetNSigK() > fNSigKMax ) return kFALSE;}
215 if(fCutNSigProton) {if (track->GetNSigProton() < fNSigProtonMin || track->GetNSigProton() > fNSigProtonMax ) return kFALSE;}
b4dba88d 216 if(fCutFitRatio)
217 {
218 Int_t nhitsposs = track->GetNHitsPoss();
219 if (nhitsposs==0) return kFALSE;
220 Float_t ratio = Float_t(track->GetNHitsFit()) / nhitsposs;
221 if ( ratio < fFitRatioMin && ratio >= fFitRatioMax ) return kFALSE;
222 }
223
224 return kTRUE;
225}
226
227//-----------------------------------------------------------------------
228AliStarTrackCuts* AliStarTrackCuts::StandardCuts()
229{
230 //return a set of standard cuts, caller becomes owner
231 AliStarTrackCuts* cuts = new AliStarTrackCuts();
232 cuts->SetDCAMin(0.0); // cm
233 cuts->SetDCAMax(3.0);
234 cuts->SetPtMin(0.15); // GeV
cdfe7ebe 235 cuts->SetPtMax(8.0);
b4dba88d 236 cuts->SetEtaMin(-1.1);
237 cuts->SetEtaMax(1.1);
238 cuts->SetFitRatioMin(0.52); // Number of hits over number of hits possible
239 cuts->SetFitRatioMax(2.0); //should not exceed 1.0 but who knows...
240 cuts->SetNHitsPossMin(5); // Don't bother to fit tracks if # possible hits is too low
241 cuts->SetNHitsPossMax(100);
242 cuts->SetNHitsFitMin(15); // 15 is typical but sometimes goes as high as 25
243 cuts->SetNHitsFitMax(100); // 45 pad rows in the TPC and so anything bigger than 45+Silicon is infinite
244 return cuts;
245}