]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HBTAN/AliHBTFunction.cxx
a80843f6ff26f445646f28de8aba8f374a66f5f0
[u/mrichter/AliRoot.git] / HBTAN / AliHBTFunction.cxx
1 #include "AliHBTFunction.h"
2 /******************************************************************/
3 /*
4 Piotr Krzysztof Skowronski
5 Piotr.Skowronski@cern.ch
6 Base classes for HBT functions
7
8              function
9               /    \
10              /      \
11             /        \
12            /          \
13           /            \
14          /              \
15         /                \
16     two part          four part 
17     /   |   \         /   |   \
18    /    |    \       /    |    \
19   1D   2D    3D     1D   2D    3D
20
21  four particle functions are intendent to be resolution functions:
22  it is mecessary to have simulated particle pair corresponding to given
23  recontructed track pair in order to calculate function simualted value 
24  and recontructed value to be further histogrammed
25  
26 */
27 /******************************************************************/
28 /******************************************************************/
29
30 ClassImp( AliHBTFunction )
31
32 AliHBTFunction::AliHBTFunction()
33 {
34  
35  fPairCut = new AliHBTEmptyPairCut(); //dummy cut
36 }
37
38 void AliHBTFunction::
39 Write()
40  {
41    if (GetNumerator()) GetNumerator()->Write();
42    if (GetDenominator()) GetDenominator()->Write();
43    TH1* res = GetResult();
44    if (res) GetResult()->Write();
45  }
46 /******************************************************************/
47
48 TH1* AliHBTFunction::
49 GetRatio(Double_t normfactor)
50  {
51    TString str = fName + " ratio";
52    TH1 *result = (TH1*)GetNumerator()->Clone(str.Data());
53    
54    result->SetTitle(str.Data());
55    result->Sumw2();
56    
57    result->Divide(GetNumerator(),GetDenominator(),normfactor);
58    
59    return result;
60    
61  }
62 /******************************************************************/
63 void AliHBTFunction::SetPairCut(AliHBTPairCut* cut)
64 {
65 //Sets new Pair Cut. Old one is deleted
66 //Note that it is created new object instead of simple pointer set
67 //I do not want to have pointer 
68 //to object created somewhere else
69 //because in that case I could not believe that 
70 //it would always exist (sb could delete it)
71 //so we have always own copy
72
73  if(!cut) 
74    {
75      Error("AliHBTFunction::SetPairCut","argument is NULL");
76      return;
77    }
78  delete fPairCut;
79  fPairCut = (AliHBTPairCut*)cut->Clone();
80  
81 }
82
83 /******************************************************************/
84
85 void AliHBTFunction::
86 Rename(const Char_t * name)
87  {
88  //renames the function and histograms
89   SetName(name);
90   SetTitle(name);
91   
92   TString numstr = fName + " Numerator";  //title and name of the 
93                                            //numerator histogram
94   TString denstr = fName + " Denominator";//title and name of the 
95                                            //denominator histogram
96  
97   GetNumerator()->SetName(numstr.Data());
98   GetNumerator()->SetTitle(numstr.Data());
99   
100   GetDenominator()->SetName(denstr.Data());
101   GetDenominator()->SetTitle(denstr.Data());
102   
103  }
104
105 void AliHBTFunction::
106 Rename(const Char_t * name, const Char_t * title)
107  {
108  //renames and retitle the function and histograms
109  
110   SetName(name);
111   SetTitle(title);
112   
113   TString numstrn = fName + " Numerator";  //name of the 
114                                            //numerator histogram
115
116   TString numstrt = fTitle + " Numerator";  //title of the 
117                                            //numerator histogram
118                    
119   TString denstrn = fName + " Denominator";//name of the 
120                                            //denominator histogram
121
122   TString denstrt = fTitle + " Denominator";//title of the 
123                                            //denominator histogram
124                    
125  
126   GetNumerator()->SetName(numstrn.Data());
127   GetNumerator()->SetTitle(numstrt.Data());
128   
129   GetDenominator()->SetName(denstrn.Data());
130   GetDenominator()->SetTitle(denstrt.Data());
131
132
133  }
134
135 /******************************************************************/
136 /******************************************************************/
137 /******************************************************************/
138
139 ClassImp( AliHBTTwoPartFctn )
140
141 /******************************************************************/
142 /******************************************************************/
143 /******************************************************************/
144
145 ClassImp( AliHBTFourPartFctn)
146
147 /******************************************************************/
148 /******************************************************************/
149 /******************************************************************/
150
151 ClassImp( AliHBTTwoPartFctn1D )
152
153 AliHBTTwoPartFctn1D::
154 AliHBTTwoPartFctn1D(Int_t nbins, Double_t maxXval, Double_t minXval)
155  {
156  //Constructor of Two Part One Dimentional Function 
157  // nbins: number of bins in histograms - default 100
158  // maxXval and minXval: range of histgram(s) default 0 - 0.15 (GeV)
159  
160  
161    TString numstr = fName + " Numerator";  //title and name of the 
162                                            //numerator histogram
163    TString denstr = fName + " Denominator";//title and name of the 
164                                            //denominator histogram
165          
166    fNumerator   = new TH1D(numstr.Data(),numstr.Data(),nbins,minXval,maxXval);
167    fDenominator = new TH1D(denstr.Data(),denstr.Data(),nbins,minXval,maxXval);
168    
169    fNumerator->Sumw2();
170    fDenominator->Sumw2();
171    
172  }
173 /******************************************************************/
174 AliHBTTwoPartFctn1D::~AliHBTTwoPartFctn1D()
175 {
176   delete fNumerator;
177   delete fDenominator;
178 }
179 /******************************************************************/
180 /******************************************************************/
181 /******************************************************************/
182
183 ClassImp( AliHBTTwoPartFctn2D )
184
185 AliHBTTwoPartFctn2D::
186 AliHBTTwoPartFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval , 
187                     Int_t nYbins, Double_t maxYval, Double_t minYval)
188
189 {
190    TString numstr = fName + " Numerator";  //title and name of the 
191                                            //numerator histogram
192    TString denstr = fName + " Denominator";//title and name of the 
193                                            //denominator histogram
194          
195    fNumerator   = new TH2D(numstr.Data(),numstr.Data(),
196                            nXbins,minXval,maxXval,
197                nYbins,minYval,maxYval);
198                
199    fDenominator = new TH2D(denstr.Data(),denstr.Data(),
200                            nXbins,minXval,maxXval,
201                nYbins,minYval,maxYval);
202    
203    fNumerator->Sumw2();
204    fDenominator->Sumw2();
205
206 }         
207 AliHBTTwoPartFctn2D::~AliHBTTwoPartFctn2D()
208 {
209   delete fNumerator;
210   delete fDenominator;
211 }
212 void AliHBTTwoPartFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
213 {
214   pair = CheckPair(pair);
215   if(pair) 
216    { 
217      Double_t x,y;
218      GetValues(pair,x,y);
219      fNumerator->Fill(y,x);
220    }
221 }
222
223 void AliHBTTwoPartFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
224 {
225   pair = CheckPair(pair);
226   if(pair) 
227    { 
228      Double_t x,y;
229      GetValues(pair,x,y);
230      fDenominator->Fill(y,x);
231    }
232
233 }
234
235
236 /******************************************************************/
237 /******************************************************************/
238 /******************************************************************/
239
240 ClassImp( AliHBTTwoPartFctn3D)
241
242 AliHBTTwoPartFctn3D::
243 AliHBTTwoPartFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval, 
244                     Int_t nYbins, Double_t maxYval, Double_t minYval, 
245                     Int_t nZbins, Double_t maxZval, Double_t minZval)
246
247 {
248    TString numstr = fName + " Numerator";  //title and name of the 
249                                            //numerator histogram
250    TString denstr = fName + " Denominator";//title and name of the 
251                                            //denominator histogram
252          
253    fNumerator   = new TH3D(numstr.Data(),numstr.Data(),
254                            nXbins,minXval,maxXval,
255                nYbins,minYval,maxYval,
256                nZbins,minZval,maxZval);
257                
258    fDenominator = new TH3D(denstr.Data(),denstr.Data(),
259                            nXbins,minXval,maxXval,
260                nYbins,minYval,maxYval,
261                nZbins,minZval,maxZval);
262    
263    fNumerator->Sumw2();
264    fDenominator->Sumw2();
265
266 }         
267
268
269 AliHBTTwoPartFctn3D::~AliHBTTwoPartFctn3D()
270 {
271   delete fNumerator;
272   delete fDenominator;
273 }
274
275
276 /******************************************************************/
277 /******************************************************************/
278 /******************************************************************/
279 ClassImp( AliHBTFourPartFctn2D)
280
281
282 AliHBTFourPartFctn2D::
283 AliHBTFourPartFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval , 
284                     Int_t nYbins, Double_t maxYval, Double_t minYval)
285
286 {
287    TString numstr = fName + " Numerator";  //title and name of the 
288                                            //numerator histogram
289    TString denstr = fName + " Denominator";//title and name of the 
290                                            //denominator histogram
291          
292    fNumerator   = new TH2D(numstr.Data(),numstr.Data(),
293                            nXbins,minXval,maxXval,
294                nYbins,minYval,maxYval);
295                
296    fDenominator = new TH2D(denstr.Data(),denstr.Data(),
297                            nXbins,minXval,maxXval,
298                nYbins,minYval,maxYval);
299    
300    fNumerator->Sumw2();
301    fDenominator->Sumw2();
302
303 }         
304 AliHBTFourPartFctn2D::~AliHBTFourPartFctn2D()
305 {
306   delete fNumerator;
307   delete fDenominator;
308 }
309 void AliHBTFourPartFctn2D::
310 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
311 {
312   partpair  = CheckPair(partpair);
313   trackpair = CheckPair(trackpair);
314   if( partpair && trackpair) 
315    { 
316      Double_t x,y;
317      GetValues(trackpair,partpair,x,y);
318      fNumerator->Fill(y,x);
319    }
320 }
321
322 void AliHBTFourPartFctn2D::
323 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
324 {
325   partpair  = CheckPair(partpair);
326   trackpair = CheckPair(trackpair);
327   if( partpair && trackpair)
328    { 
329      Double_t x,y;
330      GetValues(trackpair,partpair,x,y);
331      fDenominator->Fill(y,x);
332    }
333
334 }
335