24 SpecularComputationTerm::SpecularComputationTerm(std::unique_ptr<ISpecularStrategy> strategy)
25 : m_Strategy(std::move(strategy)){};
27 SpecularScalarTerm::SpecularScalarTerm(std::unique_ptr<ISpecularStrategy> strategy)
32 SpecularComputationTerm::~SpecularComputationTerm() =
default;
34 void SpecularComputationTerm::setProgressHandler(
ProgressHandler* p_progress)
36 mP_progress_counter = std::make_unique<DelayedProgressCounter>(p_progress, 100);
40 const std::vector<Slice>& slices)
const
47 if (mP_progress_counter)
48 mP_progress_counter->stepProgress();
55 SpecularScalarTerm::~SpecularScalarTerm() =
default;
58 const std::vector<Slice>& slices)
const
60 const auto coeff = m_Strategy->Execute(slices, elem.
produceKz(slices));
61 elem.setIntensity(std::norm(coeff.front()->getScalarR()));
72 const std::unique_ptr<const ILayerRTCoefficients>& coeff)
77 const auto R = coeff->getReflectionMatrix();
79 const complex_t result = (polarization * R.adjoint() * analyzer * R).trace();
81 return std::abs(result);
86 SpecularMatrixTerm::SpecularMatrixTerm(std::unique_ptr<ISpecularStrategy> strategy)
91 SpecularMatrixTerm::~SpecularMatrixTerm() =
default;
94 const std::vector<Slice>& slices)
const
96 const auto coeff = m_Strategy->Execute(slices, elem.
produceKz(slices));
97 elem.setIntensity(matrix_intensity(elem, coeff.front()));
Defines class DelayedProgressCounter.
Defines and implements class ILayerRTCoefficients.
Defines classes SpecularComputationTerm, SpecularScalarTerm, SpecularMatrixTerm.
Declares the class SpecularSimulationElement.
Eigen::Matrix2cd getAnalyzerOperator() const
Gets the polarization analyzer operator (in spin basis along z-axis)
Eigen::Matrix2cd getPolarization() const
Gets the polarization density matrix (in spin basis along z-axis)
Maintains information about progress of a computation.
Computes the specular scattering.
Data stucture containing both input and output of a single image pixel for specular simulation.
bool isCalculated() const
Returns calculation flag (if it's false, zero intensity is assigned to the element)
std::vector< complex_t > produceKz(const std::vector< Slice > &slices)
Returns kz values for Abeles computation of reflection/transition coefficients.
const PolarizationHandler & polarizationHandler() const
Returns assigned PolarizationHandler.