aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2014-09-09 10:38:56 +0200
committerThomas White <taw@physics.org>2014-09-09 10:38:56 +0200
commitaffe4b0ebb20211d806baf0bf03bd288377a19a2 (patch)
tree233d2d550ff5a8bafb365b353a8e0f6f773817b4 /src
parent16a5848ff278be2e7612f36ca9103b668e47306d (diff)
pattern_sim: Fix handling of centric reflections
Diffstat (limited to 'src')
-rw-r--r--src/diffraction.c8
-rw-r--r--src/pattern_sim.c11
2 files changed, 11 insertions, 8 deletions
diff --git a/src/diffraction.c b/src/diffraction.c
index 6383a8b4..8a50e115 100644
--- a/src/diffraction.c
+++ b/src/diffraction.c
@@ -146,25 +146,23 @@ static double sym_lookup_phase(const double *phases,
signed int h, signed int k, signed int l)
{
int i;
- double ret = 0.0;
for ( i=0; i<num_equivs(sym, NULL); i++ ) {
signed int he;
signed int ke;
signed int le;
- double f, val;
+ double f;
get_equiv(sym, NULL, i, h, k, l, &he, &ke, &le);
f = (double)lookup_arr_flag(flags, he, ke, le);
- val = lookup_arr_phase(phases, he, ke, le);
- ret += f*val;
+ if ( f ) return lookup_arr_phase(phases, he, ke, le);
}
- return ret;
+ return 0.0;
}
diff --git a/src/pattern_sim.c b/src/pattern_sim.c
index fca12bab..86f7d27a 100644
--- a/src/pattern_sim.c
+++ b/src/pattern_sim.c
@@ -99,22 +99,27 @@ static void show_help(const char *s)
}
-static double *intensities_from_list(RefList *list)
+static double *intensities_from_list(RefList *list, SymOpList *sym)
{
Reflection *refl;
RefListIterator *iter;
double *out = new_arr_intensity();
+ SymOpMask *m = new_symopmask(sym);
+ int neq = num_equivs(sym, NULL);
for ( refl = first_refl(list, &iter);
refl != NULL;
refl = next_refl(refl, iter) ) {
signed int h, k, l;
+ int eps;
double intensity = get_intensity(refl);
get_indices(refl, &h, &k, &l);
+ special_position(sym, m, h, k, l);
+ eps = neq / num_equivs(sym, m);
- set_arr_intensity(out, h, k, l, intensity);
+ set_arr_intensity(out, h, k, l, intensity / eps);
}
@@ -521,7 +526,7 @@ int main(int argc, char *argv[])
} else {
phases = NULL;
}
- intensities = intensities_from_list(reflections);
+ intensities = intensities_from_list(reflections, sym);
phases = phases_from_list(reflections);
flags = flags_from_list(reflections);