From ed5e49e996cd4ee9d1118e19a27ee1ac7cc67c41 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 19 Nov 2010 17:08:34 +0100 Subject: facetron: Refine divergence --- src/facetron.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src') diff --git a/src/facetron.c b/src/facetron.c index a0c2b6e4..cf4f099e 100644 --- a/src/facetron.c +++ b/src/facetron.c @@ -43,6 +43,7 @@ /* Refineable parameters */ enum { REF_SCALE, + REF_DIV, NUM_PARAMS }; @@ -86,11 +87,21 @@ struct refine_args static double gradient(struct image *image, int k, struct cpeak spot, double I_partial) { + double ds; + double nom, den; + + ds = 2.0 * resolution(image->indexed_cell, spot.h, spot.k, spot.l); + switch ( k ) { case REF_SCALE : return I_partial; + case REF_DIV : + nom = sqrt(2.0) * ds * sin(image->div); + den = sqrt(1.0 - cos(image->div)); + return nom/den; + } ERROR("No gradient defined for parameter %i\n", k); @@ -107,6 +118,11 @@ static void apply_shift(struct image *image, int k, double shift) image->osf += shift; break; + case REF_DIV : + STATUS("Shifting div by %e\n", shift); + image->div += shift; + break; + default : ERROR("No shift defined for parameter %i\n", k); abort(); -- cgit v1.2.3