![]() |
![]() |
![]() |
CrystFEL Reference Manual | ![]() |
---|---|---|---|---|
Top | Description |
#include "symmetry.h" typedef SymOpList; typedef SymOpMask; void free_symoplist (SymOpList *ops
); int num_equivs (const SymOpList *ops
,const SymOpMask *m
); SymOpList * get_pointgroup (const char *sym
); SymOpList * parse_symmetry_operations (const char *s
); void add_symop (SymOpList *ops
,IntegerMatrix *m
); 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
); IntegerMatrix * get_symop (const SymOpList *ops
,const SymOpMask *m
,int idx
); void special_position (const SymOpList *ops
,SymOpMask *m
,signed int h
,signed int k
,signed int l
); void get_asymm (const SymOpList *ops
,signed int h
,signed int k
,signed int l
,signed int *hp
,signed int *kp
,signed int *lp
); SymOpList * get_ambiguities (const SymOpList *source
,const SymOpList *target
); int is_subgroup (const SymOpList *source
,const SymOpList *target
); SymOpMask * new_symopmask (const SymOpList *list
); void free_symopmask (SymOpMask *m
); void describe_symmetry (const SymOpList *s
); const char * symmetry_name (const SymOpList *ops
); void set_symmetry_name (SymOpList *ops
,const char *name
); char * get_matrix_name (const IntegerMatrix *m
,int row
); int is_centrosymmetric (const SymOpList *s
); int is_centric (signed int h
,signed int k
,signed int l
,const SymOpList *ops
);
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').
void free_symoplist (SymOpList *ops
);
Frees a SymOpList
and all associated resources.
|
A SymOpList to free |
int num_equivs (const SymOpList *ops
,const SymOpMask *m
);
|
A SymOpList
|
|
A SymOpMask , which has been shown to special_position()
|
Returns : |
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.
|
A string representation of a point group |
void add_symop (SymOpList *ops
,IntegerMatrix *m
);
Adds m
to ops
.
|
A SymOpList
|
|
An IntegerMatrix
|
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.
|
A SymOpList
|
|
A SymOpMask , which has been shown to special_position()
|
|
Index of the operation to use |
|
index of reflection |
|
index of reflection |
|
index of reflection |
|
location to store h index of equivalent reflection |
|
location to store k index of equivalent reflection |
|
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.
|
A SymOpList , usually corresponding to a point group |
|
A SymOpMask created with new_symopmask()
|
|
index of a reflection |
|
index of a reflection |
|
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()
.
|
A SymOpList , usually corresponding to a point group |
|
index of a reflection |
|
index of a reflection |
|
index of a reflection |
|
location for asymmetric index of reflection |
|
location for asymmetric index of reflection |
|
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.
void free_symopmask (SymOpMask *m
);
Frees a SymOpMask
and all associated resources.
|
A SymOpMask to free |
void describe_symmetry (const SymOpList *s
);
Writes the name and a list of operations to stderr.
|
A SymOpList
|
const char * symmetry_name (const SymOpList *ops
);
|
A SymOpList
|
Returns : |
a text description of ops . |
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.
int is_centrosymmetric (const SymOpList *s
);
|
A SymOpList
|
Returns : |
non-zero if s contains an inversion operation |