]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HBTAN/AliHBTPairCut.h
Missing include files added
[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   kHbtPairCutPropKStar,
20   kHbtPairCutPropQSideCMSLC,
21   kHbtPairCutPropQOutCMSLC,
22   kHbtPairCutPropQLongCMSLC,
23   kHbtPairCutPropNone
24  };
25
26 class AliHBTPairCut: public TNamed
27 {
28   public:
29     AliHBTPairCut();
30     AliHBTPairCut(const AliHBTPairCut&);
31     
32     virtual ~AliHBTPairCut();
33     virtual Bool_t Pass(AliHBTPair* pair);
34     virtual Bool_t PassPairProp(AliHBTPair* pair);
35      
36     virtual Bool_t IsEmpty() {return kFALSE;}
37     void SetFirstPartCut(AliHBTParticleCut*);  //sets the cut on the first particle
38     void SetSecondPartCut(AliHBTParticleCut*); //sets the cut on the first particle
39     
40     void SetPartCut(AliHBTParticleCut*);//sets the the same cut on both particles
41      
42     void AddBasePairCut(AliHbtBasePairCut*);
43     
44     void SetQInvRange(Double_t min, Double_t max);
45     void SetKtRange(Double_t min, Double_t max);
46     void SetKStarRange(Double_t min, Double_t max);
47     void SetQOutCMSLRange(Double_t min, Double_t max);
48     void SetQSideCMSLRange(Double_t min, Double_t max);
49     void SetQLongCMSLRange(Double_t min, Double_t max);
50     
51     AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
52     AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
53     
54   protected:
55     AliHBTParticleCut*      fFirstPartCut;//cut on first particle in pair
56     AliHBTParticleCut*      fSecondPartCut;//cut on second particle in pair
57
58     AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
59     Int_t fNCuts;//Number of cuts in fCuts array
60        
61        
62     AliHbtBasePairCut* FindCut(AliHBTPairCutProperty);
63   private:
64     static const Int_t fkgMaxCuts;
65   public:
66     ClassDef(AliHBTPairCut,2)
67  
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&){}; 
80     virtual ~AliHBTEmptyPairCut(){};
81     
82     Bool_t Pass(AliHBTPair*) {return kFALSE;} //accpept everything
83     Bool_t IsEmpty() {return kTRUE;}
84
85     ClassDef(AliHBTEmptyPairCut,1)
86  
87 };
88
89
90
91 /******************************************************************/
92 /******************************************************************/
93 /******************************************************************/
94
95 class AliHbtBasePairCut: public TObject
96  {
97    //This class defines the range of some property - pure virtual
98    //Property is coded by AliHBTCutTypes type
99    
100    public:
101      
102      AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
103                       fMin(min),fMax(max),fProperty(prop){}
104
105      virtual   ~AliHbtBasePairCut(){}
106      
107      Bool_t    Pass(AliHBTPair*);
108      
109      void      SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
110
111      void      SetMinimum(Double_t min){fMin = min;}
112      void      SetMaximum(Double_t max){fMax = max;}
113      
114      Double_t  GetMinimum() const {return fMin;}
115      Double_t  GetMaximum() const {return fMax;}
116      
117      AliHBTPairCutProperty GetProperty() const {return fProperty;}
118      
119    protected:
120      virtual Double_t  GetValue(AliHBTPair*) = 0;
121
122      Double_t fMin;
123      Double_t fMax;
124      
125      AliHBTPairCutProperty fProperty;
126      
127    private:
128    public:
129      ClassDef(AliHbtBasePairCut,1)
130    
131  };
132
133 inline Bool_t
134 AliHbtBasePairCut::Pass(AliHBTPair* pair) 
135  {
136    Double_t value = GetValue(pair);
137    if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
138    else return kTRUE; //rejected
139  }
140 /******************************************************************/
141 /******************************************************************/
142 /******************************************************************/
143 class AliHBTQInvCut: public AliHbtBasePairCut
144  {
145    public:
146     AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
147     virtual ~AliHBTQInvCut(){}
148    protected:
149     virtual Double_t  GetValue(AliHBTPair* pair){return pair->GetQInv();}
150    private:
151    public:
152      ClassDef(AliHBTQInvCut,1)
153  };
154
155
156 class AliHBTKtCut: public AliHbtBasePairCut
157  {
158    public:
159     AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
160     virtual ~AliHBTKtCut(){}
161    protected:
162     virtual Double_t  GetValue(AliHBTPair* pair){return pair->GetKt();}
163    private:
164    public:
165      ClassDef(AliHBTKtCut,1)
166  };
167
168 class AliHBTKStarCut: public AliHbtBasePairCut
169  {
170    public:
171     AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
172     virtual ~AliHBTKStarCut(){}
173    protected:
174     virtual Double_t  GetValue(AliHBTPair* pair){return pair->GetKStar();}
175    private:
176    public:
177      ClassDef(AliHBTKStarCut,1)
178  };
179
180 class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
181  {
182    public:
183     AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
184               AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
185     virtual ~AliHBTQSideCMSLCCut(){}
186    protected:
187     virtual Double_t  GetValue(AliHBTPair* pair){return pair->GetQSideCMSLC();}
188    private:
189    public:
190      ClassDef(AliHBTQSideCMSLCCut,1)
191  };
192
193
194 class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
195  {
196    public:
197     AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
198               AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
199     virtual ~AliHBTQOutCMSLCCut(){}
200    protected:
201     virtual Double_t  GetValue(AliHBTPair* pair){return pair->GetQOutCMSLC();}
202    private:
203    public:
204      ClassDef(AliHBTQOutCMSLCCut,1)
205  };
206
207 class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
208  {
209    public:
210     AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
211               AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
212     virtual ~AliHBTQLongCMSLCCut(){}
213    protected:
214     virtual Double_t  GetValue(AliHBTPair* pair){return pair->GetQLongCMSLC();}
215    private:
216    public:
217      ClassDef(AliHBTQLongCMSLCCut,1)
218  };
219
220 #endif