BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
RootMinimizerAdapter.h
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Fit/RootAdapter/RootMinimizerAdapter.h
6 //! @brief Declares class RootMinimizerAdapter.
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 #ifndef BORNAGAIN_FIT_ROOTADAPTER_ROOTMINIMIZERADAPTER_H
16 #define BORNAGAIN_FIT_ROOTADAPTER_ROOTMINIMIZERADAPTER_H
17 
21 #include <memory>
22 #include <string>
23 
24 namespace Fit
25 {
26 class Parameters;
27 class Parameter;
28 class ObjectiveFunctionAdapter;
29 class MinimizerResult;
30 } // namespace Fit
31 
32 namespace ROOT
33 {
34 namespace Math
35 {
36 class Minimizer;
37 }
38 } // namespace ROOT
39 
40 //! Pure virtual interface that adapts the CERN ROOT minimizer to our IMinimizer.
41 //! @ingroup fitting_internal
42 
44 {
45 public:
46  typedef ROOT::Math::Minimizer root_minimizer_t;
47 
48  virtual ~RootMinimizerAdapter() override;
49 
52 
53  //! Returns name of the minimizer.
54  std::string minimizerName() const override final;
55 
56  //! Returns name of the minimization algorithm.
57  std::string algorithmName() const override final;
58 
59  void setParameters(const Fit::Parameters& parameters);
60 
61  double minValue() const override final;
62 
64  const MinimizerOptions& options() const { return m_options; }
65 
66  //! Returns string representation of current minimizer status.
67  virtual std::string statusToString() const;
68 
69  //! Returns true if minimizer provides error and error matrix
70  bool providesError() const;
71 
72  //! Returns map of string representing different minimizer statuses
73  virtual std::map<std::string, std::string> statusMap() const;
74 
75  //! Sets option string to the minimizer
76  void setOptions(const std::string& optionString) override final;
77 
78 protected:
79  RootMinimizerAdapter(const MinimizerInfo& minimizerInfo);
80 
82 
83  void propagateResults(Fit::Parameters& parameters);
84 
85  virtual void setParameter(unsigned int index, const Fit::Parameter& par);
86  size_t fitDimension() const;
87  std::vector<double> parValuesAtMinimum() const;
88  std::vector<double> parErrorsAtMinimum() const;
89 
90  virtual void propagateOptions() = 0;
91  virtual const root_minimizer_t* rootMinimizer() const = 0;
93 
94  template <class T>
95  OptionContainer::option_t addOption(const std::string& optionName, T value,
96  const std::string& description = "");
97 
98  template <class T> void setOptionValue(const std::string& optionName, T value);
99 
100  template <class T> T optionValue(const std::string& optionName) const;
101 
102 private:
105  std::unique_ptr<Fit::ObjectiveFunctionAdapter> m_adapter;
106  bool m_status;
107 };
108 
109 template <class T>
110 OptionContainer::option_t RootMinimizerAdapter::addOption(const std::string& optionName, T value,
111  const std::string& description)
112 {
113  return m_options.addOption(optionName, value, description);
114 }
115 
116 template <class T> void RootMinimizerAdapter::setOptionValue(const std::string& optionName, T value)
117 {
118  m_options.setOptionValue(optionName, value);
119 }
120 
121 template <class T> T RootMinimizerAdapter::optionValue(const std::string& optionName) const
122 {
123  return m_options.optionValue<T>(optionName);
124 }
125 
126 #endif // BORNAGAIN_FIT_ROOTADAPTER_ROOTMINIMIZERADAPTER_H
Defines class IMinimizer.
std::function< std::vector< double >(const Fit::Parameters &)> fcn_residual_t
Definition: KernelTypes.h:38
std::function< double(const Fit::Parameters &)> fcn_scalar_t
Definition: KernelTypes.h:37
Declares class MinimizerInfo.
Declares class MinimizerOptions.
Result of minimization round.
A fittable parameter with value, error, step, and limits.
Definition: Parameter.h:28
A collection of fit parameters.
Definition: Parameters.h:28
Pure virtual interface for all kind minimizers.
Definition: IMinimizer.h:31
Info about a minimizer, including list of defined minimization algorithms.
Definition: MinimizerInfo.h:45
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="")
Pure virtual interface that adapts the CERN ROOT minimizer to our IMinimizer.
Fit::MinimizerResult minimize_scalar(fcn_scalar_t fcn, Fit::Parameters parameters) override
run minimization
RootMinimizerAdapter(const MinimizerInfo &minimizerInfo)
OptionContainer::option_t addOption(const std::string &optionName, T value, const std::string &description="")
void setOptionValue(const std::string &optionName, T value)
ROOT::Math::Minimizer root_minimizer_t
size_t fitDimension() const
Returns number of fit parameters defined (i.e. dimension of the function to be minimized).
const MinimizerOptions & options() const
std::unique_ptr< Fit::ObjectiveFunctionAdapter > m_adapter
std::string minimizerName() const override final
Returns name of the minimizer.
virtual std::string statusToString() const
Returns string representation of current minimizer status.
Fit::MinimizerResult minimize_residual(fcn_residual_t fcn, Fit::Parameters parameters) override
virtual void setParameter(unsigned int index, const Fit::Parameter &par)
std::string algorithmName() const override final
Returns name of the minimization algorithm.
Fit::MinimizerResult minimize(Fit::Parameters parameters)
MinimizerOptions m_options
double minValue() const override final
Returns minimum function value.
MinimizerOptions & options()
virtual ~RootMinimizerAdapter() override
void propagateResults(Fit::Parameters &parameters)
Propagates results of minimization to fit parameter set.
virtual std::map< std::string, std::string > statusMap() const
Returns map of string representing different minimizer statuses.
virtual void propagateOptions()=0
std::vector< double > parErrorsAtMinimum() const
Returns errors of the variables at minimum.
void setOptions(const std::string &optionString) override final
Sets option string to the minimizer.
std::vector< double > parValuesAtMinimum() const
Returns value of the variables at minimum.
T optionValue(const std::string &optionName) const
void setParameters(const Fit::Parameters &parameters)
bool providesError() const
Returns true if minimizer provides error and error matrix.
virtual const root_minimizer_t * rootMinimizer() const =0
Objective function types.