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");
345 Double_t densum = 0.0;
346 Double_t numsum = 0.0;
348 Int_t offset = nbins - fNBinsToScale - 1;
350 for (UInt_t i = offset; i< nbins; i++)
352 if ( num->GetBinContent(i) > 0.0 )
354 densum = fDenominator->GetBinContent(i);
355 numsum = fNumerator->GetBinContent(i);
359 if(AliHBTParticle::GetDebug() > 0)
360 Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d",numsum,densum,fNBinsToScale);
362 if (numsum == 0) return 0.0;
363 Double_t ret = densum/numsum;
365 if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
369 /******************************************************************/
370 /******************************************************************/
371 /******************************************************************/
373 //____________________
374 ///////////////////////////////////////////////////////
376 // AliHBTFunction2D //
378 // Base Calss for 2-dimensinal Functions //
380 // Piotr.Skowronski@cern.ch //
381 // http://alisoft.cern.ch/people/skowron/analyzer //
383 ///////////////////////////////////////////////////////
385 ClassImp( AliHBTFunction2D )
387 const Int_t AliHBTFunction2D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms
388 const Float_t AliHBTFunction2D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms
389 const Float_t AliHBTFunction2D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms
391 const Int_t AliHBTFunction2D::fgkDefaultNBinsY = 200;//default number of Bins in histograms
392 const Float_t AliHBTFunction2D::fgkDefaultMinY = -0.15;//Default min value of histograms
393 const Float_t AliHBTFunction2D::fgkDefaultMaxY = 0.15;//Default max value of histograms
395 const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale
396 const UInt_t AliHBTFunction2D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale
398 /******************************************************************/
399 AliHBTFunction2D::AliHBTFunction2D():
402 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
403 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
404 {//default constructor
406 /******************************************************************/
407 AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title):
408 AliHBTFunction(name,title),
411 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
412 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
415 /******************************************************************/
417 AliHBTFunction2D::AliHBTFunction2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
418 Int_t nYbins, Double_t maxYval, Double_t minYval):
421 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
422 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
424 BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval);
426 /******************************************************************/
428 AliHBTFunction2D::AliHBTFunction2D(const Char_t *name, const Char_t *title,
429 Int_t nXbins, Double_t maxXval, Double_t minXval,
430 Int_t nYbins, Double_t maxYval, Double_t minYval):
431 AliHBTFunction(name,title),
434 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
435 fNBinsToScaleY(fgkDefaultNBinsToScaleY)
437 BuildHistos(nXbins,maxXval,minXval,nYbins,maxYval,minYval);
439 /******************************************************************/
440 AliHBTFunction2D::AliHBTFunction2D(const AliHBTFunction2D & source):
441 AliHBTFunction(source)
443 // Copy constructor needed by the coding conventions byt not used
444 Fatal("AliHBTFunction2D(const AliHBTFunction2D&)","Cpy ctor not usable.");
446 /******************************************************************/
448 AliHBTFunction2D& AliHBTFunction2D::operator= (const AliHBTFunction2D& /*source*/) {
449 // Assignment needed by the coding conventions byt not used
450 Fatal("Assignment operator","not implemented");
453 /******************************************************************/
455 AliHBTFunction2D::~AliHBTFunction2D()
461 /******************************************************************/
463 void AliHBTFunction2D::BuildHistos()
465 //Creates default histograms
466 BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX,
467 fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY);
469 /******************************************************************/
471 void AliHBTFunction2D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
472 Int_t nybins, Float_t ymax, Float_t ymin)
474 //Builds numerator and denominator histograms (2d-case)
475 TString numstr = fName + " Numerator"; //title and name of the
476 //numerator histogram
477 TString denstr = fName + " Denominator";//title and name of the
478 //denominator histogram
480 fNumerator = new TH2D(numstr.Data(),numstr.Data(),
481 nxbins,xmin,xmax,nybins,ymin,ymax);
483 fDenominator = new TH2D(denstr.Data(),denstr.Data(),
484 nxbins,xmin,xmax,nybins,ymin,ymax);
487 fDenominator->Sumw2();
489 /******************************************************************/
491 void AliHBTFunction2D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn)
493 //defines area used for scaling factor calculation
497 /******************************************************************/
499 Double_t AliHBTFunction2D::Scale()
501 // Calculates the factor that should be used to scale
502 // quatience of fNumerator and fDenominator to 1 at
504 if (AliHBTParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
507 Error("Scale","No numerator");
512 Error("Scale","No denominator");
516 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) )
518 Error("Scale","Number of bins for scaling is smaller thnan 1");
521 UInt_t nbinsX = fNumerator->GetNbinsX();
522 if (fNBinsToScaleX > nbinsX)
524 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
528 UInt_t nbinsY = fNumerator->GetNbinsX();
529 if (fNBinsToScaleY > nbinsY)
531 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
535 if (AliHBTParticle::GetDebug()>0) Info("Scale","No errors detected");
537 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
538 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis X
540 Double_t densum = 0.0;
541 Double_t numsum = 0.0;
543 for (UInt_t j = offsetY; j< nbinsY; j++)
544 for (UInt_t i = offsetX; i< nbinsX; i++)
546 if ( fNumerator->GetBinContent(i,j) > 0.0 )
548 densum = fDenominator->GetBinContent(i,j);
549 numsum = fNumerator->GetBinContent(i,j);
553 if(AliHBTParticle::GetDebug() > 0)
554 Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d",numsum,densum,fNBinsToScaleX,fNBinsToScaleY);
556 if (numsum == 0) return 0.0;
557 Double_t ret = densum/numsum;
559 if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
563 /******************************************************************/
564 /******************************************************************/
565 /******************************************************************/
567 //____________________
568 ///////////////////////////////////////////////////////
570 // AliHBTFunction3D //
572 // Base Calss for 3-dimensinal Functions //
574 // Piotr.Skowronski@cern.ch //
575 // http://alisoft.cern.ch/people/skowron/analyzer //
577 ///////////////////////////////////////////////////////
579 ClassImp( AliHBTFunction3D)
581 const Int_t AliHBTFunction3D::fgkDefaultNBinsX = 200;//default number of Bins in X axis in histograms
582 const Float_t AliHBTFunction3D::fgkDefaultMinX = 0.0;//Default min value of X axis in histograms
583 const Float_t AliHBTFunction3D::fgkDefaultMaxX = 1.5;//Default max value of X axis inhistograms
585 const Int_t AliHBTFunction3D::fgkDefaultNBinsY = 200;//default number of Bins in histograms
586 const Float_t AliHBTFunction3D::fgkDefaultMinY = -0.15;//Default min value of histograms
587 const Float_t AliHBTFunction3D::fgkDefaultMaxY = 0.15;//Default max value of histograms
589 const Int_t AliHBTFunction3D::fgkDefaultNBinsZ = 200;//default number of Bins in histograms
590 const Float_t AliHBTFunction3D::fgkDefaultMinZ = -0.15;//Default min value of histograms
591 const Float_t AliHBTFunction3D::fgkDefaultMaxZ = 0.15;//Default max value of histograms
593 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleX = 30;//Default number of X bins used for scaling to tale
594 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleY = 30;//Default number of bins used for scaling to tale
595 const UInt_t AliHBTFunction3D::fgkDefaultNBinsToScaleZ = 30;//Default number of bins used for scaling to tale
597 AliHBTFunction3D::AliHBTFunction3D():
600 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
601 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
602 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
606 /******************************************************************/
608 AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title):
609 AliHBTFunction(name,title),
612 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
613 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
614 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
618 /******************************************************************/
620 AliHBTFunction3D::AliHBTFunction3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
621 Int_t nYbins, Double_t maxYval, Double_t minYval,
622 Int_t nZbins, Double_t maxZval, Double_t minZval):
625 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
626 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
627 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
630 BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
632 /******************************************************************/
634 AliHBTFunction3D::AliHBTFunction3D(const Char_t *name, const Char_t *title,
635 Int_t nXbins, Double_t maxXval, Double_t minXval,
636 Int_t nYbins, Double_t maxYval, Double_t minYval,
637 Int_t nZbins, Double_t maxZval, Double_t minZval):
638 AliHBTFunction(name,title),
641 fNBinsToScaleX(fgkDefaultNBinsToScaleX),
642 fNBinsToScaleY(fgkDefaultNBinsToScaleY),
643 fNBinsToScaleZ(fgkDefaultNBinsToScaleZ)
646 BuildHistos( nXbins,maxXval,minXval,nYbins,maxYval,minYval,nZbins,maxZval,minZval);
648 /******************************************************************/
650 AliHBTFunction3D::AliHBTFunction3D(const AliHBTFunction3D& source):
651 AliHBTFunction(source)
653 // Copy constructor needed by the coding conventions byt not used
654 Fatal("AliHBTFunction3D(const AliHBTFunction3D&)","Cpy ctor not usable.");
656 /******************************************************************/
658 AliHBTFunction3D& AliHBTFunction3D::operator= (const AliHBTFunction3D & /*source*/)
660 // Assignment needed by the coding conventions byt not used
661 Fatal("Assignment operator","not implemented");
664 /******************************************************************/
667 AliHBTFunction3D::~AliHBTFunction3D()
672 /******************************************************************/
674 void AliHBTFunction3D::BuildHistos()
676 //Creates default histograms
677 BuildHistos(fgkDefaultNBinsX,fgkDefaultMaxX,fgkDefaultMinX,
678 fgkDefaultNBinsY,fgkDefaultMaxY,fgkDefaultMinY,
679 fgkDefaultNBinsZ,fgkDefaultMaxZ,fgkDefaultMinZ);
681 /******************************************************************/
683 void AliHBTFunction3D::BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
684 Int_t nybins, Float_t ymax, Float_t ymin,
685 Int_t nzbins, Float_t zmax, Float_t zmin)
687 //Builds numerator and denominator histograms (3d-case)
688 TString numstr = fName + " Numerator"; //title and name of the
689 //numerator histogram
690 TString denstr = fName + " Denominator";//title and name of the
691 //denominator histogram
693 fNumerator = new TH3F(numstr.Data(),numstr.Data(),
694 nxbins,xmin,xmax,nybins,ymin,ymax,nzbins,zmin,zmax);
696 fDenominator = new TH3F(denstr.Data(),denstr.Data(),
697 nxbins,xmin,xmax,nybins,ymin,ymax,nzbins,zmin,zmax);
700 fDenominator->Sumw2();
703 /******************************************************************/
705 Double_t AliHBTFunction3D::Scale()
707 // Calculates the factor that should be used to scale
708 // quatience of fNumerator and fDenominator to 1 at
710 if (AliHBTParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
713 Error("Scale","No numerator");
718 Error("Scale","No denominator");
722 if( (fNBinsToScaleX < 1) || (fNBinsToScaleY < 1) || (fNBinsToScaleZ < 1))
724 Error("Scale","Number of bins for scaling is smaller thnan 1");
727 UInt_t nbinsX = fNumerator->GetNbinsX();
728 if (fNBinsToScaleX > nbinsX)
730 Error("Scale","Number of X bins for scaling is bigger thnan number of bins in histograms");
734 UInt_t nbinsY = fNumerator->GetNbinsX();
735 if (fNBinsToScaleY > nbinsY)
737 Error("Scale","Number of Y bins for scaling is bigger thnan number of bins in histograms");
741 UInt_t nbinsZ = fNumerator->GetNbinsZ();
742 if (fNBinsToScaleZ > nbinsZ)
744 Error("Scale","Number of Z bins for scaling is bigger thnan number of bins in histograms");
748 if (AliHBTParticle::GetDebug()>0) Info("Scale","No errors detected");
750 Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
751 Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis Y
752 Int_t offsetZ = nbinsZ - fNBinsToScaleZ - 1; //bin that we start loop over bins in axis Z
754 Double_t densum = 0.0;
755 Double_t numsum = 0.0;
757 for (UInt_t k = offsetZ; k<nbinsZ; k++)
758 for (UInt_t j = offsetY; j<nbinsY; j++)
759 for (UInt_t i = offsetX; i<nbinsX; i++)
761 if ( fNumerator->GetBinContent(i,j,k) > 0.0 )
764 densum = fDenominator->GetBinContent(i,j,k);
765 numsum = fNumerator->GetBinContent(i,j,k);
769 if(AliHBTParticle::GetDebug() > 0)
770 Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d fNBinsToScaleZ=%d",
771 numsum,densum,fNBinsToScaleX,fNBinsToScaleY,fNBinsToScaleZ);
773 if (numsum == 0) return 0.0;
774 Double_t ret = densum/numsum;
776 if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
779 /******************************************************************/
781 void AliHBTFunction3D::SetNumberOfBinsToScale(UInt_t xn, UInt_t yn,UInt_t zn)
783 //sets up the volume to be used for scaling to tail
789 /******************************************************************/
790 /******************************************************************/
791 /******************************************************************/
792 /******************************************************************/
793 /******************************************************************/
794 /******************************************************************/
795 /******************************************************************/
796 /******************************************************************/
797 /******************************************************************/
799 //____________________
800 ///////////////////////////////////////////////////////
802 // AliHBTOnePairFctn1D //
804 // Base Calss for 1-dimensinal Functions that need //
805 // one pair to fill function //
807 // Piotr.Skowronski@cern.ch //
808 // http://alisoft.cern.ch/people/skowron/analyzer //
810 ///////////////////////////////////////////////////////
812 ClassImp( AliHBTOnePairFctn1D )
813 /******************************************************************/
815 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
816 AliHBTFunction1D(nbins,maxXval,minXval)
820 /******************************************************************/
822 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title):
823 AliHBTFunction1D(name,title)
827 /******************************************************************/
829 AliHBTOnePairFctn1D::AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
830 Int_t nbins, Float_t maxXval, Float_t minXval):
831 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
835 /******************************************************************/
837 void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair)
839 //Fills the numerator using pair from the same event
840 pair = CheckPair(pair);
841 if(pair) fNumerator->Fill(GetValue(pair));
843 /******************************************************************/
844 void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair)
846 //Fills the denumerator using mixed pairs
847 pair = CheckPair(pair);
848 if(pair) fDenominator->Fill(GetValue(pair));
851 /******************************************************************/
852 /******************************************************************/
853 /******************************************************************/
855 //____________________
856 ///////////////////////////////////////////////////////
858 // AliHBTOnePairFctn2D //
860 // Base Calss for 2-dimensinal Functions that need //
861 // one pair to fill function //
863 // Piotr.Skowronski@cern.ch //
864 // http://alisoft.cern.ch/people/skowron/analyzer //
866 ///////////////////////////////////////////////////////
868 ClassImp( AliHBTOnePairFctn2D )
869 /******************************************************************/
871 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title):
872 AliHBTFunction2D(name,title)
876 /******************************************************************/
878 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
879 Int_t nYbins, Double_t maxYval, Double_t minYval):
880 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
884 /******************************************************************/
886 AliHBTOnePairFctn2D::AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title,
887 Int_t nXbins, Double_t maxXval, Double_t minXval,
888 Int_t nYbins, Double_t maxYval, Double_t minYval):
889 AliHBTFunction2D(name,title, nXbins, maxXval, minXval, nYbins, maxYval, minYval)
893 /******************************************************************/
895 void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
897 // Fills the numerator using pairs from the same event
898 pair = CheckPair(pair);
903 fNumerator->Fill(x,y);
906 /******************************************************************/
908 void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
910 // Fills the denumerator using mixed pairs
911 pair = CheckPair(pair);
916 fDenominator->Fill(x,y);
919 /******************************************************************/
920 /******************************************************************/
921 /******************************************************************/
922 /******************************************************************/
923 //____________________
924 ///////////////////////////////////////////////////////
926 // AliHBTOnePairFctn3D //
928 // Base Calss for 3-dimensinal Functions that need //
929 // one pair to fill function //
931 // Piotr.Skowronski@cern.ch //
932 // http://alisoft.cern.ch/people/skowron/analyzer //
934 ///////////////////////////////////////////////////////
935 ClassImp( AliHBTOnePairFctn3D)
937 /******************************************************************/
939 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title):
940 AliHBTFunction3D(name,title)
944 /******************************************************************/
946 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
947 Int_t nYbins, Double_t maxYval, Double_t minYval,
948 Int_t nZbins, Double_t maxZval, Double_t minZval):
949 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
953 /******************************************************************/
955 AliHBTOnePairFctn3D::AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title,
956 Int_t nXbins, Double_t maxXval, Double_t minXval,
957 Int_t nYbins, Double_t maxYval, Double_t minYval,
958 Int_t nZbins, Double_t maxZval, Double_t minZval):
959 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
963 /******************************************************************/
965 void AliHBTOnePairFctn3D::ProcessSameEventParticles(AliHBTPair* pair)
967 //Reacts on pair coming from same event (real pairs)
968 //and fills numerator histogram
969 pair = CheckPair(pair);
973 GetValues(pair,x,y,z);
974 fNumerator->Fill(x,y,z);
977 /******************************************************************/
979 void AliHBTOnePairFctn3D::ProcessDiffEventParticles(AliHBTPair* pair)
981 //Reacts on pair coming from different events (mixed pairs)
982 //and fills denominator histogram
983 pair = CheckPair(pair);
987 GetValues(pair,x,y,z);
988 fDenominator->Fill(x,y,z);
992 /******************************************************************/
993 /******************************************************************/
994 /******************************************************************/
996 //____________________
997 ///////////////////////////////////////////////////////
999 // AliHBTTwoPairFctn1D //
1001 // Base Calss for 1-dimensinal Functions that need //
1002 // two pair (simulated and reconstructed) //
1003 // to fill function //
1005 // Piotr.Skowronski@cern.ch //
1006 // http://alisoft.cern.ch/people/skowron/analyzer //
1008 ///////////////////////////////////////////////////////
1009 ClassImp(AliHBTTwoPairFctn1D)
1010 /******************************************************************/
1012 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval):
1013 AliHBTFunction1D(nbins,maxXval,minXval)
1017 /******************************************************************/
1019 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title):
1020 AliHBTFunction1D(name,title)
1024 /******************************************************************/
1026 AliHBTTwoPairFctn1D::AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title,
1027 Int_t nbins, Float_t maxXval, Float_t minXval):
1028 AliHBTFunction1D(name,title,nbins,maxXval,minXval)
1032 /******************************************************************/
1034 void AliHBTTwoPairFctn1D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1036 // Fills the numerator using pairs from the same event
1037 partpair = CheckPair(partpair);
1038 if( partpair == 0x0) return;
1040 if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
1041 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1043 Double_t x = GetValue(trackpair,partpair);
1044 fNumerator->Fill(x);
1046 /******************************************************************/
1048 void AliHBTTwoPairFctn1D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1050 // Fills the denumerator usin mixed pairs
1051 partpair = CheckPair(partpair);
1052 if( partpair == 0x0) return;
1054 if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
1055 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1057 Double_t x = GetValue(trackpair,partpair);
1058 fDenominator->Fill(x);
1060 /******************************************************************/
1061 /******************************************************************/
1062 /******************************************************************/
1064 //____________________
1065 ///////////////////////////////////////////////////////
1067 // AliHBTTwoPairFctn2D //
1069 // Base Calss for 2-dimensinal Functions that need //
1070 // two pair (simulated and reconstructed) //
1071 // to fill function //
1073 // Piotr.Skowronski@cern.ch //
1074 // http://alisoft.cern.ch/people/skowron/analyzer //
1076 ///////////////////////////////////////////////////////
1078 ClassImp(AliHBTTwoPairFctn2D)
1080 /******************************************************************/
1082 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title):
1083 AliHBTFunction2D(name,title)
1087 /******************************************************************/
1089 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1090 Int_t nYbins, Double_t maxYval, Double_t minYval):
1091 AliHBTFunction2D(nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1095 /******************************************************************/
1097 AliHBTTwoPairFctn2D::AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title,
1098 Int_t nXbins, Double_t maxXval, Double_t minXval,
1099 Int_t nYbins, Double_t maxYval, Double_t minYval):
1100 AliHBTFunction2D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval)
1104 /******************************************************************/
1106 void AliHBTTwoPairFctn2D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1108 //processes pair of particles coming from a same events (real pair)
1109 partpair = CheckPair(partpair); //check cuts
1110 if (partpair == 0x0) return;
1112 if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
1113 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1116 GetValues(trackpair,partpair,x,y);
1117 fNumerator->Fill(x,y);
1119 /******************************************************************/
1121 void AliHBTTwoPairFctn2D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1123 //processes pair of particles coming from a different events (mixed pair)
1124 partpair = CheckPair(partpair);
1125 if (partpair == 0x0) return;
1127 if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
1128 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1131 GetValues(trackpair,partpair,x,y);
1132 fDenominator->Fill(x,y);
1135 /******************************************************************/
1136 /******************************************************************/
1137 /******************************************************************/
1139 //____________________
1140 ///////////////////////////////////////////////////////
1142 // AliHBTTwoPairFctn3D //
1144 // Base Calss for 3-dimensinal Functions that need //
1145 // two pair (simulated and reconstructed) //
1146 // to fill function //
1148 // Piotr.Skowronski@cern.ch //
1149 // http://alisoft.cern.ch/people/skowron/analyzer //
1151 ///////////////////////////////////////////////////////
1153 ClassImp(AliHBTTwoPairFctn3D)
1155 /******************************************************************/
1157 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title):
1158 AliHBTFunction3D(name,title)
1162 /******************************************************************/
1164 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
1165 Int_t nYbins, Double_t maxYval, Double_t minYval,
1166 Int_t nZbins, Double_t maxZval, Double_t minZval):
1167 AliHBTFunction3D(nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1171 /******************************************************************/
1173 AliHBTTwoPairFctn3D::AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title,
1174 Int_t nXbins, Double_t maxXval, Double_t minXval,
1175 Int_t nYbins, Double_t maxYval, Double_t minYval,
1176 Int_t nZbins, Double_t maxZval, Double_t minZval):
1177 AliHBTFunction3D(name,title,nXbins, maxXval, minXval, nYbins, maxYval, minYval, nZbins, maxZval, minZval)
1181 /******************************************************************/
1183 void AliHBTTwoPairFctn3D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1185 // Fills th numerator using pairs from the same event
1186 partpair = CheckPair(partpair);
1187 if( partpair == 0x0) return;
1189 if (partpair->GetSwapedPair() == 0x0)//it means that CheckPair returned swapped pair
1190 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1193 GetValues(trackpair,partpair,x,y,z);
1194 fNumerator->Fill(x,y,z);
1197 /******************************************************************/
1199 void AliHBTTwoPairFctn3D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
1201 // Fills the denumerator using mixed pairs
1202 partpair = CheckPair(partpair);
1203 if( partpair == 0x0) return;
1205 if (partpair->GetSwapedPair() == 0x0)//it means that CheckPair returned swapped pair
1206 trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
1209 GetValues(trackpair,partpair,x,y,z);
1210 fDenominator->Fill(x,y,z);
1213 /******************************************************************/
1214 /******************************************************************/
1215 /******************************************************************/