Tomato
OxFitter.h
Go to the documentation of this file.
1 
7 #ifndef Tomato_OXFITTER_H
8 #define Tomato_OXFITTER_H
9 
10 #include "OxModel.h"
11 #include "KWUtil.h"
12 
13 namespace Ox {
14 
21  template< typename MeasureType >
22  class Fitter{
23 
24  public:
25 
30  virtual int performFitting() = 0;
31 
32  virtual const Model<MeasureType>* getModel() const { return _Model; }
33  virtual MeasureType *getParameters() { return _Parameters; }
34  virtual MeasureType getMse() const {
35  return _Model->calcCostValue(_Parameters) / _Model->getNSamples();
36  }
37  virtual const MeasureType getXTolerance() const { return _XTolerance; }
38  virtual const MeasureType getFTolerance() const { return _FTolerance; }
39  virtual const bool getUseGradient() const { return _UseGradient; }
40  virtual const unsigned int getMaxFunctionEvals() const { return _MaxFunctionEvals; }
41  virtual const unsigned int getThreadId() const { return _ThreadId; }
42  virtual const bool getVerbose() const { return _Verbose; }
43  virtual const bool getTrace() const { return _Trace; }
44 
45  virtual void setModel(Model<MeasureType>* _ModelT1) { Fitter::_Model = _ModelT1; }
46  virtual void setParameters( MeasureType *_Parameters) { Fitter::_Parameters = _Parameters; }
47  virtual void setMse(MeasureType mse) { _Mse = mse; }
48  virtual void setXTolerance(const MeasureType _XTolerance) { Fitter::_XTolerance = _XTolerance; }
49  virtual void setUseGradient(const bool _UseGradient) { Fitter::_UseGradient = _UseGradient; }
50  virtual void setFTolerance(const MeasureType _FTolerance) { Fitter::_FTolerance = _FTolerance; }
51  virtual void setMaxFunctionEvals(const unsigned int _MaxFunctionEvals) { Fitter::_MaxFunctionEvals = _MaxFunctionEvals; }
52  virtual void setThreadId(const unsigned int _ThreadId) { Fitter::_ThreadId = _ThreadId; }
53  virtual void setVerbose(const bool _Verbose) { Fitter::_Verbose = _Verbose; }
54  virtual void setTrace(const bool _Trace) { Fitter::_Trace = _Trace; }
55 
60  virtual void copyToParameters(const MeasureType *ptrFrom){
61  if (!Fitter::_Model) {
62  throw std::runtime_error("_Model equals 0. Set _Model");
63  }
64 
65  if (!_Parameters){
66  throw std::runtime_error("_Parameters equals 0. Set _Parameters");
67  }
68 
69  for (int i = 0; i < Fitter::_Model->getNDims(); ++i) {
70  _Parameters[i] = ptrFrom[i];
71  }
72  }
73 
77  virtual void disp(){
78  std::cout << "\nYou called disp() on a Fitter object " << this << "\n";
79  std::cout << "XTolerance: " << getXTolerance() << std::endl;
80  std::cout << "FTolerance: " << getFTolerance() << std::endl;
81  std::string temp = getUseGradient() ? "true" : "false";
82  std::cout << "UseGradient " << temp << std::endl;
83  std::cout << "MaxFunctionEvals: " << getMaxFunctionEvals() << std::endl;
84  std::cout << "ThreadId: " << getThreadId() << std::endl;
85  if(_Model) {
86  KWUtil::printArray(_Parameters != 0, _Model->getNDims(), _Parameters, (char*)"\nParameters: ");
87  std::cout << "This Fitter contains the following Model object: ";
88  _Model->disp();
89  };
90  }
91 
95  Fitter(){
96  _Model = 0; //nullpointer
97  _Parameters = 0; //nullpointer
98  _Mse = 0;
99 
100  _XTolerance = 1e-12;
101  _FTolerance = 1e-12;
102  _MaxFunctionEvals = 4000;
103  _UseGradient = false;
104  _ThreadId = 0;
105  _Verbose = false;
106  _Trace = false;
107  }
108 
113  Fitter(const Fitter &old) {
114  _Model = 0; //nullpointer
115  _Parameters = 0; //nullpointer
116  _Mse = 0;
117 
118  _XTolerance = old._XTolerance;
119  _FTolerance = old._FTolerance;
120  _MaxFunctionEvals = old._MaxFunctionEvals;
121  _UseGradient = old._UseGradient;
122  _ThreadId = old._ThreadId;
123  _Verbose = old._Verbose;
124  _Trace = old._Trace;
125  }
126 
131  virtual Fitter<MeasureType> *newByCloning() = 0;
132 
137  virtual ~Fitter(){};
138 
139  protected:
140  Model<MeasureType>* _Model;
141  MeasureType* _Parameters;
142  MeasureType _Mse;
143 
144  MeasureType _XTolerance;
145  MeasureType _FTolerance;
146  int _MaxFunctionEvals;
147  bool _UseGradient;
148  unsigned int _ThreadId;
149  bool _Verbose;
150  bool _Trace;
151 
152  };
153 } //namespace Ox
154 
155 #endif //Tomato_OXFITTER_H
virtual ~Fitter()
do not forget about the virtual destructor, see https://stackoverflow.com/questions/461203/when-to-us...
Definition: OxFitter.h:137
Container for a model function, cost function and Least-Squares function. And derivatives.
Definition: OxModel.h:26
Fitter()
constructor
Definition: OxFitter.h:95
virtual int performFitting()=0
virtual void copyToParameters(const MeasureType *ptrFrom)
Definition: OxFitter.h:60
Fitter(const Fitter &old)
Definition: OxFitter.h:113
virtual void disp()
show me your Fitter
Definition: OxFitter.h:77
virtual Fitter< MeasureType > * newByCloning()=0
Definition: OxFitter.h:22
Definition: OxCalculator.h:19