1b446896 |
1 | #include "AliHBTFunction.h" |
26f1270c |
2 | //____________________ |
3 | ////////////////////////////////////////////////////////////////////// |
4 | // |
5 | //AliHBTFunction |
6 | //Author: Piotr Krzysztof Skowronski |
7 | //Piotr.Skowronski@cern.ch |
8 | /*Base classes for HBT functions |
9 | |
2c33acf3 |
10 | OnePairFctn Function TwoPairFctn |
26f1270c |
11 | | \ \ / | \ /|\ |
12 | | \ \ / | \ / | \ |
13 | | \ \ 1D 2D 3D / | \ |
14 | | \ \ / \ |\ | \________________/__ | \ |
15 | | \ \/ \ | \__|_____________ / \| \ |
16 | | \ \ \_|____|__ \ / | \ |
17 | | \ / \___ | | \ \/ |\ \ |
18 | | / \ | | \ /\ | \ \ |
19 | | / \ \| | \ / \ | \ \ |
20 | | / \ /\ | \ / \ | \ | |
21 | | / \ / \ | \ / \ | \ | |
22 | | / \ / \ | \ / \ | \ | |
23 | | / \/ \ | \/ \ | \ | |
24 | OnePair1D OnePair2D OnePair3D TwoPair1D TwoPair2D TwoPair3D |
25 | |
26 | |
1b446896 |
27 | |
28 | four particle functions are intendent to be resolution functions: |
29 | it is mecessary to have simulated particle pair corresponding to given |
30 | recontructed track pair in order to calculate function simualted value |
2c33acf3 |
31 | and recontructed value, to be further histogrammed |
1b446896 |
32 | |
33 | */ |
26f1270c |
34 | /////////////////////////////////////////////////////////////////////// |
35 | |
1b446896 |
36 | /******************************************************************/ |
37 | /******************************************************************/ |
38 | |
39 | ClassImp( AliHBTFunction ) |
40 | |
41 | AliHBTFunction::AliHBTFunction() |
42 | { |
2c33acf3 |
43 | //Default constructor |
ba95ae3f |
44 | fPairCut = new AliHBTEmptyPairCut(); //dummy cut |
45 | } |
46 | /******************************************************************/ |
47 | AliHBTFunction::AliHBTFunction(const char* name,const char* title):TNamed(name,title) |
48 | { |
49 | fPairCut = new AliHBTEmptyPairCut(); //dummy cut |
1b446896 |
50 | } |
2674b9ff |
51 | /******************************************************************/ |
52 | |
53 | AliHBTFunction::~AliHBTFunction() |
2c33acf3 |
54 | { |
55 | //destructor |
8928fd0d |
56 | delete fPairCut; |
2c33acf3 |
57 | } |
2674b9ff |
58 | /******************************************************************/ |
1b446896 |
59 | |
8928fd0d |
60 | void AliHBTFunction::Write() |
2c33acf3 |
61 | { |
62 | //writes result of the function to file |
1b446896 |
63 | if (GetNumerator()) GetNumerator()->Write(); |
64 | if (GetDenominator()) GetDenominator()->Write(); |
65 | TH1* res = GetResult(); |
976183fd |
66 | if (res) res->Write(); |
2c33acf3 |
67 | } |
1b446896 |
68 | /******************************************************************/ |
69 | |
266c51ca |
70 | TH1* AliHBTFunction::GetRatio(Double_t normfactor) |
1b446896 |
71 | { |
2c33acf3 |
72 | //returns ratio of numerator and denominator |
73 | // |
266c51ca |
74 | if (gDebug>0) Info("GetRatio","Norm. Factor is %f for %s",normfactor,GetName()); |
976183fd |
75 | |
76 | if (normfactor == 0.0) |
77 | { |
78 | Error("GetRatio","Scaling Factor is 0. Null poiner returned"); |
79 | return 0x0; |
80 | } |
1b446896 |
81 | TString str = fName + " ratio"; |
82 | TH1 *result = (TH1*)GetNumerator()->Clone(str.Data()); |
83 | |
84 | result->SetTitle(str.Data()); |
1b446896 |
85 | |
86 | result->Divide(GetNumerator(),GetDenominator(),normfactor); |
87 | |
88 | return result; |
89 | |
90 | } |
91 | /******************************************************************/ |
92 | void AliHBTFunction::SetPairCut(AliHBTPairCut* cut) |
93 | { |
94 | //Sets new Pair Cut. Old one is deleted |
95 | //Note that it is created new object instead of simple pointer set |
96 | //I do not want to have pointer |
97 | //to object created somewhere else |
98 | //because in that case I could not believe that |
99 | //it would always exist (sb could delete it) |
100 | //so we have always own copy |
101 | |
102 | if(!cut) |
103 | { |
104 | Error("AliHBTFunction::SetPairCut","argument is NULL"); |
105 | return; |
106 | } |
107 | delete fPairCut; |
108 | fPairCut = (AliHBTPairCut*)cut->Clone(); |
109 | |
110 | } |
111 | |
112 | /******************************************************************/ |
113 | |
8928fd0d |
114 | void AliHBTFunction::Rename(const Char_t * name) |
1b446896 |
115 | { |
116 | //renames the function and histograms |
117 | SetName(name); |
118 | SetTitle(name); |
119 | |
120 | TString numstr = fName + " Numerator"; //title and name of the |
121 | //numerator histogram |
122 | TString denstr = fName + " Denominator";//title and name of the |
123 | //denominator histogram |
124 | |
125 | GetNumerator()->SetName(numstr.Data()); |
126 | GetNumerator()->SetTitle(numstr.Data()); |
127 | |
128 | GetDenominator()->SetName(denstr.Data()); |
129 | GetDenominator()->SetTitle(denstr.Data()); |
130 | |
131 | } |
132 | |
8928fd0d |
133 | void AliHBTFunction::Rename(const Char_t * name, const Char_t * title) |
1b446896 |
134 | { |
135 | //renames and retitle the function and histograms |
136 | |
137 | SetName(name); |
138 | SetTitle(title); |
139 | |
140 | TString numstrn = fName + " Numerator"; //name of the |
141 | //numerator histogram |
142 | |
143 | TString numstrt = fTitle + " Numerator"; //title of the |
144 | //numerator histogram |
145 | |
146 | TString denstrn = fName + " Denominator";//name of the |
147 | //denominator histogram |
148 | |
149 | TString denstrt = fTitle + " Denominator";//title of the |
150 | //denominator histogram |
151 | |
152 | |
153 | GetNumerator()->SetName(numstrn.Data()); |
154 | GetNumerator()->SetTitle(numstrt.Data()); |
155 | |
156 | GetDenominator()->SetName(denstrn.Data()); |
157 | GetDenominator()->SetTitle(denstrt.Data()); |
158 | |
159 | |
160 | } |
26f1270c |
161 | /******************************************************************/ |
162 | |
163 | void AliHBTFunction::Init() |
164 | { |
165 | //Iniotializes fctn.: Resets histograms |
166 | //In case histograms are not created in ctor, builds with default parameters |
167 | if ( !(GetNumerator()&&GetDenominator()) ) BuildHistos(); |
168 | GetNumerator()->Reset(); |
169 | GetDenominator()->Reset(); |
170 | } |
1b446896 |
171 | |
172 | /******************************************************************/ |
173 | /******************************************************************/ |
174 | /******************************************************************/ |
175 | |
27b3fe5d |
176 | ClassImp( AliHBTOnePairFctn ) |
1b446896 |
177 | |
178 | /******************************************************************/ |
179 | /******************************************************************/ |
180 | /******************************************************************/ |
181 | |
27b3fe5d |
182 | ClassImp( AliHBTTwoPairFctn) |
1b446896 |
183 | |
184 | /******************************************************************/ |
185 | /******************************************************************/ |
186 | /******************************************************************/ |
187 | |
26f1270c |
188 | ClassImp( AliHBTFunction1D ) |
1b446896 |
189 | |
26f1270c |
190 | const Int_t AliHBTFunction1D::fgkDefaultNBins = 100; |
191 | const Float_t AliHBTFunction1D::fgkDefaultMin = 0.0; |
192 | const Float_t AliHBTFunction1D::fgkDefaultMax = 0.15; |
193 | const UInt_t AliHBTFunction1D::fgkDefaultNBinsToScale = 30; |
194 | |
195 | |
196 | AliHBTFunction1D::AliHBTFunction1D(): |
197 | fNumerator(0x0), |
198 | fDenominator(0x0), |
199 | fNBinsToScale(fgkDefaultNBinsToScale) |
2c33acf3 |
200 | {//default constructor |
26f1270c |
201 | } |
202 | /******************************************************************/ |
203 | |
204 | AliHBTFunction1D::AliHBTFunction1D(Int_t nbins, Float_t maxXval, Float_t minXval): |
205 | fNumerator(0x0), |
206 | fDenominator(0x0), |
207 | fNBinsToScale(fgkDefaultNBinsToScale) |
208 | { |
1b446896 |
209 | //Constructor of Two Part One Dimentional Function |
210 | // nbins: number of bins in histograms - default 100 |
211 | // maxXval and minXval: range of histgram(s) default 0 - 0.15 (GeV) |
26f1270c |
212 | BuildHistos(nbins,maxXval,minXval); |
213 | } |
214 | /******************************************************************/ |
215 | AliHBTFunction1D::AliHBTFunction1D(const Char_t *name, const Char_t *title): |
216 | AliHBTFunction(name,title), |
217 | fNumerator(0x0), |
218 | fDenominator(0x0), |
219 | fNBinsToScale(fgkDefaultNBinsToScale) |
2c33acf3 |
220 | {//constructor |
ba95ae3f |
221 | } |
1b446896 |
222 | /******************************************************************/ |
26f1270c |
223 | AliHBTFunction1D::AliHBTFunction1D(const Char_t *name, const Char_t *title, |
224 | Int_t nbins, Float_t maxXval, Float_t minXval): |
225 | AliHBTFunction(name,title), |
226 | fNumerator(0x0), |
227 | fDenominator(0x0), |
228 | fNBinsToScale(fgkDefaultNBinsToScale) |
229 | { |
2c33acf3 |
230 | //constructor |
231 | BuildHistos(nbins,maxXval,minXval); |
26f1270c |
232 | } |
233 | /******************************************************************/ |
234 | |
235 | AliHBTFunction1D::~AliHBTFunction1D() |
1b446896 |
236 | { |
2c33acf3 |
237 | //destructor |
1b446896 |
238 | delete fNumerator; |
239 | delete fDenominator; |
240 | } |
26f1270c |
241 | /******************************************************************/ |
242 | void AliHBTFunction1D::BuildHistos() |
243 | { |
2c33acf3 |
244 | //builds histograms with default settings |
26f1270c |
245 | BuildHistos(fgkDefaultNBins,fgkDefaultMax,fgkDefaultMin); |
246 | } |
247 | |
976183fd |
248 | /******************************************************************/ |
249 | |
26f1270c |
250 | void AliHBTFunction1D::BuildHistos(Int_t nbins, Float_t max, Float_t min) |
976183fd |
251 | { |
2c33acf3 |
252 | //builds numarator and denominator hitograms |
26f1270c |
253 | TString numstr = fName + " Numerator"; //title and name of the |
254 | //numerator histogram |
255 | TString denstr = fName + " Denominator";//title and name of the |
256 | //denominator histogram |
257 | fNumerator = new TH1D(numstr.Data(),numstr.Data(),nbins,min,max); |
258 | fDenominator = new TH1D(denstr.Data(),denstr.Data(),nbins,min,max); |
259 | |
260 | fNumerator->Sumw2(); |
261 | fDenominator->Sumw2(); |
976183fd |
262 | } |
263 | /******************************************************************/ |
976183fd |
264 | |
26f1270c |
265 | Double_t AliHBTFunction1D::Scale() |
266 | { |
267 | //Calculates the factor that should be used to scale |
268 | //quatience of fNumerator and fDenominator to 1 at tail |
269 | return Scale(fNumerator,fDenominator); |
270 | } |
976183fd |
271 | /******************************************************************/ |
26f1270c |
272 | |
273 | Double_t AliHBTFunction1D::Scale(TH1D* num,TH1D* den) |
976183fd |
274 | { |
26f1270c |
275 | //Calculates the factor that should be used to scale |
276 | //quatience of num and den to 1 at tail |
277 | |
266c51ca |
278 | if (gDebug>0) Info("Scale","Enetered Scale()"); |
26f1270c |
279 | if(!num) |
976183fd |
280 | { |
281 | Error("Scale","No numerator"); |
282 | return 0.0; |
283 | } |
26f1270c |
284 | if(!den) |
976183fd |
285 | { |
286 | Error("Scale","No denominator"); |
287 | return 0.0; |
288 | } |
289 | |
290 | if(fNBinsToScale < 1) |
291 | { |
292 | return 0.0; |
293 | Error("Scale","Number of bins for scaling is smaller thnan 1"); |
294 | } |
26f1270c |
295 | UInt_t nbins = num->GetNbinsX(); |
976183fd |
296 | if (fNBinsToScale > nbins) |
297 | { |
298 | Error("Scale","Number of bins for scaling is bigger thnan number of bins in histograms"); |
299 | return 0.0; |
300 | } |
266c51ca |
301 | if (gDebug>0) Info("Scale","No errors detected"); |
976183fd |
302 | |
2674b9ff |
303 | Double_t ratio; |
304 | Double_t sum = 0; |
305 | Int_t N = 0; |
306 | |
976183fd |
307 | Int_t offset = nbins - fNBinsToScale - 1; |
2c33acf3 |
308 | |
309 | for (UInt_t i = offset; i< nbins; i++) |
976183fd |
310 | { |
26f1270c |
311 | if ( num->GetBinContent(i) > 0.0 ) |
976183fd |
312 | { |
26f1270c |
313 | ratio = den->GetBinContent(i)/num->GetBinContent(i); |
2674b9ff |
314 | sum += ratio; |
315 | N++; |
976183fd |
316 | } |
317 | } |
2674b9ff |
318 | |
266c51ca |
319 | if(gDebug > 0) Info("Scale","sum=%f fNBinsToScale=%d N=%d",sum,fNBinsToScale,N); |
2674b9ff |
320 | |
321 | if (N == 0) return 0.0; |
322 | Double_t ret = sum/((Double_t)N); |
976183fd |
323 | |
266c51ca |
324 | if(gDebug > 0) Info("Scale","returning %f",ret); |
2674b9ff |
325 | return ret; |
976183fd |
326 | } |
327 | |
1b446896 |
328 | /******************************************************************/ |
329 | /******************************************************************/ |
330 | /******************************************************************/ |
331 | |
26f1270c |
332 | //____________________ |
333 | /////////////////////////////////////////////////////// |
334 | // // |
335 | // AliHBTFunction2D // |
336 | // // |
337 | // Base Calss for 2-dimensinal Functions // |
338 | // // |
339 | // Piotr.Skowronski@cern.ch // |
340 | // http://alisoft.cern.ch/people/skowron/analyzer // |
341 | // // |
342 | /////////////////////////////////////////////////////// |
1b446896 |
343 | |
26f1270c |
344 | ClassImp( AliHBTFunction1D ) |
1b446896 |
345 | |
26f1270c |
346 | const Int_t AliHBTFunction2D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms |
347 | const Float_t AliHBTFunction2D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms |
348 | const Float_t AliHBTFunction2D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms |
349 | |
350 | const Int_t AliHBTFunction2D::fgkDefaultNBinsY = 200;//default number of Bins in histograms |
351 | const Float_t AliHBTFunction2D::fgkDefaultMinY = -0.15;//Default min value of histograms |
352 | const Float_t AliHBTFunction2D::fgkDefaultMaxY = 0.15;//Default max value of histograms |
353 | |
354 | const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale |
355 | const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale |
356 | |
357 | /******************************************************************/ |
358 | AliHBTFunction2D::AliHBTFunction2D(): |
359 | fNumerator(0x0), |
360 | fDenominator(0x0), |
361 | fNBinsToScaleX(fgkDefaultNBinsToScaleX), |
362 | fNBinsToScaleY(fgkDefaultNBinsToScaleY) |
363 | {//default constructor |
364 | } |
365 | /******************************************************************/ |
366 | AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title): |
367 | AliHBTFunction(name,title), |
368 | fNumerator(0x0), |
369 | fDenominator(0x0), |
370 | fNBinsToScaleX(fgkDefaultNBinsToScaleX), |
371 | fNBinsToScaleY(fgkDefaultNBinsToScaleY) |
372 | {//constructor |
373 | } |
374 | /******************************************************************/ |
375 | |
376 | AliHBTFunction2D::AliHBTFunction2D(Int_t nXbins, Double_t maxXval, Double_t minXval, |
377 | Int_t nYbins, Double_t maxYval, Double_t minYval): |
378 | fNumerator(0x0), |
379 | fDenominator(0x0), |
380 | fNBinsToScaleX(fgkDefaultNBinsToScaleX), |
381 | fNBinsToScaleY(fgkDefaultNBinsToScaleY) |
1b446896 |
382 | { |
26f1270c |
383 | BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval); |
384 | } |
385 | /******************************************************************/ |
1b446896 |
386 | |
26f1270c |
387 | AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title, |
388 | Int_t nXbins, Double_t maxXval, Double_t minXval, |
389 | Int_t nYbins, Double_t maxYval, Double_t minYval): |
390 | AliHBTFunction(name,title), |
391 | fNumerator(0x0), |
392 | fDenominator(0x0), |
393 | fNBinsToScaleX(fgkDefaultNBinsToScaleX), |
394 | fNBinsToScaleY(fgkDefaultNBinsToScaleY) |
395 | { |
396 | BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval); |
1b446896 |
397 | } |
26f1270c |
398 | /******************************************************************/ |
399 | |
400 | AliHBTFunction2D::~AliHBTFunction2D() |
1b446896 |
401 | { |
402 | delete fNumerator; |
403 | delete fDenominator; |
404 | } |
26f1270c |
405 | /******************************************************************/ |
406 | |
407 | void AliHBTFunction2D::BuildHistos() |
1b446896 |
408 | { |
26f1270c |
409 | //Creates default histograms |
410 | BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX, |
411 | fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY); |
1b446896 |
412 | } |
26f1270c |
413 | /******************************************************************/ |
1b446896 |
414 | |
26f1270c |
415 | void AliHBTFunction2D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin, |
416 | Int_t nybins, Float_t ymax, Float_t ymin) |
1b446896 |
417 | { |
26f1270c |
418 | TString numstr = fName + " Numerator"; //title and name of the |
419 | //numerator histogram |
420 | TString denstr = fName + " Denominator";//title and name of the |
421 | //denominator histogram |
422 | |
423 | fNumerator = new TH2D(numstr.Data(),numstr.Data(), |
424 | nxbins,xmin,xmax,nybins,ymin,ymax); |
425 | |
426 | fDenominator = new TH2D(denstr.Data(),denstr.Data(), |
427 | nxbins,xmin,xmax,nybins,ymin,ymax); |
428 | |
429 | fNumerator->Sumw2(); |
430 | fDenominator->Sumw2(); |
431 | } |
432 | /******************************************************************/ |
1b446896 |
433 | |
26f1270c |
434 | void AliHBTFunction2D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn) |
435 | { |
436 | //defines area used for scaling factor calculation |
437 | fNBinsToScaleX = xn; |
438 | fNBinsToScaleY = yn; |
1b446896 |
439 | } |
26f1270c |
440 | /******************************************************************/ |
1b446896 |
441 | |
26f1270c |
442 | Double_t AliHBTFunction2D::Scale() |
443 | { |
444 | if (gDebug>0) Info("Scale","Enetered Scale()"); |
445 | if(!fNumerator) |
446 | { |
447 | Error("Scale","No numerator"); |
448 | return 0.0; |
449 | } |
450 | if(!fDenominator) |
451 | { |
452 | Error("Scale","No denominator"); |
453 | return 0.0; |
454 | } |
455 | |
456 | if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) ) |
457 | { |
458 | return 0.0; |
459 | Error("Scale","Number of bins for scaling is smaller thnan 1"); |
460 | } |
461 | UInt_t nbinsX = fNumerator->GetNbinsX(); |
462 | if (fNBinsToScaleX > nbinsX) |
463 | { |
464 | Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms"); |
465 | return 0.0; |
466 | } |
467 | |
468 | UInt_t nbinsY = fNumerator->GetNbinsX(); |
469 | if (fNBinsToScaleY > nbinsY) |
470 | { |
471 | Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms"); |
472 | return 0.0; |
473 | } |
474 | |
475 | if (gDebug>0) Info("Scale","No errors detected"); |
476 | |
477 | Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X |
478 | Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis X |
479 | |
480 | Double_t ratio; |
481 | Double_t sum = 0; |
482 | Int_t N = 0; |
483 | |
2c33acf3 |
484 | for (UInt_t j = offsetY; j< nbinsY; j++) |
485 | for (UInt_t i = offsetX; i< nbinsX; i++) |
26f1270c |
486 | { |
487 | if ( fNumerator->GetBinContent(i,j) > 0.0 ) |
488 | { |
489 | ratio = fDenominator->GetBinContent(i,j)/fNumerator->GetBinContent(i,j); |
490 | sum += ratio; |
491 | N++; |
492 | } |
493 | } |
494 | |
495 | if(gDebug > 0) Info("Scale","sum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d N=%d",sum,fNBinsToScaleX,fNBinsToScaleY,N); |
496 | |
497 | if (N == 0) return 0.0; |
498 | Double_t ret = sum/((Double_t)N); |
499 | |
500 | if(gDebug > 0) Info("Scale","returning %f",ret); |
501 | return ret; |
502 | } |
1b446896 |
503 | |
504 | /******************************************************************/ |
505 | /******************************************************************/ |
506 | /******************************************************************/ |
507 | |
26f1270c |
508 | //____________________ |
509 | /////////////////////////////////////////////////////// |
510 | // // |
511 | // AliHBTFunction3D // |
512 | // // |
513 | // Base Calss for 3-dimensinal Functions // |
514 | // // |
515 | // Piotr.Skowronski@cern.ch // |
516 | // http://alisoft.cern.ch/people/skowron/analyzer // |
517 | // // |
518 | /////////////////////////////////////////////////////// |
1b446896 |
519 | |
26f1270c |
520 | ClassImp( AliHBTFunction3D) |
1b446896 |
521 | |
26f1270c |
522 | const Int_t AliHBTFunction3D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms |
523 | const Float_t AliHBTFunction3D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms |
524 | const Float_t AliHBTFunction3D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms |
1b446896 |
525 | |
26f1270c |
526 | const Int_t AliHBTFunction3D::fgkDefaultNBinsY = 200;//default number of Bins in histograms |
527 | const Float_t AliHBTFunction3D::fgkDefaultMinY = -0.15;//Default min value of histograms |
528 | const Float_t AliHBTFunction3D::fgkDefaultMaxY = 0.15;//Default max value of histograms |
529 | |
530 | const Int_t AliHBTFunction3D::fgkDefaultNBinsZ = 200;//default number of Bins in histograms |
531 | const Float_t AliHBTFunction3D::fgkDefaultMinZ = -0.15;//Default min value of histograms |
532 | const Float_t AliHBTFunction3D::fgkDefaultMaxZ = 0.15;//Default max value of histograms |
533 | |
534 | const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale |
535 | const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale |
536 | const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleZ = 30;//Default number of bins used for scaling to tale |
537 | |
2c33acf3 |
538 | AliHBTFunction3D::AliHBTFunction3D(): |
539 | fNumerator(0x0), |
540 | fDenominator(0x0), |
541 | fNBinsToScaleX(fgkDefaultNBinsToScaleX), |
542 | fNBinsToScaleY(fgkDefaultNBinsToScaleY), |
543 | fNBinsToScaleZ(fgkDefaultNBinsToScaleZ) |
544 | { |
545 | //constructor |
546 | } |
547 | /******************************************************************/ |
548 | |
549 | AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title): |
550 | AliHBTFunction(name,title), |
551 | fNumerator(0x0), |
552 | fDenominator(0x0), |
553 | fNBinsToScaleX(fgkDefaultNBinsToScaleX), |
554 | fNBinsToScaleY(fgkDefaultNBinsToScaleY), |
555 | fNBinsToScaleZ(fgkDefaultNBinsToScaleZ) |
556 | { |
557 | //constructor |
558 | } |
559 | /******************************************************************/ |
26f1270c |
560 | |
561 | AliHBTFunction3D::AliHBTFunction3D(Int_t nXbins, Double_t maxXval, Double_t minXval, |
562 | Int_t nYbins, Double_t maxYval, Double_t minYval, |
563 | Int_t nZbins, Double_t maxZval, Double_t minZval): |
564 | fNumerator(0x0), |
565 | fDenominator(0x0), |
566 | fNBinsToScaleX(fgkDefaultNBinsToScaleX), |
567 | fNBinsToScaleY(fgkDefaultNBinsToScaleY), |
568 | fNBinsToScaleZ(fgkDefaultNBinsToScaleZ) |
569 | { |
2c33acf3 |
570 | //constructor |
571 | BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval); |
1b446896 |
572 | } |
ba95ae3f |
573 | /******************************************************************/ |
7836ee94 |
574 | |
2c33acf3 |
575 | AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title, |
576 | Int_t nXbins, Double_t maxXval, Double_t minXval, |
577 | Int_t nYbins, Double_t maxYval, Double_t minYval, |
578 | Int_t nZbins, Double_t maxZval, Double_t minZval): |
579 | AliHBTFunction(name,title), |
580 | fNumerator(0x0), |
581 | fDenominator(0x0), |
582 | fNBinsToScaleX(fgkDefaultNBinsToScaleX), |
583 | fNBinsToScaleY(fgkDefaultNBinsToScaleY), |
584 | fNBinsToScaleZ(fgkDefaultNBinsToScaleZ) |
585 | { |
586 | //constructor |
587 | BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval); |
588 | } |
589 | /******************************************************************/ |
590 | |
591 | |
26f1270c |
592 | AliHBTFunction3D::~AliHBTFunction3D() |
7836ee94 |
593 | { |
594 | delete fNumerator; |
595 | delete fDenominator; |
596 | } |
ba95ae3f |
597 | /******************************************************************/ |
7836ee94 |
598 | |
26f1270c |
599 | void AliHBTFunction3D::BuildHistos() |
600 | { |
601 | //Creates default histograms |
602 | BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX, |
603 | fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY, |
604 | fgkDefaultNBinsZ,fgkDefaultMaxZ,fgkDefaultMinZ); |
605 | } |
ba95ae3f |
606 | /******************************************************************/ |
ba95ae3f |
607 | |
26f1270c |
608 | void AliHBTFunction3D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin, |
609 | Int_t nybins, Float_t ymax, Float_t ymin, |
610 | Int_t nzbins, Float_t zmax, Float_t zmin) |
611 | { |
ba95ae3f |
612 | TString numstr = fName + " Numerator"; //title and name of the |
613 | //numerator histogram |
614 | TString denstr = fName + " Denominator";//title and name of the |
615 | //denominator histogram |
616 | |
26f1270c |
617 | fNumerator = new TH3D(numstr.Data(),numstr.Data(), |
618 | nxbins,xmin,xmin,nybins,ymin,ymin,nzbins,zmin,zmin); |
ba95ae3f |
619 | |
26f1270c |
620 | fDenominator = new TH3D(denstr.Data(),denstr.Data(), |
621 | nxbins,xmin,xmin,nybins,ymin,ymin,nzbins,zmin,zmin); |
ba95ae3f |
622 | |
623 | fNumerator->Sumw2(); |
624 | fDenominator->Sumw2(); |
ba95ae3f |
625 | } |
ba95ae3f |
626 | |
4e871a8a |
627 | /******************************************************************/ |
26f1270c |
628 | |
629 | Double_t AliHBTFunction3D::Scale() |
4e871a8a |
630 | { |
266c51ca |
631 | if (gDebug>0) Info("Scale","Enetered Scale()"); |
4e871a8a |
632 | if(!fNumerator) |
633 | { |
634 | Error("Scale","No numerator"); |
635 | return 0.0; |
636 | } |
637 | if(!fDenominator) |
638 | { |
639 | Error("Scale","No denominator"); |
640 | return 0.0; |
641 | } |
642 | |
26f1270c |
643 | if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) || (fNBinsToScaleZ < 1)) |
4e871a8a |
644 | { |
645 | return 0.0; |
646 | Error("Scale","Number of bins for scaling is smaller thnan 1"); |
647 | } |
26f1270c |
648 | UInt_t nbinsX = fNumerator->GetNbinsX(); |
649 | if (fNBinsToScaleX > nbinsX) |
4e871a8a |
650 | { |
26f1270c |
651 | Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms"); |
652 | return 0.0; |
653 | } |
654 | |
655 | UInt_t nbinsY = fNumerator->GetNbinsX(); |
656 | if (fNBinsToScaleY > nbinsY) |
657 | { |
658 | Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms"); |
659 | return 0.0; |
660 | } |
661 | |
662 | UInt_t nbinsZ = fNumerator->GetNbinsZ(); |
663 | if (fNBinsToScaleZ > nbinsZ) |
664 | { |
665 | Error("Scale","Number of Z bins for scaling is bigger thnan number of bins in histograms"); |
4e871a8a |
666 | return 0.0; |
667 | } |
26f1270c |
668 | |
266c51ca |
669 | if (gDebug>0) Info("Scale","No errors detected"); |
4e871a8a |
670 | |
26f1270c |
671 | Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X |
196e34f6 |
672 | Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis Y |
673 | Int_t offsetZ = nbinsZ - fNBinsToScaleZ - 1; //bin that we start loop over bins in axis Z |
26f1270c |
674 | |
4e871a8a |
675 | Double_t ratio; |
676 | Double_t sum = 0; |
677 | Int_t N = 0; |
678 | |
196e34f6 |
679 | for (UInt_t k = offsetZ; k<nbinsZ; k++) |
680 | for (UInt_t j = offsetY; j<nbinsY; j++) |
681 | for (UInt_t i = offsetX; i<nbinsX; i++) |
26f1270c |
682 | { |
683 | if ( fNumerator->GetBinContent(i,j,k) > 0.0 ) |
684 | { |
685 | ratio = fDenominator->GetBinContent(i,j,k)/fNumerator->GetBinContent(i,j,k); |
686 | sum += ratio; |
687 | N++; |
688 | } |
689 | } |
4e871a8a |
690 | |
26f1270c |
691 | if(gDebug > 0) |
692 | Info("Scale","sum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d fNBinsToScaleZ=%d N=%d", |
693 | sum,fNBinsToScaleX,fNBinsToScaleY,fNBinsToScaleZ,N); |
4e871a8a |
694 | |
695 | if (N == 0) return 0.0; |
696 | Double_t ret = sum/((Double_t)N); |
697 | |
266c51ca |
698 | if(gDebug > 0) Info("Scale","returning %f",ret); |
4e871a8a |
699 | return ret; |
700 | } |
2c33acf3 |
701 | /******************************************************************/ |
702 | |
703 | void AliHBTFunction3D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn,UInt_t zn) |
704 | { |
705 | //sets up the volume to be used for scaling to tail |
706 | fNBinsToScaleX = xn; |
707 | fNBinsToScaleY = yn; |
708 | fNBinsToScaleZ = zn; |
709 | } |
ba95ae3f |
710 | |
1b446896 |
711 | /******************************************************************/ |
712 | /******************************************************************/ |
713 | /******************************************************************/ |
26f1270c |
714 | /******************************************************************/ |
715 | /******************************************************************/ |
716 | /******************************************************************/ |
717 | /******************************************************************/ |
718 | /******************************************************************/ |
719 | /******************************************************************/ |
1b446896 |
720 | |
26f1270c |
721 | //____________________ |
722 | /////////////////////////////////////////////////////// |
723 | // // |
724 | // AliHBTOnePairFctn1D // |
725 | // // |
726 | // Base Calss for 1-dimensinal Functions that need // |
727 | // one pair to fill function // |
728 | // // |
729 | // Piotr.Skowronski@cern.ch // |
730 | // http://alisoft.cern.ch/people/skowron/analyzer // |
731 | // // |
732 | /////////////////////////////////////////////////////// |
1b446896 |
733 | |
26f1270c |
734 | ClassImp( AliHBTOnePairFctn1D ) |
735 | /******************************************************************/ |
1b446896 |
736 | |
26f1270c |
737 | AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval): |
738 | AliHBTFunction1D(nbins,maxXval,minXval) |
1b446896 |
739 | { |
26f1270c |
740 | } |
741 | /******************************************************************/ |
1b446896 |
742 | |
26f1270c |
743 | AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title): |
744 | AliHBTFunction1D(name,title) |
745 | { |
746 | } |
747 | /******************************************************************/ |
748 | |
749 | AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title, |
750 | Int_t nbins, Float_t maxXval, Float_t minXval): |
751 | AliHBTFunction1D(name,title,nbins,maxXval,minXval) |
752 | { |
753 | } |
754 | /******************************************************************/ |
755 | |
756 | void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair) |
757 | { |
758 | //Fills the numerator |
759 | pair = CheckPair(pair); |
760 | if(pair) fNumerator->Fill(GetValue(pair)); |
761 | } |
762 | /******************************************************************/ |
763 | void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair) |
764 | { |
765 | //fills denumerator |
766 | pair = CheckPair(pair); |
767 | if(pair) fDenominator->Fill(GetValue(pair)); |
768 | } |
769 | |
770 | /******************************************************************/ |
771 | /******************************************************************/ |
772 | /******************************************************************/ |
773 | |
774 | //____________________ |
775 | /////////////////////////////////////////////////////// |
776 | // // |
777 | // AliHBTOnePairFctn2D // |
778 | // // |
779 | // Base Calss for 2-dimensinal Functions that need // |
780 | // one pair to fill function // |
781 | // // |
782 | // Piotr.Skowronski@cern.ch // |
783 | // http://alisoft.cern.ch/people/skowron/analyzer // |
784 | // // |
785 | /////////////////////////////////////////////////////// |
786 | |
787 | ClassImp( AliHBTOnePairFctn2D ) |
788 | /******************************************************************/ |
789 | |
790 | AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title): |
791 | AliHBTFunction2D(name,title) |
792 | { |
793 | } |
794 | /******************************************************************/ |
795 | |
796 | AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval, |
797 | Int_t nYbins, Double_t maxYval, Double_t minYval): |
798 | AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval) |
799 | { |
800 | } |
801 | /******************************************************************/ |
802 | |
803 | AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title, |
804 | Int_t nXbins, Double_t maxXval, Double_t minXval, |
805 | Int_t nYbins, Double_t maxYval, Double_t minYval): |
806 | AliHBTFunction2D(name,title, nXbins, maxXval, minXval, nYbins, maxYval, minYval) |
807 | { |
808 | } |
809 | /******************************************************************/ |
810 | |
811 | void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair) |
812 | { |
813 | pair = CheckPair(pair); |
814 | if(pair) |
815 | { |
816 | Double_t x,y; |
817 | GetValues(pair,x,y); |
818 | fNumerator->Fill(x,y); |
819 | } |
820 | } |
821 | /******************************************************************/ |
822 | |
823 | void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair) |
824 | { |
825 | pair = CheckPair(pair); |
826 | if(pair) |
827 | { |
828 | Double_t x,y; |
829 | GetValues(pair,x,y); |
830 | fDenominator->Fill(x,y); |
831 | } |
832 | } |
833 | /******************************************************************/ |
834 | /******************************************************************/ |
835 | /******************************************************************/ |
836 | /******************************************************************/ |
837 | //____________________ |
838 | /////////////////////////////////////////////////////// |
839 | // // |
840 | // AliHBTOnePairFctn3D // |
841 | // // |
842 | // Base Calss for 3-dimensinal Functions that need // |
843 | // one pair to fill function // |
844 | // // |
845 | // Piotr.Skowronski@cern.ch // |
846 | // http://alisoft.cern.ch/people/skowron/analyzer // |
847 | // // |
848 | /////////////////////////////////////////////////////// |
849 | ClassImp( AliHBTOnePairFctn3D) |
850 | |
851 | /******************************************************************/ |
852 | |
853 | AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title): |
854 | AliHBTFunction3D(name,title) |
1b446896 |
855 | { |
1b446896 |
856 | } |
26f1270c |
857 | /******************************************************************/ |
858 | |
859 | AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval, |
860 | Int_t nYbins, Double_t maxYval, Double_t minYval, |
861 | Int_t nZbins, Double_t maxZval, Double_t minZval): |
862 | AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval) |
863 | { |
864 | } |
865 | /******************************************************************/ |
866 | |
867 | AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title, |
868 | Int_t nXbins, Double_t maxXval, Double_t minXval, |
869 | Int_t nYbins, Double_t maxYval, Double_t minYval, |
870 | Int_t nZbins, Double_t maxZval, Double_t minZval): |
871 | AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval) |
872 | { |
873 | } |
874 | /******************************************************************/ |
875 | |
876 | void AliHBTOnePairFctn3D::ProcessSameEventParticles(AliHBTPair* pair) |
877 | { |
878 | //Reacts on pair coming from same event (real pairs) |
879 | //and fills numerator histogram |
880 | pair = CheckPair(pair); |
881 | if( pair ) |
882 | { |
883 | Double_t x,y,z; |
884 | GetValues(pair,x,y,z); |
885 | fNumerator->Fill(x,y,z); |
886 | } |
887 | } |
888 | /******************************************************************/ |
889 | |
890 | void AliHBTOnePairFctn3D::ProcessDiffEventParticles(AliHBTPair* pair) |
891 | { |
892 | //Reacts on pair coming from different events (mixed pairs) |
893 | //and fills denominator histogram |
894 | pair = CheckPair(pair); |
895 | if( pair ) |
896 | { |
897 | Double_t x,y,z; |
898 | GetValues(pair,x,y,z); |
899 | fDenominator->Fill(x,y,z); |
900 | } |
901 | } |
902 | |
903 | /******************************************************************/ |
904 | /******************************************************************/ |
905 | /******************************************************************/ |
906 | |
907 | //____________________ |
908 | /////////////////////////////////////////////////////// |
909 | // // |
910 | // AliHBTTwoPairFctn1D // |
911 | // // |
912 | // Base Calss for 1-dimensinal Functions that need // |
913 | // two pair (simulated and reconstructed) // |
914 | // to fill function // |
915 | // // |
916 | // Piotr.Skowronski@cern.ch // |
917 | // http://alisoft.cern.ch/people/skowron/analyzer // |
918 | // // |
919 | /////////////////////////////////////////////////////// |
920 | ClassImp(AliHBTTwoPairFctn1D) |
921 | /******************************************************************/ |
922 | |
923 | AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval): |
924 | AliHBTFunction1D(nbins,maxXval,minXval) |
925 | { |
926 | } |
927 | /******************************************************************/ |
928 | |
929 | AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title): |
930 | AliHBTFunction1D(name,title) |
931 | { |
932 | } |
933 | /******************************************************************/ |
934 | |
935 | AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title, |
936 | Int_t nbins, Float_t maxXval, Float_t minXval): |
937 | AliHBTFunction1D(name,title,nbins,maxXval,minXval) |
938 | { |
939 | } |
940 | /******************************************************************/ |
941 | |
942 | void AliHBTTwoPairFctn1D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) |
943 | { |
944 | partpair = CheckPair(partpair); |
945 | if( partpair ) |
946 | { |
947 | Double_t x = GetValue(trackpair,partpair); |
948 | fNumerator->Fill(x); |
949 | } |
950 | } |
951 | /******************************************************************/ |
952 | |
953 | void AliHBTTwoPairFctn1D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) |
954 | { |
955 | partpair = CheckPair(partpair); |
956 | if( partpair ) |
957 | { |
958 | Double_t x = GetValue(trackpair,partpair); |
959 | fDenominator->Fill(x); |
960 | } |
961 | } |
962 | /******************************************************************/ |
963 | /******************************************************************/ |
964 | /******************************************************************/ |
965 | |
966 | //____________________ |
967 | /////////////////////////////////////////////////////// |
968 | // // |
969 | // AliHBTTwoPairFctn2D // |
970 | // // |
971 | // Base Calss for 2-dimensinal Functions that need // |
972 | // two pair (simulated and reconstructed) // |
973 | // to fill function // |
974 | // // |
975 | // Piotr.Skowronski@cern.ch // |
976 | // http://alisoft.cern.ch/people/skowron/analyzer // |
977 | // // |
978 | /////////////////////////////////////////////////////// |
979 | |
980 | ClassImp(AliHBTTwoPairFctn2D) |
981 | |
982 | /******************************************************************/ |
983 | |
984 | AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title): |
985 | AliHBTFunction2D(name,title) |
986 | { |
987 | } |
988 | /******************************************************************/ |
989 | |
990 | AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval, |
991 | Int_t nYbins, Double_t maxYval, Double_t minYval): |
992 | AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval) |
993 | { |
994 | } |
995 | /******************************************************************/ |
996 | |
997 | AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title, |
998 | Int_t nXbins, Double_t maxXval, Double_t minXval, |
999 | Int_t nYbins, Double_t maxYval, Double_t minYval): |
1000 | AliHBTFunction2D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval) |
1001 | { |
1002 | } |
1003 | /******************************************************************/ |
1004 | |
1005 | void AliHBTTwoPairFctn2D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) |
1b446896 |
1006 | { |
2c33acf3 |
1007 | //processes pair of particles coming from a same events (real pair) |
1008 | partpair = CheckPair(partpair); //check cuts |
266c51ca |
1009 | if( partpair ) |
1b446896 |
1010 | { |
1011 | Double_t x,y; |
1012 | GetValues(trackpair,partpair,x,y); |
19b27ae5 |
1013 | fNumerator->Fill(x,y); |
1b446896 |
1014 | } |
1015 | } |
26f1270c |
1016 | /******************************************************************/ |
1b446896 |
1017 | |
26f1270c |
1018 | void AliHBTTwoPairFctn2D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) |
1b446896 |
1019 | { |
2c33acf3 |
1020 | //processes pair of particles coming from a different events (mixed pair) |
1b446896 |
1021 | partpair = CheckPair(partpair); |
266c51ca |
1022 | if( partpair ) |
1b446896 |
1023 | { |
1024 | Double_t x,y; |
1025 | GetValues(trackpair,partpair,x,y); |
19b27ae5 |
1026 | fDenominator->Fill(x,y); |
1b446896 |
1027 | } |
1b446896 |
1028 | } |
1029 | |
ba95ae3f |
1030 | /******************************************************************/ |
1031 | /******************************************************************/ |
1032 | /******************************************************************/ |
26f1270c |
1033 | |
1034 | //____________________ |
1035 | /////////////////////////////////////////////////////// |
1036 | // // |
1037 | // AliHBTTwoPairFctn3D // |
1038 | // // |
1039 | // Base Calss for 3-dimensinal Functions that need // |
1040 | // two pair (simulated and reconstructed) // |
1041 | // to fill function // |
1042 | // // |
1043 | // Piotr.Skowronski@cern.ch // |
1044 | // http://alisoft.cern.ch/people/skowron/analyzer // |
1045 | // // |
1046 | /////////////////////////////////////////////////////// |
1047 | |
ba95ae3f |
1048 | ClassImp(AliHBTTwoPairFctn3D) |
1049 | |
26f1270c |
1050 | /******************************************************************/ |
1051 | |
1052 | AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title): |
1053 | AliHBTFunction3D(name,title) |
1054 | { |
1055 | } |
1056 | /******************************************************************/ |
1057 | |
1058 | AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval, |
1059 | Int_t nYbins, Double_t maxYval, Double_t minYval, |
1060 | Int_t nZbins, Double_t maxZval, Double_t minZval): |
1061 | AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval) |
1062 | { |
1063 | } |
1064 | /******************************************************************/ |
1065 | |
1066 | AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title, |
1067 | Int_t nXbins, Double_t maxXval, Double_t minXval, |
1068 | Int_t nYbins, Double_t maxYval, Double_t minYval, |
1069 | Int_t nZbins, Double_t maxZval, Double_t minZval): |
1070 | AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval) |
1071 | { |
1072 | } |
1073 | /******************************************************************/ |
1074 | |
1075 | void AliHBTTwoPairFctn3D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) |
ba95ae3f |
1076 | { |
1077 | partpair = CheckPair(partpair); |
266c51ca |
1078 | if( partpair ) |
ba95ae3f |
1079 | { |
1080 | Double_t x,y,z; |
1081 | GetValues(trackpair,partpair,x,y,z); |
19b27ae5 |
1082 | fNumerator->Fill(x,y,z); |
ba95ae3f |
1083 | } |
1084 | } |
26f1270c |
1085 | /******************************************************************/ |
ba95ae3f |
1086 | |
26f1270c |
1087 | void AliHBTTwoPairFctn3D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) |
ba95ae3f |
1088 | { |
1089 | partpair = CheckPair(partpair); |
266c51ca |
1090 | if( partpair ) |
ba95ae3f |
1091 | { |
1092 | Double_t x,y,z; |
1093 | GetValues(trackpair,partpair,x,y,z); |
19b27ae5 |
1094 | fDenominator->Fill(x,y,z); |
ba95ae3f |
1095 | } |
1096 | |
1097 | } |
1098 | |
26f1270c |
1099 | |
1100 | /******************************************************************/ |
1101 | /******************************************************************/ |
1102 | /******************************************************************/ |
1103 | |