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 += fDenominator->GetBinContent(i);
403 numsum += fNumerator->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)
736 TString numstr = fName + " Numerator"; //title and name of the
737 //numerator histogram
738 TString denstr = fName + " Denominator";//title and name of the
739 //denominator histogram
741 fNumerator = new TH3F(numstr.Data(),numstr.Data(),
742 nxbins,xmin,xmax,nybins,ymin,ymax,nzbins,zmin,zmax);
744 fDenominator = new TH3F(denstr.Data(),denstr.Data(),
745 nxbins,xmin,xmax,nybins,ymin,ymax,nzbins,zmin,zmax);
748 fDenominator->Sumw2();
751 /******************************************************************/
753 Double_t AliHBTFunction3D::Scale()
755 // Calculates the factor that should be used to scale
756 // quatience of fNumerator and fDenominator to 1 at
758 if (AliVAODParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
761 Error("Scale","No numerator");
766 Error("Scale","No denominator");
770 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) || (fNBinsToScaleZ < 1))
772 Error("Scale","Number of bins for scaling is smaller thnan 1");
775 UInt_t nbinsX = fNumerator->GetNbinsX();
776 if (fNBinsToScaleX > nbinsX)
778 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
782 UInt_t nbinsY = fNumerator->GetNbinsX();
783 if (fNBinsToScaleY > nbinsY)
785 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
789 UInt_t nbinsZ = fNumerator->GetNbinsZ();
790 if (fNBinsToScaleZ > nbinsZ)
792 Error("Scale","Number of Z bins for scaling is bigger thnan number of bins in histograms");
796 if (AliVAODParticle::GetDebug()>0) Info("Scale","No errors detected");
798 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
799 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis Y
800 Int_t offsetZ = nbinsZ - fNBinsToScaleZ - 1; //bin that we start loop over bins in axis Z
802 Double_t densum = 0.0;
803 Double_t numsum = 0.0;
805 for (UInt_t k = offsetZ; k<nbinsZ; k++)
806 for (UInt_t j = offsetY; j<nbinsY; j++)
807 for (UInt_t i = offsetX; i<nbinsX; i++)
809 if ( fNumerator->GetBinContent(i,j,k) > 0.0 )
812 densum += fDenominator->GetBinContent(i,j,k);
813 numsum += fNumerator->GetBinContent(i,j,k);
817 if(AliVAODParticle::GetDebug() > 0)
818 Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d fNBinsToScaleZ=%d",
819 numsum,densum,fNBinsToScaleX,fNBinsToScaleY,fNBinsToScaleZ);
821 if (numsum == 0) return 0.0;
822 Double_t ret = densum/numsum;
824 if(AliVAODParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
827 /******************************************************************/
829 void AliHBTFunction3D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn,UInt_t zn)
831 //sets up the volume to be used for scaling to tail
837 /******************************************************************/
838 /******************************************************************/
839 /******************************************************************/
840 /******************************************************************/
841 /******************************************************************/
842 /******************************************************************/
843 /******************************************************************/
844 /******************************************************************/
845 /******************************************************************/
847 //____________________
848 ///////////////////////////////////////////////////////
850 // AliHBTOnePairFctn1D //
852 // Base Calss for 1-dimensinal Functions that need //
853 // one pair to fill function //
855 // Piotr.Skowronski@cern.ch //
856 // http://alisoft.cern.ch/people/skowron/analyzer //
858 ///////////////////////////////////////////////////////
860 ClassImp( AliHBTOnePairFctn1D )
861 /******************************************************************/
863 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
864 AliHBTFunction1D(nbins,maxXval,minXval)
868 /******************************************************************/
870 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title):
871 AliHBTFunction1D(name,title)
875 /******************************************************************/
877 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
878 Int_t nbins, Float_t maxXval, Float_t minXval):
879 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
883 /******************************************************************/
885 void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair)
887 //Fills the numerator using pair from the same event
888 pair = CheckPair(pair);
889 if(pair) fNumerator->Fill(GetValue(pair));
891 /******************************************************************/
892 void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair)
894 //Fills the denumerator using mixed pairs
895 pair = CheckPair(pair);
896 if(pair) fDenominator->Fill(GetValue(pair));
899 /******************************************************************/
900 /******************************************************************/
901 /******************************************************************/
903 //____________________
904 ///////////////////////////////////////////////////////
906 // AliHBTOnePairFctn2D //
908 // Base Calss for 2-dimensinal Functions that need //
909 // one pair to fill function //
911 // Piotr.Skowronski@cern.ch //
912 // http://alisoft.cern.ch/people/skowron/analyzer //
914 ///////////////////////////////////////////////////////
916 ClassImp( AliHBTOnePairFctn2D )
917 /******************************************************************/
919 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title):
920 AliHBTFunction2D(name,title)
924 /******************************************************************/
926 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
927 Int_t nYbins, Double_t maxYval, Double_t minYval):
928 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
932 /******************************************************************/
934 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title,
935 Int_t nXbins, Double_t maxXval, Double_t minXval,
936 Int_t nYbins, Double_t maxYval, Double_t minYval):
937 AliHBTFunction2D(name,title, nXbins, maxXval, minXval, nYbins, maxYval, minYval)
941 /******************************************************************/
943 void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
945 // Fills the numerator using pairs from the same event
946 pair = CheckPair(pair);
951 fNumerator->Fill(x,y);
954 /******************************************************************/
956 void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
958 // Fills the denumerator using mixed pairs
959 pair = CheckPair(pair);
964 fDenominator->Fill(x,y);
967 /******************************************************************/
968 /******************************************************************/
969 /******************************************************************/
970 /******************************************************************/
971 //____________________
972 ///////////////////////////////////////////////////////
974 // AliHBTOnePairFctn3D //
976 // Base Calss for 3-dimensinal Functions that need //
977 // one pair to fill function //
979 // Piotr.Skowronski@cern.ch //
980 // http://alisoft.cern.ch/people/skowron/analyzer //
982 ///////////////////////////////////////////////////////
983 ClassImp( AliHBTOnePairFctn3D)
985 /******************************************************************/
987 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title):
988 AliHBTFunction3D(name,title)
992 /******************************************************************/
994 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
995 Int_t nYbins, Double_t maxYval, Double_t minYval,
996 Int_t nZbins, Double_t maxZval, Double_t minZval):
997 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1001 /******************************************************************/
1003 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title,
1004 Int_t nXbins, Double_t maxXval, Double_t minXval,
1005 Int_t nYbins, Double_t maxYval, Double_t minYval,
1006 Int_t nZbins, Double_t maxZval, Double_t minZval):
1007 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1011 /******************************************************************/
1013 void AliHBTOnePairFctn3D::ProcessSameEventParticles(AliHBTPair* pair)
1015 //Reacts on pair coming from same event (real pairs)
1016 //and fills numerator histogram
1017 pair = CheckPair(pair);
1021 GetValues(pair,x,y,z);
1022 fNumerator->Fill(x,y,z);
1025 /******************************************************************/
1027 void AliHBTOnePairFctn3D::ProcessDiffEventParticles(AliHBTPair* pair)
1029 //Reacts on pair coming from different events (mixed pairs)
1030 //and fills denominator histogram
1031 pair = CheckPair(pair);
1035 GetValues(pair,x,y,z);
1036 fDenominator->Fill(x,y,z);
1040 /******************************************************************/
1041 /******************************************************************/
1042 /******************************************************************/
1044 //____________________
1045 ///////////////////////////////////////////////////////
1047 // AliHBTTwoPairFctn1D //
1049 // Base Calss for 1-dimensinal Functions that need //
1050 // two pair (simulated and reconstructed) //
1051 // to fill function //
1053 // Piotr.Skowronski@cern.ch //
1054 // http://alisoft.cern.ch/people/skowron/analyzer //
1056 ///////////////////////////////////////////////////////
1057 ClassImp(AliHBTTwoPairFctn1D)
1058 /******************************************************************/
1060 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
1061 AliHBTFunction1D(nbins,maxXval,minXval)
1065 /******************************************************************/
1067 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title):
1068 AliHBTFunction1D(name,title)
1072 /******************************************************************/
1074 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title,
1075 Int_t nbins, Float_t maxXval, Float_t minXval):
1076 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
1080 /******************************************************************/
1082 void AliHBTTwoPairFctn1D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1084 // Fills the numerator using pairs from the same event
1085 trackpair = CheckPair(trackpair);
1086 if( trackpair == 0x0) return;
1088 Double_t x = GetValue(trackpair,partpair);
1089 fNumerator->Fill(x);
1091 /******************************************************************/
1093 void AliHBTTwoPairFctn1D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1095 // Fills the denumerator usin mixed pairs
1096 trackpair = CheckPair(trackpair);
1097 if( trackpair == 0x0) return;
1099 Double_t x = GetValue(trackpair,partpair);
1100 fDenominator->Fill(x);
1102 /******************************************************************/
1103 /******************************************************************/
1104 /******************************************************************/
1106 //____________________
1107 ///////////////////////////////////////////////////////
1109 // AliHBTTwoPairFctn2D //
1111 // Base Calss for 2-dimensinal Functions that need //
1112 // two pair (simulated and reconstructed) //
1113 // to fill function //
1115 // Piotr.Skowronski@cern.ch //
1116 // http://alisoft.cern.ch/people/skowron/analyzer //
1118 ///////////////////////////////////////////////////////
1120 ClassImp(AliHBTTwoPairFctn2D)
1122 /******************************************************************/
1124 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title):
1125 AliHBTFunction2D(name,title)
1129 /******************************************************************/
1131 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1132 Int_t nYbins, Double_t maxYval, Double_t minYval):
1133 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1137 /******************************************************************/
1139 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title,
1140 Int_t nXbins, Double_t maxXval, Double_t minXval,
1141 Int_t nYbins, Double_t maxYval, Double_t minYval):
1142 AliHBTFunction2D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1146 /******************************************************************/
1148 void AliHBTTwoPairFctn2D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1150 //processes pair of particles coming from a same events (real pair)
1151 trackpair = CheckPair(trackpair);
1152 if( trackpair == 0x0) return;
1155 GetValues(trackpair,partpair,x,y);
1156 fNumerator->Fill(x,y);
1158 /******************************************************************/
1160 void AliHBTTwoPairFctn2D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1162 //processes pair of particles coming from a different events (mixed pair)
1163 trackpair = CheckPair(trackpair);
1164 if( trackpair == 0x0) return;
1167 GetValues(trackpair,partpair,x,y);
1168 fDenominator->Fill(x,y);
1171 /******************************************************************/
1172 /******************************************************************/
1173 /******************************************************************/
1175 //____________________
1176 ///////////////////////////////////////////////////////
1178 // AliHBTTwoPairFctn3D //
1180 // Base Calss for 3-dimensinal Functions that need //
1181 // two pair (simulated and reconstructed) //
1182 // to fill function //
1184 // Piotr.Skowronski@cern.ch //
1185 // http://alisoft.cern.ch/people/skowron/analyzer //
1187 ///////////////////////////////////////////////////////
1189 ClassImp(AliHBTTwoPairFctn3D)
1191 /******************************************************************/
1193 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title):
1194 AliHBTFunction3D(name,title)
1198 /******************************************************************/
1200 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1201 Int_t nYbins, Double_t maxYval, Double_t minYval,
1202 Int_t nZbins, Double_t maxZval, Double_t minZval):
1203 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1207 /******************************************************************/
1209 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title,
1210 Int_t nXbins, Double_t maxXval, Double_t minXval,
1211 Int_t nYbins, Double_t maxYval, Double_t minYval,
1212 Int_t nZbins, Double_t maxZval, Double_t minZval):
1213 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1217 /******************************************************************/
1219 void AliHBTTwoPairFctn3D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1221 // Fills th numerator using pairs from the same event
1222 trackpair = CheckPair(trackpair);
1223 if( trackpair == 0x0) return;
1226 GetValues(trackpair,partpair,x,y,z);
1227 fNumerator->Fill(x,y,z);
1230 /******************************************************************/
1232 void AliHBTTwoPairFctn3D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1234 // Fills the denumerator using mixed pairs
1235 trackpair = CheckPair(trackpair);
1236 if( trackpair == 0x0) return;
1239 GetValues(trackpair,partpair,x,y,z);
1240 fDenominator->Fill(x,y,z);
1243 /******************************************************************/
1244 /******************************************************************/
1245 /******************************************************************/