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