aboutsummaryrefslogtreecommitdiff
path: root/src/itrans-zaefferer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/itrans-zaefferer.c')
-rw-r--r--src/itrans-zaefferer.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/itrans-zaefferer.c b/src/itrans-zaefferer.c
index aaa8110..a096e74 100644
--- a/src/itrans-zaefferer.c
+++ b/src/itrans-zaefferer.c
@@ -22,24 +22,32 @@
#define PEAK_WINDOW_SIZE 20
-unsigned int itrans_peaksearch_zaefferer(int16_t *image, ControlContext *ctx, double tilt_degrees, ImageDisplay *imagedisplay) {
+unsigned int itrans_peaksearch_zaefferer(ImageRecord imagerecord, ControlContext *ctx) {
int x, y;
unsigned int n_reflections;
+ int width, height;
+ int16_t *image;
+ double tilt_degrees;
+
+ tilt_degrees = imagerecord.tilt;
+ image = imagerecord.image;
+ width = imagerecord.width;
+ height = imagerecord.height;
n_reflections = 0;
- for ( x=1; x<ctx->width-1; x++ ) {
- for ( y=1; y<ctx->height-1; y++ ) {
+ for ( x=1; x<width-1; x++ ) {
+ for ( y=1; y<height-1; y++ ) {
double dx1, dx2, dy1, dy2;
double dxs, dys;
double grad;
/* Get gradients */
- dx1 = image[x+ctx->width*y] - image[(x+1)+ctx->width*y];
- dx2 = image[(x-1)+ctx->width*y] - image[x+ctx->width*y];
- dy1 = image[x+ctx->width*y] - image[(x+1)+ctx->width*(y+1)];
- dy2 = image[x+ctx->width*(y-1)] - image[x+ctx->width*y];
+ dx1 = image[x+width*y] - image[(x+1)+width*y];
+ dx2 = image[(x-1)+width*y] - image[x+width*y];
+ dy1 = image[x+width*y] - image[(x+1)+width*(y+1)];
+ dy2 = image[x+width*(y-1)] - image[x+width*y];
/* Average gradient measurements from both sides */
dxs = ((dx1*dx1) + (dx2*dx2)) / 2;
@@ -59,12 +67,12 @@ unsigned int itrans_peaksearch_zaefferer(int16_t *image, ControlContext *ctx, do
mask_y = y;
while ( (did_something) && (distance(mask_x, mask_y, x, y)<50) ) {
- max = image[mask_x+ctx->width*mask_y];
+ max = image[mask_x+width*mask_y];
did_something = 0;
- for ( sy=biggest(mask_y-PEAK_WINDOW_SIZE/2, 0); sy<smallest(mask_y+PEAK_WINDOW_SIZE/2, ctx->height); sy++ ) {
- for ( sx=biggest(mask_x-PEAK_WINDOW_SIZE/2, 0); sx<smallest(mask_x+PEAK_WINDOW_SIZE/2, ctx->width); sx++ ) {
- if ( image[sx+ctx->width*sy] > max ) {
- max = image[sx+ctx->width*sy];
+ for ( sy=biggest(mask_y-PEAK_WINDOW_SIZE/2, 0); sy<smallest(mask_y+PEAK_WINDOW_SIZE/2, height); sy++ ) {
+ for ( sx=biggest(mask_x-PEAK_WINDOW_SIZE/2, 0); sx<smallest(mask_x+PEAK_WINDOW_SIZE/2, width); sx++ ) {
+ if ( image[sx+width*sy] > max ) {
+ max = image[sx+width*sy];
mask_x = sx;
mask_y = sy;
did_something = 1;
@@ -74,16 +82,13 @@ unsigned int itrans_peaksearch_zaefferer(int16_t *image, ControlContext *ctx, do
}
if ( !did_something ) {
- if ( ctx->fmode == FORMULATION_PIXELSIZE ) {
- reflection_add_from_reciprocal(ctx, (signed)(mask_x-ctx->x_centre)*ctx->pixel_size,
- (signed)(mask_y-ctx->y_centre)*ctx->pixel_size,
- tilt_degrees, image[mask_x + ctx->width*mask_y]);
+ if ( imagerecord.fmode == FORMULATION_PIXELSIZE ) {
+ reflection_add_from_reciprocal(ctx, (signed)(mask_x-imagerecord.x_centre)*imagerecord.pixel_size,
+ (signed)(mask_y-imagerecord.y_centre)*imagerecord.pixel_size,
+ tilt_degrees, image[mask_x + width*mask_y]);
} else {
- reflection_add_from_dp(ctx, (signed)(mask_x-ctx->x_centre), (signed)(mask_y-ctx->y_centre),
- tilt_degrees, image[mask_x + ctx->width*mask_y]);
- }
- if ( ctx->first_image ) {
- imagedisplay_mark_point(imagedisplay, mask_x, mask_y);
+ reflection_add_from_dp(ctx, (signed)(mask_x-imagerecord.x_centre)/imagerecord.resolution, (signed)(mask_y-imagerecord.y_centre)/imagerecord.resolution,
+ tilt_degrees, image[mask_x + width*mask_y]);
}
n_reflections++;
}
@@ -95,3 +100,4 @@ unsigned int itrans_peaksearch_zaefferer(int16_t *image, ControlContext *ctx, do
return n_reflections;
}
+