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* pair);
33 virtual Bool_t PassPairProp(AliHBTPair* pair);
35 virtual Bool_t IsEmpty() {return kFALSE;}
36 void SetFirstPartCut(AliHBTParticleCut*); //sets the cut on the first particle
37 void SetSecondPartCut(AliHBTParticleCut*); //sets the cut on the first particle
39 void SetPartCut(AliHBTParticleCut*);//sets the the same cut on both particles
41 void AddBasePairCut(AliHbtBasePairCut*);
43 void SetQInvRange(Double_t min, Double_t max);
44 void SetKtRange(Double_t min, Double_t max);
45 void SetQOutCMSLRange(Double_t min, Double_t max);
46 void SetQSideCMSLRange(Double_t min, Double_t max);
47 void SetQLongCMSLRange(Double_t min, Double_t max);
49 AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
50 AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
53 AliHBTParticleCut* fFirstPartCut;
54 AliHBTParticleCut* fSecondPartCut;
56 AliHbtBasePairCut** fCuts; //!
60 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty);
62 static const Int_t fkgMaxCuts;
64 ClassDef(AliHBTPairCut,1)
67 /******************************************************************/
68 /******************************************************************/
69 /******************************************************************/
71 class AliHBTEmptyPairCut: public AliHBTPairCut
73 //Empty - it passes possitively all particles - it means returns always False
74 //Class describing cut on pairs of particles
76 AliHBTEmptyPairCut(){};
77 AliHBTEmptyPairCut(const AliHBTEmptyPairCut&){};
78 virtual ~AliHBTEmptyPairCut(){};
80 Bool_t Pass(AliHBTPair*) {return kFALSE;} //accpept everything
81 Bool_t IsEmpty() {return kTRUE;}
83 ClassDef(AliHBTEmptyPairCut,1)
89 /******************************************************************/
90 /******************************************************************/
91 /******************************************************************/
93 class AliHbtBasePairCut: public TObject
95 //This class defines the range of some property - pure virtual
96 //Property is coded by AliHBTCutTypes type
100 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
101 fMin(min),fMax(max),fProperty(prop){}
103 virtual ~AliHbtBasePairCut(){}
105 Bool_t Pass(AliHBTPair*);
107 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
109 void SetMinimum(Double_t min){fMin = min;}
110 void SetMaximum(Double_t max){fMax = max;}
112 Double_t GetMinimum() const {return fMin;}
113 Double_t GetMaximum() const {return fMax;}
115 AliHBTPairCutProperty GetProperty() const {return fProperty;}
118 virtual Double_t GetValue(AliHBTPair*) = 0;
123 AliHBTPairCutProperty fProperty;
127 ClassDef(AliHbtBasePairCut,1)
132 AliHbtBasePairCut::Pass(AliHBTPair* pair)
134 Double_t value = GetValue(pair);
135 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
136 else return kTRUE; //rejected
138 /******************************************************************/
139 /******************************************************************/
140 /******************************************************************/
141 class AliHBTQInvCut: public AliHbtBasePairCut
144 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
145 virtual ~AliHBTQInvCut(){}
147 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQInv();}
150 ClassDef(AliHBTQInvCut,1)
154 class AliHBTKtCut: public AliHbtBasePairCut
157 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
158 virtual ~AliHBTKtCut(){}
160 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetKt();}
163 ClassDef(AliHBTKtCut,1)
167 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
170 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
171 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
172 virtual ~AliHBTQSideCMSLCCut(){}
174 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQSideCMSLC();}
177 ClassDef(AliHBTQSideCMSLCCut,1)
181 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
184 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
185 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
186 virtual ~AliHBTQOutCMSLCCut(){}
188 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQOutCMSLC();}
191 ClassDef(AliHBTQOutCMSLCCut,1)
194 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
197 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
198 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
199 virtual ~AliHBTQLongCMSLCCut(){}
201 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQLongCMSLC();}
204 ClassDef(AliHBTQLongCMSLCCut,1)