1 #include "AliHBTFunction.h"
5 //--------------------------------------------------------------------
7 //Author: Piotr Krzysztof Skowronski
8 //Piotr.Skowronski@cern.ch
9 //Base classes for HBT functions
11 OnePairFctn Function TwoPairFctn
15 | \ \ / \ |\ | \________________/__ | \
16 | \ \/ \ | \__|_____________ / \| \
17 | \ \ \_|____|__ \ / | \
18 | \ / \___ | | \ \/ |\ \
20 | / \ \| | \ / \ | \ \
21 | / \ /\ | \ / \ | \ |
22 | / \ / \ | \ / \ | \ |
23 | / \ / \ | \ / \ | \ |
25 OnePair1D OnePair2D OnePair3D TwoPair1D TwoPair2D TwoPair3D
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
31 and recontructed value, to be further histogrammed
33 //---------------------------------------------------------------------
38 /******************************************************************/
39 /******************************************************************/
41 ClassImp( AliHBTFunction )
43 AliHBTFunction::AliHBTFunction():
44 fPairCut(new AliHBTEmptyPairCut()) //dummy cut
48 /******************************************************************/
50 AliHBTFunction::AliHBTFunction(const char* name,const char* title):
52 fPairCut(new AliHBTEmptyPairCut()) //dummy cut
56 /******************************************************************/
58 AliHBTFunction::AliHBTFunction(const AliHBTFunction & source):
60 fPairCut((AliHBTPairCut*)source.fPairCut->Clone())
62 // Copy constructor needed by the coding conventions
64 /******************************************************************/
66 AliHBTFunction::~AliHBTFunction()
71 /******************************************************************/
72 AliHBTFunction & AliHBTFunction::operator= (const AliHBTFunction & source)
74 // Assignment needed by the coding conventions
76 fPairCut = (AliHBTPairCut*)source.fPairCut->Clone();
80 void AliHBTFunction::WriteFunction()
82 //writes result of the function to file
83 if (GetNumerator()) GetNumerator()->Write();
84 if (GetDenominator()) GetDenominator()->Write();
85 TH1* res = GetResult();
86 if (res) res->Write();
88 /******************************************************************/
90 TH1* AliHBTFunction::GetRatio(Double_t normfactor)
92 //returns ratio of numerator and denominator
94 if (gDebug>0) Info("GetRatio","Norm. Factor is %f for %s",normfactor,GetName());
96 if (normfactor == 0.0)
98 Error("GetRatio","Scaling Factor is 0. Null poiner returned");
101 TString str = fName + " ratio";
102 TH1 *result = (TH1*)GetNumerator()->Clone(str.Data());
104 result->SetTitle(str.Data());
106 result->Divide(GetNumerator(),GetDenominator(),normfactor);
111 /******************************************************************/
112 void AliHBTFunction::SetPairCut(AliHBTPairCut* cut)
114 //Sets new Pair Cut. Old one is deleted
115 //Note that it is created new object instead of simple pointer set
116 //I do not want to have pointer
117 //to object created somewhere else
118 //because in that case I could not believe that
119 //it would always exist (sb could delete it)
120 //so we have always own copy
124 Error("AliHBTFunction::SetPairCut","argument is NULL");
128 fPairCut = (AliHBTPairCut*)cut->Clone();
132 /******************************************************************/
134 void AliHBTFunction::Rename(const Char_t * name)
136 //renames the function and histograms
140 TString numstr = fName + " Numerator"; //title and name of the
141 //numerator histogram
142 TString denstr = fName + " Denominator";//title and name of the
143 //denominator histogram
145 GetNumerator()->SetName(numstr.Data());
146 GetNumerator()->SetTitle(numstr.Data());
148 GetDenominator()->SetName(denstr.Data());
149 GetDenominator()->SetTitle(denstr.Data());
153 void AliHBTFunction::Rename(const Char_t * name, const Char_t * title)
155 //renames and retitle the function and histograms
160 TString numstrn = fName + " Numerator"; //name of the
161 //numerator histogram
163 TString numstrt = fTitle + " Numerator"; //title of the
164 //numerator histogram
166 TString denstrn = fName + " Denominator";//name of the
167 //denominator histogram
169 TString denstrt = fTitle + " Denominator";//title of the
170 //denominator histogram
173 GetNumerator()->SetName(numstrn.Data());
174 GetNumerator()->SetTitle(numstrt.Data());
176 GetDenominator()->SetName(denstrn.Data());
177 GetDenominator()->SetTitle(denstrt.Data());
181 /******************************************************************/
183 void AliHBTFunction::InitFunction()
185 //Iniotializes fctn.: Resets histograms
186 //In case histograms are not created in ctor, builds with default parameters
187 if ( !(GetNumerator()&&GetDenominator()) ) BuildHistos();
188 GetNumerator()->Reset();
189 GetDenominator()->Reset();
192 /******************************************************************/
193 /******************************************************************/
194 /******************************************************************/
196 ClassImp( AliHBTOnePairFctn )
198 /******************************************************************/
199 /******************************************************************/
200 /******************************************************************/
202 ClassImp( AliHBTTwoPairFctn)
204 /******************************************************************/
205 /******************************************************************/
206 /******************************************************************/
208 ClassImp( AliHBTFunction1D )
210 const Int_t AliHBTFunction1D::fgkDefaultNBins = 100;
211 const Float_t AliHBTFunction1D::fgkDefaultMin = 0.0;
212 const Float_t AliHBTFunction1D::fgkDefaultMax = 0.15;
213 const UInt_t AliHBTFunction1D::fgkDefaultNBinsToScale = 30;
216 AliHBTFunction1D::AliHBTFunction1D():
219 fNBinsToScale(fgkDefaultNBinsToScale)
220 {//default constructor
222 /******************************************************************/
224 AliHBTFunction1D::AliHBTFunction1D(Int_t nbins, Float_t maxXval, Float_t minXval):
227 fNBinsToScale(fgkDefaultNBinsToScale)
229 //Constructor of Two Part One Dimentional Function
230 // nbins: number of bins in histograms - default 100
231 // maxXval and minXval: range of histgram(s) default 0 - 0.15 (GeV)
232 BuildHistos(nbins,maxXval,minXval);
234 /******************************************************************/
235 AliHBTFunction1D::AliHBTFunction1D(const Char_t *name, const Char_t *title):
236 AliHBTFunction(name,title),
239 fNBinsToScale(fgkDefaultNBinsToScale)
242 /******************************************************************/
243 AliHBTFunction1D::AliHBTFunction1D(const Char_t *name, const Char_t *title,
244 Int_t nbins, Float_t maxXval, Float_t minXval):
245 AliHBTFunction(name,title),
248 fNBinsToScale(fgkDefaultNBinsToScale)
251 BuildHistos(nbins,maxXval,minXval);
253 /******************************************************************/
255 AliHBTFunction1D::AliHBTFunction1D(const AliHBTFunction1D& source):
256 AliHBTFunction(source)
258 // Copy constructor needed by the coding conventions byt not used
259 Fatal("AliHBTFunction1D(const AliHBTFunction1D&)","Cpy ctor not usable.");
261 /******************************************************************/
263 AliHBTFunction1D& AliHBTFunction1D::operator= (const AliHBTFunction1D & /*source*/)
265 // Assignment needed by the coding conventions byt not used
266 Fatal("Assignment operator","not implemented");
269 /******************************************************************/
271 AliHBTFunction1D::~AliHBTFunction1D()
277 /******************************************************************/
278 void AliHBTFunction1D::BuildHistos()
280 //builds histograms with default settings
281 BuildHistos(fgkDefaultNBins,fgkDefaultMax,fgkDefaultMin);
284 /******************************************************************/
286 void AliHBTFunction1D::BuildHistos(Int_t nbins, Float_t max, Float_t min)
288 //builds numarator and denominator hitograms
289 TString numstr = fName + " Numerator"; //title and name of the
290 //numerator histogram
291 TString denstr = fName + " Denominator";//title and name of the
292 //denominator histogram
293 fNumerator = new TH1D(numstr.Data(),numstr.Data(),nbins,min,max);
294 fDenominator = new TH1D(denstr.Data(),denstr.Data(),nbins,min,max);
297 fDenominator->Sumw2();
299 /******************************************************************/
301 Double_t AliHBTFunction1D::Scale()
303 //Calculates the factor that should be used to scale
304 //quatience of fNumerator and fDenominator to 1 at tail
305 return Scale(fNumerator,fDenominator);
307 /******************************************************************/
309 Double_t AliHBTFunction1D::Scale(TH1D* num,TH1D* den)
311 //Calculates the factor that should be used to scale
312 //quatience of num and den to 1 at tail
314 if (gDebug>0) Info("Scale","Enetered Scale()");
317 Error("Scale","No numerator");
322 Error("Scale","No denominator");
326 if(fNBinsToScale < 1)
328 Error("Scale","Number of bins for scaling is smaller thnan 1");
331 UInt_t nbins = num->GetNbinsX();
332 if (fNBinsToScale > nbins)
334 Error("Scale","Number of bins for scaling is bigger thnan number of bins in histograms");
337 if (gDebug>0) Info("Scale","No errors detected");
343 Int_t offset = nbins - fNBinsToScale - 1;
345 for (UInt_t i = offset; i< nbins; i++)
347 if ( num->GetBinContent(i) > 0.0 )
349 ratio = den->GetBinContent(i)/num->GetBinContent(i);
355 if(gDebug > 0) Info("Scale","sum=%f fNBinsToScale=%d n=%d",sum,fNBinsToScale,n);
357 if (n == 0) return 0.0;
358 Double_t ret = sum/((Double_t)n);
360 if(gDebug > 0) Info("Scale","returning %f",ret);
364 /******************************************************************/
365 /******************************************************************/
366 /******************************************************************/
368 //____________________
369 ///////////////////////////////////////////////////////
371 // AliHBTFunction2D //
373 // Base Calss for 2-dimensinal Functions //
375 // Piotr.Skowronski@cern.ch //
376 // http://alisoft.cern.ch/people/skowron/analyzer //
378 ///////////////////////////////////////////////////////
380 ClassImp( AliHBTFunction2D )
382 const Int_t AliHBTFunction2D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms
383 const Float_t AliHBTFunction2D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms
384 const Float_t AliHBTFunction2D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms
386 const Int_t AliHBTFunction2D::fgkDefaultNBinsY = 200;//default number of Bins in histograms
387 const Float_t AliHBTFunction2D::fgkDefaultMinY = -0.15;//Default min value of histograms
388 const Float_t AliHBTFunction2D::fgkDefaultMaxY = 0.15;//Default max value of histograms
390 const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale
391 const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale
393 /******************************************************************/
394 AliHBTFunction2D::AliHBTFunction2D():
397 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
398 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
399 {//default constructor
401 /******************************************************************/
402 AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title):
403 AliHBTFunction(name,title),
406 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
407 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
410 /******************************************************************/
412 AliHBTFunction2D::AliHBTFunction2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
413 Int_t nYbins, Double_t maxYval, Double_t minYval):
416 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
417 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
419 BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval);
421 /******************************************************************/
423 AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title,
424 Int_t nXbins, Double_t maxXval, Double_t minXval,
425 Int_t nYbins, Double_t maxYval, Double_t minYval):
426 AliHBTFunction(name,title),
429 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
430 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
432 BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval);
434 /******************************************************************/
435 AliHBTFunction2D::AliHBTFunction2D(const AliHBTFunction2D & source):
436 AliHBTFunction(source)
438 // Copy constructor needed by the coding conventions byt not used
439 Fatal("AliHBTFunction2D(const AliHBTFunction2D&)","Cpy ctor not usable.");
441 /******************************************************************/
443 AliHBTFunction2D& AliHBTFunction2D::operator= (const AliHBTFunction2D& /*source*/) {
444 // Assignment needed by the coding conventions byt not used
445 Fatal("Assignment operator","not implemented");
448 /******************************************************************/
450 AliHBTFunction2D::~AliHBTFunction2D()
456 /******************************************************************/
458 void AliHBTFunction2D::BuildHistos()
460 //Creates default histograms
461 BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX,
462 fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY);
464 /******************************************************************/
466 void AliHBTFunction2D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
467 Int_t nybins, Float_t ymax, Float_t ymin)
469 //Builds numerator and denominator histograms (2d-case)
470 TString numstr = fName + " Numerator"; //title and name of the
471 //numerator histogram
472 TString denstr = fName + " Denominator";//title and name of the
473 //denominator histogram
475 fNumerator = new TH2D(numstr.Data(),numstr.Data(),
476 nxbins,xmin,xmax,nybins,ymin,ymax);
478 fDenominator = new TH2D(denstr.Data(),denstr.Data(),
479 nxbins,xmin,xmax,nybins,ymin,ymax);
482 fDenominator->Sumw2();
484 /******************************************************************/
486 void AliHBTFunction2D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn)
488 //defines area used for scaling factor calculation
492 /******************************************************************/
494 Double_t AliHBTFunction2D::Scale()
496 // Calculates the factor that should be used to scale
497 // quatience of fNumerator and fDenominator to 1 at
499 if (gDebug>0) Info("Scale","Enetered Scale()");
502 Error("Scale","No numerator");
507 Error("Scale","No denominator");
511 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) )
513 Error("Scale","Number of bins for scaling is smaller thnan 1");
516 UInt_t nbinsX = fNumerator->GetNbinsX();
517 if (fNBinsToScaleX > nbinsX)
519 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
523 UInt_t nbinsY = fNumerator->GetNbinsX();
524 if (fNBinsToScaleY > nbinsY)
526 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
530 if (gDebug>0) Info("Scale","No errors detected");
532 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
533 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis X
539 for (UInt_t j = offsetY; j< nbinsY; j++)
540 for (UInt_t i = offsetX; i< nbinsX; i++)
542 if ( fNumerator->GetBinContent(i,j) > 0.0 )
544 ratio = fDenominator->GetBinContent(i,j)/fNumerator->GetBinContent(i,j);
550 if(gDebug > 0) Info("Scale","sum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d n=%d",sum,fNBinsToScaleX,fNBinsToScaleY,n);
552 if (n == 0) return 0.0;
553 Double_t ret = sum/((Double_t)n);
555 if(gDebug > 0) Info("Scale","returning %f",ret);
559 /******************************************************************/
560 /******************************************************************/
561 /******************************************************************/
563 //____________________
564 ///////////////////////////////////////////////////////
566 // AliHBTFunction3D //
568 // Base Calss for 3-dimensinal Functions //
570 // Piotr.Skowronski@cern.ch //
571 // http://alisoft.cern.ch/people/skowron/analyzer //
573 ///////////////////////////////////////////////////////
575 ClassImp( AliHBTFunction3D)
577 const Int_t AliHBTFunction3D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms
578 const Float_t AliHBTFunction3D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms
579 const Float_t AliHBTFunction3D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms
581 const Int_t AliHBTFunction3D::fgkDefaultNBinsY = 200;//default number of Bins in histograms
582 const Float_t AliHBTFunction3D::fgkDefaultMinY = -0.15;//Default min value of histograms
583 const Float_t AliHBTFunction3D::fgkDefaultMaxY = 0.15;//Default max value of histograms
585 const Int_t AliHBTFunction3D::fgkDefaultNBinsZ = 200;//default number of Bins in histograms
586 const Float_t AliHBTFunction3D::fgkDefaultMinZ = -0.15;//Default min value of histograms
587 const Float_t AliHBTFunction3D::fgkDefaultMaxZ = 0.15;//Default max value of histograms
589 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale
590 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale
591 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleZ = 30;//Default number of bins used for scaling to tale
593 AliHBTFunction3D::AliHBTFunction3D():
596 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
597 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
598 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
602 /******************************************************************/
604 AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title):
605 AliHBTFunction(name,title),
608 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
609 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
610 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
614 /******************************************************************/
616 AliHBTFunction3D::AliHBTFunction3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
617 Int_t nYbins, Double_t maxYval, Double_t minYval,
618 Int_t nZbins, Double_t maxZval, Double_t minZval):
621 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
622 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
623 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
626 BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
628 /******************************************************************/
630 AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title,
631 Int_t nXbins, Double_t maxXval, Double_t minXval,
632 Int_t nYbins, Double_t maxYval, Double_t minYval,
633 Int_t nZbins, Double_t maxZval, Double_t minZval):
634 AliHBTFunction(name,title),
637 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
638 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
639 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
642 BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
644 /******************************************************************/
646 AliHBTFunction3D::AliHBTFunction3D(const AliHBTFunction3D& source):
647 AliHBTFunction(source)
649 // Copy constructor needed by the coding conventions byt not used
650 Fatal("AliHBTFunction3D(const AliHBTFunction3D&)","Cpy ctor not usable.");
652 /******************************************************************/
654 AliHBTFunction3D& AliHBTFunction3D::operator= (const AliHBTFunction3D & /*source*/)
656 // Assignment needed by the coding conventions byt not used
657 Fatal("Assignment operator","not implemented");
660 /******************************************************************/
663 AliHBTFunction3D::~AliHBTFunction3D()
668 /******************************************************************/
670 void AliHBTFunction3D::BuildHistos()
672 //Creates default histograms
673 BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX,
674 fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY,
675 fgkDefaultNBinsZ,fgkDefaultMaxZ,fgkDefaultMinZ);
677 /******************************************************************/
679 void AliHBTFunction3D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
680 Int_t nybins, Float_t ymax, Float_t ymin,
681 Int_t nzbins, Float_t zmax, Float_t zmin)
683 //Builds numerator and denominator histograms (3d-case)
684 TString numstr = fName + " Numerator"; //title and name of the
685 //numerator histogram
686 TString denstr = fName + " Denominator";//title and name of the
687 //denominator histogram
689 fNumerator = new TH3D(numstr.Data(),numstr.Data(),
690 nxbins,xmin,xmin,nybins,ymin,ymin,nzbins,zmin,zmin);
692 fDenominator = new TH3D(denstr.Data(),denstr.Data(),
693 nxbins,xmin,xmin,nybins,ymin,ymin,nzbins,zmin,zmin);
696 fDenominator->Sumw2();
699 /******************************************************************/
701 Double_t AliHBTFunction3D::Scale()
703 // Calculates the factor that should be used to scale
704 // quatience of fNumerator and fDenominator to 1 at
706 if (gDebug>0) Info("Scale","Enetered Scale()");
709 Error("Scale","No numerator");
714 Error("Scale","No denominator");
718 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) || (fNBinsToScaleZ < 1))
720 Error("Scale","Number of bins for scaling is smaller thnan 1");
723 UInt_t nbinsX = fNumerator->GetNbinsX();
724 if (fNBinsToScaleX > nbinsX)
726 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
730 UInt_t nbinsY = fNumerator->GetNbinsX();
731 if (fNBinsToScaleY > nbinsY)
733 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
737 UInt_t nbinsZ = fNumerator->GetNbinsZ();
738 if (fNBinsToScaleZ > nbinsZ)
740 Error("Scale","Number of Z bins for scaling is bigger thnan number of bins in histograms");
744 if (gDebug>0) Info("Scale","No errors detected");
746 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
747 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis Y
748 Int_t offsetZ = nbinsZ - fNBinsToScaleZ - 1; //bin that we start loop over bins in axis Z
754 for (UInt_t k = offsetZ; k<nbinsZ; k++)
755 for (UInt_t j = offsetY; j<nbinsY; j++)
756 for (UInt_t i = offsetX; i<nbinsX; i++)
758 if ( fNumerator->GetBinContent(i,j,k) > 0.0 )
760 ratio = fDenominator->GetBinContent(i,j,k)/fNumerator->GetBinContent(i,j,k);
767 Info("Scale","sum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d fNBinsToScaleZ=%d n=%d",
768 sum,fNBinsToScaleX,fNBinsToScaleY,fNBinsToScaleZ,n);
770 if (n == 0) return 0.0;
771 Double_t ret = sum/((Double_t)n);
773 if(gDebug > 0) Info("Scale","returning %f",ret);
776 /******************************************************************/
778 void AliHBTFunction3D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn,UInt_t zn)
780 //sets up the volume to be used for scaling to tail
786 /******************************************************************/
787 /******************************************************************/
788 /******************************************************************/
789 /******************************************************************/
790 /******************************************************************/
791 /******************************************************************/
792 /******************************************************************/
793 /******************************************************************/
794 /******************************************************************/
796 //____________________
797 ///////////////////////////////////////////////////////
799 // AliHBTOnePairFctn1D //
801 // Base Calss for 1-dimensinal Functions that need //
802 // one pair to fill function //
804 // Piotr.Skowronski@cern.ch //
805 // http://alisoft.cern.ch/people/skowron/analyzer //
807 ///////////////////////////////////////////////////////
809 ClassImp( AliHBTOnePairFctn1D )
810 /******************************************************************/
812 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
813 AliHBTFunction1D(nbins,maxXval,minXval)
817 /******************************************************************/
819 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title):
820 AliHBTFunction1D(name,title)
824 /******************************************************************/
826 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
827 Int_t nbins, Float_t maxXval, Float_t minXval):
828 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
832 /******************************************************************/
834 void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair)
836 //Fills the numerator using pair from the same event
837 pair = CheckPair(pair);
838 if(pair) fNumerator->Fill(GetValue(pair));
840 /******************************************************************/
841 void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair)
843 //Fills the denumerator using mixed pairs
844 pair = CheckPair(pair);
845 if(pair) fDenominator->Fill(GetValue(pair));
848 /******************************************************************/
849 /******************************************************************/
850 /******************************************************************/
852 //____________________
853 ///////////////////////////////////////////////////////
855 // AliHBTOnePairFctn2D //
857 // Base Calss for 2-dimensinal Functions that need //
858 // one pair to fill function //
860 // Piotr.Skowronski@cern.ch //
861 // http://alisoft.cern.ch/people/skowron/analyzer //
863 ///////////////////////////////////////////////////////
865 ClassImp( AliHBTOnePairFctn2D )
866 /******************************************************************/
868 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title):
869 AliHBTFunction2D(name,title)
873 /******************************************************************/
875 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
876 Int_t nYbins, Double_t maxYval, Double_t minYval):
877 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
881 /******************************************************************/
883 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title,
884 Int_t nXbins, Double_t maxXval, Double_t minXval,
885 Int_t nYbins, Double_t maxYval, Double_t minYval):
886 AliHBTFunction2D(name,title, nXbins, maxXval, minXval, nYbins, maxYval, minYval)
890 /******************************************************************/
892 void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
894 // Fills the numerator using pairs from the same event
895 pair = CheckPair(pair);
900 fNumerator->Fill(x,y);
903 /******************************************************************/
905 void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
907 // Fills the denumerator using mixed pairs
908 pair = CheckPair(pair);
913 fDenominator->Fill(x,y);
916 /******************************************************************/
917 /******************************************************************/
918 /******************************************************************/
919 /******************************************************************/
920 //____________________
921 ///////////////////////////////////////////////////////
923 // AliHBTOnePairFctn3D //
925 // Base Calss for 3-dimensinal Functions that need //
926 // one pair to fill function //
928 // Piotr.Skowronski@cern.ch //
929 // http://alisoft.cern.ch/people/skowron/analyzer //
931 ///////////////////////////////////////////////////////
932 ClassImp( AliHBTOnePairFctn3D)
934 /******************************************************************/
936 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title):
937 AliHBTFunction3D(name,title)
941 /******************************************************************/
943 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
944 Int_t nYbins, Double_t maxYval, Double_t minYval,
945 Int_t nZbins, Double_t maxZval, Double_t minZval):
946 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
950 /******************************************************************/
952 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title,
953 Int_t nXbins, Double_t maxXval, Double_t minXval,
954 Int_t nYbins, Double_t maxYval, Double_t minYval,
955 Int_t nZbins, Double_t maxZval, Double_t minZval):
956 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
960 /******************************************************************/
962 void AliHBTOnePairFctn3D::ProcessSameEventParticles(AliHBTPair* pair)
964 //Reacts on pair coming from same event (real pairs)
965 //and fills numerator histogram
966 pair = CheckPair(pair);
970 GetValues(pair,x,y,z);
971 fNumerator->Fill(x,y,z);
974 /******************************************************************/
976 void AliHBTOnePairFctn3D::ProcessDiffEventParticles(AliHBTPair* pair)
978 //Reacts on pair coming from different events (mixed pairs)
979 //and fills denominator histogram
980 pair = CheckPair(pair);
984 GetValues(pair,x,y,z);
985 fDenominator->Fill(x,y,z);
989 /******************************************************************/
990 /******************************************************************/
991 /******************************************************************/
993 //____________________
994 ///////////////////////////////////////////////////////
996 // AliHBTTwoPairFctn1D //
998 // Base Calss for 1-dimensinal Functions that need //
999 // two pair (simulated and reconstructed) //
1000 // to fill function //
1002 // Piotr.Skowronski@cern.ch //
1003 // http://alisoft.cern.ch/people/skowron/analyzer //
1005 ///////////////////////////////////////////////////////
1006 ClassImp(AliHBTTwoPairFctn1D)
1007 /******************************************************************/
1009 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
1010 AliHBTFunction1D(nbins,maxXval,minXval)
1014 /******************************************************************/
1016 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title):
1017 AliHBTFunction1D(name,title)
1021 /******************************************************************/
1023 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title,
1024 Int_t nbins, Float_t maxXval, Float_t minXval):
1025 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
1029 /******************************************************************/
1031 void AliHBTTwoPairFctn1D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1033 // Fills the numerator using pairs from the same event
1034 partpair = CheckPair(partpair);
1037 Double_t x = GetValue(trackpair,partpair);
1038 fNumerator->Fill(x);
1041 /******************************************************************/
1043 void AliHBTTwoPairFctn1D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1045 // Fills the denumerator usin mixed pairs
1046 partpair = CheckPair(partpair);
1049 Double_t x = GetValue(trackpair,partpair);
1050 fDenominator->Fill(x);
1053 /******************************************************************/
1054 /******************************************************************/
1055 /******************************************************************/
1057 //____________________
1058 ///////////////////////////////////////////////////////
1060 // AliHBTTwoPairFctn2D //
1062 // Base Calss for 2-dimensinal Functions that need //
1063 // two pair (simulated and reconstructed) //
1064 // to fill function //
1066 // Piotr.Skowronski@cern.ch //
1067 // http://alisoft.cern.ch/people/skowron/analyzer //
1069 ///////////////////////////////////////////////////////
1071 ClassImp(AliHBTTwoPairFctn2D)
1073 /******************************************************************/
1075 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title):
1076 AliHBTFunction2D(name,title)
1080 /******************************************************************/
1082 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1083 Int_t nYbins, Double_t maxYval, Double_t minYval):
1084 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1088 /******************************************************************/
1090 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title,
1091 Int_t nXbins, Double_t maxXval, Double_t minXval,
1092 Int_t nYbins, Double_t maxYval, Double_t minYval):
1093 AliHBTFunction2D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1097 /******************************************************************/
1099 void AliHBTTwoPairFctn2D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1101 //processes pair of particles coming from a same events (real pair)
1102 partpair = CheckPair(partpair); //check cuts
1106 GetValues(trackpair,partpair,x,y);
1107 fNumerator->Fill(x,y);
1110 /******************************************************************/
1112 void AliHBTTwoPairFctn2D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1114 //processes pair of particles coming from a different events (mixed pair)
1115 partpair = CheckPair(partpair);
1119 GetValues(trackpair,partpair,x,y);
1120 fDenominator->Fill(x,y);
1124 /******************************************************************/
1125 /******************************************************************/
1126 /******************************************************************/
1128 //____________________
1129 ///////////////////////////////////////////////////////
1131 // AliHBTTwoPairFctn3D //
1133 // Base Calss for 3-dimensinal Functions that need //
1134 // two pair (simulated and reconstructed) //
1135 // to fill function //
1137 // Piotr.Skowronski@cern.ch //
1138 // http://alisoft.cern.ch/people/skowron/analyzer //
1140 ///////////////////////////////////////////////////////
1142 ClassImp(AliHBTTwoPairFctn3D)
1144 /******************************************************************/
1146 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title):
1147 AliHBTFunction3D(name,title)
1151 /******************************************************************/
1153 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1154 Int_t nYbins, Double_t maxYval, Double_t minYval,
1155 Int_t nZbins, Double_t maxZval, Double_t minZval):
1156 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1160 /******************************************************************/
1162 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title,
1163 Int_t nXbins, Double_t maxXval, Double_t minXval,
1164 Int_t nYbins, Double_t maxYval, Double_t minYval,
1165 Int_t nZbins, Double_t maxZval, Double_t minZval):
1166 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1170 /******************************************************************/
1172 void AliHBTTwoPairFctn3D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1174 // Fills th numerator using pairs from the same event
1175 partpair = CheckPair(partpair);
1179 GetValues(trackpair,partpair,x,y,z);
1180 fNumerator->Fill(x,y,z);
1183 /******************************************************************/
1185 void AliHBTTwoPairFctn3D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1187 // Fills the denumerator using mixed pairs
1188 partpair = CheckPair(partpair);
1192 GetValues(trackpair,partpair,x,y,z);
1193 fDenominator->Fill(x,y,z);
1198 /******************************************************************/
1199 /******************************************************************/
1200 /******************************************************************/