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
22 class AliHBTPairCut: public TObject
26 AliHBTPairCut(const AliHBTPairCut&);
28 virtual ~AliHBTPairCut();
29 virtual Bool_t Pass(AliHBTPair*);
31 void SetFirstPartCut(AliHBTParticleCut*); //sets the cut on the first particle
32 void SetSecondPartCut(AliHBTParticleCut*); //sets the cut on the first particle
34 void SetPartCut(AliHBTParticleCut*);//sets the the same cut on both particles
36 void AddBasePairCut(AliHbtBasePairCut*);
38 void SetQInvRange(Double_t min, Double_t max);
39 void SetKtRange(Double_t min, Double_t max);
41 AliHBTParticleCut* fFirstPartCut;
42 AliHBTParticleCut* fSecondPartCut;
44 AliHbtBasePairCut** fCuts; //!
48 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty);
50 static const Int_t fkgMaxCuts;
52 ClassDef(AliHBTPairCut,1)
55 /******************************************************************/
56 /******************************************************************/
57 /******************************************************************/
59 class AliHBTEmptyPairCut: public AliHBTPairCut
61 //Empty - it passes possitively all particles - it means returns always False
62 //Class describing cut on pairs of particles
64 AliHBTEmptyPairCut(){};
65 AliHBTEmptyPairCut(const AliHBTEmptyPairCut&){};
66 virtual ~AliHBTEmptyPairCut(){};
68 Bool_t Pass(AliHBTPair*) {return kFALSE;} //accpept everything
70 ClassDef(AliHBTEmptyPairCut,1)
76 /******************************************************************/
77 /******************************************************************/
78 /******************************************************************/
80 class AliHbtBasePairCut: public TObject
82 //This class defines the range of some property - pure virtual
83 //Property is coded by AliHBTCutTypes type
87 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
88 fMin(min),fMax(max),fProperty(prop){}
90 virtual ~AliHbtBasePairCut(){}
92 Bool_t Pass(AliHBTPair*);
94 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
96 void SetMinimum(Double_t min){fMin = min;}
97 void SetMaximum(Double_t max){fMax = max;}
99 Double_t GetMinimum() const {return fMin;}
100 Double_t GetMaximum() const {return fMax;}
102 AliHBTPairCutProperty GetProperty() const {return fProperty;}
105 virtual Double_t GetValue(AliHBTPair*) = 0;
110 AliHBTPairCutProperty fProperty;
114 ClassDef(AliHbtBasePairCut,1)
119 AliHbtBasePairCut::Pass(AliHBTPair* pair)
121 Double_t value = GetValue(pair);
122 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
123 else return kTRUE; //rejected
125 /******************************************************************/
126 /******************************************************************/
127 /******************************************************************/
128 class AliHBTQInvCut: public AliHbtBasePairCut
131 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
132 virtual ~AliHBTQInvCut(){}
134 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQInv();}
137 ClassDef(AliHBTQInvCut,1)
141 class AliHBTKtCut: public AliHbtBasePairCut
144 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
145 virtual ~AliHBTKtCut(){}
147 virtual Double_t GetValue(AliHBTPair* pair){return pair->GetKt();}
150 ClassDef(AliHBTKtCut,1)