1 #ifndef ALIAODPARTICLEBASECUT_H
2 #define ALIAODPARTICLEBASECUT_H
3 //__________________________________________________________________________
4 ////////////////////////////////////////////////////////////////////////////
6 // class AliAODParticleBaseCut //
8 // Set of classes for performing cuts on particle properties of //
9 // AliAODParticleBaseCut is a base class for "base //
10 // particle cuts". Further, there are implemented classes that performs //
11 // cuts on the most common particle properties like pt, pseudo rapidity, //
12 // angles, anergy, etc. //
14 // There are also implemeted base cuts that perform logical operations //
15 // on results of base particle cuts: AliAODOrCut and AliAODAndCut. //
17 // Each base cut has a property, thet allows to distinguish them. //
18 // This functionality is used by the interface methods of Particle Cut //
19 // that allows easy update ranges. //
21 // more info: http://aliweb.cern.ch/people/skowron/analyzer/index.html //
22 // responsible: Piotr Skowronski@cern.ch //
24 ////////////////////////////////////////////////////////////////////////////
28 #include "AliVAODParticle.h"
31 class AliAODParticleBaseCut: public TObject
33 //This class defines the range of some property - pure virtual
34 //Property is coded by AliAODCutTypes type
40 //codes of particle properties
42 kAODPt, //Transverse momentum
46 kAODPx, //X coAnddinate of the momentum
47 kAODPy, //Y coAnddinate of the momentum
48 kAODPz, //Z coAnddinate of the momentum
51 kAODVx, // vertex X coAnddinate
52 kAODVy, // vertex Y coAnddinate
53 kAODVz, // vertex Z coAnddinate
54 kAODPid, // vertex Z coAnddinate
55 //_____________________________
60 AliAODParticleBaseCut(Double_t min = 0.0, Double_t max = 0.0,EAODCutProperty prop = kAODNone):
61 fProperty(prop),fMin(min),fMax(max){}
63 virtual ~AliAODParticleBaseCut(){}
65 virtual Bool_t Rejected(AliVAODParticle *p) const;
67 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
69 void SetMinimum(Double_t min){fMin = min;}
70 void SetMaximum(Double_t max){fMax = max;}
72 Double_t GetMinimum() const {return fMin;}
73 Double_t GetMaximum() const {return fMax;}
75 EAODCutProperty GetProperty() const {return fProperty;}
76 virtual void Print(const Option_t * opt = "") const;
79 virtual Double_t GetValue(AliVAODParticle *) const = 0;
81 EAODCutProperty fProperty; //property that this cut describes
82 Double_t fMin;//minimum value
83 Double_t fMax;//maximum value
86 void PrintProperty(void) const;
87 ClassDef(AliAODParticleBaseCut,1)
92 AliAODParticleBaseCut::Rejected(AliVAODParticle *p) const
94 //cjecks if particle property fits in range
95 if ( (GetValue(p) < fMin) || (GetValue(p) > fMax ) ) return kTRUE; //rejected
96 else return kFALSE; //accepted
98 /******************************************************************/
99 /******************************************************************/
100 /******************************************************************/
103 class AliAODMomentumCut: public AliAODParticleBaseCut
106 AliAODMomentumCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODP){}
107 virtual ~AliAODMomentumCut(){}
109 Double_t GetValue(AliVAODParticle * p)const{return p->P();}
110 ClassDef(AliAODMomentumCut,1)
113 class AliAODPtCut: public AliAODParticleBaseCut
116 AliAODPtCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPt){}
117 virtual ~AliAODPtCut(){}
119 Double_t GetValue(AliVAODParticle * p)const{return p->Pt();}
120 ClassDef(AliAODPtCut,1)
124 class AliAODEnergyCut: public AliAODParticleBaseCut
127 AliAODEnergyCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODE){}
128 virtual ~AliAODEnergyCut(){}
130 Double_t GetValue(AliVAODParticle * p)const {return p->E();}
131 ClassDef(AliAODEnergyCut,1)
134 class AliAODRapidityCut: public AliAODParticleBaseCut
137 AliAODRapidityCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODRapidity){}
138 virtual ~AliAODRapidityCut(){}
140 Double_t GetValue(AliVAODParticle * p)const{return p->Y();}
141 ClassDef(AliAODRapidityCut,1)
144 class AliAODPseudoRapidityCut: public AliAODParticleBaseCut
147 AliAODPseudoRapidityCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPseudoRapidity){}
148 virtual ~AliAODPseudoRapidityCut(){}
150 Double_t GetValue(AliVAODParticle * p)const{return p->Eta();}
151 ClassDef(AliAODPseudoRapidityCut,1)
154 class AliAODPxCut: public AliAODParticleBaseCut
157 AliAODPxCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPx){}
158 virtual ~AliAODPxCut(){}
160 Double_t GetValue(AliVAODParticle * p)const{return p->Px();}
161 ClassDef(AliAODPxCut,1)
164 class AliAODPyCut: public AliAODParticleBaseCut
167 AliAODPyCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPy){}
168 virtual ~AliAODPyCut(){}
170 Double_t GetValue(AliVAODParticle * p)const{return p->Py();}
171 ClassDef(AliAODPyCut,1)
175 class AliAODPzCut: public AliAODParticleBaseCut
178 AliAODPzCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPz){}
179 virtual ~AliAODPzCut(){}
181 Double_t GetValue(AliVAODParticle * p)const{return p->Pz();}
182 ClassDef(AliAODPzCut,1)
185 class AliAODPhiCut: public AliAODParticleBaseCut
188 AliAODPhiCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPhi){}
189 virtual ~AliAODPhiCut(){}
191 Double_t GetValue(AliVAODParticle * p)const{return p->Phi();}
192 ClassDef(AliAODPhiCut,1)
196 class AliAODThetaCut: public AliAODParticleBaseCut
199 AliAODThetaCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODTheta){}
200 virtual ~AliAODThetaCut(){}
202 Double_t GetValue(AliVAODParticle * p)const{return p->Theta();}
203 ClassDef(AliAODThetaCut,1)
207 class AliAODVxCut: public AliAODParticleBaseCut
209 //Cut of the X coAnddinate of the vertex position
211 AliAODVxCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODVx){}
212 virtual ~AliAODVxCut(){}
214 Double_t GetValue(AliVAODParticle * p)const{return p->Vx();} //retruns value of the vertex
215 ClassDef(AliAODVxCut,1)
220 class AliAODVyCut: public AliAODParticleBaseCut
222 //Cut of the X coAnddinate of the vertex position
224 AliAODVyCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODVy){}
225 virtual ~AliAODVyCut(){}
227 Double_t GetValue(AliVAODParticle * p)const{return p->Vy();} //retruns value of the vertex
228 ClassDef(AliAODVyCut,1)
232 class AliAODVzCut: public AliAODParticleBaseCut
234 //Cut of the X coAnddinate of the vertex position
236 AliAODVzCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODVz){}
237 virtual ~AliAODVzCut(){}
239 Double_t GetValue(AliVAODParticle * p)const{return p->Vz();} //retruns value of the vertex
241 ClassDef(AliAODVzCut,1)
245 class AliAODPIDCut: public AliAODParticleBaseCut
248 AliAODPIDCut():AliAODParticleBaseCut(0.0,0.0,kAODPid),fPID(0){}
249 AliAODPIDCut(Int_t pid, Double_t min = 0.0, Double_t max = 1.0):AliAODParticleBaseCut(min,max,kAODPid),fPID(pid){}
250 virtual ~AliAODPIDCut(){}
252 void SetPID(Int_t pid){fPID = pid;}
253 void Print(const Option_t * opt = "") const;
255 Double_t GetValue(AliVAODParticle * p)const{return p->GetProbability(fPID);}
256 Int_t fPID; //pid of particle that the pid is set
257 ClassDef(AliAODPIDCut,1)
259 //___________________________________________________
260 /////////////////////////////////////////////////////
262 // class AliAODLogicalOperCut //
264 // This cut is base class fAnd class that perfAndms //
265 // logical operations on cuts //
267 /////////////////////////////////////////////////////
268 class AliAODLogicalOperCut: public AliAODParticleBaseCut
271 AliAODLogicalOperCut();
272 AliAODLogicalOperCut(AliAODParticleBaseCut* first, AliAODParticleBaseCut* second);
273 virtual ~AliAODLogicalOperCut();
275 Double_t GetValue(AliVAODParticle * /*part*/) const {MayNotUse("GetValue");return 0.0;}
277 AliAODParticleBaseCut* fFirst; //second cut
278 AliAODParticleBaseCut* fSecond; //first cut
280 class AliAODDummyBaseCut: public AliAODParticleBaseCut
282 Double_t GetValue(AliVAODParticle * /*part*/) const {return 0.0;}
283 Bool_t Rejected(AliVAODParticle* /*part*/) const;
286 ClassDef(AliAODLogicalOperCut,1)
289 class AliAODOrCut: public AliAODLogicalOperCut
293 AliAODOrCut(AliAODParticleBaseCut* first, AliAODParticleBaseCut* second):AliAODLogicalOperCut(first,second){}
294 virtual ~AliAODOrCut(){}
295 Bool_t Rejected(AliVAODParticle *p) const;
296 ClassDef(AliAODOrCut,1)
299 class AliAODAndCut: public AliAODLogicalOperCut
303 AliAODAndCut(AliAODParticleBaseCut* first, AliAODParticleBaseCut* second):AliAODLogicalOperCut(first,second){}
304 virtual ~AliAODAndCut(){}
305 Bool_t Rejected(AliVAODParticle *p) const;
306 ClassDef(AliAODAndCut,1)