BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
RootMinimizerAdapter Class Referenceabstract
Inheritance diagram for RootMinimizerAdapter:
Collaboration diagram for RootMinimizerAdapter:

Public Types

typedef ROOT::Math::Minimizer root_minimizer_t
 

Public Member Functions

virtual ~RootMinimizerAdapter () override
 
Fit::MinimizerResult minimize_scalar (fcn_scalar_t fcn, Fit::Parameters parameters) override
 
Fit::MinimizerResult minimize_residual (fcn_residual_t fcn, Fit::Parameters parameters) override
 
std::string minimizerName () const override final
 
std::string algorithmName () const override final
 
void setParameters (const Fit::Parameters &parameters)
 
double minValue () const override final
 
MinimizerOptionsoptions ()
 
const MinimizerOptionsoptions () const
 
virtual std::string statusToString () const
 
bool providesError () const
 
virtual std::map< std::string, std::string > statusMap () const
 
void setOptions (const std::string &optionString) override final
 
virtual void clear ()
 
virtual bool requiresResiduals ()
 

Protected Member Functions

 RootMinimizerAdapter (const MinimizerInfo &minimizerInfo)
 
Fit::MinimizerResult minimize (Fit::Parameters parameters)
 
void propagateResults (Fit::Parameters &parameters)
 
virtual void setParameter (unsigned int index, const Fit::Parameter &par)
 
size_t fitDimension () const
 
std::vector< double > parValuesAtMinimum () const
 
std::vector< double > parErrorsAtMinimum () const
 
virtual void propagateOptions ()=0
 
virtual const root_minimizer_trootMinimizer () const =0
 
root_minimizer_trootMinimizer ()
 
template<class T >
OptionContainer::option_t addOption (const std::string &optionName, T value, const std::string &description="")
 
template<class T >
void setOptionValue (const std::string &optionName, T value)
 
template<class T >
optionValue (const std::string &optionName) const
 

Private Attributes

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

Detailed Description

Pure virtual interface that adapts the CERN ROOT minimizer to our IMinimizer.

Definition at line 43 of file RootMinimizerAdapter.h.

Member Typedef Documentation

◆ root_minimizer_t

typedef ROOT::Math::Minimizer RootMinimizerAdapter::root_minimizer_t

Definition at line 46 of file RootMinimizerAdapter.h.

Constructor & Destructor Documentation

◆ ~RootMinimizerAdapter()

RootMinimizerAdapter::~RootMinimizerAdapter ( )
overridevirtualdefault

◆ RootMinimizerAdapter()

RootMinimizerAdapter::RootMinimizerAdapter ( const MinimizerInfo minimizerInfo)
protected

Definition at line 25 of file RootMinimizerAdapter.cpp.

27 {
28 }
Converts user objective function to function ROOT expects.
std::unique_ptr< Fit::ObjectiveFunctionAdapter > m_adapter

Member Function Documentation

◆ minimize_scalar()

MinimizerResult RootMinimizerAdapter::minimize_scalar ( fcn_scalar_t  ,
Fit::Parameters   
)
overridevirtual

run minimization

Reimplemented from IMinimizer.

Definition at line 32 of file RootMinimizerAdapter.cpp.

33 {
34  // Genetic minimizer requires SetFunction before setParameters, others don't care
35  rootMinimizer()->SetFunction(*m_adapter->rootObjectiveFunction(fcn, parameters));
36  return minimize(parameters);
37 }
Fit::MinimizerResult minimize(Fit::Parameters parameters)
virtual const root_minimizer_t * rootMinimizer() const =0

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

Here is the call graph for this function:

◆ minimize_residual()

MinimizerResult RootMinimizerAdapter::minimize_residual ( fcn_residual_t  fcn,
Fit::Parameters  parameters 
)
overridevirtual

Reimplemented from IMinimizer.

Definition at line 39 of file RootMinimizerAdapter.cpp.

40 {
41  // Genetic minimizer requires SetFunction before setParameters, others don't care
42  rootMinimizer()->SetFunction(*m_adapter->rootResidualFunction(fcn, parameters));
43  return minimize(parameters);
44 }

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

Here is the call graph for this function:

◆ minimizerName()

std::string RootMinimizerAdapter::minimizerName ( ) const
finaloverridevirtual

Returns name of the minimizer.

Implements IMinimizer.

Definition at line 64 of file RootMinimizerAdapter.cpp.

65 {
66  return m_minimizerInfo.name();
67 }
std::string name() const
Definition: MinimizerInfo.h:56

References m_minimizerInfo, and MinimizerInfo::name().

Referenced by anonymous_namespace{MinimizerResultUtils.cpp}::reportDescription().

Here is the call graph for this function:

◆ algorithmName()

std::string RootMinimizerAdapter::algorithmName ( ) const
finaloverridevirtual

Returns name of the minimization algorithm.

Implements IMinimizer.

Definition at line 69 of file RootMinimizerAdapter.cpp.

70 {
72 }
std::string algorithmName() const
Definition: MinimizerInfo.h:59

References MinimizerInfo::algorithmName(), and m_minimizerInfo.

Referenced by anonymous_namespace{MinimizerResultUtils.cpp}::reportDescription(), and Minuit2Minimizer::requiresResiduals().

Here is the call graph for this function:

◆ setParameters()

void RootMinimizerAdapter::setParameters ( const Fit::Parameters parameters)

Definition at line 74 of file RootMinimizerAdapter.cpp.

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

References setParameter().

Referenced by minimize().

Here is the call graph for this function:

◆ minValue()

double RootMinimizerAdapter::minValue ( ) const
finaloverridevirtual

Returns minimum function value.

Reimplemented from IMinimizer.

Definition at line 81 of file RootMinimizerAdapter.cpp.

82 {
83  return rootMinimizer()->MinValue();
84 }

References rootMinimizer().

Referenced by minimize(), and statusMap().

Here is the call graph for this function:

◆ options() [1/2]

MinimizerOptions& RootMinimizerAdapter::options ( )
inline

Definition at line 63 of file RootMinimizerAdapter.h.

63 { return m_options; }
MinimizerOptions m_options

References m_options.

Referenced by anonymous_namespace{MinimizerResultUtils.cpp}::reportOption(), and setOptions().

◆ options() [2/2]

const MinimizerOptions& RootMinimizerAdapter::options ( ) const
inline

Definition at line 64 of file RootMinimizerAdapter.h.

64 { return m_options; }

References m_options.

◆ statusToString()

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

Returns string representation of current minimizer status.

Reimplemented in Minuit2Minimizer, GSLMultiMinimizer, GSLLevenbergMarquardtMinimizer, and GeneticMinimizer.

Definition at line 86 of file RootMinimizerAdapter.cpp.

87 {
88  return m_status ? "Minimum found" : "Error in solving";
89 }

References m_status.

Referenced by statusMap().

◆ providesError()

bool RootMinimizerAdapter::providesError ( ) const

Returns true if minimizer provides error and error matrix.

Definition at line 91 of file RootMinimizerAdapter.cpp.

92 {
93  return rootMinimizer()->ProvidesError();
94 }

References rootMinimizer().

Referenced by propagateResults(), and statusMap().

Here is the call graph for this function:

◆ statusMap()

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

Returns map of string representing different minimizer statuses.

Reimplemented in SimAnMinimizer, Minuit2Minimizer, GSLLevenbergMarquardtMinimizer, and GeneticMinimizer.

Definition at line 96 of file RootMinimizerAdapter.cpp.

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

References minValue(), providesError(), StringUtils::scientific(), and statusToString().

Referenced by anonymous_namespace{MinimizerResultUtils.cpp}::reportStatus(), GeneticMinimizer::statusMap(), GSLLevenbergMarquardtMinimizer::statusMap(), Minuit2Minimizer::statusMap(), and SimAnMinimizer::statusMap().

Here is the call graph for this function:

◆ setOptions()

void RootMinimizerAdapter::setOptions ( const std::string &  optionString)
finaloverridevirtual

Sets option string to the minimizer.

Reimplemented from IMinimizer.

Definition at line 111 of file RootMinimizerAdapter.cpp.

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

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

Here is the call graph for this function:

◆ minimize()

MinimizerResult RootMinimizerAdapter::minimize ( Fit::Parameters  parameters)
protected

Definition at line 46 of file RootMinimizerAdapter.cpp.

47 {
48  setParameters(parameters);
50 
51  m_status = rootMinimizer()->Minimize();
52  propagateResults(parameters);
53 
54  MinimizerResult result;
55  result.setParameters(parameters);
56  result.setMinValue(minValue());
58  result.setNumberOfCalls(m_adapter->numberOfCalls());
59  result.setNumberOfGradientCalls(m_adapter->numberOfGradientCalls());
60 
61  return result;
62 }
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)
void propagateResults(Fit::Parameters &parameters)
Propagates results of minimization to fit parameter set.
virtual void propagateOptions()=0
void setParameters(const Fit::Parameters &parameters)
std::string reportToString(const RootMinimizerAdapter &minimizer)
Reports results of minimization in the form of multi-line string.

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

Referenced by minimize_residual(), and minimize_scalar().

Here is the call graph for this function:

◆ propagateResults()

void RootMinimizerAdapter::propagateResults ( Fit::Parameters parameters)
protected

Propagates results of minimization to fit parameter set.

Definition at line 118 of file RootMinimizerAdapter.cpp.

119 {
120  parameters.setValues(parValuesAtMinimum());
121  parameters.setErrors(parErrorsAtMinimum());
122  // sets correlation matrix
123  if (providesError()) {
125  matrix.resize(fitDimension());
126 
127  for (size_t i = 0; i < fitDimension(); ++i) {
128  matrix[i].resize(fitDimension(), 0.0);
129  for (size_t j = 0; j < fitDimension(); ++j)
130  matrix[i][j] = rootMinimizer()->Correlation(static_cast<unsigned int>(i),
131  static_cast<unsigned int>(j));
132  }
133  parameters.setCorrelationMatrix(matrix);
134  }
135 }
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:33
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.
std::vector< double > parValuesAtMinimum() const
Returns value of the variables at minimum.

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

Referenced by minimize().

Here is the call graph for this function:

◆ setParameter()

void RootMinimizerAdapter::setParameter ( unsigned int  index,
const Fit::Parameter par 
)
protectedvirtual

Reimplemented in GSLLevenbergMarquardtMinimizer, and GeneticMinimizer.

Definition at line 137 of file RootMinimizerAdapter.cpp.

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

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

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

Here is the call graph for this function:

◆ fitDimension()

size_t RootMinimizerAdapter::fitDimension ( ) const
protected

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

Definition at line 179 of file RootMinimizerAdapter.cpp.

180 {
181  return rootMinimizer()->NDim();
182 }

References rootMinimizer().

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

Here is the call graph for this function:

◆ parValuesAtMinimum()

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

Returns value of the variables at minimum.

Definition at line 186 of file RootMinimizerAdapter.cpp.

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

References fitDimension(), and rootMinimizer().

Referenced by propagateResults().

Here is the call graph for this function:

◆ parErrorsAtMinimum()

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

Returns errors of the variables at minimum.

Definition at line 196 of file RootMinimizerAdapter.cpp.

197 {
198  std::vector<double> result;
199  result.resize(fitDimension(), 0.0);
200  if (rootMinimizer()->Errors() != 0) {
201  std::copy(rootMinimizer()->Errors(), rootMinimizer()->Errors() + fitDimension(),
202  result.begin());
203  }
204  return result;
205 }

References fitDimension(), and rootMinimizer().

Referenced by propagateResults().

Here is the call graph for this function:

◆ propagateOptions()

virtual void RootMinimizerAdapter::propagateOptions ( )
protectedpure virtual

◆ rootMinimizer() [1/2]

◆ rootMinimizer() [2/2]

RootMinimizerAdapter::root_minimizer_t * RootMinimizerAdapter::rootMinimizer ( )
protected

Definition at line 207 of file RootMinimizerAdapter.cpp.

208 {
209  return const_cast<root_minimizer_t*>(
210  static_cast<const RootMinimizerAdapter*>(this)->rootMinimizer());
211 }
Pure virtual interface 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:

◆ addOption()

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

Definition at line 110 of file RootMinimizerAdapter.h.

112 {
113  return m_options.addOption(optionName, value, description);
114 }
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:

◆ setOptionValue()

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

◆ optionValue()

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

Definition at line 121 of file RootMinimizerAdapter.h.

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

References m_options, and OptionContainer::optionValue().

Here is the call graph for this function:

◆ clear()

virtual void IMinimizer::clear ( )
inlinevirtualinherited

clear resources (parameters) for consecutives minimizations

Definition at line 50 of file IMinimizer.h.

50 {}

◆ requiresResiduals()

virtual bool IMinimizer::requiresResiduals ( )
inlinevirtualinherited

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

Reimplemented in Minuit2Minimizer, and GSLLevenbergMarquardtMinimizer.

Definition at line 60 of file IMinimizer.h.

60 { return false; }

Member Data Documentation

◆ m_options

MinimizerOptions RootMinimizerAdapter::m_options
private

Definition at line 103 of file RootMinimizerAdapter.h.

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

◆ m_minimizerInfo

MinimizerInfo RootMinimizerAdapter::m_minimizerInfo
private

Definition at line 104 of file RootMinimizerAdapter.h.

Referenced by algorithmName(), and minimizerName().

◆ m_adapter

std::unique_ptr<Fit::ObjectiveFunctionAdapter> RootMinimizerAdapter::m_adapter
private

Definition at line 105 of file RootMinimizerAdapter.h.

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

◆ m_status

bool RootMinimizerAdapter::m_status
private

Definition at line 106 of file RootMinimizerAdapter.h.

Referenced by minimize(), and statusToString().


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