]>
Commit | Line | Data |
---|---|---|
a3408ed3 | 1 | #ifndef ROOT_TKDInterpolatorBase |
2 | #define ROOT_TKDInterpolatorBase | |
3 | ||
4 | #ifndef ROOT_Rtypes | |
5 | #include "Rtypes.h" | |
6 | #endif | |
7 | ||
b6f6b31a | 8 | #ifndef ROOT_TKDNodeInfo |
9 | #include "TKDNodeInfo.h" | |
10 | #endif | |
11 | ||
a3408ed3 | 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 struct 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; | |
a3408ed3 | 29 | class TKDInterpolatorBase |
30 | { | |
31 | public: | |
53ee3cad | 32 | enum EKDInterpolatorBase { |
33 | kdN = 4 // increase in the number of PDF if fit failled | |
34 | ,kNhelper = 30 // bucket size in helper kdTree | |
35 | }; | |
b273c7cb | 36 | enum EKDInterpolatorBaseBits { |
37 | kCOG = 0 // COG interpolation method | |
38 | ,kSTORE = 1 // Store interpolation results | |
39 | ,kWEIGHTS = 2 // use weights | |
40 | }; | |
50c4eb3a | 41 | TKDInterpolatorBase(Int_t size = 0); |
42 | virtual ~TKDInterpolatorBase(); | |
a3408ed3 | 43 | |
afb669c1 | 44 | Bool_t Bootstrap(); |
45 | Double_t Eval(const Double_t *point, Double_t &result, Double_t &error, Bool_t force = kFALSE); | |
50c4eb3a | 46 | virtual Int_t GetNodeIndex(const Float_t *p) = 0; |
afb669c1 | 47 | Float_t GetAlpha() const {return fAlpha;} |
48 | Int_t GetLambda() const {return fLambda;} | |
49 | 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=""); | |
a3408ed3 | 55 | |
afb669c1 | 56 | Bool_t HasStore() const {return TESTBIT(fStatus, kSTORE);} |
57 | Bool_t UseCOG() const {return TESTBIT(fStatus, kCOG);} | |
58 | Bool_t UseWeights() const {return TESTBIT(fStatus, kWEIGHTS);} | |
a3408ed3 | 59 | |
afb669c1 | 60 | void DrawProjection(UInt_t ax1 = 0, UInt_t ax2 = 1); |
61 | void SetAlpha(Float_t a); | |
62 | void SetCOG(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kCOG) : CLRBIT(fStatus, kCOG);} | |
63 | void SetStore(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kSTORE) : CLRBIT(fStatus, kSTORE);} | |
64 | void SetWeights(Bool_t on = kTRUE) {on ? SETBIT(fStatus, kWEIGHTS) : CLRBIT(fStatus, kWEIGHTS);} | |
a3408ed3 | 65 | |
66 | protected: | |
afb669c1 | 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 | |
a3408ed3 | 73 | |
74 | //private: | |
50c4eb3a | 75 | UChar_t fStatus; // status of the interpolator |
afb669c1 | 76 | UChar_t fLambda; //! number of parameters in polynom |
50c4eb3a | 77 | Short_t fDepth; //! depth of the KD Tree structure used |
53ee3cad | 78 | Float_t fAlpha; // parameter controlling the size of the region to interpolate n = (1+alpha)*lambda |
50c4eb3a | 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 | |
a3408ed3 | 83 | |
afb669c1 | 84 | private: |
85 | TKDInterpolatorBase(const TKDInterpolatorBase &); | |
86 | TKDInterpolatorBase& operator=(const TKDInterpolatorBase &); | |
87 | ||
88 | ClassDef(TKDInterpolatorBase, 3) // data interpolator based on KD tree | |
a3408ed3 | 89 | }; |
90 | ||
91 | ||
92 | #endif | |
93 |