Bug correction: files closed to early
[u/mrichter/AliRoot.git] / HBTAN / AliHBTFunction.h
1 //Piotr Skowronski@cern.ch
2
3 #ifndef ALIHBTFUNCTION_H
4 #define ALIHBTFUNCTION_H
5
6 #include "AliHBTParticleCut.h"
7 #include "AliHBTPairCut.h"
8 #include "AliHBTPair.h"
9
10 #include <TH2.h>
11 #include <TH3.h>
12
13
14 class AliHBTAnalysis;
15
16 class AliHBTFunction: public TNamed
17 //Abstract base class for HBT functions
18 {
19   public:
20     AliHBTFunction();
21     AliHBTFunction(const char* name,const char* title);
22     virtual ~AliHBTFunction();
23     
24     virtual TH1* GetNumerator() =0;
25     virtual TH1* GetDenominator() =0;
26     virtual TH1* GetResult() = 0;
27
28     virtual void Write();
29     
30     TH1* GetRatio(Double_t normfactor = 1.0);
31     void Rename(const Char_t * name); //renames the function and histograms ==title is the same that name
32     void Rename(const Char_t * name, const Char_t * title); //renames and retitle the function and histograms
33     
34     void SetPairCut(AliHBTPairCut*);
35     
36     virtual AliHBTPair* CheckPair(AliHBTPair* pair);
37     
38   protected:
39     
40     AliHBTPairCut*      fPairCut;
41     
42   public:  
43    ClassDef(AliHBTFunction,1)
44 };
45 /******************************************************************/
46 inline AliHBTPair* AliHBTFunction::CheckPair(AliHBTPair* pair)
47 {
48   //check if pair and both particles meets the cut criteria
49   if(fPairCut->Pass(pair)) //if the pair is BAD
50    {//it is BAD 
51     pair = pair->GetSwapedPair();
52     if(fPairCut->Pass(pair)) //so try reverse combination
53      { 
54        return 0x0;//it is BAD as well - so return
55      }
56    }
57   return pair; 
58 }
59
60 /******************************************************************/
61 /******************************************************************/
62 /******************************************************************/
63 class AliHBTOnePairFctn: public AliHBTFunction
64 {
65   public:
66     AliHBTOnePairFctn(){}
67     virtual ~AliHBTOnePairFctn(){}
68     
69     virtual void ProcessSameEventParticles(AliHBTPair* pair) = 0;
70     virtual void ProcessDiffEventParticles(AliHBTPair* pair) = 0;
71
72
73     
74   protected:
75   public:  
76    ClassDef(AliHBTOnePairFctn,1)
77   
78 };
79 /******************************************************************/
80 /******************************************************************/
81 /******************************************************************/
82 class AliHBTTwoPairFctn: public AliHBTFunction
83 {
84   public:
85     AliHBTTwoPairFctn(){};
86     virtual ~AliHBTTwoPairFctn(){};
87     
88     virtual void 
89     ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
90     virtual void 
91     ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
92
93              
94   protected:
95   public:  
96    ClassDef(AliHBTTwoPairFctn,1)
97   
98 };
99 /******************************************************************/
100 /******************************************************************/
101 /******************************************************************/
102
103
104 class AliHBTOnePairFctn1D: public AliHBTOnePairFctn
105 {
106  public:
107   AliHBTOnePairFctn1D(Int_t nbins = 100, Double_t maxXval = 0.15, Double_t minXval = 0.0);
108   virtual ~AliHBTOnePairFctn1D();
109   
110   
111   TH1* GetNumerator(){return fNumerator;}
112   TH1* GetDenominator(){return fDenominator;}
113
114   void ProcessSameEventParticles(AliHBTPair* pair);
115   void ProcessDiffEventParticles(AliHBTPair* pair);
116   Double_t Scale();  
117   void SetNumberOfBinsToScale();
118  protected:
119   //retruns velue to be histogrammed
120   virtual Double_t GetValue(AliHBTPair* pair) = 0; 
121
122   TH1D* fNumerator;
123   TH1D* fDenominator;
124   Int_t fNBinsToScale;
125   
126  public:
127   ClassDef(AliHBTOnePairFctn1D,2)
128 };
129
130 /******************************************************************/
131 /******************************************************************/
132 /******************************************************************/
133
134 class AliHBTOnePairFctn2D: public AliHBTOnePairFctn
135 {
136  public:
137   AliHBTOnePairFctn2D(Int_t nXbins = 200, Double_t maxXval = 1.5, Double_t minXval = 0.0, 
138                       Int_t nYbins = 200, Double_t maxYval = .15, Double_t minYval =-0.15);
139   ~AliHBTOnePairFctn2D();
140   
141   TH1* GetNumerator(){return fNumerator;}
142   TH1* GetDenominator(){return fDenominator;}
143   
144   void ProcessSameEventParticles(AliHBTPair* pair);
145   void ProcessDiffEventParticles(AliHBTPair* pair);
146  
147
148  protected:
149   virtual void GetValues(AliHBTPair* pair, Double_t&, Double_t&) = 0;
150
151   TH2D* fNumerator;
152   TH2D* fDenominator;
153   
154  public:
155   ClassDef(AliHBTOnePairFctn2D,1)
156 };
157 /******************************************************************/
158 /******************************************************************/
159 /******************************************************************/
160
161 class AliHBTOnePairFctn3D: public AliHBTOnePairFctn
162 {
163  public:
164   AliHBTOnePairFctn3D(Int_t nXbins = 200, Double_t maxXval = 1.5, Double_t minXval = 0.0, 
165                       Int_t nYbins = 200, Double_t maxYval = .15, Double_t minYval =-0.15, 
166                       Int_t nZbins = 200, Double_t maxZval = .15, Double_t minZval =-0.15);
167             
168   virtual ~AliHBTOnePairFctn3D();
169
170   TH1* GetNumerator(){return fNumerator;}
171   TH1* GetDenominator(){return fDenominator;}
172
173  protected:
174   TH3D* fNumerator;
175   TH3D* fDenominator;
176  public:
177   ClassDef(AliHBTOnePairFctn3D,1)
178 };
179 /******************************************************************/
180 /******************************************************************/
181 /******************************************************************/
182
183 class AliHBTTwoPairFctn1D: public AliHBTTwoPairFctn
184 {
185  public:
186   AliHBTTwoPairFctn1D(Int_t nbins = 200, Double_t maxval = 1.5, Double_t minval = 0.0);
187   AliHBTTwoPairFctn1D(const char*,const char*,
188                       Int_t nbins = 200, Double_t maxval = 1.5, Double_t minval = 0.0);
189   ~AliHBTTwoPairFctn1D();
190   
191   TH1* GetNumerator(){return fNumerator;}
192   TH1* GetDenominator(){return fDenominator;}
193   
194   void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
195   void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
196  
197  protected:
198   virtual Double_t GetValue(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
199
200   TH1D* fNumerator;
201   TH1D* fDenominator;
202   
203  public:
204   ClassDef(AliHBTTwoPairFctn1D,1)
205 };
206
207
208 /******************************************************************/
209 /******************************************************************/
210 /******************************************************************/
211 class AliHBTTwoPairFctn2D: public AliHBTTwoPairFctn
212 {
213  public:
214   AliHBTTwoPairFctn2D(Int_t nXbins = 200, Double_t maxXval = 1.5, Double_t minXval = 0.0, 
215                        Int_t nYbins = 200, Double_t maxYval = .15, Double_t minYval =-0.15);
216   virtual ~AliHBTTwoPairFctn2D();
217   
218   TH1* GetNumerator(){return fNumerator;}
219   TH1* GetDenominator(){return fDenominator;}
220   
221   void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
222   void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
223  
224   
225  protected:
226   virtual void GetValues(AliHBTPair*,AliHBTPair*, Double_t&, Double_t&) = 0;
227
228   TH2D* fNumerator;
229   TH2D* fDenominator;
230   
231  public:
232   ClassDef(AliHBTTwoPairFctn2D,1)
233 };
234
235
236 /******************************************************************/
237 /******************************************************************/
238 /******************************************************************/
239 class AliHBTTwoPairFctn3D: public AliHBTTwoPairFctn
240 {
241  public:
242   AliHBTTwoPairFctn3D(Int_t nXbins = 200, Double_t maxXval = 1.5, Double_t minXval = 0.0, 
243                        Int_t nYbins = 200, Double_t maxYval = .15, Double_t minYval =-0.15, 
244                        Int_t nZbins = 200, Double_t maxZval = .15, Double_t minZval =-0.15){}
245   virtual ~AliHBTTwoPairFctn3D(){}
246   
247   TH1* GetNumerator(){return fNumerator;}
248   TH1* GetDenominator(){return fDenominator;}
249   
250   void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair){}
251   void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair){}
252  
253   
254  protected:
255   virtual void GetValues(AliHBTPair*,AliHBTPair*, Double_t&, Double_t&,Double_t&) = 0;
256
257   TH3D* fNumerator;
258   TH3D* fDenominator;
259   
260  public:
261   ClassDef(AliHBTTwoPairFctn3D,1)
262 };
263
264 /******************************************************************/
265 /******************************************************************/
266 /******************************************************************/
267
268
269
270 #endif