1 //Piotr Skowronski@cern.ch
2 //Classes for single particle cuts
3 //User should use only AliHBTParticleCut, eventually EmptyCut which passes all particles
4 //There is all interface for setting cuts on all particle properties
5 //The main method is Pass - which returns
6 // True in order to reject particle
7 // False in case it meets all the criteria of the given cut
9 //User should create (and also destroy) cuts himself
10 //and then pass them to the Analysis or Function by a proper method
12 //more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
15 #ifndef ALIHBTPARTICLECUT_H
16 #define ALIHBTPARTICLECUT_H
19 #include "AliHBTParticle.h"
22 class AliHBTEmptyParticleCut;
23 class AliHBTParticleCut;
29 /******************************************************************/
30 /******************************************************************/
31 /******************************************************************/
33 enum AliHBTCutProperty
35 //codes particle property
37 kHbtPt, //Transverse momentum
41 kHbtPx, //X coordinate of the momentum
42 kHbtPy, //Y coordinate of the momentum
43 kHbtPz, //Z coordinate of the momentum
46 kHbtVx, // vertex X coordinate
47 kHbtVy, // vertex Y coordinate
48 kHbtVz, // vertex Z coordinate
49 //_____________________________
53 /******************************************************************/
54 /******************************************************************/
55 /******************************************************************/
57 class AliHBTParticleCut: public TObject
59 //Class describing cut on pairs of particles
62 AliHBTParticleCut(const AliHBTParticleCut&);
63 virtual ~AliHBTParticleCut();
65 virtual Bool_t Pass(AliHBTParticle*);
67 void AddBasePartCut(AliHbtBaseCut*);
69 Int_t GetPID() const { return fPID;}
70 void SetPID(Int_t pid){fPID=pid;}
71 void SetMomentumRange(Double_t min, Double_t max);
72 void SetPRange(Double_t min, Double_t max){SetMomentumRange(min,max);}
73 void SetPtRange(Double_t min, Double_t max);
74 void SetEnergyRange(Double_t min, Double_t max);
75 void SetRapidityRange(Double_t min, Double_t max);
76 void SetYRange(Double_t min, Double_t max){SetRapidityRange(min,max);}
77 void SetPseudoRapidityRange(Double_t min, Double_t max);
78 void SetPxRange(Double_t min, Double_t max);
79 void SetPyRange(Double_t min, Double_t max);
80 void SetPzRange(Double_t min, Double_t max);
81 void SetPhiRange(Double_t min, Double_t max);
82 void SetThetaRange(Double_t min, Double_t max);
83 void SetVxRange(Double_t min, Double_t max);
84 void SetVyRange(Double_t min, Double_t max);
85 void SetVzRange(Double_t min, Double_t max);
90 AliHbtBaseCut* FindCut(AliHBTCutProperty);
92 AliHbtBaseCut ** fCuts;//! Array with cuts
95 Int_t fPID; //particle PID - if=0 (rootino) all pids are accepted
98 static const Int_t fkgMaxCuts;
100 ClassDef(AliHBTParticleCut,1)
103 /******************************************************************/
104 /******************************************************************/
105 /******************************************************************/
107 class AliHBTEmptyParticleCut: public AliHBTParticleCut
109 //Empty - it passes possitively all particles - it means returns always False
110 //Class describing cut on pairs of particles
112 AliHBTEmptyParticleCut(){};
113 virtual ~AliHBTEmptyParticleCut(){};
115 Bool_t Pass(AliHBTParticle*) {return kFALSE;} //accpept everything
117 ClassDef(AliHBTEmptyParticleCut,1)
121 /******************************************************************/
122 /******************************************************************/
123 /******************************************************************/
125 class AliHbtBaseCut: public TObject
127 //This class defines the range of some property - pure virtual
128 //Property is coded by AliHBTCutTypes type
132 AliHbtBaseCut(Double_t min = 0.0, Double_t max = 0.0,AliHBTCutProperty prop = kHbtNone):
133 fProperty(prop),fMin(min),fMax(max){}
135 virtual ~AliHbtBaseCut(){}
137 Bool_t Pass(AliHBTParticle *);
139 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
141 void SetMinimum(Double_t min){fMin = min;}
142 void SetMaximum(Double_t max){fMax = max;}
144 Double_t GetMinimum() const {return fMin;}
145 Double_t GetMaximum() const {return fMax;}
147 AliHBTCutProperty GetProperty() const {return fProperty;}
150 virtual Double_t GetValue(AliHBTParticle *) = 0;
152 AliHBTCutProperty fProperty;
156 void PrintProperty(void);
158 ClassDef(AliHbtBaseCut,1)
163 AliHbtBaseCut::Pass(AliHBTParticle *p)
165 if ( (GetValue(p) > fMin) && (GetValue(p) <fMax ) ) return kFALSE; //accepted
166 else return kTRUE; //rejected
168 /******************************************************************/
169 /******************************************************************/
170 /******************************************************************/
173 class AliHBTMomentumCut: public AliHbtBaseCut
176 AliHBTMomentumCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtP){}
177 virtual ~AliHBTMomentumCut(){}
179 Double_t GetValue(AliHBTParticle * p){return p->P();}
181 ClassDef(AliHBTMomentumCut,1)
186 class AliHBTPtCut: public AliHbtBaseCut
189 AliHBTPtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPt){}
190 virtual ~AliHBTPtCut(){}
192 Double_t GetValue(AliHBTParticle * p){return p->Pt();}
194 ClassDef(AliHBTPtCut,1)
199 class AliHBTEnergyCut: public AliHbtBaseCut
202 AliHBTEnergyCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtE){}
203 virtual ~AliHBTEnergyCut(){}
205 Double_t GetValue(AliHBTParticle * p){return p->Energy();}
207 ClassDef(AliHBTEnergyCut,1)
211 class AliHBTRapidityCut: public AliHbtBaseCut
214 AliHBTRapidityCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtRapidity){}
215 virtual ~AliHBTRapidityCut(){}
217 Double_t GetValue(AliHBTParticle * p){return p->Y();}
219 ClassDef(AliHBTRapidityCut,1)
223 class AliHBTPseudoRapidityCut: public AliHbtBaseCut
226 AliHBTPseudoRapidityCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPseudoRapidity){}
227 virtual ~AliHBTPseudoRapidityCut(){}
229 Double_t GetValue(AliHBTParticle * p){return p->Eta();}
231 ClassDef(AliHBTPseudoRapidityCut,1)
235 class AliHBTPxCut: public AliHbtBaseCut
238 AliHBTPxCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPx){}
239 virtual ~AliHBTPxCut(){}
241 Double_t GetValue(AliHBTParticle * p){return p->Px();}
243 ClassDef(AliHBTPxCut,1)
247 class AliHBTPyCut: public AliHbtBaseCut
250 AliHBTPyCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPy){}
251 virtual ~AliHBTPyCut(){}
253 Double_t GetValue(AliHBTParticle * p){return p->Py();}
255 ClassDef(AliHBTPyCut,1)
260 class AliHBTPzCut: public AliHbtBaseCut
263 AliHBTPzCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPz){}
264 virtual ~AliHBTPzCut(){}
266 Double_t GetValue(AliHBTParticle * p){return p->Pz();}
268 ClassDef(AliHBTPzCut,1)
272 class AliHBTPhiCut: public AliHbtBaseCut
275 AliHBTPhiCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPhi){}
276 virtual ~AliHBTPhiCut(){}
278 Double_t GetValue(AliHBTParticle * p){return p->Phi();}
280 ClassDef(AliHBTPhiCut,1)
284 class AliHBTThetaCut: public AliHbtBaseCut
287 AliHBTThetaCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtTheta){}
288 virtual ~AliHBTThetaCut(){}
290 Double_t GetValue(AliHBTParticle * p){return p->Theta();}
292 ClassDef(AliHBTThetaCut,1)
296 class AliHBTVxCut: public AliHbtBaseCut
298 //Cut of the X coordinate of the vertex position
300 AliHBTVxCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtVx){}
301 virtual ~AliHBTVxCut(){}
303 Double_t GetValue(AliHBTParticle * p){return p->Vx();} //retruns value of the vertex
305 ClassDef(AliHBTVxCut,1)
310 class AliHBTVyCut: public AliHbtBaseCut
312 //Cut of the X coordinate of the vertex position
314 AliHBTVyCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtVy){}
315 virtual ~AliHBTVyCut(){}
317 Double_t GetValue(AliHBTParticle * p){return p->Vy();} //retruns value of the vertex
319 ClassDef(AliHBTVyCut,1)
323 class AliHBTVzCut: public AliHbtBaseCut
325 //Cut of the X coordinate of the vertex position
327 AliHBTVzCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtVz){}
328 virtual ~AliHBTVzCut(){}
330 Double_t GetValue(AliHBTParticle * p){return p->Vz();} //retruns value of the vertex
332 ClassDef(AliHBTVzCut,1)