aboutsummaryrefslogtreecommitdiff
path: root/src/diffraction.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2009-10-23 12:00:29 +0200
committerThomas White <taw@bitwiz.org.uk>2009-10-23 12:00:29 +0200
commitf09b0fc4da61d107dffc0d45489b769326fd8a08 (patch)
tree02ebe57032f0db9e68078c6ed08d413aa8c7b323 /src/diffraction.c
parent2600c19c6d9b994de1cb2d5e634571a55434c707 (diff)
Restructuring ready for new simulation method
Diffstat (limited to 'src/diffraction.c')
-rw-r--r--src/diffraction.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/diffraction.c b/src/diffraction.c
new file mode 100644
index 00000000..93c6a22c
--- /dev/null
+++ b/src/diffraction.c
@@ -0,0 +1,59 @@
+/*
+ * diffraction.c
+ *
+ * Calculate diffraction patterns by Fourier methods
+ *
+ * (c) 2007-2009 Thomas White <thomas.white@desy.de>
+ *
+ * pattern_sim - Simulate diffraction patterns from small crystals
+ *
+ */
+
+
+#include <stdlib.h>
+#include <math.h>
+#include <stdio.h>
+
+#include "image.h"
+#include "utils.h"
+#include "cell.h"
+
+
+static void mapping_rotate(double x, double y, double z,
+ double *ddx, double *ddy, double *ddz,
+ double omega, double tilt)
+{
+ double nx, ny, nz;
+ double x_temp, y_temp, z_temp;
+
+ /* First: rotate image clockwise until tilt axis is aligned
+ * horizontally. */
+ nx = x*cos(omega) + y*sin(omega);
+ ny = -x*sin(omega) + y*cos(omega);
+ nz = z;
+
+ /* Now, tilt about the x-axis ANTICLOCKWISE around +x, i.e. the
+ * "wrong" way. This is because the crystal is rotated in the
+ * experiment, not the Ewald sphere. */
+ x_temp = nx; y_temp = ny; z_temp = nz;
+ nx = x_temp;
+ ny = cos(tilt)*y_temp + sin(tilt)*z_temp;
+ nz = -sin(tilt)*y_temp + cos(tilt)*z_temp;
+
+ /* Finally, reverse the omega rotation to restore the location of the
+ * image in 3D space */
+ x_temp = nx; y_temp = ny; z_temp = nz;
+ nx = x_temp*cos(-omega) + y_temp*sin(-omega);
+ ny = -x_temp*sin(-omega) + y_temp*cos(-omega);
+ nz = z_temp;
+
+ *ddx = nx;
+ *ddy = ny;
+ *ddz = nz;
+}
+
+
+void get_diffraction(struct image *image, UnitCell *cell)
+{
+
+}