/* * control.c * * Common control structure * * (c) 2007 Thomas White * * dtr - Diffraction Tomography Reconstruction * */ #include #include #include "control.h" int control_add_image(ControlContext *ctx, uint16_t *image, int width, int height, double tilt) { ctx->images[ctx->n_images].tilt = tilt; ctx->images[ctx->n_images].omega = ctx->omega; ctx->images[ctx->n_images].image = image; ctx->images[ctx->n_images].width = width; ctx->images[ctx->n_images].height = height; ctx->images[ctx->n_images].lambda = ctx->lambda; ctx->images[ctx->n_images].fmode = ctx->fmode; ctx->images[ctx->n_images].x_centre = ctx->x_centre; ctx->images[ctx->n_images].y_centre = ctx->y_centre; ctx->images[ctx->n_images].slop = 0.0; if ( ctx->fmode == FORMULATION_PIXELSIZE ) { ctx->images[ctx->n_images].pixel_size = ctx->pixel_size; ctx->images[ctx->n_images].camera_len = 0; ctx->images[ctx->n_images].resolution = 0; } else if ( ctx->fmode == FORMULATION_CLEN ) { ctx->images[ctx->n_images].pixel_size = 0; ctx->images[ctx->n_images].camera_len = ctx->camera_length; ctx->images[ctx->n_images].resolution = ctx->resolution; } ctx->n_images++; return ctx->n_images - 1; } ControlContext *control_ctx_new() { ControlContext *ctx; ctx = malloc(sizeof(ControlContext)); ctx->x_centre = 0; ctx->y_centre = 0; ctx->have_centres = 0; return ctx; } /* Return the minimum (most negative) tilt angle used */ double control_min_tilt(ControlContext *ctx) { int i; double min = 360; for ( i=0; in_images; i++ ) { if ( ctx->images[i].tilt < min ) min = ctx->images[i].tilt; } return min; } /* Return the maximum (most negative) tilt angle used */ double control_max_tilt(ControlContext *ctx) { int i; double max = -360; for ( i=0; in_images; i++ ) { if ( ctx->images[i].tilt > max ) max = ctx->images[i].tilt; } return max; } /* Return a reference to the image record with tilt closest to the given value */ ImageRecord *control_image_nearest_tilt(ControlContext *ctx, double tilt) { int i; double dev = 360; ImageRecord *im = NULL; for ( i=0; in_images; i++ ) { if ( ctx->images[i].tilt - tilt < dev ) { dev = ctx->images[i].tilt - tilt; im = &ctx->images[i]; } } return im; }