20 SSCAHelper::SSCAHelper(
double kappa) : m_kappa(kappa), m_mean_radius{} {}
22 void SSCAHelper::init(
const std::vector<FormFactorCoherentSum>& ff_wrappers)
25 for (
auto& ffw : ff_wrappers)
26 m_mean_radius += ffw.relativeAbundance() * ffw.radialExtension();
29 complex_t SSCAHelper::getCharacteristicSizeCoupling(
30 double qp,
const std::vector<FormFactorCoherentSum>& ff_wrappers)
const
33 for (
auto& ffw : ff_wrappers) {
34 double radial_extension = ffw.radialExtension();
36 ffw.relativeAbundance() * calculatePositionOffsetPhase(2.0 * qp, radial_extension);
41 complex_t SSCAHelper::getCharacteristicDistribution(
double qp,
48 return p_iff_radial->FTPDF(qp);
51 complex_t SSCAHelper::calculatePositionOffsetPhase(
double qp,
double radial_extension)
const
53 return exp_I(m_kappa * qp * (radial_extension - m_mean_radius));
57 SSCAHelper::getMeanFormfactorNorm(
double qp,
const std::vector<complex_t>& precomputed_ff,
58 const std::vector<FormFactorCoherentSum>& ff_wrappers)
const
60 complex_t ff_orig = 0., ff_conj = 0.;
61 for (
size_t i = 0; i < ff_wrappers.size(); ++i) {
62 double radial_extension = ff_wrappers[i].radialExtension();
64 ff_wrappers[i].relativeAbundance() * calculatePositionOffsetPhase(qp, radial_extension);
65 ff_orig += prefac * precomputed_ff[i];
66 ff_conj += prefac * std::conj(precomputed_ff[i]);
68 return ff_orig * ff_conj;
71 void SSCAHelper::getMeanFormfactors(
72 double qp, Eigen::Matrix2cd& ff_orig, Eigen::Matrix2cd& ff_conj,
73 const InterferenceFunctionUtils::matrixFFVector_t& precomputed_ff,
74 const std::vector<FormFactorCoherentSum>& ff_wrappers)
const
76 ff_orig = Eigen::Matrix2cd::Zero();
77 ff_conj = Eigen::Matrix2cd::Zero();
78 for (
size_t i = 0; i < ff_wrappers.size(); ++i) {
79 double radial_extension = ff_wrappers[i].radialExtension();
81 ff_wrappers[i].relativeAbundance() * calculatePositionOffsetPhase(qp, radial_extension);
82 ff_orig += prefac * precomputed_ff[i];
83 ff_conj += prefac * precomputed_ff[i].adjoint();
complex_t exp_I(complex_t z)
Returns exp(I*z), where I is the imaginary unit.
Defines many exception classes in namespace Exceptionss.
Defines class InterferenceFunctionRadialParaCrystal.
Defines class SSCAHelper.
Pure virtual base class of interference functions.
Interference function of radial paracrystal.