"""
The rhombohedral space groups have two commonly used settings, using
two different basis systems: "hexagonal basis", and "rhombohedral
basis". This confused me (rwgk) for the longest time.

The best way to think about this is to compare to, e.g. the
tetragonal case, where you have two "Bravais types", "tetragonal P"
and "tetragonal I". Now, you can transform the tetragonal I groups to
a primitive setting. It is still the "tetragonal I Bravais type", just
in a primitive setting, which leads to "weird" unit cell parameters
that nobody wants to use.

In the trigonal system you'll find "trigonal P" and "trigonal R".
As in the case of the tetragonal I, you can convert the trigonal R
groups to a primitive setting. However, in contrast to the tetragonal
case, you get "nice" unit cell parameters.

See also: http://en.wikipedia.org/wiki/Bravais_lattice

Note that "trigonal P" and "hexagonal P" are the same Bravais type.
"""
from __future__ import division

from cctbx import crystal
import sys

def run(args):
  assert len(args) == 0
  #
  print 'This is the "tetragonal I" setting humans like:'
  tetragonal_i = crystal.symmetry(
    unit_cell=(10,10,13,90,90,90),
    space_group_symbol="I4")
  tetragonal_i.show_summary()
  print
  print 'Exact same symmetry, but using a basis system that is not very'
  print 'accessible to humans:'
  cb_op = tetragonal_i.change_of_basis_op_to_primitive_setting()
  print 'Change of basis:', cb_op
  tetragonal_i.change_basis(cb_op=cb_op).show_summary()
  print
  #
  print 'This is the "trigonal R" setting most humans like best:'
  trigonal_r = crystal.symmetry(
    unit_cell=(10,10,13,90,90,120),
    space_group_symbol="R3")
  trigonal_r.show_summary()
  print
  print 'Same symmetry, sometimes preferred:'
  cb_op = trigonal_r.change_of_basis_op_to_primitive_setting()
  print 'Change of basis:', cb_op
  trigonal_r.change_basis(cb_op).show_summary()
  print

if (__name__ == "__main__"):
  run(sys.argv[1:])
