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*);
66 Bool_t IsEmpty() {return kFALSE;}
68 void AddBasePartCut(AliHbtBaseCut*);
70 Int_t GetPID() const { return fPID;}
71 void SetPID(Int_t pid){fPID=pid;}
72 void SetMomentumRange(Double_t min, Double_t max);
73 void SetPRange(Double_t min, Double_t max){SetMomentumRange(min,max);}
74 void SetPtRange(Double_t min, Double_t max);
75 void SetEnergyRange(Double_t min, Double_t max);
76 void SetRapidityRange(Double_t min, Double_t max);
77 void SetYRange(Double_t min, Double_t max){SetRapidityRange(min,max);}
78 void SetPseudoRapidityRange(Double_t min, Double_t max);
79 void SetPxRange(Double_t min, Double_t max);
80 void SetPyRange(Double_t min, Double_t max);
81 void SetPzRange(Double_t min, Double_t max);
82 void SetPhiRange(Double_t min, Double_t max);
83 void SetThetaRange(Double_t min, Double_t max);
84 void SetVxRange(Double_t min, Double_t max);
85 void SetVyRange(Double_t min, Double_t max);
86 void SetVzRange(Double_t min, Double_t max);
91 AliHbtBaseCut* FindCut(AliHBTCutProperty);
93 AliHbtBaseCut ** fCuts;//! Array with cuts
96 Int_t fPID; //particle PID - if=0 (rootino) all pids are accepted
99 static const Int_t fkgMaxCuts;
101 ClassDef(AliHBTParticleCut,1)
104 /******************************************************************/
105 /******************************************************************/
106 /******************************************************************/
108 class AliHBTEmptyParticleCut: public AliHBTParticleCut
110 //Empty - it passes possitively all particles - it means returns always False
111 //Class describing cut on pairs of particles
113 AliHBTEmptyParticleCut(){};
114 virtual ~AliHBTEmptyParticleCut(){};
116 Bool_t Pass(AliHBTParticle*){return kFALSE;} //accpept everything
117 Bool_t IsEmpty() {return kTRUE;}
119 ClassDef(AliHBTEmptyParticleCut,1)
123 /******************************************************************/
124 /******************************************************************/
125 /******************************************************************/
127 class AliHbtBaseCut: public TObject
129 //This class defines the range of some property - pure virtual
130 //Property is coded by AliHBTCutTypes type
134 AliHbtBaseCut(Double_t min = 0.0, Double_t max = 0.0,AliHBTCutProperty prop = kHbtNone):
135 fProperty(prop),fMin(min),fMax(max){}
137 virtual ~AliHbtBaseCut(){}
139 Bool_t Pass(AliHBTParticle *);
141 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
143 void SetMinimum(Double_t min){fMin = min;}
144 void SetMaximum(Double_t max){fMax = max;}
146 Double_t GetMinimum() const {return fMin;}
147 Double_t GetMaximum() const {return fMax;}
149 AliHBTCutProperty GetProperty() const {return fProperty;}
152 virtual Double_t GetValue(AliHBTParticle *) = 0;
154 AliHBTCutProperty fProperty;
158 void PrintProperty(void);
160 ClassDef(AliHbtBaseCut,1)
165 AliHbtBaseCut::Pass(AliHBTParticle *p)
167 if ( (GetValue(p) < fMin) || (GetValue(p) > fMax ) ) return kTRUE; //rejected
168 else return kFALSE; //accepted
170 /******************************************************************/
171 /******************************************************************/
172 /******************************************************************/
175 class AliHBTMomentumCut: public AliHbtBaseCut
178 AliHBTMomentumCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtP){}
179 virtual ~AliHBTMomentumCut(){}
181 Double_t GetValue(AliHBTParticle * p){return p->P();}
183 ClassDef(AliHBTMomentumCut,1)
188 class AliHBTPtCut: public AliHbtBaseCut
191 AliHBTPtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPt){}
192 virtual ~AliHBTPtCut(){}
194 Double_t GetValue(AliHBTParticle * p){return p->Pt();}
196 ClassDef(AliHBTPtCut,1)
201 class AliHBTEnergyCut: public AliHbtBaseCut
204 AliHBTEnergyCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtE){}
205 virtual ~AliHBTEnergyCut(){}
207 Double_t GetValue(AliHBTParticle * p){return p->Energy();}
209 ClassDef(AliHBTEnergyCut,1)
213 class AliHBTRapidityCut: public AliHbtBaseCut
216 AliHBTRapidityCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtRapidity){}
217 virtual ~AliHBTRapidityCut(){}
219 Double_t GetValue(AliHBTParticle * p){return p->Y();}
221 ClassDef(AliHBTRapidityCut,1)
225 class AliHBTPseudoRapidityCut: public AliHbtBaseCut
228 AliHBTPseudoRapidityCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPseudoRapidity){}
229 virtual ~AliHBTPseudoRapidityCut(){}
231 Double_t GetValue(AliHBTParticle * p){return p->Eta();}
233 ClassDef(AliHBTPseudoRapidityCut,1)
237 class AliHBTPxCut: public AliHbtBaseCut
240 AliHBTPxCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPx){}
241 virtual ~AliHBTPxCut(){}
243 Double_t GetValue(AliHBTParticle * p){return p->Px();}
245 ClassDef(AliHBTPxCut,1)
249 class AliHBTPyCut: public AliHbtBaseCut
252 AliHBTPyCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPy){}
253 virtual ~AliHBTPyCut(){}
255 Double_t GetValue(AliHBTParticle * p){return p->Py();}
257 ClassDef(AliHBTPyCut,1)
262 class AliHBTPzCut: public AliHbtBaseCut
265 AliHBTPzCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPz){}
266 virtual ~AliHBTPzCut(){}
268 Double_t GetValue(AliHBTParticle * p){return p->Pz();}
270 ClassDef(AliHBTPzCut,1)
274 class AliHBTPhiCut: public AliHbtBaseCut
277 AliHBTPhiCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtPhi){}
278 virtual ~AliHBTPhiCut(){}
280 Double_t GetValue(AliHBTParticle * p){return p->Phi();}
282 ClassDef(AliHBTPhiCut,1)
286 class AliHBTThetaCut: public AliHbtBaseCut
289 AliHBTThetaCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtTheta){}
290 virtual ~AliHBTThetaCut(){}
292 Double_t GetValue(AliHBTParticle * p){return p->Theta();}
294 ClassDef(AliHBTThetaCut,1)
298 class AliHBTVxCut: public AliHbtBaseCut
300 //Cut of the X coordinate of the vertex position
302 AliHBTVxCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtVx){}
303 virtual ~AliHBTVxCut(){}
305 Double_t GetValue(AliHBTParticle * p){return p->Vx();} //retruns value of the vertex
307 ClassDef(AliHBTVxCut,1)
312 class AliHBTVyCut: public AliHbtBaseCut
314 //Cut of the X coordinate of the vertex position
316 AliHBTVyCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtVy){}
317 virtual ~AliHBTVyCut(){}
319 Double_t GetValue(AliHBTParticle * p){return p->Vy();} //retruns value of the vertex
321 ClassDef(AliHBTVyCut,1)
325 class AliHBTVzCut: public AliHbtBaseCut
327 //Cut of the X coordinate of the vertex position
329 AliHBTVzCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBaseCut(min,max,kHbtVz){}
330 virtual ~AliHBTVzCut(){}
332 Double_t GetValue(AliHBTParticle * p){return p->Vz();} //retruns value of the vertex
334 ClassDef(AliHBTVzCut,1)