From 2058e8e032575c6b267271522778c9beb3d8b0aa Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 10 Jan 2024 16:49:41 +0100 Subject: GUI: Skeleton task for detector alignment --- data/crystfel.gresource.xml | 1 + meson.build | 1 + src/crystfel_gui.c | 3 ++ src/gui_align.c | 123 ++++++++++++++++++++++++++++++++++++++++++++ src/gui_align.h | 38 ++++++++++++++ 5 files changed, 166 insertions(+) create mode 100644 src/gui_align.c create mode 100644 src/gui_align.h diff --git a/data/crystfel.gresource.xml b/data/crystfel.gresource.xml index c000973a..fa7a1752 100644 --- a/data/crystfel.gresource.xml +++ b/data/crystfel.gresource.xml @@ -21,5 +21,6 @@ crystfel-merge.png crystfel-peak-detection.png crystfel-unitcell.png + crystfel-geometry.png diff --git a/meson.build b/meson.build index 248a75fa..d0cb0081 100644 --- a/meson.build +++ b/meson.build @@ -218,6 +218,7 @@ if gtkdep.found() 'src/gui_fom.c', 'src/gui_export.c', 'src/gui_ambi.c', + 'src/gui_align.c', 'src/gui_backend_local.c', 'src/gui_backend_slurm.c', 'src/gui_project.c', diff --git a/src/crystfel_gui.c b/src/crystfel_gui.c index a51ec016..b3d3bc3f 100644 --- a/src/crystfel_gui.c +++ b/src/crystfel_gui.c @@ -56,6 +56,7 @@ #include "gui_merge.h" #include "gui_fom.h" #include "gui_export.h" +#include "gui_align.h" #include "gui_ambi.h" #include "gui_project.h" #include "version.h" @@ -902,6 +903,8 @@ static void add_task_buttons(GtkWidget *vbox, struct crystfelproject *proj) G_CALLBACK(index_all_sig), proj); add_button(vbox, "Determine unit cell", "crystfel-unitcell", G_CALLBACK(cell_explorer_sig), proj); + add_button(vbox, "Refine detector geometry", "crystfel-geometry", + G_CALLBACK(align_sig), proj); add_button(vbox, "Indexing ambiguity", "crystfel-ambiguity", G_CALLBACK(ambi_sig), proj); add_button(vbox, "Merge", "crystfel-merge", diff --git a/src/gui_align.c b/src/gui_align.c new file mode 100644 index 00000000..5c559878 --- /dev/null +++ b/src/gui_align.c @@ -0,0 +1,123 @@ +/* + * gui_align.c + * + * Align detector via CrystFEL GUI + * + * Copyright © 2024 Deutsches Elektronen-Synchrotron DESY, + * a research centre of the Helmholtz Association. + * + * Authors: + * 2024 Thomas White + * + * This file is part of CrystFEL. + * + * CrystFEL is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * CrystFEL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with CrystFEL. If not, see . + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include "version.h" +#include "gui_project.h" +#include "crystfel_gui.h" +#include "gtk-util-routines.h" + + +struct align_window +{ + struct crystfelproject *proj; + GtkWidget *window; + GtkWidget *out_of_plane; + GtkWidget *level; +}; + + +static int run_align(struct align_window *win) +{ + STATUS("Mock detector alignment!\n"); + return 0; +} + + +static void align_response_sig(GtkWidget *dialog, gint resp, + struct align_window *win) +{ + int r = 0; + + if ( resp == GTK_RESPONSE_ACCEPT ) { + r = run_align(win); + } + + if ( !r ) gtk_widget_destroy(dialog); +} + + +gint align_sig(GtkWidget *widget, struct crystfelproject *proj) +{ + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *content_area; + struct align_window *win; + + win = malloc(sizeof(struct align_window)); + if ( win == NULL ) return 0; + + win->proj = proj; + + win->window = gtk_dialog_new_with_buttons("Align detector", + GTK_WINDOW(proj->window), + GTK_DIALOG_DESTROY_WITH_PARENT, + "Cancel", GTK_RESPONSE_CANCEL, + "Run", GTK_RESPONSE_OK, + NULL); + + vbox = gtk_vbox_new(FALSE, 0.0); + content_area = gtk_dialog_get_content_area(GTK_DIALOG(win->window)); + gtk_box_pack_start(GTK_BOX(content_area), GTK_WIDGET(vbox), TRUE, TRUE, 0.0); + gtk_container_set_border_width(GTK_CONTAINER(content_area), 8); + + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 8); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hbox), + FALSE, FALSE, 0.0); + label = gtk_label_new("Refinement level:"); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), + FALSE, FALSE, 16.0); + win->level = gtk_spin_button_new_with_range(0.0, 9.0, 1.0); + gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(win->level), + FALSE, FALSE, 4.0); + gtk_widget_set_tooltip_text(win->level, "--level"); + + win->out_of_plane = gtk_check_button_new_with_label("Refine out-of-plane positions and tilts"); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(win->out_of_plane), + FALSE, FALSE, 4.0); + gtk_widget_set_tooltip_text(win->out_of_plane, "--out-of-plane"); + + g_signal_connect(G_OBJECT(win->window), "response", + G_CALLBACK(align_response_sig), win); + + gtk_dialog_set_default_response(GTK_DIALOG(win->window), + GTK_RESPONSE_CLOSE); + gtk_widget_show_all(win->window); + + return FALSE; +} diff --git a/src/gui_align.h b/src/gui_align.h new file mode 100644 index 00000000..50250e6a --- /dev/null +++ b/src/gui_align.h @@ -0,0 +1,38 @@ +/* + * gui_align.h + * + * Align detector via CrystFEL GUI + * + * Copyright © 2024 Deutsches Elektronen-Synchrotron DESY, + * a research centre of the Helmholtz Association. + * + * Authors: + * 2024 Thomas White + * + * This file is part of CrystFEL. + * + * CrystFEL is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * CrystFEL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with CrystFEL. If not, see . + * + */ + +#ifndef GUI_ALIGN_H +#define GUI_ALIGN_H + +#include + +#include "gui_project.h" + +extern gint align_sig(GtkWidget *widget, struct crystfelproject *proj); + +#endif -- cgit v1.2.3