From 03401c64a97344f7c551bde8990e572943c70816 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (laptop)" <j.wuttke@fz-juelich.de>
Date: Tue, 14 Aug 2012 09:33:17 +0200
Subject: [PATCH] Zorn's multiple-scattering correction for elastic scattering
 =>   functions zorn, zorn2

---
 pub/src/func.cpp | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/pub/src/func.cpp b/pub/src/func.cpp
index c6b4801c..eac3d526 100644
--- a/pub/src/func.cpp
+++ b/pub/src/func.cpp
@@ -204,6 +204,17 @@ double func_kwws( double v, double t, double b ){
     if( b<0.1 || b>2.0 ) return 0;
     return t/PI*kwwsf( (float)(v*t), (float)b ); }
 
+double func_zorn( double v, double vavg, double s ) {
+    if( s<=0 || s>=1 ) return 0;
+    return (1-s)*(v+s*vavg*vavg/(1-s*vavg)); }
+
+double func_zorn_gauss( double q, double u2, double s ) {
+    if( s<=0 || s>=1 ) return 0;
+    double qmax = 4*PI/6.27; // Si111
+    double v = exp(-u2*SQR(q));
+    double vavg = (1-exp(-u2*SQR(qmax))) / (u2*SQR(qmax));
+    return (1-s)*(v+s*vavg*vavg/(1-s*vavg)); }
+
 //**************************************************************************//
 //*   Coordinate concatenation                                             *//
 //**************************************************************************//
@@ -456,6 +467,10 @@ void NFunctions::initialize(void) {
         "(w,tau,b): Fourier cosine transform (t->w) of exp((t/tau)^b)" ).register_me();
     CFunc( "kwws", func_kwws, 0, 0,
         "(w,tau,b): Fourier sine transform (t->w) of exp((t/tau)^b)" ).register_me();
+    CFunc( "zorn", func_zorn, 0, 0,
+        "(I,<I>,s): Zorn's multiple-scattering corrected elastic intensity" ).register_me();
+    CFunc( "zorn2", func_zorn_gauss, 0, 0,
+        "(q,<u^2>,s): Zorn's multiple-scattering corrected Gaussian elastic intensity for Si111" ).register_me();
     CFunc( "rehavneg", func_re_havneg, 0, 0,
         "(x,y,z): real part of the Havriliak-Negami function"
         ).register_me();
-- 
GitLab