/* * ipr.c * * Iterative Prediction-Refinement Reconstruction * * (c) 2007 Thomas White * * dtr - Diffraction Tomography Reconstruction * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "control.h" #include "reflections.h" #include "itrans.h" #include "utils.h" #include "imagedisplay.h" #include "reproject.h" #include "ipr.h" #include "displaywindow.h" #include "basis.h" static gint ipr_clicked(GtkWidget *widget, GdkEventButton *event, ControlContext *ctx) { ImageReflection *refl; size_t n, j; ctx->ipr_cur_image++; if ( ctx->ipr_cur_image == ctx->n_images ) ctx->ipr_cur_image = 0; imagedisplay_clear_circles(ctx->ipr_id); reflectionlist_clear_markers(ctx->reflectionlist); refl = reproject_get_reflections(ctx->images[ctx->ipr_cur_image], &n, ctx->ipr_lat, ctx); for ( j=0; jipr_id, refl[j].x, refl[j].y); } imagedisplay_put_data(ctx->ipr_id, ctx->images[ctx->ipr_cur_image]); displaywindow_update(ctx->dw); return 0; } int ipr_refine(ControlContext *ctx) { Basis *basis; int finished; basis = basis_find(ctx); if ( !basis ) { printf("IP: Unable to find basis\n"); return -1; } ctx->ipr_basis = basis; ctx->ipr_lat = reflection_list_from_cell(basis); printf("IP: Performing refinement...\n"); finished = 0; do { size_t n, j; ImageReflection *refl; /* Select an image */ ctx->ipr_cur_image = 0; ctx->ipr_id = imagedisplay_open_with_message(ctx->images[ctx->ipr_cur_image], "Current Image", "Click to change image", IMAGEDISPLAY_SHOW_CENTRE | IMAGEDISPLAY_SHOW_TILT_AXIS, G_CALLBACK(ipr_clicked), ctx); refl = reproject_get_reflections(ctx->images[ctx->ipr_cur_image], &n, ctx->ipr_lat, ctx); for ( j=0; jipr_id, refl[j].x, refl[j].y); } finished = 1; } while ( !finished ); return 0; }