aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel')
-rw-r--r--libcrystfel/src/symmetry.c28
-rw-r--r--libcrystfel/src/symmetry.h3
2 files changed, 31 insertions, 0 deletions
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
@@ -1192,6 +1192,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
* @h: index of a reflection
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 */