40 double diffuse_intensity = 0.0;
45 diffuse_intensity += fraction * std::norm(ff);
51 double iff = 2.0 * (mean_ff_norm * omega / (1.0 - p2kappa * omega)).real();
53 return diffuse_intensity + dw_factor * iff;
60 Eigen::Matrix2cd diffuse_matrix = Eigen::Matrix2cd::Zero();
64 Eigen::Matrix2cd ff = precomputed_ff[i];
66 diffuse_matrix += fraction * (ff * polarization_handler.getPolarization() * ff.adjoint());
68 Eigen::Matrix2cd mff_orig, mff_conj;
72 Eigen::Matrix2cd interference_matrix = (2.0 * omega / (1.0 - p2kappa * omega))
73 * polarization_handler.getAnalyzerOperator() * mff_orig
74 * polarization_handler.getPolarization() * mff_conj;
75 Eigen::Matrix2cd diffuse_matrix2 = polarization_handler.getAnalyzerOperator() * diffuse_matrix;
76 double interference_trace = std::abs(interference_matrix.trace());
77 double diffuse_trace = std::abs(diffuse_matrix2.trace());
79 return diffuse_trace + dw_factor * interference_trace;
std::complex< double > complex_t
Defines and implements the interface class IInterferenceFunction.
Defines class SSCApproximationStrategy.
Defines class SimulationElement.
double magxy() const
Returns distance from z axis.
Base class of all interference function strategy classes.
std::vector< FormFactorCoherentSum > m_formfactor_wrappers
std::unique_ptr< IInterferenceFunction > mP_iff
complex_t getMeanFormfactorNorm(double qp, const std::vector< complex_t > &precomputed_ff, const std::vector< FormFactorCoherentSum > &ff_wrappers) const
void init(const std::vector< FormFactorCoherentSum > &ff_wrappers)
void getMeanFormfactors(double qp, Eigen::Matrix2cd &ff_orig, Eigen::Matrix2cd &ff_conj, const InterferenceFunctionUtils::matrixFFVector_t &precomputed_ff, const std::vector< FormFactorCoherentSum > &ff_wrappers) const
complex_t getCharacteristicDistribution(double qp, const IInterferenceFunction *p_iff) const
complex_t getCharacteristicSizeCoupling(double qp, const std::vector< FormFactorCoherentSum > &ff_wrappers) const
double polarizedCalculation(const SimulationElement &sim_element) const override
This is the polarized version.
void strategy_specific_post_init() override
double scalarCalculation(const SimulationElement &sim_element) const override
Returns the total scattering intensity for given kf and for one particle layout (implied by the given...
SSCApproximationStrategy(SimulationOptions sim_params, double kappa, bool polarized)
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)