aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw27@cam.ac.uk>2009-04-09 17:31:49 +0100
committerThomas White <taw27@cam.ac.uk>2009-04-09 17:31:49 +0100
commit595c1eb952ca10fbb544ed81d55ca30c4501e401 (patch)
tree6839273ac25aa9fd0f793cdad4db84be8a2d205c
parente9cb3c4fe04f2099807a0ac0f74f4f7c41bddb80 (diff)
parente472b068cab44e109fdd47f3962ab3a3a76674dd (diff)
Merge branch 'master' into simple-searchsimple-search
-rw-r--r--src/imagedisplay.c274
-rw-r--r--src/itrans-zaefferer.c65
-rw-r--r--src/reflections.c6
-rw-r--r--src/reproject.c12
4 files changed, 205 insertions, 152 deletions
diff --git a/src/imagedisplay.c b/src/imagedisplay.c
index 958622f..817ef14 100644
--- a/src/imagedisplay.c
+++ b/src/imagedisplay.c
@@ -3,7 +3,7 @@
*
* Show raw and processed images
*
- * (c) 2007-2008 Thomas White <taw27@cam.ac.uk>
+ * (c) 2007-2009 Thomas White <taw27@cam.ac.uk>
*
* dtr - Diffraction Tomography Reconstruction
*
@@ -26,12 +26,15 @@
#include "mapping.h"
/* Free pixbuf data when reference count drops to zero */
-static void imagedisplay_free_data(guchar *image_eightbit, ImageDisplay *imagedisplay) {
+static void imagedisplay_free_data(guchar *image_eightbit,
+ ImageDisplay *imagedisplay)
+{
free(image_eightbit);
}
-static void imagedisplay_rescale(ImageDisplay *imagedisplay, unsigned int v_w, unsigned int v_h) {
-
+static void imagedisplay_rescale(ImageDisplay *imagedisplay, unsigned int v_w,
+ unsigned int v_h)
+{
unsigned int w, h;
float aspect_image, aspect_window;
@@ -52,24 +55,26 @@ static void imagedisplay_rescale(ImageDisplay *imagedisplay, unsigned int v_w, u
}
/* Create the scaled pixbuf from the 8-bit display data */
- imagedisplay->pixbuf_scaled = gdk_pixbuf_scale_simple(imagedisplay->pixbuf, v_w, v_h, GDK_INTERP_BILINEAR);
+ imagedisplay->pixbuf_scaled = gdk_pixbuf_scale_simple(
+ imagedisplay->pixbuf, v_w, v_h,
+ GDK_INTERP_BILINEAR);
imagedisplay->view_width = v_w;
imagedisplay->view_height = v_h;
-
}
-static gboolean imagedisplay_configure_event(GtkWidget *widget, GdkEventConfigure *event, ImageDisplay *imagedisplay) {
-
+static gboolean imagedisplay_configure_event(GtkWidget *widget,
+ GdkEventConfigure *event,
+ ImageDisplay *imagedisplay)
+{
imagedisplay->drawingarea_width = event->width;
imagedisplay->drawingarea_height = event->height;
imagedisplay_rescale(imagedisplay, event->width, event->height);
return FALSE;
-
}
-void imagedisplay_put_data(ImageDisplay *imagedisplay, ImageRecord imagerecord) {
-
+void imagedisplay_put_data(ImageDisplay *imagedisplay, ImageRecord imagerecord)
+{
unsigned int x, y;
unsigned int w, h;
int min, max;
@@ -117,17 +122,18 @@ void imagedisplay_put_data(ImageDisplay *imagedisplay, ImageRecord imagerecord)
memcpy(&imagedisplay->imagerecord, &imagerecord, sizeof(ImageRecord));
/* Create the pixbuf from the 8-bit display data */
- imagedisplay->pixbuf = gdk_pixbuf_new_from_data(imagedisplay->data, GDK_COLORSPACE_RGB, FALSE, 8, w, h, w*3,
- (GdkPixbufDestroyNotify)imagedisplay_free_data, imagedisplay);
+ imagedisplay->pixbuf = gdk_pixbuf_new_from_data(imagedisplay->data,
+ GDK_COLORSPACE_RGB, FALSE, 8, w, h, w*3,
+ (GdkPixbufDestroyNotify)imagedisplay_free_data,
+ imagedisplay);
if ( imagedisplay->realised ) {
imagedisplay_force_redraw(imagedisplay);
}
-
}
-void imagedisplay_clear_marks(ImageDisplay *imagedisplay) {
-
+void imagedisplay_clear_marks(ImageDisplay *imagedisplay)
+{
ImageDisplayMark *cur;
cur = imagedisplay->marks;
@@ -137,11 +143,11 @@ void imagedisplay_clear_marks(ImageDisplay *imagedisplay) {
cur = next;
}
imagedisplay->marks = NULL;
-
}
-static void imagedisplay_destroyed(GtkWidget *widget, ImageDisplay *imagedisplay) {
-
+static void imagedisplay_destroyed(GtkWidget *widget,
+ ImageDisplay *imagedisplay)
+{
imagedisplay_clear_marks(imagedisplay);
if ( imagedisplay->flags & IMAGEDISPLAY_QUIT_IF_CLOSED ) {
@@ -158,19 +164,21 @@ static void imagedisplay_destroyed(GtkWidget *widget, ImageDisplay *imagedisplay
}
free(imagedisplay);
-
}
-void imagedisplay_close(ImageDisplay *imagedisplay) {
- imagedisplay->flags = (imagedisplay->flags | IMAGEDISPLAY_QUIT_IF_CLOSED)^IMAGEDISPLAY_QUIT_IF_CLOSED;
+void imagedisplay_close(ImageDisplay *imagedisplay)
+{
+ imagedisplay->flags = (imagedisplay->flags
+ | IMAGEDISPLAY_QUIT_IF_CLOSED)^IMAGEDISPLAY_QUIT_IF_CLOSED;
if ( imagedisplay->window ) {
gtk_widget_destroy(imagedisplay->window);
}
}
-static void imagedisplay_add_scalebar(ImageDisplay *imagedisplay, GtkWidget *drawingarea,
- double scale, double xoffs, double yoffs) {
-
+static void imagedisplay_add_scalebar(ImageDisplay *imagedisplay,
+ GtkWidget *drawingarea, double scale,
+ double xoffs, double yoffs)
+{
PangoLayout *layout;
double sb;
PangoRectangle rect;
@@ -184,55 +192,66 @@ static void imagedisplay_add_scalebar(ImageDisplay *imagedisplay, GtkWidget *dra
bwidth = (sb*scale)+20;
bheight = rect.height+30;
if ( rect.width > bwidth ) bwidth = rect.width+20;
- gdk_draw_rectangle(drawingarea->window, drawingarea->style->bg_gc[GTK_WIDGET_STATE(drawingarea)], TRUE,
- xoffs+20, yoffs+view_height-20-bheight,
- bwidth, bheight);
+ gdk_draw_rectangle(drawingarea->window,
+ drawingarea->style->bg_gc[GTK_WIDGET_STATE(drawingarea)],
+ TRUE, xoffs+20, yoffs+view_height-20-bheight, bwidth, bheight);
gdk_draw_line(drawingarea->window, imagedisplay->gc_scalebar,
xoffs+30, yoffs+view_height-30,
xoffs+30+(scale*sb), yoffs+view_height-30);
- gdk_draw_layout(drawingarea->window, drawingarea->style->fg_gc[GTK_WIDGET_STATE(drawingarea)],
- xoffs+30, yoffs+view_height-20-bheight+10, layout);
-
+ gdk_draw_layout(drawingarea->window,
+ drawingarea->style->fg_gc[GTK_WIDGET_STATE(drawingarea)],
+ xoffs+30, yoffs+view_height-20-bheight+10, layout);
}
-#define imagedisplay_draw_line(gc,x1,y1,x2,y2) (gdk_draw_line(drawingarea->window,gc, \
- xoffs+(x1), yoffs+imagedisplay->view_height-1-(y1), \
- xoffs+(x2), yoffs+imagedisplay->view_height-1-(y2)))
-
-static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *event, ImageDisplay *imagedisplay) {
+#define imagedisplay_draw_line(gc,x1,y1,x2,y2) \
+ (gdk_draw_line(drawingarea->window,gc, \
+ xoffs+(x1), yoffs+imagedisplay->view_height-1-(y1), \
+ xoffs+(x2), yoffs+imagedisplay->view_height-1-(y2)))
+static gboolean imagedisplay_redraw(GtkWidget *drawingarea,
+ GdkEventExpose *event,
+ ImageDisplay *imagedisplay)
+{
double scale, xoffs, yoffs;
ImageDisplayMark *cur;
double max;
- xoffs = ((double)imagedisplay->drawingarea_width - imagedisplay->view_width) / 2;
- yoffs = ((double)imagedisplay->drawingarea_height - imagedisplay->view_height) / 2;
+ xoffs = ((double)imagedisplay->drawingarea_width
+ - imagedisplay->view_width) / 2;
+ yoffs = ((double)imagedisplay->drawingarea_height
+ - imagedisplay->view_height) / 2;
scale = (double)imagedisplay->view_width/imagedisplay->imagerecord.width;
- gdk_draw_pixbuf(drawingarea->window, drawingarea->style->bg_gc[GTK_WIDGET_STATE(drawingarea)],
- imagedisplay->pixbuf_scaled,
- 0, 0, xoffs, yoffs, imagedisplay->view_width, imagedisplay->view_height,
- GDK_RGB_DITHER_NONE, 0, 0);
-//return FALSE;
+ gdk_draw_pixbuf(drawingarea->window,
+ drawingarea->style->bg_gc[GTK_WIDGET_STATE(drawingarea)],
+ imagedisplay->pixbuf_scaled,
+ 0, 0, xoffs, yoffs, imagedisplay->view_width,
+ imagedisplay->view_height, GDK_RGB_DITHER_NONE, 0, 0);
+
if ( imagedisplay->flags & IMAGEDISPLAY_SHOW_TILT_AXIS ) {
/* This is nasty, but works */
imagedisplay_draw_line(imagedisplay->gc_tiltaxis,
imagedisplay->imagerecord.x_centre * scale,
imagedisplay->imagerecord.y_centre * scale,
- (imagedisplay->imagerecord.x_centre + imagedisplay->imagerecord.width) * scale,
- (imagedisplay->imagerecord.y_centre + imagedisplay->imagerecord.width
- * tan(imagedisplay->imagerecord.omega)) * scale);
+ (imagedisplay->imagerecord.x_centre
+ + imagedisplay->imagerecord.width) * scale,
+ (imagedisplay->imagerecord.y_centre
+ + imagedisplay->imagerecord.width
+ * tan(imagedisplay->imagerecord.omega)) * scale);
imagedisplay_draw_line(imagedisplay->gc_tiltaxis,
imagedisplay->imagerecord.x_centre * scale,
imagedisplay->imagerecord.y_centre * scale,
- (imagedisplay->imagerecord.x_centre - imagedisplay->imagerecord.width) * scale,
- (imagedisplay->imagerecord.y_centre - imagedisplay->imagerecord.width
- * tan(imagedisplay->imagerecord.omega)) * scale);
+ (imagedisplay->imagerecord.x_centre
+ - imagedisplay->imagerecord.width) * scale,
+ (imagedisplay->imagerecord.y_centre
+ - imagedisplay->imagerecord.width
+ * tan(imagedisplay->imagerecord.omega)) * scale);
}
/* Add scale bar */
if ( imagedisplay->flags & IMAGEDISPLAY_SCALE_BAR ) {
- imagedisplay_add_scalebar(imagedisplay, drawingarea, scale, xoffs, yoffs);
+ imagedisplay_add_scalebar(imagedisplay, drawingarea, scale,
+ xoffs, yoffs);
}
/* NB This calls the function above, which sorts out stuff */
@@ -255,12 +274,12 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even
while ( cur ) {
if ( cur->weight < 0.0 ) {
- //printf("ID: Warning: ImageDisplayMark with negative weight\n");
cur = cur->next;
continue;
}
- if ( log(1+0.1*cur->weight) > max ) max = log(1+0.1*cur->weight);
+ if ( log(1+0.1*cur->weight) > max )
+ max = log(1+0.1*cur->weight);
cur = cur->next;
}
@@ -271,11 +290,26 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even
GdkGC *gc;
switch ( cur->type ) {
- case IMAGEDISPLAY_MARK_CIRCLE_1 : gc = imagedisplay->gc_marks_1; break;
- case IMAGEDISPLAY_MARK_CIRCLE_2 : gc = imagedisplay->gc_marks_2; break;
- case IMAGEDISPLAY_MARK_CIRCLE_3 : gc = imagedisplay->gc_marks_3; break;
- case IMAGEDISPLAY_MARK_LINE_1 : gc = imagedisplay->gc_marks_1; break;
- case IMAGEDISPLAY_MARK_LINE_2 : gc = imagedisplay->gc_marks_2; break;
+ case IMAGEDISPLAY_MARK_CIRCLE_1 : {
+ gc = imagedisplay->gc_marks_1;
+ break;
+ }
+ case IMAGEDISPLAY_MARK_CIRCLE_2 : {
+ gc = imagedisplay->gc_marks_2;
+ break;
+ }
+ case IMAGEDISPLAY_MARK_CIRCLE_3 : {
+ gc = imagedisplay->gc_marks_3;
+ break;
+ }
+ case IMAGEDISPLAY_MARK_LINE_1 : {
+ gc = imagedisplay->gc_marks_1;
+ break;
+ }
+ case IMAGEDISPLAY_MARK_LINE_2 : {
+ gc = imagedisplay->gc_marks_2;
+ break;
+ }
default : gc = imagedisplay->gc_marks_1; break;
}
@@ -297,17 +331,18 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even
}
gdk_draw_arc(drawingarea->window, gc, FALSE,
- xoffs + cur->x*scale - r,
- yoffs + imagedisplay->view_height-1-cur->y*scale - r,
- 2*r, 2*r, 0, 64*360);
+ xoffs + cur->x*scale - r,
+ yoffs + imagedisplay->view_height-1-cur->y*scale - r,
+ 2*r, 2*r, 0, 64*360);
- } else if ( (cur->type == IMAGEDISPLAY_MARK_LINE_1) || (cur->type == IMAGEDISPLAY_MARK_LINE_2) ) {
+ } else if ( (cur->type == IMAGEDISPLAY_MARK_LINE_1)
+ || (cur->type == IMAGEDISPLAY_MARK_LINE_2) ) {
gdk_draw_line(drawingarea->window, gc,
- xoffs + cur->x*scale,
- yoffs + imagedisplay->view_height-1-cur->y*scale,
- xoffs + cur->x2*scale,
- yoffs + imagedisplay->view_height-1-cur->y2*scale );
+ xoffs + cur->x*scale,
+ yoffs + imagedisplay->view_height-1-cur->y*scale,
+ xoffs + cur->x2*scale,
+ yoffs + imagedisplay->view_height-1-cur->y2*scale);
}
@@ -318,8 +353,8 @@ static gboolean imagedisplay_redraw(GtkWidget *drawingarea, GdkEventExpose *even
}
-static gint imagedisplay_realize(GtkWidget *widget, ImageDisplay *imagedisplay) {
-
+static gint imagedisplay_realize(GtkWidget *widget, ImageDisplay *imagedisplay)
+{
GdkColor colour;
imagedisplay->gc_centre = gdk_gc_new(imagedisplay->drawingarea->window);
@@ -331,11 +366,11 @@ static gint imagedisplay_realize(GtkWidget *widget, ImageDisplay *imagedisplay)
gdk_gc_set_rgb_fg_color(imagedisplay->gc_tiltaxis, &colour);
imagedisplay->gc_marks_1 = gdk_gc_new(imagedisplay->drawingarea->window);
- gdk_color_parse("#dd0000", &colour);
+ gdk_color_parse("#0077ff", &colour);
gdk_gc_set_rgb_fg_color(imagedisplay->gc_marks_1, &colour);
imagedisplay->gc_marks_2 = gdk_gc_new(imagedisplay->drawingarea->window);
- gdk_color_parse("#00dd00", &colour);
+ gdk_color_parse("#ffff00", &colour);
gdk_gc_set_rgb_fg_color(imagedisplay->gc_marks_2, &colour);
imagedisplay->gc_marks_3 = gdk_gc_new(imagedisplay->drawingarea->window);
@@ -345,7 +380,8 @@ static gint imagedisplay_realize(GtkWidget *widget, ImageDisplay *imagedisplay)
imagedisplay->gc_scalebar = gdk_gc_new(imagedisplay->drawingarea->window);
gdk_color_parse("#000000", &colour);
gdk_gc_set_rgb_fg_color(imagedisplay->gc_scalebar, &colour);
- gdk_gc_set_line_attributes(imagedisplay->gc_scalebar, 5, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
+ gdk_gc_set_line_attributes(imagedisplay->gc_scalebar, 5,
+ GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER);
imagedisplay->realised = TRUE;
@@ -353,9 +389,12 @@ static gint imagedisplay_realize(GtkWidget *widget, ImageDisplay *imagedisplay)
}
-ImageDisplay *imagedisplay_new_nowindow(ImageRecord imagerecord, ImageDisplayFlags flags, const char *message,
- GCallback mouse_click_func, gpointer callback_data) {
-
+ImageDisplay *imagedisplay_new_nowindow(ImageRecord imagerecord,
+ ImageDisplayFlags flags,
+ const char *message,
+ GCallback mouse_click_func,
+ gpointer callback_data)
+{
ImageDisplay *imagedisplay;
imagedisplay = malloc(sizeof(ImageDisplay));
@@ -379,25 +418,37 @@ ImageDisplay *imagedisplay_new_nowindow(ImageRecord imagerecord, ImageDisplayFla
GtkWidget *label;
label = gtk_label_new(message);
gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
- gtk_box_pack_start(GTK_BOX(imagedisplay->vbox), label, FALSE, TRUE, 3);
+ gtk_box_pack_start(GTK_BOX(imagedisplay->vbox), label, FALSE,
+ TRUE, 3);
}
imagedisplay->drawingarea = gtk_drawing_area_new();
- gtk_box_pack_start(GTK_BOX(imagedisplay->vbox), imagedisplay->drawingarea, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(imagedisplay->vbox),
+ imagedisplay->drawingarea, TRUE, TRUE, 0);
if ( imagedisplay->mouse_click_func ) {
- gtk_widget_add_events(GTK_WIDGET(imagedisplay->drawingarea), GDK_BUTTON_PRESS_MASK);
- g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "button-press-event",
- G_CALLBACK(imagedisplay->mouse_click_func), callback_data);
+ gtk_widget_add_events(GTK_WIDGET(imagedisplay->drawingarea),
+ GDK_BUTTON_PRESS_MASK);
+ g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea),
+ "button-press-event",
+ G_CALLBACK(imagedisplay->mouse_click_func),
+ callback_data);
}
- g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "realize",
- G_CALLBACK(imagedisplay_realize), imagedisplay);
- g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "destroy",
- G_CALLBACK(imagedisplay_destroyed), imagedisplay);
- g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "configure_event",
- G_CALLBACK(imagedisplay_configure_event), imagedisplay);
- g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea), "expose-event",
+ g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea),
+ "realize",
+ G_CALLBACK(imagedisplay_realize),
+ imagedisplay);
+ g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea),
+ "destroy",
+ G_CALLBACK(imagedisplay_destroyed),
+ imagedisplay);
+ g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea),
+ "configure_event",
+ G_CALLBACK(imagedisplay_configure_event),
+ imagedisplay);
+ g_signal_connect(GTK_OBJECT(imagedisplay->drawingarea),
+ "expose-event",
G_CALLBACK(imagedisplay_redraw), imagedisplay);
return imagedisplay;
@@ -405,22 +456,29 @@ ImageDisplay *imagedisplay_new_nowindow(ImageRecord imagerecord, ImageDisplayFla
}
/* Display an image */
-ImageDisplay *imagedisplay_open_with_message(ImageRecord imagerecord, const char *title, const char *message,
- ImageDisplayFlags flags, GCallback mouse_click_func,
- gpointer callback_data) {
-
+ImageDisplay *imagedisplay_open_with_message(ImageRecord imagerecord,
+ const char *title,
+ const char *message,
+ ImageDisplayFlags flags,
+ GCallback mouse_click_func,
+ gpointer callback_data)
+{
ImageDisplay *imagedisplay;
GdkGeometry geom;
- imagedisplay = imagedisplay_new_nowindow(imagerecord, flags, message, mouse_click_func, callback_data);
+ imagedisplay = imagedisplay_new_nowindow(imagerecord, flags, message,
+ mouse_click_func, callback_data);
imagedisplay->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_container_add(GTK_CONTAINER(imagedisplay->window), imagedisplay->vbox);
+ gtk_container_add(GTK_CONTAINER(imagedisplay->window),
+ imagedisplay->vbox);
imagedisplay->title = strdup(title);
- gtk_window_set_title(GTK_WINDOW(imagedisplay->window), imagedisplay->title);
+ gtk_window_set_title(GTK_WINDOW(imagedisplay->window),
+ imagedisplay->title);
geom.min_width = 128; geom.min_height = 128;
- gtk_window_set_geometry_hints(GTK_WINDOW(imagedisplay->window), GTK_WIDGET(imagedisplay->drawingarea),
+ gtk_window_set_geometry_hints(GTK_WINDOW(imagedisplay->window),
+ GTK_WIDGET(imagedisplay->drawingarea),
&geom, GDK_HINT_MIN_SIZE);
gtk_window_set_default_size(GTK_WINDOW(imagedisplay->window), 512, 512);
@@ -428,15 +486,18 @@ ImageDisplay *imagedisplay_open_with_message(ImageRecord imagerecord, const char
gtk_widget_show_all(imagedisplay->window);
return imagedisplay;
-
}
-ImageDisplay *imagedisplay_open(ImageRecord image, const char *title, ImageDisplayFlags flags) {
- return imagedisplay_open_with_message(image, title, NULL, flags, NULL, NULL);
+ImageDisplay *imagedisplay_open(ImageRecord image, const char *title,
+ ImageDisplayFlags flags)
+{
+ return imagedisplay_open_with_message(image, title, NULL, flags,
+ NULL, NULL);
}
-void imagedisplay_add_mark(ImageDisplay *imagedisplay, double x, double y, ImageDisplayMarkType type, double weight) {
-
+void imagedisplay_add_mark(ImageDisplay *imagedisplay, double x, double y,
+ ImageDisplayMarkType type, double weight)
+{
ImageDisplayMark *new;
new = malloc(sizeof(ImageDisplayMark));
@@ -454,12 +515,11 @@ void imagedisplay_add_mark(ImageDisplay *imagedisplay, double x, double y, Image
}
cur->next = new;
}
-
}
void imagedisplay_add_line(ImageDisplay *imagedisplay, double x1, double y1,
- double x2, double y2, ImageDisplayMarkType type) {
-
+ double x2, double y2, ImageDisplayMarkType type)
+{
ImageDisplayMark *new;
new = malloc(sizeof(ImageDisplayMark));
@@ -478,11 +538,13 @@ void imagedisplay_add_line(ImageDisplay *imagedisplay, double x1, double y1,
}
cur->next = new;
}
-
}
-void imagedisplay_force_redraw(ImageDisplay *imagedisplay) {
- imagedisplay_rescale(imagedisplay, imagedisplay->drawingarea_width, imagedisplay->drawingarea_height);
- gtk_widget_queue_draw_area(imagedisplay->drawingarea, 0, 0, imagedisplay->drawingarea_width,
- imagedisplay->drawingarea_height);
+void imagedisplay_force_redraw(ImageDisplay *imagedisplay)
+{
+ imagedisplay_rescale(imagedisplay, imagedisplay->drawingarea_width,
+ imagedisplay->drawingarea_height);
+ gtk_widget_queue_draw_area(imagedisplay->drawingarea, 0, 0,
+ imagedisplay->drawingarea_width,
+ imagedisplay->drawingarea_height);
}
diff --git a/src/itrans-zaefferer.c b/src/itrans-zaefferer.c
index 69d2566..e1b63e9 100644
--- a/src/itrans-zaefferer.c
+++ b/src/itrans-zaefferer.c
@@ -27,89 +27,99 @@ ImageFeatureList *itrans_peaksearch_zaefferer(ImageRecord *imagerecord) {
int width, height;
uint16_t *image;
ImageFeatureList *flist;
-
+
flist = image_feature_list_new();
-
+
image = imagerecord->image;
width = imagerecord->width;
height = imagerecord->height;
-
+
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+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;
dys = ((dy1*dy1) + (dy2*dy2)) / 2;
-
+
/* Calculate overall gradient */
grad = dxs + dys;
if ( grad > 400 ) {
-
+
int mask_x, mask_y;
int sx, sy;
double max;
unsigned int did_something = 1;
-
+
mask_x = x;
mask_y = y;
-
+
while ( (did_something) && (distance(mask_x, mask_y, x, y)<50) ) {
-
+
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, 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;
}
-
+
}
-
+
}
-
+
}
-
+
if ( !did_something ) {
-
+
double d;
int idx;
-
+
assert(mask_x<width);
assert(mask_y<height);
assert(mask_x>=0);
assert(mask_y>=0);
-
- /* Check for a feature at exactly the same coordinates */
- image_feature_closest(flist, mask_x, mask_y, &d, &idx);
-
+
+ if ( distance(mask_x, mask_y, x, y)
+ > 50.0 ) {
+ printf("Too far\n");
+ continue;
+ }
+
+ /* Check for a feature at exactly the
+ * same coordinates */
+ image_feature_closest(flist, mask_x,
+ mask_y, &d,
+ &idx);
+
if ( d > 1.0 ) {
- image_add_feature(flist, mask_x, mask_y, imagerecord,
- image[mask_x + width*mask_y]);
+ image_add_feature(flist, mask_x,
+ mask_y, imagerecord,
+ image[mask_x + width*mask_y]);
}
-
+
}
-
+
}
}
}
@@ -117,4 +127,3 @@ ImageFeatureList *itrans_peaksearch_zaefferer(ImageRecord *imagerecord) {
return flist;
}
-
diff --git a/src/reflections.c b/src/reflections.c
index ce5f7a9..3eed317 100644
--- a/src/reflections.c
+++ b/src/reflections.c
@@ -91,7 +91,6 @@ void reflectionlist_free(ReflectionList *reflectionlist) {
Reflection *reflection_add(ReflectionList *reflectionlist, double x, double y, double z, double intensity, ReflectionType type) {
Reflection *new_reflection;
- Reflection *nearest;
if ( reflectionlist->list_capped ) return NULL;
@@ -101,11 +100,6 @@ Reflection *reflection_add(ReflectionList *reflectionlist, double x, double y, d
reflectionlist->list_capped = 1;
}
-// nearest = reflectionlist_find_nearest_type(reflectionlist, x, y, z, type);
-// if ( nearest && distance3d(x, y, z, nearest->x, nearest->y, nearest->z) < 0.1e9 ) {
-// printf("Too close\n");
-// return NULL;
-//}
new_reflection = malloc(sizeof(Reflection));
new_reflection->next = NULL;
new_reflection->x = x;
diff --git a/src/reproject.c b/src/reproject.c
index e0199af..41040b9 100644
--- a/src/reproject.c
+++ b/src/reproject.c
@@ -59,8 +59,6 @@ ImageFeatureList *reproject_get_reflections(ImageRecord *image,
double kx, ky, kz; /* Electron wavevector ("normal" times 1/lambda */
double ux, uy, uz; /* "up" vector */
double rx, ry, rz; /* "right" vector */
- int nrr = 0;
- int n = 0;
flist = image_feature_list_new();
@@ -168,11 +166,6 @@ ImageFeatureList *reproject_get_reflections(ImageRecord *image,
image_add_feature_reflection(flist, x,
y, image, reflection->intensity,
reflection);
- printf("adding %i %i %i\n",
- reflection->h,
- reflection->k,
- reflection->l);
- n++;
} /* else it's outside the picture somewhere */
@@ -182,8 +175,6 @@ ImageFeatureList *reproject_get_reflections(ImageRecord *image,
reflection = reflection->next;
- nrr++;
-
} while ( reflection );
/* Partner features only if the image has a feature list. This allows
@@ -193,8 +184,6 @@ ImageFeatureList *reproject_get_reflections(ImageRecord *image,
reproject_partner_features(flist, image);
}
- printf("processed %i, found %i\n", nrr, n);
-
return flist;
}
@@ -242,7 +231,6 @@ void reproject_lattice_changed(ControlContext *ctx) {
int partnered_measured = 0;
reproject_cell_to_lattice(ctx);
- printf("%i reflections\n", ctx->cell_lattice->n_reflections);
for ( i=0; i<ctx->images->n_images; i++ ) {