BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
MinimizerAdapter.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Fit/Adapter/MinimizerAdapter.h
6 //! @brief Declares class MinimizerAdapter.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #ifdef SWIG
16 #error no need to expose this header to Swig
17 #endif
18 
19 #ifndef USER_API
20 #ifndef BORNAGAIN_FIT_ADAPTER_MINIMIZERADAPTER_H
21 #define BORNAGAIN_FIT_ADAPTER_MINIMIZERADAPTER_H
22 
26 #include <memory>
27 #include <string>
28 
29 namespace mumufit {
30 
31 class Parameters;
32 class Parameter;
33 class ObjectiveFunctionAdapter;
34 class MinimizerResult;
35 
36 } // namespace mumufit
37 
38 namespace ROOT::Math {
39 
40 class Minimizer;
41 }
42 
43 //! Abstract base class that adapts the CERN ROOT minimizer to our IMinimizer.
44 
45 class MinimizerAdapter : public IMinimizer {
46 public:
48 
49  ~MinimizerAdapter() override;
50 
52  mumufit::Parameters parameters) override;
54  mumufit::Parameters parameters) override;
55 
56  //! Returns name of the minimizer.
57  std::string minimizerName() const override;
58 
59  //! Returns name of the minimization algorithm.
60  std::string algorithmName() const override;
61 
62  void setParameters(const mumufit::Parameters& parameters);
63 
64  double minValue() const override;
65 
67  const MinimizerOptions& options() const { return m_options; }
68 
69  //! Returns string representation of current minimizer status.
70  virtual std::string statusToString() const;
71 
72  //! Returns true if minimizer provides error and error matrix
73  bool providesError() const;
74 
75  //! Returns map of string representing different minimizer statuses
76  virtual std::map<std::string, std::string> statusMap() const;
77 
78  //! Sets option string to the minimizer
79  void setOptions(const std::string& optionString) override;
80 
81 protected:
82  explicit MinimizerAdapter(MinimizerInfo minimizerInfo);
83 
85 
86  void propagateResults(mumufit::Parameters& parameters);
87 
88  virtual void setParameter(unsigned int index, const mumufit::Parameter& par);
89  size_t fitRank() const;
90  std::vector<double> parValuesAtMinimum() const;
91  std::vector<double> parErrorsAtMinimum() const;
92 
93  virtual void propagateOptions() = 0;
94  virtual const root_minimizer_t* rootMinimizer() const = 0;
96 
97  template <class T>
98  OptionContainer::option_t addOption(const std::string& optionName, T value,
99  const std::string& description = "");
100 
101  template <class T>
102  void setOptionValue(const std::string& optionName, T value);
103 
104  template <class T>
105  T optionValue(const std::string& optionName) const;
106 
107 private:
110  std::unique_ptr<mumufit::ObjectiveFunctionAdapter> m_adapter;
111  bool m_status;
112 };
113 
114 template <class T>
115 OptionContainer::option_t MinimizerAdapter::addOption(const std::string& optionName, T value,
116  const std::string& description)
117 {
118  return m_options.addOption(optionName, value, description);
119 }
120 
121 template <class T>
122 void MinimizerAdapter::setOptionValue(const std::string& optionName, T value)
123 {
124  m_options.setOptionValue(optionName, value);
125 }
126 
127 template <class T>
128 T MinimizerAdapter::optionValue(const std::string& optionName) const
129 {
130  return m_options.optionValue<T>(optionName);
131 }
132 
133 #endif // BORNAGAIN_FIT_ADAPTER_MINIMIZERADAPTER_H
134 #endif // USER_API
Defines interface IMinimizer.
Declares class MinimizerInfo.
Declares class MinimizerOptions.
std::function< double(const mumufit::Parameters &)> fcn_scalar_t
Definition: Types.h:40
std::function< std::vector< double >(const mumufit::Parameters &)> fcn_residual_t
Definition: Types.h:41
Abstract base class for all kind minimizers.
Definition: IMinimizer.h:30
Abstract base class that adapts the CERN ROOT minimizer to our IMinimizer.
std::string algorithmName() const override
Returns name of the minimization algorithm.
mumufit::MinimizerResult minimize(mumufit::Parameters parameters)
virtual const root_minimizer_t * rootMinimizer() const =0
virtual std::map< std::string, std::string > statusMap() const
Returns map of string representing different minimizer statuses.
virtual void setParameter(unsigned int index, const mumufit::Parameter &par)
MinimizerAdapter(MinimizerInfo minimizerInfo)
OptionContainer::option_t addOption(const std::string &optionName, T value, const std::string &description="")
void propagateResults(mumufit::Parameters &parameters)
Propagates results of minimization to fit parameter set.
MinimizerOptions m_options
double minValue() const override
Returns minimum function value.
void setParameters(const mumufit::Parameters &parameters)
T optionValue(const std::string &optionName) const
size_t fitRank() const
Returns number of fit parameters defined (i.e. dimension of the function to be minimized).
virtual std::string statusToString() const
Returns string representation of current minimizer status.
~MinimizerAdapter() override
MinimizerInfo m_minimizerInfo
virtual void propagateOptions()=0
void setOptions(const std::string &optionString) override
Sets option string to the minimizer.
void setOptionValue(const std::string &optionName, T value)
const MinimizerOptions & options() const
std::vector< double > parValuesAtMinimum() const
Returns value of the variables at minimum.
mumufit::MinimizerResult minimize_scalar(fcn_scalar_t fcn, mumufit::Parameters parameters) override
Runs minimization.
std::unique_ptr< mumufit::ObjectiveFunctionAdapter > m_adapter
std::string minimizerName() const override
Returns name of the minimizer.
MinimizerOptions & options()
mumufit::MinimizerResult minimize_residual(fcn_residual_t fcn, mumufit::Parameters parameters) override
Runs minimization.
bool providesError() const
Returns true if minimizer provides error and error matrix.
std::vector< double > parErrorsAtMinimum() const
Returns errors of the variables at minimum.
Info about a minimizer, including list of defined minimization algorithms.
Definition: MinimizerInfo.h:43
Collection of internal minimizer settings.
void setOptionValue(const std::string &optionName, T value)
Sets the value of option. Option should hold same value type already.
T optionValue(const std::string &optionName) const
std::shared_ptr< MultiOption > option_t
option_t addOption(const std::string &optionName, T value, const std::string &description="")
Result of minimization round.
A fittable parameter with value, error, step, and limits.
Definition: Parameter.h:26
A collection of fit parameters.
Definition: Parameters.h:26
The multi-library, multi-algorithm fit wrapper library.