/ \
/ \
/ \
- two part four part
+ one pair two pair
/ | \ / | \
/ | \ / | \
1D 2D 3D 1D 2D 3D
/******************************************************************/
/******************************************************************/
+#include <iostream.h>
ClassImp( AliHBTFunction )
AliHBTFunction::AliHBTFunction()
{
-
- fPairCut = new AliHBTEmptyPairCut(); //dummy cut
+ fPairCut = new AliHBTEmptyPairCut(); //dummy cut
+}
+/******************************************************************/
+AliHBTFunction::AliHBTFunction(const char* name,const char* title)
+{
+ fPairCut = new AliHBTEmptyPairCut(); //dummy cut
+ Rename(name,title);
}
+/******************************************************************/
+
+AliHBTFunction::~AliHBTFunction()
+ {
+ if (fPairCut) delete fPairCut;
+ }
+/******************************************************************/
void AliHBTFunction::
Write()
if (GetNumerator()) GetNumerator()->Write();
if (GetDenominator()) GetDenominator()->Write();
TH1* res = GetResult();
- if (res) GetResult()->Write();
+ if (res) res->Write();
}
/******************************************************************/
TH1* AliHBTFunction::
GetRatio(Double_t normfactor)
{
+ if (gDebug>0) cout<<"Mormfactor is "<<normfactor<<" for "<<fName<<endl;
+
+ if (normfactor == 0.0)
+ {
+ Error("GetRatio","Scaling Factor is 0. Null poiner returned");
+ return 0x0;
+ }
TString str = fName + " ratio";
TH1 *result = (TH1*)GetNumerator()->Clone(str.Data());
result->SetTitle(str.Data());
- result->Sumw2();
+ //result->Sumw2();
result->Divide(GetNumerator(),GetDenominator(),normfactor);
/******************************************************************/
/******************************************************************/
-ClassImp( AliHBTTwoPartFctn )
+ClassImp( AliHBTOnePairFctn )
/******************************************************************/
/******************************************************************/
/******************************************************************/
-ClassImp( AliHBTFourPartFctn)
+ClassImp( AliHBTTwoPairFctn)
/******************************************************************/
/******************************************************************/
/******************************************************************/
-ClassImp( AliHBTTwoPartFctn1D )
+ClassImp( AliHBTOnePairFctn1D )
-AliHBTTwoPartFctn1D::
-AliHBTTwoPartFctn1D(Int_t nbins, Double_t maxXval, Double_t minXval)
+AliHBTOnePairFctn1D::
+AliHBTOnePairFctn1D(Int_t nbins, Double_t maxXval, Double_t minXval)
{
//Constructor of Two Part One Dimentional Function
// nbins: number of bins in histograms - default 100
fNumerator->Sumw2();
fDenominator->Sumw2();
+ fNBinsToScale = 30;
+
}
/******************************************************************/
-AliHBTTwoPartFctn1D::~AliHBTTwoPartFctn1D()
+AliHBTOnePairFctn1D::~AliHBTOnePairFctn1D()
{
delete fNumerator;
delete fDenominator;
}
+/******************************************************************/
+
+void AliHBTOnePairFctn1D::ProcessSameEventParticles(AliHBTPair* pair)
+{
+ //Fills the numerator
+ pair = CheckPair(pair);
+ if(pair) fNumerator->Fill(GetValue(pair));
+}
+/******************************************************************/
+void AliHBTOnePairFctn1D::ProcessDiffEventParticles(AliHBTPair* pair)
+ {
+ //fills denumerator
+ pair = CheckPair(pair);
+ if(pair) fDenominator->Fill(GetValue(pair));
+
+ }
+/******************************************************************/
+Double_t AliHBTOnePairFctn1D::Scale()
+{
+ if (gDebug>0) cout<<"Enetered Scale()"<<endl;
+ if(!fNumerator)
+ {
+ Error("Scale","No numerator");
+ return 0.0;
+ }
+ if(!fDenominator)
+ {
+ Error("Scale","No denominator");
+ return 0.0;
+ }
+
+ if(fNBinsToScale < 1)
+ {
+ return 0.0;
+ Error("Scale","Number of bins for scaling is smaller thnan 1");
+ }
+ Int_t nbins = fNumerator->GetNbinsX();
+ if (fNBinsToScale > nbins)
+ {
+ Error("Scale","Number of bins for scaling is bigger thnan number of bins in histograms");
+ return 0.0;
+ }
+ if (gDebug>0) cout<<"No errors detected"<<endl;
+
+ Double_t ratio;
+ Double_t sum = 0;
+ Int_t N = 0;
+
+ Int_t offset = nbins - fNBinsToScale - 1;
+ Int_t i;
+ for ( i = offset; i< nbins; i++)
+ {
+ if ( fNumerator->GetBinContent(i) > 0.0 )
+ {
+ ratio = fDenominator->GetBinContent(i)/fNumerator->GetBinContent(i);
+ sum += ratio;
+ N++;
+ }
+ }
+
+ if(gDebug > 0) cout<<"sum="<<sum<<" fNBinsToScale="<<fNBinsToScale<<" N="<<N<<endl;
+
+ if (N == 0) return 0.0;
+ Double_t ret = sum/((Double_t)N);
+
+ if(gDebug > 0) cout<<"Scale() returning "<<ret<<endl;
+ return ret;
+}
+
/******************************************************************/
/******************************************************************/
/******************************************************************/
-ClassImp( AliHBTTwoPartFctn2D )
+ClassImp( AliHBTOnePairFctn2D )
-AliHBTTwoPartFctn2D::
-AliHBTTwoPartFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval ,
+AliHBTOnePairFctn2D::
+AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval ,
Int_t nYbins, Double_t maxYval, Double_t minYval)
{
fDenominator->Sumw2();
}
-AliHBTTwoPartFctn2D::~AliHBTTwoPartFctn2D()
+AliHBTOnePairFctn2D::~AliHBTOnePairFctn2D()
{
delete fNumerator;
delete fDenominator;
}
-void AliHBTTwoPartFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
+void AliHBTOnePairFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
{
pair = CheckPair(pair);
if(pair)
}
}
-void AliHBTTwoPartFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
+void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
{
pair = CheckPair(pair);
if(pair)
/******************************************************************/
/******************************************************************/
-ClassImp( AliHBTTwoPartFctn3D)
+ClassImp( AliHBTOnePairFctn3D)
-AliHBTTwoPartFctn3D::
-AliHBTTwoPartFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
+AliHBTOnePairFctn3D::
+AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
Int_t nYbins, Double_t maxYval, Double_t minYval,
Int_t nZbins, Double_t maxZval, Double_t minZval)
fDenominator->Sumw2();
}
+/******************************************************************/
+
+AliHBTOnePairFctn3D::~AliHBTOnePairFctn3D()
+{
+ delete fNumerator;
+ delete fDenominator;
+}
+/******************************************************************/
-AliHBTTwoPartFctn3D::~AliHBTTwoPartFctn3D()
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+ClassImp( AliHBTTwoPairFctn1D)
+
+AliHBTTwoPairFctn1D::
+AliHBTTwoPairFctn1D(Int_t nbins, Double_t maxval, Double_t minval)
+ {
+ TString numstr = fName + " Numerator"; //title and name of the
+ //numerator histogram
+ TString denstr = fName + " Denominator";//title and name of the
+ //denominator histogram
+
+ fNumerator = new TH1D(numstr.Data(),numstr.Data(),
+ nbins,minval,maxval);
+
+ fDenominator = new TH1D(denstr.Data(),denstr.Data(),
+ nbins,minval,maxval);
+
+ fNumerator->Sumw2();
+ fDenominator->Sumw2();
+ }
+
+/******************************************************************/
+AliHBTTwoPairFctn1D::~AliHBTTwoPairFctn1D()
{
delete fNumerator;
delete fDenominator;
}
+void AliHBTTwoPairFctn1D::
+ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+ partpair = CheckPair(partpair);
+ trackpair = CheckPair(trackpair);
+ if( partpair && trackpair)
+ {
+ Double_t x = GetValue(trackpair,partpair);
+ fNumerator->Fill(x);
+ }
+}
+/******************************************************************/
+
+void AliHBTTwoPairFctn1D::
+ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
+{
+ partpair = CheckPair(partpair);
+ trackpair = CheckPair(trackpair);
+ if( partpair && trackpair)
+ {
+ Double_t x = GetValue(trackpair,partpair);
+ fDenominator->Fill(x);
+ }
+}
/******************************************************************/
/******************************************************************/
/******************************************************************/
-ClassImp( AliHBTFourPartFctn2D)
+ClassImp( AliHBTTwoPairFctn2D)
-AliHBTFourPartFctn2D::
-AliHBTFourPartFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval ,
+AliHBTTwoPairFctn2D::
+AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval ,
Int_t nYbins, Double_t maxYval, Double_t minYval)
{
fDenominator->Sumw2();
}
-AliHBTFourPartFctn2D::~AliHBTFourPartFctn2D()
+AliHBTTwoPairFctn2D::~AliHBTTwoPairFctn2D()
{
delete fNumerator;
delete fDenominator;
}
-void AliHBTFourPartFctn2D::
+void AliHBTTwoPairFctn2D::
ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
{
partpair = CheckPair(partpair);
}
}
-void AliHBTFourPartFctn2D::
+void AliHBTTwoPairFctn2D::
ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
{
partpair = CheckPair(partpair);
}
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+ClassImp(AliHBTTwoPairFctn3D)