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 virtual 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
67 ClassDef(AliHBTPairCut,2)
69 /******************************************************************/
70 /******************************************************************/
71 /******************************************************************/
73 class AliHBTEmptyPairCut: public AliHBTPairCut
75 //Empty - it passes possitively all particles - it means returns always False
76 //Class describing cut on pairs of particles
78 AliHBTEmptyPairCut(){};
79 AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in):AliHBTPairCut(in){};
80 virtual ~AliHBTEmptyPairCut(){};
82 Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
83 Bool_t IsEmpty() const {return kTRUE;}
85 ClassDef(AliHBTEmptyPairCut,1)
90 /******************************************************************/
91 /******************************************************************/
92 /******************************************************************/
94 class AliHbtBasePairCut: public TObject
96 //This class defines the range of some property - pure virtual
97 //Property is coded by AliHBTCutTypes type
101 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
102 fMin(min),fMax(max),fProperty(prop){}
104 virtual ~AliHbtBasePairCut(){}
106 Bool_t Pass(AliHBTPair* pair) const;
108 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
110 void SetMinimum(Double_t min){fMin = min;}
111 void SetMaximum(Double_t max){fMax = max;}
113 Double_t GetMinimum() const {return fMin;}
114 Double_t GetMaximum() const {return fMax;}
116 AliHBTPairCutProperty GetProperty() const {return fProperty;}
119 virtual Double_t GetValue(AliHBTPair* pair) const = 0;
121 Double_t fMin; // Lower boundary of the range
122 Double_t fMax; // Upper boundary of the range
124 AliHBTPairCutProperty fProperty; // The property itself
126 ClassDef(AliHbtBasePairCut,1)
130 inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
132 Double_t value = GetValue(pair);
133 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
134 else return kTRUE; //rejected
136 /******************************************************************/
137 /******************************************************************/
138 /******************************************************************/
139 class AliHBTQInvCut: public AliHbtBasePairCut
142 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
143 virtual ~AliHBTQInvCut(){}
145 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
147 ClassDef(AliHBTQInvCut,1)
151 class AliHBTKtCut: public AliHbtBasePairCut {
153 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
154 virtual ~AliHBTKtCut(){}
156 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKt();}
158 ClassDef(AliHBTKtCut,1)
161 class AliHBTKStarCut: public AliHbtBasePairCut
164 AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
165 virtual ~AliHBTKStarCut(){}
167 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
169 ClassDef(AliHBTKStarCut,1)
172 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
175 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
176 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
177 virtual ~AliHBTQSideCMSLCCut(){}
179 virtual Double_t GetValue(AliHBTPair* pair) const
180 {return pair->GetQSideCMSLC();}
182 ClassDef(AliHBTQSideCMSLCCut,1)
186 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
189 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
190 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
191 virtual ~AliHBTQOutCMSLCCut(){}
193 virtual Double_t GetValue(AliHBTPair* pair) const
194 {return pair->GetQOutCMSLC();}
196 ClassDef(AliHBTQOutCMSLCCut,1)
199 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
202 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
203 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
204 virtual ~AliHBTQLongCMSLCCut(){}
206 virtual Double_t GetValue(AliHBTPair* pair) const
207 {return pair->GetQLongCMSLC();}
209 ClassDef(AliHBTQLongCMSLCCut,1)