From 58a26d3af6b3a10f7710f0f5dddd7f1a61aab52d Mon Sep 17 00:00:00 2001 From: Walter Van Herck <w.van.herck@fz-juelich.de> Date: Fri, 6 Dec 2013 12:49:07 +0100 Subject: [PATCH] Provided implementation for cone distribution function (in Fourier space) --- Core/Algorithms/inc/FTDistributions.h | 2 +- Core/Algorithms/src/FTDistributions.cpp | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Core/Algorithms/inc/FTDistributions.h b/Core/Algorithms/inc/FTDistributions.h index 6a8bf3a811b..f1b901fc5fa 100644 --- a/Core/Algorithms/inc/FTDistributions.h +++ b/Core/Algorithms/inc/FTDistributions.h @@ -148,7 +148,7 @@ public: virtual double evaluate(double qx, double qy) const; private: - double BesselJ0(double value) const; + double BesselJ0(double value, void *params) const; }; #endif /* FTDISTRIBUTIONS_H_ */ diff --git a/Core/Algorithms/src/FTDistributions.cpp b/Core/Algorithms/src/FTDistributions.cpp index 8ad5fc27627..a4c6194010a 100644 --- a/Core/Algorithms/src/FTDistributions.cpp +++ b/Core/Algorithms/src/FTDistributions.cpp @@ -15,6 +15,7 @@ #include "FTDistributions.h" #include "MathFunctions.h" +#include "MemberFunctionIntegrator.h" void IFTDistribution2D::transformToStarBasis(double qX, double qY, double alpha, double a, double b, double& qa, double& qb) const @@ -152,11 +153,20 @@ double FTDistribution2DCone::evaluate(double qx, double qy) const { double scaled_q = std::sqrt(qx*qx*m_coherence_length_x*m_coherence_length_x + qy*qy*m_coherence_length_y*m_coherence_length_y); - - return 0.0; + if (scaled_q<Numeric::double_epsilon) { + return 1.0/6.0 - scaled_q*scaled_q/80.0; + } + MemberFunctionIntegrator<FTDistribution2DCone>::mem_function + p_member_function = &FTDistribution2DCone::BesselJ0; + MemberFunctionIntegrator<FTDistribution2DCone> + integrator(p_member_function, this); + double integral = integrator.integrate(0.0, scaled_q, (void*)0); + return (integral/scaled_q - MathFunctions::Bessel_J0(scaled_q) ) + /scaled_q/scaled_q; } -double FTDistribution2DCone::BesselJ0(double value) const +double FTDistribution2DCone::BesselJ0(double value, void *params) const { + (void)params; return MathFunctions::Bessel_J0(value); } -- GitLab