1 #ifndef ALIAODPAIRBASECUT_H
2 #define ALIAODPAIRBASECUT_H
5 #include "AliAODPair.h"
8 class AliAODPairBaseCut: public TObject
10 //This class defines the range of some property - pure virtual
11 //Property is coded by AliAODCutTypes type
15 enum EAODPairCutProperty
17 kHbtPairCutPropQInv, //Q invariant
20 kHbtPairCutPropQSideLCMS,
21 kHbtPairCutPropQOutLCMS,
22 kHbtPairCutPropQLongLCMS,
23 kHbtPairCutPropDeltaPhi,
24 kHbtPairCutPropDeltaTheta,
25 kHbtPairCutPropDeltaP,
26 kHbtPairCutPropDeltaPt,
27 kHbtPairCutPropAvSepar,
29 kHbtPairCutPropClOverlap,
30 kHbtPairCutPropPixelSepar,
34 AliAODPairBaseCut(Double_t min = 0.0, Double_t max = 0.0, EAODPairCutProperty prop= kHbtPairCutPropNone):
35 fMin(min),fMax(max),fProperty(prop){}
37 virtual ~AliAODPairBaseCut(){}
39 virtual Bool_t Rejected(AliAODPair* pair) const;
41 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
43 void SetMinimum(Double_t min){fMin = min;}
44 void SetMaximum(Double_t max){fMax = max;}
46 Double_t GetMinimum() const {return fMin;}
47 Double_t GetMaximum() const {return fMax;}
49 EAODPairCutProperty GetProperty() const {return fProperty;}
52 virtual Double_t GetValue(AliAODPair* pair) const = 0;
54 Double_t fMin; // Lower boundary of the range
55 Double_t fMax; // Upper boundary of the range
57 EAODPairCutProperty fProperty; // The property itself
59 ClassDef(AliAODPairBaseCut,1)
62 /******************************************************************/
64 inline Bool_t AliAODPairBaseCut::Rejected(AliAODPair* pair) const
66 //checks if pair proprty is in range
67 //null pointer check is made by AliAODPairCut, so here is unnecesary
69 Double_t value = GetValue(pair);
70 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
71 else return kTRUE; //rejected
73 /******************************************************************/
74 /******************************************************************/
75 /******************************************************************/
77 class AliAODQInvCut: public AliAODPairBaseCut
80 AliAODQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropQInv){}
81 virtual ~AliAODQInvCut(){}
83 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetQInv();}
85 ClassDef(AliAODQInvCut,1)
87 /******************************************************************/
89 class AliAODKtCut: public AliAODPairBaseCut {
91 AliAODKtCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKt){}
92 virtual ~AliAODKtCut(){}
94 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKt();}
96 ClassDef(AliAODKtCut,1)
98 /******************************************************************/
100 class AliAODKStarCut: public AliAODPairBaseCut
103 AliAODKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStar){}
104 virtual ~AliAODKStarCut(){}
106 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKStar();}
108 ClassDef(AliAODKStarCut,1)
110 /******************************************************************/
112 class AliAODQSideLCMSCut: public AliAODPairBaseCut
115 AliAODQSideLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
116 AliAODPairBaseCut(min,max,kHbtPairCutPropQSideLCMS){}
117 virtual ~AliAODQSideLCMSCut(){}
119 virtual Double_t GetValue(AliAODPair* pair) const
120 {return pair->GetQSideLCMS();}
122 ClassDef(AliAODQSideLCMSCut,1)
124 /******************************************************************/
127 class AliAODQOutLCMSCut: public AliAODPairBaseCut
130 AliAODQOutLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
131 AliAODPairBaseCut(min,max,kHbtPairCutPropQOutLCMS){}
132 virtual ~AliAODQOutLCMSCut(){}
134 virtual Double_t GetValue(AliAODPair* pair) const
135 {return pair->GetQOutLCMS();}
137 ClassDef(AliAODQOutLCMSCut,1)
139 /******************************************************************/
141 class AliAODQLongLCMSCut: public AliAODPairBaseCut
144 AliAODQLongLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
145 AliAODPairBaseCut(min,max,kHbtPairCutPropQLongLCMS){}
146 virtual ~AliAODQLongLCMSCut(){}
148 virtual Double_t GetValue(AliAODPair* pair) const
149 {return pair->GetQLongLCMS();}
151 ClassDef(AliAODQLongLCMSCut,1)
153 /******************************************************************/
155 class AliAODDeltaPhiCut: public AliAODPairBaseCut
158 AliAODDeltaPhiCut(Double_t min = 0.0, Double_t max = 0.0):
159 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPhi){}
160 virtual ~AliAODDeltaPhiCut(){}
162 virtual Double_t GetValue(AliAODPair* pair) const
163 {return TMath::Abs(pair->GetDeltaPhi());}
165 ClassDef(AliAODDeltaPhiCut,1)
167 /******************************************************************/
169 class AliAODDeltaThetaCut: public AliAODPairBaseCut
172 AliAODDeltaThetaCut(Double_t min = 0.0, Double_t max = 0.0):
173 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaTheta){}
174 virtual ~AliAODDeltaThetaCut(){}
176 virtual Double_t GetValue(AliAODPair* pair) const
177 {return TMath::Abs(pair->GetDeltaTheta());}
179 ClassDef(AliAODDeltaThetaCut,1)
181 /******************************************************************/
183 class AliAODCluterOverlapCut: public AliAODPairBaseCut
186 AliAODCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
187 AliAODPairBaseCut(min,max,kHbtPairCutPropClOverlap){}
188 virtual ~AliAODCluterOverlapCut(){}
191 virtual Double_t GetValue(AliAODPair* pair) const;
192 ClassDef(AliAODCluterOverlapCut,1)
194 /******************************************************************/
196 class AliAODAvSeparationCut: public AliAODPairBaseCut
199 AliAODAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
200 AliAODPairBaseCut(min,max,kHbtPairCutPropAvSepar){}
201 virtual ~AliAODAvSeparationCut(){}
204 virtual Double_t GetValue(AliAODPair* pair) const;
205 ClassDef(AliAODAvSeparationCut,1)
207 /******************************************************************/
209 class AliAODSeparationCut: public AliAODPairBaseCut
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(){}
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)
221 /******************************************************************/
223 class AliAODITSSeparationCut: public AliAODPairBaseCut
225 //Anti merging cut for the first layer of pixels
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;}
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)
237 /******************************************************************/
239 class AliAODOutSideSameSignCut: public AliAODPairBaseCut
242 AliAODOutSideSameSignCut(){}
243 virtual ~AliAODOutSideSameSignCut(){}
244 virtual Bool_t Rejected(AliAODPair *p) const;
246 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
247 ClassDef(AliAODOutSideSameSignCut,1)
249 /******************************************************************/
251 class AliAODOutSideDiffSignCut: public AliAODPairBaseCut
254 AliAODOutSideDiffSignCut(){}
255 virtual ~AliAODOutSideDiffSignCut(){}
256 virtual Bool_t Rejected(AliAODPair *p) const;
258 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
259 ClassDef(AliAODOutSideDiffSignCut,1)
261 /******************************************************************/
263 class AliAODLogicalOperPairCut: public AliAODPairBaseCut
266 AliAODLogicalOperPairCut();
267 AliAODLogicalOperPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second);
268 virtual ~AliAODLogicalOperPairCut();
270 Double_t GetValue(AliAODPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
272 AliAODPairBaseCut* fFirst; //second cut
273 AliAODPairBaseCut* fSecond; //first cut
275 class AliAODDummyBasePairCut: public AliAODPairBaseCut
277 Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
278 Bool_t Rejected(AliAODPair* /*pair*/) const;
281 ClassDef(AliAODLogicalOperPairCut,1)
283 /******************************************************************/
285 class AliAODOrPairCut: public AliAODLogicalOperPairCut
289 AliAODOrPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
290 virtual ~AliAODOrPairCut(){}
291 Bool_t Rejected(AliAODPair *p) const;
292 ClassDef(AliAODOrPairCut,1)
294 /******************************************************************/
296 class AliAODAndPairCut: public AliAODLogicalOperPairCut
300 AliAODAndPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
301 virtual ~AliAODAndPairCut(){}
302 Bool_t Rejected(AliAODPair *p) const;
303 ClassDef(AliAODAndPairCut,1)