From ef7f6088d3b59ed8c346c5d20a8c534e6bf041f8 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 3 Apr 2014 11:45:41 +0200 Subject: check_hkl: Fix the FIXMEs and calculate B factor --- src/check_hkl.c | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 109 insertions(+), 12 deletions(-) (limited to 'src/check_hkl.c') diff --git a/src/check_hkl.c b/src/check_hkl.c index 9c78a42a..f409ef06 100644 --- a/src/check_hkl.c +++ b/src/check_hkl.c @@ -37,6 +37,7 @@ #include #include #include +#include #include "utils.h" #include "statistics.h" @@ -187,6 +188,61 @@ static void l_test(RefList *list, UnitCell *cell, const SymOpList *sym, } +static double get_sfac(char el, double s) +{ + double sfac[9]; + double sf; + double s2 = pow(s/1e10, 2.0); /* s^2 in A^-2 */ + + switch ( el ) { + + case 'C' : + sfac[0] = 2.31000; sfac[1] = 20.8439; + sfac[2] = 1.02000; sfac[3] = 10.2075; + sfac[4] = 1.58860; sfac[5] = 0.568700; + sfac[6] = 0.865000; sfac[7] = 51.6512; + sfac[8] = 0.215600; + break; + + case 'N' : + sfac[0] = 12.2126; sfac[1] = 0.005700; + sfac[2] = 3.13220; sfac[3] = 9.89330; + sfac[4] = 2.01250; sfac[5] = 28.9975; + sfac[6] = 1.16630; sfac[7] = 0.582600; + sfac[8] = -11.529; + break; + + case 'O' : + sfac[0] = 3.04850; sfac[1] = 13.2771; + sfac[2] = 2.28680; sfac[3] = 5.70110; + sfac[4] = 1.54630; sfac[5] = 0.323900; + sfac[6] = 0.867000; sfac[7] = 322.9098; + sfac[8] = 0.250800; + break; + + case 'H' : + sfac[0] = 0.489918; sfac[1] = 20.6593; + sfac[2] = 0.262003; sfac[3] = 7.74039; + sfac[4] = 0.196767; sfac[5] = 49.5519; + sfac[6] = 0.049879; sfac[7] = 2.20159; + sfac[8] = 0.001305; + break; + + default : + ERROR("Unrecognised atom '%c'\n", el); + abort(); + } + + sf = sfac[0] * exp(-sfac[1]*s2); + sf += sfac[2] * exp(-sfac[3]*s2); + sf += sfac[4] * exp(-sfac[5]*s2); + sf += sfac[6] * exp(-sfac[7]*s2); + sf += sfac[8]; + + return sf; +} + + static void wilson_plot(RefList *list, UnitCell *cell, const SymOpList *sym, double rmin_fix, double rmax_fix, int nbins, const char *filename) @@ -196,9 +252,10 @@ static void wilson_plot(RefList *list, UnitCell *cell, const SymOpList *sym, Reflection *refl; RefListIterator *iter; FILE *fh; - double *plot_i; + double *plot_i, *s2; int *plot_n; - int i; + int i, ngen; + SymOpMask *mask; resolution_limits(list, cell, &rmin, &rmax); STATUS("1/d goes from %f to %f nm^-1\n", rmin/1e9, rmax/1e9); @@ -219,42 +276,82 @@ static void wilson_plot(RefList *list, UnitCell *cell, const SymOpList *sym, if ( plot_i == NULL ) return; for ( i=0; i\n"); + fprintf(fh, " n s^2/A^-2 d/A ln /eE nrefl\n"); for ( i=0; i