BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
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 class Parameters;
31 class Parameter;
32 class ObjectiveFunctionAdapter;
33 class MinimizerResult;
34 } // namespace mumufit
35 
36 namespace ROOT::Math {
37 class Minimizer;
38 }
39 
40 //! Abstract base class that adapts the CERN ROOT minimizer to our IMinimizer.
41 //! @ingroup fitting_internal
42 
43 class MinimizerAdapter : public IMinimizer {
44 public:
45  typedef ROOT::Math::Minimizer root_minimizer_t;
46 
47  virtual ~MinimizerAdapter() override;
48 
50  mumufit::Parameters parameters) override;
52  mumufit::Parameters parameters) override;
53 
54  //! Returns name of the minimizer.
55  std::string minimizerName() const final;
56 
57  //! Returns name of the minimization algorithm.
58  std::string algorithmName() const final;
59 
60  void setParameters(const mumufit::Parameters& parameters);
61 
62  double minValue() const final;
63 
65  const MinimizerOptions& options() const { return m_options; }
66 
67  //! Returns string representation of current minimizer status.
68  virtual std::string statusToString() const;
69 
70  //! Returns true if minimizer provides error and error matrix
71  bool providesError() const;
72 
73  //! Returns map of string representing different minimizer statuses
74  virtual std::map<std::string, std::string> statusMap() const;
75 
76  //! Sets option string to the minimizer
77  void setOptions(const std::string& optionString) final;
78 
79 protected:
80  MinimizerAdapter(const MinimizerInfo& minimizerInfo);
81 
83 
84  void propagateResults(mumufit::Parameters& parameters);
85 
86  virtual void setParameter(unsigned int index, const mumufit::Parameter& par);
87  size_t fitDimension() const;
88  std::vector<double> parValuesAtMinimum() const;
89  std::vector<double> parErrorsAtMinimum() const;
90 
91  virtual void propagateOptions() = 0;
92  virtual const root_minimizer_t* rootMinimizer() const = 0;
94 
95  template <class T>
96  OptionContainer::option_t addOption(const std::string& optionName, T value,
97  const std::string& description = "");
98 
99  template <class T> void setOptionValue(const std::string& optionName, T value);
100 
101  template <class T> T optionValue(const std::string& optionName) const;
102 
103 private:
106  std::unique_ptr<mumufit::ObjectiveFunctionAdapter> m_adapter;
107  bool m_status;
108 };
109 
110 template <class T>
111 OptionContainer::option_t MinimizerAdapter::addOption(const std::string& optionName, T value,
112  const std::string& description)
113 {
114  return m_options.addOption(optionName, value, description);
115 }
116 
117 template <class T> void MinimizerAdapter::setOptionValue(const std::string& optionName, T value)
118 {
119  m_options.setOptionValue(optionName, value);
120 }
121 
122 template <class T> T MinimizerAdapter::optionValue(const std::string& optionName) const
123 {
124  return m_options.optionValue<T>(optionName);
125 }
126 
127 #endif // BORNAGAIN_FIT_ADAPTER_MINIMIZERADAPTER_H
128 #endif // USER_API
Defines interface IMinimizer.
Declares class MinimizerInfo.
Declares class MinimizerOptions.
std::function< double(const mumufit::Parameters &)> fcn_scalar_t
Definition: Types.h:39
std::function< std::vector< double >(const mumufit::Parameters &)> fcn_residual_t
Definition: Types.h:40
Abstract base class for all kind minimizers.
Definition: IMinimizer.h:30
Abstract base class that adapts the CERN ROOT minimizer to our IMinimizer.
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.
std::string minimizerName() const final
Returns name of the minimizer.
double minValue() const final
Returns minimum function value.
virtual void setParameter(unsigned int index, const mumufit::Parameter &par)
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
ROOT::Math::Minimizer root_minimizer_t
void setParameters(const mumufit::Parameters &parameters)
void setOptions(const std::string &optionString) final
Sets option string to the minimizer.
T optionValue(const std::string &optionName) const
virtual std::string statusToString() const
Returns string representation of current minimizer status.
virtual ~MinimizerAdapter() override
MinimizerInfo m_minimizerInfo
virtual void propagateOptions()=0
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
run minimization
std::string algorithmName() const final
Returns name of the minimization algorithm.
std::unique_ptr< mumufit::ObjectiveFunctionAdapter > m_adapter
MinimizerOptions & options()
mumufit::MinimizerResult minimize_residual(fcn_residual_t fcn, mumufit::Parameters parameters) override
bool providesError() const
Returns true if minimizer provides error and error matrix.
MinimizerAdapter(const MinimizerInfo &minimizerInfo)
size_t fitDimension() const
Returns number of fit parameters defined (i.e. dimension of the function to be minimized).
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:48
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.
Definition: filesystem.h:81