final updates and fixups in the container classes
authorarcelli <arcelli@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Jan 2008 19:19:35 +0000 (19:19 +0000)
committerarcelli <arcelli@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 24 Jan 2008 19:19:35 +0000 (19:19 +0000)
CORRFW/AliCFContainer.cxx
CORRFW/AliCFContainer.h
CORRFW/AliCFDataGrid.h
CORRFW/AliCFEffGrid.h
CORRFW/AliCFGrid.cxx
CORRFW/AliCFGrid.h
CORRFW/AliCFGridSparse.cxx
CORRFW/AliCFGridSparse.h
CORRFW/AliCFVGrid.cxx
CORRFW/AliCFVGrid.h
CORRFW/test/CF_DOC.pdf

index 7979f74..013a7c3 100644 (file)
@@ -36,6 +36,7 @@ ClassImp(AliCFContainer)
 AliCFContainer::AliCFContainer() : 
   AliCFFrame(),
   fNStep(0),
+  fExclOffEntriesInProj(kTRUE),
   fGrid(0x0)
 {
   //
@@ -46,6 +47,7 @@ AliCFContainer::AliCFContainer() :
 AliCFContainer::AliCFContainer(const Char_t* name, const Char_t* title) : 
   AliCFFrame(name,title),
   fNStep(0),
+  fExclOffEntriesInProj(kTRUE),
   fGrid(0x0)
 {
   // default constructor
@@ -55,6 +57,7 @@ AliCFContainer::AliCFContainer(const Char_t* name, const Char_t* title) :
 AliCFContainer::AliCFContainer(const Char_t* name, const Char_t* title,const Int_t nSelSteps, const Int_t nVarIn, const Int_t * nBinIn, const Double_t *binLimitsIn, const Bool_t useSparse) :  
   AliCFFrame(name,title,nVarIn,nBinIn,binLimitsIn),
   fNStep(0),
+  fExclOffEntriesInProj(kTRUE),
   fGrid(0x0)
 {
   //
@@ -81,8 +84,9 @@ AliCFContainer::AliCFContainer(const Char_t* name, const Char_t* title,const Int
 //____________________________________________________________________
 AliCFContainer::AliCFContainer(const AliCFContainer& c) : 
   AliCFFrame(),
-  fNStep(0),
-  fGrid(0x0)
+  fNStep(c.fNStep),
+  fExclOffEntriesInProj(c.fExclOffEntriesInProj),
+  fGrid(c.fGrid)
 {
   //
   // copy constructor
@@ -130,6 +134,7 @@ void AliCFContainer::Copy(TObject& c) const
   //
   AliCFContainer& target = (AliCFContainer &) c;
   target.fNStep=fNStep;
+  target.fExclOffEntriesInProj=fExclOffEntriesInProj;
   target.fNVar=fNVar;
   target.fNDim=fNDim;
   target.fNVarBinLimits=fNVarBinLimits;
@@ -160,6 +165,7 @@ TH1D *AliCFContainer::ShowProjection(Int_t ivar, Int_t istep) const
   //
   // returns 1-D projection along variable ivar at selection step istep
   //
+  fGrid[istep]->SetExcludeOffEntriesInProj(fExclOffEntriesInProj);
   return fGrid[istep]->Project(ivar);
 }
 //___________________________________________________________________
@@ -168,6 +174,7 @@ TH2D *AliCFContainer::ShowProjection(Int_t ivar1, Int_t ivar2, Int_t istep) cons
   //
   // returns 2-D projection along variables ivar1,ivar2 at selection step istep
   //
+  fGrid[istep]->SetExcludeOffEntriesInProj(fExclOffEntriesInProj);
   return fGrid[istep]->Project(ivar1,ivar2);
 }
 //___________________________________________________________________
@@ -177,6 +184,7 @@ TH3D *AliCFContainer::ShowProjection(Int_t ivar1, Int_t ivar2, Int_t ivar3, Int_
   // returns 3-D projection along variables ivar1,ivar2,ivar3 
   // at selection step istep
   //
+  fGrid[istep]->SetExcludeOffEntriesInProj(fExclOffEntriesInProj);
   return fGrid[istep]->Project(ivar1,ivar2,ivar3);
 }
 //___________________________________________________________________
index c765714..17dc227 100644 (file)
@@ -31,6 +31,8 @@ class AliCFContainer : public AliCFFrame
   virtual void  SetBinLimits(Int_t varindex, Double_t * array);
   virtual void  Fill(Double_t *var, Int_t istep, Double_t weight=1.);
 
+  virtual void   SetExcludeOffEntriesInProj(Bool_t in){fExclOffEntriesInProj=in;}; 
+  virtual Bool_t GetExcludeOffEntriesInProj( ) const {return fExclOffEntriesInProj;}; 
   virtual Float_t GetOverFlows(Int_t var,Int_t istep) const;
   virtual Float_t GetUnderFlows(Int_t var,Int_t istep)const ;
   virtual Float_t GetEntries(Int_t istep)const ;
@@ -48,13 +50,14 @@ class AliCFContainer : public AliCFFrame
   virtual TH2D* ShowProjection( Int_t ivar1, Int_t ivar2, Int_t istep) const;
   virtual TH3D* ShowProjection( Int_t ivar1, Int_t ivar2,Int_t ivar3, Int_t istep) const;
   virtual TH1D* ShowSlice( Int_t ivar, Double_t *varMin, Double_t *varMax, Int_t istep) const;
-  virtual AliCFVGrid * GetGrid(Int_t istep) const {return fGrid[istep];};
+  virtual AliCFVGrid * GetGrid(Int_t istep) const {return (AliCFVGrid*)fGrid[istep];};
   
  private:
   Int_t    fNStep; //number of selection steps
+  Bool_t fExclOffEntriesInProj; // exclude under/overflows in 
   AliCFVGrid **fGrid;//[fNStep]
   
-  ClassDef(AliCFContainer,2);
+  ClassDef(AliCFContainer,3);
 };
     
 #endif
index 690aa7f..9a87a26 100644 (file)
@@ -35,7 +35,7 @@ class AliCFDataGrid : public AliCFGrid
   // Methods for handling/correcting data 
 
   virtual void  SetMeasured(Int_t istep);
-  virtual const AliCFVGrid*  GetData() {return fContainer->GetGrid(fSelData);};
+  virtual const AliCFVGrid*  GetData() {return (AliCFVGrid*)fContainer->GetGrid(fSelData);};
   virtual void  ApplyEffCorrection(const AliCFEffGrid &eff);
   virtual void  ApplyBGCorrection(const AliCFDataGrid &c);
   virtual void  SetContainer(const AliCFContainer &c) {fContainer=&c;};
@@ -46,7 +46,7 @@ class AliCFDataGrid : public AliCFGrid
  private:
   Int_t fSelData; //sel step of the observed data 
   const AliCFContainer *fContainer; //pointer to the input data Container
-  ClassDef(AliCFDataGrid,1);
+  ClassDef(AliCFDataGrid,2);
 };
     
 #endif
index 4df1960..5394664 100644 (file)
@@ -37,8 +37,8 @@ class AliCFEffGrid : public AliCFGrid
 
   //Efficiency calculation
   virtual void  CalculateEfficiency(Int_t istep1, Int_t istep2);
-  virtual const AliCFVGrid*  GetNum() {return fContainer->GetGrid(fSelNum);};
-  virtual const AliCFVGrid*  GetDen() {return fContainer->GetGrid(fSelDen);};
+  virtual const AliCFVGrid*  GetNum() {return (AliCFVGrid*)fContainer->GetGrid(fSelNum);};
+  virtual const AliCFVGrid*  GetDen() {return (AliCFVGrid*)fContainer->GetGrid(fSelDen);};
   virtual void  SetContainer(const AliCFContainer &c) {fContainer=&c;};
 
   //basic operations
index 17f16dc..1fd35e3 100644 (file)
@@ -89,9 +89,12 @@ AliCFGrid::AliCFGrid(const Char_t* name, const Char_t* title, const Int_t nVarIn
 
   // the grid
  
-  fData = new Float_t[fNDim]; //num
+  fData = new Float_t[fNDim]; 
 
   //Initialization
+  for(Int_t j=0;j<fNDim;j++){
+    fData[j] =0;
+  }
  
 }
 
@@ -538,7 +541,7 @@ TH1D *AliCFGrid::Project(Int_t ivar) const
   delete [] err;
   proj1D->SetBinContent(nbins+1,GetOverFlows(ivar));
   proj1D->SetBinContent(0,GetUnderFlows(ivar));
-  proj1D->SetEntries(sum+GetUnderFlows(ivar)+GetOverFlows(ivar));
+  proj1D->SetEntries(fNentriesTot);
   return proj1D;
 } 
 
@@ -620,7 +623,7 @@ TH2D *AliCFGrid::Project(Int_t ivar1, Int_t ivar2) const
   proj2D->SetBinContent(nbins1+1,nbins2/2,GetOverFlows(ivar1));
   proj2D->SetBinContent(nbins1/2,0,GetUnderFlows(ivar2));
   proj2D->SetBinContent(nbins1/2,nbins2+1,GetOverFlows(ivar2));
-  proj2D->SetEntries(sum+GetUnderFlows(ivar1)+GetOverFlows(ivar1)+GetUnderFlows(ivar2)+GetOverFlows(ivar2));
+  proj2D->SetEntries(fNentriesTot);
   return proj2D;
 } 
 //___________________________________________________________________
@@ -716,7 +719,8 @@ TH3D *AliCFGrid::Project(Int_t ivar1, Int_t ivar2, Int_t ivar3) const
   delete err;
   delete err2;
   delete err3;
-  proj3D->SetEntries(sum+GetUnderFlows(ivar1)+GetOverFlows(ivar1)+GetUnderFlows(ivar2)+GetOverFlows(ivar2)+GetUnderFlows(ivar3)+GetOverFlows(ivar3));
+
+  proj3D->SetEntries(fNentriesTot);
   return proj3D;
 } 
 
@@ -1090,3 +1094,27 @@ void AliCFGrid::Copy(TObject& c) const
     target.fErr2 = fErr2;
   
 }
+//____________________________________________________________________
+void AliCFGrid::SetExcludeOffEntriesInProj(Bool_t in)
+{
+  //
+  // require under/overflows in 'hidden dimensions' to be excluded
+  // or included, when performing projections.
+  // For AliCFGrid implementation, only option = kTRUE is available
+
+  if(in){
+    AliInfo(Form("This option not available for AliCFGrid")); 
+    return;
+  }
+
+  fExclOffEntriesInProj=in;
+} 
+//____________________________________________________________________
+Bool_t AliCFGrid::GetExcludeOffEntriesInProj( ) const 
+{
+  //
+  // return flag saying whether under/overflows are excluded in projections 
+  //
+  
+  return fExclOffEntriesInProj;
+} 
index ac77ed3..498d27f 100644 (file)
@@ -28,6 +28,8 @@ class AliCFGrid : public AliCFVGrid
 
   virtual void  Fill(Double_t *var, Double_t weight=1.);
 
+  virtual void   SetExcludeOffEntriesInProj(Bool_t in); 
+  virtual Bool_t GetExcludeOffEntriesInProj( ) const; 
   virtual Float_t GetOverFlows(Int_t var) const;
   virtual Float_t GetUnderFlows(Int_t var)const ;
   virtual Float_t GetEntries()const ;
index 33a0e52..66f666f 100755 (executable)
@@ -40,7 +40,6 @@ ClassImp(AliCFGridSparse)
 //____________________________________________________________________
 AliCFGridSparse::AliCFGridSparse() : 
   AliCFVGrid(),
-  fExcludeOffEntries(kTRUE),
   fData(0x0)
 {
   // default constructor
@@ -48,7 +47,6 @@ AliCFGridSparse::AliCFGridSparse() :
 //____________________________________________________________________
 AliCFGridSparse::AliCFGridSparse(const Char_t* name, const Char_t* title) : 
   AliCFVGrid(name,title),
-  fExcludeOffEntries(kTRUE),
   fData(0x0)
 {
   // default constructor
@@ -56,7 +54,6 @@ AliCFGridSparse::AliCFGridSparse(const Char_t* name, const Char_t* title) :
 //____________________________________________________________________
 AliCFGridSparse::AliCFGridSparse(const Char_t* name, const Char_t* title, const Int_t nVarIn, const Int_t * nBinIn, const Double_t *binLimitsIn) :  
   AliCFVGrid(name,title,nVarIn,nBinIn,binLimitsIn),
-  fExcludeOffEntries(kTRUE),
   fData(0x0)
 {
   //
@@ -80,7 +77,6 @@ AliCFGridSparse::AliCFGridSparse(const Char_t* name, const Char_t* title, const
 //____________________________________________________________________
 AliCFGridSparse::AliCFGridSparse(const AliCFGridSparse& c) : 
   AliCFVGrid(c),
-  fExcludeOffEntries(c.fExcludeOffEntries),
   fData(c.fData)
 {
   //
@@ -143,18 +139,15 @@ TH1D *AliCFGridSparse::Project(Int_t ivar) const
   //
 
   //exclude overflows by default (used in projections)
-  if(fExcludeOffEntries){
+  if(fExclOffEntriesInProj){
     for(Int_t i=0;i<fNVar;i++){
       fData->GetAxis(i)->SetBit(TAxis::kAxisRange);
     }
   }
+
+
   TH1D *hist=fData->Projection(ivar);
-  Float_t sum=0;
-  for(Int_t i=1;i<=fNVarBins[ivar]; i++){
-    sum+=hist->GetBinContent(i);
-  }
 
-  hist->SetEntries(sum+GetOverFlows(ivar)+GetUnderFlows(ivar));
   return hist;
 
 }
@@ -166,21 +159,12 @@ TH2D *AliCFGridSparse::Project(Int_t ivar1, Int_t ivar2) const
   //
 
   //exclude overflows by default (used in projections)
-  if(fExcludeOffEntries){
+  if(fExclOffEntriesInProj){
     for(Int_t i=0;i<fNVar;i++){
       fData->GetAxis(i)->SetBit(TAxis::kAxisRange);
     }
   }
-  TH2D *hist=fData->Projection(ivar2,ivar1); //notice inverted axis (THnSparse uses TH3 2d-projction convention...)
-
-  Float_t sum=0;
-  for(Int_t i=1;i<=fNVarBins[ivar1]; i++){
-    for(Int_t j=1;j<=fNVarBins[ivar2]; j++){
-    sum+=hist->GetBinContent(i,j);
-    }
-  }
-
-  hist->SetEntries(sum+GetOverFlows(ivar1)+GetUnderFlows(ivar1)+GetOverFlows(ivar2)+GetUnderFlows(ivar2));
+  TH2D *hist=fData->Projection(ivar2,ivar1); //notice inverted axis (THnSparse uses TH3 2d-projection convention...)
   return hist;
 
 }
@@ -191,24 +175,13 @@ TH3D *AliCFGridSparse::Project(Int_t ivar1, Int_t ivar2, Int_t ivar3) const
   // Make a 3D projection along variables ivar1 & ivar2 & ivar3 
   //
   //exclude overflows by default (used in projections)
-  if(fExcludeOffEntries){
+  if(fExclOffEntriesInProj){
     for(Int_t i=0;i<fNVar;i++){
       fData->GetAxis(i)->SetBit(TAxis::kAxisRange);
     }
   }
 
   TH3D *hist=fData->Projection(ivar1,ivar2,ivar3); 
-
-  Float_t sum=0;
-  for(Int_t i=1;i<=fNVarBins[ivar1]; i++){
-    for(Int_t j=1;j<=fNVarBins[ivar2]; j++){
-      for(Int_t k=1;k<=fNVarBins[ivar3]; k++){
-       sum+=hist->GetBinContent(i,j,k);
-      }
-    }
-  }
-
-  hist->SetEntries(sum+GetOverFlows(ivar1)+GetUnderFlows(ivar1)+GetOverFlows(ivar2)+GetUnderFlows(ivar2)+GetOverFlows(ivar3)+GetUnderFlows(ivar3));
   return hist;
 
 }
@@ -217,7 +190,7 @@ TH3D *AliCFGridSparse::Project(Int_t ivar1, Int_t ivar2, Int_t ivar3) const
 Float_t AliCFGridSparse::GetOverFlows(Int_t ivar) const
 {
   //
-  // Returns overflows in variable ivar
+  // Returns exclusive overflows in variable ivar
   //
   Int_t* bin = new Int_t[fNDim];
   memset(bin, 0, sizeof(Int_t) * fNDim);
@@ -240,7 +213,7 @@ Float_t AliCFGridSparse::GetOverFlows(Int_t ivar) const
 Float_t AliCFGridSparse::GetUnderFlows(Int_t ivar) const
 {
   //
-  // Returns overflows in variable ivar
+  // Returns exclusive overflows in variable ivar
   //
   Int_t* bin = new Int_t[fNDim];
   memset(bin, 0, sizeof(Int_t) * fNDim);
index bf9212b..ac8b8ff 100755 (executable)
@@ -26,8 +26,6 @@ class AliCFGridSparse : public AliCFVGrid
   virtual ~AliCFGridSparse();
   AliCFGridSparse& operator=(const AliCFGridSparse& corr) ;
   virtual void  SetBinLimits(Int_t ivar, Double_t * array);
-  virtual void  SetExcludeOffEntries(Bool_t in){fExcludeOffEntries=in;}; 
-  virtual Bool_t GetExcludeOffEntries( ) const {return fExcludeOffEntries;}; 
   
   virtual void  Fill(Double_t *var, Double_t weight=1.);
 
@@ -73,9 +71,8 @@ class AliCFGridSparse : public AliCFVGrid
   
  protected:
 
-  Bool_t fExcludeOffEntries; // exclude under/overflows in 'hidden dimensions' when performing projections, default is kTRUE. 
   THnSparse  *fData;//  The data Container: a THnSparse  
-  ClassDef(AliCFGridSparse,1);
+  ClassDef(AliCFGridSparse,2);
 };
     
 #endif
index dd984b9..8c7fb1d 100755 (executable)
@@ -32,6 +32,7 @@ ClassImp(AliCFVGrid)
 //____________________________________________________________________
 AliCFVGrid::AliCFVGrid() : 
   AliCFFrame(),
+  fExclOffEntriesInProj(kTRUE),
   fSumW2(kFALSE)
 {
   // default constructor
@@ -39,6 +40,7 @@ AliCFVGrid::AliCFVGrid() :
 //____________________________________________________________________
 AliCFVGrid::AliCFVGrid(const Char_t* name, const Char_t* title) : 
   AliCFFrame(name,title),
+  fExclOffEntriesInProj(kTRUE),
   fSumW2(kFALSE)
 {
   // default constructor
@@ -47,6 +49,7 @@ AliCFVGrid::AliCFVGrid(const Char_t* name, const Char_t* title) :
 //____________________________________________________________________
 AliCFVGrid::AliCFVGrid(const Char_t* name, const Char_t* title, const Int_t nVarIn, const Int_t * nBinIn, const Double_t *binLimitsIn) :  
   AliCFFrame(name,title,nVarIn,nBinIn,binLimitsIn),
+  fExclOffEntriesInProj(kTRUE),
   fSumW2(kFALSE)
 {
   //
@@ -58,6 +61,7 @@ AliCFVGrid::AliCFVGrid(const Char_t* name, const Char_t* title, const Int_t nVar
 //____________________________________________________________________
 AliCFVGrid::AliCFVGrid(const AliCFVGrid& c) : 
   AliCFFrame(c),
+  fExclOffEntriesInProj(c.fExclOffEntriesInProj),
   fSumW2(c.fSumW2)
 {
   //
index 3fa7edb..be88166 100755 (executable)
@@ -66,6 +66,8 @@ class AliCFVGrid : public AliCFFrame
 
   //implemented in AliCFVGrid
 
+  virtual void   SetExcludeOffEntriesInProj(Bool_t in){fExclOffEntriesInProj=in;}; 
+  virtual Bool_t GetExcludeOffEntriesInProj( ) const {return fExclOffEntriesInProj;}; 
   virtual void Scale(Int_t iel, Double_t *fact); 
   virtual void Scale(Int_t* bin, Double_t *fact); 
   virtual void Scale(Double_t* var, Double_t *fact); 
@@ -84,9 +86,14 @@ class AliCFVGrid : public AliCFFrame
 
   Double_t GetSum(Int_t ivar, Int_t *binMin, Int_t* binMax) const; 
   void GetScaledValues(Double_t *fact, Double_t *in, Double_t *out) const;
+  Bool_t fExclOffEntriesInProj; // exclude under/overflows in 
+  //'hidden dimensions' when performing projections, 
+  // default is kTRUE. please notice that 
+  // if you you use AliCFGrid instead of AliCFGridSparse, 
+  // only option kTRUE is actually available  
   Bool_t   fSumW2;//flag to check if calculation of squared weights enabled
    
-  ClassDef(AliCFVGrid,1);
+  ClassDef(AliCFVGrid,2);
 };
     
 #endif
index 2cd0cf2..14c81f2 100644 (file)
Binary files a/CORRFW/test/CF_DOC.pdf and b/CORRFW/test/CF_DOC.pdf differ