BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
Kernel.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Fit/Kernel/Kernel.cpp
6 //! @brief Implements class Kernel.
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 #include "Fit/Kernel/Kernel.h"
19 
20 using namespace mumufit;
21 
22 namespace {
23 
24 const std::string default_minimizer = "Minuit2";
25 const std::string default_algorithm = "Migrad";
26 
27 } // namespace
28 
30 {
31  setMinimizer(default_minimizer, default_algorithm);
32 }
33 
34 Kernel::~Kernel() = default;
35 
36 void Kernel::setMinimizer(const std::string& minimizerName, const std::string& algorithmName,
37  const std::string& options)
38 {
39  m_minimizer.reset(MinimizerFactory::createMinimizer(minimizerName, algorithmName, options));
40 }
41 
43 {
44  m_minimizer.reset(minimizer);
45 }
46 
47 MinimizerResult Kernel::minimize(const fcn_scalar_t fcn, const Parameters& parameters) const
48 {
49  WallclockTimer timer;
50  timer.start();
51  if (m_minimizer->requiresResiduals())
52  throw std::runtime_error(
53  "Error in Kernel::minimize: the chosen minimizer requires residuals computation. "
54  "Please use FitObjective::evaluate_residuals with this minimizer.");
55  auto result = m_minimizer->minimize_scalar(fcn, parameters);
56  timer.stop();
57 
58  result.setDuration(timer.runTime());
59  return result;
60 }
61 
62 MinimizerResult Kernel::minimize(const fcn_residual_t fcn, const Parameters& parameters) const
63 {
64  WallclockTimer timer;
65  timer.start();
66  auto result = m_minimizer->minimize_residual(fcn, parameters);
67  timer.stop();
68 
69  result.setDuration(timer.runTime());
70  return result;
71 }
Defines interface IMinimizer.
Defines class Kernel.
Defines class MinimizerFactory.
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
Defines WallclockTimer class.
Abstract base class for all kind minimizers.
Definition: IMinimizer.h:30
static IMinimizer * createMinimizer(const std::string &minimizerName, const std::string &algorithmType="", const std::string &optionString="")
A timer for measuring real (wall-clock) time spent between 'start' and 'stop' commands.
double runTime() const
Returns run time in sec.
void setMinimizer(const std::string &minimizerName, const std::string &algorithmName="", const std::string &options="")
Definition: Kernel.cpp:36
MinimizerResult minimize(fcn_scalar_t fcn, const Parameters &parameters) const
Definition: Kernel.cpp:47
std::unique_ptr< IMinimizer > m_minimizer
Definition: Kernel.h:50
Result of minimization round.
A collection of fit parameters.
Definition: Parameters.h:26
The multi-library, multi-algorithm fit wrapper library.