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 kHbtPairCutPropAvSepar,
25 kHbtPairCutPropClOverlap,
28 /******************************************************************/
30 class AliHBTPairCut: public TNamed
34 AliHBTPairCut(const AliHBTPairCut& in);
35 AliHBTPairCut& operator = (const AliHBTPairCut& in);
37 virtual ~AliHBTPairCut();
38 virtual Bool_t Pass(AliHBTPair* pair) const;
39 virtual Bool_t PassPairProp(AliHBTPair* pair) const;
41 virtual Bool_t IsEmpty() const {return kFALSE;}
42 void SetFirstPartCut(AliHBTParticleCut* cut); //sets the cut on the first particle
43 void SetSecondPartCut(AliHBTParticleCut* cut); //sets the cut on the second particle
45 void SetPartCut(AliHBTParticleCut* cut);//sets the the same cut on both particles
47 virtual void AddBasePairCut(AliHbtBasePairCut* cut);
49 void SetQInvRange(Double_t min, Double_t max);
50 void SetKtRange(Double_t min, Double_t max);
51 void SetKStarRange(Double_t min, Double_t max);
52 void SetQOutCMSLRange(Double_t min, Double_t max);
53 void SetQSideCMSLRange(Double_t min, Double_t max);
54 void SetQLongCMSLRange(Double_t min, Double_t max);
55 void SetAvSeparationRange(Double_t min,Double_t max = 10e5);//Anti-Merging Cut
56 void SetClusterOverlapRange(Double_t min,Double_t max);//Anti-Splitting Max range -0.5 1.0
58 AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
59 AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
62 AliHBTParticleCut* fFirstPartCut;//cut on first particle in pair
63 AliHBTParticleCut* fSecondPartCut;//cut on second particle in pair
65 AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
66 Int_t fNCuts;//Number of cuts in fCuts array
69 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty cut);
71 static const Int_t fgkMaxCuts; // Max number of cuts
72 ClassDef(AliHBTPairCut,2)
74 /******************************************************************/
75 /******************************************************************/
76 /******************************************************************/
78 class AliHBTEmptyPairCut: public AliHBTPairCut
80 //Empty - it passes possitively all particles - it means returns always False
81 //Class describing cut on pairs of particles
83 AliHBTEmptyPairCut(){};
84 AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in):AliHBTPairCut(in){};
85 virtual ~AliHBTEmptyPairCut(){};
87 Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
88 Bool_t IsEmpty() const {return kTRUE;}
90 ClassDef(AliHBTEmptyPairCut,1)
95 /******************************************************************/
96 /******************************************************************/
97 /******************************************************************/
99 class AliHbtBasePairCut: public TObject
101 //This class defines the range of some property - pure virtual
102 //Property is coded by AliHBTCutTypes type
106 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
107 fMin(min),fMax(max),fProperty(prop){}
109 virtual ~AliHbtBasePairCut(){}
111 virtual Bool_t Pass(AliHBTPair* pair) const;
113 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
115 void SetMinimum(Double_t min){fMin = min;}
116 void SetMaximum(Double_t max){fMax = max;}
118 Double_t GetMinimum() const {return fMin;}
119 Double_t GetMaximum() const {return fMax;}
121 AliHBTPairCutProperty GetProperty() const {return fProperty;}
124 virtual Double_t GetValue(AliHBTPair* pair) const = 0;
126 Double_t fMin; // Lower boundary of the range
127 Double_t fMax; // Upper boundary of the range
129 AliHBTPairCutProperty fProperty; // The property itself
131 ClassDef(AliHbtBasePairCut,1)
134 /******************************************************************/
136 inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
138 //checks if pair proprty is in range
139 //null pointer check is made by AliHBTPairCut, so here is unnecesary
141 Double_t value = GetValue(pair);
142 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
143 else return kTRUE; //rejected
145 /******************************************************************/
146 /******************************************************************/
147 /******************************************************************/
149 class AliHBTQInvCut: public AliHbtBasePairCut
152 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
153 virtual ~AliHBTQInvCut(){}
155 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
157 ClassDef(AliHBTQInvCut,1)
159 /******************************************************************/
161 class AliHBTKtCut: public AliHbtBasePairCut {
163 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
164 virtual ~AliHBTKtCut(){}
166 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKt();}
168 ClassDef(AliHBTKtCut,1)
170 /******************************************************************/
172 class AliHBTKStarCut: public AliHbtBasePairCut
175 AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
176 virtual ~AliHBTKStarCut(){}
178 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
180 ClassDef(AliHBTKStarCut,1)
182 /******************************************************************/
184 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
187 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
188 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
189 virtual ~AliHBTQSideCMSLCCut(){}
191 virtual Double_t GetValue(AliHBTPair* pair) const
192 {return pair->GetQSideCMSLC();}
194 ClassDef(AliHBTQSideCMSLCCut,1)
196 /******************************************************************/
199 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
202 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
203 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
204 virtual ~AliHBTQOutCMSLCCut(){}
206 virtual Double_t GetValue(AliHBTPair* pair) const
207 {return pair->GetQOutCMSLC();}
209 ClassDef(AliHBTQOutCMSLCCut,1)
211 /******************************************************************/
213 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
216 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
217 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
218 virtual ~AliHBTQLongCMSLCCut(){}
220 virtual Double_t GetValue(AliHBTPair* pair) const
221 {return pair->GetQLongCMSLC();}
223 ClassDef(AliHBTQLongCMSLCCut,1)
225 /******************************************************************/
227 class AliHBTCluterOverlapCut: public AliHbtBasePairCut
230 AliHBTCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
231 AliHbtBasePairCut(min,max,kHbtPairCutPropClOverlap){}
232 virtual ~AliHBTCluterOverlapCut(){}
235 virtual Double_t GetValue(AliHBTPair* pair) const;
236 ClassDef(AliHBTCluterOverlapCut,1)
238 /******************************************************************/
240 class AliHBTAvSeparationCut: public AliHbtBasePairCut
243 AliHBTAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
244 AliHbtBasePairCut(min,max,kHbtPairCutPropAvSepar){}
245 virtual ~AliHBTAvSeparationCut(){}
248 virtual Double_t GetValue(AliHBTPair* pair) const;
249 ClassDef(AliHBTAvSeparationCut,1)
251 /******************************************************************/
253 class AliHBTOutSideSameSignCut: public AliHbtBasePairCut
256 AliHBTOutSideSameSignCut(){}
257 virtual ~AliHBTOutSideSameSignCut(){}
258 virtual Bool_t Pass(AliHBTPair *p) const;
260 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
261 ClassDef(AliHBTOutSideSameSignCut,1)
263 /******************************************************************/
265 class AliHBTOutSideDiffSignCut: public AliHbtBasePairCut
268 AliHBTOutSideDiffSignCut(){}
269 virtual ~AliHBTOutSideDiffSignCut(){}
270 virtual Bool_t Pass(AliHBTPair *p) const;
272 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
273 ClassDef(AliHBTOutSideDiffSignCut,1)
275 /******************************************************************/
277 class AliHBTLogicalOperPairCut: public AliHbtBasePairCut
280 AliHBTLogicalOperPairCut();
281 AliHBTLogicalOperPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second);
282 virtual ~AliHBTLogicalOperPairCut();
284 Double_t GetValue(AliHBTPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
286 AliHbtBasePairCut* fFirst; //second cut
287 AliHbtBasePairCut* fSecond; //first cut
289 class AliHBTDummyBasePairCut: public AliHbtBasePairCut
291 Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
292 Bool_t Pass(AliHBTPair* /*pair*/) const;
295 ClassDef(AliHBTLogicalOperPairCut,1)
297 /******************************************************************/
299 class AliHBTOrPairCut: public AliHBTLogicalOperPairCut
303 AliHBTOrPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second):AliHBTLogicalOperPairCut(first,second){}
304 virtual ~AliHBTOrPairCut(){}
305 Bool_t Pass(AliHBTPair *p) const;
306 ClassDef(AliHBTOrPairCut,1)
308 /******************************************************************/
310 class AliHBTAndPairCut: public AliHBTLogicalOperPairCut
314 AliHBTAndPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second):AliHBTLogicalOperPairCut(first,second){}
315 virtual ~AliHBTAndPairCut(){}
316 Bool_t Pass(AliHBTPair *p) const;
317 ClassDef(AliHBTAndPairCut,1)