| Top |
| void | free_symoplist () |
| int | num_equivs () |
| SymOpList * | get_pointgroup () |
| SymOpList * | parse_symmetry_operations () |
| void | add_symop () |
| void | get_equiv () |
| IntegerMatrix * | get_symop () |
| void | special_position () |
| void | get_asymm () |
| SymOpList * | get_ambiguities () |
| int | is_subgroup () |
| SymOpMask * | new_symopmask () |
| void | free_symopmask () |
| void | describe_symmetry () |
| const char * | symmetry_name () |
| void | set_symmetry_name () |
| char * | get_matrix_name () |
| int | is_centrosymmetric () |
| int | is_centric () |
void
free_symoplist (SymOpList *ops);
Frees a SymOpList and all associated resources.
int num_equivs (const SymOpList *ops,const SymOpMask *m);
the number of equivalent reflections for a general reflection
in point group "ops", which were not flagged by your call to
special_position().
SymOpList *
get_pointgroup (const char *sym);
This function parses sym
and returns the corresponding SymOpList.
In the string representation of the point group, use a preceding minus sign
for any character which would have a "bar". Trigonal groups must be suffixed
with either "_H" or "_R" for a hexagonal or rhombohedral lattice
respectively.
Examples: -1 1 2/m 2 m mmm 222 mm2 4/m 4 -4 4/mmm 422 -42m -4m2 4mm 3_R -3_R 32_R 3m_R -3m_R 3_H -3_H 321_H 312_H 3m1_H 31m_H -3m1_H -31m_H 6/m 6 -6 6/mmm 622 -62m -6m2 6mm 23 m-3 432 -43m m-3m.
void get_equiv (const SymOpList *ops,const SymOpMask *m,int idx,signed int h,signed int k,signed int l,signed int *he,signed int *ke,signed int *le);
This function applies the idx
-th symmetry operation from ops
to the
reflection h
, k
, l
, and stores the result at he
, ke
and le
.
Call this function multiple times with idx=0 .. num_equivs(ops, m) to get all of the equivalent reflections in turn.
If you don't mind that the same equivalent might appear twice, simply let
m
= NULL. Otherwise, call new_symopmask() and then special_position() to
set up a SymOpMask appropriately.
ops |
||
m |
A |
|
idx |
Index of the operation to use |
|
h |
index of reflection |
|
k |
index of reflection |
|
l |
index of reflection |
|
he |
location to store h index of equivalent reflection |
|
ke |
location to store k index of equivalent reflection |
|
le |
location to store l index of equivalent reflection |
IntegerMatrix * get_symop (const SymOpList *ops,const SymOpMask *m,int idx);
This function returns a pointer to an integer matrix specifying a symmetry operation contained in the symmetry operator list, and identified by the specified index.
void special_position (const SymOpList *ops,SymOpMask *m,signed int h,signed int k,signed int l);
This function sets up m
to contain information about which operations in
ops
map the reflection h
, k
, l
onto itself.
ops |
A |
|
m |
A |
|
h |
index of a reflection |
|
k |
index of a reflection |
|
l |
index of a reflection |
void get_asymm (const SymOpList *ops,signed int h,signed int k,signed int l,signed int *hp,signed int *kp,signed int *lp);
This function determines the asymmetric version of the reflection h
, k
, l
in symmetry group ops
, and puts the result in hp
, kp
, lp
.
This is a relatively expensive operation because of its generality.
Therefore, if you know you'll need to make repeated use of the asymmetric
indices, consider creating a new RefList indexed according to the asymmetric
indices themselves with asymmetric_indices(). If you do that, you'll still
be able to get the original versions of the indices with
get_symmetric_indices().
ops |
A |
|
h |
index of a reflection |
|
k |
index of a reflection |
|
l |
index of a reflection |
|
hp |
location for asymmetric index of reflection |
|
kp |
location for asymmetric index of reflection |
|
lp |
location for asymmetric index of reflection |
SymOpList * get_ambiguities (const SymOpList *source,const SymOpList *target);
Calculates twinning laws. Returns a SymOpList containing the twinning
operators, which are the symmetry operations which can be added to target
to generate source
. Only rotations are allowable - no mirrors nor
inversions.
To count the number of possibilities, use num_equivs() on the result.
The algorithm used is "Algorithm A" from Flack (1987), Acta Cryst A43 p564.
A SymOpList containing the twinning operators, or NULL if the
source symmetry cannot be generated from that target symmetry without using
mirror or inversion operations.
void
free_symopmask (SymOpMask *m);
Frees a SymOpMask and all associated resources.
void
describe_symmetry (const SymOpList *s);
Writes the name and a list of operations to stderr.
void set_symmetry_name (SymOpList *ops,const char *name);
Sets the text description of ops
to name
. See symmetry_name().
name
will be copied, so you can safely free it after calling this function,
if that's otherwise appropriate.
typedef struct _symoplist SymOpList;
The SymOpList is an opaque data structure containing a list of point symmetry operations. It could represent an point group or a list of indexing ambiguities (twin laws), or similar.
typedef struct _symopmask SymOpMask;
The SymOpMask is an opaque data structure containing a list of flags
associated with point symmetry operations in a specific SymOpList. It is
used to filter the operations in the SymOpList to avoid duplicating
equivalent reflections when the reflection is somehow special (e.g. 'hk0').