BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
FitStatus.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Sim/Fitting/FitStatus.cpp
6 //! @brief Implements class FitStatus.
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 "Sim/Fitting/FitStatus.h"
18 #include <memory>
19 #include <stdexcept>
20 
21 FitStatus::FitStatus(const FitObjective* fit_objective)
22  : m_fit_status(IDLE)
23  , m_fit_objective(fit_objective)
24 {
25 }
26 
27 FitStatus::~FitStatus() = default;
28 
30 {
32 }
33 
35 {
36  return m_fit_status == INTERRUPTED;
37 }
38 
40 {
41  return m_fit_status == COMPLETED;
42 }
43 
44 void FitStatus::update(const mumufit::Parameters& params, double chi2)
45 {
46  if (!isInterrupted())
48 
49  m_iterationInfo.update(params, chi2);
50 
52 }
53 
54 void FitStatus::initPrint(int every_nth)
55 {
56  m_print_service = std::make_unique<FitPrintService>();
57 
58  FitObserver<FitObjective>::observer_t callback = [&](const FitObjective& objective) {
59  m_print_service->print(objective);
60  };
61 
62  addObserver(every_nth, std::move(callback));
63 }
64 
65 void FitStatus::addObserver(int every_nth, fit_observer_t&& observer)
66 {
67  m_observers.addObserver(every_nth, std::move(observer));
68 }
69 
71 {
72  return m_iterationInfo;
73 }
74 
76 {
77  if (!m_minimizer_result)
78  throw std::runtime_error("FitStatus::minimizerResult() -> Minimizer result wasn't set. "
79  "Make sure that FitObjective::finalize() was called.");
80 
82 }
83 
85 {
86  m_minimizer_result = std::make_unique<mumufit::MinimizerResult>(result);
89 }
Defines class FitPrintService.
Defines class FitStatus.
std::function< void(const FitObjective &)> fit_observer_t
Definition: FitTypes.h:36
Defines class MinimizerResult.
Holds vector of SimDataPairs (experimental data and simulation results) for use in fitting....
Definition: FitObjective.h:42
Contains collection of observers and call them at specified intervals. Each observer will be called a...
Definition: FitObserver.h:31
void notify(const T &data)
Notifies all observers at their personally specified intervals.
Definition: FitObserver.h:82
void addObserver(int every_nth, observer_t &&observer)
Adds observer to the list.
Definition: FitObserver.h:76
void notify_all(const T &data)
Definition: FitObserver.h:93
void setInterrupted()
Definition: FitStatus.cpp:29
bool isCompleted() const
Definition: FitStatus.cpp:39
void update(const mumufit::Parameters &params, double chi2)
Definition: FitStatus.cpp:44
IterationInfo iterationInfo() const
Definition: FitStatus.cpp:70
void initPrint(int every_nth)
Definition: FitStatus.cpp:54
FitStatus(const FitObjective *fit_objective)
Definition: FitStatus.cpp:21
EFitStatus m_fit_status
Definition: FitStatus.h:63
std::unique_ptr< mumufit::MinimizerResult > m_minimizer_result
Definition: FitStatus.h:68
const FitObjective * m_fit_objective
Definition: FitStatus.h:66
@ INTERRUPTED
Definition: FitStatus.h:62
@ COMPLETED
Definition: FitStatus.h:62
mumufit::MinimizerResult minimizerResult() const
Definition: FitStatus.cpp:75
void finalize(const mumufit::MinimizerResult &result)
Should be explicitly called on last iteration to notify all observers.
Definition: FitStatus.cpp:84
IterationInfo m_iterationInfo
Definition: FitStatus.h:67
FitObserver< FitObjective > m_observers
Definition: FitStatus.h:64
std::unique_ptr< FitPrintService > m_print_service
Definition: FitStatus.h:65
bool isInterrupted() const
Definition: FitStatus.cpp:34
void addObserver(int every_nth, fit_observer_t &&)
Definition: FitStatus.cpp:65
Stores fit iteration info to track fit flow from various observers. Used in context of FitObjective.
Definition: IterationInfo.h:25
void update(const mumufit::Parameters &params, double chi2)
Result of minimization round.
A collection of fit parameters.
Definition: Parameters.h:26