From 9ac88afeb51227e862003b1dc12cbe80077534f7 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 16 Jun 2014 14:40:07 +0200 Subject: Series finding structure --- src/whirligig.c | 135 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 103 insertions(+), 32 deletions(-) diff --git a/src/whirligig.c b/src/whirligig.c index e3ad195d..a676d707 100644 --- a/src/whirligig.c +++ b/src/whirligig.c @@ -38,22 +38,59 @@ #include #include #include -#include -#include #include #include -#include #include -#include -#include -#include -#include -#include #include "version.h" +static void process_series(struct image *images, signed int *ser, int len) +{ + STATUS("Found a rotation series of %i views\n", len); +} + + +static int gatinator(UnitCell *a, UnitCell *b) +{ + return 0; +} + + +static int try_all(struct image *a, struct image *b, int *c1, int *c2) +{ + int i, j; + + for ( i=0; in_crystals; i++ ) { + for ( j=0; jn_crystals; j++ ) { + if ( gatinator(crystal_get_cell(a->crystals[i]), + crystal_get_cell(b->crystals[j])) ) + { + *c1 = i; + *c2 = j; + return 1; + } + } + } + + return 0; +} + + +static void dump(struct image *win, signed int *series, int window_len, int pos) +{ + int i; + + for ( i=0; i [options]\n\n", s); @@ -70,9 +107,11 @@ int main(int argc, char *argv[]) { int c; Stream *st; - int n_images = 0; - int n_crystals = 0; int polarisation = 1; + int pos = 0; + struct image *win; + signed int *series; + int window_len = 64; /* Long options */ const struct option longopts[] = { @@ -124,49 +163,81 @@ int main(int argc, char *argv[]) return 1; } + win = calloc(window_len, sizeof(struct image)); + series = calloc(window_len, sizeof(int)); + if ( (win == NULL) || (series == NULL) ) { + ERROR("Failed to allocate series buffers\n"); + return 1; + } + + pos = 0; do { - int i; - struct image cur; + struct image *cur; + int c1, c2; - cur.div = NAN; - cur.bw = NAN; - cur.det = NULL; - if ( read_chunk_2(st, &cur, STREAM_READ_REFLECTIONS + cur = &win[pos]; + + cur->div = NAN; + cur->bw = NAN; + cur->det = NULL; + if ( read_chunk_2(st, cur, STREAM_READ_REFLECTIONS | STREAM_READ_UNITCELL) != 0 ) { break; } - if ( isnan(cur.div) || isnan(cur.bw) ) { + if ( isnan(cur->div) || isnan(cur->bw) ) { ERROR("Chunk doesn't contain beam parameters.\n"); return 1; } - n_images++; - - for ( i=0; i