LCOV - code coverage report
Current view: top level - STAT - TKDInterpolatorBase.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 10 20.0 %
Date: 2016-06-14 17:26:59 Functions: 3 14 21.4 %

          Line data    Source code
       1             : #ifndef ROOT_TKDInterpolatorBase
       2             : #define ROOT_TKDInterpolatorBase
       3             : 
       4             : #ifndef ROOT_Rtypes
       5             : #include "Rtypes.h"
       6             : #endif
       7             : 
       8             : #ifndef ROOT_TKDNodeInfo
       9             : #include "TKDNodeInfo.h"
      10             : #endif
      11             : 
      12             : ///////////////////////////////////////////////////////////////
      13             : //
      14             : // Base non parametric interpolation algorithm.
      15             : // The class implements local polynomial regression (LOWESS).
      16             : // The user will work with daughter classes which implements
      17             : // particular data configurations.
      18             : //
      19             : ///////////////////////////////////////////////////////////////
      20             : 
      21             : template <typename Value> class TVectorT;
      22             : typedef class TVectorT<Double_t> TVectorD;
      23             : template <typename Value> class TMatrixT;
      24             : typedef class TMatrixT<Double_t> TMatrixD;
      25             : template <typename Index, typename Value> class TKDTree;
      26             : typedef class TKDTree<Int_t, Float_t> TKDTreeIF;
      27             : class TLinearFitter;
      28             : class TClonesArray;
      29             : class TKDInterpolatorBase
      30             : {
      31             : public: 
      32             :   enum EKDInterpolatorBase {
      33             :     kdN = 4       // increase in the number of PDF if fit failled
      34             :    ,kNhelper = 30 // bucket size in helper kdTree
      35             :   };
      36             :   enum EKDInterpolatorBaseBits {
      37             :     kCOG   = 0  // COG interpolation method
      38             :    ,kSTORE = 1  // Store interpolation results
      39             :    ,kWEIGHTS = 2 // use weights
      40             :   };
      41             :   TKDInterpolatorBase(Int_t size = 0);
      42             :   virtual ~TKDInterpolatorBase();
      43             : 
      44             :   Bool_t        Bootstrap();
      45             :   Double_t      Eval(const Double_t *point, Double_t &result, Double_t &error, Bool_t force = kFALSE);
      46             :   virtual Int_t GetNodeIndex(const Float_t *p) = 0;
      47           0 :   Float_t       GetAlpha() const {return fAlpha;}
      48           0 :   Int_t         GetLambda() const {return fLambda;}
      49           0 :   Int_t         GetSize() const {return fNSize;}
      50             :   Bool_t        GetCOGPoint(Int_t node, Float_t *&coord, Float_t &val, Float_t &error) const;
      51             :   TKDNodeInfo*  GetNodeInfo(Int_t inode) const;
      52             :   Int_t         GetNTNodes() const;
      53             :   Bool_t        GetRange(Int_t ax, Float_t &min, Float_t &max) const;
      54             :   void          GetStatus(Option_t *opt="");
      55             : 
      56           0 :   Bool_t        HasStore() const {return TESTBIT(fStatus, kSTORE);}
      57           0 :   Bool_t        UseCOG() const {return TESTBIT(fStatus, kCOG);}
      58         440 :   Bool_t        UseWeights() const {return TESTBIT(fStatus, kWEIGHTS);}
      59             : 
      60             :   void          DrawProjection(UInt_t ax1 = 0, UInt_t ax2 = 1);
      61             :   void          SetAlpha(Float_t a);
      62           0 :   void          SetCOG(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kCOG) : CLRBIT(fStatus, kCOG);}
      63           0 :   void          SetStore(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kSTORE) : CLRBIT(fStatus, kSTORE);}
      64           0 :   void          SetWeights(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kWEIGHTS) : CLRBIT(fStatus, kWEIGHTS);}
      65             : 
      66             : protected:
      67             :   virtual Bool_t    Build(Int_t nnodes);
      68             : 
      69             : 
      70             :   Int_t         fNSize;       //!data dimension
      71             :   TClonesArray  *fNodes;     //interpolation nodes
      72             :   TKDNodeInfo::TKDNodeDraw  *fNodesDraw; //!graphical representation of interpolation nodes
      73             : 
      74             : //private:
      75             :   UChar_t       fStatus;      // status of the interpolator
      76             :   UChar_t       fLambda;      //! number of parameters in polynom
      77             :   Short_t                   fDepth;       //! depth of the KD Tree structure used
      78             :   Float_t       fAlpha;       // parameter controlling the size of the region to interpolate n = (1+alpha)*lambda
      79             :   Float_t       **fRefPoints; //! temporary storage of COG data
      80             :   Double_t          *fBuffer;     //! working space [2*fLambda]
      81             :   TKDTree<Int_t, Float_t> *fKDhelper;      //! kNN finder
      82             :   TLinearFitter *fFitter;     //! linear fitter 
      83             : 
      84             : private:
      85             :   TKDInterpolatorBase(const TKDInterpolatorBase &);
      86             :   TKDInterpolatorBase& operator=(const TKDInterpolatorBase &);
      87             : 
      88         140 :   ClassDef(TKDInterpolatorBase, 3)   // data interpolator based on KD tree
      89             : };
      90             : 
      91             : 
      92             : #endif
      93             : 

Generated by: LCOV version 1.11