fix of memory potential leak
authorrvernet <rvernet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 27 Mar 2010 11:15:09 +0000 (11:15 +0000)
committerrvernet <rvernet@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 27 Mar 2010 11:15:09 +0000 (11:15 +0000)
getters of bin content/error in AliCFContainer

CORRFW/AliCFContainer.h
CORRFW/AliCFGridSparse.cxx
CORRFW/AliCFGridSparse.h

index fbfee66..e3a88e0 100644 (file)
@@ -46,6 +46,8 @@ class AliCFContainer : public AliCFFrame
   virtual Int_t    * GetNBins()                                      const {return fGrid[0]->GetNBins();}
   virtual Float_t    GetBinCenter(Int_t ivar,Int_t ibin)             const {return fGrid[0]->GetBinCenter(ivar,ibin);}
   virtual Float_t    GetBinSize  (Int_t ivar,Int_t ibin)             const {return fGrid[0]->GetBinSize  (ivar,ibin);}
+  virtual Float_t    GetBinContent(const Int_t* coordinates, Int_t step) const {return fGrid[step]->GetGrid()->GetBinContent(coordinates);}
+  virtual Float_t    GetBinError  (const Int_t* coordinates, Int_t step) const {return fGrid[step]->GetGrid()->GetBinError  (coordinates);}
   virtual const Char_t* GetBinLabel (Int_t ivar,Int_t ibin)          const {return GetAxis(ivar,0)->GetBinLabel(ibin);}
 
   virtual void       Print(const Option_t*) const ;
@@ -98,7 +100,7 @@ class AliCFContainer : public AliCFFrame
 
   virtual void  SetRangeUser(Int_t ivar, Double_t varMin, Double_t varMax, Int_t istep) ;
   virtual void  SetRangeUser(Double_t* varMin, Double_t* varMax, Int_t istep) ;
-  virtual void  SetGrid(Int_t step, AliCFGridSparse* grid) {fGrid[step]=grid;}
+  virtual void  SetGrid(Int_t step, AliCFGridSparse* grid) {if (fGrid[step]) delete fGrid[step]; fGrid[step]=grid;}
   virtual AliCFGridSparse * GetGrid(Int_t istep) const {return fGrid[istep];};
 
   virtual void  Scale(Double_t factor) const;
@@ -155,10 +157,14 @@ inline void  AliCFContainer::Scale(Double_t factor) const {
 }
 
 inline void AliCFContainer::SetBinContent(Int_t* bin, Int_t step, Double_t value) {
+  // sets the content 'value' to the current container, at step 'step'
+  // 'bin' is the array of the bin coordinates
   GetGrid(step)->GetGrid()->SetBinContent(bin,value);
 }
 
 inline void AliCFContainer::SetBinError(Int_t* bin, Int_t step, Double_t value) {
+  // sets the error 'value' to the current container, at step 'step'
+  // 'bin' is the array of the bin coordinates
   GetGrid(step)->GetGrid()->SetBinError(bin,value);
 }
 
index 00843be..51c7b91 100755 (executable)
@@ -202,6 +202,7 @@ AliCFGridSparse* AliCFGridSparse::Project(Int_t nVars, const Int_t* vars, const
   else AliInfo("Keeping same axis ranges");
 
   out->SetGrid(clone->Projection(nVars,vars));
+  delete [] bins;
   return out;
 }
 
index 93a09a5..d73a0a9 100755 (executable)
@@ -100,7 +100,7 @@ class AliCFGridSparse : public AliCFFrame
   //virtual Double_t GetIntegral(const Double_t *varMin, const Double_t *varMax) const;
   virtual Long64_t Merge(TCollection* list);
 
-  virtual void     SetGrid(THnSparse* grid) {fData=grid;}
+  virtual void     SetGrid(THnSparse* grid) {if (fData) delete fData ; fData=grid;}
   THnSparse   *    GetGrid() const {return fData;}
 
   virtual Float_t GetOverFlows (Int_t var, Bool_t excl=kFALSE) const;