From 418adbdada14b90a0e9a0ac15fe67dd34fe62327 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 22 Oct 2014 15:26:39 +0200 Subject: whirligig: Output some statistics --- src/whirligig.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 63 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/whirligig.c b/src/whirligig.c index 9bb310f8..85952d26 100644 --- a/src/whirligig.c +++ b/src/whirligig.c @@ -64,6 +64,15 @@ struct window }; +struct series_stats +{ + int n_series; /* Number of series */ + int in_series; /* Number of frames with at least one series */ + int max_series_length; /* Length of longest series */ + int total_series_steps; /* For calculating mean series length */ +}; + + static void do_op(const IntegerMatrix *op, signed int h, signed int k, signed int l, signed int *he, signed int *ke, signed int *le) @@ -131,16 +140,21 @@ static int find_common_reflections(RefList *list1, RefList *list2) static void process_series(struct image *images, signed int *ser, IntegerMatrix **mat, int len, const char *outdir, - int snum) + struct series_stats *ss) { int i; RefList **p; char filename[256]; FILE *fh; + int snum = ss->n_series; printf("\n"); STATUS("Found a rotation series of %i views\n", len); + ss->n_series++; + if ( len > ss->max_series_length ) ss->max_series_length = len; + ss->total_series_steps += len; + snprintf(filename, 256, "%s/series-%i.log", outdir, snum); fh = fopen(filename, "w"); if ( fh == NULL ) { @@ -182,8 +196,30 @@ out: } +static void count_series_frames(int **ser, int ser_start, int ser_len, + struct series_stats *ss) +{ + int i; + + for ( i=0; iin_series++; + } + + } +} + + static void find_ser(struct window *win, int sn, int is_last_frame, - int *n_series, const char *outdir) + struct series_stats *ss, const char *outdir) { int i; int ser_len = 0; @@ -199,10 +235,11 @@ static void find_ser(struct window *win, int sn, int is_last_frame, process_series(win->img+ser_start, win->ser[sn]+ser_start, win->mat[sn]+ser_start, - ser_len, outdir, *n_series); + ser_len, outdir, ss); + + count_series_frames(win->ser, ser_start, ser_len, ss); in_series = 0; - (*n_series)++; } @@ -222,19 +259,19 @@ static void find_ser(struct window *win, int sn, int is_last_frame, process_series(win->img+ser_start, win->ser[sn]+ser_start, win->mat[sn]+ser_start, - ser_len, outdir, *n_series); - (*n_series)++; + ser_len, outdir, ss); + count_series_frames(win->ser, ser_start, ser_len, ss); } } static void find_and_process_series(struct window *win, int is_last_frame, - int *n_series, const char *outdir) + struct series_stats *ss, const char *outdir) { int i; for ( i=0; i