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.