]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HBTAN/AliHBTPairCut.h
The native random generator of Pythia commented out
[u/mrichter/AliRoot.git] / HBTAN / AliHBTPairCut.h
1 #ifndef ALIHBTPAIRCUT_H
2 #define ALIHBTPAIRCUT_H
3
4 /* $Id$ */
5
6 //Piotr Skowronski@cern.ch
7 //Class implements cut on the pair of particles
8 //
9 //more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
10  
11 #include "AliHBTPair.h"
12
13 class AliHBTParticleCut;
14 class AliHbtBasePairCut;
15
16 enum AliHBTPairCutProperty
17 {
18   kHbtPairCutPropQInv, //Q invariant
19   kHbtPairCutPropKt,
20   kHbtPairCutPropKStar,
21   kHbtPairCutPropQSideCMSLC,
22   kHbtPairCutPropQOutCMSLC,
23   kHbtPairCutPropQLongCMSLC,
24   kHbtPairCutPropNone
25 };
26
27 class AliHBTPairCut: public TNamed
28 {
29  public:
30   AliHBTPairCut();
31   AliHBTPairCut(const AliHBTPairCut& in);
32   AliHBTPairCut& operator = (const AliHBTPairCut& in);
33   
34   virtual ~AliHBTPairCut();
35   virtual Bool_t Pass(AliHBTPair* pair) const;
36   virtual Bool_t PassPairProp(AliHBTPair* pair) const;
37      
38   virtual Bool_t IsEmpty() const {return kFALSE;}
39   void SetFirstPartCut(AliHBTParticleCut* cut);  //sets the cut on the first particle
40   void SetSecondPartCut(AliHBTParticleCut* cut); //sets the cut on the second particle
41   
42   void SetPartCut(AliHBTParticleCut* cut);//sets the the same cut on both particles
43   
44   void AddBasePairCut(AliHbtBasePairCut* cut);
45   
46   void SetQInvRange(Double_t min, Double_t max);
47   void SetKtRange(Double_t min, Double_t max);
48   void SetKStarRange(Double_t min, Double_t max);
49   void SetQOutCMSLRange(Double_t min, Double_t max);
50   void SetQSideCMSLRange(Double_t min, Double_t max);
51   void SetQLongCMSLRange(Double_t min, Double_t max);
52   
53   AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
54   AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
55   
56  protected:
57   AliHBTParticleCut*      fFirstPartCut;//cut on first particle in pair
58   AliHBTParticleCut*      fSecondPartCut;//cut on second particle in pair
59   
60   AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
61   Int_t fNCuts;//Number of cuts in fCuts array
62   
63   
64   AliHbtBasePairCut* FindCut(AliHBTPairCutProperty cut);
65  private:
66   static const Int_t fgkMaxCuts; // Max number of cuts
67   
68   ClassDef(AliHBTPairCut,2)
69     
70 };
71 /******************************************************************/
72 /******************************************************************/
73 /******************************************************************/
74
75 class AliHBTEmptyPairCut:  public AliHBTPairCut
76 {
77   //Empty - it passes possitively all particles - it means returns always False
78   //Class describing cut on pairs of particles
79  public:
80   AliHBTEmptyPairCut(){};
81   AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in){}; 
82   virtual ~AliHBTEmptyPairCut(){};
83   
84   Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
85   Bool_t IsEmpty() const {return kTRUE;}
86   
87   ClassDef(AliHBTEmptyPairCut,1)
88     
89 };
90
91
92
93 /******************************************************************/
94 /******************************************************************/
95 /******************************************************************/
96
97 class AliHbtBasePairCut: public TObject
98 {
99   //This class defines the range of some property - pure virtual
100   //Property is coded by AliHBTCutTypes type
101    
102  public:
103      
104   AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
105     fMin(min),fMax(max),fProperty(prop){}
106   
107   virtual   ~AliHbtBasePairCut(){}
108      
109   Bool_t    Pass(AliHBTPair* pair) const;
110   
111   void      SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
112   
113   void      SetMinimum(Double_t min){fMin = min;}
114   void      SetMaximum(Double_t max){fMax = max;}
115   
116   Double_t  GetMinimum() const {return fMin;}
117   Double_t  GetMaximum() const {return fMax;}
118   
119   AliHBTPairCutProperty GetProperty() const {return fProperty;}
120   
121  protected:
122   virtual Double_t  GetValue(AliHBTPair* pair) const = 0;
123   
124   Double_t fMin; // Lower boundary of the range
125   Double_t fMax; // Upper boundary of the range
126   
127   AliHBTPairCutProperty fProperty; // The property itself
128   
129   ClassDef(AliHbtBasePairCut,1)
130  
131  };
132
133 inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
134 {
135   Double_t value = GetValue(pair);
136   if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
137   else return kTRUE; //rejected
138 }
139 /******************************************************************/
140 /******************************************************************/
141 /******************************************************************/
142 class AliHBTQInvCut: public AliHbtBasePairCut
143 {
144  public:
145   AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
146   virtual ~AliHBTQInvCut(){}
147  protected:
148   virtual Double_t  GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
149   
150   ClassDef(AliHBTQInvCut,1)
151  };
152
153
154 class AliHBTKtCut: public AliHbtBasePairCut {
155  public:
156   AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
157   virtual ~AliHBTKtCut(){}
158  protected:
159   virtual Double_t  GetValue(AliHBTPair* pair) const {return pair->GetKt();}
160
161   ClassDef(AliHBTKtCut,1)
162  };
163
164 class AliHBTKStarCut: public AliHbtBasePairCut
165 {
166  public:
167   AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
168   virtual ~AliHBTKStarCut(){}
169  protected:
170   virtual Double_t  GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
171
172   ClassDef(AliHBTKStarCut,1)
173 };
174
175 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
176 {
177  public:
178   AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
179     AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
180   virtual ~AliHBTQSideCMSLCCut(){}
181  protected:
182   virtual Double_t  GetValue(AliHBTPair* pair) const 
183     {return pair->GetQSideCMSLC();}
184
185   ClassDef(AliHBTQSideCMSLCCut,1)
186 };
187
188
189 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
190 {
191  public:
192   AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
193     AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
194   virtual ~AliHBTQOutCMSLCCut(){}
195  protected:
196   virtual Double_t  GetValue(AliHBTPair* pair) const 
197     {return pair->GetQOutCMSLC();}
198   
199   ClassDef(AliHBTQOutCMSLCCut,1)
200 };
201
202 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
203 {
204  public:
205   AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
206     AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
207   virtual ~AliHBTQLongCMSLCCut(){}
208  protected:
209   virtual Double_t  GetValue(AliHBTPair* pair) const 
210     {return pair->GetQLongCMSLC();}
211
212   ClassDef(AliHBTQLongCMSLCCut,1)
213 };
214
215 #endif