BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MinimizerAdapter Class Referenceabstract

Abstract base class that adapts the CERN ROOT minimizer to our IMinimizer. More...

Inheritance diagram for MinimizerAdapter:
[legend]
Collaboration diagram for MinimizerAdapter:
[legend]

Public Types

typedef ROOT::Math::Minimizer root_minimizer_t
 

Public Member Functions

virtual ~MinimizerAdapter () override
 
std::string algorithmName () const final
 Returns name of the minimization algorithm. More...
 
virtual void clear ()
 clear resources (parameters) for consecutives minimizations More...
 
mumufit::MinimizerResult minimize_residual (fcn_residual_t fcn, mumufit::Parameters parameters) override
 
mumufit::MinimizerResult minimize_scalar (fcn_scalar_t fcn, mumufit::Parameters parameters) override
 run minimization More...
 
std::string minimizerName () const final
 Returns name of the minimizer. More...
 
double minValue () const final
 Returns minimum function value. More...
 
MinimizerOptionsoptions ()
 
const MinimizerOptionsoptions () const
 
bool providesError () const
 Returns true if minimizer provides error and error matrix. More...
 
virtual bool requiresResiduals ()
 Returns true if minimizer computations are residual-based, false otherwise. More...
 
void setOptions (const std::string &optionString) final
 Sets option string to the minimizer. More...
 
void setParameters (const mumufit::Parameters &parameters)
 
virtual std::map< std::string, std::string > statusMap () const
 Returns map of string representing different minimizer statuses. More...
 
virtual std::string statusToString () const
 Returns string representation of current minimizer status. More...
 

Protected Member Functions

 MinimizerAdapter (const MinimizerInfo &minimizerInfo)
 
template<class T >
OptionContainer::option_t addOption (const std::string &optionName, T value, const std::string &description="")
 
size_t fitDimension () const
 Returns number of fit parameters defined (i.e. dimension of the function to be minimized). More...
 
mumufit::MinimizerResult minimize (mumufit::Parameters parameters)
 
template<class T >
optionValue (const std::string &optionName) const
 
std::vector< double > parErrorsAtMinimum () const
 Returns errors of the variables at minimum. More...
 
std::vector< double > parValuesAtMinimum () const
 Returns value of the variables at minimum. More...
 
virtual void propagateOptions ()=0
 
void propagateResults (mumufit::Parameters &parameters)
 Propagates results of minimization to fit parameter set. More...
 
root_minimizer_trootMinimizer ()
 
virtual const root_minimizer_trootMinimizer () const =0
 
template<class T >
void setOptionValue (const std::string &optionName, T value)
 
virtual void setParameter (unsigned int index, const mumufit::Parameter &par)
 

Private Attributes

std::unique_ptr< mumufit::ObjectiveFunctionAdapterm_adapter
 
MinimizerInfo m_minimizerInfo
 
MinimizerOptions m_options
 
bool m_status
 

Detailed Description

Abstract base class that adapts the CERN ROOT minimizer to our IMinimizer.

Definition at line 43 of file MinimizerAdapter.h.

Member Typedef Documentation

◆ root_minimizer_t

typedef ROOT::Math::Minimizer MinimizerAdapter::root_minimizer_t

Definition at line 45 of file MinimizerAdapter.h.

Constructor & Destructor Documentation

◆ ~MinimizerAdapter()

MinimizerAdapter::~MinimizerAdapter ( )
overridevirtualdefault

◆ MinimizerAdapter()

MinimizerAdapter::MinimizerAdapter ( const MinimizerInfo minimizerInfo)
protected

Definition at line 25 of file MinimizerAdapter.cpp.

26  : m_minimizerInfo(minimizerInfo)
28  , m_status(false)
29 {
30 }
MinimizerInfo m_minimizerInfo
std::unique_ptr< mumufit::ObjectiveFunctionAdapter > m_adapter
Converts user objective function to function ROOT expects.

Member Function Documentation

◆ addOption()

template<class T >
OptionContainer::option_t MinimizerAdapter::addOption ( const std::string &  optionName,
value,
const std::string &  description = "" 
)
protected

Definition at line 111 of file MinimizerAdapter.h.

113 {
114  return m_options.addOption(optionName, value, description);
115 }
MinimizerOptions m_options
option_t addOption(const std::string &optionName, T value, const std::string &description="")

References OptionContainer::addOption(), and m_options.

Referenced by GeneticMinimizer::GeneticMinimizer(), GSLLevenbergMarquardtMinimizer::GSLLevenbergMarquardtMinimizer(), GSLMultiMinimizer::GSLMultiMinimizer(), Minuit2Minimizer::Minuit2Minimizer(), and SimAnMinimizer::SimAnMinimizer().

Here is the call graph for this function:

◆ algorithmName()

std::string MinimizerAdapter::algorithmName ( ) const
finalvirtual

Returns name of the minimization algorithm.

Implements IMinimizer.

Definition at line 71 of file MinimizerAdapter.cpp.

72 {
74 }
std::string algorithmName() const
Definition: MinimizerInfo.h:62

References MinimizerInfo::algorithmName(), and m_minimizerInfo.

Referenced by Minuit2Minimizer::requiresResiduals().

Here is the call graph for this function:

◆ clear()

virtual void IMinimizer::clear ( )
inlinevirtualinherited

clear resources (parameters) for consecutives minimizations

Definition at line 49 of file IMinimizer.h.

49 {}

◆ fitDimension()

size_t MinimizerAdapter::fitDimension ( ) const
protected

Returns number of fit parameters defined (i.e. dimension of the function to be minimized).

Definition at line 181 of file MinimizerAdapter.cpp.

182 {
183  return rootMinimizer()->NDim();
184 }
virtual const root_minimizer_t * rootMinimizer() const =0

References rootMinimizer().

Referenced by parErrorsAtMinimum(), parValuesAtMinimum(), and propagateResults().

Here is the call graph for this function:

◆ minimize()

MinimizerResult MinimizerAdapter::minimize ( mumufit::Parameters  parameters)
protected

Definition at line 48 of file MinimizerAdapter.cpp.

49 {
50  setParameters(parameters);
52 
53  m_status = rootMinimizer()->Minimize();
54  propagateResults(parameters);
55 
56  MinimizerResult result;
57  result.setParameters(parameters);
58  result.setMinValue(minValue());
59  result.setReport(internal::reportToString(*this));
60  result.setNumberOfCalls(m_adapter->numberOfCalls());
61  result.setNumberOfGradientCalls(m_adapter->numberOfGradientCalls());
62 
63  return result;
64 }
double minValue() const final
Returns minimum function value.
void propagateResults(mumufit::Parameters &parameters)
Propagates results of minimization to fit parameter set.
void setParameters(const mumufit::Parameters &parameters)
virtual void propagateOptions()=0
Result of minimization round.
void setReport(const std::string &value)
void setMinValue(double value)
void setNumberOfGradientCalls(int value)
void setNumberOfCalls(int value)
void setParameters(const Parameters &parameters)
std::string reportToString(const MinimizerAdapter &minimizer)
Reports results of minimization in the form of multi-line string.
Definition: Report.cpp:76

References m_adapter, m_status, minValue(), propagateOptions(), propagateResults(), mumufit::internal::reportToString(), rootMinimizer(), mumufit::MinimizerResult::setMinValue(), mumufit::MinimizerResult::setNumberOfCalls(), mumufit::MinimizerResult::setNumberOfGradientCalls(), setParameters(), mumufit::MinimizerResult::setParameters(), and mumufit::MinimizerResult::setReport().

Referenced by minimize_residual(), and minimize_scalar().

Here is the call graph for this function:

◆ minimize_residual()

MinimizerResult MinimizerAdapter::minimize_residual ( fcn_residual_t  fcn,
mumufit::Parameters  parameters 
)
overridevirtual

Reimplemented from IMinimizer.

Definition at line 41 of file MinimizerAdapter.cpp.

42 {
43  // Genetic minimizer requires SetFunction before setParameters, others don't care
44  rootMinimizer()->SetFunction(*m_adapter->rootResidualFunction(fcn, parameters));
45  return minimize(parameters);
46 }
mumufit::MinimizerResult minimize(mumufit::Parameters parameters)

References m_adapter, minimize(), and rootMinimizer().

Here is the call graph for this function:

◆ minimize_scalar()

MinimizerResult MinimizerAdapter::minimize_scalar ( fcn_scalar_t  ,
mumufit::Parameters   
)
overridevirtual

run minimization

Reimplemented from IMinimizer.

Definition at line 34 of file MinimizerAdapter.cpp.

35 {
36  // Genetic minimizer requires SetFunction before setParameters, others don't care
37  rootMinimizer()->SetFunction(*m_adapter->rootObjectiveFunction(fcn, parameters));
38  return minimize(parameters);
39 }

References m_adapter, minimize(), and rootMinimizer().

Here is the call graph for this function:

◆ minimizerName()

std::string MinimizerAdapter::minimizerName ( ) const
finalvirtual

Returns name of the minimizer.

Implements IMinimizer.

Definition at line 66 of file MinimizerAdapter.cpp.

67 {
68  return m_minimizerInfo.name();
69 }
std::string name() const
Definition: MinimizerInfo.h:59

References m_minimizerInfo, and MinimizerInfo::name().

Here is the call graph for this function:

◆ minValue()

double MinimizerAdapter::minValue ( ) const
finalvirtual

Returns minimum function value.

Reimplemented from IMinimizer.

Definition at line 83 of file MinimizerAdapter.cpp.

84 {
85  return rootMinimizer()->MinValue();
86 }

References rootMinimizer().

Referenced by minimize(), and statusMap().

Here is the call graph for this function:

◆ options() [1/2]

MinimizerOptions& MinimizerAdapter::options ( )
inline

Definition at line 64 of file MinimizerAdapter.h.

64 { return m_options; }

References m_options.

Referenced by setOptions().

◆ options() [2/2]

const MinimizerOptions& MinimizerAdapter::options ( ) const
inline

Definition at line 65 of file MinimizerAdapter.h.

65 { return m_options; }

References m_options.

◆ optionValue()

template<class T >
T MinimizerAdapter::optionValue ( const std::string &  optionName) const
protected

Definition at line 122 of file MinimizerAdapter.h.

123 {
124  return m_options.optionValue<T>(optionName);
125 }
T optionValue(const std::string &optionName) const

References m_options, and OptionContainer::optionValue().

Here is the call graph for this function:

◆ parErrorsAtMinimum()

std::vector< double > MinimizerAdapter::parErrorsAtMinimum ( ) const
protected

Returns errors of the variables at minimum.

Definition at line 198 of file MinimizerAdapter.cpp.

199 {
200  std::vector<double> result;
201  result.resize(fitDimension(), 0.0);
202  if (rootMinimizer()->Errors() != 0) {
203  std::copy(rootMinimizer()->Errors(), rootMinimizer()->Errors() + fitDimension(),
204  result.begin());
205  }
206  return result;
207 }
size_t fitDimension() const
Returns number of fit parameters defined (i.e. dimension of the function to be minimized).

References fitDimension(), and rootMinimizer().

Referenced by propagateResults().

Here is the call graph for this function:

◆ parValuesAtMinimum()

std::vector< double > MinimizerAdapter::parValuesAtMinimum ( ) const
protected

Returns value of the variables at minimum.

Definition at line 188 of file MinimizerAdapter.cpp.

189 {
190  std::vector<double> result;
191  result.resize(fitDimension(), 0.0);
192  std::copy(rootMinimizer()->X(), rootMinimizer()->X() + fitDimension(), result.begin());
193  return result;
194 }

References fitDimension(), and rootMinimizer().

Referenced by propagateResults().

Here is the call graph for this function:

◆ propagateOptions()

virtual void MinimizerAdapter::propagateOptions ( )
protectedpure virtual

◆ propagateResults()

void MinimizerAdapter::propagateResults ( mumufit::Parameters parameters)
protected

Propagates results of minimization to fit parameter set.

Definition at line 120 of file MinimizerAdapter.cpp.

121 {
122  parameters.setValues(parValuesAtMinimum());
123  parameters.setErrors(parErrorsAtMinimum());
124  // sets correlation matrix
125  if (providesError()) {
127  matrix.resize(fitDimension());
128 
129  for (size_t i = 0; i < fitDimension(); ++i) {
130  matrix[i].resize(fitDimension(), 0.0);
131  for (size_t j = 0; j < fitDimension(); ++j)
132  matrix[i][j] = rootMinimizer()->Correlation(static_cast<unsigned int>(i),
133  static_cast<unsigned int>(j));
134  }
135  parameters.setCorrelationMatrix(matrix);
136  }
137 }
std::vector< double > parValuesAtMinimum() const
Returns value of the variables at minimum.
bool providesError() const
Returns true if minimizer provides error and error matrix.
std::vector< double > parErrorsAtMinimum() const
Returns errors of the variables at minimum.
void setValues(const std::vector< double > &values)
Definition: Parameters.cpp:64
void setCorrelationMatrix(const corr_matrix_t &matrix)
Definition: Parameters.cpp:122
void setErrors(const std::vector< double > &errors)
Definition: Parameters.cpp:90
std::vector< std::vector< double > > corr_matrix_t
Definition: Parameters.h:31

References fitDimension(), parErrorsAtMinimum(), parValuesAtMinimum(), providesError(), rootMinimizer(), mumufit::Parameters::setCorrelationMatrix(), mumufit::Parameters::setErrors(), and mumufit::Parameters::setValues().

Referenced by minimize().

Here is the call graph for this function:

◆ providesError()

bool MinimizerAdapter::providesError ( ) const

Returns true if minimizer provides error and error matrix.

Definition at line 93 of file MinimizerAdapter.cpp.

94 {
95  return rootMinimizer()->ProvidesError();
96 }

References rootMinimizer().

Referenced by propagateResults(), and statusMap().

Here is the call graph for this function:

◆ requiresResiduals()

virtual bool IMinimizer::requiresResiduals ( )
inlinevirtualinherited

Returns true if minimizer computations are residual-based, false otherwise.

Reimplemented in Minuit2Minimizer, and GSLLevenbergMarquardtMinimizer.

Definition at line 59 of file IMinimizer.h.

59 { return false; }

◆ rootMinimizer() [1/2]

MinimizerAdapter::root_minimizer_t * MinimizerAdapter::rootMinimizer ( )
protected

Definition at line 209 of file MinimizerAdapter.cpp.

210 {
211  return const_cast<root_minimizer_t*>(
212  static_cast<const MinimizerAdapter*>(this)->rootMinimizer());
213 }
Abstract base class that adapts the CERN ROOT minimizer to our IMinimizer.
ROOT::Math::Minimizer root_minimizer_t

References rootMinimizer().

Here is the call graph for this function:

◆ rootMinimizer() [2/2]

◆ setOptions()

void MinimizerAdapter::setOptions ( const std::string &  optionString)
finalvirtual

Sets option string to the minimizer.

Reimplemented from IMinimizer.

Definition at line 113 of file MinimizerAdapter.cpp.

114 {
115  options().setOptionString(optionString);
116 }
MinimizerOptions & options()
void setOptionString(const std::string &options)
Set options from their string representation.

References options(), and MinimizerOptions::setOptionString().

Here is the call graph for this function:

◆ setOptionValue()

template<class T >
void MinimizerAdapter::setOptionValue ( const std::string &  optionName,
value 
)
protected

◆ setParameter()

void MinimizerAdapter::setParameter ( unsigned int  index,
const mumufit::Parameter par 
)
protectedvirtual

Reimplemented in GSLLevenbergMarquardtMinimizer, and GeneticMinimizer.

Definition at line 139 of file MinimizerAdapter.cpp.

140 {
141  bool success;
142  if (par.limits().isFixed()) {
143  success = rootMinimizer()->SetFixedVariable(index, par.name().c_str(), par.value());
144 
145  }
146 
147  else if (par.limits().isLimited()) {
148  success = rootMinimizer()->SetLimitedVariable(index, par.name().c_str(), par.value(),
149  par.step(), par.limits().lowerLimit(),
150  par.limits().upperLimit());
151  }
152 
153  else if (par.limits().isLowerLimited()) {
154  success = rootMinimizer()->SetLowerLimitedVariable(index, par.name().c_str(), par.value(),
155  par.step(), par.limits().lowerLimit());
156  }
157 
158  else if (par.limits().isUpperLimited()) {
159  success = rootMinimizer()->SetUpperLimitedVariable(index, par.name().c_str(), par.value(),
160  par.step(), par.limits().upperLimit());
161  }
162 
163  else if (par.limits().isLimitless()) {
164  success = rootMinimizer()->SetVariable(index, par.name().c_str(), par.value(), par.step());
165  }
166 
167  else {
168  throw std::runtime_error("BasicMinimizer::setParameter() -> Error! Unexpected parameter.");
169  }
170 
171  if (!success) {
172  std::ostringstream ostr;
173  ostr << "BasicMinimizer::setParameter() -> Error! Can't set minimizer's fit parameter";
174  ostr << "Index:" << index << " name '" << par.name() << "'";
175  throw std::runtime_error(ostr.str());
176  }
177 }
double lowerLimit() const
Definition: AttLimits.cpp:86
double upperLimit() const
Definition: AttLimits.cpp:91
bool isUpperLimited() const
Definition: AttLimits.cpp:71
bool isFixed() const
Definition: AttLimits.cpp:61
bool isLimitless() const
Definition: AttLimits.cpp:81
bool isLimited() const
Definition: AttLimits.cpp:66
bool isLowerLimited() const
Definition: AttLimits.cpp:76
double step() const
Definition: Parameter.cpp:69
std::string name() const
Definition: Parameter.cpp:44
AttLimits limits() const
Definition: Parameter.cpp:54
double value() const
Definition: Parameter.cpp:59

References AttLimits::isFixed(), AttLimits::isLimited(), AttLimits::isLimitless(), AttLimits::isLowerLimited(), AttLimits::isUpperLimited(), mumufit::Parameter::limits(), AttLimits::lowerLimit(), mumufit::Parameter::name(), rootMinimizer(), mumufit::Parameter::step(), AttLimits::upperLimit(), and mumufit::Parameter::value().

Referenced by GeneticMinimizer::setParameter(), GSLLevenbergMarquardtMinimizer::setParameter(), and setParameters().

Here is the call graph for this function:

◆ setParameters()

void MinimizerAdapter::setParameters ( const mumufit::Parameters parameters)

Definition at line 76 of file MinimizerAdapter.cpp.

77 {
78  unsigned int index(0);
79  for (const auto& par : parameters)
80  setParameter(index++, par);
81 }
virtual void setParameter(unsigned int index, const mumufit::Parameter &par)

References setParameter().

Referenced by minimize().

Here is the call graph for this function:

◆ statusMap()

std::map< std::string, std::string > MinimizerAdapter::statusMap ( ) const
virtual

Returns map of string representing different minimizer statuses.

Reimplemented in SimAnMinimizer, Minuit2Minimizer, GSLLevenbergMarquardtMinimizer, and GeneticMinimizer.

Definition at line 98 of file MinimizerAdapter.cpp.

99 {
100  std::map<std::string, std::string> result;
101  result["Status"] = statusToString();
102 
103  if (providesError())
104  result["ProvidesError"] = "Provides parameters error and error matrix";
105  else
106  result["ProvidesError"] = "Doesn't provide error calculation";
107 
108  result["MinValue"] = mumufit::stringUtils::scientific(minValue());
109 
110  return result;
111 }
virtual std::string statusToString() const
Returns string representation of current minimizer status.
std::string scientific(const T value, int n=10)
Returns scientific string representing given value of any numeric type.
Definition: StringUtils.h:41

References minValue(), providesError(), mumufit::stringUtils::scientific(), and statusToString().

Referenced by GeneticMinimizer::statusMap(), GSLLevenbergMarquardtMinimizer::statusMap(), Minuit2Minimizer::statusMap(), and SimAnMinimizer::statusMap().

Here is the call graph for this function:

◆ statusToString()

std::string MinimizerAdapter::statusToString ( ) const
virtual

Returns string representation of current minimizer status.

Reimplemented in Minuit2Minimizer, GSLMultiMinimizer, GSLLevenbergMarquardtMinimizer, and GeneticMinimizer.

Definition at line 88 of file MinimizerAdapter.cpp.

89 {
90  return m_status ? "Minimum found" : "Error in solving";
91 }

References m_status.

Referenced by statusMap().

Member Data Documentation

◆ m_adapter

std::unique_ptr<mumufit::ObjectiveFunctionAdapter> MinimizerAdapter::m_adapter
private

Definition at line 106 of file MinimizerAdapter.h.

Referenced by minimize(), minimize_residual(), and minimize_scalar().

◆ m_minimizerInfo

MinimizerInfo MinimizerAdapter::m_minimizerInfo
private

Definition at line 105 of file MinimizerAdapter.h.

Referenced by algorithmName(), and minimizerName().

◆ m_options

MinimizerOptions MinimizerAdapter::m_options
private

Definition at line 104 of file MinimizerAdapter.h.

Referenced by addOption(), options(), optionValue(), and setOptionValue().

◆ m_status

bool MinimizerAdapter::m_status
private

Definition at line 107 of file MinimizerAdapter.h.

Referenced by minimize(), and statusToString().


The documentation for this class was generated from the following files: