Transition to NewIO
[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   ClassDef(AliHBTPairCut,2)
68 };
69 /******************************************************************/
70 /******************************************************************/
71 /******************************************************************/
72
73 class AliHBTEmptyPairCut:  public AliHBTPairCut
74 {
75   //Empty - it passes possitively all particles - it means returns always False
76   //Class describing cut on pairs of particles
77  public:
78   AliHBTEmptyPairCut(){};
79   AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in){}; 
80   virtual ~AliHBTEmptyPairCut(){};
81   
82   Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
83   Bool_t IsEmpty() const {return kTRUE;}
84   
85   ClassDef(AliHBTEmptyPairCut,1)
86 };
87
88
89
90 /******************************************************************/
91 /******************************************************************/
92 /******************************************************************/
93
94 class AliHbtBasePairCut: public TObject
95 {
96   //This class defines the range of some property - pure virtual
97   //Property is coded by AliHBTCutTypes type
98    
99  public:
100      
101   AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
102     fMin(min),fMax(max),fProperty(prop){}
103   
104   virtual   ~AliHbtBasePairCut(){}
105      
106   Bool_t    Pass(AliHBTPair* pair) const;
107   
108   void      SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
109   
110   void      SetMinimum(Double_t min){fMin = min;}
111   void      SetMaximum(Double_t max){fMax = max;}
112   
113   Double_t  GetMinimum() const {return fMin;}
114   Double_t  GetMaximum() const {return fMax;}
115   
116   AliHBTPairCutProperty GetProperty() const {return fProperty;}
117   
118  protected:
119   virtual Double_t  GetValue(AliHBTPair* pair) const = 0;
120   
121   Double_t fMin; // Lower boundary of the range
122   Double_t fMax; // Upper boundary of the range
123   
124   AliHBTPairCutProperty fProperty; // The property itself
125   
126   ClassDef(AliHbtBasePairCut,1)
127  
128  };
129
130 inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
131 {
132   Double_t value = GetValue(pair);
133   if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
134   else return kTRUE; //rejected
135 }
136 /******************************************************************/
137 /******************************************************************/
138 /******************************************************************/
139 class AliHBTQInvCut: public AliHbtBasePairCut
140 {
141  public:
142   AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
143   virtual ~AliHBTQInvCut(){}
144  protected:
145   virtual Double_t  GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
146   
147   ClassDef(AliHBTQInvCut,1)
148  };
149
150
151 class AliHBTKtCut: public AliHbtBasePairCut {
152  public:
153   AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
154   virtual ~AliHBTKtCut(){}
155  protected:
156   virtual Double_t  GetValue(AliHBTPair* pair) const {return pair->GetKt();}
157
158   ClassDef(AliHBTKtCut,1)
159  };
160
161 class AliHBTKStarCut: public AliHbtBasePairCut
162 {
163  public:
164   AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
165   virtual ~AliHBTKStarCut(){}
166  protected:
167   virtual Double_t  GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
168
169   ClassDef(AliHBTKStarCut,1)
170 };
171
172 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
173 {
174  public:
175   AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
176     AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
177   virtual ~AliHBTQSideCMSLCCut(){}
178  protected:
179   virtual Double_t  GetValue(AliHBTPair* pair) const 
180     {return pair->GetQSideCMSLC();}
181
182   ClassDef(AliHBTQSideCMSLCCut,1)
183 };
184
185
186 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
187 {
188  public:
189   AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
190     AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
191   virtual ~AliHBTQOutCMSLCCut(){}
192  protected:
193   virtual Double_t  GetValue(AliHBTPair* pair) const 
194     {return pair->GetQOutCMSLC();}
195   
196   ClassDef(AliHBTQOutCMSLCCut,1)
197 };
198
199 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
200 {
201  public:
202   AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
203     AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
204   virtual ~AliHBTQLongCMSLCCut(){}
205  protected:
206   virtual Double_t  GetValue(AliHBTPair* pair) const 
207     {return pair->GetQLongCMSLC();}
208
209   ClassDef(AliHBTQLongCMSLCCut,1)
210 };
211
212 #endif