BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
gui2::SpecularToySimulation Class Reference

Toy simulation to calculate "specular reflectivity. More...

Collaboration diagram for gui2::SpecularToySimulation:
[legend]

Public Member Functions

 SpecularToySimulation (const SimulationInput &input_data)
 
 ~SpecularToySimulation ()
 
void runSimulation ()
 
void setProgressCallback (ModelView::ProgressHandler::callback_t callback)
 
SimulationResult simulationResult () const
 

Static Public Member Functions

static SLDProfile sld_profile (const multislice_t &multislice, int n_points)
 

Private Member Functions

size_t scanPointsCount () const
 

Private Attributes

SimulationInput m_inputData
 
ModelView::ProgressHandler m_progressHandler
 
SimulationResult m_specularResult
 
std::unique_ptr< SpecularScalarTanhStrategym_strategy
 

Detailed Description

Toy simulation to calculate "specular reflectivity.

Used by JobManager to run simulation in mylti-threaded mode.

Definition at line 31 of file speculartoysimulation.h.

Constructor & Destructor Documentation

◆ ~SpecularToySimulation()

gui2::SpecularToySimulation::~SpecularToySimulation ( )
default

◆ SpecularToySimulation()

gui2::SpecularToySimulation::SpecularToySimulation ( const SimulationInput input_data)

Definition at line 32 of file speculartoysimulation.cpp.

33  : m_inputData(input_data), m_strategy(std::make_unique<SpecularScalarTanhStrategy>())
34 {
35 }
std::unique_ptr< SpecularScalarTanhStrategy > m_strategy

Member Function Documentation

◆ runSimulation()

void gui2::SpecularToySimulation::runSimulation ( )

Definition at line 37 of file speculartoysimulation.cpp.

38 {
40 
42 
44  for (auto q : m_inputData.qvalues) {
46  throw std::runtime_error("Interrupt request");
47 
48  auto kz = -0.5 * q;
49  auto kzs = KzComputation::computeKzFromSLDs(slices, kz);
50  auto coeff = std::move(m_strategy->Execute(slices, kzs).front());
51  auto amplitude = std::norm(coeff->getScalarR()) * m_inputData.intensity;
52  m_specularResult.amplitudes.emplace_back(amplitude);
53 
55  }
57 }
void setCompletedTicks(size_t value)
Increment number of completed computation steps.
void reset()
Resets progress.
ModelView::ProgressHandler m_progressHandler
std::vector< complex_t > computeKzFromSLDs(const std::vector< Slice > &slices, double kz)
DAREFLCORE_EXPORT std::vector< Slice > createBornAgainSlices(const multislice_t &multislice)
multislice_t slice_data
std::vector< double > qvalues
std::vector< double > qvalues
std::vector< double > amplitudes

References gui2::SimulationResult::amplitudes, KzComputation::computeKzFromSLDs(), gui2::Utils::createBornAgainSlices(), ModelView::ProgressHandler::has_interrupt_request(), gui2::SimulationInput::intensity, m_inputData, m_progressHandler, m_specularResult, m_strategy, gui2::SimulationInput::qvalues, gui2::SimulationResult::qvalues, ModelView::ProgressHandler::reset(), scanPointsCount(), ModelView::ProgressHandler::setCompletedTicks(), and gui2::SimulationInput::slice_data.

Referenced by gui2::JobManager::wait_and_run().

Here is the call graph for this function:

◆ scanPointsCount()

size_t gui2::SpecularToySimulation::scanPointsCount ( ) const
private

Definition at line 77 of file speculartoysimulation.cpp.

78 {
79  return m_inputData.qvalues.size();
80 }

References m_inputData, and gui2::SimulationInput::qvalues.

Referenced by runSimulation(), and setProgressCallback().

◆ setProgressCallback()

void gui2::SpecularToySimulation::setProgressCallback ( ModelView::ProgressHandler::callback_t  callback)

Definition at line 59 of file speculartoysimulation.cpp.

60 {
62  m_progressHandler.subscribe(callback);
63 }
void subscribe(callback_t callback)
void setMaxTicksCount(size_t value)
Sets expected ticks count, representing progress of a computation.

References m_progressHandler, scanPointsCount(), ModelView::ProgressHandler::setMaxTicksCount(), and ModelView::ProgressHandler::subscribe().

Referenced by gui2::JobManager::wait_and_run().

Here is the call graph for this function:

◆ simulationResult()

SimulationResult gui2::SpecularToySimulation::simulationResult ( ) const

Definition at line 65 of file speculartoysimulation.cpp.

66 {
67  return m_specularResult;
68 }

References m_specularResult.

Referenced by gui2::JobManager::wait_and_run().

◆ sld_profile()

SLDProfile gui2::SpecularToySimulation::sld_profile ( const multislice_t multislice,
int  n_points 
)
static

Definition at line 70 of file speculartoysimulation.cpp.

71 {
72  auto [xmin, xmax] = MaterialProfile::DefaultMaterialProfileLimits(multislice);
73  auto profile = MaterialProfile::CalculateProfile(multislice, n_points, xmin, xmax);
74  return {xmin, xmax, ModelView::Utils::Real(profile)};
75 }
std::vector< double > Real(const C &container)
Returns vector with real part of complex numbers.
DAREFLCORE_EXPORT std::pair< double, double > DefaultMaterialProfileLimits(const multislice_t &multilayer)
Get default z limits for generating a material profile.
DAREFLCORE_EXPORT std::vector< complex_t > CalculateProfile(const multislice_t &multilayer, int n_points, double z_min, double z_max)
Calculate average material profile for given multilayer.

References gui2::MaterialProfile::CalculateProfile(), gui2::MaterialProfile::DefaultMaterialProfileLimits(), and ModelView::Utils::Real().

Referenced by gui2::QuickSimController::update_sld_profile().

Here is the call graph for this function:

Member Data Documentation

◆ m_inputData

SimulationInput gui2::SpecularToySimulation::m_inputData
private

Definition at line 49 of file speculartoysimulation.h.

Referenced by runSimulation(), and scanPointsCount().

◆ m_progressHandler

ModelView::ProgressHandler gui2::SpecularToySimulation::m_progressHandler
private

Definition at line 48 of file speculartoysimulation.h.

Referenced by runSimulation(), and setProgressCallback().

◆ m_specularResult

SimulationResult gui2::SpecularToySimulation::m_specularResult
private

Definition at line 50 of file speculartoysimulation.h.

Referenced by runSimulation(), and simulationResult().

◆ m_strategy

std::unique_ptr<SpecularScalarTanhStrategy> gui2::SpecularToySimulation::m_strategy
private

Definition at line 52 of file speculartoysimulation.h.

Referenced by runSimulation().


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