]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STAT/TKDInterpolatorBase.h
try to fix coverity 24179, 24178, 24125, 24124, check cast to pointers not being...
[u/mrichter/AliRoot.git] / STAT / TKDInterpolatorBase.h
CommitLineData
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
21template <typename Value> class TVectorT;
64b1a76e 22typedef class TVectorT<Double_t> TVectorD;
a3408ed3 23template <typename Value> class TMatrixT;
24typedef class TMatrixT<Double_t> TMatrixD;
25template <typename Index, typename Value> class TKDTree;
26typedef class TKDTree<Int_t, Float_t> TKDTreeIF;
27class TLinearFitter;
28class TClonesArray;
a3408ed3 29class TKDInterpolatorBase
30{
31public:
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
66protected:
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 84private:
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