From b83926c3031606b4caad33c007e7a281252d9b6a Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 2 Feb 2011 17:14:41 +0100 Subject: Make Fox & Holmes method work (nearly) --- src/hrs-scaling.c | 74 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/hrs-scaling.c b/src/hrs-scaling.c index 26b19810..a7a574f6 100644 --- a/src/hrs-scaling.c +++ b/src/hrs-scaling.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "image.h" #include "peaks.h" @@ -248,19 +249,43 @@ static double iterate_scale(struct image *images, int n, gsl_matrix *e_vec; int val; + /* Diagonalise */ work = gsl_eigen_symmv_alloc(n); e_val = gsl_vector_alloc(n); e_vec = gsl_matrix_alloc(n, n); val = gsl_eigen_symmv(M, e_val, e_vec, work); STATUS("gsl_eigen_symmv said %i (%s)\n", val, gsl_strerror(val)); gsl_eigen_symmv_free(work); - + val = gsl_eigen_symmv_sort(e_val, e_vec, GSL_EIGEN_SORT_ABS_DESC); + STATUS("gsl_eigen_symmv_sort said %i (%s)\n", val, gsl_strerror(val)); show_eigen(e_vec, e_val, n); -#if 0 + /* Set up the diagonalised normal equations */ + gsl_matrix *D; + gsl_vector *rprime; + D = gsl_matrix_calloc(n, n); + for ( a=0; a fabs(max_shift) ) { max_shift = fabs(shift); } } - gsl_vector_free(shifts); -#endif + gsl_vector_free(shifts); + gsl_vector_free(sprime); + gsl_matrix_free(e_vec); + gsl_vector_free(e_val); + gsl_matrix_free(D); gsl_matrix_free(M); gsl_vector_free(v); - return 0.0;//max_shift; + return max_shift; } @@ -351,14 +379,12 @@ static void normalise_osfs(struct image *images, int n) double tot = 0.0; double norm; - images[0].osf = 1.0; - - for ( m=1; m 0.01) && (i < MAX_CYCLES) ); - for ( m=0; m