From 0897221e282cdfb66f79b9a9539be504574c2a14 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 2 May 2013 17:45:20 +0200 Subject: compare_hkl: Calculate CCano only from acentric reflections --- libcrystfel/src/symmetry.c | 28 ++++++++++++++++++++++++++++ libcrystfel/src/symmetry.h | 3 +++ src/compare_hkl.c | 16 +++++++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/libcrystfel/src/symmetry.c b/libcrystfel/src/symmetry.c index 4fdc13c6..81d87b25 100644 --- a/libcrystfel/src/symmetry.c +++ b/libcrystfel/src/symmetry.c @@ -1191,6 +1191,34 @@ static int any_negative(signed int h, signed int k, signed int l) } +/** + * is_centric: + * @h: h index + * @k: k index + * @l: l index + * @ops: A %SymOpList + * + * A reflection is centric if it is related by symmetry to its Friedel partner. + * + * Returns: true if @h @k @l is centric in @ops. + * + **/ +int is_centric(signed int h, signed int k, signed int l, const SymOpList *ops) +{ + signed int ha, ka, la; + signed int hb, kb, lb; + + get_asymm(ops, h, k, l, &ha, &ka, &la); + get_asymm(ops, -h, -k, -l, &hb, &kb, &lb); + + if ( ha != hb ) return 0; + if ( ka != kb ) return 0; + if ( la != lb ) return 0; + + return 1; +} + + /** * get_asymm: * @ops: A %SymOpList, usually corresponding to a point group diff --git a/libcrystfel/src/symmetry.h b/libcrystfel/src/symmetry.h index 68f17991..6bb6210e 100644 --- a/libcrystfel/src/symmetry.h +++ b/libcrystfel/src/symmetry.h @@ -80,6 +80,9 @@ extern const char *symmetry_name(const SymOpList *ops); extern void set_symmetry_name(SymOpList *ops, const char *name); extern void describe_symmetry(const SymOpList *s); +extern int is_centric(signed int h, signed int k, signed int l, + const SymOpList *ops); + extern void add_symop(SymOpList *ops, IntegerMatrix *m); #endif /* SYMMETRY_H */ diff --git a/src/compare_hkl.c b/src/compare_hkl.c index f91e3cee..986b9617 100644 --- a/src/compare_hkl.c +++ b/src/compare_hkl.c @@ -725,7 +725,7 @@ int main(int argc, char *argv[]) char *bfile = NULL; char *sym_str = NULL; SymOpList *sym; - int ncom, nrej, nneg, nres, nbij; + int ncom, nrej, nneg, nres, nbij, ncen; RefList *list1_acc; RefList *list2_acc; RefList *list1; @@ -948,6 +948,7 @@ int main(int argc, char *argv[]) nneg = 0; nres = 0; nbij = 0; + ncen = 0; list1_acc = reflist_new(); list2_acc = reflist_new(); for ( refl1 = first_refl(list1, &iter); @@ -1018,6 +1019,14 @@ int main(int argc, char *argv[]) Reflection *refl1_bij = NULL; Reflection *refl2_bij = NULL; signed int hb, kb, lb; + int centric; + + centric = is_centric(h, k, l, sym); + + if ( centric ) { + ncen++; + continue; + } if ( find_equiv_in_list(list1, -h, -k, -l, sym, &hb, &kb, &lb) ) @@ -1080,6 +1089,11 @@ int main(int argc, char *argv[]) " versions did not have Bijvoet partners.\n", nres); } + if ( ncen > 0 ) { + STATUS("%i reflection pairs rejected because they were" + " centric.\n", ncen); + } + STATUS("%i reflection pairs accepted.\n", ncom); resolution_limits(list1_acc, cell, &rmin, &rmax); -- cgit v1.2.3