1 #ifndef ALIAODPAIRBASECUT_H
2 #define ALIAODPAIRBASECUT_H
3 // Base class AliAODPairBaseCut:
4 // This class defines the range of some property - pure virtual
5 // Property is coded by AliAODCutTypes type
18 // AliAODDeltaPvectorCut
20 // AliAODDeltaThetaCut
21 // AliAODCluterOverlapCut
22 // AliAODAvSeparationCut
23 // AliAODSeparationCut
24 // AliAODITSSeparationCut
25 // AliAODOutSideSameSignCut
26 // AliAODOutSideDiffSignCut
27 // AliAODLogicalOperPairCut
32 #include "AliAODPair.h"
35 class AliAODPairBaseCut: public TObject
39 enum EAODPairCutProperty
41 kHbtPairCutPropQInv, //Q invariant
44 kHbtPairCutPropKStarOut,
45 kHbtPairCutPropKStarSide,
46 kHbtPairCutPropKStarLong,
47 kHbtPairCutPropQSideLCMS,
48 kHbtPairCutPropQOutLCMS,
49 kHbtPairCutPropQLongLCMS,
50 kHbtPairCutPropDeltaPhi,
51 kHbtPairCutPropDeltaTheta,
52 kHbtPairCutPropDeltaE,
53 kHbtPairCutPropDeltaP,//scalar difference
54 kHbtPairCutPropDeltaPvector,//legth of the momenta difference vector
55 kHbtPairCutPropDeltaPt,
56 kHbtPairCutPropAvSepar,
58 kHbtPairCutPropClOverlap,
59 kHbtPairCutPropPixelSepar,
63 AliAODPairBaseCut(Double_t min = 0.0, Double_t max = 0.0, EAODPairCutProperty prop= kHbtPairCutPropNone):
64 fMin(min),fMax(max),fProperty(prop){}
66 virtual ~AliAODPairBaseCut(){}
68 virtual Bool_t Rejected(AliAODPair* pair) const;
70 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
72 void SetMinimum(Double_t min){fMin = min;}
73 void SetMaximum(Double_t max){fMax = max;}
75 Double_t GetMinimum() const {return fMin;}
76 Double_t GetMaximum() const {return fMax;}
78 EAODPairCutProperty GetProperty() const {return fProperty;}
81 virtual Double_t GetValue(AliAODPair* pair) const = 0;
83 Double_t fMin; // Lower boundary of the range
84 Double_t fMax; // Upper boundary of the range
86 EAODPairCutProperty fProperty; // The property itself
88 ClassDef(AliAODPairBaseCut,1)
91 /******************************************************************/
93 inline Bool_t AliAODPairBaseCut::Rejected(AliAODPair* pair) const
95 //checks if pair proprty is in range
96 //null pointer check is made by AliAODPairCut, so here is unnecesary
98 Double_t value = GetValue(pair);
99 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
100 else return kTRUE; //rejected
102 /******************************************************************/
103 /******************************************************************/
104 /******************************************************************/
106 class AliAODQInvCut: public AliAODPairBaseCut
109 AliAODQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropQInv){}
110 virtual ~AliAODQInvCut(){}
112 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetQInv();}
114 ClassDef(AliAODQInvCut,1)
116 /******************************************************************/
118 class AliAODKtCut: public AliAODPairBaseCut {
120 AliAODKtCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKt){}
121 virtual ~AliAODKtCut(){}
123 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKt();}
125 ClassDef(AliAODKtCut,1)
127 /******************************************************************/
129 class AliAODKStarCut: public AliAODPairBaseCut
132 AliAODKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStar){}
133 virtual ~AliAODKStarCut(){}
135 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKStar();}
137 ClassDef(AliAODKStarCut,1)
139 /******************************************************************/
141 class AliAODKStarOutCut: public AliAODPairBaseCut
144 AliAODKStarOutCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStarOut){}
145 virtual ~AliAODKStarOutCut(){}
147 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKStarOut();}
149 ClassDef(AliAODKStarOutCut,1)
151 /******************************************************************/
152 class AliAODKStarSideCut: public AliAODPairBaseCut
155 AliAODKStarSideCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStarSide){}
156 virtual ~AliAODKStarSideCut(){}
158 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKStarSide();}
160 ClassDef(AliAODKStarSideCut,1)
163 /******************************************************************/
165 class AliAODKStarLongCut: public AliAODPairBaseCut
168 AliAODKStarLongCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStarLong){}
169 virtual ~AliAODKStarLongCut(){}
171 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKStarLong();}
173 ClassDef(AliAODKStarLongCut,1)
175 /******************************************************************/
177 class AliAODQSideLCMSCut: public AliAODPairBaseCut
180 AliAODQSideLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
181 AliAODPairBaseCut(min,max,kHbtPairCutPropQSideLCMS){}
182 virtual ~AliAODQSideLCMSCut(){}
184 virtual Double_t GetValue(AliAODPair* pair) const
185 {return pair->GetQSideLCMS();}
187 ClassDef(AliAODQSideLCMSCut,1)
189 /******************************************************************/
192 class AliAODQOutLCMSCut: public AliAODPairBaseCut
195 AliAODQOutLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
196 AliAODPairBaseCut(min,max,kHbtPairCutPropQOutLCMS){}
197 virtual ~AliAODQOutLCMSCut(){}
199 virtual Double_t GetValue(AliAODPair* pair) const
200 {return pair->GetQOutLCMS();}
202 ClassDef(AliAODQOutLCMSCut,1)
204 /******************************************************************/
206 class AliAODQLongLCMSCut: public AliAODPairBaseCut
209 AliAODQLongLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
210 AliAODPairBaseCut(min,max,kHbtPairCutPropQLongLCMS){}
211 virtual ~AliAODQLongLCMSCut(){}
213 virtual Double_t GetValue(AliAODPair* pair) const
214 {return pair->GetQLongLCMS();}
216 ClassDef(AliAODQLongLCMSCut,1)
218 /******************************************************************/
220 class AliAODDeltaECut: public AliAODPairBaseCut
223 AliAODDeltaECut(Double_t min = 0.0, Double_t max = 0.0):
224 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaE){}
225 virtual ~AliAODDeltaECut(){}
227 virtual Double_t GetValue(AliAODPair* pair) const
228 {return pair->GetDeltaE();}
230 ClassDef(AliAODDeltaECut,1)
232 /******************************************************************/
234 class AliAODDeltaPCut: public AliAODPairBaseCut
237 AliAODDeltaPCut(Double_t min = 0.0, Double_t max = 0.0):
238 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaP){}
239 virtual ~AliAODDeltaPCut(){}
241 virtual Double_t GetValue(AliAODPair* pair) const
242 {return pair->GetDeltaP();}
244 ClassDef(AliAODDeltaPCut,1)
246 /******************************************************************/
248 class AliAODDeltaPvectorCut: public AliAODPairBaseCut
251 AliAODDeltaPvectorCut(Double_t min = 0.0, Double_t max = 0.0):
252 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPvector){}
253 virtual ~AliAODDeltaPvectorCut(){}
255 virtual Double_t GetValue(AliAODPair* pair) const
256 {return pair->GetDeltaPvector();}
258 ClassDef(AliAODDeltaPvectorCut,1)
260 /******************************************************************/
262 class AliAODDeltaPhiCut: public AliAODPairBaseCut
265 AliAODDeltaPhiCut(Double_t min = 0.0, Double_t max = 0.0):
266 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPhi){}
267 virtual ~AliAODDeltaPhiCut(){}
269 virtual Double_t GetValue(AliAODPair* pair) const
270 {return TMath::Abs(pair->GetDeltaPhi());}
272 ClassDef(AliAODDeltaPhiCut,1)
274 /******************************************************************/
276 class AliAODDeltaThetaCut: public AliAODPairBaseCut
279 AliAODDeltaThetaCut(Double_t min = 0.0, Double_t max = 0.0):
280 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaTheta){}
281 virtual ~AliAODDeltaThetaCut(){}
283 virtual Double_t GetValue(AliAODPair* pair) const
284 {return TMath::Abs(pair->GetDeltaTheta());}
286 ClassDef(AliAODDeltaThetaCut,1)
288 /******************************************************************/
290 class AliAODCluterOverlapCut: public AliAODPairBaseCut
293 AliAODCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
294 AliAODPairBaseCut(min,max,kHbtPairCutPropClOverlap){}
295 virtual ~AliAODCluterOverlapCut(){}
298 virtual Double_t GetValue(AliAODPair* pair) const;
299 ClassDef(AliAODCluterOverlapCut,1)
301 /******************************************************************/
303 class AliAODAvSeparationCut: public AliAODPairBaseCut
306 AliAODAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
307 AliAODPairBaseCut(min,max,kHbtPairCutPropAvSepar){}
308 virtual ~AliAODAvSeparationCut(){}
311 virtual Double_t GetValue(AliAODPair* pair) const;
312 ClassDef(AliAODAvSeparationCut,1)
314 /******************************************************************/
316 class AliAODSeparationCut: public AliAODPairBaseCut
319 AliAODSeparationCut(Double_t min = 0.0, Double_t max = 1e5, Int_t point = 0):
320 AliAODPairBaseCut(min,max,kHbtPairCutPropSepar),fPoint(point){}
321 virtual ~AliAODSeparationCut(){}
324 Int_t fPoint;//index of the point that distance should be measured
325 virtual Double_t GetValue(AliAODPair* pair) const;
326 ClassDef(AliAODSeparationCut,1)
328 /******************************************************************/
330 class AliAODITSSeparationCut: public AliAODPairBaseCut
332 //Anti merging cut for the first layer of pixels
334 AliAODITSSeparationCut(Int_t layer = 0, Double_t deltarphi = 0.01, Double_t deltaz = 0.08):
335 AliAODPairBaseCut(deltarphi,deltaz,kHbtPairCutPropPixelSepar),fLayer(layer){}
336 virtual ~AliAODITSSeparationCut(){}
337 Bool_t Rejected(AliAODPair* pair) const;
338 Int_t GetLayer() const {return fLayer;}
340 Int_t fLayer;//index of the layer that distance should be measured 0: 1st pixels
341 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}//not used
342 ClassDef(AliAODITSSeparationCut,1)
344 /******************************************************************/
346 class AliAODOutSideSameSignCut: public AliAODPairBaseCut
349 AliAODOutSideSameSignCut(){}
350 virtual ~AliAODOutSideSameSignCut(){}
351 virtual Bool_t Rejected(AliAODPair *p) const;
353 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
354 ClassDef(AliAODOutSideSameSignCut,1)
356 /******************************************************************/
358 class AliAODOutSideDiffSignCut: public AliAODPairBaseCut
361 AliAODOutSideDiffSignCut(){}
362 virtual ~AliAODOutSideDiffSignCut(){}
363 virtual Bool_t Rejected(AliAODPair *p) const;
365 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
366 ClassDef(AliAODOutSideDiffSignCut,1)
368 /******************************************************************/
370 class AliAODLogicalOperPairCut: public AliAODPairBaseCut
373 AliAODLogicalOperPairCut();
374 AliAODLogicalOperPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second);
375 virtual ~AliAODLogicalOperPairCut();
377 Double_t GetValue(AliAODPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
379 AliAODPairBaseCut* fFirst; //second cut
380 AliAODPairBaseCut* fSecond; //first cut
382 AliAODLogicalOperPairCut(const AliAODLogicalOperPairCut & src);
383 AliAODLogicalOperPairCut & operator=(const AliAODLogicalOperPairCut & src);
384 class AliAODDummyBasePairCut: public AliAODPairBaseCut
386 Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
387 Bool_t Rejected(AliAODPair* /*pair*/) const;
390 ClassDef(AliAODLogicalOperPairCut,1)
392 /******************************************************************/
394 class AliAODOrPairCut: public AliAODLogicalOperPairCut
398 AliAODOrPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
399 virtual ~AliAODOrPairCut(){}
400 Bool_t Rejected(AliAODPair *p) const;
401 ClassDef(AliAODOrPairCut,1)
403 /******************************************************************/
405 class AliAODAndPairCut: public AliAODLogicalOperPairCut
409 AliAODAndPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
410 virtual ~AliAODAndPairCut(){}
411 Bool_t Rejected(AliAODPair *p) const;
412 ClassDef(AliAODAndPairCut,1)