15 #ifndef BORNAGAIN_CORE_MULTILAYER_SCALARFRESNELMAP_H
16 #define BORNAGAIN_CORE_MULTILAYER_SCALARFRESNELMAP_H
21 #include <unordered_map>
49 size_t operator()(
const std::pair<double, double>& doubles)
const noexcept;
53 size_t layer_index)
const override;
Defines class IFresnelMap.
Defines class ScalarRTCoefficients.
Holds the necessary information to calculate the radiation wavefunction in every layer for different ...
Interface to access reflection/transmission coefficients.
std::vector< std::unique_ptr< const ILayerRTCoefficients > > coeffs_t
Provides a hash function for a pair of doubles.
Implementation of IFresnelMap for scalar valued reflection/transmission coefficients.
std::unique_ptr< const ILayerRTCoefficients > getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const override
Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector.
ScalarFresnelMap(std::unique_ptr< ISpecularStrategy > strategy)
const ISpecularStrategy::coeffs_t & getCoefficientsFromCache(kvector_t kvec) const
std::unique_ptr< const ILayerRTCoefficients > getCoefficients(const kvector_t &kvec, size_t layer_index) const override
~ScalarFresnelMap() final
std::unordered_map< std::pair< double, double >, ISpecularStrategy::coeffs_t, Hash2Doubles > m_cache
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.