diff options
Diffstat (limited to 'src/refine.c')
-rw-r--r-- | src/refine.c | 142 |
1 files changed, 35 insertions, 107 deletions
diff --git a/src/refine.c b/src/refine.c index 6b4fa9c..ec74b8d 100644 --- a/src/refine.c +++ b/src/refine.c @@ -228,97 +228,6 @@ static ImageFeature *refine_fit_image(Basis *cell, ImageRecord *image, Reflectio } -static gint refine_step(GtkWidget *step_button, ControlContext *ctx) { - - if ( (ctx->reproject_id) && (ctx->cell_lattice) ) { - - ImageFeature *fitted; - - fitted = refine_fit_image(ctx->cell, &ctx->images->images[ctx->reproject_cur_image], ctx->cell_lattice); - - ctx->images->images[ctx->reproject_cur_image].rflist = NULL; - reproject_lattice_changed(ctx); - displaywindow_update(ctx->dw); - - if ( fitted ) { - imagedisplay_add_mark(ctx->reproject_id, fitted->x,fitted->y, IMAGEDISPLAY_MARK_CIRCLE_3); - } - - } else { - displaywindow_error("Please first open the reprojection window and select the image to fit", ctx->dw); - } - - return 0; - -} - -static int refine_sequence_random(ControlContext *ctx, double *fit, double *warp) { - - int i; - - for ( i=0; i<1000; i++ ) { - - int ni; - int nf; - ImageRecord *image; - ImageFeature *feature; - Basis *cell; - Basis cd; - RefinementIndex shared; - - /* Ensure lattice is up to date */ - reproject_lattice_changed(ctx); - - cell = ctx->cell; - - /* Select a random feature from a random image */ - ni = ((float)ctx->images->n_images * random()) / RAND_MAX; - image = &ctx->images->images[ni]; - nf = ((float)image->features->n_features * random()) / RAND_MAX; - feature = &image->features->features[nf]; - - image->rflist = reproject_get_reflections(image, ctx->cell_lattice); - - if ( !feature->partner ) continue; - - cd = refine_cell_delta(cell, feature, &shared); - - cell->a.x += cd.a.x; cell->a.y += cd.a.y; cell->a.z += cd.a.z; - cell->b.x += cd.b.x; cell->b.y += cd.b.y; cell->b.z += cd.b.z; - cell->c.x += cd.c.x; cell->c.y += cd.c.y; cell->c.z += cd.c.z; - - } - - *fit = 0.0; - *warp = 0.0; - - return 0; - -} - -static gint refine_random_sequence(GtkWidget *widget, ControlContext *ctx) { - - ImageDisplay *id; - double fit, warp; - - if ( !ctx->cell ) { - displaywindow_error("No reciprocal unit cell has been found.", ctx->dw); - return 0; - } - - /* Temporarily disable ImageDisplay stuff */ - id = ctx->reproject_id; - ctx->reproject_id = NULL; - - refine_sequence_random(ctx, &fit, &warp); - - ctx->reproject_id = id; - reproject_lattice_changed(ctx); - - return 0; - -} - static int refine_sequence_sweep(ControlContext *ctx, double *fit, double *warp) { int i; @@ -376,7 +285,7 @@ static int refine_sequence_sweep(ControlContext *ctx, double *fit, double *warp) } -static gint refine_sequence(GtkWidget *widget, ControlContext *ctx) { +static gint refine_dialog_sequence(GtkWidget *widget, ControlContext *ctx) { double omega_offs; GtkWidget *window_fit; @@ -450,7 +359,31 @@ static gint refine_sequence(GtkWidget *widget, ControlContext *ctx) { } -static gint refine_response(GtkWidget *refine_window, gint response, ControlContext *ctx) { +static gint refine_dialog_fit_image(GtkWidget *step_button, ControlContext *ctx) { + + if ( (ctx->reproject_id) && (ctx->cell_lattice) ) { + + ImageFeature *fitted; + + fitted = refine_fit_image(ctx->cell, &ctx->images->images[ctx->reproject_cur_image], ctx->cell_lattice); + + ctx->images->images[ctx->reproject_cur_image].rflist = NULL; + reproject_lattice_changed(ctx); + displaywindow_update(ctx->dw); + + if ( fitted ) { + imagedisplay_add_mark(ctx->reproject_id, fitted->x,fitted->y, IMAGEDISPLAY_MARK_CIRCLE_3); + } + + } else { + displaywindow_error("Please first open the reprojection window and select the image to fit", ctx->dw); + } + + return 0; + +} + +static gint refine_dialog_response(GtkWidget *refine_window, gint response, ControlContext *ctx) { ctx->refine_window = NULL; gtk_widget_destroy(refine_window); @@ -467,23 +400,22 @@ void refine_open(ControlContext *ctx) { GtkWidget *label; GtkWidget *step_button; GtkWidget *sequence_button; - GtkWidget *sequence_random_button; if ( ctx->refine_window ) return; ctx->refine_window = gtk_dialog_new_with_buttons("Refine Reconstruction", GTK_WINDOW(ctx->dw->window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); - gtk_window_set_default_size(GTK_WINDOW(ctx->refine_window), 256, -1); + gtk_window_set_default_size(GTK_WINDOW(ctx->refine_window), 280, -1); vbox = gtk_vbox_new(FALSE, 0); hbox = gtk_hbox_new(TRUE, 0); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ctx->refine_window)->vbox), GTK_WIDGET(hbox), FALSE, FALSE, 7); - gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), FALSE, FALSE, 5); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ctx->refine_window)->vbox), GTK_WIDGET(hbox), FALSE, TRUE, 7); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(vbox), FALSE, TRUE, 5); table = gtk_table_new(5, 1, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 5); - gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, TRUE, 0); label = gtk_label_new("Steps"); gtk_label_set_markup(GTK_LABEL(label), "<span weight=\"bold\">Steps</span>"); @@ -491,22 +423,18 @@ void refine_open(ControlContext *ctx) { gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, 1, 2); step_button = gtk_button_new_with_label("Refine Lattice to Fit Current Pattern"); gtk_table_attach_defaults(GTK_TABLE(table), step_button, 1, 2, 2, 3); - g_signal_connect(G_OBJECT(step_button), "clicked", G_CALLBACK(refine_step), ctx); + g_signal_connect(G_OBJECT(step_button), "clicked", G_CALLBACK(refine_dialog_fit_image), ctx); label = gtk_label_new("Sequencing"); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_label_set_markup(GTK_LABEL(label), "<span weight=\"bold\">Sequencing</span>"); gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, 4, 5); - - sequence_button = gtk_button_new_with_label("Run Sweeping Sequencer"); + + sequence_button = gtk_button_new_with_label("Run Sequencer"); gtk_table_attach_defaults(GTK_TABLE(table), sequence_button, 1, 2, 5, 6); - g_signal_connect(G_OBJECT(sequence_button), "clicked", G_CALLBACK(refine_sequence), ctx); - - sequence_random_button = gtk_button_new_with_label("Run Random Sequencer"); - gtk_table_attach_defaults(GTK_TABLE(table), sequence_random_button, 1, 2, 6, 7); - g_signal_connect(G_OBJECT(sequence_random_button), "clicked", G_CALLBACK(refine_random_sequence), ctx); + g_signal_connect(G_OBJECT(sequence_button), "clicked", G_CALLBACK(refine_dialog_sequence), ctx); - g_signal_connect(G_OBJECT(ctx->refine_window), "response", G_CALLBACK(refine_response), ctx); + g_signal_connect(G_OBJECT(ctx->refine_window), "response", G_CALLBACK(refine_dialog_response), ctx); gtk_widget_show_all(ctx->refine_window); |