]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HBTAN/AliHBTFunction.cxx
Another portion of classes moved from HBTAN to ANALYSIS. HBTAN made working with...
[u/mrichter/AliRoot.git] / HBTAN / AliHBTFunction.cxx
index aceda9fbcc6c560fbd1049663ff822f6d2b3f251..3b645510fea368dff1891d168e215a9bb263ffd1 100644 (file)
@@ -41,7 +41,7 @@
 ClassImp( AliHBTFunction )
 
 AliHBTFunction::AliHBTFunction():
- fPairCut(new AliHBTEmptyPairCut()), //dummy cut  
+ fPairCut(new AliAODEmptyPairCut()), //dummy cut  
  fWriteNumAndDen(kFALSE)
 {
 //Default constructor
@@ -50,7 +50,7 @@ AliHBTFunction::AliHBTFunction():
 
 AliHBTFunction::AliHBTFunction(const char* name,const char* title):
  TNamed(name,title),
- fPairCut(new AliHBTEmptyPairCut()), //dummy cut  
+ fPairCut(new AliAODEmptyPairCut()), //dummy cut  
  fWriteNumAndDen(kFALSE)
 {
 //Constructor  
@@ -59,7 +59,7 @@ AliHBTFunction::AliHBTFunction(const char* name,const char* title):
 
 AliHBTFunction::AliHBTFunction(const AliHBTFunction & source):
  TNamed(source),
- fPairCut((AliHBTPairCut*)source.fPairCut->Clone()),
+ fPairCut((AliAODPairCut*)source.fPairCut->Clone()),
  fWriteNumAndDen(source.fWriteNumAndDen)
 {
 // Copy constructor needed by the coding conventions
@@ -69,6 +69,10 @@ AliHBTFunction::AliHBTFunction(const AliHBTFunction & source):
 AliHBTFunction::~AliHBTFunction()
 {
 //destructor  
+  if (AliVAODParticle::GetDebug() > 1)
+   {
+     Info("~AliHBTFunction","Deleting %s",GetName());
+   }
   delete fPairCut;
 }
 /******************************************************************/
@@ -76,20 +80,31 @@ AliHBTFunction & AliHBTFunction::operator= (const AliHBTFunction & source)
 {
  // Assignment needed by the coding conventions
   delete fPairCut;
-  fPairCut = (AliHBTPairCut*)source.fPairCut->Clone();
+  fPairCut = (AliAODPairCut*)source.fPairCut->Clone();
   return * this;
 }
 
 void AliHBTFunction::WriteFunction()
 {
 //writes result of the function to file
+   if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","%s",GetName());
    if (fWriteNumAndDen)
     { 
+     if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Writing Num & Den");
      if (GetNumerator()) GetNumerator()->Write();
      if (GetDenominator()) GetDenominator()->Write();
+     if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Writing Num & Den Done");
     } 
+   if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Getting Result");
    TH1* res = GetResult();
-   if (res) res->Write();
+   if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Getting Result Done");
+   
+   if (res) 
+    { 
+      if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Writing Result");
+      res->Write();
+      if (AliVAODParticle::GetDebug()) Info("AliHBTFunction","Writing Result Done");
+    }
 }
 /******************************************************************/
 
@@ -97,7 +112,7 @@ TH1* AliHBTFunction::GetRatio(Double_t normfactor)
  {
  //returns ratio of numerator and denominator
  //
-   if (AliHBTParticle::GetDebug()>0) Info("GetRatio","Norm. Factor is %f for %s",normfactor,GetName());
+   if (AliVAODParticle::GetDebug()>0) Info("GetRatio","Norm. Factor is %f for %s",normfactor,GetName());
    
    if (normfactor == 0.0)
     {
@@ -106,6 +121,7 @@ TH1* AliHBTFunction::GetRatio(Double_t normfactor)
     }
    TString str = fName + " ratio";
    TH1 *result = (TH1*)GetNumerator()->Clone(str.Data());
+   result->SetDirectory(0x0);
    
    result->SetTitle(str.Data());
    
@@ -115,7 +131,7 @@ TH1* AliHBTFunction::GetRatio(Double_t normfactor)
    
  }
 /******************************************************************/
-void AliHBTFunction::SetPairCut(AliHBTPairCut* cut)
+void AliHBTFunction::SetPairCut(AliAODPairCut* cut)
 {
 //Sets new Pair Cut. Old one is deleted
 //Note that it is created new object instead of simple pointer set
@@ -131,7 +147,7 @@ void AliHBTFunction::SetPairCut(AliHBTPairCut* cut)
      return;
    }
  delete fPairCut;
- fPairCut = (AliHBTPairCut*)cut->Clone();
+ fPairCut = (AliAODPairCut*)cut->Clone();
  
 }
 
@@ -190,9 +206,37 @@ void AliHBTFunction::InitFunction()
 {
 //Iniotializes fctn.: Resets histograms
 //In case histograms are not created in ctor, builds with default parameters
+  if (AliVAODParticle::GetDebug()>1) Info("InitFunction","%s",GetName());
   if ( !(GetNumerator()&&GetDenominator()) ) BuildHistos();
   GetNumerator()->Reset();
   GetDenominator()->Reset();
+
+  GetNumerator()->SetDirectory(0x0);
+  GetDenominator()->SetDirectory(0x0);
+  if (AliVAODParticle::GetDebug()>1) Info("InitFunction","Done");
+}
+/******************************************************************/
+/******************************************************************/
+/******************************************************************/
+ClassImp(AliHBTCorrelFunction)
+//____________________________________________
+//////////////////////////////////////////////
+//
+// class AliHBTCorrelFunction
+// 
+// Base class for correlation fuctions, that is which returns ratio.
+// Stores pointer the created ratio histogram and deletes it when function is deleted
+// created in order to evoid memory leak 
+//
+////////////////////////////////////////////////////////
+AliHBTCorrelFunction& AliHBTCorrelFunction::operator=(const AliHBTCorrelFunction& in)
+{
+ //assigment operator
+  if (&in == this) return *this;
+  delete fRatio;
+  fRatio=(in.fRatio)?(TH1*)in.fRatio->Clone():0x0;
+  fRatio->SetDirectory(0x0);
+  return *this;
 }
 
 /******************************************************************/
@@ -317,7 +361,7 @@ Double_t AliHBTFunction1D::Scale(TH1D* num,TH1D* den)
  //Calculates the factor that should be used to scale 
  //quatience of num and den to 1 at tail
  
-  if (AliHBTParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
+  if (AliVAODParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
   if(!num) 
    {
      Error("Scale","No numerator");
@@ -340,7 +384,7 @@ Double_t AliHBTFunction1D::Scale(TH1D* num,TH1D* den)
     Error("Scale","Number of bins for scaling is bigger thnan number of bins in histograms");
     return 0.0;
    }
-  if (AliHBTParticle::GetDebug()>0) Info("Scale","No errors detected");
+  if (AliVAODParticle::GetDebug()>0) Info("Scale","No errors detected");
 
   Double_t densum = 0.0;
   Double_t numsum = 0.0;
@@ -351,18 +395,18 @@ Double_t AliHBTFunction1D::Scale(TH1D* num,TH1D* den)
    {
     if ( num->GetBinContent(i) > 0.0 )
      {
-       densum = fDenominator->GetBinContent(i);
-       numsum = fNumerator->GetBinContent(i);
+       densum += fDenominator->GetBinContent(i);
+       numsum += fNumerator->GetBinContent(i);
      }
    }
   
-  if(AliHBTParticle::GetDebug() > 0)
+  if(AliVAODParticle::GetDebug() > 0)
     Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d",numsum,densum,fNBinsToScale);
   
   if (numsum == 0) return 0.0;
   Double_t ret = densum/numsum;
 
-  if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
+  if(AliVAODParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
   return ret;
 } 
 
@@ -501,7 +545,7 @@ Double_t AliHBTFunction2D::Scale()
 // Calculates the factor that should be used to scale 
 // quatience of fNumerator and fDenominator to 1 at 
 // given region
-  if (AliHBTParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
+  if (AliVAODParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
   if(!fNumerator) 
    {
      Error("Scale","No numerator");
@@ -532,7 +576,7 @@ Double_t AliHBTFunction2D::Scale()
     return 0.0;
    }
 
-  if (AliHBTParticle::GetDebug()>0) Info("Scale","No errors detected");
+  if (AliVAODParticle::GetDebug()>0) Info("Scale","No errors detected");
 
   Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
   Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis X
@@ -545,18 +589,18 @@ Double_t AliHBTFunction2D::Scale()
      {
       if ( fNumerator->GetBinContent(i,j) > 0.0 )
        {
-           densum = fDenominator->GetBinContent(i,j);
-           numsum = fNumerator->GetBinContent(i,j);
+           densum += fDenominator->GetBinContent(i,j);
+           numsum += fNumerator->GetBinContent(i,j);
        }
      }
   
-  if(AliHBTParticle::GetDebug() > 0) 
+  if(AliVAODParticle::GetDebug() > 0) 
     Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d",numsum,densum,fNBinsToScaleX,fNBinsToScaleY);
   
   if (numsum == 0) return 0.0;
   Double_t ret = densum/numsum;
 
-  if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
+  if(AliVAODParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
   return ret;
 } 
 
@@ -707,7 +751,7 @@ Double_t AliHBTFunction3D::Scale()
   // Calculates the factor that should be used to scale 
   // quatience of fNumerator and fDenominator to 1 at 
   // given volume
-  if (AliHBTParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
+  if (AliVAODParticle::GetDebug()>0) Info("Scale","Enetered Scale()");
   if(!fNumerator) 
    {
      Error("Scale","No numerator");
@@ -745,7 +789,7 @@ Double_t AliHBTFunction3D::Scale()
     return 0.0;
    }
 
-  if (AliHBTParticle::GetDebug()>0) Info("Scale","No errors detected");
+  if (AliVAODParticle::GetDebug()>0) Info("Scale","No errors detected");
 
   Int_t offsetX = nbinsX - fNBinsToScaleX - 1; //bin that we start loop over bins in axis X
   Int_t offsetY = nbinsY - fNBinsToScaleY - 1; //bin that we start loop over bins in axis Y
@@ -761,19 +805,19 @@ Double_t AliHBTFunction3D::Scale()
         if ( fNumerator->GetBinContent(i,j,k) > 0.0 )
          {
            
-           densum = fDenominator->GetBinContent(i,j,k);
-           numsum = fNumerator->GetBinContent(i,j,k);
+           densum += fDenominator->GetBinContent(i,j,k);
+           numsum += fNumerator->GetBinContent(i,j,k);
          }
        }
   
-  if(AliHBTParticle::GetDebug() > 0) 
+  if(AliVAODParticle::GetDebug() > 0) 
     Info("Scale","numsum=%f densum=%f fNBinsToScaleX=%d fNBinsToScaleY=%d fNBinsToScaleZ=%d",
           numsum,densum,fNBinsToScaleX,fNBinsToScaleY,fNBinsToScaleZ);
   
   if (numsum == 0) return 0.0;
   Double_t ret = densum/numsum;
 
-  if(AliHBTParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
+  if(AliVAODParticle::GetDebug() > 0) Info("Scale","returning %f",ret);
   return ret;
 } 
 /******************************************************************/
@@ -1036,9 +1080,6 @@ void AliHBTTwoPairFctn1D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHB
   // Fills the numerator using pairs from the same event
   partpair  = CheckPair(partpair);
   if( partpair == 0x0) return;
-  
-  if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
-    trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
     
   Double_t x = GetValue(trackpair,partpair);
   fNumerator->Fill(x);
@@ -1051,9 +1092,6 @@ void AliHBTTwoPairFctn1D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHB
   partpair  = CheckPair(partpair);
   if( partpair == 0x0) return;
   
-  if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
-    trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
-    
   Double_t x = GetValue(trackpair,partpair);
   fDenominator->Fill(x);
 }
@@ -1109,9 +1147,6 @@ void AliHBTTwoPairFctn2D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHB
   partpair  = CheckPair(partpair);  //check cuts
   if (partpair == 0x0) return;
   
-  if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
-    trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
-    
   Double_t x,y;
   GetValues(trackpair,partpair,x,y);
   fNumerator->Fill(x,y);
@@ -1124,9 +1159,6 @@ void AliHBTTwoPairFctn2D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHB
   partpair  = CheckPair(partpair);
   if (partpair == 0x0) return;
   
-  if (partpair->GetSwapedPair() == 0x0)//it means that Check pair returned swapped pair
-    trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
-    
   Double_t x,y;
   GetValues(trackpair,partpair,x,y);
   fDenominator->Fill(x,y);
@@ -1186,9 +1218,6 @@ void AliHBTTwoPairFctn3D::ProcessSameEventParticles(AliHBTPair* trackpair, AliHB
   partpair  = CheckPair(partpair);
   if( partpair == 0x0) return;
   
-  if (partpair->GetSwapedPair() == 0x0)//it means that CheckPair returned swapped pair
-    trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
-    
   Double_t x,y,z;
   GetValues(trackpair,partpair,x,y,z);
   fNumerator->Fill(x,y,z);
@@ -1202,9 +1231,6 @@ void AliHBTTwoPairFctn3D::ProcessDiffEventParticles(AliHBTPair* trackpair, AliHB
   partpair  = CheckPair(partpair);
   if( partpair == 0x0) return;
   
-  if (partpair->GetSwapedPair() == 0x0)//it means that CheckPair returned swapped pair
-    trackpair = trackpair->GetSwapedPair();//so the track pair must be swapped as well
-    
   Double_t x,y,z;
   GetValues(trackpair,partpair,x,y,z);
   fDenominator->Fill(x,y,z);