1 #ifndef ALIHBTPAIRCUT_H
2 #define ALIHBTPAIRCUT_H
6 //Piotr Skowronski@cern.ch
7 //Class implements cut on the pair of particles
9 //more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
11 #include "AliHBTPair.h"
13 class AliHBTParticleCut;
14 class AliHbtBasePairCut;
16 enum AliHBTPairCutProperty
18 kHbtPairCutPropQInv, //Q invariant
21 kHbtPairCutPropQSideCMSLC,
22 kHbtPairCutPropQOutCMSLC,
23 kHbtPairCutPropQLongCMSLC,
24 kHbtPairCutPropDeltaPhi,
25 kHbtPairCutPropDeltaTheta,
26 kHbtPairCutPropDeltaP,
27 kHbtPairCutPropDeltaPt,
28 kHbtPairCutPropAvSepar,
29 kHbtPairCutPropClOverlap,
32 /******************************************************************/
34 class AliHBTPairCut: public TNamed
38 AliHBTPairCut(const AliHBTPairCut& in);
39 AliHBTPairCut& operator = (const AliHBTPairCut& in);
41 virtual ~AliHBTPairCut();
42 virtual Bool_t Pass(AliHBTPair* pair) const;
43 virtual Bool_t PassPairProp(AliHBTPair* pair) const;
45 virtual Bool_t IsEmpty() const {return kFALSE;}
46 void SetFirstPartCut(AliHBTParticleCut* cut); //sets the cut on the first particle
47 void SetSecondPartCut(AliHBTParticleCut* cut); //sets the cut on the second particle
49 void SetPartCut(AliHBTParticleCut* cut);//sets the the same cut on both particles
51 virtual void AddBasePairCut(AliHbtBasePairCut* cut);
53 void SetQInvRange(Double_t min, Double_t max);
54 void SetKtRange(Double_t min, Double_t max);
55 void SetKStarRange(Double_t min, Double_t max);
56 void SetQOutCMSLRange(Double_t min, Double_t max);
57 void SetQSideCMSLRange(Double_t min, Double_t max);
58 void SetQLongCMSLRange(Double_t min, Double_t max);
59 void SetAvSeparationRange(Double_t min,Double_t max = 10e5);//Anti-Merging Cut
60 void SetClusterOverlapRange(Double_t min,Double_t max);//Anti-Splitting Max range -0.5 1.0
62 AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
63 AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
66 AliHBTParticleCut* fFirstPartCut;//cut on first particle in pair
67 AliHBTParticleCut* fSecondPartCut;//cut on second particle in pair
69 AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
70 Int_t fNCuts;//Number of cuts in fCuts array
73 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty cut);
75 static const Int_t fgkMaxCuts; // Max number of cuts
76 ClassDef(AliHBTPairCut,2)
78 /******************************************************************/
79 /******************************************************************/
80 /******************************************************************/
82 class AliHBTEmptyPairCut: public AliHBTPairCut
84 //Empty - it passes possitively all particles - it means returns always False
85 //Class describing cut on pairs of particles
87 AliHBTEmptyPairCut(){};
88 AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in):AliHBTPairCut(in){};
89 virtual ~AliHBTEmptyPairCut(){};
91 Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
92 Bool_t IsEmpty() const {return kTRUE;}
94 ClassDef(AliHBTEmptyPairCut,1)
99 /******************************************************************/
100 /******************************************************************/
101 /******************************************************************/
103 class AliHbtBasePairCut: public TObject
105 //This class defines the range of some property - pure virtual
106 //Property is coded by AliHBTCutTypes type
110 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
111 fMin(min),fMax(max),fProperty(prop){}
113 virtual ~AliHbtBasePairCut(){}
115 virtual Bool_t Pass(AliHBTPair* pair) const;
117 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
119 void SetMinimum(Double_t min){fMin = min;}
120 void SetMaximum(Double_t max){fMax = max;}
122 Double_t GetMinimum() const {return fMin;}
123 Double_t GetMaximum() const {return fMax;}
125 AliHBTPairCutProperty GetProperty() const {return fProperty;}
128 virtual Double_t GetValue(AliHBTPair* pair) const = 0;
130 Double_t fMin; // Lower boundary of the range
131 Double_t fMax; // Upper boundary of the range
133 AliHBTPairCutProperty fProperty; // The property itself
135 ClassDef(AliHbtBasePairCut,1)
138 /******************************************************************/
140 inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
142 //checks if pair proprty is in range
143 //null pointer check is made by AliHBTPairCut, so here is unnecesary
145 Double_t value = GetValue(pair);
146 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
147 else return kTRUE; //rejected
149 /******************************************************************/
150 /******************************************************************/
151 /******************************************************************/
153 class AliHBTQInvCut: public AliHbtBasePairCut
156 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
157 virtual ~AliHBTQInvCut(){}
159 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
161 ClassDef(AliHBTQInvCut,1)
163 /******************************************************************/
165 class AliHBTKtCut: public AliHbtBasePairCut {
167 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
168 virtual ~AliHBTKtCut(){}
170 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKt();}
172 ClassDef(AliHBTKtCut,1)
174 /******************************************************************/
176 class AliHBTKStarCut: public AliHbtBasePairCut
179 AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
180 virtual ~AliHBTKStarCut(){}
182 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
184 ClassDef(AliHBTKStarCut,1)
186 /******************************************************************/
188 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
191 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
192 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
193 virtual ~AliHBTQSideCMSLCCut(){}
195 virtual Double_t GetValue(AliHBTPair* pair) const
196 {return pair->GetQSideCMSLC();}
198 ClassDef(AliHBTQSideCMSLCCut,1)
200 /******************************************************************/
203 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
206 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
207 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
208 virtual ~AliHBTQOutCMSLCCut(){}
210 virtual Double_t GetValue(AliHBTPair* pair) const
211 {return pair->GetQOutCMSLC();}
213 ClassDef(AliHBTQOutCMSLCCut,1)
215 /******************************************************************/
217 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
220 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
221 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
222 virtual ~AliHBTQLongCMSLCCut(){}
224 virtual Double_t GetValue(AliHBTPair* pair) const
225 {return pair->GetQLongCMSLC();}
227 ClassDef(AliHBTQLongCMSLCCut,1)
229 /******************************************************************/
231 class AliHBTDeltaPhiCut: public AliHbtBasePairCut
234 AliHBTDeltaPhiCut(Double_t min = 0.0, Double_t max = 0.0):
235 AliHbtBasePairCut(min,max,kHbtPairCutPropDeltaPhi){}
236 virtual ~AliHBTDeltaPhiCut(){}
238 virtual Double_t GetValue(AliHBTPair* pair) const
239 {return TMath::Abs(pair->GetDeltaPhi());}
241 ClassDef(AliHBTDeltaPhiCut,1)
243 /******************************************************************/
245 class AliHBTDeltaThetaCut: public AliHbtBasePairCut
248 AliHBTDeltaThetaCut(Double_t min = 0.0, Double_t max = 0.0):
249 AliHbtBasePairCut(min,max,kHbtPairCutPropDeltaTheta){}
250 virtual ~AliHBTDeltaThetaCut(){}
252 virtual Double_t GetValue(AliHBTPair* pair) const
253 {return TMath::Abs(pair->GetDeltaTheta());}
255 ClassDef(AliHBTDeltaThetaCut,1)
257 /******************************************************************/
259 class AliHBTCluterOverlapCut: public AliHbtBasePairCut
262 AliHBTCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
263 AliHbtBasePairCut(min,max,kHbtPairCutPropClOverlap){}
264 virtual ~AliHBTCluterOverlapCut(){}
267 virtual Double_t GetValue(AliHBTPair* pair) const;
268 ClassDef(AliHBTCluterOverlapCut,1)
270 /******************************************************************/
272 class AliHBTAvSeparationCut: public AliHbtBasePairCut
275 AliHBTAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
276 AliHbtBasePairCut(min,max,kHbtPairCutPropAvSepar){}
277 virtual ~AliHBTAvSeparationCut(){}
280 virtual Double_t GetValue(AliHBTPair* pair) const;
281 ClassDef(AliHBTAvSeparationCut,1)
283 /******************************************************************/
285 class AliHBTOutSideSameSignCut: public AliHbtBasePairCut
288 AliHBTOutSideSameSignCut(){}
289 virtual ~AliHBTOutSideSameSignCut(){}
290 virtual Bool_t Pass(AliHBTPair *p) const;
292 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
293 ClassDef(AliHBTOutSideSameSignCut,1)
295 /******************************************************************/
297 class AliHBTOutSideDiffSignCut: public AliHbtBasePairCut
300 AliHBTOutSideDiffSignCut(){}
301 virtual ~AliHBTOutSideDiffSignCut(){}
302 virtual Bool_t Pass(AliHBTPair *p) const;
304 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
305 ClassDef(AliHBTOutSideDiffSignCut,1)
307 /******************************************************************/
309 class AliHBTLogicalOperPairCut: public AliHbtBasePairCut
312 AliHBTLogicalOperPairCut();
313 AliHBTLogicalOperPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second);
314 virtual ~AliHBTLogicalOperPairCut();
316 Double_t GetValue(AliHBTPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
318 AliHbtBasePairCut* fFirst; //second cut
319 AliHbtBasePairCut* fSecond; //first cut
321 class AliHBTDummyBasePairCut: public AliHbtBasePairCut
323 Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
324 Bool_t Pass(AliHBTPair* /*pair*/) const;
327 ClassDef(AliHBTLogicalOperPairCut,1)
329 /******************************************************************/
331 class AliHBTOrPairCut: public AliHBTLogicalOperPairCut
335 AliHBTOrPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second):AliHBTLogicalOperPairCut(first,second){}
336 virtual ~AliHBTOrPairCut(){}
337 Bool_t Pass(AliHBTPair *p) const;
338 ClassDef(AliHBTOrPairCut,1)
340 /******************************************************************/
342 class AliHBTAndPairCut: public AliHBTLogicalOperPairCut
346 AliHBTAndPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second):AliHBTLogicalOperPairCut(first,second){}
347 virtual ~AliHBTAndPairCut(){}
348 Bool_t Pass(AliHBTPair *p) const;
349 ClassDef(AliHBTAndPairCut,1)