diff options
author | Thomas White <taw@bitwiz.org.uk> | 2009-10-23 12:00:29 +0200 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2009-10-23 12:00:29 +0200 |
commit | f09b0fc4da61d107dffc0d45489b769326fd8a08 (patch) | |
tree | 02ebe57032f0db9e68078c6ed08d413aa8c7b323 /src/diffraction.c | |
parent | 2600c19c6d9b994de1cb2d5e634571a55434c707 (diff) |
Restructuring ready for new simulation method
Diffstat (limited to 'src/diffraction.c')
-rw-r--r-- | src/diffraction.c | 59 |
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) +{ + +} |