BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SpecularScalarTerm Class Reference

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

Inheritance diagram for SpecularScalarTerm:
[legend]
Collaboration diagram for SpecularScalarTerm:
[legend]

Public Member Functions

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

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< DelayedProgressCounterm_progress_counter
 

Detailed Description

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

Definition at line 64 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

◆ 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  m_progress_counter->stepProgress();
49 }
std::unique_ptr< DelayedProgressCounter > m_progress_counter
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::m_progress_counter.

Here is the call graph for this function:

◆ 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 =
61  std::get<complex_t>(m_Strategy->computeTopLayerR(slices, elem.produceKz(slices)));
62  elem.setIntensity(std::norm(coeff));
63 }
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  m_progress_counter = std::make_unique<DelayedProgressCounter>(p_progress, 100);
37 }

References SpecularComputationTerm::m_progress_counter.

Member Data Documentation

◆ m_progress_counter

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

◆ m_Strategy

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

Definition at line 54 of file SpecularComputationTerm.h.

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


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