19 ScalarFresnelMap::ScalarFresnelMap(std::unique_ptr<ISpecularStrategy> strategy)
24 ScalarFresnelMap::~ScalarFresnelMap() =
default;
27 size_t ScalarFresnelMap::Hash2Doubles::operator()(
const std::pair<double, double>& doubles)
const
30 return std::hash<double>{}(doubles.first) ^ std::hash<double>{}(doubles.second);
33 std::unique_ptr<const ILayerRTCoefficients>
36 return getCoefficients(-sim_element.getMeanKf(), layer_index);
39 std::unique_ptr<const ILayerRTCoefficients>
40 ScalarFresnelMap::getCoefficients(
const kvector_t& kvec,
size_t layer_index)
const
43 auto coeffs = m_Strategy->Execute(m_slices, kvec);
44 return std::unique_ptr<const ILayerRTCoefficients>(coeffs[layer_index]->clone());
46 const auto& coef_vector = getCoefficientsFromCache(kvec);
47 return std::unique_ptr<const ILayerRTCoefficients>(coef_vector[layer_index]->clone());
50 const ISpecularStrategy::coeffs_t& ScalarFresnelMap::getCoefficientsFromCache(
kvector_t kvec)
const
52 std::pair<double, double> k2_theta(kvec.
mag2(), kvec.
theta());
53 auto it = m_cache.find(k2_theta);
54 if (it == m_cache.end()) {
55 it = m_cache.emplace(k2_theta, m_Strategy->Execute(m_slices, kvec)).first;
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::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.
Data stucture containing both input and output of a single detector cell.