]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STAT/TKDInterpolatorBase.h
fixing delete statement
[u/mrichter/AliRoot.git] / STAT / TKDInterpolatorBase.h
index 5b5917036550c9d00b71b5832eb266779c42aad6..f21e08d1e625646cebf8461cafccf1d465f9b649 100644 (file)
@@ -5,6 +5,10 @@
 #include "Rtypes.h"
 #endif
 
+#ifndef ROOT_TKDNodeInfo
+#include "TKDNodeInfo.h"
+#endif
+
 ///////////////////////////////////////////////////////////////
 //
 // Base non parametric interpolation algorithm.
@@ -22,53 +26,66 @@ template <typename Index, typename Value> class TKDTree;
 typedef class TKDTree<Int_t, Float_t> TKDTreeIF;
 class TLinearFitter;
 class TClonesArray;
-class TKDNodeInfo;
 class TKDInterpolatorBase
 {
 public:        
-       TKDInterpolatorBase(const Int_t size = 0);
-       virtual ~TKDInterpolatorBase();
-
-       Double_t   Eval(const Double_t *point, Double_t &result, Double_t &error, Bool_t force = kFALSE);
-       virtual Int_t GetNodeIndex(const Float_t *p) = 0;
-       Float_t    GetAlpha() const {return fAlpha;}
-       Bool_t     GetCOGPoint(Int_t node, Float_t *&coord, Float_t &val, Float_t &error) const;
-       Bool_t     GetInterpolationMethod() const {return fStatus&1;}
-       TKDNodeInfo* GetNodeInfo(const Int_t inode) const;
-       Int_t      GetNTNodes() const {return fNTNodes;}
-       void       GetStatus();
-       Bool_t     GetStore() const {return fStatus&2;}
-       Bool_t     GetWeights() const {return fStatus&4;}
-
-       void       DrawBins(UInt_t ax1 = 0, UInt_t ax2 = 1, Float_t ax1min=-1., Float_t ax1max=1., Float_t ax2min=-1., Float_t ax2max=1.);
-       void       SetAlpha(const Float_t a){if(a>0.) fAlpha = a;}
-       void       SetInterpolationMethod(const Bool_t on = kTRUE);
-       void       SetStore(const Bool_t on = kTRUE);
-       void       SetWeights(const Bool_t on = kTRUE);
+  enum EKDInterpolatorBase {
+    kdN = 4       // increase in the number of PDF if fit failled
+   ,kNhelper = 30 // bucket size in helper kdTree
+  };
+  enum EKDInterpolatorBaseBits {
+    kCOG   = 0  // COG interpolation method
+   ,kSTORE = 1  // Store interpolation results
+   ,kWEIGHTS = 2 // use weights
+  };
+  TKDInterpolatorBase(Int_t size = 0);
+  virtual ~TKDInterpolatorBase();
 
-protected:
-       virtual void      Build(const Int_t nnodes);
+  Bool_t        Bootstrap();
+  Double_t      Eval(const Double_t *point, Double_t &result, Double_t &error, Bool_t force = kFALSE);
+  virtual Int_t GetNodeIndex(const Float_t *p) = 0;
+  Float_t       GetAlpha() const {return fAlpha;}
+  Int_t         GetLambda() const {return fLambda;}
+  Int_t         GetSize() const {return fNSize;}
+  Bool_t        GetCOGPoint(Int_t node, Float_t *&coord, Float_t &val, Float_t &error) const;
+  TKDNodeInfo*  GetNodeInfo(Int_t inode) const;
+  Int_t         GetNTNodes() const;
+  Bool_t        GetRange(Int_t ax, Float_t &min, Float_t &max) const;
+  void          GetStatus(Option_t *opt="");
 
-private:
-       TKDInterpolatorBase(const TKDInterpolatorBase &);
-       TKDInterpolatorBase& operator=(const TKDInterpolatorBase &);
+  Bool_t        HasStore() const {return TESTBIT(fStatus, kSTORE);}
+  Bool_t        UseCOG() const {return TESTBIT(fStatus, kCOG);}
+  Bool_t        UseWeights() const {return TESTBIT(fStatus, kWEIGHTS);}
+
+  void          DrawProjection(UInt_t ax1 = 0, UInt_t ax2 = 1);
+  void          SetAlpha(Float_t a);
+  void          SetCOG(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kCOG) : CLRBIT(fStatus, kCOG);}
+  void          SetStore(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kSTORE) : CLRBIT(fStatus, kSTORE);}
+  void          SetWeights(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kWEIGHTS) : CLRBIT(fStatus, kWEIGHTS);}
 
 protected:
-       Int_t         fNSize;       // data dimension
-       Int_t         fNTNodes;     //Number of evaluation data points
-       TClonesArray  *fTNodes;     //interpolation nodes
+  virtual Bool_t    Build(Int_t nnodes);
+
+
+  Int_t         fNSize;       //!data dimension
+  TClonesArray  *fNodes;     //interpolation nodes
+  TKDNodeInfo::TKDNodeDraw  *fNodesDraw; //!graphical representation of interpolation nodes
 
 //private:
-       UChar_t       fStatus;      // status of the interpolator
-       UChar_t       fLambda;      // number of parameters in polynom
-       Short_t             fDepth;       //! depth of the KD Tree structure used
-       Float_t       fAlpha;       // alpha parameter
-       Float_t       **fRefPoints; //! temporary storage of COG data
-       Double_t            *fBuffer;     //! working space [2*fLambda]
-       TKDTree<Int_t, Float_t> *fKDhelper;      //! kNN finder
-       TLinearFitter *fFitter;     //! linear fitter   
-
-       ClassDef(TKDInterpolatorBase, 1)   // data interpolator based on KD tree
+  UChar_t       fStatus;      // status of the interpolator
+  UChar_t       fLambda;      //! number of parameters in polynom
+  Short_t                  fDepth;       //! depth of the KD Tree structure used
+  Float_t       fAlpha;       // parameter controlling the size of the region to interpolate n = (1+alpha)*lambda
+  Float_t       **fRefPoints; //! temporary storage of COG data
+  Double_t         *fBuffer;     //! working space [2*fLambda]
+  TKDTree<Int_t, Float_t> *fKDhelper;      //! kNN finder
+  TLinearFitter *fFitter;     //! linear fitter        
+
+private:
+  TKDInterpolatorBase(const TKDInterpolatorBase &);
+  TKDInterpolatorBase& operator=(const TKDInterpolatorBase &);
+
+  ClassDef(TKDInterpolatorBase, 3)   // data interpolator based on KD tree
 };