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 kHbtPairCutPropDeltaE,
26 kHbtPairCutPropDeltaP,//scalar difference
27 kHbtPairCutPropDeltaPvector,//legth of the momenta difference vector
28 kHbtPairCutPropDeltaPt,
29 kHbtPairCutPropAvSepar,
31 kHbtPairCutPropClOverlap,
32 kHbtPairCutPropPixelSepar,
36 AliAODPairBaseCut(Double_t min = 0.0, Double_t max = 0.0, EAODPairCutProperty prop= kHbtPairCutPropNone):
37 fMin(min),fMax(max),fProperty(prop){}
39 virtual ~AliAODPairBaseCut(){}
41 virtual Bool_t Rejected(AliAODPair* pair) const;
43 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
45 void SetMinimum(Double_t min){fMin = min;}
46 void SetMaximum(Double_t max){fMax = max;}
48 Double_t GetMinimum() const {return fMin;}
49 Double_t GetMaximum() const {return fMax;}
51 EAODPairCutProperty GetProperty() const {return fProperty;}
54 virtual Double_t GetValue(AliAODPair* pair) const = 0;
56 Double_t fMin; // Lower boundary of the range
57 Double_t fMax; // Upper boundary of the range
59 EAODPairCutProperty fProperty; // The property itself
61 ClassDef(AliAODPairBaseCut,1)
64 /******************************************************************/
66 inline Bool_t AliAODPairBaseCut::Rejected(AliAODPair* pair) const
68 //checks if pair proprty is in range
69 //null pointer check is made by AliAODPairCut, so here is unnecesary
71 Double_t value = GetValue(pair);
72 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
73 else return kTRUE; //rejected
75 /******************************************************************/
76 /******************************************************************/
77 /******************************************************************/
79 class AliAODQInvCut: public AliAODPairBaseCut
82 AliAODQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropQInv){}
83 virtual ~AliAODQInvCut(){}
85 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetQInv();}
87 ClassDef(AliAODQInvCut,1)
89 /******************************************************************/
91 class AliAODKtCut: public AliAODPairBaseCut {
93 AliAODKtCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKt){}
94 virtual ~AliAODKtCut(){}
96 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKt();}
98 ClassDef(AliAODKtCut,1)
100 /******************************************************************/
102 class AliAODKStarCut: public AliAODPairBaseCut
105 AliAODKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStar){}
106 virtual ~AliAODKStarCut(){}
108 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKStar();}
110 ClassDef(AliAODKStarCut,1)
112 /******************************************************************/
114 class AliAODQSideLCMSCut: public AliAODPairBaseCut
117 AliAODQSideLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
118 AliAODPairBaseCut(min,max,kHbtPairCutPropQSideLCMS){}
119 virtual ~AliAODQSideLCMSCut(){}
121 virtual Double_t GetValue(AliAODPair* pair) const
122 {return pair->GetQSideLCMS();}
124 ClassDef(AliAODQSideLCMSCut,1)
126 /******************************************************************/
129 class AliAODQOutLCMSCut: public AliAODPairBaseCut
132 AliAODQOutLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
133 AliAODPairBaseCut(min,max,kHbtPairCutPropQOutLCMS){}
134 virtual ~AliAODQOutLCMSCut(){}
136 virtual Double_t GetValue(AliAODPair* pair) const
137 {return pair->GetQOutLCMS();}
139 ClassDef(AliAODQOutLCMSCut,1)
141 /******************************************************************/
143 class AliAODQLongLCMSCut: public AliAODPairBaseCut
146 AliAODQLongLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
147 AliAODPairBaseCut(min,max,kHbtPairCutPropQLongLCMS){}
148 virtual ~AliAODQLongLCMSCut(){}
150 virtual Double_t GetValue(AliAODPair* pair) const
151 {return pair->GetQLongLCMS();}
153 ClassDef(AliAODQLongLCMSCut,1)
155 /******************************************************************/
157 class AliAODDeltaECut: public AliAODPairBaseCut
160 AliAODDeltaECut(Double_t min = 0.0, Double_t max = 0.0):
161 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaE){}
162 virtual ~AliAODDeltaECut(){}
164 virtual Double_t GetValue(AliAODPair* pair) const
165 {return pair->GetDeltaE();}
167 ClassDef(AliAODDeltaECut,1)
169 /******************************************************************/
171 class AliAODDeltaPCut: public AliAODPairBaseCut
174 AliAODDeltaPCut(Double_t min = 0.0, Double_t max = 0.0):
175 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaP){}
176 virtual ~AliAODDeltaPCut(){}
178 virtual Double_t GetValue(AliAODPair* pair) const
179 {return pair->GetDeltaP();}
181 ClassDef(AliAODDeltaPCut,1)
183 /******************************************************************/
185 class AliAODDeltaPvectorCut: public AliAODPairBaseCut
188 AliAODDeltaPvectorCut(Double_t min = 0.0, Double_t max = 0.0):
189 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPvector){}
190 virtual ~AliAODDeltaPvectorCut(){}
192 virtual Double_t GetValue(AliAODPair* pair) const
193 {return pair->GetDeltaPvector();}
195 ClassDef(AliAODDeltaPvectorCut,1)
197 /******************************************************************/
199 class AliAODDeltaPhiCut: public AliAODPairBaseCut
202 AliAODDeltaPhiCut(Double_t min = 0.0, Double_t max = 0.0):
203 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPhi){}
204 virtual ~AliAODDeltaPhiCut(){}
206 virtual Double_t GetValue(AliAODPair* pair) const
207 {return TMath::Abs(pair->GetDeltaPhi());}
209 ClassDef(AliAODDeltaPhiCut,1)
211 /******************************************************************/
213 class AliAODDeltaThetaCut: public AliAODPairBaseCut
216 AliAODDeltaThetaCut(Double_t min = 0.0, Double_t max = 0.0):
217 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaTheta){}
218 virtual ~AliAODDeltaThetaCut(){}
220 virtual Double_t GetValue(AliAODPair* pair) const
221 {return TMath::Abs(pair->GetDeltaTheta());}
223 ClassDef(AliAODDeltaThetaCut,1)
225 /******************************************************************/
227 class AliAODCluterOverlapCut: public AliAODPairBaseCut
230 AliAODCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
231 AliAODPairBaseCut(min,max,kHbtPairCutPropClOverlap){}
232 virtual ~AliAODCluterOverlapCut(){}
235 virtual Double_t GetValue(AliAODPair* pair) const;
236 ClassDef(AliAODCluterOverlapCut,1)
238 /******************************************************************/
240 class AliAODAvSeparationCut: public AliAODPairBaseCut
243 AliAODAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
244 AliAODPairBaseCut(min,max,kHbtPairCutPropAvSepar){}
245 virtual ~AliAODAvSeparationCut(){}
248 virtual Double_t GetValue(AliAODPair* pair) const;
249 ClassDef(AliAODAvSeparationCut,1)
251 /******************************************************************/
253 class AliAODSeparationCut: public AliAODPairBaseCut
256 AliAODSeparationCut(Double_t min = 0.0, Double_t max = 1e5, Int_t point = 0):
257 AliAODPairBaseCut(min,max,kHbtPairCutPropSepar),fPoint(point){}
258 virtual ~AliAODSeparationCut(){}
261 Int_t fPoint;//index of the point that distance should be measured
262 virtual Double_t GetValue(AliAODPair* pair) const;
263 ClassDef(AliAODSeparationCut,1)
265 /******************************************************************/
267 class AliAODITSSeparationCut: public AliAODPairBaseCut
269 //Anti merging cut for the first layer of pixels
271 AliAODITSSeparationCut(Int_t layer = 0, Double_t deltarphi = 0.01, Double_t deltaz = 0.08):
272 AliAODPairBaseCut(deltarphi,deltaz,kHbtPairCutPropPixelSepar),fLayer(layer){}
273 virtual ~AliAODITSSeparationCut(){}
274 Bool_t Rejected(AliAODPair* pair) const;
275 Int_t GetLayer() const {return fLayer;}
277 Int_t fLayer;//index of the layer that distance should be measured 0: 1st pixels
278 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}//not used
279 ClassDef(AliAODITSSeparationCut,1)
281 /******************************************************************/
283 class AliAODOutSideSameSignCut: public AliAODPairBaseCut
286 AliAODOutSideSameSignCut(){}
287 virtual ~AliAODOutSideSameSignCut(){}
288 virtual Bool_t Rejected(AliAODPair *p) const;
290 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
291 ClassDef(AliAODOutSideSameSignCut,1)
293 /******************************************************************/
295 class AliAODOutSideDiffSignCut: public AliAODPairBaseCut
298 AliAODOutSideDiffSignCut(){}
299 virtual ~AliAODOutSideDiffSignCut(){}
300 virtual Bool_t Rejected(AliAODPair *p) const;
302 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
303 ClassDef(AliAODOutSideDiffSignCut,1)
305 /******************************************************************/
307 class AliAODLogicalOperPairCut: public AliAODPairBaseCut
310 AliAODLogicalOperPairCut();
311 AliAODLogicalOperPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second);
312 virtual ~AliAODLogicalOperPairCut();
314 Double_t GetValue(AliAODPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
316 AliAODPairBaseCut* fFirst; //second cut
317 AliAODPairBaseCut* fSecond; //first cut
319 class AliAODDummyBasePairCut: public AliAODPairBaseCut
321 Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
322 Bool_t Rejected(AliAODPair* /*pair*/) const;
325 ClassDef(AliAODLogicalOperPairCut,1)
327 /******************************************************************/
329 class AliAODOrPairCut: public AliAODLogicalOperPairCut
333 AliAODOrPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
334 virtual ~AliAODOrPairCut(){}
335 Bool_t Rejected(AliAODPair *p) const;
336 ClassDef(AliAODOrPairCut,1)
338 /******************************************************************/
340 class AliAODAndPairCut: public AliAODLogicalOperPairCut
344 AliAODAndPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
345 virtual ~AliAODAndPairCut(){}
346 Bool_t Rejected(AliAODPair *p) const;
347 ClassDef(AliAODAndPairCut,1)