Symmetry
A set of symmetry operations can be represented in various different ways.
Within brille
each operation is represented as an integer-valued matrix and a floating-point-valued vector.
The matrix must be the identity matrix, a rotation matrix, or a rotoinversion matrix expressed as integer multiples of the real-space basis vectors.
The vector is the translation part of the operation expressed in fractional coordinates of the same basis vectors.
Other representations of a symmetry operation are convenient for human interpretation and communication.
One such which can be used to specify symmetry operations for Symmetry
is CIF xyz,
which allows for specifying either a list of matrices and list of vectors or a single CIF xyz string:
>>> s0 = brille._brille.Symmetry([[[1, 0, 0], [0, -1, 0], [0, 0, 1]]], [[0, 1/2, 1/2]])
>>> s1 = brille._brille.Symmetry('x, 1/2-y, 1/2+z')
>>> s0 == s1
True
With a CIF xyz encoded string from, e.g., a CIF file, one can directly create a Direct
lattice object
with the appropriate symmetry operations without also specifying, e.g., the spacegroup:
basis_lengths, basis_angles, xyz_string = hypothetical_CIF_parser('some_system.cif')
lattice = brille._brille.Direct(basis_lengths, basis_angles)
lattice.spacegroup = brille._brille.Symmetry(xyz_string)
in setting the lattice spacegroup, the generate()
method is called,
so the provided CIF xyz operators need only be the generators of the spacegroup.
- class brille._brille.Symmetry(*args, **kwargs)
One or more symmetry operations of a space group.
A symmetry operation is the combination of a generalised rotation, \(W\), and translation, \(\mathbf{w}\). For any position in space, \(\mathbf{x}\), the operation transforms \(\mathbf{x}\) to another equivalent position
\[\mathbf{x}' = W \mathbf{x} + \mathbf{w} \]and can equivalently be expressed as \(\mathbf{x}' = \mathscr{M}\mathbf{x}\).
Crystallographic symmetry operations have an order, \(o\), for which \(\mathscr{M}^o = \mathscr{E}\) i.e. \(o\) repeated applications of the operation is equivalent to the identity operator.
A set of symmetry operations can form a group, \(\mathbb{G}\), with the property that \(\mathscr{M}_k = \mathscr{M}_i \mathscr{M}_j\) with \(\mathscr{M}_i,\mathscr{M}_j,\mathscr{M}_k \in \mathbb{G}\).
This class can be used to hold any number of related symmetry operators, and to generate all spacegroup operators from those stored.
- Parameters:
hall (int) – The integer Hall number for the desired space group operations [[deprecated]].
W (arraylike, int) – The generalised rotation (matrix) part of the symmetry operator(s)
w (arraylike, float) – The translation (vector) part of the symmetry operator(s)
cifxyz (str) – The symmetry operator(s) encoded in CIF xyz format
Note
The overloaded forms of
__init__
take one of hall, (W, w), or cifxyz.Overloaded function.
__init__(self: brille._brille.Symmetry, Hall number: int) -> None
__init__(self: brille._brille.Symmetry, W: numpy.ndarray[numpy.int32], w: numpy.ndarray[numpy.float64]) -> None
__init__(self: brille._brille.Symmetry, CIF xyz string: str) -> None
- generate(self: brille._brille.Symmetry) brille._brille.Symmetry
- generators(self: brille._brille.Symmetry) brille._brille.Symmetry
Hall Symbol
A more compact representation of a full space group is the Hall symbol which has the advantage of representing all unique crystallographic lattices as an encoded set of generators.
Within brille
, HallSymbol
can be used to decode an arbitrary Hall symbol.
And then its generators can be extracted to create the spacegroup for lattice:
basis_lengths, basis_angles, hall_symbol = hypothetical_CIF_parser('some_system.cif')
lattice = brille._brille.Direct(basis_lengths, basis_angles)
lattice.spacegroup = brille._brille.HallSymbol(hall_symbol).generators
- class brille._brille.HallSymbol(self: brille._brille.HallSymbol, Hall_symbol: str)
A crystallographic spacegroup’s symmetries encoded in Hall’s notation
Hall proposed a compact unambiguous notation for the representation of the generators of a spacegroup. Within his notation each motion is comprised of a character with one or more subscripts and superscripts which describe its order, unique axis, and translation. The notation specifies that, depending on the position of a motion and details of any preceding motion, some or all of the sub- and superscripts can be omitted. The
HallSymbol
has been written to handle the logic necessary to decode a Hall symbol into its equivalent motions. An added complication arises when the Hall symbol is encoded as an ASCII string. Namely, there are no sub- or superscript glyphs and some scheme must be enacted to represent them.
Other classes
- class brille._brille.PointSymmetry(*args, **kwargs)
Holds the \(3 \times 3\) rotation matrices \(R\) which comprise a point group symmetry.
A point group describes the local symmetry of a lattice point. It contains all of the generalised rotations of a
Symmetry
with none of its translations.Overloaded function.
__init__(self: brille._brille.PointSymmetry, Hall_number: int, time_reversal: int = 0) -> None
__init__(self: brille._brille.PointSymmetry, Symmetry: brille._brille.Symmetry) -> None
- nfolds(self: brille._brille.PointSymmetry, arg0: int) brille._brille.PointSymmetry