BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
FitObjectiveBuilder Class Reference
Collaboration diagram for FitObjectiveBuilder:
[legend]

Public Member Functions

 FitObjectiveBuilder (JobItem *jobItem)
 
 ~FitObjectiveBuilder ()
 
void attachObserver (std::shared_ptr< GUIFitObserver > observer)
 
std::unique_ptr< IChiSquaredModulecreateChiSquaredModule () const
 
std::unique_ptr< FitObjectivecreateFitObjective () const
 
std::unique_ptr< IMinimizercreateMinimizer () const
 
mumufit::Parameters createParameters () const
 
void interruptFitting ()
 
void runFit ()
 

Private Member Functions

std::unique_ptr< ISimulationbuildSimulation (const mumufit::Parameters &params) const
 
std::unique_ptr< OutputData< double > > createOutputData () const
 
void update_fit_parameters (const mumufit::Parameters &params) const
 

Private Attributes

std::unique_ptr< FitObjectivem_fit_objective
 
JobItemm_jobItem
 
std::shared_ptr< GUIFitObserverm_observer
 

Detailed Description

Definition at line 31 of file FitObjectiveBuilder.h.

Constructor & Destructor Documentation

◆ FitObjectiveBuilder()

FitObjectiveBuilder::FitObjectiveBuilder ( JobItem jobItem)

Definition at line 31 of file FitObjectiveBuilder.cpp.

31  : m_jobItem(jobItem)
32 {
34 }
#define ASSERT(condition)
Definition: Assert.h:31
FitSuiteItem * fitSuiteItem()
Definition: JobItem.cpp:235

References ASSERT, JobItem::fitSuiteItem(), and m_jobItem.

Here is the call graph for this function:

◆ ~FitObjectiveBuilder()

FitObjectiveBuilder::~FitObjectiveBuilder ( )
default

Member Function Documentation

◆ attachObserver()

void FitObjectiveBuilder::attachObserver ( std::shared_ptr< GUIFitObserver observer)

Definition at line 92 of file FitObjectiveBuilder.cpp.

93 {
94  m_observer = observer;
95 }
std::shared_ptr< GUIFitObserver > m_observer

References m_observer.

◆ buildSimulation()

std::unique_ptr< ISimulation > FitObjectiveBuilder::buildSimulation ( const mumufit::Parameters params) const
private

Definition at line 103 of file FitObjectiveBuilder.cpp.

104 {
105  static std::mutex build_simulation_mutex;
106  std::unique_lock<std::mutex> lock(build_simulation_mutex);
107 
108  update_fit_parameters(params);
112 }
void update_fit_parameters(const mumufit::Parameters &params) const
InstrumentItem * instrumentItem()
Definition: JobItem.cpp:224
SimulationOptionsItem * simulationOptionsItem()
Definition: JobItem.cpp:290
MultiLayerItem * multiLayerItem()
Definition: JobItem.cpp:219
std::unique_ptr< ISimulation > createSimulation(const MultiLayerItem *sampleItem, const InstrumentItem *instrumentItem, const SimulationOptionsItem *optionsItem=nullptr)
Creates domain simulation from sample and instrument items.

References DomainSimulationBuilder::createSimulation(), JobItem::instrumentItem(), m_jobItem, JobItem::multiLayerItem(), JobItem::simulationOptionsItem(), and update_fit_parameters().

Referenced by createFitObjective().

Here is the call graph for this function:

◆ createChiSquaredModule()

std::unique_ptr<IChiSquaredModule> FitObjectiveBuilder::createChiSquaredModule ( ) const

◆ createFitObjective()

std::unique_ptr< FitObjective > FitObjectiveBuilder::createFitObjective ( ) const

Definition at line 69 of file FitObjectiveBuilder.cpp.

70 {
71  std::unique_ptr<FitObjective> result(new FitObjective);
72 
73  simulation_builder_t builder = [&](const mumufit::Parameters& params) {
74  return buildSimulation(params);
75  };
76 
77  result->addSimulationAndData(builder, *createOutputData(), nullptr, 1.0);
78 
79  return result;
80 }
std::function< std::unique_ptr< ISimulation >(const mumufit::Parameters &)> simulation_builder_t
Definition: FitTypes.h:33
std::unique_ptr< ISimulation > buildSimulation(const mumufit::Parameters &params) const
std::unique_ptr< OutputData< double > > createOutputData() const
Holds vector of SimDataPairs (experimental data and simulation results) for use in fitting.
Definition: FitObjective.h:33
A collection of fit parameters.
Definition: Parameters.h:26

References buildSimulation(), and createOutputData().

Referenced by runFit().

Here is the call graph for this function:

◆ createMinimizer()

std::unique_ptr< IMinimizer > FitObjectiveBuilder::createMinimizer ( ) const

Definition at line 82 of file FitObjectiveBuilder.cpp.

83 {
85 }
MinimizerContainerItem * minimizerContainerItem()
std::unique_ptr< IMinimizer > createMinimizer() const

References MinimizerContainerItem::createMinimizer(), JobItem::fitSuiteItem(), m_jobItem, and FitSuiteItem::minimizerContainerItem().

Referenced by runFit().

Here is the call graph for this function:

◆ createOutputData()

std::unique_ptr< OutputData< double > > FitObjectiveBuilder::createOutputData ( ) const
private

Definition at line 114 of file FitObjectiveBuilder.cpp.

115 {
116  auto realDataItem = m_jobItem->realDataItem();
117  if (!realDataItem)
118  throw GUIHelpers::Error("FitObjectiveBuilder::createOutputData() -> No Real Data defined.");
119 
120  const DataItem* intensity_item = realDataItem->dataItem();
121  ASSERT(intensity_item);
122  ASSERT(intensity_item->getOutputData());
123 
124  return std::unique_ptr<OutputData<double>>(intensity_item->getOutputData()->clone());
125 }
Provides common functionality for IntensityDataItem and SpecularDataItem.
Definition: DataItem.h:29
OutputData< double > * getOutputData()
Definition: DataItem.h:36
RealDataItem * realDataItem()
Definition: JobItem.cpp:259
OutputData * clone() const
Definition: OutputData.h:259

References ASSERT, OutputData< T >::clone(), DataItem::getOutputData(), m_jobItem, and JobItem::realDataItem().

Referenced by createFitObjective().

Here is the call graph for this function:

◆ createParameters()

mumufit::Parameters FitObjectiveBuilder::createParameters ( ) const

Definition at line 87 of file FitObjectiveBuilder.cpp.

88 {
90 }
mumufit::Parameters createParameters() const
FitParameterContainerItem * fitParameterContainerItem()

References FitParameterContainerItem::createParameters(), FitSuiteItem::fitParameterContainerItem(), JobItem::fitSuiteItem(), and m_jobItem.

Referenced by runFit().

Here is the call graph for this function:

◆ interruptFitting()

void FitObjectiveBuilder::interruptFitting ( )

Definition at line 97 of file FitObjectiveBuilder.cpp.

98 {
99  m_fit_objective->interruptFitting();
100 }
std::unique_ptr< FitObjective > m_fit_objective

References m_fit_objective.

◆ runFit()

void FitObjectiveBuilder::runFit ( )

Definition at line 38 of file FitObjectiveBuilder.cpp.

39 {
41 
43  m_fit_objective->setObjectiveMetric(std::move(module));
44 
45  if (m_observer) {
46  fit_observer_t plot_observer = [&](const FitObjective& obj) { m_observer->update(&obj); };
47  m_fit_objective->initPlot(1, plot_observer);
48  }
49 
50  auto minimizer_impl = createMinimizer();
51  const bool requires_residuals = minimizer_impl->requiresResiduals();
52 
53  mumufit::Minimizer minimizer;
54  minimizer.setMinimizer(minimizer_impl.release());
55 
56  auto result = requires_residuals ? minimizer.minimize(
57  [&](const mumufit::Parameters& params) {
58  return m_fit_objective->evaluate_residuals(params);
59  },
61  : minimizer.minimize(
62  [&](const mumufit::Parameters& params) {
63  return m_fit_objective->evaluate(params);
64  },
66  m_fit_objective->finalize(result);
67 }
std::function< void(const FitObjective &)> fit_observer_t
Definition: FitTypes.h:35
std::unique_ptr< IMinimizer > createMinimizer() const
std::unique_ptr< FitObjective > createFitObjective() const
mumufit::Parameters createParameters() const
std::unique_ptr< ObjectiveMetric > createMetric() const
A main class to run fitting.
Definition: Minimizer.h:37
void setMinimizer(const std::string &minimizerName, const std::string &algorithmName="", const std::string &options="")
Definition: Minimizer.cpp:23
MinimizerResult minimize(fcn_scalar_t fcn, const Parameters &parameters)
Definition: Minimizer.cpp:36

References createFitObjective(), MinimizerContainerItem::createMetric(), createMinimizer(), createParameters(), JobItem::fitSuiteItem(), m_fit_objective, m_jobItem, m_observer, mumufit::Minimizer::minimize(), FitSuiteItem::minimizerContainerItem(), and mumufit::Minimizer::setMinimizer().

Here is the call graph for this function:

◆ update_fit_parameters()

void FitObjectiveBuilder::update_fit_parameters ( const mumufit::Parameters params) const
private

Definition at line 127 of file FitObjectiveBuilder.cpp.

128 {
129  QVector<double> values = GUIHelpers::fromStdVector(params.values());
130 
131  auto fitParContainer = m_jobItem->fitParameterContainerItem();
133 }
void setValuesInParameterContainer(const QVector< double > &values, class ParameterContainerItem *parameterContainer)
Propagate values to the corresponding parameter tree items of parameterContainer.
FitParameterContainerItem * fitParameterContainerItem()
Definition: JobItem.cpp:251
ParameterContainerItem * parameterContainerItem()
Definition: JobItem.cpp:240
std::vector< double > values() const
Definition: Parameters.cpp:56
QVector< double > fromStdVector(const std::vector< double > &data)
Definition: GUIHelpers.cpp:225

References JobItem::fitParameterContainerItem(), GUIHelpers::fromStdVector(), m_jobItem, JobItem::parameterContainerItem(), FitParameterContainerItem::setValuesInParameterContainer(), and mumufit::Parameters::values().

Referenced by buildSimulation().

Here is the call graph for this function:

Member Data Documentation

◆ m_fit_objective

std::unique_ptr<FitObjective> FitObjectiveBuilder::m_fit_objective
private

Definition at line 57 of file FitObjectiveBuilder.h.

Referenced by interruptFitting(), and runFit().

◆ m_jobItem

JobItem* FitObjectiveBuilder::m_jobItem
private

◆ m_observer

std::shared_ptr<GUIFitObserver> FitObjectiveBuilder::m_observer
private

Definition at line 56 of file FitObjectiveBuilder.h.

Referenced by attachObserver(), and runFit().


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