15 #ifndef BORNAGAIN_CORE_MULTILAYER_MATRIXFRESNELMAP_H
16 #define BORNAGAIN_CORE_MULTILAYER_MATRIXFRESNELMAP_H
23 #include <unordered_map>
43 std::unique_ptr<const ILayerRTCoefficients>
45 size_t layer_index)
const final override;
47 void setSlices(
const std::vector<Slice>& slices)
final override;
54 size_t operator()(
const kvector_t& kvec)
const noexcept;
57 using CoefficientHash = std::unordered_map<kvector_t, ISpecularStrategy::coeffs_t, HashKVector>;
59 std::unique_ptr<const ILayerRTCoefficients> getCoefficients(
const kvector_t& kvec,
60 size_t layer_index)
const override;
61 std::unique_ptr<const ILayerRTCoefficients> getCoefficients(
const kvector_t& kvec,
63 const std::vector<Slice>& slices,
64 CoefficientHash& hash_table)
const;
65 std::vector<Slice> m_inverted_slices;
66 mutable CoefficientHash m_hash_table_out;
67 mutable CoefficientHash m_hash_table_in;
69 const ISpecularStrategy::coeffs_t& getCoefficientsFromCache(
kvector_t kvec,
70 const std::vector<Slice>& slices,
71 CoefficientHash& hash_table)
const;
Defines class IFresnelMap.
Defines class MatrixRTCoefficients.
Defines class SpecularMagneticStrategy.
Holds the necessary information to calculate the radiation wavefunction in every layer for different ...
Interface to access reflection/transmission coefficients.
Implementation of IFresnelMap for matrix valued reflection/transmission coefficients.
std::unique_ptr< const ILayerRTCoefficients > getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const final override
Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector.
Data stucture containing both input and output of a single detector cell.
Data structure containing the data of a single slice, for calculating the Fresnel coefficients.