From 3e7ab3ad8fa154e0ae724757c8b7c8489b70fb99 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 25 Nov 2009 16:28:37 +0100 Subject: Tidy up utils module --- src/utils.c | 106 ------------------------------------------------------------ src/utils.h | 37 +++++++++++++-------- 2 files changed, 23 insertions(+), 120 deletions(-) (limited to 'src') diff --git a/src/utils.c b/src/utils.c index 034a2b2d..d5e1b874 100644 --- a/src/utils.c +++ b/src/utils.c @@ -16,50 +16,6 @@ #include "utils.h" -/* Return the MOST POSITIVE of two numbers */ -unsigned int biggest(signed int a, signed int b) -{ - if ( a>b ) { - return a; - } - return b; -} - - -/* Return the LEAST POSITIVE of two numbers */ -unsigned int smallest(signed int a, signed int b) -{ - if ( a 0 ) return +1; - return 0; -} - - -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 progress_bar(int val, int total) { double frac; diff --git a/src/utils.h b/src/utils.h index 8e9fb6cc..9e6458cf 100644 --- a/src/utils.h +++ b/src/utils.h @@ -48,26 +48,35 @@ struct quaternion }; -extern unsigned int biggest(signed int a, signed int b); -extern unsigned int smallest(signed int a, signed int b); -extern double distance(double x1, double y1, double x2, double y2); -extern double modulus(double x, double y, double z); -extern double modulus_squared(double x, double y, double z); +/* --------------------------- Useful functions ----------------------------- */ + extern double angle_between(double x1, double y1, double z1, double x2, double y2, double z2); -extern double angle_between_d(double x1, double y1, double z1, - double x2, double y2, double z2); -extern double lambda(double voltage); -extern double distance3d(double x1, double y1, double z1, - double x2, double y2, double z2); extern size_t skipspace(const char *s); extern void chomp(char *s); -extern int sign(double a); -extern void mapping_rotate(double x, double y, double z, - double *ddx, double *ddy, double *ddz, - double omega, double tilt); extern void progress_bar(int val, int total); +/* Keep these ones inline, to avoid function call overhead */ +static inline double distance(double x1, double y1, double x2, double y2) +{ + return sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)); +} + +static inline double modulus(double x, double y, double z) +{ + return sqrt(x*x + y*y + z*z); +} + +static inline double modulus_squared(double x, double y, double z) { + return x*x + y*y + z*z; +} + +static inline double distance3d(double x1, double y1, double z1, + double x2, double y2, double z2) +{ + return modulus(x1-x2, y1-y2, z1-z2); +} + /* ----------------------------- Useful macros ------------------------------ */ -- cgit v1.2.3