1 //Piotr Skowronski@cern.ch
2 //Class implemnts cut on the pair of particles
4 //more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
6 #ifndef ALIHBTPAIRCUT_H
7 #define ALIHBTPAIRCUT_H
10 #include "AliHBTParticleCut.h"
11 #include "AliHBTPair.h"
13 class AliHbtBasePairCut;
15 enum AliHBTPairCutProperty
17 kHbtPairCutPropQInv, //Q invariant
20 kHbtPairCutPropQSideCMSLC,
21 kHbtPairCutPropQOutCMSLC,
22 kHbtPairCutPropQLongCMSLC,
26 class AliHBTPairCut: public TNamed
30 AliHBTPairCut(const AliHBTPairCut&);
32 virtual ~AliHBTPairCut();
33 virtual Bool_t Pass(AliHBTPair* pair);
34 virtual Bool_t PassPairProp(AliHBTPair* pair);
36 virtual Bool_t IsEmpty() {return kFALSE;}
37 void SetFirstPartCut(AliHBTParticleCut*); //sets the cut on the first particle
38 void SetSecondPartCut(AliHBTParticleCut*); //sets the cut on the first particle
40 void SetPartCut(AliHBTParticleCut*);//sets the the same cut on both particles
42 void AddBasePairCut(AliHbtBasePairCut*);
44 void SetQInvRange(Double_t min, Double_t max);
45 void SetKtRange(Double_t min, Double_t max);
46 void SetKStarRange(Double_t min, Double_t max);
47 void SetQOutCMSLRange(Double_t min, Double_t max);
48 void SetQSideCMSLRange(Double_t min, Double_t max);
49 void SetQLongCMSLRange(Double_t min, Double_t max);
51 AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
52 AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
55 AliHBTParticleCut* fFirstPartCut;//cut on first particle in pair
56 AliHBTParticleCut* fSecondPartCut;//cut on second particle in pair
58 AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
59 Int_t fNCuts;//Number of cuts in fCuts array
62 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty);
64 static const Int_t fkgMaxCuts;
66 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&){};
80 virtual ~AliHBTEmptyPairCut(){};
82 Bool_t Pass(AliHBTPair*) {return kFALSE;} //accpept everything
83 Bool_t IsEmpty() {return kTRUE;}
85 ClassDef(AliHBTEmptyPairCut,1)
91 /******************************************************************/
92 /******************************************************************/
93 /******************************************************************/
95 class AliHbtBasePairCut: public TObject
97 //This class defines the range of some property - pure virtual
98 //Property is coded by AliHBTCutTypes type
102 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
103 fMin(min),fMax(max),fProperty(prop){}
105 virtual ~AliHbtBasePairCut(){}
107 Bool_t Pass(AliHBTPair*);
109 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
111 void SetMinimum(Double_t min){fMin = min;}
112 void SetMaximum(Double_t max){fMax = max;}
114 Double_t GetMinimum() const {return fMin;}
115 Double_t GetMaximum() const {return fMax;}
117 AliHBTPairCutProperty GetProperty() const {return fProperty;}
120 virtual Double_t GetValue(AliHBTPair*) = 0;
125 AliHBTPairCutProperty fProperty;
129 ClassDef(AliHbtBasePairCut,1)
134 AliHbtBasePairCut::Pass(AliHBTPair* pair)
136 Double_t value = GetValue(pair);
137 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
138 else return kTRUE; //rejected
140 /******************************************************************/
141 /******************************************************************/
142 /******************************************************************/
143 class AliHBTQInvCut: public AliHbtBasePairCut
146 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
147 virtual ~AliHBTQInvCut(){}
149 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQInv();}
152 ClassDef(AliHBTQInvCut,1)
156 class AliHBTKtCut: public AliHbtBasePairCut
159 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
160 virtual ~AliHBTKtCut(){}
162 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetKt();}
165 ClassDef(AliHBTKtCut,1)
168 class AliHBTKStarCut: public AliHbtBasePairCut
171 AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
172 virtual ~AliHBTKStarCut(){}
174 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetKStar();}
177 ClassDef(AliHBTKStarCut,1)
180 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
183 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
184 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
185 virtual ~AliHBTQSideCMSLCCut(){}
187 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQSideCMSLC();}
190 ClassDef(AliHBTQSideCMSLCCut,1)
194 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
197 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
198 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
199 virtual ~AliHBTQOutCMSLCCut(){}
201 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQOutCMSLC();}
204 ClassDef(AliHBTQOutCMSLCCut,1)
207 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
210 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
211 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
212 virtual ~AliHBTQLongCMSLCCut(){}
214 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQLongCMSLC();}
217 ClassDef(AliHBTQLongCMSLCCut,1)