]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - CORRFW/AliCFGridSparse.h
updated macros for Kaon Femto analysis
[u/mrichter/AliRoot.git] / CORRFW / AliCFGridSparse.h
index 4b06bbda5f6a8785f29bd68955f23e2b307ae79c..eb17b9356f11249f41efd187be5e35fe5581accf 100755 (executable)
@@ -32,7 +32,8 @@ class AliCFGridSparse : public AliCFFrame
   virtual Int_t      GetNVar() const {return fData->GetNdimensions();}
   virtual void       PrintBinLimits() const ;
   virtual void       PrintNBins() const ; 
-  virtual void       SetBinLimits(Int_t ivar, const Double_t * array);
+  virtual void       SetBinLimits(Int_t ivar, Double_t min, Double_t max); // for uniform bin width only
+  virtual void       SetBinLimits(Int_t ivar, const Double_t * array);     // for variable or uniform bin width
   virtual void       GetBinLimits(Int_t ivar, Double_t * array) const ;
   virtual Double_t * GetBinLimits(Int_t ivar) const ;
   virtual Long_t     GetNBinsTotal() const ;
@@ -69,16 +70,15 @@ class AliCFGridSparse : public AliCFFrame
   virtual void    SetElementError(const Int_t *bin, Float_t val) ; 
   virtual void    SetElementError(const Double_t *var, Float_t val); 
 
-  virtual TH1D*            Project( Int_t ivar) const;
-  virtual TH2D*            Project( Int_t ivar1, Int_t ivar2) const;
-  virtual TH3D*            Project( Int_t ivar1, Int_t ivar2,Int_t ivar3) const;
-  virtual AliCFGridSparse* Project(Int_t nVars, const Int_t* vars, const Double_t* varMin, const Double_t* varMax) const ;
-  virtual TH1D*            Slice(Int_t ivar, const Double_t* varMin, const Double_t* varMax) const ; 
-  virtual TH2D*            Slice(Int_t ivar1, Int_t ivar2, const Double_t *varMin, const Double_t *varMax) const ;
-  virtual TH3D*            Slice(Int_t ivar1, Int_t ivar2, Int_t ivar3, const Double_t *varMin, const Double_t *varMax) const ;
-  virtual void             SetRangeUser(Int_t iVar, Double_t varMin, Double_t varMax) ;
-  virtual void             SetRangeUser(const Double_t* varMin, const Double_t* varMax) ;
-  virtual void             UseAxisRange(Bool_t b) const ;
+  virtual TH1*             Project(Int_t ivar1, Int_t ivar2=-1, Int_t ivar3=-1) const {return Slice(ivar1,ivar2,ivar3,0x0,0x0,kFALSE);}
+  virtual TH1*             Slice(Int_t ivar1, Int_t ivar2=-1, Int_t ivar3=-1, 
+                                const Double_t *varMin=0x0, const Double_t *varMax=0x0, Bool_t useBins=0) const ; 
+  virtual AliCFGridSparse* MakeSlice(Int_t nVars, const Int_t* vars,
+                                  const Double_t* varMin, const Double_t* varMax, Bool_t useBins=0) const ;
+
+  virtual void             SetRangeUser(Int_t iVar, Double_t varMin, Double_t varMax, Bool_t useBins=kFALSE) const ;
+  virtual void             SetRangeUser(const Double_t* varMin, const Double_t* varMax, Bool_t useBins=kFALSE) const ;
+  virtual void             Smooth() ;
 
   //basic operations
   virtual void     SumW2();
@@ -99,23 +99,25 @@ 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;
   virtual Float_t GetUnderFlows(Int_t var, Bool_t excl=kFALSE) const;
   virtual Long_t  GetEmptyBins() const;
 
-  // to be implemented
-  //------------------
-  //virtual Int_t    GetEmptyBins(Double_t *varMin,Double_t *varMax) const;
-  //virtual Double_t GetIntegral(Int_t *binMin,Int_t *binMax) const;
+  /*  FUNCTIONS TO REMOVE   */
+  virtual AliCFGridSparse* Project(Int_t nVars, const Int_t* vars, const Double_t* varMin, const Double_t* varMax, Bool_t useBins=0) const 
+  {return MakeSlice(nVars,vars,varMin,varMax,useBins);}
+
 
  protected:
 
   //protected functions
-  //Float_t  GetSum(Int_t ivar, const Int_t *binMin, const Int_t* binMax) const; 
   void     GetScaledValues(const Double_t *fact, const Double_t *in, Double_t *out) const;
+  void     SetAxisRange(TAxis* axis, Double_t min, Double_t max, Bool_t useBins) const;
+  void     GetProjectionName (TString& s,Int_t var0, Int_t var1=-1, Int_t var2=-1) const;
+  void     GetProjectionTitle(TString& s,Int_t var0, Int_t var1=-1, Int_t var2=-1) const;
 
   // data members:
   Bool_t      fSumW2    ; // Flag to check if calculation of squared weights enabled
@@ -170,7 +172,7 @@ inline void AliCFGridSparse::GetBinLimits(Int_t ivar, Double_t * array) const {
 }
 
 inline Int_t* AliCFGridSparse::GetNBins() const {
-  Int_t *bins = new Int_t(GetNVar());
+  Int_t *bins = new Int_t[GetNVar()];
   for (Int_t iVar=0; iVar<GetNVar(); iVar++) {
     bins[iVar] = GetNBins(iVar) ;
   }
@@ -192,5 +194,21 @@ inline Int_t AliCFGridSparse::GetVar(const Char_t* title) const {
   return -1;
 }
 
+inline void AliCFGridSparse::GetProjectionName (TString& s, Int_t var0, Int_t var1, Int_t var2) const {
+  s.Form("%s_proj-%s",GetName(),GetVarTitle(var0));
+  if (var1>=0) {
+    s.Append(Form("-%s",GetVarTitle(var1)));
+    if (var2>=0) s.Append(Form("-%s",GetVarTitle(var2)));
+  }
+}
+
+inline void AliCFGridSparse::GetProjectionTitle(TString& s, Int_t var0, Int_t var1, Int_t var2) const {
+  s.Form("%s: projection on %s",GetTitle(),GetVarTitle(var0));
+  if (var1>=0) {
+    s.Append(Form("-%s",GetVarTitle(var1)));
+    if (var2>=0) s.Append(Form("-%s",GetVarTitle(var2)));
+  }
+}
+
 #endif