1b446896 |
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 | / \ |
27b3fe5d |
16 | one pair two pair |
1b446896 |
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 | |
976183fd |
30 | #include <iostream.h> |
1b446896 |
31 | ClassImp( AliHBTFunction ) |
32 | |
33 | AliHBTFunction::AliHBTFunction() |
34 | { |
5a9432a9 |
35 | |
36 | fPairCut = new AliHBTEmptyPairCut(); //dummy cut |
1b446896 |
37 | } |
2674b9ff |
38 | /******************************************************************/ |
39 | |
40 | AliHBTFunction::~AliHBTFunction() |
41 | { |
42 | if (fPairCut) delete fPairCut; |
43 | } |
44 | /******************************************************************/ |
1b446896 |
45 | |
46 | void AliHBTFunction:: |
47 | Write() |
48 | { |
49 | if (GetNumerator()) GetNumerator()->Write(); |
50 | if (GetDenominator()) GetDenominator()->Write(); |
51 | TH1* res = GetResult(); |
976183fd |
52 | if (res) res->Write(); |
1b446896 |
53 | } |
54 | /******************************************************************/ |
55 | |
56 | TH1* AliHBTFunction:: |
57 | GetRatio(Double_t normfactor) |
58 | { |
2674b9ff |
59 | if (gDebug>0) cout<<"Mormfactor is "<<normfactor<<" for "<<fName<<endl; |
976183fd |
60 | |
61 | if (normfactor == 0.0) |
62 | { |
63 | Error("GetRatio","Scaling Factor is 0. Null poiner returned"); |
64 | return 0x0; |
65 | } |
1b446896 |
66 | TString str = fName + " ratio"; |
67 | TH1 *result = (TH1*)GetNumerator()->Clone(str.Data()); |
68 | |
69 | result->SetTitle(str.Data()); |
976183fd |
70 | //result->Sumw2(); |
1b446896 |
71 | |
72 | result->Divide(GetNumerator(),GetDenominator(),normfactor); |
73 | |
74 | return result; |
75 | |
76 | } |
77 | /******************************************************************/ |
78 | void AliHBTFunction::SetPairCut(AliHBTPairCut* cut) |
79 | { |
80 | //Sets new Pair Cut. Old one is deleted |
81 | //Note that it is created new object instead of simple pointer set |
82 | //I do not want to have pointer |
83 | //to object created somewhere else |
84 | //because in that case I could not believe that |
85 | //it would always exist (sb could delete it) |
86 | //so we have always own copy |
87 | |
88 | if(!cut) |
89 | { |
90 | Error("AliHBTFunction::SetPairCut","argument is NULL"); |
91 | return; |
92 | } |
93 | delete fPairCut; |
94 | fPairCut = (AliHBTPairCut*)cut->Clone(); |
95 | |
96 | } |
97 | |
98 | /******************************************************************/ |
99 | |
100 | void AliHBTFunction:: |
101 | Rename(const Char_t * name) |
102 | { |
103 | //renames the function and histograms |
104 | SetName(name); |
105 | SetTitle(name); |
106 | |
107 | TString numstr = fName + " Numerator"; //title and name of the |
108 | //numerator histogram |
109 | TString denstr = fName + " Denominator";//title and name of the |
110 | //denominator histogram |
111 | |
112 | GetNumerator()->SetName(numstr.Data()); |
113 | GetNumerator()->SetTitle(numstr.Data()); |
114 | |
115 | GetDenominator()->SetName(denstr.Data()); |
116 | GetDenominator()->SetTitle(denstr.Data()); |
117 | |
118 | } |
119 | |
120 | void AliHBTFunction:: |
121 | Rename(const Char_t * name, const Char_t * title) |
122 | { |
123 | //renames and retitle the function and histograms |
124 | |
125 | SetName(name); |
126 | SetTitle(title); |
127 | |
128 | TString numstrn = fName + " Numerator"; //name of the |
129 | //numerator histogram |
130 | |
131 | TString numstrt = fTitle + " Numerator"; //title of the |
132 | //numerator histogram |
133 | |
134 | TString denstrn = fName + " Denominator";//name of the |
135 | //denominator histogram |
136 | |
137 | TString denstrt = fTitle + " Denominator";//title of the |
138 | //denominator histogram |
139 | |
140 | |
141 | GetNumerator()->SetName(numstrn.Data()); |
142 | GetNumerator()->SetTitle(numstrt.Data()); |
143 | |
144 | GetDenominator()->SetName(denstrn.Data()); |
145 | GetDenominator()->SetTitle(denstrt.Data()); |
146 | |
147 | |
148 | } |
149 | |
150 | /******************************************************************/ |
151 | /******************************************************************/ |
152 | /******************************************************************/ |
153 | |
27b3fe5d |
154 | ClassImp( AliHBTOnePairFctn ) |
1b446896 |
155 | |
156 | /******************************************************************/ |
157 | /******************************************************************/ |
158 | /******************************************************************/ |
159 | |
27b3fe5d |
160 | ClassImp( AliHBTTwoPairFctn) |
1b446896 |
161 | |
162 | /******************************************************************/ |
163 | /******************************************************************/ |
164 | /******************************************************************/ |
165 | |
27b3fe5d |
166 | ClassImp( AliHBTOnePairFctn1D ) |
1b446896 |
167 | |
27b3fe5d |
168 | AliHBTOnePairFctn1D:: |
169 | AliHBTOnePairFctn1D(Int_t nbins, Double_t maxXval, Double_t minXval) |
1b446896 |
170 | { |
171 | //Constructor of Two Part One Dimentional Function |
172 | // nbins: number of bins in histograms - default 100 |
173 | // maxXval and minXval: range of histgram(s) default 0 - 0.15 (GeV) |
174 | |
175 | |
176 | TString numstr = fName + " Numerator"; //title and name of the |
177 | //numerator histogram |
178 | TString denstr = fName + " Denominator";//title and name of the |
179 | //denominator histogram |
180 | |
181 | fNumerator = new TH1D(numstr.Data(),numstr.Data(),nbins,minXval,maxXval); |
182 | fDenominator = new TH1D(denstr.Data(),denstr.Data(),nbins,minXval,maxXval); |
183 | |
184 | fNumerator->Sumw2(); |
185 | fDenominator->Sumw2(); |
186 | |
976183fd |
187 | fNBinsToScale = 30; |
188 | |
1b446896 |
189 | } |
190 | /******************************************************************/ |
27b3fe5d |
191 | AliHBTOnePairFctn1D::~AliHBTOnePairFctn1D() |
1b446896 |
192 | { |
193 | delete fNumerator; |
194 | delete fDenominator; |
195 | } |
976183fd |
196 | /******************************************************************/ |
197 | |
27b3fe5d |
198 | void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair) |
976183fd |
199 | { |
200 | //Fills the numerator |
201 | pair = CheckPair(pair); |
202 | if(pair) fNumerator->Fill(GetValue(pair)); |
203 | } |
204 | /******************************************************************/ |
27b3fe5d |
205 | void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair) |
976183fd |
206 | { |
207 | //fills denumerator |
208 | pair = CheckPair(pair); |
209 | if(pair) fDenominator->Fill(GetValue(pair)); |
210 | |
211 | } |
212 | /******************************************************************/ |
27b3fe5d |
213 | Double_t AliHBTOnePairFctn1D::Scale() |
976183fd |
214 | { |
2674b9ff |
215 | if (gDebug>0) cout<<"Enetered Scale()"<<endl; |
976183fd |
216 | if(!fNumerator) |
217 | { |
218 | Error("Scale","No numerator"); |
219 | return 0.0; |
220 | } |
221 | if(!fDenominator) |
222 | { |
223 | Error("Scale","No denominator"); |
224 | return 0.0; |
225 | } |
226 | |
227 | if(fNBinsToScale < 1) |
228 | { |
229 | return 0.0; |
230 | Error("Scale","Number of bins for scaling is smaller thnan 1"); |
231 | } |
232 | Int_t nbins = fNumerator->GetNbinsX(); |
233 | if (fNBinsToScale > nbins) |
234 | { |
235 | Error("Scale","Number of bins for scaling is bigger thnan number of bins in histograms"); |
236 | return 0.0; |
237 | } |
2674b9ff |
238 | if (gDebug>0) cout<<"No errors detected"<<endl; |
976183fd |
239 | |
2674b9ff |
240 | Double_t ratio; |
241 | Double_t sum = 0; |
242 | Int_t N = 0; |
243 | |
976183fd |
244 | Int_t offset = nbins - fNBinsToScale - 1; |
245 | Int_t i; |
246 | for ( i = offset; i< nbins; i++) |
247 | { |
2674b9ff |
248 | if ( fNumerator->GetBinContent(i) > 0.0 ) |
976183fd |
249 | { |
2674b9ff |
250 | ratio = fDenominator->GetBinContent(i)/fNumerator->GetBinContent(i); |
251 | sum += ratio; |
252 | N++; |
976183fd |
253 | } |
254 | } |
2674b9ff |
255 | |
256 | if(gDebug > 0) cout<<"sum="<<sum<<" fNBinsToScale="<<fNBinsToScale<<" N="<<N<<endl; |
257 | |
258 | if (N == 0) return 0.0; |
259 | Double_t ret = sum/((Double_t)N); |
976183fd |
260 | |
2674b9ff |
261 | if(gDebug > 0) cout<<"Scale() returning "<<ret<<endl; |
262 | return ret; |
976183fd |
263 | } |
264 | |
1b446896 |
265 | /******************************************************************/ |
266 | /******************************************************************/ |
267 | /******************************************************************/ |
268 | |
27b3fe5d |
269 | ClassImp( AliHBTOnePairFctn2D ) |
1b446896 |
270 | |
27b3fe5d |
271 | AliHBTOnePairFctn2D:: |
272 | AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval , |
1b446896 |
273 | Int_t nYbins, Double_t maxYval, Double_t minYval) |
274 | |
275 | { |
276 | TString numstr = fName + " Numerator"; //title and name of the |
277 | //numerator histogram |
278 | TString denstr = fName + " Denominator";//title and name of the |
279 | //denominator histogram |
280 | |
281 | fNumerator = new TH2D(numstr.Data(),numstr.Data(), |
282 | nXbins,minXval,maxXval, |
283 | nYbins,minYval,maxYval); |
284 | |
285 | fDenominator = new TH2D(denstr.Data(),denstr.Data(), |
286 | nXbins,minXval,maxXval, |
287 | nYbins,minYval,maxYval); |
288 | |
289 | fNumerator->Sumw2(); |
290 | fDenominator->Sumw2(); |
291 | |
292 | } |
27b3fe5d |
293 | AliHBTOnePairFctn2D::~AliHBTOnePairFctn2D() |
1b446896 |
294 | { |
295 | delete fNumerator; |
296 | delete fDenominator; |
297 | } |
27b3fe5d |
298 | void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair) |
1b446896 |
299 | { |
300 | pair = CheckPair(pair); |
301 | if(pair) |
302 | { |
303 | Double_t x,y; |
304 | GetValues(pair,x,y); |
305 | fNumerator->Fill(y,x); |
306 | } |
307 | } |
308 | |
27b3fe5d |
309 | void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair) |
1b446896 |
310 | { |
311 | pair = CheckPair(pair); |
312 | if(pair) |
313 | { |
314 | Double_t x,y; |
315 | GetValues(pair,x,y); |
316 | fDenominator->Fill(y,x); |
317 | } |
318 | |
319 | } |
320 | |
321 | |
322 | /******************************************************************/ |
323 | /******************************************************************/ |
324 | /******************************************************************/ |
325 | |
27b3fe5d |
326 | ClassImp( AliHBTOnePairFctn3D) |
1b446896 |
327 | |
27b3fe5d |
328 | AliHBTOnePairFctn3D:: |
329 | AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval, |
1b446896 |
330 | Int_t nYbins, Double_t maxYval, Double_t minYval, |
331 | Int_t nZbins, Double_t maxZval, Double_t minZval) |
332 | |
333 | { |
334 | TString numstr = fName + " Numerator"; //title and name of the |
335 | //numerator histogram |
336 | TString denstr = fName + " Denominator";//title and name of the |
337 | //denominator histogram |
338 | |
339 | fNumerator = new TH3D(numstr.Data(),numstr.Data(), |
340 | nXbins,minXval,maxXval, |
341 | nYbins,minYval,maxYval, |
342 | nZbins,minZval,maxZval); |
343 | |
344 | fDenominator = new TH3D(denstr.Data(),denstr.Data(), |
345 | nXbins,minXval,maxXval, |
346 | nYbins,minYval,maxYval, |
347 | nZbins,minZval,maxZval); |
348 | |
349 | fNumerator->Sumw2(); |
350 | fDenominator->Sumw2(); |
351 | |
352 | } |
1b446896 |
353 | |
7836ee94 |
354 | |
5a9432a9 |
355 | AliHBTOnePairFctn3D::~AliHBTOnePairFctn3D() |
7836ee94 |
356 | { |
357 | delete fNumerator; |
358 | delete fDenominator; |
359 | } |
7836ee94 |
360 | |
7836ee94 |
361 | |
1b446896 |
362 | /******************************************************************/ |
363 | /******************************************************************/ |
364 | /******************************************************************/ |
27b3fe5d |
365 | ClassImp( AliHBTTwoPairFctn2D) |
1b446896 |
366 | |
367 | |
27b3fe5d |
368 | AliHBTTwoPairFctn2D:: |
369 | AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval , |
1b446896 |
370 | Int_t nYbins, Double_t maxYval, Double_t minYval) |
371 | |
372 | { |
373 | TString numstr = fName + " Numerator"; //title and name of the |
374 | //numerator histogram |
375 | TString denstr = fName + " Denominator";//title and name of the |
376 | //denominator histogram |
377 | |
378 | fNumerator = new TH2D(numstr.Data(),numstr.Data(), |
379 | nXbins,minXval,maxXval, |
380 | nYbins,minYval,maxYval); |
381 | |
382 | fDenominator = new TH2D(denstr.Data(),denstr.Data(), |
383 | nXbins,minXval,maxXval, |
384 | nYbins,minYval,maxYval); |
385 | |
386 | fNumerator->Sumw2(); |
387 | fDenominator->Sumw2(); |
388 | |
389 | } |
27b3fe5d |
390 | AliHBTTwoPairFctn2D::~AliHBTTwoPairFctn2D() |
1b446896 |
391 | { |
392 | delete fNumerator; |
393 | delete fDenominator; |
394 | } |
27b3fe5d |
395 | void AliHBTTwoPairFctn2D:: |
1b446896 |
396 | ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) |
397 | { |
398 | partpair = CheckPair(partpair); |
399 | trackpair = CheckPair(trackpair); |
400 | if( partpair && trackpair) |
401 | { |
402 | Double_t x,y; |
403 | GetValues(trackpair,partpair,x,y); |
404 | fNumerator->Fill(y,x); |
405 | } |
406 | } |
407 | |
27b3fe5d |
408 | void AliHBTTwoPairFctn2D:: |
1b446896 |
409 | ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) |
410 | { |
411 | partpair = CheckPair(partpair); |
412 | trackpair = CheckPair(trackpair); |
413 | if( partpair && trackpair) |
414 | { |
415 | Double_t x,y; |
416 | GetValues(trackpair,partpair,x,y); |
417 | fDenominator->Fill(y,x); |
418 | } |
419 | |
420 | } |
421 | |