aboutsummaryrefslogtreecommitdiff
path: root/src/diffraction.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2009-11-19 11:44:26 +0100
committerThomas White <taw@physics.org>2009-11-19 11:44:26 +0100
commit10753755e7d6648f5a2b2bb6f6403caeb6d59f2f (patch)
tree4bd3e7992665ebc4f13380470812f21ccef82b81 /src/diffraction.c
parentcc4ee13ddf7633869408a78e0e0c092b1a03ebf2 (diff)
Correct water calculation
Diffstat (limited to 'src/diffraction.c')
-rw-r--r--src/diffraction.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/diffraction.c b/src/diffraction.c
index e7a16a95..32047ccc 100644
--- a/src/diffraction.c
+++ b/src/diffraction.c
@@ -33,6 +33,10 @@
/* Avogadro's number */
#define AVOGADRO (6.022e23)
+/* Number of slices to divide water column into, where the
+ * slices are coplanar with the beam and the cylinder axis */
+#define N_WATER_SLICES 100
+
static double lattice_factor(struct threevec q, double ax, double ay, double az,
double bx, double by, double bz,
@@ -118,23 +122,27 @@ static double complex water_factor(struct threevec q, double en)
int n = 0;
double s;
double molecules_per_m3;
- double molecules_per_m2;
+ double molecules_per_m;
const double rc = 0.5e-6; /* Radius of cylinder */
const double rb = 1.5e-6; /* Radius of beam */
+ /* Density of water molecules */
molecules_per_m3 = WATER_DENSITY * (AVOGADRO / WATER_MOLAR_MASS);
- molecules_per_m2 = molecules_per_m3 / (2*rb*2*rc);
+
+ /* Number of water molecules per slice */
+ molecules_per_m = (2*rb*2*rc) * molecules_per_m3 / N_WATER_SLICES;
/* s = sin(theta)/lambda = 1/2d = (1/d)/2.0 */
s = modulus(q.u, q.v, q.w) / 2.0;
- for ( x=-rc; x<rc; x+=rc/50.0 ) {
+ for ( x=-rc; x<rc; x+=rc/(N_WATER_SLICES/2) ) {
double ph;
double thickness;
- /* The thickness of a cylinder, axis
- * perpendicular to the beam */
+ /* The thickness of a cylinder in a direction parallel
+ * to the beam. The cylinder axis is perpendicular to
+ * the beam */
thickness = 2.0 * sqrt((rc*rc)-(x*x));
ph = q.u*x;
@@ -143,7 +151,7 @@ static double complex water_factor(struct threevec q, double en)
}
res *= (get_sfac("O", s, en) + 2.0*get_sfac("H", s, en))
- * molecules_per_m2;
+ * molecules_per_m;
/* Correct for sampling of integration */
return (res/n) * (2*rc);