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 AliAODPairEmptyCut()), //dummy cut
45 fWriteNumAndDen(kFALSE),
50 /******************************************************************/
52 AliHBTFunction::AliHBTFunction(const char* name,const char* title):
54 fPairCut(new AliAODPairEmptyCut()), //dummy cut
55 fWriteNumAndDen(kFALSE),
60 /******************************************************************/
62 AliHBTFunction::AliHBTFunction(const AliHBTFunction & source):
64 fPairCut((AliAODPairCut*)source.fPairCut->Clone()),
65 fWriteNumAndDen(source.fWriteNumAndDen),
68 // Copy constructor needed by the coding conventions
70 /******************************************************************/
72 AliHBTFunction::~AliHBTFunction()
75 if (AliVAODParticle::GetDebug() > 1)
77 Info("~AliHBTFunction","Deleting %s",GetName());
81 /******************************************************************/
82 AliHBTFunction & AliHBTFunction::operator= (const AliHBTFunction & source)
84 // Assignment needed by the coding conventions
86 fPairCut = (AliAODPairCut*)source.fPairCut->Clone();
91 void AliHBTFunction::WriteFunction()
93 //writes result of the function to file
94 if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","%s",GetName());
97 if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Writing Num & Den");
98 if (GetNumerator()) GetNumerator()->Write();
99 if (GetDenominator()) GetDenominator()->Write();
100 if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Writing Num & Den Done");
102 if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Getting Result");
103 TH1* res = GetResult();
104 if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Getting Result Done");
108 if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Writing Result");
110 if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Writing Result Done");
113 /******************************************************************/
115 TH1* AliHBTFunction::GetRatio(Double_t normfactor)
117 //returns ratio of numerator and denominator
119 if (AliVAODParticle::GetDebug()>0) Info("GetRatio","Norm. Factor is %f for %s",normfactor,GetName());
121 if (normfactor == 0.0)
123 Error("GetRatio","Scaling Factor is 0. Null poiner returned");
126 TString str = fName + " ratio";
127 TH1 *result = (TH1*)GetNumerator()->Clone(str.Data());
128 result->SetDirectory(0x0);
130 result->SetTitle(str.Data());
132 result->Divide(GetNumerator(),GetDenominator(),normfactor);
137 /******************************************************************/
138 void AliHBTFunction::SetPairCut(AliAODPairCut* cut)
140 //Sets new Pair Cut. Old one is deleted
141 //Note that it is created new object instead of simple pointer set
142 //I do not want to have pointer
143 //to object created somewhere else
144 //because in that case I could not believe that
145 //it would always exist (sb could delete it)
146 //so we have always own copy
150 Error("AliHBTFunction::SetPairCut","argument is NULL");
154 fPairCut = (AliAODPairCut*)cut->Clone();
158 /******************************************************************/
160 void AliHBTFunction::Rename(const Char_t * name)
162 //renames the function and histograms
166 TString numstr = fName + " Numerator"; //title and name of the
167 //numerator histogram
168 TString denstr = fName + " Denominator";//title and name of the
169 //denominator histogram
171 GetNumerator()->SetName(numstr.Data());
172 GetNumerator()->SetTitle(numstr.Data());
174 GetDenominator()->SetName(denstr.Data());
175 GetDenominator()->SetTitle(denstr.Data());
179 void AliHBTFunction::Rename(const Char_t * name, const Char_t * title)
181 //renames and retitle the function and histograms
186 TString numstrn = fName + " Numerator"; //name of the
187 //numerator histogram
189 TString numstrt = fTitle + " Numerator"; //title of the
190 //numerator histogram
192 TString denstrn = fName + " Denominator";//name of the
193 //denominator histogram
195 TString denstrt = fTitle + " Denominator";//title of the
196 //denominator histogram
199 GetNumerator()->SetName(numstrn.Data());
200 GetNumerator()->SetTitle(numstrt.Data());
202 GetDenominator()->SetName(denstrn.Data());
203 GetDenominator()->SetTitle(denstrt.Data());
207 /******************************************************************/
209 void AliHBTFunction::InitFunction()
211 //Iniotializes fctn.: Resets histograms
212 //In case histograms are not created in ctor, builds with default parameters
213 if (AliVAODParticle::GetDebug()>1) Info("InitFunction","%s",GetName());
214 if ( !(GetNumerator()&&GetDenominator()) ) BuildHistos();
215 GetNumerator()->Reset();
216 GetDenominator()->Reset();
218 GetNumerator()->SetDirectory(0x0);
219 GetDenominator()->SetDirectory(0x0);
220 if (AliVAODParticle::GetDebug()>1) Info("InitFunction","Done");
222 /******************************************************************/
223 /******************************************************************/
224 /******************************************************************/
225 ClassImp(AliHBTCorrelFunction)
226 //____________________________________________
227 //////////////////////////////////////////////
229 // class AliHBTCorrelFunction
231 // Base class for correlation fuctions, that is which returns ratio.
232 // Stores pointer the created ratio histogram and deletes it when function is deleted
233 // created in order to evoid memory leak
235 ////////////////////////////////////////////////////////
236 AliHBTCorrelFunction& AliHBTCorrelFunction::operator=(const AliHBTCorrelFunction& in)
239 if (&in == this) return *this;
241 fRatio=(in.fRatio)?(TH1*)in.fRatio->Clone():0x0;
242 fRatio->SetDirectory(0x0);
246 /******************************************************************/
247 /******************************************************************/
248 /******************************************************************/
250 ClassImp( AliHBTOnePairFctn )
252 /******************************************************************/
253 /******************************************************************/
254 /******************************************************************/
256 ClassImp( AliHBTTwoPairFctn)
258 /******************************************************************/
259 /******************************************************************/
260 /******************************************************************/
262 ClassImp( AliHBTFunction1D )
264 const Int_t AliHBTFunction1D::fgkDefaultNBins = 100;
265 const Float_t AliHBTFunction1D::fgkDefaultMin = 0.0;
266 const Float_t AliHBTFunction1D::fgkDefaultMax = 0.15;
267 const UInt_t AliHBTFunction1D::fgkDefaultNBinsToScale = 30;
270 AliHBTFunction1D::AliHBTFunction1D():
273 fNBinsToScale(fgkDefaultNBinsToScale)
274 {//default constructor
276 /******************************************************************/
278 AliHBTFunction1D::AliHBTFunction1D(Int_t nbins, Float_t maxXval, Float_t minXval):
281 fNBinsToScale(fgkDefaultNBinsToScale)
283 //Constructor of Two Part One Dimentional Function
284 // nbins: number of bins in histograms - default 100
285 // maxXval and minXval: range of histgram(s) default 0 - 0.15 (GeV)
286 BuildHistos(nbins,maxXval,minXval);
288 /******************************************************************/
289 AliHBTFunction1D::AliHBTFunction1D(const Char_t *name, const Char_t *title):
290 AliHBTFunction(name,title),
293 fNBinsToScale(fgkDefaultNBinsToScale)
296 /******************************************************************/
297 AliHBTFunction1D::AliHBTFunction1D(const Char_t *name, const Char_t *title,
298 Int_t nbins, Float_t maxXval, Float_t minXval):
299 AliHBTFunction(name,title),
302 fNBinsToScale(fgkDefaultNBinsToScale)
305 BuildHistos(nbins,maxXval,minXval);
307 /******************************************************************/
309 AliHBTFunction1D::AliHBTFunction1D(const AliHBTFunction1D& source):
310 AliHBTFunction(source)
312 // Copy constructor needed by the coding conventions byt not used
313 Fatal("AliHBTFunction1D(const AliHBTFunction1D&)","Cpy ctor not usable.");
315 /******************************************************************/
317 AliHBTFunction1D& AliHBTFunction1D::operator= (const AliHBTFunction1D & /*source*/)
319 // Assignment needed by the coding conventions byt not used
320 Fatal("Assignment operator","not implemented");
323 /******************************************************************/
325 AliHBTFunction1D::~AliHBTFunction1D()
331 /******************************************************************/
332 void AliHBTFunction1D::BuildHistos()
334 //builds histograms with default settings
335 BuildHistos(fgkDefaultNBins,fgkDefaultMax,fgkDefaultMin);
338 /******************************************************************/
340 void AliHBTFunction1D::BuildHistos(Int_t nbins, Float_t max, Float_t min)
342 //builds numarator and denominator hitograms
343 TString numstr = fName + " Numerator"; //title and name of the
344 //numerator histogram
345 TString denstr = fName + " Denominator";//title and name of the
346 //denominator histogram
347 fNumerator = new TH1D(numstr.Data(),numstr.Data(),nbins,min,max);
348 fDenominator = new TH1D(denstr.Data(),denstr.Data(),nbins,min,max);
351 fDenominator->Sumw2();
353 /******************************************************************/
355 Double_t AliHBTFunction1D::Scale()
357 //Calculates the factor that should be used to scale
358 //quatience of fNumerator and fDenominator to 1 at tail
359 return Scale(fNumerator,fDenominator);
361 /******************************************************************/
363 Double_t AliHBTFunction1D::Scale(TH1D* num,TH1D* den)
365 //Calculates the factor that should be used to scale
366 //quatience of num and den to 1 at tail
368 if (AliVAODParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
371 Error("Scale","No numerator");
376 Error("Scale","No denominator");
380 if(fNBinsToScale < 1)
382 Error("Scale","Number of bins for scaling is smaller thnan 1");
385 UInt_t nbins = num->GetNbinsX();
386 if (fNBinsToScale > nbins)
388 Error("Scale","Number of bins for scaling is bigger thnan number of bins in histograms");
391 if (AliVAODParticle::GetDebug()>0) Info("Scale","No errors detected");
393 Double_t densum = 0.0;
394 Double_t numsum = 0.0;
396 Int_t offset = nbins - fNBinsToScale - 1;
398 for (UInt_t i = offset; i< nbins; i++)
400 if ( num->GetBinContent(i) > 0.0 )
402 densum += den->GetBinContent(i);
403 numsum += num->GetBinContent(i);
407 if(AliVAODParticle::GetDebug() > 0)
408 Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d",numsum,densum,fNBinsToScale);
410 if (numsum == 0) return 0.0;
411 Double_t ret = densum/numsum;
413 if(AliVAODParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
417 /******************************************************************/
418 /******************************************************************/
419 /******************************************************************/
421 //____________________
422 ///////////////////////////////////////////////////////
424 // AliHBTFunction2D //
426 // Base Calss for 2-dimensinal Functions //
428 // Piotr.Skowronski@cern.ch //
429 // http://alisoft.cern.ch/people/skowron/analyzer //
431 ///////////////////////////////////////////////////////
433 ClassImp( AliHBTFunction2D )
435 const Int_t AliHBTFunction2D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms
436 const Float_t AliHBTFunction2D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms
437 const Float_t AliHBTFunction2D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms
439 const Int_t AliHBTFunction2D::fgkDefaultNBinsY = 200;//default number of Bins in histograms
440 const Float_t AliHBTFunction2D::fgkDefaultMinY = -0.15;//Default min value of histograms
441 const Float_t AliHBTFunction2D::fgkDefaultMaxY = 0.15;//Default max value of histograms
443 const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale
444 const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale
446 /******************************************************************/
447 AliHBTFunction2D::AliHBTFunction2D():
450 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
451 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
452 {//default constructor
454 /******************************************************************/
455 AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title):
456 AliHBTFunction(name,title),
459 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
460 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
463 /******************************************************************/
465 AliHBTFunction2D::AliHBTFunction2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
466 Int_t nYbins, Double_t maxYval, Double_t minYval):
469 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
470 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
472 BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval);
474 /******************************************************************/
476 AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title,
477 Int_t nXbins, Double_t maxXval, Double_t minXval,
478 Int_t nYbins, Double_t maxYval, Double_t minYval):
479 AliHBTFunction(name,title),
482 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
483 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
485 BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval);
487 /******************************************************************/
488 AliHBTFunction2D::AliHBTFunction2D(const AliHBTFunction2D & source):
489 AliHBTFunction(source)
491 // Copy constructor needed by the coding conventions byt not used
492 Fatal("AliHBTFunction2D(const AliHBTFunction2D&)","Cpy ctor not usable.");
494 /******************************************************************/
496 AliHBTFunction2D& AliHBTFunction2D::operator= (const AliHBTFunction2D& /*source*/) {
497 // Assignment needed by the coding conventions byt not used
498 Fatal("Assignment operator","not implemented");
501 /******************************************************************/
503 AliHBTFunction2D::~AliHBTFunction2D()
509 /******************************************************************/
511 void AliHBTFunction2D::BuildHistos()
513 //Creates default histograms
514 BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX,
515 fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY);
517 /******************************************************************/
519 void AliHBTFunction2D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
520 Int_t nybins, Float_t ymax, Float_t ymin)
522 //Builds numerator and denominator histograms (2d-case)
523 TString numstr = fName + " Numerator"; //title and name of the
524 //numerator histogram
525 TString denstr = fName + " Denominator";//title and name of the
526 //denominator histogram
528 fNumerator = new TH2D(numstr.Data(),numstr.Data(),
529 nxbins,xmin,xmax,nybins,ymin,ymax);
531 fDenominator = new TH2D(denstr.Data(),denstr.Data(),
532 nxbins,xmin,xmax,nybins,ymin,ymax);
535 fDenominator->Sumw2();
537 /******************************************************************/
539 void AliHBTFunction2D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn)
541 //defines area used for scaling factor calculation
545 /******************************************************************/
547 Double_t AliHBTFunction2D::Scale()
549 // Calculates the factor that should be used to scale
550 // quatience of fNumerator and fDenominator to 1 at
552 if (AliVAODParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
555 Error("Scale","No numerator");
560 Error("Scale","No denominator");
564 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) )
566 Error("Scale","Number of bins for scaling is smaller thnan 1");
569 UInt_t nbinsX = fNumerator->GetNbinsX();
570 if (fNBinsToScaleX > nbinsX)
572 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
576 UInt_t nbinsY = fNumerator->GetNbinsX();
577 if (fNBinsToScaleY > nbinsY)
579 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
583 if (AliVAODParticle::GetDebug()>0) Info("Scale","No errors detected");
585 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
586 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis X
588 Double_t densum = 0.0;
589 Double_t numsum = 0.0;
591 for (UInt_t j = offsetY; j< nbinsY; j++)
592 for (UInt_t i = offsetX; i< nbinsX; i++)
594 if ( fNumerator->GetBinContent(i,j) > 0.0 )
596 densum += fDenominator->GetBinContent(i,j);
597 numsum += fNumerator->GetBinContent(i,j);
601 if(AliVAODParticle::GetDebug() > 0)
602 Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d",numsum,densum,fNBinsToScaleX,fNBinsToScaleY);
604 if (numsum == 0) return 0.0;
605 Double_t ret = densum/numsum;
607 if(AliVAODParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
611 /******************************************************************/
612 /******************************************************************/
613 /******************************************************************/
615 //____________________
616 ///////////////////////////////////////////////////////
618 // AliHBTFunction3D //
620 // Base Calss for 3-dimensinal Functions //
622 // Piotr.Skowronski@cern.ch //
623 // http://alisoft.cern.ch/people/skowron/analyzer //
625 ///////////////////////////////////////////////////////
627 ClassImp( AliHBTFunction3D)
629 const Int_t AliHBTFunction3D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms
630 const Float_t AliHBTFunction3D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms
631 const Float_t AliHBTFunction3D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms
633 const Int_t AliHBTFunction3D::fgkDefaultNBinsY = 200;//default number of Bins in histograms
634 const Float_t AliHBTFunction3D::fgkDefaultMinY = -0.15;//Default min value of histograms
635 const Float_t AliHBTFunction3D::fgkDefaultMaxY = 0.15;//Default max value of histograms
637 const Int_t AliHBTFunction3D::fgkDefaultNBinsZ = 200;//default number of Bins in histograms
638 const Float_t AliHBTFunction3D::fgkDefaultMinZ = -0.15;//Default min value of histograms
639 const Float_t AliHBTFunction3D::fgkDefaultMaxZ = 0.15;//Default max value of histograms
641 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale
642 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale
643 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleZ = 30;//Default number of bins used for scaling to tale
645 AliHBTFunction3D::AliHBTFunction3D():
648 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
649 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
650 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
654 /******************************************************************/
656 AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title):
657 AliHBTFunction(name,title),
660 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
661 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
662 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
666 /******************************************************************/
668 AliHBTFunction3D::AliHBTFunction3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
669 Int_t nYbins, Double_t maxYval, Double_t minYval,
670 Int_t nZbins, Double_t maxZval, Double_t minZval):
673 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
674 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
675 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
678 BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
680 /******************************************************************/
682 AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title,
683 Int_t nXbins, Double_t maxXval, Double_t minXval,
684 Int_t nYbins, Double_t maxYval, Double_t minYval,
685 Int_t nZbins, Double_t maxZval, Double_t minZval):
686 AliHBTFunction(name,title),
689 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
690 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
691 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
694 BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
696 /******************************************************************/
698 AliHBTFunction3D::AliHBTFunction3D(const AliHBTFunction3D& source):
699 AliHBTFunction(source)
701 // Copy constructor needed by the coding conventions byt not used
702 Fatal("AliHBTFunction3D(const AliHBTFunction3D&)","Cpy ctor not usable.");
704 /******************************************************************/
706 AliHBTFunction3D& AliHBTFunction3D::operator= (const AliHBTFunction3D & /*source*/)
708 // Assignment needed by the coding conventions byt not used
709 Fatal("Assignment operator","not implemented");
712 /******************************************************************/
715 AliHBTFunction3D::~AliHBTFunction3D()
720 /******************************************************************/
722 void AliHBTFunction3D::BuildHistos()
724 //Creates default histograms
725 BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX,
726 fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY,
727 fgkDefaultNBinsZ,fgkDefaultMaxZ,fgkDefaultMinZ);
729 /******************************************************************/
731 void AliHBTFunction3D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
732 Int_t nybins, Float_t ymax, Float_t ymin,
733 Int_t nzbins, Float_t zmax, Float_t zmin)
735 //Builds numerator and denominator histograms (3d-case)
737 if (AliVAODParticle::GetDebug()>1) Info("BuildHistos","Enetered AliHBTFunction3D::BuildHistos(...)");
751 TString numstr = fName + " Numerator"; //title and name of the
752 //numerator histogram
753 TString denstr = fName + " Denominator";//title and name of the
754 //denominator histogram
756 fNumerator = new TH3F(numstr.Data(),numstr.Data(),
757 nxbins,xmin,xmax,nybins,ymin,ymax,nzbins,zmin,zmax);
759 fDenominator = new TH3F(denstr.Data(),denstr.Data(),
760 nxbins,xmin,xmax,nybins,ymin,ymax,nzbins,zmin,zmax);
763 fDenominator->Sumw2();
766 /******************************************************************/
768 Double_t AliHBTFunction3D::Scale()
770 // Calculates the factor that should be used to scale
771 // quatience of fNumerator and fDenominator to 1 at
773 if (AliVAODParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
776 Error("Scale","No numerator");
781 Error("Scale","No denominator");
785 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) || (fNBinsToScaleZ < 1))
787 Error("Scale","Number of bins for scaling is smaller thnan 1");
790 UInt_t nbinsX = fNumerator->GetNbinsX();
791 if (fNBinsToScaleX > nbinsX)
793 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
797 UInt_t nbinsY = fNumerator->GetNbinsX();
798 if (fNBinsToScaleY > nbinsY)
800 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
804 UInt_t nbinsZ = fNumerator->GetNbinsZ();
805 if (fNBinsToScaleZ > nbinsZ)
807 Error("Scale","Number of Z bins for scaling is bigger thnan number of bins in histograms");
811 if (AliVAODParticle::GetDebug()>0) Info("Scale","No errors detected");
813 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
814 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis Y
815 Int_t offsetZ = nbinsZ - fNBinsToScaleZ - 1; //bin that we start loop over bins in axis Z
817 Double_t densum = 0.0;
818 Double_t numsum = 0.0;
820 for (UInt_t k = offsetZ; k<nbinsZ; k++)
821 for (UInt_t j = offsetY; j<nbinsY; j++)
822 for (UInt_t i = offsetX; i<nbinsX; i++)
824 if ( fNumerator->GetBinContent(i,j,k) > 0.0 )
827 densum += fDenominator->GetBinContent(i,j,k);
828 numsum += fNumerator->GetBinContent(i,j,k);
832 if(AliVAODParticle::GetDebug() > 0)
833 Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d fNBinsToScaleZ=%d",
834 numsum,densum,fNBinsToScaleX,fNBinsToScaleY,fNBinsToScaleZ);
836 if (numsum == 0) return 0.0;
837 Double_t ret = densum/numsum;
839 if(AliVAODParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
842 /******************************************************************/
844 void AliHBTFunction3D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn,UInt_t zn)
846 //sets up the volume to be used for scaling to tail
852 /******************************************************************/
853 /******************************************************************/
854 /******************************************************************/
855 /******************************************************************/
856 /******************************************************************/
857 /******************************************************************/
858 /******************************************************************/
859 /******************************************************************/
860 /******************************************************************/
862 //____________________
863 ///////////////////////////////////////////////////////
865 // AliHBTOnePairFctn1D //
867 // Base Calss for 1-dimensinal Functions that need //
868 // one pair to fill function //
870 // Piotr.Skowronski@cern.ch //
871 // http://alisoft.cern.ch/people/skowron/analyzer //
873 ///////////////////////////////////////////////////////
875 ClassImp( AliHBTOnePairFctn1D )
876 /******************************************************************/
878 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
879 AliHBTFunction1D(nbins,maxXval,minXval)
883 /******************************************************************/
885 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title):
886 AliHBTFunction1D(name,title)
890 /******************************************************************/
892 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
893 Int_t nbins, Float_t maxXval, Float_t minXval):
894 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
898 /******************************************************************/
900 void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair)
902 //Fills the numerator using pair from the same event
903 pair = CheckPair(pair);
904 if(pair) fNumerator->Fill(GetValue(pair));
906 /******************************************************************/
907 void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair)
909 //Fills the denumerator using mixed pairs
910 pair = CheckPair(pair);
911 if(pair) fDenominator->Fill(GetValue(pair));
914 /******************************************************************/
915 /******************************************************************/
916 /******************************************************************/
918 //____________________
919 ///////////////////////////////////////////////////////
921 // AliHBTOnePairFctn2D //
923 // Base Calss for 2-dimensinal Functions that need //
924 // one pair to fill function //
926 // Piotr.Skowronski@cern.ch //
927 // http://alisoft.cern.ch/people/skowron/analyzer //
929 ///////////////////////////////////////////////////////
931 ClassImp( AliHBTOnePairFctn2D )
932 /******************************************************************/
934 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title):
935 AliHBTFunction2D(name,title)
939 /******************************************************************/
941 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
942 Int_t nYbins, Double_t maxYval, Double_t minYval):
943 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
947 /******************************************************************/
949 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title,
950 Int_t nXbins, Double_t maxXval, Double_t minXval,
951 Int_t nYbins, Double_t maxYval, Double_t minYval):
952 AliHBTFunction2D(name,title, nXbins, maxXval, minXval, nYbins, maxYval, minYval)
956 /******************************************************************/
958 void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
960 // Fills the numerator using pairs from the same event
961 pair = CheckPair(pair);
966 fNumerator->Fill(x,y);
969 /******************************************************************/
971 void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
973 // Fills the denumerator using mixed pairs
974 pair = CheckPair(pair);
979 fDenominator->Fill(x,y);
982 /******************************************************************/
983 /******************************************************************/
984 /******************************************************************/
985 /******************************************************************/
986 //____________________
987 ///////////////////////////////////////////////////////
989 // AliHBTOnePairFctn3D //
991 // Base Calss for 3-dimensinal Functions that need //
992 // one pair to fill function //
994 // Piotr.Skowronski@cern.ch //
995 // http://alisoft.cern.ch/people/skowron/analyzer //
997 ///////////////////////////////////////////////////////
998 ClassImp( AliHBTOnePairFctn3D)
1000 /******************************************************************/
1002 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title):
1003 AliHBTFunction3D(name,title)
1007 /******************************************************************/
1009 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1010 Int_t nYbins, Double_t maxYval, Double_t minYval,
1011 Int_t nZbins, Double_t maxZval, Double_t minZval):
1012 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1016 /******************************************************************/
1018 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title,
1019 Int_t nXbins, Double_t maxXval, Double_t minXval,
1020 Int_t nYbins, Double_t maxYval, Double_t minYval,
1021 Int_t nZbins, Double_t maxZval, Double_t minZval):
1022 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1026 /******************************************************************/
1028 void AliHBTOnePairFctn3D::ProcessSameEventParticles(AliHBTPair* pair)
1030 //Reacts on pair coming from same event (real pairs)
1031 //and fills numerator histogram
1032 pair = CheckPair(pair);
1036 GetValues(pair,x,y,z);
1037 fNumerator->Fill(x,y,z);
1040 /******************************************************************/
1042 void AliHBTOnePairFctn3D::ProcessDiffEventParticles(AliHBTPair* pair)
1044 //Reacts on pair coming from different events (mixed pairs)
1045 //and fills denominator histogram
1046 pair = CheckPair(pair);
1050 GetValues(pair,x,y,z);
1051 fDenominator->Fill(x,y,z);
1055 /******************************************************************/
1056 /******************************************************************/
1057 /******************************************************************/
1059 //____________________
1060 ///////////////////////////////////////////////////////
1062 // AliHBTTwoPairFctn1D //
1064 // Base Calss for 1-dimensinal Functions that need //
1065 // two pair (simulated and reconstructed) //
1066 // to fill function //
1068 // Piotr.Skowronski@cern.ch //
1069 // http://alisoft.cern.ch/people/skowron/analyzer //
1071 ///////////////////////////////////////////////////////
1072 ClassImp(AliHBTTwoPairFctn1D)
1073 /******************************************************************/
1075 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
1076 AliHBTFunction1D(nbins,maxXval,minXval)
1080 /******************************************************************/
1082 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title):
1083 AliHBTFunction1D(name,title)
1087 /******************************************************************/
1089 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title,
1090 Int_t nbins, Float_t maxXval, Float_t minXval):
1091 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
1095 /******************************************************************/
1097 void AliHBTTwoPairFctn1D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1099 // Fills the numerator using pairs from the same event
1100 trackpair = CheckPair(trackpair);
1101 if( trackpair == 0x0) return;
1103 Double_t x = GetValue(trackpair,partpair);
1104 fNumerator->Fill(x);
1106 /******************************************************************/
1108 void AliHBTTwoPairFctn1D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1110 // Fills the denumerator usin mixed pairs
1111 trackpair = CheckPair(trackpair);
1112 if( trackpair == 0x0) return;
1114 Double_t x = GetValue(trackpair,partpair);
1115 fDenominator->Fill(x);
1117 /******************************************************************/
1118 /******************************************************************/
1119 /******************************************************************/
1121 //____________________
1122 ///////////////////////////////////////////////////////
1124 // AliHBTTwoPairFctn2D //
1126 // Base Calss for 2-dimensinal Functions that need //
1127 // two pair (simulated and reconstructed) //
1128 // to fill function //
1130 // Piotr.Skowronski@cern.ch //
1131 // http://alisoft.cern.ch/people/skowron/analyzer //
1133 ///////////////////////////////////////////////////////
1135 ClassImp(AliHBTTwoPairFctn2D)
1137 /******************************************************************/
1139 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title):
1140 AliHBTFunction2D(name,title)
1144 /******************************************************************/
1146 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1147 Int_t nYbins, Double_t maxYval, Double_t minYval):
1148 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1152 /******************************************************************/
1154 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title,
1155 Int_t nXbins, Double_t maxXval, Double_t minXval,
1156 Int_t nYbins, Double_t maxYval, Double_t minYval):
1157 AliHBTFunction2D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1161 /******************************************************************/
1163 void AliHBTTwoPairFctn2D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1165 //processes pair of particles coming from a same events (real pair)
1166 trackpair = CheckPair(trackpair);
1167 if( trackpair == 0x0) return;
1170 GetValues(trackpair,partpair,x,y);
1171 fNumerator->Fill(x,y);
1173 /******************************************************************/
1175 void AliHBTTwoPairFctn2D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1177 //processes pair of particles coming from a different events (mixed pair)
1178 trackpair = CheckPair(trackpair);
1179 if( trackpair == 0x0) return;
1182 GetValues(trackpair,partpair,x,y);
1183 fDenominator->Fill(x,y);
1186 /******************************************************************/
1187 /******************************************************************/
1188 /******************************************************************/
1190 //____________________
1191 ///////////////////////////////////////////////////////
1193 // AliHBTTwoPairFctn3D //
1195 // Base Calss for 3-dimensinal Functions that need //
1196 // two pair (simulated and reconstructed) //
1197 // to fill function //
1199 // Piotr.Skowronski@cern.ch //
1200 // http://alisoft.cern.ch/people/skowron/analyzer //
1202 ///////////////////////////////////////////////////////
1204 ClassImp(AliHBTTwoPairFctn3D)
1206 /******************************************************************/
1208 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title):
1209 AliHBTFunction3D(name,title)
1213 /******************************************************************/
1215 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1216 Int_t nYbins, Double_t maxYval, Double_t minYval,
1217 Int_t nZbins, Double_t maxZval, Double_t minZval):
1218 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1222 /******************************************************************/
1224 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title,
1225 Int_t nXbins, Double_t maxXval, Double_t minXval,
1226 Int_t nYbins, Double_t maxYval, Double_t minYval,
1227 Int_t nZbins, Double_t maxZval, Double_t minZval):
1228 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1232 /******************************************************************/
1234 void AliHBTTwoPairFctn3D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1236 // Fills th numerator using pairs from the same event
1237 trackpair = CheckPair(trackpair);
1238 if( trackpair == 0x0) return;
1241 GetValues(trackpair,partpair,x,y,z);
1242 fNumerator->Fill(x,y,z);
1245 /******************************************************************/
1247 void AliHBTTwoPairFctn3D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1249 // Fills the denumerator using mixed pairs
1250 trackpair = CheckPair(trackpair);
1251 if( trackpair == 0x0) return;
1254 GetValues(trackpair,partpair,x,y,z);
1255 fDenominator->Fill(x,y,z);
1258 /******************************************************************/
1259 /******************************************************************/
1260 /******************************************************************/