]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HBTAN/AliHBTFunction.cxx
Bug correction: files closed to early
[u/mrichter/AliRoot.git] / HBTAN / AliHBTFunction.cxx
index a80843f6ff26f445646f28de8aba8f374a66f5f0..04e2806a84ca24d59d09db0fbd87c43948dcbc6f 100644 (file)
@@ -13,7 +13,7 @@ Base classes for HBT functions
           /            \
          /              \
         /                \
-    two part          four part 
+    one pair          two pair 
     /   |   \         /   |   \
    /    |    \       /    |    \
   1D   2D    3D     1D   2D    3D
@@ -27,13 +27,26 @@ Base classes for HBT functions
 /******************************************************************/
 /******************************************************************/
 
+#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()
@@ -41,18 +54,25 @@ 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);
    
@@ -136,22 +156,22 @@ Rename(const Char_t * name, const Char_t * title)
 /******************************************************************/
 /******************************************************************/
 
-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
@@ -169,21 +189,92 @@ AliHBTTwoPartFctn1D(Int_t nbins, Double_t maxXval, Double_t minXval)
    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)
 
 {
@@ -204,12 +295,12 @@ AliHBTTwoPartFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval ,
    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) 
@@ -220,7 +311,7 @@ void AliHBTTwoPartFctn2D::ProcessSameEventParticles(AliHBTPair* pair)
    }
 }
 
-void AliHBTTwoPartFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
+void AliHBTOnePairFctn2D::ProcessDiffEventParticles(AliHBTPair* pair)
 {
   pair = CheckPair(pair);
   if(pair) 
@@ -237,10 +328,10 @@ void AliHBTTwoPartFctn2D::ProcessDiffEventParticles(AliHBTPair* 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)
 
@@ -264,23 +355,79 @@ AliHBTTwoPartFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
    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)
 
 {
@@ -301,12 +448,12 @@ AliHBTFourPartFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval ,
    fDenominator->Sumw2();
 
 }        
-AliHBTFourPartFctn2D::~AliHBTFourPartFctn2D()
+AliHBTTwoPairFctn2D::~AliHBTTwoPairFctn2D()
 {
   delete fNumerator;
   delete fDenominator;
 }
-void AliHBTFourPartFctn2D::
+void AliHBTTwoPairFctn2D::
 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
 {
   partpair  = CheckPair(partpair);
@@ -319,7 +466,7 @@ ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
    }
 }
 
-void AliHBTFourPartFctn2D::
+void AliHBTTwoPairFctn2D::
 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
 {
   partpair  = CheckPair(partpair);
@@ -333,3 +480,7 @@ ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair)
 
 }
 
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+ClassImp(AliHBTTwoPairFctn3D)