Tomato
OxFitterAmoebaVnl.hxx
1 
7 #ifndef Tomato_OXFITTERAMOEBAVNL_HXX
8 #define Tomato_OXFITTERAMOEBAVNL_HXX
9 
10 #include "CmakeConfigForTomato.h"
11 #ifdef USE_VNL
12 
14 #include <vnl/algo/vnl_amoeba.h>
15 
16 namespace Ox {
17 
18  template<typename MeasureType>
19  int
20  FitterAmoebaVnl<MeasureType>
21  ::performFitting(){
22 
23  configureMinimizer();
24 
25  vnl_vector<MeasureType> temp(this->getParameters(), this->_Model->getNDims());
26 
27  _VnlFitter->minimize(temp);
28 
29  if (temp.size() != 0) {
30  temp.copy_out(this->getParameters());
31  }
32  if (this->getVerbose()) {
33  std::cout << "Results: " << temp << " Cost: " << this->_Model->calcCostValue(this->getParameters()) << std::endl;
34  }
35 
36  return 0; //EXIT_SUCCESS;
37  }
38 
39  template<typename MeasureType>
40  ModelT1AdapterVnlCost*
41  FitterAmoebaVnl<MeasureType>
42  ::getModelAdaptedToVnl() const {
43  return _FunctionsAdaptedToVnl;
44  }
45 
46  template<typename MeasureType>
47  void
48  FitterAmoebaVnl<MeasureType>
49  ::disp(){
50  std::cout << "\nYou called disp() on a FitterAmoebaVnl object " << this << "\n";
51  std::cout << "It has VnlFitter " << _VnlFitter << std::endl;
52  std::cout << "It has FunctionsAdaptedToVnl " << _FunctionsAdaptedToVnl << std::endl;
53  std::cout << "It's base class is as follows: ";
54 
56  }
57 
58  template<typename MeasureType>
59  FitterAmoebaVnl<MeasureType>
60  ::FitterAmoebaVnl() {
61  // I cannot initialise _FunctionsAdaptedToVnl here, as I do not know nDims yet
62  _FunctionsAdaptedToVnl = 0;
63  _VnlFitter = 0;
64  }
65 
66  template<typename MeasureType>
67  FitterAmoebaVnl<MeasureType>
68  ::~FitterAmoebaVnl() {
69  delete _FunctionsAdaptedToVnl; _FunctionsAdaptedToVnl = 0;
70  delete _VnlFitter; _VnlFitter = 0;
71  }
72 
73  template<typename MeasureType>
74  void
75  FitterAmoebaVnl<MeasureType>
76  ::configureMinimizer() {
77  if (!_VnlFitter) {
78  if (!this->_Model) {
79  throw std::runtime_error("Set the Model object");
80  } else {
81  delete _FunctionsAdaptedToVnl; _FunctionsAdaptedToVnl = 0;
82  delete _VnlFitter; _VnlFitter = 0;
83  int nDims = this->_Model->getNDims();
84  _FunctionsAdaptedToVnl = new ModelT1AdapterVnlCost(nDims);
85  _FunctionsAdaptedToVnl->setModel(this->_Model);
86  _VnlFitter = new vnl_amoeba(*_FunctionsAdaptedToVnl);
87  }
88  _FunctionsAdaptedToVnl->setModel(this->_Model);
89  _VnlFitter->set_x_tolerance(this->getXTolerance());
90  _VnlFitter->set_f_tolerance(this->getFTolerance());
91  //m_LocalFitter->set_g_tolerance(this->GetGTolerance());
92  _VnlFitter->set_max_iterations(this->getMaxFunctionEvals());
93  }
94  }
95 
96 } // namespace Ox
97 
98 #endif //USE_VNL
99 
100 #endif //Tomato_OXFITTERAMOEBAVNL_H
virtual void disp()
show me your Fitter
Definition: OxFitter.h:77
Definition: OxCalculator.h:19