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,
24 kHbtPairCutPropAvSepar,
28 class AliHBTPairCut: public TNamed
32 AliHBTPairCut(const AliHBTPairCut& in);
33 AliHBTPairCut& operator = (const AliHBTPairCut& in);
35 virtual ~AliHBTPairCut();
36 virtual Bool_t Pass(AliHBTPair* pair) const;
37 virtual Bool_t PassPairProp(AliHBTPair* pair) const;
39 virtual Bool_t IsEmpty() const {return kFALSE;}
40 void SetFirstPartCut(AliHBTParticleCut* cut); //sets the cut on the first particle
41 void SetSecondPartCut(AliHBTParticleCut* cut); //sets the cut on the second particle
43 void SetPartCut(AliHBTParticleCut* cut);//sets the the same cut on both particles
45 virtual void AddBasePairCut(AliHbtBasePairCut* cut);
47 void SetQInvRange(Double_t min, Double_t max);
48 void SetKtRange(Double_t min, Double_t max);
49 void SetKStarRange(Double_t min, Double_t max);
50 void SetQOutCMSLRange(Double_t min, Double_t max);
51 void SetQSideCMSLRange(Double_t min, Double_t max);
52 void SetQLongCMSLRange(Double_t min, Double_t max);
53 void SetAvSeparationRange(Double_t min,Double_t max = 10e5);
55 AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
56 AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
59 AliHBTParticleCut* fFirstPartCut;//cut on first particle in pair
60 AliHBTParticleCut* fSecondPartCut;//cut on second particle in pair
62 AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
63 Int_t fNCuts;//Number of cuts in fCuts array
66 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty cut);
68 static const Int_t fgkMaxCuts; // Max number of cuts
69 ClassDef(AliHBTPairCut,2)
71 /******************************************************************/
72 /******************************************************************/
73 /******************************************************************/
75 class AliHBTEmptyPairCut: public AliHBTPairCut
77 //Empty - it passes possitively all particles - it means returns always False
78 //Class describing cut on pairs of particles
80 AliHBTEmptyPairCut(){};
81 AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in):AliHBTPairCut(in){};
82 virtual ~AliHBTEmptyPairCut(){};
84 Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
85 Bool_t IsEmpty() const {return kTRUE;}
87 ClassDef(AliHBTEmptyPairCut,1)
92 /******************************************************************/
93 /******************************************************************/
94 /******************************************************************/
96 class AliHbtBasePairCut: public TObject
98 //This class defines the range of some property - pure virtual
99 //Property is coded by AliHBTCutTypes type
103 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
104 fMin(min),fMax(max),fProperty(prop){}
106 virtual ~AliHbtBasePairCut(){}
108 Bool_t Pass(AliHBTPair* pair) const;
110 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
112 void SetMinimum(Double_t min){fMin = min;}
113 void SetMaximum(Double_t max){fMax = max;}
115 Double_t GetMinimum() const {return fMin;}
116 Double_t GetMaximum() const {return fMax;}
118 AliHBTPairCutProperty GetProperty() const {return fProperty;}
121 virtual Double_t GetValue(AliHBTPair* pair) const = 0;
123 Double_t fMin; // Lower boundary of the range
124 Double_t fMax; // Upper boundary of the range
126 AliHBTPairCutProperty fProperty; // The property itself
128 ClassDef(AliHbtBasePairCut,1)
132 inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
134 //checks if pair proprty is in range
135 //null pointer check is made by AliHBTPairCut, so here is unnecesary
137 Double_t value = GetValue(pair);
138 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
139 else return kTRUE; //rejected
141 /******************************************************************/
142 /******************************************************************/
143 /******************************************************************/
144 class AliHBTQInvCut: public AliHbtBasePairCut
147 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
148 virtual ~AliHBTQInvCut(){}
150 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
152 ClassDef(AliHBTQInvCut,1)
156 class AliHBTKtCut: public AliHbtBasePairCut {
158 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
159 virtual ~AliHBTKtCut(){}
161 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKt();}
163 ClassDef(AliHBTKtCut,1)
166 class AliHBTKStarCut: public AliHbtBasePairCut
169 AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
170 virtual ~AliHBTKStarCut(){}
172 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
174 ClassDef(AliHBTKStarCut,1)
177 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
180 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
181 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
182 virtual ~AliHBTQSideCMSLCCut(){}
184 virtual Double_t GetValue(AliHBTPair* pair) const
185 {return pair->GetQSideCMSLC();}
187 ClassDef(AliHBTQSideCMSLCCut,1)
191 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
194 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
195 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
196 virtual ~AliHBTQOutCMSLCCut(){}
198 virtual Double_t GetValue(AliHBTPair* pair) const
199 {return pair->GetQOutCMSLC();}
201 ClassDef(AliHBTQOutCMSLCCut,1)
204 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
207 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
208 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
209 virtual ~AliHBTQLongCMSLCCut(){}
211 virtual Double_t GetValue(AliHBTPair* pair) const
212 {return pair->GetQLongCMSLC();}
214 ClassDef(AliHBTQLongCMSLCCut,1)
218 class AliHBTAvSeparationCut: public AliHbtBasePairCut
221 AliHBTAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
222 AliHbtBasePairCut(min,max,kHbtPairCutPropAvSepar){}
223 virtual ~AliHBTAvSeparationCut(){}
226 virtual Double_t GetValue(AliHBTPair* pair) const;
227 ClassDef(AliHBTAvSeparationCut,1)