]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ANALYSIS/AliAODPairBaseCut.h
Base Pair Cuts moved to the separate file. Property eneum defined within namespace...
[u/mrichter/AliRoot.git] / ANALYSIS / AliAODPairBaseCut.h
1 #ifndef ALIAODPAIRBASECUT_H
2 #define ALIAODPAIRBASECUT_H
3
4 #include <TNamed.h> 
5 #include "AliAODPair.h"
6
7
8 class AliAODPairBaseCut: public TObject
9 {
10   //This class defines the range of some property - pure virtual
11   //Property is coded by AliAODCutTypes type
12    
13  public:
14
15   enum EAODPairCutProperty
16     {
17       kHbtPairCutPropQInv, //Q invariant
18       kHbtPairCutPropKt,
19       kHbtPairCutPropKStar,
20       kHbtPairCutPropQSideLCMS,
21       kHbtPairCutPropQOutLCMS,
22       kHbtPairCutPropQLongLCMS,
23       kHbtPairCutPropDeltaPhi,
24       kHbtPairCutPropDeltaTheta,
25       kHbtPairCutPropDeltaP,
26       kHbtPairCutPropDeltaPt,
27       kHbtPairCutPropAvSepar,
28       kHbtPairCutPropSepar,
29       kHbtPairCutPropClOverlap,
30       kHbtPairCutPropPixelSepar,
31       kHbtPairCutPropNone
32     };
33
34   AliAODPairBaseCut(Double_t min = 0.0, Double_t max = 0.0, EAODPairCutProperty prop= kHbtPairCutPropNone):
35     fMin(min),fMax(max),fProperty(prop){}
36   
37   virtual   ~AliAODPairBaseCut(){}
38      
39   virtual Bool_t    Rejected(AliAODPair* pair) const;
40   
41   void      SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
42   
43   void      SetMinimum(Double_t min){fMin = min;}
44   void      SetMaximum(Double_t max){fMax = max;}
45   
46   Double_t  GetMinimum() const {return fMin;}
47   Double_t  GetMaximum() const {return fMax;}
48   
49   EAODPairCutProperty GetProperty() const {return fProperty;}
50   
51  protected:
52   virtual Double_t  GetValue(AliAODPair* pair) const = 0;
53   
54   Double_t fMin; // Lower boundary of the range
55   Double_t fMax; // Upper boundary of the range
56   
57   EAODPairCutProperty fProperty; // The property itself
58   
59   ClassDef(AliAODPairBaseCut,1)
60  
61  };
62 /******************************************************************/
63
64 inline Bool_t AliAODPairBaseCut::Rejected(AliAODPair* pair) const
65 {
66   //checks if pair proprty is in range
67   //null pointer check is made by AliAODPairCut, so here is unnecesary
68   
69   Double_t value = GetValue(pair);
70   if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
71   else return kTRUE; //rejected
72 }
73 /******************************************************************/
74 /******************************************************************/
75 /******************************************************************/
76
77 class AliAODQInvCut: public AliAODPairBaseCut
78 {
79  public:
80   AliAODQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropQInv){}
81   virtual ~AliAODQInvCut(){}
82  protected:
83   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetQInv();}
84   
85   ClassDef(AliAODQInvCut,1)
86  };
87 /******************************************************************/
88
89 class AliAODKtCut: public AliAODPairBaseCut {
90  public:
91   AliAODKtCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKt){}
92   virtual ~AliAODKtCut(){}
93  protected:
94   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetKt();}
95
96   ClassDef(AliAODKtCut,1)
97  };
98 /******************************************************************/
99
100 class AliAODKStarCut: public AliAODPairBaseCut
101 {
102  public:
103   AliAODKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStar){}
104   virtual ~AliAODKStarCut(){}
105  protected:
106   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetKStar();}
107
108   ClassDef(AliAODKStarCut,1)
109 };
110 /******************************************************************/
111
112 class AliAODQSideLCMSCut: public AliAODPairBaseCut
113 {
114  public:
115   AliAODQSideLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
116     AliAODPairBaseCut(min,max,kHbtPairCutPropQSideLCMS){}
117   virtual ~AliAODQSideLCMSCut(){}
118  protected:
119   virtual Double_t  GetValue(AliAODPair* pair) const 
120     {return pair->GetQSideLCMS();}
121
122   ClassDef(AliAODQSideLCMSCut,1)
123 };
124 /******************************************************************/
125
126
127 class AliAODQOutLCMSCut: public AliAODPairBaseCut
128 {
129  public:
130   AliAODQOutLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
131     AliAODPairBaseCut(min,max,kHbtPairCutPropQOutLCMS){}
132   virtual ~AliAODQOutLCMSCut(){}
133  protected:
134   virtual Double_t  GetValue(AliAODPair* pair) const 
135     {return pair->GetQOutLCMS();}
136   
137   ClassDef(AliAODQOutLCMSCut,1)
138 };
139 /******************************************************************/
140
141 class AliAODQLongLCMSCut: public AliAODPairBaseCut
142 {
143  public:
144   AliAODQLongLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
145     AliAODPairBaseCut(min,max,kHbtPairCutPropQLongLCMS){}
146   virtual ~AliAODQLongLCMSCut(){}
147  protected:
148   virtual Double_t  GetValue(AliAODPair* pair) const 
149     {return pair->GetQLongLCMS();}
150
151   ClassDef(AliAODQLongLCMSCut,1)
152 };
153 /******************************************************************/
154
155 class AliAODDeltaPhiCut: public AliAODPairBaseCut
156 {
157  public:
158   AliAODDeltaPhiCut(Double_t min = 0.0, Double_t max = 0.0):
159     AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPhi){}
160   virtual ~AliAODDeltaPhiCut(){}
161  protected:
162   virtual Double_t  GetValue(AliAODPair* pair) const 
163     {return TMath::Abs(pair->GetDeltaPhi());}
164
165   ClassDef(AliAODDeltaPhiCut,1)
166 };
167 /******************************************************************/
168
169 class AliAODDeltaThetaCut: public AliAODPairBaseCut
170 {
171  public:
172   AliAODDeltaThetaCut(Double_t min = 0.0, Double_t max = 0.0):
173     AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaTheta){}
174   virtual ~AliAODDeltaThetaCut(){}
175  protected:
176   virtual Double_t  GetValue(AliAODPair* pair) const 
177     {return TMath::Abs(pair->GetDeltaTheta());}
178
179   ClassDef(AliAODDeltaThetaCut,1)
180 };
181 /******************************************************************/
182
183 class AliAODCluterOverlapCut: public AliAODPairBaseCut
184 {
185  public:
186   AliAODCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
187     AliAODPairBaseCut(min,max,kHbtPairCutPropClOverlap){}
188   virtual ~AliAODCluterOverlapCut(){}
189
190  protected:
191   virtual Double_t  GetValue(AliAODPair* pair) const;
192   ClassDef(AliAODCluterOverlapCut,1)
193 };
194 /******************************************************************/
195   
196 class AliAODAvSeparationCut: public AliAODPairBaseCut
197 {
198  public:
199   AliAODAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
200     AliAODPairBaseCut(min,max,kHbtPairCutPropAvSepar){}
201   virtual ~AliAODAvSeparationCut(){}
202   
203  protected:
204   virtual Double_t  GetValue(AliAODPair* pair) const;
205   ClassDef(AliAODAvSeparationCut,1)
206 };
207 /******************************************************************/
208   
209 class AliAODSeparationCut: public AliAODPairBaseCut
210 {
211  public:
212   AliAODSeparationCut(Double_t min = 0.0, Double_t max = 1e5, Int_t point = 0):
213     AliAODPairBaseCut(min,max,kHbtPairCutPropSepar),fPoint(point){}
214   virtual ~AliAODSeparationCut(){}
215   
216  protected:
217   Int_t fPoint;//index of the point that distance should be measured
218   virtual Double_t  GetValue(AliAODPair* pair) const;
219   ClassDef(AliAODSeparationCut,1)
220 };
221 /******************************************************************/
222   
223 class AliAODITSSeparationCut: public AliAODPairBaseCut
224 {
225 //Anti merging cut for the first layer of pixels
226  public:
227   AliAODITSSeparationCut(Int_t layer = 0, Double_t deltarphi = 0.01, Double_t deltaz = 0.08):
228     AliAODPairBaseCut(deltarphi,deltaz,kHbtPairCutPropPixelSepar),fLayer(layer){}
229   virtual ~AliAODITSSeparationCut(){}
230   Bool_t   Rejected(AliAODPair* pair) const;
231   Int_t    GetLayer() const {return fLayer;}
232  protected:
233   Int_t fLayer;//index of the layer that distance should be measured 0: 1st pixels
234   virtual Double_t  GetValue(AliAODPair* /*pair*/) const {return 0.0;}//not used
235   ClassDef(AliAODITSSeparationCut,1)
236 };
237 /******************************************************************/
238
239 class AliAODOutSideSameSignCut: public AliAODPairBaseCut
240 {
241  public:
242   AliAODOutSideSameSignCut(){}
243   virtual ~AliAODOutSideSameSignCut(){}
244   virtual Bool_t Rejected(AliAODPair *p) const;
245  protected:
246   virtual Double_t  GetValue(AliAODPair* /*pair*/) const {return 0.0;}
247   ClassDef(AliAODOutSideSameSignCut,1)
248 };
249 /******************************************************************/
250
251 class AliAODOutSideDiffSignCut: public AliAODPairBaseCut
252 {
253  public:
254   AliAODOutSideDiffSignCut(){}
255   virtual ~AliAODOutSideDiffSignCut(){}
256   virtual Bool_t Rejected(AliAODPair *p) const;
257  protected:
258   virtual Double_t  GetValue(AliAODPair* /*pair*/) const {return 0.0;}
259   ClassDef(AliAODOutSideDiffSignCut,1)
260 };
261 /******************************************************************/
262
263 class AliAODLogicalOperPairCut:  public AliAODPairBaseCut
264  {
265    public:
266      AliAODLogicalOperPairCut();
267      AliAODLogicalOperPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second);
268      virtual   ~AliAODLogicalOperPairCut();
269    protected:
270      Double_t  GetValue(AliAODPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
271
272      AliAODPairBaseCut* fFirst;   //second cut
273      AliAODPairBaseCut* fSecond;  //first cut
274    private:
275     class  AliAODDummyBasePairCut: public AliAODPairBaseCut
276      {
277        Double_t  GetValue(AliAODPair* /*pair*/) const {return 0.0;}
278        Bool_t    Rejected(AliAODPair* /*pair*/) const;
279      };
280
281     ClassDef(AliAODLogicalOperPairCut,1)
282  };
283 /******************************************************************/
284
285 class AliAODOrPairCut: public AliAODLogicalOperPairCut
286 {
287    public:
288      AliAODOrPairCut(){}
289      AliAODOrPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
290      virtual   ~AliAODOrPairCut(){}
291      Bool_t    Rejected(AliAODPair *p) const;
292      ClassDef(AliAODOrPairCut,1)
293 };
294 /******************************************************************/
295
296 class AliAODAndPairCut: public AliAODLogicalOperPairCut
297 {
298    public:
299      AliAODAndPairCut(){}
300      AliAODAndPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
301      virtual   ~AliAODAndPairCut(){}
302      Bool_t    Rejected(AliAODPair *p) const;
303      ClassDef(AliAODAndPairCut,1)
304 };
305
306 #endif