From d05449bb19cd366e6cafd9041221ca807e467229 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric-Emmanuel=20PICCA?= Date: Wed, 3 Mar 2010 16:54:52 +0100 Subject: [PATCH] * add some DEBUG capability in the pseudo axes auto file to ease the debugging. --- hkl/hkl-pseudoaxis-auto.c | 78 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/hkl/hkl-pseudoaxis-auto.c b/hkl/hkl-pseudoaxis-auto.c index 1210bd76..00cbf5ce 100644 --- a/hkl/hkl-pseudoaxis-auto.c +++ b/hkl/hkl-pseudoaxis-auto.c @@ -23,6 +23,8 @@ #include #include +#define DEBUG 1 + /*********************************************/ /* methods use to solve numerical pseudoAxes */ /*********************************************/ @@ -60,18 +62,17 @@ static void find_degenerated_axes(HklPseudoAxisEngine *self, degenerated[j] = 1; } - /* - hkl_pseudoAxisEngine_fprintf(func->params, stdout); - fprintf(stdout, "\n"); - for(i=0; isize; ++i) - fprintf(stdout, " %d", degenerated[i]); - for(i=0;isize;++i) { - fprintf(stdout, "\n "); - for(j=0;jsize;++j) - fprintf(stdout, " %f", gsl_matrix_get(J, i, j)); - } - fprintf(stdout, "\n"); - */ +#ifdef DEBUG + fprintf(stdout, "\nLooks for degenerated axes\n"); + for(i=0; isize; ++i) + fprintf(stdout, " %d", degenerated[i]); + for(i=0;isize;++i) { + fprintf(stdout, "\n "); + for(j=0;jsize;++j) + fprintf(stdout, " %f", gsl_matrix_get(J, i, j)); + } + fprintf(stdout, "\n"); +#endif gsl_matrix_free(J); } @@ -130,15 +131,24 @@ static int find_first_geometry(HklPseudoAxisEngine *self, status = gsl_multiroot_test_residual (s->f, HKL_EPSILON); } while (status == GSL_CONTINUE && iter < 1000); -/* - fprintf(stdout, "status : %d iter : %d", status, iter); +#ifdef DEBUG + fprintf(stdout, "\nstatus : %d iter : %d", status, iter); for(i=0; if->data[i]); fprintf(stdout, "\n"); -*/ +#endif + if (status != GSL_CONTINUE) { find_degenerated_axes(self, f, s->x, s->f, degenerated); - + +#ifdef DEBUG + // print the test header + fprintf(stdout, "\n"); + for(i=0; iaxes[i])->name); +#endif // set the geometry from the gsl_vector // in a futur version the geometry must contain a gsl_vector // to avoid this. @@ -207,22 +217,35 @@ static int test_sector(gsl_vector const *x, gsl_multiroot_function *function, gsl_vector *f) { + int res = HKL_SUCCESS; size_t i; double *f_data = f->data; function->f(x, function->params, f); -/* - fprintf(stdout, "\n"); + for(i=0; isize; ++i) - fprintf(stdout, " %f", f_data[i]); + if (fabs(f_data[i]) > HKL_EPSILON){ + res = HKL_FAIL; + break; + } + +#ifdef DEBUG + fprintf(stdout, "\n"); for(i=0; isize; ++i) - fprintf(stdout, " %f", x_data[i] * HKL_RADTODEG); //hkl_pseudo_axis_engine_fprintf(stdout, (HklPseudoAxisEngine *)function->params); -*/ + if(fabs(f_data[i]) < HKL_EPSILON) + fprintf(stdout, "\t%f *", f_data[i]); + else + fprintf(stdout, "\t%f", f_data[i]); for(i=0; isize; ++i) - if (fabs(f_data[i]) > HKL_EPSILON) - return HKL_FAIL; + fprintf(stdout, "\t%f", gsl_sf_angle_restrict_symm(x->data[i]) * HKL_RADTODEG); - return HKL_SUCCESS; + if(res == HKL_FAIL) + fprintf(stdout, "\t FAIL"); + else + fprintf(stdout, "\t SUCCESS"); +#endif + + return res; } /** @@ -286,7 +309,7 @@ static int solve_function(HklPseudoAxisEngine *self, _f = gsl_vector_alloc(len); gsl_multiroot_function f = {function, len, self}; res = find_first_geometry(self, &f, degenerated); - if (res == HKL_SUCCESS) { + if (!res) { memset(p, 0, sizeof(p)); /* use first solution as starting point for permutations */ for(i=0; ifunctions);++i) res &= solve_function(engine, self->functions[i]); +#ifdef DEBUG + hkl_pseudo_axis_engine_fprintf(stdout, engine); +#endif + return res; } -- 2.11.4.GIT