From 13257c9d5e5c0d06df4ed0bdcdbc2ba6c7acc6cd Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 12 Oct 2011 12:24:51 +0200 Subject: Rationalise handling of phases in RefList --- src/reflist-utils.c | 17 +++++++++++++---- src/reflist.c | 6 +++++- src/reflist.h | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/reflist-utils.c b/src/reflist-utils.c index 4ad5fa1c..b64e9979 100644 --- a/src/reflist-utils.c +++ b/src/reflist-utils.c @@ -68,7 +68,7 @@ double *phases_from_list(RefList *list) refl = next_refl(refl, iter) ) { signed int h, k, l; - double phase = get_phase(refl); + double phase = get_phase(refl, NULL); get_indices(refl, &h, &k, &l); @@ -230,16 +230,19 @@ void write_reflections_to_file(FILE *fh, RefList *list, UnitCell *cell) refl = next_refl(refl, iter) ) { signed int h, k, l; - double intensity, esd_i, s; + double intensity, esd_i, s, ph; int red; double fs, ss; char res[16]; + char phs[16]; + int have_phase; get_indices(refl, &h, &k, &l); get_detector_pos(refl, &fs, &ss); intensity = get_intensity(refl); esd_i = get_esd_intensity(refl); red = get_redundancy(refl); + ph = get_phase(refl, &have_phase); /* Reflections with redundancy = 0 are not written */ if ( red == 0 ) continue; @@ -251,9 +254,15 @@ void write_reflections_to_file(FILE *fh, RefList *list, UnitCell *cell) strcpy(res, " -"); } + if ( have_phase ) { + snprintf(phs, 16, "%8.2f", rad2deg(ph)); + } else { + strncpy(phs, " -", 15); + } + fprintf(fh, "%3i %3i %3i %10.2f %s %10.2f %s %7i %6.1f %6.1f\n", - h, k, l, intensity, " -", esd_i, res, red, + h, k, l, intensity, phs, esd_i, res, red, fs, ss); } @@ -350,7 +359,7 @@ RefList *read_reflections_from_file(FILE *fh) set_redundancy(refl, cts); ph = strtod(phs, &v); - if ( v != NULL ) set_ph(refl, ph); + if ( v != NULL ) set_ph(refl, deg2rad(ph)); /* The 1/d value is actually ignored. */ diff --git a/src/reflist.c b/src/reflist.c index fc61a7e4..33a8d60e 100644 --- a/src/reflist.c +++ b/src/reflist.c @@ -78,6 +78,7 @@ struct _refldata { /* Phase */ double phase; + int have_phase; /* Redundancy */ int redundancy; @@ -451,12 +452,14 @@ double get_esd_intensity(const Reflection *refl) /** * get_phase: * @refl: A %Reflection + * @have_phase: Place to store a non-zero value if the phase is set, or NULL. * * Returns: the phase for this reflection. * **/ -double get_phase(const Reflection *refl) +double get_phase(const Reflection *refl, int *have_phase) { + if ( have_phase != NULL ) *have_phase = refl->data.have_phase; return refl->data.phase; } @@ -631,6 +634,7 @@ void set_esd_intensity(Reflection *refl, double esd) void set_ph(Reflection *refl, double phase) { refl->data.phase = phase; + refl->data.have_phase = 1; } diff --git a/src/reflist.h b/src/reflist.h index 65c8ef0b..6d64498a 100644 --- a/src/reflist.h +++ b/src/reflist.h @@ -73,7 +73,7 @@ extern int get_redundancy(const Reflection *refl); extern double get_temp1(const Reflection *refl); extern double get_temp2(const Reflection *refl); extern double get_esd_intensity(const Reflection *refl); -extern double get_phase(const Reflection *refl); +extern double get_phase(const Reflection *refl, int *have_phase); /* Set */ extern void copy_data(Reflection *to, const Reflection *from); -- cgit v1.2.3