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

Classes

class  HashKVector
 

Public Member Functions

 MatrixFresnelMap (std::unique_ptr< ISpecularStrategy > strategy)
 
 ~MatrixFresnelMap () override
 
 MatrixFresnelMap (const MatrixFresnelMap &other)=delete
 
MatrixFresnelMapoperator= (const MatrixFresnelMap &other)=delete
 
std::unique_ptr< const ILayerRTCoefficientsgetOutCoefficients (const SimulationElement &sim_element, size_t layer_index) const final override
 
void setSlices (const std::vector< Slice > &slices) final override
 
template<typename T >
std::unique_ptr< const ILayerRTCoefficientsgetInCoefficients (const T &sim_element, size_t layer_index) const
 
const std::vector< Slice > & slices () const
 
void disableCaching ()
 

Protected Attributes

std::vector< Slicem_slices
 
bool m_use_cache
 
std::unique_ptr< ISpecularStrategym_Strategy
 

Private Types

using CoefficientHash = std::unordered_map< kvector_t, ISpecularStrategy::coeffs_t, HashKVector >
 

Private Member Functions

std::unique_ptr< const ILayerRTCoefficientsgetCoefficients (const kvector_t &kvec, size_t layer_index) const override
 
std::unique_ptr< const ILayerRTCoefficientsgetCoefficients (const kvector_t &kvec, size_t layer_index, const std::vector< Slice > &slices, CoefficientHash &hash_table) const
 
const ISpecularStrategy::coeffs_tgetCoefficientsFromCache (kvector_t kvec, const std::vector< Slice > &slices, CoefficientHash &hash_table) const
 

Private Attributes

std::vector< Slicem_inverted_slices
 
CoefficientHash m_hash_table_out
 
CoefficientHash m_hash_table_in
 

Detailed Description

Implementation of IFresnelMap for matrix valued reflection/transmission coefficients.

Definition at line 34 of file MatrixFresnelMap.h.

Member Typedef Documentation

◆ CoefficientHash

Definition at line 57 of file MatrixFresnelMap.h.

Constructor & Destructor Documentation

◆ MatrixFresnelMap() [1/2]

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

Definition at line 21 of file MatrixFresnelMap.cpp.

22  : IFresnelMap(std::move(strategy)){};
IFresnelMap(std::unique_ptr< ISpecularStrategy > strategy)
Definition: IFresnelMap.cpp:18

◆ ~MatrixFresnelMap()

MatrixFresnelMap::~MatrixFresnelMap ( )
overridedefault

◆ MatrixFresnelMap() [2/2]

MatrixFresnelMap::MatrixFresnelMap ( const MatrixFresnelMap other)
delete

Member Function Documentation

◆ operator=()

MatrixFresnelMap& MatrixFresnelMap::operator= ( const MatrixFresnelMap other)
delete

◆ getOutCoefficients()

std::unique_ptr< const ILayerRTCoefficients > MatrixFresnelMap::getOutCoefficients ( const SimulationElement sim_element,
size_t  layer_index 
) const
finaloverridevirtual

Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector.

Implements IFresnelMap.

Definition at line 34 of file MatrixFresnelMap.cpp.

35 {
36  return getCoefficients(-sim_element.getMeanKf(), layer_index, m_inverted_slices,
38 }
std::vector< Slice > m_inverted_slices
std::unique_ptr< const ILayerRTCoefficients > getCoefficients(const kvector_t &kvec, size_t layer_index) const override
CoefficientHash m_hash_table_out
kvector_t getMeanKf() const

References getCoefficients(), SimulationElement::getMeanKf(), m_hash_table_out, and m_inverted_slices.

Here is the call graph for this function:

◆ setSlices()

void MatrixFresnelMap::setSlices ( const std::vector< Slice > &  slices)
finaloverridevirtual

Reimplemented from IFresnelMap.

Definition at line 40 of file MatrixFresnelMap.cpp.

41 {
43  m_inverted_slices.clear();
44  for (auto slice : slices) {
45  slice.invertBField();
46  m_inverted_slices.push_back(slice);
47  }
48 }
virtual void setSlices(const std::vector< Slice > &slices)
Definition: IFresnelMap.cpp:23
const std::vector< Slice > & slices() const
Definition: IFresnelMap.cpp:28

References m_inverted_slices, IFresnelMap::setSlices(), and IFresnelMap::slices().

Here is the call graph for this function:

◆ getCoefficients() [1/2]

std::unique_ptr< const ILayerRTCoefficients > MatrixFresnelMap::getCoefficients ( const kvector_t kvec,
size_t  layer_index 
) const
overrideprivatevirtual

Implements IFresnelMap.

Definition at line 51 of file MatrixFresnelMap.cpp.

52 {
53  return getCoefficients(kvec, layer_index, m_slices, m_hash_table_in);
54 }
std::vector< Slice > m_slices
Definition: IFresnelMap.h:57
CoefficientHash m_hash_table_in

References m_hash_table_in, and IFresnelMap::m_slices.

Referenced by getOutCoefficients().

◆ getCoefficients() [2/2]

std::unique_ptr< const ILayerRTCoefficients > MatrixFresnelMap::getCoefficients ( const kvector_t kvec,
size_t  layer_index,
const std::vector< Slice > &  slices,
CoefficientHash hash_table 
) const
private

Definition at line 57 of file MatrixFresnelMap.cpp.

60 {
61  if (!m_use_cache) {
62  auto coeffs = m_Strategy->Execute(slices, kvec);
63  return std::unique_ptr<const ILayerRTCoefficients>(coeffs[layer_index]->clone());
64  }
65  const auto& coef_vector = getCoefficientsFromCache(kvec, slices, hash_table);
66  return std::unique_ptr<const ILayerRTCoefficients>(coef_vector[layer_index]->clone());
67 }
std::unique_ptr< ISpecularStrategy > m_Strategy
Definition: IFresnelMap.h:60
bool m_use_cache
Definition: IFresnelMap.h:58
const ISpecularStrategy::coeffs_t & getCoefficientsFromCache(kvector_t kvec, const std::vector< Slice > &slices, CoefficientHash &hash_table) const

References getCoefficientsFromCache(), IFresnelMap::m_Strategy, IFresnelMap::m_use_cache, and IFresnelMap::slices().

Here is the call graph for this function:

◆ getCoefficientsFromCache()

const ISpecularStrategy::coeffs_t & MatrixFresnelMap::getCoefficientsFromCache ( kvector_t  kvec,
const std::vector< Slice > &  slices,
MatrixFresnelMap::CoefficientHash hash_table 
) const
private

Definition at line 70 of file MatrixFresnelMap.cpp.

72 {
73  auto it = hash_table.find(kvec);
74  if (it == hash_table.end())
75  it = hash_table.emplace(kvec, m_Strategy->Execute(slices, kvec)).first;
76  return it->second;
77 }

References IFresnelMap::m_Strategy, and IFresnelMap::slices().

Referenced by getCoefficients().

Here is the call graph for this function:

◆ getInCoefficients()

template<typename T >
std::unique_ptr<const ILayerRTCoefficients> IFresnelMap::getInCoefficients ( const T &  sim_element,
size_t  layer_index 
) const
inlineinherited

Retrieves the amplitude coefficients for an incoming wavevector.

Definition at line 41 of file IFresnelMap.h.

43  {
44  return getCoefficients(sim_element.getKi(), layer_index);
45  }
virtual std::unique_ptr< const ILayerRTCoefficients > getCoefficients(const kvector_t &kvec, size_t layer_index) const =0

References IFresnelMap::getCoefficients().

Referenced by DepthProbeComputationTerm::compute(), GISASSpecularComputation::compute(), FormFactorCoherentPart::evaluate(), FormFactorCoherentPart::evaluatePol(), and RoughMultiLayerComputation::get_sum8terms().

Here is the call graph for this function:

◆ slices()

const std::vector< Slice > & IFresnelMap::slices ( ) const
inherited

Definition at line 28 of file IFresnelMap.cpp.

29 {
30  return m_slices;
31 }

References IFresnelMap::m_slices.

Referenced by getCoefficients(), getCoefficientsFromCache(), IFresnelMap::setSlices(), and setSlices().

◆ disableCaching()

void IFresnelMap::disableCaching ( )
inherited

Disables caching of previously computed Fresnel coefficients.

Definition at line 35 of file IFresnelMap.cpp.

36 {
37  m_use_cache = false;
38 }

References IFresnelMap::m_use_cache.

Member Data Documentation

◆ m_inverted_slices

std::vector<Slice> MatrixFresnelMap::m_inverted_slices
private

Definition at line 65 of file MatrixFresnelMap.h.

Referenced by getOutCoefficients(), and setSlices().

◆ m_hash_table_out

CoefficientHash MatrixFresnelMap::m_hash_table_out
mutableprivate

Definition at line 66 of file MatrixFresnelMap.h.

Referenced by getOutCoefficients().

◆ m_hash_table_in

CoefficientHash MatrixFresnelMap::m_hash_table_in
mutableprivate

Definition at line 67 of file MatrixFresnelMap.h.

Referenced by getCoefficients().

◆ m_slices

std::vector<Slice> IFresnelMap::m_slices
protectedinherited

◆ m_use_cache

bool IFresnelMap::m_use_cache
protectedinherited

◆ m_Strategy

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

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