aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortaw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1>2007-11-27 11:59:29 +0000
committertaw27 <taw27@bf6ca9ba-c028-0410-8290-897cf20841d1>2007-11-27 11:59:29 +0000
commit75dba987380b56cba95624b79b85b7de37210531 (patch)
tree1fdedd5d80124919c6e2ee71e19fe364ee26afd8
parent9c14e5f69d55f20ea41f36c3da3f6ee9adc1678a (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.c69
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;
}