1 #ifndef ALIAODPARTICLECUT_H
2 #define ALIAODPARTICLECUT_H
3 //__________________________________________________________________________
4 ////////////////////////////////////////////////////////////////////////////
6 // class AliAODParticleCut //
8 // Classes for single particle cuts //
9 // User should use only AliAODParticleCut, eventually //
10 // EmptyCut which passes all particles //
11 // There is all interface for setting cuts on all particle properties //
12 // The main method is Pass - which returns //
13 // True to reject particle //
14 // False in case it meets all the criteria of the given cut //
16 // User should create (and also destroy) cuts himself //
17 // and then pass them to the Analysis And Function by a proper method //
20 // more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html //
21 // responsible: Piotr Skowronski@cern.ch //
23 ////////////////////////////////////////////////////////////////////////////
27 #include "AliVAODParticle.h"
30 class AliAODParticleEmptyCut;
31 class AliAODParticleCut;
32 class AliAODParticleBaseCut;
35 /******************************************************************/
36 /******************************************************************/
37 /******************************************************************/
39 enum AliAODCutProperty
41 //codes particle property
43 kAODPt, //Transverse momentum
47 kAODPx, //X coAnddinate of the momentum
48 kAODPy, //Y coAnddinate of the momentum
49 kAODPz, //Z coAnddinate of the momentum
52 kAODVx, // vertex X coAnddinate
53 kAODVy, // vertex Y coAnddinate
54 kAODVz, // vertex Z coAnddinate
55 kAODPid, // vertex Z coAnddinate
56 //_____________________________
60 /******************************************************************/
61 /******************************************************************/
62 /******************************************************************/
64 class AliAODParticleCut: public TObject
66 //Class describing cut on particle
69 AliAODParticleCut(const AliAODParticleCut& in);
70 virtual ~AliAODParticleCut();
71 AliAODParticleCut& operator = (const AliAODParticleCut& in);
73 virtual Bool_t Pass(AliVAODParticle* p) const;
74 Bool_t IsEmpty() const {return kFALSE;}
76 void AddBasePartCut(AliAODParticleBaseCut* basecut);
78 Int_t GetPID() const { return fPID;}
79 void SetPID(Int_t pid){fPID=pid;}
80 void SetMomentumRange(Double_t min, Double_t max);
81 void SetPRange(Double_t min, Double_t max){SetMomentumRange(min,max);}
82 void SetPtRange(Double_t min, Double_t max);
83 void SetEnergyRange(Double_t min, Double_t max);
84 void SetRapidityRange(Double_t min, Double_t max);
85 void SetYRange(Double_t min, Double_t max){SetRapidityRange(min,max);}
86 void SetPseudoRapidityRange(Double_t min, Double_t max);
87 void SetPxRange(Double_t min, Double_t max);
88 void SetPyRange(Double_t min, Double_t max);
89 void SetPzRange(Double_t min, Double_t max);
90 void SetPhiRange(Double_t min, Double_t max);
91 void SetThetaRange(Double_t min, Double_t max);
92 void SetVxRange(Double_t min, Double_t max);
93 void SetVyRange(Double_t min, Double_t max);
94 void SetVzRange(Double_t min, Double_t max);
96 void Print(void) const;
99 AliAODParticleBaseCut* FindCut(AliAODCutProperty property);
101 AliAODParticleBaseCut ** fCuts;//! Array with cuts
102 Int_t fNCuts; //number of base cuts stored in fCuts
104 Int_t fPID; //particle PID - if=0 (rootino) all pids are accepted
107 static const Int_t fgkMaxCuts; //Size of the fCuts array
109 ClassDef(AliAODParticleCut,1)
111 /******************************************************************/
112 /******************************************************************/
113 /******************************************************************/
115 class AliAODParticleEmptyCut: public AliAODParticleCut
117 //Empty - it passes possitively all particles - it means returns always False
118 //Class describing cut on particles
120 AliAODParticleEmptyCut(){};
121 virtual ~AliAODParticleEmptyCut(){};
123 Bool_t Pass(AliVAODParticle*) const {return kFALSE;} //accept everything
124 Bool_t IsEmpty() const {return kTRUE;}
126 ClassDef(AliAODParticleEmptyCut,1)
130 /******************************************************************/
131 /******************************************************************/
132 /******************************************************************/
134 class AliAODParticleBaseCut: public TObject
136 //This class defines the range of some property - pure virtual
137 //Property is coded by AliAODCutTypes type
141 AliAODParticleBaseCut(Double_t min = 0.0, Double_t max = 0.0,AliAODCutProperty prop = kAODNone):
142 fProperty(prop),fMin(min),fMax(max){}
144 virtual ~AliAODParticleBaseCut(){}
146 virtual Bool_t Pass(AliVAODParticle *p) const;
148 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
150 void SetMinimum(Double_t min){fMin = min;}
151 void SetMaximum(Double_t max){fMax = max;}
153 Double_t GetMinimum() const {return fMin;}
154 Double_t GetMaximum() const {return fMax;}
156 AliAODCutProperty GetProperty() const {return fProperty;}
157 virtual void Print(void) const;
160 virtual Double_t GetValue(AliVAODParticle *) const = 0;
162 AliAODCutProperty fProperty; //property that this cut describes
163 Double_t fMin;//minimum value
164 Double_t fMax;//maximum value
167 void PrintProperty(void) const;
168 ClassDef(AliAODParticleBaseCut,1)
173 AliAODParticleBaseCut::Pass(AliVAODParticle *p) const
175 //cjecks if particle property fits in range
176 if ( (GetValue(p) < fMin) || (GetValue(p) > fMax ) ) return kTRUE; //rejected
177 else return kFALSE; //accepted
179 /******************************************************************/
180 /******************************************************************/
181 /******************************************************************/
184 class AliAODMomentumCut: public AliAODParticleBaseCut
187 AliAODMomentumCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODP){}
188 virtual ~AliAODMomentumCut(){}
190 Double_t GetValue(AliVAODParticle * p)const{return p->P();}
191 ClassDef(AliAODMomentumCut,1)
194 class AliAODPtCut: public AliAODParticleBaseCut
197 AliAODPtCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPt){}
198 virtual ~AliAODPtCut(){}
200 Double_t GetValue(AliVAODParticle * p)const{return p->Pt();}
201 ClassDef(AliAODPtCut,1)
205 class AliAODEnergyCut: public AliAODParticleBaseCut
208 AliAODEnergyCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODE){}
209 virtual ~AliAODEnergyCut(){}
211 Double_t GetValue(AliVAODParticle * p)const {return p->E();}
212 ClassDef(AliAODEnergyCut,1)
215 class AliAODRapidityCut: public AliAODParticleBaseCut
218 AliAODRapidityCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODRapidity){}
219 virtual ~AliAODRapidityCut(){}
221 Double_t GetValue(AliVAODParticle * p)const{return p->Y();}
222 ClassDef(AliAODRapidityCut,1)
225 class AliAODPseudoRapidityCut: public AliAODParticleBaseCut
228 AliAODPseudoRapidityCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPseudoRapidity){}
229 virtual ~AliAODPseudoRapidityCut(){}
231 Double_t GetValue(AliVAODParticle * p)const{return p->Eta();}
232 ClassDef(AliAODPseudoRapidityCut,1)
235 class AliAODPxCut: public AliAODParticleBaseCut
238 AliAODPxCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPx){}
239 virtual ~AliAODPxCut(){}
241 Double_t GetValue(AliVAODParticle * p)const{return p->Px();}
242 ClassDef(AliAODPxCut,1)
245 class AliAODPyCut: public AliAODParticleBaseCut
248 AliAODPyCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPy){}
249 virtual ~AliAODPyCut(){}
251 Double_t GetValue(AliVAODParticle * p)const{return p->Py();}
252 ClassDef(AliAODPyCut,1)
256 class AliAODPzCut: public AliAODParticleBaseCut
259 AliAODPzCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPz){}
260 virtual ~AliAODPzCut(){}
262 Double_t GetValue(AliVAODParticle * p)const{return p->Pz();}
263 ClassDef(AliAODPzCut,1)
266 class AliAODPhiCut: public AliAODParticleBaseCut
269 AliAODPhiCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODPhi){}
270 virtual ~AliAODPhiCut(){}
272 Double_t GetValue(AliVAODParticle * p)const{return p->Phi();}
273 ClassDef(AliAODPhiCut,1)
277 class AliAODThetaCut: public AliAODParticleBaseCut
280 AliAODThetaCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODTheta){}
281 virtual ~AliAODThetaCut(){}
283 Double_t GetValue(AliVAODParticle * p)const{return p->Theta();}
284 ClassDef(AliAODThetaCut,1)
288 class AliAODVxCut: public AliAODParticleBaseCut
290 //Cut of the X coAnddinate of the vertex position
292 AliAODVxCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODVx){}
293 virtual ~AliAODVxCut(){}
295 Double_t GetValue(AliVAODParticle * p)const{return p->Vx();} //retruns value of the vertex
296 ClassDef(AliAODVxCut,1)
301 class AliAODVyCut: public AliAODParticleBaseCut
303 //Cut of the X coAnddinate of the vertex position
305 AliAODVyCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODVy){}
306 virtual ~AliAODVyCut(){}
308 Double_t GetValue(AliVAODParticle * p)const{return p->Vy();} //retruns value of the vertex
309 ClassDef(AliAODVyCut,1)
313 class AliAODVzCut: public AliAODParticleBaseCut
315 //Cut of the X coAnddinate of the vertex position
317 AliAODVzCut(Double_t min = 0.0, Double_t max = 0.0):AliAODParticleBaseCut(min,max,kAODVz){}
318 virtual ~AliAODVzCut(){}
320 Double_t GetValue(AliVAODParticle * p)const{return p->Vz();} //retruns value of the vertex
322 ClassDef(AliAODVzCut,1)
326 class AliAODPIDCut: public AliAODParticleBaseCut
329 AliAODPIDCut():AliAODParticleBaseCut(0.0,0.0,kAODPid),fPID(0){}
330 AliAODPIDCut(Int_t pid, Double_t min = 0.0, Double_t max = 1.0):AliAODParticleBaseCut(min,max,kAODPid),fPID(pid){}
331 virtual ~AliAODPIDCut(){}
333 void SetPID(Int_t pid){fPID = pid;}
334 void Print(void) const;
336 Double_t GetValue(AliVAODParticle * p)const{return p->GetProbability(fPID);}
337 Int_t fPID; //pid of particle that the pid is set
338 ClassDef(AliAODPIDCut,1)
340 //___________________________________________________
341 /////////////////////////////////////////////////////
343 // class AliAODLogicalOperCut //
345 // This cut is base class fAnd class that perfAndms //
346 // logical operations on cuts //
348 /////////////////////////////////////////////////////
349 class AliAODLogicalOperCut: public AliAODParticleBaseCut
352 AliAODLogicalOperCut();
353 AliAODLogicalOperCut(AliAODParticleBaseCut* first, AliAODParticleBaseCut* second);
354 virtual ~AliAODLogicalOperCut();
356 Double_t GetValue(AliVAODParticle * /*part*/) const {MayNotUse("GetValue");return 0.0;}
358 AliAODParticleBaseCut* fFirst; //second cut
359 AliAODParticleBaseCut* fSecond; //first cut
361 class AliAODDummyBaseCut: public AliAODParticleBaseCut
363 Double_t GetValue(AliVAODParticle * /*part*/) const {return 0.0;}
364 Bool_t Pass(AliVAODParticle* /*part*/) const;
367 ClassDef(AliAODLogicalOperCut,1)
370 class AliAODOrCut: public AliAODLogicalOperCut
374 AliAODOrCut(AliAODParticleBaseCut* first, AliAODParticleBaseCut* second):AliAODLogicalOperCut(first,second){}
375 virtual ~AliAODOrCut(){}
376 Bool_t Pass(AliVAODParticle *p) const;
377 ClassDef(AliAODOrCut,1)
380 class AliAODAndCut: public AliAODLogicalOperCut
384 AliAODAndCut(AliAODParticleBaseCut* first, AliAODParticleBaseCut* second):AliAODLogicalOperCut(first,second){}
385 virtual ~AliAODAndCut(){}
386 Bool_t Pass(AliVAODParticle *p) const;
387 ClassDef(AliAODAndCut,1)