1 #include "AliHBTFunction.h"
2 /******************************************************************/
4 Piotr Krzysztof Skowronski
5 Piotr.Skowronski@cern.ch
6 Base classes for HBT functions
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
27 /******************************************************************/
28 /******************************************************************/
31 ClassImp( AliHBTFunction )
33 AliHBTFunction::AliHBTFunction()
35 fPairCut = new AliHBTEmptyPairCut(); //dummy cut
37 /******************************************************************/
38 AliHBTFunction::AliHBTFunction(const char* name,const char* title):TNamed(name,title)
40 fPairCut = new AliHBTEmptyPairCut(); //dummy cut
42 /******************************************************************/
44 AliHBTFunction::~AliHBTFunction()
46 if (fPairCut) delete fPairCut;
48 /******************************************************************/
53 if (GetNumerator()) GetNumerator()->Write();
54 if (GetDenominator()) GetDenominator()->Write();
55 TH1* res = GetResult();
56 if (res) res->Write();
58 /******************************************************************/
61 GetRatio(Double_t normfactor)
63 if (gDebug>0) cout<<"Mormfactor is "<<normfactor<<" for "<<fName<<endl;
65 if (normfactor == 0.0)
67 Error("GetRatio","Scaling Factor is 0. Null poiner returned");
70 TString str = fName + " ratio";
71 TH1 *result = (TH1*)GetNumerator()->Clone(str.Data());
73 result->SetTitle(str.Data());
76 result->Divide(GetNumerator(),GetDenominator(),normfactor);
81 /******************************************************************/
82 void AliHBTFunction::SetPairCut(AliHBTPairCut* cut)
84 //Sets new Pair Cut. Old one is deleted
85 //Note that it is created new object instead of simple pointer set
86 //I do not want to have pointer
87 //to object created somewhere else
88 //because in that case I could not believe that
89 //it would always exist (sb could delete it)
90 //so we have always own copy
94 Error("AliHBTFunction::SetPairCut","argument is NULL");
98 fPairCut = (AliHBTPairCut*)cut->Clone();
102 /******************************************************************/
104 void AliHBTFunction::
105 Rename(const Char_t * name)
107 //renames the function and histograms
111 TString numstr = fName + " Numerator"; //title and name of the
112 //numerator histogram
113 TString denstr = fName + " Denominator";//title and name of the
114 //denominator histogram
116 GetNumerator()->SetName(numstr.Data());
117 GetNumerator()->SetTitle(numstr.Data());
119 GetDenominator()->SetName(denstr.Data());
120 GetDenominator()->SetTitle(denstr.Data());
124 void AliHBTFunction::
125 Rename(const Char_t * name, const Char_t * title)
127 //renames and retitle the function and histograms
132 TString numstrn = fName + " Numerator"; //name of the
133 //numerator histogram
135 TString numstrt = fTitle + " Numerator"; //title of the
136 //numerator histogram
138 TString denstrn = fName + " Denominator";//name of the
139 //denominator histogram
141 TString denstrt = fTitle + " Denominator";//title of the
142 //denominator histogram
145 GetNumerator()->SetName(numstrn.Data());
146 GetNumerator()->SetTitle(numstrt.Data());
148 GetDenominator()->SetName(denstrn.Data());
149 GetDenominator()->SetTitle(denstrt.Data());
154 /******************************************************************/
155 /******************************************************************/
156 /******************************************************************/
158 ClassImp( AliHBTOnePairFctn )
160 /******************************************************************/
161 /******************************************************************/
162 /******************************************************************/
164 ClassImp( AliHBTTwoPairFctn)
166 /******************************************************************/
167 /******************************************************************/
168 /******************************************************************/
170 ClassImp( AliHBTOnePairFctn1D )
171 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D():fNBinsToScale(30)
177 AliHBTOnePairFctn1D::
178 AliHBTOnePairFctn1D(Int_t nbins, Double_t maxXval, Double_t minXval)
180 //Constructor of Two Part One Dimentional Function
181 // nbins: number of bins in histograms - default 100
182 // maxXval and minXval: range of histgram(s) default 0 - 0.15 (GeV)
185 TString numstr = fName + " Numerator"; //title and name of the
186 //numerator histogram
187 TString denstr = fName + " Denominator";//title and name of the
188 //denominator histogram
190 fNumerator = new TH1D(numstr.Data(),numstr.Data(),nbins,minXval,maxXval);
191 fDenominator = new TH1D(denstr.Data(),denstr.Data(),nbins,minXval,maxXval);
194 fDenominator->Sumw2();
199 AliHBTOnePairFctn1D::
200 AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
201 Int_t nbins, Double_t maxXval, Double_t minXval)
202 :AliHBTOnePairFctn(name,title)
204 TString numstr = fName + " Numerator"; //title and name of the
205 //numerator histogram
206 TString denstr = fName + " Denominator";//title and name of the
207 //denominator histogram
209 fNumerator = new TH1D(numstr.Data(),numstr.Data(),nbins,minXval,maxXval);
210 fDenominator = new TH1D(denstr.Data(),denstr.Data(),nbins,minXval,maxXval);
213 fDenominator->Sumw2();
217 /******************************************************************/
218 AliHBTOnePairFctn1D::~AliHBTOnePairFctn1D()
223 /******************************************************************/
225 void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair)
227 //Fills the numerator
228 pair = CheckPair(pair);
229 if(pair) fNumerator->Fill(GetValue(pair));
231 /******************************************************************/
232 void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair)
235 pair = CheckPair(pair);
236 if(pair) fDenominator->Fill(GetValue(pair));
239 /******************************************************************/
240 Double_t AliHBTOnePairFctn1D::Scale()
242 if (gDebug>0) cout<<"Enetered Scale()"<<endl;
245 Error("Scale","No numerator");
250 Error("Scale","No denominator");
254 if(fNBinsToScale < 1)
257 Error("Scale","Number of bins for scaling is smaller thnan 1");
259 Int_t nbins = fNumerator->GetNbinsX();
260 if (fNBinsToScale > nbins)
262 Error("Scale","Number of bins for scaling is bigger thnan number of bins in histograms");
265 if (gDebug>0) cout<<"No errors detected"<<endl;
271 Int_t offset = nbins - fNBinsToScale - 1;
273 for ( i = offset; i< nbins; i++)
275 if ( fNumerator->GetBinContent(i) > 0.0 )
277 ratio = fDenominator->GetBinContent(i)/fNumerator->GetBinContent(i);
283 if(gDebug > 0) cout<<"sum="<<sum<<" fNBinsToScale="<<fNBinsToScale<<" N="<<N<<endl;
285 if (N == 0) return 0.0;
286 Double_t ret = sum/((Double_t)N);
288 if(gDebug > 0) cout<<"Scale() returning "<<ret<<endl;
292 /******************************************************************/
293 /******************************************************************/
294 /******************************************************************/
296 ClassImp( AliHBTOnePairFctn2D )
298 AliHBTOnePairFctn2D::
299 AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval ,
300 Int_t nYbins, Double_t maxYval, Double_t minYval)
303 TString numstr = fName + " Numerator"; //title and name of the
304 //numerator histogram
305 TString denstr = fName + " Denominator";//title and name of the
306 //denominator histogram
308 fNumerator = new TH2D(numstr.Data(),numstr.Data(),
309 nXbins,minXval,maxXval,
310 nYbins,minYval,maxYval);
312 fDenominator = new TH2D(denstr.Data(),denstr.Data(),
313 nXbins,minXval,maxXval,
314 nYbins,minYval,maxYval);
317 fDenominator->Sumw2();
320 AliHBTOnePairFctn2D::~AliHBTOnePairFctn2D()
325 void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
327 pair = CheckPair(pair);
332 fNumerator->Fill(x,y);
336 void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
338 pair = CheckPair(pair);
343 fDenominator->Fill(x,y);
349 /******************************************************************/
350 /******************************************************************/
351 /******************************************************************/
353 ClassImp( AliHBTOnePairFctn3D)
355 AliHBTOnePairFctn3D::
356 AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
357 Int_t nYbins, Double_t maxYval, Double_t minYval,
358 Int_t nZbins, Double_t maxZval, Double_t minZval)
361 TString numstr = fName + " Numerator"; //title and name of the
362 //numerator histogram
363 TString denstr = fName + " Denominator";//title and name of the
364 //denominator histogram
366 fNumerator = new TH3D(numstr.Data(),numstr.Data(),
367 nXbins,minXval,maxXval,
368 nYbins,minYval,maxYval,
369 nZbins,minZval,maxZval);
371 fDenominator = new TH3D(denstr.Data(),denstr.Data(),
372 nXbins,minXval,maxXval,
373 nYbins,minYval,maxYval,
374 nZbins,minZval,maxZval);
377 fDenominator->Sumw2();
380 /******************************************************************/
382 AliHBTOnePairFctn3D::~AliHBTOnePairFctn3D()
387 /******************************************************************/
390 /******************************************************************/
391 /******************************************************************/
392 /******************************************************************/
393 ClassImp( AliHBTTwoPairFctn1D)
395 AliHBTTwoPairFctn1D::
396 AliHBTTwoPairFctn1D(Int_t nbins, Double_t maxval, Double_t minval)
398 TString numstr = fName + " Numerator"; //title and name of the
399 //numerator histogram
400 TString denstr = fName + " Denominator";//title and name of the
401 //denominator histogram
403 fNumerator = new TH1D(numstr.Data(),numstr.Data(),
404 nbins,minval,maxval);
406 fDenominator = new TH1D(denstr.Data(),denstr.Data(),
407 nbins,minval,maxval);
410 fDenominator->Sumw2();
413 AliHBTTwoPairFctn1D::
414 AliHBTTwoPairFctn1D(const Char_t* name, const Char_t* title,
415 Int_t nbins, Double_t maxval, Double_t minval)
416 :AliHBTTwoPairFctn(name,title)
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
423 fNumerator = new TH1D(numstr.Data(),numstr.Data(),
424 nbins,minval,maxval);
426 fDenominator = new TH1D(denstr.Data(),denstr.Data(),
427 nbins,minval,maxval);
430 fDenominator->Sumw2();
434 /******************************************************************/
435 AliHBTTwoPairFctn1D::~AliHBTTwoPairFctn1D()
440 void AliHBTTwoPairFctn1D::
441 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
443 partpair = CheckPair(partpair);
444 trackpair = CheckPair(trackpair);
445 if( partpair && trackpair)
447 Double_t x = GetValue(trackpair,partpair);
451 /******************************************************************/
453 void AliHBTTwoPairFctn1D::
454 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
456 partpair = CheckPair(partpair);
457 trackpair = CheckPair(trackpair);
458 if( partpair && trackpair)
460 Double_t x = GetValue(trackpair,partpair);
461 fDenominator->Fill(x);
466 /******************************************************************/
467 /******************************************************************/
468 /******************************************************************/
469 ClassImp( AliHBTTwoPairFctn2D)
472 AliHBTTwoPairFctn2D::
473 AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval ,
474 Int_t nYbins, Double_t maxYval, Double_t minYval)
477 TString numstr = fName + " Numerator"; //title and name of the
478 //numerator histogram
479 TString denstr = fName + " Denominator";//title and name of the
480 //denominator histogram
482 fNumerator = new TH2D(numstr.Data(),numstr.Data(),
483 nXbins,minXval,maxXval,
484 nYbins,minYval,maxYval);
486 fDenominator = new TH2D(denstr.Data(),denstr.Data(),
487 nXbins,minXval,maxXval,
488 nYbins,minYval,maxYval);
491 fDenominator->Sumw2();
494 AliHBTTwoPairFctn2D::~AliHBTTwoPairFctn2D()
499 void AliHBTTwoPairFctn2D::
500 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
502 partpair = CheckPair(partpair);
503 trackpair = CheckPair(trackpair);
504 if( partpair && trackpair)
507 GetValues(trackpair,partpair,x,y);
508 fNumerator->Fill(x,y);
512 void AliHBTTwoPairFctn2D::
513 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
515 partpair = CheckPair(partpair);
516 trackpair = CheckPair(trackpair);
517 if( partpair && trackpair)
520 GetValues(trackpair,partpair,x,y);
521 fDenominator->Fill(x,y);
526 /******************************************************************/
527 /******************************************************************/
528 /******************************************************************/
529 ClassImp(AliHBTTwoPairFctn3D)
531 void AliHBTTwoPairFctn3D::
532 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
534 partpair = CheckPair(partpair);
535 trackpair = CheckPair(trackpair);
536 if( partpair && trackpair)
539 GetValues(trackpair,partpair,x,y,z);
540 fNumerator->Fill(x,y,z);
544 void AliHBTTwoPairFctn3D::
545 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
547 partpair = CheckPair(partpair);
548 trackpair = CheckPair(trackpair);
549 if( partpair && trackpair)
552 GetValues(trackpair,partpair,x,y,z);
553 fDenominator->Fill(x,y,z);