Tomato
OxFactoryOfFitters.hxx
Go to the documentation of this file.
1 
7 #ifndef Tomato_OXFACTORYOFFitters_HXX
8 #define Tomato_OXFACTORYOFFitters_HXX
9 
10 #ifdef USE_VNL
11 #include "OxFitterAmoebaVnl.h"
13 #endif
14 #ifdef USE_PRIVATE_NR2
15 #include "OxFitterAmoebaPrivateNr2.h"
16 #endif
17 #ifdef USE_LMFIT
19 #endif
20 #ifdef USE_TOMATOFIT
21 #include "OxFitterLevenbergMarquardtTomatoFit.h"
22 #include "OxFitterRobustTomatoFit.h"
23 #endif
24 
25 
26 namespace Ox {
27 
28  template < typename TYPE >
29  Fitter<TYPE>*
30  FactoryOfFitters<TYPE>
31  ::newByFactory(TomatoOptions<TYPE> *opts){
32  Fitter<TYPE> *fitter = 0; //nullpointer
33 
34  switch (opts->fitting_method){
35 #ifdef USE_VNL
36  case AmoebaVnl: {
37  fitter = new FitterAmoebaVnl<TYPE>();
38  break;
39  }
40  case LevMarVnl: {
41  fitter = new FitterLevenbergMarquardtVnl<TYPE>();
42  break;
43  }
44 #endif
45 #ifdef USE_PRIVATE_NR2
46  case AmoebaPrivateNr2: {
47  fitter = new FitterAmoebaPrivateNr2<TYPE>();
48  break;
49  }
50 #endif
51 #ifdef USE_LMFIT
52  case LevMarLmfit: {
53  fitter = new FitterLevenbergMarquardtLmfit<TYPE>();
54  break;
55  }
56 #endif
57 #ifdef USE_TOMATOFIT
58  case LevMarTomatoFit: {
59  fitter = new FitterLevenbergMarquardtTomatoFit<TYPE>();
60  break;
61  }
62  case RobustTomatoFit: {
63  fitter = new FitterRobustTomatoFit<TYPE>();
64  break;
65  }
66 #endif
67  default:
68  throw std::runtime_error("fitting_method not available");
69  }
70 
71  fitter->setMaxFunctionEvals(opts->max_function_evals);
72  fitter->setFTolerance(opts->fTolerance);
73  fitter->setUseGradient(opts->use_gradient);
74 
75  return fitter;
76  }
77 
78  template < typename TYPE >
79  void
80  FactoryOfFitters<TYPE>
81  ::disp(int fitting_method){
82 
83  if (fitting_method >= 0) {
84  printf("%-28s%-22s", " fitting_method: ", fittersTypeNames[fitting_method]);
85  }
86 
87  printf("options: [ ");
88 
89  for (int i = 0; i < lastFitterType+1; i++){
90 
91  if(fittersAvailability[i]){
92  printf("%s ", fittersTypeNames[i]);
93  }
94  }
95 
96  printf("] \n");
97  }
98 
99 } // namespace Ox
100 
101 #endif //Tomato_OXFACTORYOFFitters_HXX
Definition: OxCalculator.h:19