c2x and Visualising Symmetry

Few programs are able to visualise symmetry operations, but here we explore two, Jmol and Mercury. The example system used is calcite, which contains rotation axes and glide planes.

The rest of this page describes the common start to the pages on

We start with a simple description of calcite:

calcite.cell

%block LATTICE_ABC
ang
 6.3600000  6.3600000  6.3600000
 46.8330002  46.8330001  46.8330002
%endblock LATTICE_ABC

%block POSITIONS_FRAC
 Ca  0.000000000  0.000000000  0.000000000
 Ca  0.500000000  0.500000000  0.500000000
  O  0.493000000  0.250000000  0.007000000
  O  0.007000000  0.493000000  0.250000000
  O  0.250000000  0.007000000  0.493000000
  O  0.750000000  0.993000000  0.507000000
  O  0.993000000  0.507000000  0.750000000
  O  0.507000000  0.750000000  0.993000000
  C  0.250000000  0.250000000  0.250000000
  C  0.750000000  0.750000000  0.750000000
%endblock POSITIONS_FRAC

No symmetry operations are given, but, if c2x is compiled with SPGlib support, it can find them. From version 2.40b onwards, its output will be something like

$ c2x --list calcite.cell 
Tol=0.0001  12 symmetry operations found.
Identity
Inversion point at (0.000000,0.000000,0.000000)
 3  axis along ( 1.000, 1.000, 1.000) through (0,0,0)
-3  axis along ( 1.000, 1.000, 1.000) through (0,0,0)
 3  axis along ( 1.000, 1.000, 1.000) through (0,0,0)
-3  axis along ( 1.000, 1.000, 1.000) through (0,0,0)
 2  axis along ( 0.000,-1.000, 1.000) through (0.250000,0.250000,0.250000)
glide plane ( 0.000,-1.000, 1.000) offset (0,0,0) glide (0.5,0.5,0.5)
 2  axis along (-1.000, 0.000, 1.000) through (0.250000,0.250000,0.250000)
glide plane (-1.000, 0.000, 1.000) offset (0,0,0) glide (0.5,0.5,0.5)
 2  axis along ( 1.000,-1.000, 0.000) through (0.250000,0.250000,0.250000)
glide plane ( 1.000,-1.000, 0.000) offset (0,0,0) glide (0.5,0.5,0.5)

Note that such descriptions are not unique. An axis along (1,-1,0) is also an axis along (-1,1,0). If it passes through (0,0.5,0) it will also pass though (0.5,0,0) and (0.25,0.25,0), etc. It can be hard to determine whether two such descriptions do describe correctly the same operation.

Both Jmol and Mercury expect the symmetry operations to be listed, and would prefer .cif as input. So

$ c2x -r --sym --cif calcite.cell calcite.cif

where --sym tells c2x to calculate the symmetry operations, using SPGlib, and it will include them in the output where possible. The -r reduces the CIF file to the symmetry-inequivalent atoms, of which there are just three.

calcite.cif

# written by c2x
data_c2x

_cell_length_a      6.3600000
_cell_length_b      6.3600000
_cell_length_c      6.3600000
_cell_angle_alpha   46.8330002
_cell_angle_beta    46.8330001
_cell_angle_gamma   46.8330002

loop_
_atom_site_type_symbol
_atom_site_fract_x
_atom_site_fract_y
_atom_site_fract_z
_atom_site_U_iso_or_equiv
_atom_site_occupancy
Ca 0.0000000000 0.0000000000 0.0000000000 0.01 1.00
O 0.4930000000 0.2500000000 0.0070000000 0.01 1.00
C 0.2500000000 0.2500000000 0.2500000000 0.01 1.00

loop_
_symmetry_equiv_pos_as_xyz
x,y,z
-x,-y,-z
+z,+x,+y
-z,-x,-y
+y,+z,+x
-y,-z,-x
-x+1/2,-z+1/2,-y+1/2
+x+1/2,+z+1/2,+y+1/2
-z+1/2,-y+1/2,-x+1/2
+z+1/2,+y+1/2,+x+1/2
-y+1/2,-x+1/2,-z+1/2
+y+1/2,+x+1/2,+z+1/2

(The above follows, imperfectly, an old version of the CIF standard. However, it is good enough for our purposes.)

Symmetry with Jmol

Symmetry with Mercury