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

Public Member Functions

 SpecularScalarTerm (std::unique_ptr< ISpecularStrategy > strategy)
 
void setProgressHandler (ProgressHandler *p_progress)
 
void computeIntensity (SpecularSimulationElement &elem, const std::vector< Slice > &slices) const
 

Protected Attributes

std::unique_ptr< ISpecularStrategym_Strategy
 

Private Member Functions

 ~SpecularScalarTerm () override
 
void eval (SpecularSimulationElement &elem, const std::vector< Slice > &slices) const override
 

Private Attributes

std::unique_ptr< DelayedProgressCountermP_progress_counter
 

Detailed Description

Computes the specular scattering for a scalar sample Used by SpecularComputation.

Definition at line 60 of file SpecularComputationTerm.h.

Constructor & Destructor Documentation

◆ SpecularScalarTerm()

SpecularScalarTerm::SpecularScalarTerm ( std::unique_ptr< ISpecularStrategy strategy)

Definition at line 27 of file SpecularComputationTerm.cpp.

28  : SpecularComputationTerm(std::move(strategy))
29 {
30 }
SpecularComputationTerm(std::unique_ptr< ISpecularStrategy > strategy)

◆ ~SpecularScalarTerm()

SpecularScalarTerm::~SpecularScalarTerm ( )
overrideprivatedefault

Member Function Documentation

◆ eval()

void SpecularScalarTerm::eval ( SpecularSimulationElement elem,
const std::vector< Slice > &  slices 
) const
overrideprivatevirtual

Implements SpecularComputationTerm.

Definition at line 57 of file SpecularComputationTerm.cpp.

59 {
60  const auto coeff = m_Strategy->Execute(slices, elem.produceKz(slices));
61  elem.setIntensity(std::norm(coeff.front()->getScalarR()));
62 }
std::unique_ptr< ISpecularStrategy > m_Strategy
std::vector< complex_t > produceKz(const std::vector< Slice > &slices)
Returns kz values for Abeles computation of reflection/transition coefficients.
void setIntensity(double intensity)

References SpecularComputationTerm::m_Strategy, SpecularSimulationElement::produceKz(), and SpecularSimulationElement::setIntensity().

Here is the call graph for this function:

◆ setProgressHandler()

void SpecularComputationTerm::setProgressHandler ( ProgressHandler p_progress)
inherited

Definition at line 34 of file SpecularComputationTerm.cpp.

35 {
36  mP_progress_counter = std::make_unique<DelayedProgressCounter>(p_progress, 100);
37 }
std::unique_ptr< DelayedProgressCounter > mP_progress_counter

References SpecularComputationTerm::mP_progress_counter.

◆ computeIntensity()

void SpecularComputationTerm::computeIntensity ( SpecularSimulationElement elem,
const std::vector< Slice > &  slices 
) const
inherited

Definition at line 39 of file SpecularComputationTerm.cpp.

41 {
42  if (!elem.isCalculated())
43  return;
44 
45  eval(elem, slices);
46 
48  mP_progress_counter->stepProgress();
49 }
virtual void eval(SpecularSimulationElement &elem, const std::vector< Slice > &slices) const =0
bool isCalculated() const
Returns calculation flag (if it's false, zero intensity is assigned to the element)

References SpecularComputationTerm::eval(), SpecularSimulationElement::isCalculated(), and SpecularComputationTerm::mP_progress_counter.

Here is the call graph for this function:

Member Data Documentation

◆ m_Strategy

std::unique_ptr<ISpecularStrategy> SpecularComputationTerm::m_Strategy
protectedinherited

Definition at line 50 of file SpecularComputationTerm.h.

Referenced by eval(), and SpecularMatrixTerm::eval().

◆ mP_progress_counter

std::unique_ptr<DelayedProgressCounter> SpecularComputationTerm::mP_progress_counter
privateinherited

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