39 double intensity = 0.0;
44 if (std::isnan(ff.real()))
46 "DecouplingApproximationStrategy::scalarCalculation() -> Error! Amplitude is NaN");
48 amplitude += fraction * ff;
49 intensity += fraction * std::norm(ff);
51 double amplitude_norm = std::norm(amplitude);
53 return intensity + amplitude_norm * (itf_function - 1.0);
60 Eigen::Matrix2cd mean_intensity = Eigen::Matrix2cd::Zero();
61 Eigen::Matrix2cd mean_amplitude = Eigen::Matrix2cd::Zero();
66 Eigen::Matrix2cd ff = precomputed_ff[i];
69 "DecouplingApproximationStrategy::polarizedCalculation() -> "
70 "Error! Form factor contains NaN or infinite");
72 mean_amplitude += fraction * ff;
73 mean_intensity += fraction * (ff * polarization_handler.getPolarization() * ff.adjoint());
75 Eigen::Matrix2cd amplitude_matrix = polarization_handler.getAnalyzerOperator() * mean_amplitude
76 * polarization_handler.getPolarization()
77 * mean_amplitude.adjoint();
78 Eigen::Matrix2cd intensity_matrix = polarization_handler.getAnalyzerOperator() * mean_intensity;
79 double amplitude_trace = std::abs(amplitude_matrix.trace());
80 double intensity_trace = std::abs(intensity_matrix.trace());
82 return intensity_trace + amplitude_trace * (itf_function - 1.0);
std::complex< double > complex_t
Defines class DecouplingApproximationStrategy.
Defines many exception classes in namespace Exceptionss.
Defines and implements the interface class IInterferenceFunction.
Defines helper functions for InterferenceFunctions and Strategies.
Defines namespace MathFunctions.
Defines class RealParameter.
Defines class SimulationElement.
double scalarCalculation(const SimulationElement &sim_element) const override
Returns the total incoherent and coherent scattering intensity for given kf and for one particle layo...
double polarizedCalculation(const SimulationElement &sim_element) const override
This is the polarized version.
DecouplingApproximationStrategy(SimulationOptions sim_params, bool polarized)
Base class of all interference function strategy classes.
std::vector< FormFactorCoherentSum > m_formfactor_wrappers
std::unique_ptr< IInterferenceFunction > mP_iff
Data stucture containing both input and output of a single detector cell.
kvector_t getMeanQ() const
const PolarizationHandler & polarizationHandler() const
Returns assigned PolarizationHandler.
Collect the different options for simulation.
std::vector< complex_t > PrecomputeScalarFormFactors(const SimulationElement &sim_element, const std::vector< FormFactorCoherentSum > &ff_wrappers)
matrixFFVector_t PrecomputePolarizedFormFactors(const SimulationElement &sim_element, const std::vector< FormFactorCoherentSum > &ff_wrappers)