30 return std::hash<double>{}(doubles.first) ^ std::hash<double>{}(doubles.second);
33 std::unique_ptr<const ILayerRTCoefficients>
39 std::unique_ptr<const ILayerRTCoefficients>
44 return std::unique_ptr<const ILayerRTCoefficients>(coeffs[layer_index]->clone());
47 return std::unique_ptr<const ILayerRTCoefficients>(coef_vector[layer_index]->clone());
52 std::pair<double, double> k2_theta(kvec.
mag2(), kvec.
theta());
53 auto it =
m_cache.find(k2_theta);
Defines class ScalarFresnelMap.
Defines class SimulationElement.
double mag2() const
Returns magnitude squared of the vector.
double theta() const
Returns polar angle.
Holds the necessary information to calculate the radiation wavefunction in every layer for different ...
std::vector< Slice > m_slices
std::unique_ptr< ISpecularStrategy > m_Strategy
std::vector< std::unique_ptr< const ILayerRTCoefficients > > coeffs_t
size_t operator()(const std::pair< double, double > &doubles) const noexcept
Returns hash value of a pair of doubles, computed by exclusive-or of the component hash values.
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.
kvector_t getMeanKf() const