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