reflection_conditions
General reflection conditions (systematic absences) in International Tables form.
Given the symmetry operations of a space group, derive the reflection conditions grouped by reflection class (hkl, 0kl, h0l, ..., h00, 0k0, 00l, ...) as printed in the International Tables for Crystallography.
The derivation is exact and operation-based. The reflections left invariant by an operation (R, t) -- those with R^T h = h -- form an integer sublattice S of reciprocal space; these sublattices ARE the reflection classes (rank 3 = the general class hkl, rank 2 = a zone like 0kl, rank 1 = an axis like 00l). Every operation fixing such a class pointwise forces
t . h in Z for h in S
for the reflection to be present. Per class these congruences are collected, reduced to a minimal set, and expressed relative to the more general classes already listed -- so each printed line carries only the additional condition, as in the International Tables. Classes are derived from the operations, so hexagonal and cubic zones are handled without special-casing.
ReflectionCondition
dataclass
A reflection condition for a single reflection class.
Attributes:
| Name | Type | Description |
|---|---|---|
reflection_class |
str
|
the class label, e.g. "0kl" |
condition |
str
|
the additional human-readable condition, e.g. "k+l=4n" |
basis |
tuple
|
(3, d) integer basis B; reflections in the class are h = B p |
forms |
tuple
|
tuple of (coefficients, modulus) congruences on (h, k, l); a reflection in the class is present iff coefficients . h == 0 (mod modulus) for every form (the full condition on the class) |
Source code in chmpy/crystal/reflection_conditions.py
applies_to(hkl)
is_present(hkl)
Whether hkl satisfies the full condition on this class.
reflection_conditions(symmetry_operations)
Derive the reflection conditions grouped by reflection class.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
symmetry_operations
|
the symmetry operations of a space group |
required |
Returns:
| Type | Description |
|---|---|
list[ReflectionCondition]
|
list of ReflectionCondition ordered general -> zonal -> axial, excluding |
list[ReflectionCondition]
|
classes with no condition or whose condition is already implied by a |
list[ReflectionCondition]
|
more general class. An empty list means there are no reflection |
list[ReflectionCondition]
|
conditions (every reflection is allowed). |