Some cleaning and simplification in container-related classes and
[u/mrichter/AliRoot.git] / CORRFW / AliCFFrame.cxx
index cdb4a5a53a1946bf40ddea2b08110b2af87de5e9..3142e7b159a2033c62b16437ef00ebbe4343c039 100644 (file)
@@ -1,5 +1,18 @@
 /* $Id$ */
-
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
 //--------------------------------------------------------------------//
 //                                                                    //
 // AliCFFrame Class                                                 //
@@ -15,8 +28,8 @@
 //
 
 #include "TSystem.h"
-#include <TFile.h>
-#include <AliLog.h>
+#include "TFile.h"
+#include "AliLog.h"
 #include "AliCFFrame.h"
 
 //____________________________________________________________________
@@ -51,7 +64,7 @@ AliCFFrame::AliCFFrame(const Char_t* name, const Char_t* title) :
   // named constructor
 }
 //____________________________________________________________________
-AliCFFrame::AliCFFrame(const Char_t* name, const Char_t* title, const Int_t nVarIn, const Int_t * nBinIn, const Float_t *binLimitsIn) :  
+AliCFFrame::AliCFFrame(const Char_t* name, const Char_t* title, const Int_t nVarIn, const Int_t * nBinIn, const Double_t *binLimitsIn) :  
   TNamed(name,title),
   fNVar(0),
   fNDim(0),
@@ -106,7 +119,7 @@ AliCFFrame::AliCFFrame(const Char_t* name, const Char_t* title, const Int_t nVar
   //The bin limits
 
   fNVarBinLimits=nbinTot;
-  fVarBinLimits=new Float_t[fNVarBinLimits];
+  fVarBinLimits=new Double_t[fNVarBinLimits];
   if(binLimitsIn){
     for(Int_t i=0;i<fNVarBinLimits;i++){
       fVarBinLimits[i] =binLimitsIn[i];
@@ -154,7 +167,7 @@ AliCFFrame &AliCFFrame::operator=(const AliCFFrame &c)
   return *this;
 } 
 //____________________________________________________________________
-void AliCFFrame::SetBinLimits(Int_t ivar, Float_t *array)
+void AliCFFrame::SetBinLimits(Int_t ivar, Double_t *array)
 {
   //
   // setting the arrays containing the bin limits 
@@ -165,7 +178,7 @@ void AliCFFrame::SetBinLimits(Int_t ivar, Float_t *array)
   } 
 } 
 //____________________________________________________________________
-void AliCFFrame::GetBinLimits(Int_t ivar, Float_t *array) const
+void AliCFFrame::GetBinLimits(Int_t ivar, Double_t *array) const
 {
   //
   // getting the arrays containing the bin limits 
@@ -180,6 +193,7 @@ Int_t AliCFFrame::GetBinIndex(Int_t *ibin) const
 {
   //
   // getting the element number on the grid for a given set of bin indeces 
+  //(here the numbering of bin indeces ranges from 0 to N-1)
   //
   Int_t ind=ibin[fNVar-1];
   for(Int_t i=fNVar-1;i>0;i--){
@@ -191,7 +205,9 @@ Int_t AliCFFrame::GetBinIndex(Int_t *ibin) const
 Int_t AliCFFrame::GetBinIndex(Int_t ivar, Int_t ind) const
 {
   //
-  // getting the bin index on a given dim. ivar for a given element ind on the grid
+  // getting the bin index on a given dim. ivar for a given element ind 
+  // on the grid
+  //(here the numbering of bin indeces ranges from 0 to N-1)
   //
   Int_t index=-1;
   for(Int_t i=fNVar-1;i>=0;i--){
@@ -208,6 +224,7 @@ void AliCFFrame::GetBinIndex(Int_t ind, Int_t *bins ) const
 {
   //
   // getting the set of bin indeces for a given element ind on the grid
+  // (here the numbering of bin indeces ranges from 0 to N-1)
   //
   Int_t index=-1;
   for(Int_t i=fNVar-1;i>=0;i--){
@@ -218,28 +235,68 @@ void AliCFFrame::GetBinIndex(Int_t ind, Int_t *bins ) const
   return;
 }
 //____________________________________________________________________
-Float_t AliCFFrame::GetBinCenter(Int_t ivar, Int_t ibin) const
+Double_t AliCFFrame::GetBinCenter(Int_t ivar, Int_t ibin) const
 {
   //
-  // getting the bin center of a given bin ibin on the dim. (axis) ivar
+  // getting the bin center of a given bin ibin along variable ivar
+  // (here the numbering of bin indeces in input 
+  //  ranges from 1 to N, TH1/2/3 and THnSparse convention)
   //
  
-  Float_t binMin=fVarBinLimits[fOffset[ivar]+ibin];
-  Float_t binMax=fVarBinLimits[fOffset[ivar]+ibin+1];
-  Float_t val=0.5*(binMin+binMax);
+  if(ibin>fNVarBins[ivar] || ibin==0){
+    AliWarning(Form("bin index out of range, number of bins in variable %i ranges from 1 to %i", ivar,fNVarBins[ivar]));
+    return -1;
+  } 
+  Double_t binMin=fVarBinLimits[fOffset[ivar]+ibin-1];
+  Double_t binMax=fVarBinLimits[fOffset[ivar]+ibin];
+  Double_t val=0.5*(binMin+binMax);
   return val;
 }
 //____________________________________________________________________
-void AliCFFrame::GetBinCenter(Int_t *ibin, Float_t *binCenter) const
+void AliCFFrame::GetBinCenters(Int_t *ibin, Double_t *binCenter) const
 {
   //
   // gives the centers of the N-dim bin identified by a set of bin indeces 
   // invar
+  // (here the numbering of bin indeces in input 
+  //  ranges from 1 to N, TH1/2/3 and THnSparse convention)
   //
   for(Int_t i=0;i<fNVar;i++){
     binCenter[i]=GetBinCenter(i,ibin[i]);
   }
+} //____________________________________________________________________
+Double_t AliCFFrame::GetBinSize(Int_t ivar, Int_t ibin) const
+{
+  //
+  // getting the bin size on axis ivar of a given bin ibin 
+  // (here the numbering of bin indeces in input 
+  //  ranges from 1 to N, TH1/2/3 and THnSparse convention)
+  //
+
+  if(ibin>fNVarBins[ivar] || ibin==0){
+    AliWarning(Form("bin index out of range, number of bins in variable %i ranges from 1 to %i", ivar,fNVarBins[ivar]));
+    return -1;
+  } 
+
+  Double_t binMin=fVarBinLimits[fOffset[ivar]+ibin-1];
+  Double_t binMax=fVarBinLimits[fOffset[ivar]+ibin];
+  Double_t val=binMax-binMin;
+  return val;
+}
+//____________________________________________________________________
+void AliCFFrame::GetBinSizes(Int_t *ibin, Double_t *binSizes) const
+{
+  //
+  // gives the sizes of the N-dim bin identified by a set of bin indeces 
+  // ibin
+  // (here the numbering of bin indeces in input 
+  //  ranges from 1 to N, TH1/2/3 and THnSparse convention)
+  //
+  for(Int_t i=0;i<fNVar;i++){
+    binSizes[i]=GetBinSize(i,ibin[i]);
+  }
 } 
+
 //____________________________________________________________________
 void AliCFFrame::Copy(TObject& c) const
 {