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,
27 class AliHBTPairCut: public TNamed
31 AliHBTPairCut(const AliHBTPairCut& in);
32 AliHBTPairCut& operator = (const AliHBTPairCut& in);
34 virtual ~AliHBTPairCut();
35 virtual Bool_t Pass(AliHBTPair* pair) const;
36 virtual Bool_t PassPairProp(AliHBTPair* pair) const;
38 virtual Bool_t IsEmpty() const {return kFALSE;}
39 void SetFirstPartCut(AliHBTParticleCut* cut); //sets the cut on the first particle
40 void SetSecondPartCut(AliHBTParticleCut* cut); //sets the cut on the second particle
42 void SetPartCut(AliHBTParticleCut* cut);//sets the the same cut on both particles
44 void AddBasePairCut(AliHbtBasePairCut* cut);
46 void SetQInvRange(Double_t min, Double_t max);
47 void SetKtRange(Double_t min, Double_t max);
48 void SetKStarRange(Double_t min, Double_t max);
49 void SetQOutCMSLRange(Double_t min, Double_t max);
50 void SetQSideCMSLRange(Double_t min, Double_t max);
51 void SetQLongCMSLRange(Double_t min, Double_t max);
53 AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
54 AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
57 AliHBTParticleCut* fFirstPartCut;//cut on first particle in pair
58 AliHBTParticleCut* fSecondPartCut;//cut on second particle in pair
60 AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
61 Int_t fNCuts;//Number of cuts in fCuts array
64 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty cut);
66 static const Int_t fgkMaxCuts; // Max number of cuts
68 ClassDef(AliHBTPairCut,2)
71 /******************************************************************/
72 /******************************************************************/
73 /******************************************************************/
75 class AliHBTEmptyPairCut: public AliHBTPairCut
77 //Empty - it passes possitively all particles - it means returns always False
78 //Class describing cut on pairs of particles
80 AliHBTEmptyPairCut(){};
81 AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in){};
82 virtual ~AliHBTEmptyPairCut(){};
84 Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
85 Bool_t IsEmpty() const {return kTRUE;}
87 ClassDef(AliHBTEmptyPairCut,1)
93 /******************************************************************/
94 /******************************************************************/
95 /******************************************************************/
97 class AliHbtBasePairCut: public TObject
99 //This class defines the range of some property - pure virtual
100 //Property is coded by AliHBTCutTypes type
104 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
105 fMin(min),fMax(max),fProperty(prop){}
107 virtual ~AliHbtBasePairCut(){}
109 Bool_t Pass(AliHBTPair* pair) const;
111 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
113 void SetMinimum(Double_t min){fMin = min;}
114 void SetMaximum(Double_t max){fMax = max;}
116 Double_t GetMinimum() const {return fMin;}
117 Double_t GetMaximum() const {return fMax;}
119 AliHBTPairCutProperty GetProperty() const {return fProperty;}
122 virtual Double_t GetValue(AliHBTPair* pair) const = 0;
124 Double_t fMin; // Lower boundary of the range
125 Double_t fMax; // Upper boundary of the range
127 AliHBTPairCutProperty fProperty; // The property itself
129 ClassDef(AliHbtBasePairCut,1)
133 inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
135 Double_t value = GetValue(pair);
136 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
137 else return kTRUE; //rejected
139 /******************************************************************/
140 /******************************************************************/
141 /******************************************************************/
142 class AliHBTQInvCut: public AliHbtBasePairCut
145 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
146 virtual ~AliHBTQInvCut(){}
148 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
150 ClassDef(AliHBTQInvCut,1)
154 class AliHBTKtCut: public AliHbtBasePairCut {
156 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
157 virtual ~AliHBTKtCut(){}
159 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKt();}
161 ClassDef(AliHBTKtCut,1)
164 class AliHBTKStarCut: public AliHbtBasePairCut
167 AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
168 virtual ~AliHBTKStarCut(){}
170 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
172 ClassDef(AliHBTKStarCut,1)
175 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
178 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
179 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
180 virtual ~AliHBTQSideCMSLCCut(){}
182 virtual Double_t GetValue(AliHBTPair* pair) const
183 {return pair->GetQSideCMSLC();}
185 ClassDef(AliHBTQSideCMSLCCut,1)
189 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
192 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
193 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
194 virtual ~AliHBTQOutCMSLCCut(){}
196 virtual Double_t GetValue(AliHBTPair* pair) const
197 {return pair->GetQOutCMSLC();}
199 ClassDef(AliHBTQOutCMSLCCut,1)
202 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
205 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
206 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
207 virtual ~AliHBTQLongCMSLCCut(){}
209 virtual Double_t GetValue(AliHBTPair* pair) const
210 {return pair->GetQLongCMSLC();}
212 ClassDef(AliHBTQLongCMSLCCut,1)