diff options
author | taw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1> | 2007-11-27 11:59:29 +0000 |
---|---|---|
committer | taw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1> | 2007-11-27 11:59:29 +0000 |
commit | 75dba987380b56cba95624b79b85b7de37210531 (patch) | |
tree | 1fdedd5d80124919c6e2ee71e19fe364ee26afd8 | |
parent | 9c14e5f69d55f20ea41f36c3da3f6ee9adc1678a (diff) |
Mostly demonstrate why this refinement algorithm doesn't work
git-svn-id: svn://cook.msm.cam.ac.uk:745/diff-tomo/dtr@212 bf6ca9ba-c028-0410-8290-897cf20841d1
-rw-r--r-- | src/refine.c | 69 |
1 files changed, 30 insertions, 39 deletions
diff --git a/src/refine.c b/src/refine.c index e4ee409..6b4fa9c 100644 --- a/src/refine.c +++ b/src/refine.c @@ -327,54 +327,45 @@ static int refine_sequence_sweep(ControlContext *ctx, double *fit, double *warp) double series_dev_mean = 0; int series_dev_n = 0; + /* Ensure that ctx->cell_lattice is set up */ + reproject_lattice_changed(ctx); + for ( i=0; i<ctx->images->n_images; i++ ) { - /* Ensure lattice is up to date */ + ImageRecord *image; + int j, n; + double image_dev_mean = 0; + + image = &ctx->images->images[i]; + + /* Fit this image and update ctx->cell_lattice, index the selected pattern */ + refine_fit_image(ctx->cell, image, ctx->cell_lattice); reproject_lattice_changed(ctx); - ctx->images->images[i].rflist = NULL; /* Invalidate reprojection for this image - it's wrong */ + image->rflist = reproject_get_reflections(image, ctx->cell_lattice); - if ( is_odd(i) ) { + n = 0; + for ( j=0; j<image->rflist->n_features; j++ ) { - /* Odd-numbered images: measure */ - ImageRecord *image; - int j, n; - double image_dev_mean = 0; + double dix, diy; - image = &ctx->images->images[i]; - if ( !image->rflist ) { - image->rflist = reproject_get_reflections(image, ctx->cell_lattice); - } + /* Skip if no partner */ + if ( !image->rflist->features[j].partner ) continue; - n = 0; - for ( j=0; j<image->rflist->n_features; j++ ) { - - double dix, diy; - - /* Skip if no partner */ - if ( !image->rflist->features[j].partner ) continue; - - /* Determine the difference vector */ - dix = image->rflist->features[j].partner->x - image->rflist->features[j].x; - diy = image->rflist->features[j].partner->y - image->rflist->features[j].y; - - image_dev_mean += sqrt(dix*dix + diy*diy); - n++; - - } - image_dev_mean /= n; + /* Determine the difference vector */ + dix = image->rflist->features[j].partner->x - image->rflist->features[j].x; + diy = image->rflist->features[j].partner->y - image->rflist->features[j].y; - if ( image_dev_mean > series_dev_max ) series_dev_max = image_dev_mean; - if ( image_dev_mean < series_dev_min ) series_dev_min = image_dev_mean; - series_dev_mean += image_dev_mean; - series_dev_n++; - - } else { - - /* Even-numbered images: fit */ - refine_fit_image(ctx->cell, &ctx->images->images[i], ctx->cell_lattice); + image_dev_mean += sqrt(dix*dix + diy*diy); + n++; } - + image_dev_mean /= n; + + if ( image_dev_mean > series_dev_max ) series_dev_max = image_dev_mean; + if ( image_dev_mean < series_dev_min ) series_dev_min = image_dev_mean; + series_dev_mean += image_dev_mean; + series_dev_n++; + } series_dev_mean /= series_dev_n; @@ -428,7 +419,7 @@ static gint refine_sequence(GtkWidget *widget, ControlContext *ctx) { printf("RF: omega_offs=%f, fit=%f, warp=%f\n", omega_offs, fit, warp); fit_vals[idx] = fit; warp_vals[idx++] = warp; - + for ( i=0; i<ctx->images->n_images; i++ ) { ctx->images->images[i].omega -= omega_offs; } |