BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
LayoutStrategyBuilder Class Reference
Collaboration diagram for LayoutStrategyBuilder:

Public Member Functions

 LayoutStrategyBuilder (const ProcessedLayout *p_layout, const SimulationOptions &sim_params, bool polarized)
 
 ~LayoutStrategyBuilder ()
 
IInterferenceFunctionStrategyreleaseStrategy ()
 

Private Member Functions

void createStrategy ()
 

Private Attributes

const ProcessedLayoutmp_layout
 
SimulationOptions m_sim_params
 
bool m_polarized
 
std::unique_ptr< IInterferenceFunctionStrategymP_strategy
 

Detailed Description

Methods to generate a simulation strategy for a ParticleLayoutComputation.

Definition at line 28 of file LayoutStrategyBuilder.h.

Constructor & Destructor Documentation

◆ LayoutStrategyBuilder()

LayoutStrategyBuilder::LayoutStrategyBuilder ( const ProcessedLayout p_layout,
const SimulationOptions sim_params,
bool  polarized 
)

Definition at line 22 of file LayoutStrategyBuilder.cpp.

24  : mp_layout(p_layout), m_sim_params(sim_params), m_polarized(polarized)
25 {
27 }
bool m_polarized
polarized computation required?
const ProcessedLayout * mp_layout
void createStrategy()
Returns a new strategy object that is able to calculate the scattering for fixed k_f.
SimulationOptions m_sim_params

References createStrategy().

Here is the call graph for this function:

◆ ~LayoutStrategyBuilder()

LayoutStrategyBuilder::~LayoutStrategyBuilder ( )
default

Member Function Documentation

◆ releaseStrategy()

IInterferenceFunctionStrategy * LayoutStrategyBuilder::releaseStrategy ( )

Definition at line 32 of file LayoutStrategyBuilder.cpp.

33 {
34  return mP_strategy.release();
35 }
std::unique_ptr< IInterferenceFunctionStrategy > mP_strategy

References mP_strategy.

Referenced by ParticleLayoutComputation::ParticleLayoutComputation().

◆ createStrategy()

void LayoutStrategyBuilder::createStrategy ( )
private

Returns a new strategy object that is able to calculate the scattering for fixed k_f.

Definition at line 38 of file LayoutStrategyBuilder.cpp.

39 {
41  if (p_iff && mp_layout->numberOfSlices() > 1 && !p_iff->supportsMultilayer())
42  throw std::runtime_error("LayoutStrategyBuilder::checkInterferenceFunction: "
43  "interference function does not support multiple layers");
44 
45  auto p_radial_para = dynamic_cast<const InterferenceFunctionRadialParaCrystal*>(p_iff);
46  if (p_radial_para && p_radial_para->kappa() > 0.0) {
47  double kappa = p_radial_para->kappa();
48  mP_strategy = std::make_unique<SSCApproximationStrategy>(m_sim_params, kappa, m_polarized);
49  } else {
50  mP_strategy = std::make_unique<DecouplingApproximationStrategy>(m_sim_params, m_polarized);
51  }
52  if (!mP_strategy)
53  throw Exceptions::ClassInitializationException("Could not create appropriate strategy");
54  mP_strategy->init(mp_layout->formFactorList(), p_iff);
55 }
Pure virtual base class of interference functions.
virtual bool supportsMultilayer() const
Indicates if this interference function can be used with a multilayer (DWBA mode)
Interference function of radial paracrystal.
size_t numberOfSlices() const
const std::vector< FormFactorCoherentSum > & formFactorList() const
const IInterferenceFunction * interferenceFunction() const

References ProcessedLayout::formFactorList(), ProcessedLayout::interferenceFunction(), InterferenceFunctionRadialParaCrystal::kappa(), m_polarized, m_sim_params, mp_layout, mP_strategy, ProcessedLayout::numberOfSlices(), and IInterferenceFunction::supportsMultilayer().

Referenced by LayoutStrategyBuilder().

Here is the call graph for this function:

Member Data Documentation

◆ mp_layout

const ProcessedLayout* LayoutStrategyBuilder::mp_layout
private

Definition at line 41 of file LayoutStrategyBuilder.h.

Referenced by createStrategy().

◆ m_sim_params

SimulationOptions LayoutStrategyBuilder::m_sim_params
private

Definition at line 42 of file LayoutStrategyBuilder.h.

Referenced by createStrategy().

◆ m_polarized

bool LayoutStrategyBuilder::m_polarized
private

polarized computation required?

Definition at line 43 of file LayoutStrategyBuilder.h.

Referenced by createStrategy().

◆ mP_strategy

std::unique_ptr<IInterferenceFunctionStrategy> LayoutStrategyBuilder::mP_strategy
private

Definition at line 44 of file LayoutStrategyBuilder.h.

Referenced by createStrategy(), and releaseStrategy().


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