21 MatrixFresnelMap::MatrixFresnelMap(std::unique_ptr<ISpecularStrategy> strategy)
24 MatrixFresnelMap::~MatrixFresnelMap() =
default;
27 size_t MatrixFresnelMap::HashKVector::operator()(
const kvector_t& kvec)
const noexcept
29 return std::hash<double>{}(kvec.x()) ^ std::hash<double>{}(kvec.y())
30 ^ std::hash<double>{}(kvec.z());
33 std::unique_ptr<const ILayerRTCoefficients>
36 return getCoefficients(-sim_element.getMeanKf(), layer_index, m_inverted_slices,
40 void MatrixFresnelMap::setSlices(
const std::vector<Slice>& slices)
42 IFresnelMap::setSlices(slices);
43 m_inverted_slices.clear();
44 for (
auto slice : slices) {
46 m_inverted_slices.push_back(slice);
50 std::unique_ptr<const ILayerRTCoefficients>
51 MatrixFresnelMap::getCoefficients(
const kvector_t& kvec,
size_t layer_index)
const
53 return getCoefficients(kvec, layer_index, m_slices, m_hash_table_in);
56 std::unique_ptr<const ILayerRTCoefficients>
57 MatrixFresnelMap::getCoefficients(
const kvector_t& kvec,
size_t layer_index,
58 const std::vector<Slice>& slices,
59 CoefficientHash& hash_table)
const
62 auto coeffs = m_Strategy->Execute(slices, kvec);
63 return std::unique_ptr<const ILayerRTCoefficients>(coeffs[layer_index]->clone());
65 const auto& coef_vector = getCoefficientsFromCache(kvec, slices, hash_table);
66 return std::unique_ptr<const ILayerRTCoefficients>(coef_vector[layer_index]->clone());
69 const ISpecularStrategy::coeffs_t&
70 MatrixFresnelMap::getCoefficientsFromCache(
kvector_t kvec,
const std::vector<Slice>& slices,
71 MatrixFresnelMap::CoefficientHash& hash_table)
const
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;
Defines class MatrixFresnelMap.
Defines class SimulationElement.
Defines class SpecularMagneticOldStrategy.
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 final override
Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector.
Data stucture containing both input and output of a single detector cell.