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
45 fWriteNumAndDen(kFALSE)
49 /******************************************************************/
51 AliHBTFunction::AliHBTFunction(const char* name,const char* title):
53 fPairCut(new AliHBTEmptyPairCut()), //dummy cut
54 fWriteNumAndDen(kFALSE)
58 /******************************************************************/
60 AliHBTFunction::AliHBTFunction(const AliHBTFunction & source):
62 fPairCut((AliHBTPairCut*)source.fPairCut->Clone()),
63 fWriteNumAndDen(source.fWriteNumAndDen)
65 // Copy constructor needed by the coding conventions
67 /******************************************************************/
69 AliHBTFunction::~AliHBTFunction()
74 /******************************************************************/
75 AliHBTFunction & AliHBTFunction::operator= (const AliHBTFunction & source)
77 // Assignment needed by the coding conventions
79 fPairCut = (AliHBTPairCut*)source.fPairCut->Clone();
83 void AliHBTFunction::WriteFunction()
85 //writes result of the function to file
88 if (GetNumerator()) GetNumerator()->Write();
89 if (GetDenominator()) GetDenominator()->Write();
91 TH1* res = GetResult();
92 if (res) res->Write();
94 /******************************************************************/
96 TH1* AliHBTFunction::GetRatio(Double_t normfactor)
98 //returns ratio of numerator and denominator
100 if (AliHBTParticle::GetDebug()>0) Info("GetRatio","Norm. Factor is %f for %s",normfactor,GetName());
102 if (normfactor == 0.0)
104 Error("GetRatio","Scaling Factor is 0. Null poiner returned");
107 TString str = fName + " ratio";
108 TH1 *result = (TH1*)GetNumerator()->Clone(str.Data());
110 result->SetTitle(str.Data());
112 result->Divide(GetNumerator(),GetDenominator(),normfactor);
117 /******************************************************************/
118 void AliHBTFunction::SetPairCut(AliHBTPairCut* cut)
120 //Sets new Pair Cut. Old one is deleted
121 //Note that it is created new object instead of simple pointer set
122 //I do not want to have pointer
123 //to object created somewhere else
124 //because in that case I could not believe that
125 //it would always exist (sb could delete it)
126 //so we have always own copy
130 Error("AliHBTFunction::SetPairCut","argument is NULL");
134 fPairCut = (AliHBTPairCut*)cut->Clone();
138 /******************************************************************/
140 void AliHBTFunction::Rename(const Char_t * name)
142 //renames the function and histograms
146 TString numstr = fName + " Numerator"; //title and name of the
147 //numerator histogram
148 TString denstr = fName + " Denominator";//title and name of the
149 //denominator histogram
151 GetNumerator()->SetName(numstr.Data());
152 GetNumerator()->SetTitle(numstr.Data());
154 GetDenominator()->SetName(denstr.Data());
155 GetDenominator()->SetTitle(denstr.Data());
159 void AliHBTFunction::Rename(const Char_t * name, const Char_t * title)
161 //renames and retitle the function and histograms
166 TString numstrn = fName + " Numerator"; //name of the
167 //numerator histogram
169 TString numstrt = fTitle + " Numerator"; //title of the
170 //numerator histogram
172 TString denstrn = fName + " Denominator";//name of the
173 //denominator histogram
175 TString denstrt = fTitle + " Denominator";//title of the
176 //denominator histogram
179 GetNumerator()->SetName(numstrn.Data());
180 GetNumerator()->SetTitle(numstrt.Data());
182 GetDenominator()->SetName(denstrn.Data());
183 GetDenominator()->SetTitle(denstrt.Data());
187 /******************************************************************/
189 void AliHBTFunction::InitFunction()
191 //Iniotializes fctn.: Resets histograms
192 //In case histograms are not created in ctor, builds with default parameters
193 if ( !(GetNumerator()&&GetDenominator()) ) BuildHistos();
194 GetNumerator()->Reset();
195 GetDenominator()->Reset();
198 /******************************************************************/
199 /******************************************************************/
200 /******************************************************************/
202 ClassImp( AliHBTOnePairFctn )
204 /******************************************************************/
205 /******************************************************************/
206 /******************************************************************/
208 ClassImp( AliHBTTwoPairFctn)
210 /******************************************************************/
211 /******************************************************************/
212 /******************************************************************/
214 ClassImp( AliHBTFunction1D )
216 const Int_t AliHBTFunction1D::fgkDefaultNBins = 100;
217 const Float_t AliHBTFunction1D::fgkDefaultMin = 0.0;
218 const Float_t AliHBTFunction1D::fgkDefaultMax = 0.15;
219 const UInt_t AliHBTFunction1D::fgkDefaultNBinsToScale = 30;
222 AliHBTFunction1D::AliHBTFunction1D():
225 fNBinsToScale(fgkDefaultNBinsToScale)
226 {//default constructor
228 /******************************************************************/
230 AliHBTFunction1D::AliHBTFunction1D(Int_t nbins, Float_t maxXval, Float_t minXval):
233 fNBinsToScale(fgkDefaultNBinsToScale)
235 //Constructor of Two Part One Dimentional Function
236 // nbins: number of bins in histograms - default 100
237 // maxXval and minXval: range of histgram(s) default 0 - 0.15 (GeV)
238 BuildHistos(nbins,maxXval,minXval);
240 /******************************************************************/
241 AliHBTFunction1D::AliHBTFunction1D(const Char_t *name, const Char_t *title):
242 AliHBTFunction(name,title),
245 fNBinsToScale(fgkDefaultNBinsToScale)
248 /******************************************************************/
249 AliHBTFunction1D::AliHBTFunction1D(const Char_t *name, const Char_t *title,
250 Int_t nbins, Float_t maxXval, Float_t minXval):
251 AliHBTFunction(name,title),
254 fNBinsToScale(fgkDefaultNBinsToScale)
257 BuildHistos(nbins,maxXval,minXval);
259 /******************************************************************/
261 AliHBTFunction1D::AliHBTFunction1D(const AliHBTFunction1D& source):
262 AliHBTFunction(source)
264 // Copy constructor needed by the coding conventions byt not used
265 Fatal("AliHBTFunction1D(const AliHBTFunction1D&)","Cpy ctor not usable.");
267 /******************************************************************/
269 AliHBTFunction1D& AliHBTFunction1D::operator= (const AliHBTFunction1D & /*source*/)
271 // Assignment needed by the coding conventions byt not used
272 Fatal("Assignment operator","not implemented");
275 /******************************************************************/
277 AliHBTFunction1D::~AliHBTFunction1D()
283 /******************************************************************/
284 void AliHBTFunction1D::BuildHistos()
286 //builds histograms with default settings
287 BuildHistos(fgkDefaultNBins,fgkDefaultMax,fgkDefaultMin);
290 /******************************************************************/
292 void AliHBTFunction1D::BuildHistos(Int_t nbins, Float_t max, Float_t min)
294 //builds numarator and denominator hitograms
295 TString numstr = fName + " Numerator"; //title and name of the
296 //numerator histogram
297 TString denstr = fName + " Denominator";//title and name of the
298 //denominator histogram
299 fNumerator = new TH1D(numstr.Data(),numstr.Data(),nbins,min,max);
300 fDenominator = new TH1D(denstr.Data(),denstr.Data(),nbins,min,max);
303 fDenominator->Sumw2();
305 /******************************************************************/
307 Double_t AliHBTFunction1D::Scale()
309 //Calculates the factor that should be used to scale
310 //quatience of fNumerator and fDenominator to 1 at tail
311 return Scale(fNumerator,fDenominator);
313 /******************************************************************/
315 Double_t AliHBTFunction1D::Scale(TH1D* num,TH1D* den)
317 //Calculates the factor that should be used to scale
318 //quatience of num and den to 1 at tail
320 if (AliHBTParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
323 Error("Scale","No numerator");
328 Error("Scale","No denominator");
332 if(fNBinsToScale < 1)
334 Error("Scale","Number of bins for scaling is smaller thnan 1");
337 UInt_t nbins = num->GetNbinsX();
338 if (fNBinsToScale > nbins)
340 Error("Scale","Number of bins for scaling is bigger thnan number of bins in histograms");
343 if (AliHBTParticle::GetDebug()>0) Info("Scale","No errors detected");
349 Int_t offset = nbins - fNBinsToScale - 1;
351 for (UInt_t i = offset; i< nbins; i++)
353 if ( num->GetBinContent(i) > 0.0 )
355 ratio = den->GetBinContent(i)/num->GetBinContent(i);
361 if(AliHBTParticle::GetDebug() > 0) Info("Scale","sum=%f fNBinsToScale=%d n=%d",sum,fNBinsToScale,n);
363 if (n == 0) return 0.0;
364 Double_t ret = sum/((Double_t)n);
366 if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
370 /******************************************************************/
371 /******************************************************************/
372 /******************************************************************/
374 //____________________
375 ///////////////////////////////////////////////////////
377 // AliHBTFunction2D //
379 // Base Calss for 2-dimensinal Functions //
381 // Piotr.Skowronski@cern.ch //
382 // http://alisoft.cern.ch/people/skowron/analyzer //
384 ///////////////////////////////////////////////////////
386 ClassImp( AliHBTFunction2D )
388 const Int_t AliHBTFunction2D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms
389 const Float_t AliHBTFunction2D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms
390 const Float_t AliHBTFunction2D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms
392 const Int_t AliHBTFunction2D::fgkDefaultNBinsY = 200;//default number of Bins in histograms
393 const Float_t AliHBTFunction2D::fgkDefaultMinY = -0.15;//Default min value of histograms
394 const Float_t AliHBTFunction2D::fgkDefaultMaxY = 0.15;//Default max value of histograms
396 const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale
397 const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale
399 /******************************************************************/
400 AliHBTFunction2D::AliHBTFunction2D():
403 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
404 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
405 {//default constructor
407 /******************************************************************/
408 AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title):
409 AliHBTFunction(name,title),
412 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
413 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
416 /******************************************************************/
418 AliHBTFunction2D::AliHBTFunction2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
419 Int_t nYbins, Double_t maxYval, Double_t minYval):
422 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
423 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
425 BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval);
427 /******************************************************************/
429 AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title,
430 Int_t nXbins, Double_t maxXval, Double_t minXval,
431 Int_t nYbins, Double_t maxYval, Double_t minYval):
432 AliHBTFunction(name,title),
435 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
436 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
438 BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval);
440 /******************************************************************/
441 AliHBTFunction2D::AliHBTFunction2D(const AliHBTFunction2D & source):
442 AliHBTFunction(source)
444 // Copy constructor needed by the coding conventions byt not used
445 Fatal("AliHBTFunction2D(const AliHBTFunction2D&)","Cpy ctor not usable.");
447 /******************************************************************/
449 AliHBTFunction2D& AliHBTFunction2D::operator= (const AliHBTFunction2D& /*source*/) {
450 // Assignment needed by the coding conventions byt not used
451 Fatal("Assignment operator","not implemented");
454 /******************************************************************/
456 AliHBTFunction2D::~AliHBTFunction2D()
462 /******************************************************************/
464 void AliHBTFunction2D::BuildHistos()
466 //Creates default histograms
467 BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX,
468 fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY);
470 /******************************************************************/
472 void AliHBTFunction2D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
473 Int_t nybins, Float_t ymax, Float_t ymin)
475 //Builds numerator and denominator histograms (2d-case)
476 TString numstr = fName + " Numerator"; //title and name of the
477 //numerator histogram
478 TString denstr = fName + " Denominator";//title and name of the
479 //denominator histogram
481 fNumerator = new TH2D(numstr.Data(),numstr.Data(),
482 nxbins,xmin,xmax,nybins,ymin,ymax);
484 fDenominator = new TH2D(denstr.Data(),denstr.Data(),
485 nxbins,xmin,xmax,nybins,ymin,ymax);
488 fDenominator->Sumw2();
490 /******************************************************************/
492 void AliHBTFunction2D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn)
494 //defines area used for scaling factor calculation
498 /******************************************************************/
500 Double_t AliHBTFunction2D::Scale()
502 // Calculates the factor that should be used to scale
503 // quatience of fNumerator and fDenominator to 1 at
505 if (AliHBTParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
508 Error("Scale","No numerator");
513 Error("Scale","No denominator");
517 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) )
519 Error("Scale","Number of bins for scaling is smaller thnan 1");
522 UInt_t nbinsX = fNumerator->GetNbinsX();
523 if (fNBinsToScaleX > nbinsX)
525 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
529 UInt_t nbinsY = fNumerator->GetNbinsX();
530 if (fNBinsToScaleY > nbinsY)
532 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
536 if (AliHBTParticle::GetDebug()>0) Info("Scale","No errors detected");
538 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
539 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis X
545 for (UInt_t j = offsetY; j< nbinsY; j++)
546 for (UInt_t i = offsetX; i< nbinsX; i++)
548 if ( fNumerator->GetBinContent(i,j) > 0.0 )
550 ratio = fDenominator->GetBinContent(i,j)/fNumerator->GetBinContent(i,j);
556 if(AliHBTParticle::GetDebug() > 0) Info("Scale","sum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d n=%d",sum,fNBinsToScaleX,fNBinsToScaleY,n);
558 if (n == 0) return 0.0;
559 Double_t ret = sum/((Double_t)n);
561 if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
565 /******************************************************************/
566 /******************************************************************/
567 /******************************************************************/
569 //____________________
570 ///////////////////////////////////////////////////////
572 // AliHBTFunction3D //
574 // Base Calss for 3-dimensinal Functions //
576 // Piotr.Skowronski@cern.ch //
577 // http://alisoft.cern.ch/people/skowron/analyzer //
579 ///////////////////////////////////////////////////////
581 ClassImp( AliHBTFunction3D)
583 const Int_t AliHBTFunction3D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms
584 const Float_t AliHBTFunction3D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms
585 const Float_t AliHBTFunction3D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms
587 const Int_t AliHBTFunction3D::fgkDefaultNBinsY = 200;//default number of Bins in histograms
588 const Float_t AliHBTFunction3D::fgkDefaultMinY = -0.15;//Default min value of histograms
589 const Float_t AliHBTFunction3D::fgkDefaultMaxY = 0.15;//Default max value of histograms
591 const Int_t AliHBTFunction3D::fgkDefaultNBinsZ = 200;//default number of Bins in histograms
592 const Float_t AliHBTFunction3D::fgkDefaultMinZ = -0.15;//Default min value of histograms
593 const Float_t AliHBTFunction3D::fgkDefaultMaxZ = 0.15;//Default max value of histograms
595 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale
596 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale
597 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleZ = 30;//Default number of bins used for scaling to tale
599 AliHBTFunction3D::AliHBTFunction3D():
602 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
603 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
604 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
608 /******************************************************************/
610 AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title):
611 AliHBTFunction(name,title),
614 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
615 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
616 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
620 /******************************************************************/
622 AliHBTFunction3D::AliHBTFunction3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
623 Int_t nYbins, Double_t maxYval, Double_t minYval,
624 Int_t nZbins, Double_t maxZval, Double_t minZval):
627 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
628 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
629 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
632 BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
634 /******************************************************************/
636 AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title,
637 Int_t nXbins, Double_t maxXval, Double_t minXval,
638 Int_t nYbins, Double_t maxYval, Double_t minYval,
639 Int_t nZbins, Double_t maxZval, Double_t minZval):
640 AliHBTFunction(name,title),
643 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
644 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
645 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
648 BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
650 /******************************************************************/
652 AliHBTFunction3D::AliHBTFunction3D(const AliHBTFunction3D& source):
653 AliHBTFunction(source)
655 // Copy constructor needed by the coding conventions byt not used
656 Fatal("AliHBTFunction3D(const AliHBTFunction3D&)","Cpy ctor not usable.");
658 /******************************************************************/
660 AliHBTFunction3D& AliHBTFunction3D::operator= (const AliHBTFunction3D & /*source*/)
662 // Assignment needed by the coding conventions byt not used
663 Fatal("Assignment operator","not implemented");
666 /******************************************************************/
669 AliHBTFunction3D::~AliHBTFunction3D()
674 /******************************************************************/
676 void AliHBTFunction3D::BuildHistos()
678 //Creates default histograms
679 BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX,
680 fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY,
681 fgkDefaultNBinsZ,fgkDefaultMaxZ,fgkDefaultMinZ);
683 /******************************************************************/
685 void AliHBTFunction3D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
686 Int_t nybins, Float_t ymax, Float_t ymin,
687 Int_t nzbins, Float_t zmax, Float_t zmin)
689 //Builds numerator and denominator histograms (3d-case)
690 TString numstr = fName + " Numerator"; //title and name of the
691 //numerator histogram
692 TString denstr = fName + " Denominator";//title and name of the
693 //denominator histogram
695 fNumerator = new TH3D(numstr.Data(),numstr.Data(),
696 nxbins,xmin,xmax,nybins,ymin,ymax,nzbins,zmin,zmax);
698 fDenominator = new TH3D(denstr.Data(),denstr.Data(),
699 nxbins,xmin,xmax,nybins,ymin,ymax,nzbins,zmin,zmax);
702 fDenominator->Sumw2();
705 /******************************************************************/
707 Double_t AliHBTFunction3D::Scale()
709 // Calculates the factor that should be used to scale
710 // quatience of fNumerator and fDenominator to 1 at
712 if (AliHBTParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
715 Error("Scale","No numerator");
720 Error("Scale","No denominator");
724 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) || (fNBinsToScaleZ < 1))
726 Error("Scale","Number of bins for scaling is smaller thnan 1");
729 UInt_t nbinsX = fNumerator->GetNbinsX();
730 if (fNBinsToScaleX > nbinsX)
732 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
736 UInt_t nbinsY = fNumerator->GetNbinsX();
737 if (fNBinsToScaleY > nbinsY)
739 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
743 UInt_t nbinsZ = fNumerator->GetNbinsZ();
744 if (fNBinsToScaleZ > nbinsZ)
746 Error("Scale","Number of Z bins for scaling is bigger thnan number of bins in histograms");
750 if (AliHBTParticle::GetDebug()>0) Info("Scale","No errors detected");
752 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
753 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis Y
754 Int_t offsetZ = nbinsZ - fNBinsToScaleZ - 1; //bin that we start loop over bins in axis Z
760 for (UInt_t k = offsetZ; k<nbinsZ; k++)
761 for (UInt_t j = offsetY; j<nbinsY; j++)
762 for (UInt_t i = offsetX; i<nbinsX; i++)
764 if ( fNumerator->GetBinContent(i,j,k) > 0.0 )
766 ratio = fDenominator->GetBinContent(i,j,k)/fNumerator->GetBinContent(i,j,k);
772 if(AliHBTParticle::GetDebug() > 0)
773 Info("Scale","sum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d fNBinsToScaleZ=%d n=%d",
774 sum,fNBinsToScaleX,fNBinsToScaleY,fNBinsToScaleZ,n);
776 if (n == 0) return 0.0;
777 Double_t ret = sum/((Double_t)n);
779 if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
782 /******************************************************************/
784 void AliHBTFunction3D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn,UInt_t zn)
786 //sets up the volume to be used for scaling to tail
792 /******************************************************************/
793 /******************************************************************/
794 /******************************************************************/
795 /******************************************************************/
796 /******************************************************************/
797 /******************************************************************/
798 /******************************************************************/
799 /******************************************************************/
800 /******************************************************************/
802 //____________________
803 ///////////////////////////////////////////////////////
805 // AliHBTOnePairFctn1D //
807 // Base Calss for 1-dimensinal Functions that need //
808 // one pair to fill function //
810 // Piotr.Skowronski@cern.ch //
811 // http://alisoft.cern.ch/people/skowron/analyzer //
813 ///////////////////////////////////////////////////////
815 ClassImp( AliHBTOnePairFctn1D )
816 /******************************************************************/
818 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
819 AliHBTFunction1D(nbins,maxXval,minXval)
823 /******************************************************************/
825 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title):
826 AliHBTFunction1D(name,title)
830 /******************************************************************/
832 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
833 Int_t nbins, Float_t maxXval, Float_t minXval):
834 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
838 /******************************************************************/
840 void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair)
842 //Fills the numerator using pair from the same event
843 pair = CheckPair(pair);
844 if(pair) fNumerator->Fill(GetValue(pair));
846 /******************************************************************/
847 void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair)
849 //Fills the denumerator using mixed pairs
850 pair = CheckPair(pair);
851 if(pair) fDenominator->Fill(GetValue(pair));
854 /******************************************************************/
855 /******************************************************************/
856 /******************************************************************/
858 //____________________
859 ///////////////////////////////////////////////////////
861 // AliHBTOnePairFctn2D //
863 // Base Calss for 2-dimensinal Functions that need //
864 // one pair to fill function //
866 // Piotr.Skowronski@cern.ch //
867 // http://alisoft.cern.ch/people/skowron/analyzer //
869 ///////////////////////////////////////////////////////
871 ClassImp( AliHBTOnePairFctn2D )
872 /******************************************************************/
874 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title):
875 AliHBTFunction2D(name,title)
879 /******************************************************************/
881 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
882 Int_t nYbins, Double_t maxYval, Double_t minYval):
883 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
887 /******************************************************************/
889 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title,
890 Int_t nXbins, Double_t maxXval, Double_t minXval,
891 Int_t nYbins, Double_t maxYval, Double_t minYval):
892 AliHBTFunction2D(name,title, nXbins, maxXval, minXval, nYbins, maxYval, minYval)
896 /******************************************************************/
898 void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
900 // Fills the numerator using pairs from the same event
901 pair = CheckPair(pair);
906 fNumerator->Fill(x,y);
909 /******************************************************************/
911 void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
913 // Fills the denumerator using mixed pairs
914 pair = CheckPair(pair);
919 fDenominator->Fill(x,y);
922 /******************************************************************/
923 /******************************************************************/
924 /******************************************************************/
925 /******************************************************************/
926 //____________________
927 ///////////////////////////////////////////////////////
929 // AliHBTOnePairFctn3D //
931 // Base Calss for 3-dimensinal Functions that need //
932 // one pair to fill function //
934 // Piotr.Skowronski@cern.ch //
935 // http://alisoft.cern.ch/people/skowron/analyzer //
937 ///////////////////////////////////////////////////////
938 ClassImp( AliHBTOnePairFctn3D)
940 /******************************************************************/
942 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title):
943 AliHBTFunction3D(name,title)
947 /******************************************************************/
949 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
950 Int_t nYbins, Double_t maxYval, Double_t minYval,
951 Int_t nZbins, Double_t maxZval, Double_t minZval):
952 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
956 /******************************************************************/
958 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title,
959 Int_t nXbins, Double_t maxXval, Double_t minXval,
960 Int_t nYbins, Double_t maxYval, Double_t minYval,
961 Int_t nZbins, Double_t maxZval, Double_t minZval):
962 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
966 /******************************************************************/
968 void AliHBTOnePairFctn3D::ProcessSameEventParticles(AliHBTPair* pair)
970 //Reacts on pair coming from same event (real pairs)
971 //and fills numerator histogram
972 pair = CheckPair(pair);
976 GetValues(pair,x,y,z);
977 fNumerator->Fill(x,y,z);
980 /******************************************************************/
982 void AliHBTOnePairFctn3D::ProcessDiffEventParticles(AliHBTPair* pair)
984 //Reacts on pair coming from different events (mixed pairs)
985 //and fills denominator histogram
986 pair = CheckPair(pair);
990 GetValues(pair,x,y,z);
991 fDenominator->Fill(x,y,z);
995 /******************************************************************/
996 /******************************************************************/
997 /******************************************************************/
999 //____________________
1000 ///////////////////////////////////////////////////////
1002 // AliHBTTwoPairFctn1D //
1004 // Base Calss for 1-dimensinal Functions that need //
1005 // two pair (simulated and reconstructed) //
1006 // to fill function //
1008 // Piotr.Skowronski@cern.ch //
1009 // http://alisoft.cern.ch/people/skowron/analyzer //
1011 ///////////////////////////////////////////////////////
1012 ClassImp(AliHBTTwoPairFctn1D)
1013 /******************************************************************/
1015 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
1016 AliHBTFunction1D(nbins,maxXval,minXval)
1020 /******************************************************************/
1022 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title):
1023 AliHBTFunction1D(name,title)
1027 /******************************************************************/
1029 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title,
1030 Int_t nbins, Float_t maxXval, Float_t minXval):
1031 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
1035 /******************************************************************/
1037 void AliHBTTwoPairFctn1D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1039 // Fills the numerator using pairs from the same event
1040 partpair = CheckPair(partpair);
1041 if( partpair == 0x0) return;
1043 if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
1044 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1046 Double_t x = GetValue(trackpair,partpair);
1047 fNumerator->Fill(x);
1049 /******************************************************************/
1051 void AliHBTTwoPairFctn1D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1053 // Fills the denumerator usin mixed pairs
1054 partpair = CheckPair(partpair);
1055 if( partpair == 0x0) return;
1057 if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
1058 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1060 Double_t x = GetValue(trackpair,partpair);
1061 fDenominator->Fill(x);
1063 /******************************************************************/
1064 /******************************************************************/
1065 /******************************************************************/
1067 //____________________
1068 ///////////////////////////////////////////////////////
1070 // AliHBTTwoPairFctn2D //
1072 // Base Calss for 2-dimensinal Functions that need //
1073 // two pair (simulated and reconstructed) //
1074 // to fill function //
1076 // Piotr.Skowronski@cern.ch //
1077 // http://alisoft.cern.ch/people/skowron/analyzer //
1079 ///////////////////////////////////////////////////////
1081 ClassImp(AliHBTTwoPairFctn2D)
1083 /******************************************************************/
1085 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title):
1086 AliHBTFunction2D(name,title)
1090 /******************************************************************/
1092 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1093 Int_t nYbins, Double_t maxYval, Double_t minYval):
1094 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1098 /******************************************************************/
1100 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title,
1101 Int_t nXbins, Double_t maxXval, Double_t minXval,
1102 Int_t nYbins, Double_t maxYval, Double_t minYval):
1103 AliHBTFunction2D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1107 /******************************************************************/
1109 void AliHBTTwoPairFctn2D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1111 //processes pair of particles coming from a same events (real pair)
1112 partpair = CheckPair(partpair); //check cuts
1113 if (partpair == 0x0) return;
1115 if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
1116 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1119 GetValues(trackpair,partpair,x,y);
1120 fNumerator->Fill(x,y);
1122 /******************************************************************/
1124 void AliHBTTwoPairFctn2D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1126 //processes pair of particles coming from a different events (mixed pair)
1127 partpair = CheckPair(partpair);
1128 if (partpair == 0x0) return;
1130 if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
1131 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1134 GetValues(trackpair,partpair,x,y);
1135 fDenominator->Fill(x,y);
1138 /******************************************************************/
1139 /******************************************************************/
1140 /******************************************************************/
1142 //____________________
1143 ///////////////////////////////////////////////////////
1145 // AliHBTTwoPairFctn3D //
1147 // Base Calss for 3-dimensinal Functions that need //
1148 // two pair (simulated and reconstructed) //
1149 // to fill function //
1151 // Piotr.Skowronski@cern.ch //
1152 // http://alisoft.cern.ch/people/skowron/analyzer //
1154 ///////////////////////////////////////////////////////
1156 ClassImp(AliHBTTwoPairFctn3D)
1158 /******************************************************************/
1160 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title):
1161 AliHBTFunction3D(name,title)
1165 /******************************************************************/
1167 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1168 Int_t nYbins, Double_t maxYval, Double_t minYval,
1169 Int_t nZbins, Double_t maxZval, Double_t minZval):
1170 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1174 /******************************************************************/
1176 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title,
1177 Int_t nXbins, Double_t maxXval, Double_t minXval,
1178 Int_t nYbins, Double_t maxYval, Double_t minYval,
1179 Int_t nZbins, Double_t maxZval, Double_t minZval):
1180 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1184 /******************************************************************/
1186 void AliHBTTwoPairFctn3D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1188 // Fills th numerator using pairs from the same event
1189 partpair = CheckPair(partpair);
1190 if( partpair == 0x0) return;
1192 if (partpair->GetSwapedPair() == 0x0)//it means that CheckPair returned swapped pair
1193 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1196 GetValues(trackpair,partpair,x,y,z);
1197 fNumerator->Fill(x,y,z);
1200 /******************************************************************/
1202 void AliHBTTwoPairFctn3D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1204 // Fills the denumerator using mixed pairs
1205 partpair = CheckPair(partpair);
1206 if( partpair == 0x0) return;
1208 if (partpair->GetSwapedPair() == 0x0)//it means that CheckPair returned swapped pair
1209 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1212 GetValues(trackpair,partpair,x,y,z);
1213 fDenominator->Fill(x,y,z);
1216 /******************************************************************/
1217 /******************************************************************/
1218 /******************************************************************/