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
19 kHbtPairCutPropQSideCMSLC,
20 kHbtPairCutPropQOutCMSLC,
21 kHbtPairCutPropQLongCMSLC,
25 class AliHBTPairCut: public TObject
29 AliHBTPairCut(const AliHBTPairCut&);
31 virtual ~AliHBTPairCut();
32 virtual Bool_t Pass(AliHBTPair*);
34 void SetFirstPartCut(AliHBTParticleCut*); //sets the cut on the first particle
35 void SetSecondPartCut(AliHBTParticleCut*); //sets the cut on the first particle
37 void SetPartCut(AliHBTParticleCut*);//sets the the same cut on both particles
39 void AddBasePairCut(AliHbtBasePairCut*);
41 void SetQInvRange(Double_t min, Double_t max);
42 void SetKtRange(Double_t min, Double_t max);
43 void SetQOutCMSLRange(Double_t min, Double_t max);
44 void SetQSideCMSLRange(Double_t min, Double_t max);
45 void SetQLongCMSLRange(Double_t min, Double_t max);
47 const AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
48 const AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
51 AliHBTParticleCut* fFirstPartCut;
52 AliHBTParticleCut* fSecondPartCut;
54 AliHbtBasePairCut** fCuts; //!
58 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty);
60 static const Int_t fkgMaxCuts;
62 ClassDef(AliHBTPairCut,1)
65 /******************************************************************/
66 /******************************************************************/
67 /******************************************************************/
69 class AliHBTEmptyPairCut: public AliHBTPairCut
71 //Empty - it passes possitively all particles - it means returns always False
72 //Class describing cut on pairs of particles
74 AliHBTEmptyPairCut(){};
75 AliHBTEmptyPairCut(const AliHBTEmptyPairCut&){};
76 virtual ~AliHBTEmptyPairCut(){};
78 Bool_t Pass(AliHBTPair*) {return kFALSE;} //accpept everything
80 ClassDef(AliHBTEmptyPairCut,1)
86 /******************************************************************/
87 /******************************************************************/
88 /******************************************************************/
90 class AliHbtBasePairCut: public TObject
92 //This class defines the range of some property - pure virtual
93 //Property is coded by AliHBTCutTypes type
97 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
98 fMin(min),fMax(max),fProperty(prop){}
100 virtual ~AliHbtBasePairCut(){}
102 Bool_t Pass(AliHBTPair*);
104 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
106 void SetMinimum(Double_t min){fMin = min;}
107 void SetMaximum(Double_t max){fMax = max;}
109 Double_t GetMinimum() const {return fMin;}
110 Double_t GetMaximum() const {return fMax;}
112 AliHBTPairCutProperty GetProperty() const {return fProperty;}
115 virtual Double_t GetValue(AliHBTPair*) = 0;
120 AliHBTPairCutProperty fProperty;
124 ClassDef(AliHbtBasePairCut,1)
129 AliHbtBasePairCut::Pass(AliHBTPair* pair)
131 Double_t value = GetValue(pair);
132 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
133 else return kTRUE; //rejected
135 /******************************************************************/
136 /******************************************************************/
137 /******************************************************************/
138 class AliHBTQInvCut: public AliHbtBasePairCut
141 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
142 virtual ~AliHBTQInvCut(){}
144 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQInv();}
147 ClassDef(AliHBTQInvCut,1)
151 class AliHBTKtCut: public AliHbtBasePairCut
154 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
155 virtual ~AliHBTKtCut(){}
157 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetKt();}
160 ClassDef(AliHBTKtCut,1)
164 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
167 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
168 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
169 virtual ~AliHBTQSideCMSLCCut(){}
171 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQSideCMSLC();}
174 ClassDef(AliHBTQSideCMSLCCut,1)
178 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
181 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
182 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
183 virtual ~AliHBTQOutCMSLCCut(){}
185 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQOutCMSLC();}
188 ClassDef(AliHBTQOutCMSLCCut,1)
191 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
194 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
195 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
196 virtual ~AliHBTQLongCMSLCCut(){}
198 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQLongCMSLC();}
201 ClassDef(AliHBTQLongCMSLCCut,1)