25 : m_Strategy(std::move(strategy)){};
40 const std::vector<Slice>& slices)
const
58 const std::vector<Slice>& slices)
const
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);
94 const std::vector<Slice>& slices)
const
std::complex< double > complex_t
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.
std::unique_ptr< ISpecularStrategy > m_Strategy
virtual void eval(SpecularSimulationElement &elem, const std::vector< Slice > &slices) const =0
void setProgressHandler(ProgressHandler *p_progress)
virtual ~SpecularComputationTerm()
void computeIntensity(SpecularSimulationElement &elem, const std::vector< Slice > &slices) const
SpecularComputationTerm(std::unique_ptr< ISpecularStrategy > strategy)
std::unique_ptr< DelayedProgressCounter > mP_progress_counter
void eval(SpecularSimulationElement &elem, const std::vector< Slice > &slices) const override
~SpecularMatrixTerm() override
SpecularMatrixTerm(std::unique_ptr< ISpecularStrategy > strategy)
SpecularScalarTerm(std::unique_ptr< ISpecularStrategy > strategy)
void eval(SpecularSimulationElement &elem, const std::vector< Slice > &slices) const override
~SpecularScalarTerm() override
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.
void setIntensity(double intensity)
const PolarizationHandler & polarizationHandler() const
Returns assigned PolarizationHandler.
double matrix_intensity(const SpecularSimulationElement &elem, const std::unique_ptr< const ILayerRTCoefficients > &coeff)