#include <string.h>
#include <ctype.h>
#include <limits.h>
+#include <float.h>
#pragma mark ====== Global Values ======
return Qnil;
}
+static VALUE
+s_Vector3D_InitializeCopy(VALUE self, VALUE val)
+{
+ Vector *vp;
+ Data_Get_Struct(self, Vector, vp);
+ VectorFromValue(val, vp);
+ return self;
+}
+
/*
* call-seq:
* size -> Integer
return retval;
}
+static VALUE
+s_Transform_InitializeCopy(VALUE self, VALUE val)
+{
+ Transform *tp1;
+ Data_Get_Struct(self, Transform, tp1);
+ TransformFromValue(val, tp1);
+ return self;
+}
+
/*
* call-seq:
* from_columns(c1, c2, c3, c4)
/*
* call-seq:
+ * self.nearly_equal?(val, limit = FLT_EPSILON) -> bool
+ *
+ * Returns +true+ if the corresponding elements are "nearly equal", i.e. the absolute
+ * value of the difference is less than limit.
+ */
+static VALUE
+s_Transform_IsNearlyEqual(int argc, VALUE *argv, VALUE self)
+{
+ VALUE vval, lval;
+ Double limit;
+ Transform *tp1, tr;
+ int i;
+ rb_scan_args(argc, argv, "11", &vval, &lval);
+ if (lval == Qnil)
+ limit = FLT_EPSILON; /* Not DBL_EPSILON */
+ Data_Get_Struct(self, Transform, tp1);
+ TransformFromValue(vval, &tr);
+ for (i = 0; i < 12; i++) {
+ if (fabs((*tp1)[i] - tr[i]) > limit)
+ return Qfalse;
+ }
+ return Qtrue;
+}
+
+/*
+ * call-seq:
* self + val -> (new) Transform
*
* Returns a new transform corresponding to the sum of the two transform matrix.
rb_cVector3D = rb_define_class_under(rb_mMolby, "Vector3D", rb_cObject);
rb_define_alloc_func(rb_cVector3D, s_Vector3D_Alloc);
rb_define_method(rb_cVector3D, "initialize", s_Vector3D_Initialize, -1);
+ rb_define_private_method(rb_cVector3D, "initialize_copy", s_Vector3D_InitializeCopy, 1);
rb_define_method(rb_cVector3D, "size", s_Vector3D_Size, 0);
rb_define_method(rb_cVector3D, "[]", s_Vector3D_ElementAtIndex, 1);
rb_define_method(rb_cVector3D, "[]=", s_Vector3D_SetElementAtIndex, 2);
rb_cTransform = rb_define_class_under(rb_mMolby, "Transform", rb_cObject);
rb_define_alloc_func(rb_cTransform, s_Transform_Alloc);
rb_define_method(rb_cTransform, "initialize", s_Transform_Initialize, -1);
+ rb_define_private_method(rb_cTransform, "initialize_copy", s_Transform_InitializeCopy, 1);
rb_define_method(rb_cTransform, "[]", s_Transform_ElementAtIndex, 2);
rb_define_method(rb_cTransform, "[]=", s_Transform_SetElementAtIndex, 3);
rb_define_method(rb_cTransform, "==", s_Transform_IsEqual, 1);
+ rb_define_method(rb_cTransform, "nearly_equal?", s_Transform_IsNearlyEqual, -1);
rb_define_method(rb_cTransform, "+", s_Transform_Add, 1);
rb_define_method(rb_cTransform, "-", s_Transform_Subtract, 1);
rb_define_method(rb_cTransform, "*", s_Transform_Multiply, 1);
end
end
+module Kernel
+
+def symmetry_to_string(sym)
+ # Sym is a Transform object defined in crystallographic coordinates
+ str = ""
+ 3.times { |j|
+ s = ""
+ ["x", "y", "z"].each_with_index { |t, i|
+ a = sym[i, j]
+ if a.abs < 1e-4
+ next
+ elsif (a - 1.0).abs < 1e-4
+ s += (s == "" ? t : "+" + t)
+ elsif (a + 1.0).abs < 1e-4
+ s += "-" + t
+ else
+ if a > 0.0 && s != ""
+ s += "+"
+ elsif a < 0.0
+ s += "-"
+ end
+ s += sprintf("%.4f", a.abs) + t
+ end
+ }
+ a = sym[3, j]
+ if a.abs > 1e-4
+ if a > 0.0 && s != ""
+ s += "+"
+ elsif a < 0.0
+ s += "-"
+ end
+ a = a.abs
+ if (a - (n = (a + 0.5).floor)).abs < 1e-4
+ # integer
+ s += n.to_s
+ elsif ((a * 2) - (n = (a * 2 + 0.5).floor)).abs < 1e-4
+ # n/2
+ s += n.to_s + "/2"
+ elsif ((a * 3) - (n = (a * 3 + 0.5).floor)).abs < 1e-4
+ # n/3
+ s += n.to_s + "/3"
+ elsif ((a * 4) - (n = (a * 4 + 0.5).floor)).abs < 1e-4
+ # n/4
+ s += n.to_s + "/4"
+ elsif ((a * 6) - (n = (a * 6 + 0.5).floor)).abs < 1e-4
+ # n/6
+ s += n.to_s + "/6"
+ else
+ s += sprintf("%.4f", a)
+ end
+ end
+ str += s
+ if j < 2
+ str += ", "
+ end
+ }
+ str
+end
+
+def string_to_symmetry(str)
+ begin
+ sary = str.split(/, */)
+ raise if sary.count != 3
+ a = []
+ sary.each_with_index { |s, j|
+ if s[0] != "-"
+ s = "+" + s
+ end
+ while s.length > 0
+ raise if s !~ /^([-+][.0-9\/]*)([xyzXYZ]?)/
+ sa = Regexp.last_match[1]
+ st = Regexp.last_match[2]
+ s = Regexp.last_match.post_match
+ case st
+ when "x", "X"
+ i = 0
+ when "y", "Y"
+ i = 1
+ when "z", "Z"
+ i = 2
+ else
+ i = 3
+ end
+ raise if a[i * 3 + j] != nil
+ if sa == "-"
+ aa = -1
+ elsif sa == "+"
+ aa = 1
+ elsif sa.index("/")
+ sa0, sa1 = sa.split("/")
+ aa = sa0.to_f / sa1.to_f
+ else
+ aa = sa.to_f
+ end
+ a[i * 3 + j] = aa
+ end
+ }
+ 12.times { |i|
+ a[i] ||= 0.0
+ }
+ return Transform.new(a)
+ rescue
+ error_message_box "Cannot convert to symmetry operation: #{str}"
+ return nil
+ end
+end
+
+end
+
class Molecule
# Export ortep to File fp
}
end
+# For debug; check the symmetry data in space_groups.txt for self-consistency
+def Molecule.check_space_group
+ zero_transform = Transform.zero
+ group_member_p = lambda { |tr|
+ group.each_with_index { |tr2, idx|
+ tr2 = tr2 - tr
+ # Wrap the translational part to [-0.5..0.5]
+ 3.times { |k| tr2[3, k] -= (tr2[3, k] + 0.5).floor }
+ if tr2.nearly_equal?(zero_transform)
+ return idx
+ end
+ }
+ return nil
+ }
+ @@space_groups.each { |g|
+ name = g[0]
+ group = g[1]
+ n = group.count
+ err = ""
+ n.times { |i|
+ tri = group[i]
+ trx = tri.inverse
+ 3.times { |k| trx[3, k] -= trx[3, k].floor } # Wrap the translation part to [0..1]
+ if !group_member_p.call(trx)
+ err += "The element #{i + 1} has no inverse element; #{symmetry_to_string(trx)}\n"
+ next
+ end
+ n.times { |j|
+ trj = group[j]
+ trx = tri * trj
+ 3.times { |k| trx[3, k] -= trx[3, k].floor } # Wrap the translation part to [0..1]
+ if !group_member_p.call(trx)
+ err += "The element #{i + 1} * #{j + 1} is not in the group; "
+ err += "#{symmetry_to_string(tri)} * #{symmetry_to_string(trj)} = #{symmetry_to_string(trx)}\n"
+ end
+ }
+ }
+ if err == ""
+ msg = "#{name} is a complete group\n"
+ else
+ msg = "#{name} is NOT a complete group\n" + err
+ end
+ puts msg
+ break if err != ""
+ }
+end
+
+def cmd_define_symmetry
+
+ mol = self
+
+ if !defined?(@@space_groups)
+ @@space_groups = []
+ @@space_group_index = Hash.new
+ open(ScriptPath + "/space_groups.txt", "r") { |fp|
+ while ln = fp.gets
+ if ln =~ /\[(\w+)\]/
+ label = $1
+ @@space_group_index[label] ||= []
+ next
+ end
+ if ln =~ /^(\d+) +(.*)$/
+ name = "#" + $1 + ": " + $2
+ group = []
+ group_gen = []
+ while ln = fp.gets
+ ln.chomp!
+ if ln =~ /^\s*$/
+ break
+ elsif ln =~ /^\+\(/
+ lattice = ln.scan(/((^\+)|,)\(([\/,0-9]+)\)/).map {
+ |a| a[2].split(/, */).map {
+ |x| (x == "1/2" ? 0.5 : (x == "0" ? 0.0 : (raise "Cannot parse lattice generator: #{a[0]}"))) } }
+ lattice.each { |lat|
+ group.each { |tr|
+ tr = tr.dup
+ tr[3, 0] += lat[0]
+ tr[3, 1] += lat[1]
+ tr[3, 2] += lat[2]
+ group_gen.push(tr)
+ }
+ }
+ else
+ group.push(string_to_symmetry(ln))
+ end
+ end
+ group.concat(group_gen)
+ @@space_groups.push([name, group])
+ @@space_group_index[label].push(@@space_groups.count - 1)
+ end
+ end
+ }
+ Molecule.check_space_group if nil # For debug
+ end
+
+ crystal_systems = ["Triclinic", "Monoclinic", "Orthorhombic", "Tetragonal", "Hexagonal", "Cubic"]
+ space_groups = []
+
+ current_crystal_system = nil
+ current_space_group = nil
+
+ # Find current space group
+ guess_space_group = lambda {
+ current_space_group = nil
+ current_crystal_system = nil
+ s = mol.symmetries.map { |tr| tr = tr.dup; 3.times { |k| tr[3, k] -= tr[3, k].floor }; tr }
+ puts "s = #{s.inspect}"
+ @@space_groups.each_with_index { |g, i|
+ next if g[1].count != s.count
+ puts "g = #{g.inspect}"
+ ss = s.dup
+ g[1].each { |tr|
+ idx = ss.find_index { |tr2| tr.nearly_equal?(tr2) }
+ break if idx == nil
+ ss.delete_at(idx)
+ }
+ if ss.empty?
+ current_space_group = g[0]
+ @@space_group_index.each { |key, value|
+ if value.include?(i)
+ current_crystal_system = key
+ break
+ end
+ }
+ break
+ end
+ }
+ }
+
+ select_space_group = lambda { |it|
+
+ h = Dialog.run("Select Space Group") {
+ crystal_system_popup_handler = lambda { |it|
+ title = crystal_systems[it[:value]].downcase
+ if title != current_crystal_system
+ current_crystal_system = title
+ space_groups = @@space_group_index[title].map { |i| @@space_groups[i][0] }
+ item_with_tag("space_group")[:subitems] = space_groups
+ item_with_tag("operations")[:value] = ""
+ end
+ }
+ space_group_popup_handler = lambda { |it|
+ idx = @@space_group_index[current_crystal_system][it[:value]]
+ current_space_group = @@space_groups[idx][0]
+ op = ""
+ @@space_groups[idx][1].each { |tr|
+ op += symmetry_to_string(tr) + "\n"
+ }
+ item_with_tag("operations")[:value] = op
+ puts "op = #{op}"
+ }
+ layout(2,
+ item(:text, :title=>"Crystal System"),
+ item(:popup, :subitems=>crystal_systems, :tag=>"crystal_system", :action=>crystal_system_popup_handler),
+ item(:text, :title=>"Space Group"),
+ item(:popup, :subitems=>[], :tag=>"space_group", :action=>space_group_popup_handler),
+ item(:textview, :width=>360, :height=>200, :editable=>false, :tag=>"operations"),
+ -1)
+ item_with_tag("crystal_system")[:value] = -1
+ item_with_tag("space_group")[:value] = -1
+ }
+ }
+
+ syms = mol.symmetries
+ h = Dialog.run("Define Symmetry") {
+ layout(1,
+ layout(3,
+ item(:text, :title=>"Space Group"),
+ item(:textfield, :width=>80, :editable=>false, :tag=>"space_group"),
+ item(:button, :title=>"Select...", :action=>select_space_group)),
+ item(:table, :tag=>"sym_table", :width=>300, :height=>300,
+ :columns=>[["Symmetry Operations", 280]],
+ :on_count=>lambda { |it| puts mol.symmetries.count; mol.symmetries.count },
+ :on_get_value=>lambda { |it, row, col| s = symmetry_to_string(mol.symmetries[row]); puts s; s },
+ :on_set_value=>lambda { |it, row, col, val| mol.symmetries[row] = string_to_symmetry(val) },
+ :is_item_editable=>lambda { |it, row, col| true },
+ :on_selection_changed=>lambda { |it| } ),
+ layout(2,
+ item(:button, :title=>"+", :width=>40),
+ item(:button, :title=>"-", :width=>40)))
+ item_with_tag("sym_table")[:refresh] = true
+ guess_space_group.call
+ item_with_tag("space_group")[:value] = (current_space_group || "")
+ }
+
+end
+
+end
+
require_cell = lambda { |m| m && m.cell != nil }
register_menu("Xtal\tDefine Unit Cell...", :cmd_define_unit_cell)
+register_menu("Xtal\tDefine Symmetry...", :cmd_define_symmetry)
+register_menu("Xtal\t-", nil)
register_menu("Xtal\tShow Periodic Image...", :cmd_show_periodic_image, require_cell)
register_menu("Xtal\tComplete by Symmetry", :complete_by_symmetry, require_cell)
register_menu("Xtal\tCreate Packing Diagram...", :create_packing_diagram, require_cell)
register_menu("Xtal\tBest-fit Planes...", :cmd_plane, :non_empty)
register_menu("Xtal\tBonds and Angles with Sigma...", :cmd_bond_angle_with_sigma, :non_empty)
register_menu("Xtal\tShow ORTEP...", :cmd_show_ortep, :non_empty)
-
-end
--- /dev/null
+[triclinic]
+1 P1
+x,y,z
+
+2 P-1
+x,y,z
+-x,-y,-z
+
+[monoclinic]
+3 P2
+x,y,z
+-x,y,-z
+
+4 P21
+x,y,z
+-x,y+1/2,-z
+
+5 C2
+x,y,z
+-x,y,-z
++(1/2,1/2,0)
+
+6 Pm
+x,y,z
+x,-y,z
+
+7 Pc
+x,y,z
+x,-y,z+1/2
+
+8 Cm
+x,y,z
+x,-y,z
++(1/2,1/2,0)
+
+9 Cc
+x,y,z
+x,-y,z+1/2
++(1/2,1/2,0)
+
+10 P2/m
+x,y,z
+-x,y,-z
+-x,-y,-z
+x,-y,z
+
+11 P21/m
+x,y,z
+-x,y+1/2,-z
+-x,-y,-z
+x,-y+1/2,z
+
+12 C2/m
+x,y,z
+-x,y,-z
+-x,-y,-z
+x,-y,z
++(1/2,1/2,0)
+
+13 P2/c
+x,y,z
+-x,y,-z+1/2
+-x,-y,-z
+x,-y,z+1/2
+
+14 P21/c
+x,y,z
+-x,y+1/2,-z+1/2
+-x,-y,-z
+x,-y+1/2,z+1/2
+
+15 C2/c (c-glide)
+x,y,z
+-x,y,-z+1/2
+-x,-y,-z
+x,-y,z+1/2
++(1/2,1/2,0)
+
+15 C2/c (n-glide)
+x,y,z
+-x+1/2,y,-z+1/2
+-x,-y,-z
+x+1/2,-y,z+1/2
++(1/2,1/2,0)
+
+[orthorhombic]
+16 P222
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+
+17 P2221 (x)
+x,y,z
+x,-y,-z
+-x,y,-z+1/2
+-x,-y,z+1/2
+
+17 P2221 (y)
+x,y,z
+x,-y,-z+1/2
+-x,y,-z
+-x,-y,z+1/2
+
+18 P21212
+x,y,z
+x+1/2,-y+1/2,-z
+-x+1/2,y+1/2,-z
+-x,-y,z
+
+19 P212121
+x,y,z
+x+1/2,-y+1/2,-z
+-x,y+1/2,-z+1/2
+-x+1/2,-y,z+1/2
+
+19 P212121 (alt.)
+x,y,z
+x+1/2,-y,-z+1/2
+-x+1/2,y+1/2,-z
+-x,-y+1/2,z+1/2
+
+20 C2221
+x,y,z
+x,-y,-z
+-x,y,-z+1/2
+-x,-y,z+1/2
++(1/2,1/2,0)
+
+21 C222
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(1/2,1/2,0)
+
+22 F222
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(0,1/2,1/2),(1/2,0,1/2),(1/2,1/2,0)
+
+23 I222
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(1/2,1/2,1/2)
+
+24 I212121
+x,y,z
+x,-y,-z+1/2
+-x+1/2,y,-z
+-x,-y+1/2,z
++(1/2,1/2,1/2)
+
+25 Pmm2
+x,y,z
+-x,y,z
+x,-y,z
+-x,-y,z
+
+26 Pmc21
+x,y,z
+-x,y,z
+x,-y,z+1/2
+-x,-y,z+1/2
+
+27 Pcc2
+x,y,z
+-x,y,z+1/2
+x,-y,z+1/2
+-x,-y,z
+
+28 Pma2
+x,y,z
+-x+1/2,y,z
+x+1/2,-y,z
+-x,-y,z
+
+29 Pca21
+x,y,z
+-x+1/2,y,z+1/2
+x+1/2,-y,z
+-x,-y,z+1/2
+
+30 Pnc2
+x,y,z
+-x,y+1/2,z+1/2
+x,-y+1/2,z+1/2
+-x,-y,z
+
+31 Pmn21
+x,y,z
+-x,y,z
+x+1/2,-y,z+1/2
+-x+1/2,-y,z+1/2
+
+32 Pba2
+x,y,z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+-x,-y,z
+
+33 Pna21
+x,y,z
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z
+-x,-y,z+1/2
+
+34 Pnn2
+x,y,z
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+-x,-y,z
+
+35 Cmm2
+x,y,z
+-x,y,z
+x,-y,z
+-x,-y,z
++(1/2,1/2,0)
+
+36 Cmc21
+x,y,z
+-x,y,z
+x,-y,z+1/2
+-x,-y,z+1/2
++(1/2,1/2,0)
+
+37 Ccc2
+x,y,z
+-x,y,z+1/2
+x,-y,z+1/2
+-x,-y,z
++(1/2,1/2,0)
+
+38 Amm2
+x,y,z
+-x,y,z
+x,-y,z
+-x,-y,z
++(0,1/2,1/2)
+
+39 Abm2
+x,y,z
+-x,y+1/2,z
+x,-y+1/2,z
+-x,-y,z
++(0,1/2,1/2)
+
+40 Ama2
+x,y,z
+-x+1/2,y,z
+x+1/2,-y,z
+-x,-y,z
++(0,1/2,1/2)
+
+41 Aba2
+x,y,z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+-x,-y,z
++(0,1/2,1/2)
+
+42 Fmm2
+x,y,z
+-x,y,z
+x,-y,z
+-x,-y,z
++(0,1/2,1/2),(1/2,0,1/2),(1/2,1/2,0)
+
+43 Fdd2
+x,y,z
+-x+1/4,y+1/4,z+1/4
+x+1/4,-y+1/4,z+1/4
+-x,-y,z
++(0,1/2,1/2),(1/2,0,1/2),(1/2,1/2,0)
+
+44 Imm2
+x,y,z
+-x,y,z
+x,-y,z
+-x,-y,z
++(1/2,1/2,1/2)
+
+45 Iba2
+x,y,z
+-x,y,z+1/2
+x,-y,z+1/2
+-x,-y,z
++(1/2,1/2,1/2)
+
+46 Ima2
+x,y,z
+-x+1/2,y,z
+x+1/2,-y,z
+-x,-y,z
++(1/2,1/2,1/2)
+
+47 Pmmm
+x,y,z
+-x,y,z
+x,-y,z
+x,y,-z
+-x,-y,-z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+
+48 Pnnn (222 origin)
+x,y,z
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+x+1/2,y+1/2,-z+1/2
+-x+1/2,-y+1/2,-z+1/2
+x,-y,-z
+-x,y,-z
+-x,-y,z
+
+48 Pnnn (-1 origin)
+x,y,z
+-x,y+1/2,z+1/2
+x+1/2,-y,z+1/2
+x+1/2,y+1/2,-z
+-x,-y,-z
+x,-y+1/2,-z+1/2
+-x+1/2,y,-z+1/2
+-x+1/2,-y+1/2,z
+
+49 Pccm
+x,y,z
+-x,y,z+1/2
+x,-y,z+1/2
+x,y,-z
+-x,-y,-z
+x,-y,-z+1/2
+-x,y,-z+1/2
+-x,-y,z
+
+50 Pban
+x,y,z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+x+1/2,y+1/2,-z
+-x+1/2,-y+1/2,-z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+
+51 Pmma
+x,y,z
+-x+1/2,y,z
+x,-y,z
+x+1/2,y,-z
+-x,-y,-z
+x+1/2,-y,-z
+-x,y,-z
+-x+1/2,-y,z
+
+52 Pnna
+x,y,z
+-x,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+x+1/2,y,-z
+-x,-y,-z
+x,-y+1/2,-z+1/2
+-x+1/2,y+1/2,-z+1/2
+-x+1/2,-y,z
+
+53 Pmna
+x,y,z
+-x,y,z
+x+1/2,-y,z+1/2
+x+1/2,y,-z+1/2
+-x,-y,-z
+x,-y,-z
+-x+1/2,y,-z+1/2
+-x+1/2,-y,z+1/2
+
+54 Pcca
+x,y,z
+-x+1/2,y,z+1/2
+x,-y,z+1/2
+x+1/2,y,-z
+-x,-y,-z
+x+1/2,-y,-z+1/2
+-x,y,-z+1/2
+-x+1/2,-y,z
+
+55 Pbam
+x,y,z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+x,y,-z
+-x,-y,-z
+x+1/2,-y+1/2,-z
+-x+1/2,y+1/2,-z
+-x,-y,z
+
+56 Pccn
+x,y,z
+-x+1/2,y,z+1/2
+x,-y+1/2,z+1/2
+x+1/2,y+1/2,-z
+-x,-y,-z
+x+1/2,-y,-z+1/2
+-x,y+1/2,-z+1/2
+-x+1/2,-y+1/2,z
+
+57 Pbcm
+x,y,z
+-x,y+1/2,z
+x,-y+1/2,z+1/2
+x,y,-z+1/2
+-x,-y,-z
+x,-y+1/2,-z
+-x,y+1/2,-z+1/2
+-x,-y,z+1/2
+
+58 Pnnm
+x,y,z
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+x,y,-z
+-x,-y,-z
+x+1/2,-y+1/2,-z+1/2
+-x+1/2,y+1/2,-z+1/2
+-x,-y,z
+
+59 Pmmn (mm2 origin)
+x,y,z
+-x,y,z
+x,-y,z
+x+1/2,y+1/2,-z
+-x+1/2,-y+1/2,-z
+x+1/2,-y+1/2,-z
+-x+1/2,y+1/2,-z
+-x,-y,z
+
+59 Pmmn (-1 origin)
+x,y,z
+-x+1/2,y,z
+x,-y+1/2,z
+x+1/2,y+1/2,-z
+-x,-y,-z
+x+1/2,-y,-z
+-x,1/2+y,-z
+-x+1/2,-y+1/2,z
+
+60 Pbcn
+x,y,z
+-x+1/2,y+1/2,z
+x,-y,z+1/2
+x+1/2,y+1/2,-z+1/2
+-x,-y,-z
+x+1/2,-y+1/2,-z
+-x,y,-z+1/2
+-x+1/2,-y+1/2,z+1/2
+
+61 Pbca
+x,y,z
+-x+1/2,y+1/2,z
+x,-y+1/2,z+1/2
+x+1/2,y,-z+1/2
+-x,-y,-z
+x+1/2,-y+1/2,-z
+-x,y+1/2,-z+1/2
+-x+1/2,-y,z+1/2
+
+62 Pnma
+x,y,z
+-x+1/2,y+1/2,z+1/2
+x,-y+1/2,z
+x+1/2,y,-z+1/2
+-x,-y,-z
+x+1/2,-y+1/2,-z+1/2
+-x,y+1/2,-z
+-x+1/2,-y,z+1/2
+
+63 Cmcm
+x,y,z
+-x,y,z
+x,-y,z+1/2
+x,y,-z+1/2
+-x,-y,-z
+x,-y,-z
+-x,y,-z+1/2
+-x,-y,z+1/2
++(1/2,1/2,0)
+
+64 Cmca
+x,y,z
+-x,y,z
+x,-y+1/2,z+1/2
+x,y+1/2,-z+1/2
+-x,-y,-z
+x,-y,-z
+-x,y+1/2,-z+1/2
+-x,-y+1/2,z+1/2
++(1/2,1/2,0)
+
+65 Cmmm
+x,y,z
+-x,y,z
+x,-y,z
+x,y,-z
+-x,-y,-z
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(1/2,1/2,0)
+
+66 Cccm (2/m origin)
+x,y,z
+-x,y,z+1/2
+x,-y,z+1/2
+x,y,-z
+-x,-y,-z
+x,-y,-z+1/2
+-x,y,-z+1/2
+-x,-y,z
++(1/2,1/2,0)
+
+66 Cccm (222 origin)
+x,y,z
+-x,y,z+1/2
+x,-y,z+1/2
+x,y,-z+1/2
+-x,-y,-z+1/2
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(1/2,1/2,0)
+
+67 Cmma
+x,y,z
+-x,y,z
+x,-y+1/2,z
+x,y+1/2,-z
+-x,-y,-z
+x,-y,-z
+-x,y+1/2,-z
+-x,-y+1/2,z
++(1/2,1/2,0)
+
+67 Cmma (alt.)
+x,y,z
+-x,y+1/2,z
+x,-y,z
+x,y+1/2,-z
+-x,-y,-z
+x,-y+1/2,-z
+-x,y,-z
+-x,-y+1/2,z
++(1/2,1/2,0)
+
+68 Ccca (222 origin)
+x,y,z
+-x,y+1/2,z+1/2
+x,-y+1/2,z+1/2
+x,y+1/2,-z+1/2
+-x,-y+1/2,-z+1/2
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(1/2,1/2,0)
+
+68 Ccca (-1 origin)
+x,y,z
+-x,y+1/2,z+1/2
+x,-y,z+1/2
+x,y+1/2,-z
+-x,-y,-z
+x,-y+1/2,-z+1/2
+-x,y,-z+1/2
+-x,-y+1/2,z
++(1/2,1/2,0)
+
+68 Ccca (-1 origin, alt.)
+x,y,z
+-x,y,z+1/2
+x,-y+1/2,z+1/2
+x,y+1/2,-z
+-x,-y,-z
+x,-y,-z+1/2
+-x,y+1/2,-z+1/2
+-x,-y+1/2,z
++(1/2,1/2,0)
+
+69 Fmmm
+x,y,z
+-x,y,z
+x,-y,z
+x,y,-z
+-x,-y,-z
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(0,1/2,1/2),(1/2,0,1/2),(1/2,1/2,0)
+
+70 Fddd (222 origin)
+x,y,z
+-x+1/4,y+1/4,z+1/4
+x+1/4,-y+1/4,z+1/4
+x+1/4,y+1/4,-z+1/4
+-x+1/4,-y+1/4,-z+1/4
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(0,1/2,1/2),(1/2,0,1/2),(1/2,1/2,0)
+
+70 Fddd (-1 origin)
+x,y,z
+-x,y+1/4,z+1/4
+x+1/4,-y,z+1/4
+x+1/4,y+1/4,-z
+-x,-y,-z
+x,-y+1/4,-z+1/4
+-x+1/4,y,-z+1/4
+-x+1/4,-y+1/4,z
++(0,1/2,1/2),(1/2,0,1/2),(1/2,1/2,0)
+
+71 Immm
+x,y,z
+-x,y,z
+x,-y,z
+x,y,-z
+-x,-y,-z
+x,-y,-z
+-x,y,-z
+-x,-y,z
++(1/2,1/2,1/2)
+
+72 Ibam
+x,y,z
+-x,y,z+1/2
+x,-y,z+1/2
+x,y,-z
+-x,-y,-z
+x,-y,-z+1/2
+-x,y,-z+1/2
+-x,-y,z
++(1/2,1/2,1/2)
+
+73 Ibca
+x,y,z
+-x,y,z+1/2
+x+1/2,-y,z
+x,y+1/2,-z
+-x,-y,-z
+x,-y,-z+1/2
+-x+1/2,y,-z
+-x,-y+1/2,z
++(1/2,1/2,1/2)
+
+73 Ibca (alt.)
+x,y,z
+-x,y+1/2,z
+x,-y,z+1/2
+x+1/2,y,-z
+-x,-y,-z
+x,-y+1/2,-z
+-x,y,-z+1/2
+-x+1/2,-y,z
++(1/2,1/2,1/2)
+
+74 Imma
+x,y,z
+-x,y,z
+x,-y+1/2,z
+x,y+1/2,-z
+-x,-y,-z
+x,-y,-z
+-x,y+1/2,-z
+-x,-y+1/2,z
++(1/2,1/2,1/2)
+
+74 Imma (alt.)
+x,y,z
+-x+1/2,y,z
+x,-y,z
+x+1/2,y,-z
+-x,-y,-z
+x+1/2,-y,-z
+-x,y,-z
+-x+1/2,-y,z
++(1/2,1/2,1/2)
+
+[tetragonal]
+75 P4
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+
+76 P41
+x,y,z
+-x,-y,z+1/2
+-y,x,z+1/4
+y,-x,z+3/4
+
+77 P42
+x,y,z
+-x,-y,z
+-y,x,z+1/2
+y,-x,z+1/2
+
+78 P43
+x,y,z
+-x,-y,z+1/2
+-y,x,z+3/4
+y,-x,z+1/4
+
+79 I4
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
++(1/2,1/2,1/2)
+
+80 I41 (2 origin)
+x,y,z
+-x,-y,z
+-y,x+1/2,z+1/4
+y,-x+1/2,z+1/4
++(1/2,1/2,1/2)
+
+80 I41 (41 origin)
+x,y,z
+-x,-y,z+1/2
+-y,x,z+1/4
+y,-x,z+3/4
++(1/2,1/2,1/2)
+
+81 P4-
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+
+82 I4-
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
++(1/2,1/2,1/2)
+
+83 P4/m
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x,-y,-z
+x,y,-z
+y,-x,-z
+-y,x,-z
+
+84 P42/m
+x,y,z
+-x,-y,z
+-y,x,z+1/2
+y,-x,z+1/2
+-x,-y,-z
+x,y,-z
+y,-x,-z+1/2
+-y,x,-z+1/2
+
+85 P4/n (-4 origin)
+x,y,z
+-x,-y,z
+-y+1/2,x+1/2,z
+y+1/2,-x+1/2,z
+-x+1/2,-y+1/2,-z
+x+1/2,y+1/2,-z
+y,-x,-z
+-y,x,-z
+
+85 P4/n (-1 origin)
+x,y,z
+-x+1/2,-y+1/2,z
+-y+1/2,x,z
+y,-x+1/2,z
+-x,-y,-z
+x+1/2,y+1/2,-z
+y+1/2,-x,-z
+-y,x+1/2,-z
+
+85 P4/n (-1 origin, alt.)
+x,y,z
+-x+1/2,-y+1/2,z
+-y,x+1/2,z
+y+1/2,-x,z
+-x,-y,-z
+x+1/2,y+1/2,-z
+y,-x+1/2,-z
+-y+1/2,x,-z
+
+85 P4/n (4/n origin)
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x+1/2,-y+1/2,-z
+x+1/2,y+1/2,-z
+y+1/2,-x+1/2,-z
+-y+1/2,x+1/2,-z
+
+86 P42/n (-4 origin)
+x,y,z
+-x,-y,z
+-y+1/2,x+1/2,z+1/2
+y+1/2,-x+1/2,z+1/2
+-x+1/2,-y+1/2,-z+1/2
+x+1/2,y+1/2,-z+1/2
+y,-x,-z
+-y,x,-z
+
+86 P42/n (-1 origin)
+x,y,z
+-x+1/2,-y+1/2,z
+-y,x+1/2,z+1/2
+y+1/2,-x,z+1/2
+-x,-y,-z
+x+1/2,y+1/2,-z
+y,-x+1/2,-z+1/2
+-y+1/2,x,-z+1/2
+
+86 P42/n (-1 origin, alt.)
+x,y,z
+-x+1/2,-y+1/2,z
+-y+1/2,x,z+1/2
+y,-x+1/2,z+1/2
+-x,-y,-z
+x+1/2,y+1/2,-z
+y+1/2,-x,-z+1/2
+-y,x+1/2,-z+1/2
+
+86 P42/n (42/n origin)
+x,y,z
+-x,-y,z
+-y,x,z+1/2
+y,-x,z+1/2
+-x+1/2,-y+1/2,-z
+x+1/2,y+1/2,-z
+y+1/2,-x+1/2,-z+1/2
+-y+1/2,x+1/2,-z+1/2
+
+87 I4/m
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x,-y,-z
+x,y,-z
+y,-x,-z
+-y,x,-z
++(1/2,1/2,1/2)
+
+88 I41/a (-4 origin)
+x,y,z
+-x,-y,z
+-y,x+1/2,z+1/4
+y,-x+1/2,z+1/4
+-x,-y+1/2,-z+1/4
+x,y+1/2,-z+1/4
+y,-x,-z
+-y,x,-z
++(1/2,1/2,1/2)
+
+88 I41/a (-1 origin)
+x,y,z
+-x,-y+1/2,z
+-y+1/4,x+3/4,z+3/4
+y+1/4,-x+1/4,z+1/4
+-x,-y,-z
+x,y+1/2,-z
+y+1/4,-x+3/4,-z+3/4
+-y+1/4,x+1/4,-z+1/4
++(1/2,1/2,1/2)
+
+88 I41/a (41/a origin)
+x,y,z
+-x,-y,z+1/2
+-y,x,z+1/4
+y,-x,z+3/4
+-x,-y+1/2,-z
+x+1/2,y,-z
+y+1/2,-x,-z+1/4
+-y,x+1/2,-z+1/4
++(1/2,1/2,1/2)
+
+88 I41/a (41/b origin)
+x,y,z
+-x,-y,z+1/2
+-y,x,z+1/4
+y,-x,z+3/4
+-x+1/2,-y,-z
+x,y+1/2,-z
+y,-x+1/2,-z+1/4
+-y+1/2,x,-z+1/4
++(1/2,1/2,1/2)
+
+89 P422
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+x,-y,-z
+-x,y,-z
+-y,-x,-z
+y,x,-z
+
+90 P4212 (222 origin)
+x,y,z
+-x,-y,z
+-y+1/2,x+1/2,z
+y+1/2,-x+1/2,z
+x+1/2,-y+1/2,-z
+-x+1/2,y+1/2,-z
+-y,-x,-z
+y,x,-z
+
+90 P4212 (42121 origin)
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+x+1/2,-y+1/2,-z
+-x+1/2,y+1/2,-z
+-y+1/2,-x+1/2,-z
+y+1/2,x+1/2,-z
+
+91 P4122
+x,y,z
+-x,-y,z+1/2
+-y,x,z+1/4
+y,-x,z+3/4
+x,-y,-z+1/2
+-x,y,-z
+-y,-x,-z+1/4
+y,x,-z+3/4
+
+92 P41212 (origin 2112)
+x,y,z
+-x,-y,z+1/2
+-y+1/2,x+1/2,z+1/4
+y+1/2,-x+1/2,z+3/4
+x+1/2,-y+1/2,-z+3/4
+-x+1/2,y+1/2,-z+1/4
+-y,-x,-z+1/2
+y,x,-z
+
+92 P41212 (origin 41212)
+x,y,z
+-x,-y,z+1/2
+-y,x,z+1/4
+y,-x,z+3/4
+x+1/2,-y+1/2,-z+3/4
+-x+1/2,y+1/2,-z+1/4
+-y+1/2,-x+1/2,-z+1/2
+y+1/2,x+1/2,-z
+
+92 P41212 (origin as P212121)
+x,y,z
+-x+1/2,-y,z+1/2
+-y+1/4,x+3/4,z+1/4
+y+1/4,-x+1/4,z+3/4
+x+1/2,-y+1/2,-z
+-x,y+1/2,-z+1/2
+-y+3/4,-x+3/4,-z+3/4
+y+3/4,x+1/4,-z+1/4
+
+93 P4222
+x,y,z
+-x,-y,z
+-y,x,z+1/2
+y,-x,z+1/2
+x,-y,-z
+-x,y,-z
+-y,-x,-z+1/2
+y,x,-z+1/2
+
+94 P42212 (222 origin)
+x,y,z
+-x,-y,z
+-y+1/2,x+1/2,z+1/2
+y+1/2,-x+1/2,z+1/2
+x+1/2,-y+1/2,-z+1/2
+-x+1/2,y+1/2,-z+1/2
+-y,-x,-z
+y,x,-z
+
+94 P42212 (422121 origin)
+x,y,z
+-x,-y,z
+-y,x,z+1/2
+y,-x,z+1/2
+x+1/2,-y+1/2,-z+1/2
+-x+1/2,y+1/2,-z+1/2
+-y+1/2,-x+1/2,-z
+y+1/2,x+1/2,-z
+
+95 P4322
+x,y,z
+-x,-y,z+1/2
+-y,x,z+3/4
+y,-x,z+1/4
+x,-y,-z+1/2
+-x,y,-z
+-y,-x,-z+3/4
+y,x,-z+1/4
+
+96 P43212 (2112 origin)
+x,y,z
+-x,-y,z+1/2
+-y+1/2,x+1/2,z+3/4
+y+1/2,-x+1/2,z+1/4
+x+1/2,-y+1/2,-z+1/4
+-x+1/2,y+1/2,-z+3/4
+-y,-x,-z+1/2
+y,x,-z
+
+96 P43212 (43121 origin)
+x,y,z
+-x,-y,z+1/2
+-y,x,z+3/4
+y,-x,z+1/4
+x+1/2,-y+1/2,-z+1/4
+-x+1/2,y+1/2,-z+3/4
+-y+1/2,-x+1/2,-z+1/2
+y+1/2,x+1/2,-z
+
+96 P43212 (origin as P212121)
+x,y,z
+-x+1/2,-y,z+1/2
+-y+1/4,x+3/4,z+3/4
+y+1/4,-x+1/4,z+1/4,
+x+1/2,-y+1/2,-z
+-x,y+1/2,-z+1/2
+-y+3/4,-x+3/4,-z+1/4
+y+3/4,x+1/4,-z+3/4
+
+97 I422
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+x,-y,-z
+-x,y,-z
+-y,-x,-z
+y,x,-z
++(1/2,1/2,1/2)
+
+98 I4122 (222 origin)
+x,y,z
+-x,-y,z
+-y,x+1/2,z+1/4
+y,-x+1/2,z+1/4
+x,-y+1/2,-z+1/4
+-x,y+1/2,-z+1/4
+-y,-x,-z
+y,x,-z
++(1/2,1/2,1/2)
+
+98 I4122 (4112 origin)
+x,y,z
+-x,-y,z+1/2
+-y,x,z+1/4
+y,-x,z+3/4
+x,-y,-z+1/2
+-x,y,-z
+-y,-x,-z+1/4
+y,x,-z+3/4
++(1/2,1/2,1/2)
+
+99 P4mm
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x,y,z
+x,-y,z
+y,x,z
+-y,-x,z
+
+100 P4bm
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+y+1/2,x+1/2,z
+-y+1/2,-x+1/2,z
+
+101 P42cm
+x,y,z
+-x,-y,z
+-y,x,z+1/2
+y,-x,z+1/2
+-x,y,z+1/2
+x,-y,z+1/2
+y,x,z
+-y,-x,z
+
+102 P42nm
+x,y,z
+-x,-y,z
+-y+1/2,x+1/2,z+1/2
+y+1/2,-x+1/2,z+1/2
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+y,x,z
+-y,-x,z
+
+103 P4cc
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x,y,z+1/2
+x,-y,z+1/2
+y,x,z+1/2
+-y,-x,z+1/2
+
+104 P4nc
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+y+1/2,x+1/2,z+1/2
+-y+1/2,-x+1/2,z+1/2
+
+105 P42mc
+x,y,z
+-x,-y,z
+-y,x,z+1/2
+y,-x,z+1/2
+-x,y,z
+x,-y,z
+y,x,z+1/2
+-y,-x,z+1/2
+
+106 P42bc
+x,y,z
+-x,-y,z
+-y,x,z+1/2
+y,-x,z+1/2
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+y+1/2,x+1/2,z+1/2
+-y+1/2,-x+1/2,z+1/2
+
+107 I4mm
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x,y,z
+x,-y,z
+y,x,z
+-y,-x,z
++(1/2,1/2,1/2)
+
+108 I4cm
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x,y,z+1/2
+x,-y,z+1/2
+y,x,z+1/2
+-y,-x,z+1/2
++(1/2,1/2,1/2)
+
+109 I41md
+x,y,z
+-x,-y,z
+-y,x+1/2,z+1/4
+y,-x+1/2,z+1/4
+-x,y,z
+x,-y,z
+y,x+1/2,z+1/4
+-y,-x+1/2,z+1/4
++(1/2,1/2,1/2)
+
+110 I41cd
+x,y,z
+-x,-y,z
+-y,x+1/2,z+1/4
+y,-x+1/2,z+1/4
+-x,y,z+1/2
+x,-y,z+1/2
+y+1/2,x,z+1/4
+-y+1/2,-x,z+1/4
++(1/2,1/2,1/2)
+
+111 P-42m
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+x,-y,-z
+-x,y,-z
+y,x,z
+-y,-x,z
+
+112 P-42c
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+x,-y,-z+1/2
+-x,y,-z+1/2
+y,x,z+1/2
+-y,-x,z+1/2
+
+113 P-421m
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+x+1/2,-y+1/2,-z
+-x+1/2,y+1/2,-z
+y+1/2,x+1/2,z
+-y+1/2,-x+1/2,z
+
+114 P-421c
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+x+1/2,-y+1/2,-z+1/2
+-x+1/2,y+1/2,-z+1/2
+y+1/2,x+1/2,z+1/2
+-y+1/2,-x+1/2,z+1/2
+
+115 P-4m2
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+-x,y,z
+x,-y,z
+-y,-x,-z
+y,x,-z
+
+116 P-4c2
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+-x,y,z+1/2
+x,-y,z+1/2
+-y,-x,-z+1/2
+y,x,-z+1/2
+
+117 P-4b2 (-4 origin)
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+-y+1/2,-x+1/2,-z
+y+1/2,x+1/2,-z
+
+117 P-4b2 (222 origin)
+x,y,z
+-x,-y,z
+y+1/2,-x+1/2,-z
+-y+1/2,x+1/2,-z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+-y,-x,-z
+y,x,-z
+
+118 P-4n2 (-4 origin)
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+-y+1/2,-x+1/2,-z+1/2
+y+1/2,x+1/2,-z+1/2
+
+118 P-4n2 (222 origin)
+x,y,z
+-x,-y,z
+y+1/2,-x+1/2,-z+1/2
+-y+1/2,x+1/2,-z+1/2
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+-y,-x,-z
+y,x,-z
+
+119 I-4m2
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+-x,y,z
+x,-y,z
+-y,-x,-z
+y,x,-z
++(1/2,1/2,1/2)
+
+120 I-4c2
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+-x,y,z+1/2
+x,-y,z+1/2
+-y,-x,-z+1/2
+y,x,-z+1/2
++(1/2,1/2,1/2)
+
+121 I-42m
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+x,-y,-z
+-x,y,-z
+y,x,z
+-y,-x,z
++(1/2,1/2,1/2)
+
+122 I-42d
+x,y,z
+-x,-y,z
+y,-x,-z
+-y,x,-z
+x,-y+1/2,-z+1/4
+-x,y+1/2,-z+1/4
+y,x+1/2,z+1/4
+-y,-x+1/2,z+1/4
++(1/2,1/2,1/2)
+
+123 P4/mmm
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x,y,z
+x,-y,z
+y,x,z
+-y,-x,z
+-x,-y,-z
+x,y,-z
+y,-x,-z
+-y,x,-z
+x,-y,-z
+-x,y,-z
+-y,-x,-z
+y,x,-z
+
+124 P4/mcc (4/m origin)
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x,y,z+1/2
+x,-y,z+1/2
+y,x,z+1/2
+-y,-x,z+1/2
+-x,-y,-z
+x,y,-z
+y,-x,-z
+-y,x,-z
+x,-y,-z+1/2
+-x,y,-z+1/2
+-y,-x,-z+1/2
+y,x,-z+1/2
+
+124 P4/mcc (422 origin)
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z,
+-x,y,z+1/2
+x,-y,z+1/2
+y,x,z+1/2
+-y,-x,z+1/2
+-x,-y,-z+1/2
+x,y,-z+1/2
+y,-x,-z+1/2
+-y,x,-z+1/2
+x,-y,-z
+-x,y,-z
+-y,-x,-z
+y,x,-z
+
+125 P4/nbm (422 origin)
+x,y,z
+-x,-y,z
+-y,x,z
+y,-x,z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+y+1/2,x+1/2,z
+-y+1/2,-x+1/2,z
+-x+1/2,-y+1/2,-z
+x+1/2,y+1/2,-z
+y+1/2,-x+1/2,-z
+-y+1/2,x+1/2,-z
+x,-y,-z
+-x,y,-z
+-y,-x,-z
+y,x,-z
+
+125 P4/nbm (2/m origin)
+x,y,z
+-x+1/2,-y+1/2,z
+-y+1/2,x,z
+y,-x+1/2,z
+-x,y+1/2,z
+x+1/2,-y,z
+y+1/2,x+1/2,z
+-y,-x,z
+-x,-y,-z
+x+1/2,y+1/2,-z
+y+1/2,-x,-z
+-y,x+1/2,-z
+x,-y+1/2,-z
+-x+1/2,y,-z
+-y+1/2,-x+1/2,-z
+y,x,-z
+
+125 P4/nbm (2/m origin, alt.)
+x,y,z
+-x+1/2,-y+1/2,z
+-y,x+1/2,z
+y+1/2,-x,z
+-x,y+1/2,z
+x+1/2,-y,z
+y,x,z
+-y+1/2,-x+1/2,z
+-x,-y,-z
+x+1/2,y+1/2,-z
+y,-x+1/2,-z
+-y+1/2,x,-z
+x,-y+1/2,-z
+-x+1/2,y,-z
+-y,-x,-z
+y+1/2,x+1/2,-z
+
+125 P4/nbm (-42m origin)
+x,y,z
+-x,-y,z
+-y+1/2,x+1/2,z
+y+1/2,-x+1/2,z
+-x+1/2,y+1/2,z
+x+1/2,-y+1/2,z
+y,x,z
+-y,-x,z
+-x+1/2,-y+1/2,-z
+x+1/2,y+1/2,-z
+y,-x,-z
+-y,x,-z
+x,-y,-z
+-x,y,-z
+-y+1/2,-x+1/2,-z
+y+1/2,x+1/2,-z
+
+[trigonal]
+143 P3
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+
+144 P31
+x,y,z
+-y,x-y,z+1/3
+-x+y,-x,z+2/3
+
+145 P32
+x,y,z
+-y,x-y,z+2/3
+-x+y,-x,z+1/3
+
+146 R3
+x,y,z
+z,x,y
+y,z,x
+
+147 P-3
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-x,-y,-z
+y,-x+y,-z
+x-y,x,-z
+
+148 R-3
+x,y,z
+z,x,y
+y,z,x
+-x,-y,-z
+-z,-x,-y
+-y,-z,-x
+
+149 P312
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-y,-x,-z
+-x+y,y,-z
+x,x-y,-z
+
+150 P321
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+y,x,-z
+x-y,-y,-z
+-x,-x+y,-z
+
+151 P3112
+x,y,z
+-y,x-y,z+1/3
+-x+y,-x,z+2/3
+-y,-x,-z+2/3
+-x+y,y,-z+1/3
+x,x-y,-z
+
+152 P3121
+x,y,z
+-y,x-y,z+1/3
+-x+y,-x,z+2/3
+y,x,-z
+x-y,-y,-z+2/3
+-x,-x+y,-z+1/3
+
+153 P3212
+x,y,z
+-y,x-y,z+2/3
+-x+y,-x,z+1/3
+-y,-x,-z+1/3
+-x+y,y,-z+2/3
+x,x-y,-z
+
+154 P3221
+x,y,z
+-y,x-y,z+2/3
+-x+y,-x,z+1/3
+y,x,-z
+x-y,-y,-z+1/3
+-x,-x+y,-z+2/3
+
+155 R32
+x,y,z
+z,x,y
+y,z,x
+-x,-z,-y
+-z,-y,-x
+-y,-x,-z
+
+156 P3m1
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-y,-x,z
+-x+y,y,z
+x,x-y,z
+
+157 P31m
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+y,x,z
+x-y,-y,z
+-x,-x+y,z
+
+158 P3c1
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-y,-x,z+1/2
+-x+y,y,z+1/2
+x,x-y,z+1/2
+
+159 P31c
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+y,x,z+1/2
+x-y,-y,z+1/2
+-x,-x+y,z+1/2
+
+160 R3m
+x,y,z
+z,x,y
+y,z,x
+x,z,y
+z,y,x
+y,x,z
+
+161 R3c
+x,y,z
+z,x,y
+y,z,x
+x+1/2,z+1/2,y+1/2
+z+1/2,y+1/2,x+1/2
+y+1/2,x+1/2,z+1/2
+
+162 P-31m
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+y,x,z
+x-y,-y,z
+-x,-x+y,z
+-x,-y,-z
+y,-x+y,-z
+x-y,x,-z
+-y,-x,-z
+-x+y,y,-z
+x,x-y,-z
+
+163 P-31c (-3 origin)
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+y,x,z+1/2
+x-y,-y,z+1/2
+-x,-x+y,z+1/2
+-x,-y,-z
+y,-x+y,-z
+x-y,x,-z
+-y,-x,-z+1/2
+-x+y,y,-z+1/2
+x,x-y,-z+1/2
+
+163 P-31c (32 origin)
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+y,x,z+1/2
+x-y,-y,z+1/2
+-x,-x+y,z+1/2
+-x,-y,-z+1/2
+y,-x+y,-z+1/2
+x-y,x,-z+1/2
+-y,-x,-z
+-x+y,y,-z
+x,x-y,-z
+
+164 P-3m1
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-y,-x,z
+-x+y,y,z
+x,x-y,z
+-x,-y,-z
+y,-x+y,-z
+x-y,x,-z
+y,x,-z
+x-y,-y,-z
+-x,-x+y,-z
+
+165 P-3c1 (-3 origin)
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-y,-x,z+1/2
+-x+y,y,z+1/2
+x,x-y,z+1/2
+-x,-y,-z
+y,-x+y,-z
+x-y,x,-z
+y,x,-z+1/2
+x-y,-y,-z+1/2
+-x,-x+y,-z+1/2
+
+165 P-3c1 (32 origin)
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-y,-x,z+1/2
+-x+y,y,z+1/2
+x,x-y,z+1/2
+-x,-y,-z+1/2
+y,-x+y,-z+1/2
+x-y,x,-z+1/2
+y,x,-z
+x-y,-y,-z
+-x,-x+y,-z
+
+166 R-3m
+x,y,z
+z,x,y
+y,z,x
+x,z,y
+z,y,x
+y,x,z
+-x,-y,-z
+-z,-x,-y
+-y,-z,-x
+-x,-z,-y
+-z,-y,-x
+-y,-x,-z
+
+167 R-3c
+x,y,z
+z,x,y
+y,z,x
+x+1/2,z+1/2,y+1/2
+z+1/2,y+1/2,x+1/2
+y+1/2,x+1/2,z+1/2
+-x,-y,-z
+-z,-x,-y
+-y,-z,-x
+-x+1/2,-z+1/2,-y+1/2
+-z+1/2,-y+1/2,-x+1/2
+-y+1/2,-x+1/2,-z+1/2
+
+[hexagonal]
+168 P6
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-x,-y,z
+x-y,x,z
+y,-x+y,z
+
+169 P61
+x,y,z
+-y,x-y,z+1/3
+-x+y,-x,z+2/3
+-x,-y,z+1/2
+x-y,x,z+1/6
+y,-x+y,z+5/6
+
+170 P65
+x,y,z
+-y,x-y,z+2/3
+-x+y,-x,z+1/3
+-x,-y,z+1/2
+x-y,x,z+5/6
+y,-x+y,z+1/6
+
+171 P62
+x,y,z
+-y,x-y,z+2/3
+-x+y,-x,z+1/3
+-x,-y,z
+x-y,x,z+1/3
+y,-x+y,z+2/3
+
+172 P64
+x,y,z
+-y,x-y,z+1/3
+-x+y,-x,z+2/3
+-x,-y,z
+x-y,x,z+2/3
+y,-x+y,z+1/3
+
+173 P63
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-x,-y,z+1/2
+x-y,x,z+1/2
+y,-x+y,z+1/2
+
+174 P-6
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+x,y,-z
+-x+y,-x,-z
+-y,x-y,-z
+
+175 P6/m
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-x,-y,z
+x-y,x,z
+y,-x+y,z
+-x,-y,-z
+y,-x+y,-z
+x-y,x,-z
+x,y,-z
+-x+y,-x,-z
+-y,x-y,-z
+
+176 P63/m
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-x,-y,z+1/2
+x-y,x,z+1/2
+y,-x+y,z+1/2
+-x,-y,-z
+y,-x+y,-z
+x-y,x,-z
+x,y,-z+1/2
+-x+y,-x,-z+1/2
+-y,x-y,-z+1/2
+
+177 P622
+x,y,z
+-y,x-y,z
+-x+y,-x,z
+-x,-y,z
+x-y,x,z
+y,-x+y,z
+y,x,-z
+x-y,-y,-z
+-x,-x+y,-z
+-y,-x,-z
+-x+y,y,-z
+x,x-y,-z
+
+178 P6122
+x,y,z
+-y,x-y,z+1/3
+-x+y,-x,z+2/3
+-x,-y,z+1/2
+x-y,x,z+1/6
+y,-x+y,z+5/6
+y,x,-z+1/3
+x-y,-y,-z
+-x,-x+y,-z+2/3
+-y,-x,-z+5/6
+-x+y,y,-z+1/2
+x,x-y,-z+1/6
+
+179 P6522
+x,y,z
+-y,x-y,z+2/3
+-x+y,-x,z+1/3
+-x,-y,z+1/2
+x-y,x,z+5/6
+y,-x+y,z+1/6
+y,x,-z+2/3
+x-y,-y,-z
+-x,-x+y,-z+1/3
+-y,-x,-z+1/6
+-x+y,y,-z+1/2
+x,x-y,-z+5/6
+
+180 P6222
+x,y,z
+-y,x-y,z+2/3
+-x+y,-x,z+1/3
+-x,-y,z
+x-y,x,z+1/3
+y,-x+y,z+2/3
+y,x,-z+2/3
+x-y,-y,-z
+-x,-x+y,-z+1/3
+-y,-x,-z+2/3
+-x+y,y,-z
+x,x-y,-z+1/3
+
+181 P6422
+x,y,z
+-y,x-y,z+1/3
+-x+y,-x,z+2/3
+-x,-y,z
+x-y,x,z+2/3
+y,-x+y,z+1/3
+y,x,-z+1/3
+x-y,-y,-z
+-x,-x+y,-z+2/3
+-y,-x,-z+1/3
+-x+y,y,-z
+x,x-y,-z+2/3
+
+[cubic]
+195 P23
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+z,x,y
+-z,-x,y
+z,-x,-y
+-z,x,-y
+y,z,x
+-y,z,-x
+-y,-z,x
+y,-z,-x
+
+196 F23
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+z,x,y
+-z,-x,y
+z,-x,-y
+-z,x,-y
+y,z,x
+-y,z,-x
+-y,-z,x
+y,-z,-x
++(0,1/2,1/2),(1/2,0,1/2),(1/2,1/2,0)
+
+197 I23
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+z,x,y
+-z,-x,y
+z,-x,-y
+-z,x,-y
+y,z,x
+-y,z,-x
+-y,-z,x
+y,-z,-x
++(1/2,1/2,1/2)
+
+198 P213
+x,y,z
+x+1/2,-y+1/2,-z
+-x,y+1/2,-z+1/2
+-x+1/2,-y,z+1/2
+z,x,y
+-z+1/2,-x,y+1/2
+z+1/2,-x+1/2,-y
+-z,x+1/2,-y+1/2
+y,z,x
+-y,z+1/2,-x+1/2
+-y+1/2,-z,x+1/2
+y+1/2,-z+1/2,-x
+
+199 I213
+x,y,z
+x+1/2,-y+1/2,-z
+-x,y+1/2,-z+1/2
+-x+1/2,-y,z+1/2
+z,x,y
+-z+1/2,-x,y+1/2
+z+1/2,-x+1/2,-y
+-z,x+1/2,-y+1/2
+y,z,x
+-y,z+1/2,-x+1/2
+-y+1/2,-z,x+1/2
+y+1/2,-z+1/2,-x
++(1/2,1/2,1/2)
+
+200 Pm-3
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+z,x,y
+-z,-x,y
+z,-x,-y
+-z,x,-y
+y,z,x
+-y,z,-x
+-y,-z,x
+y,-z,-x
+-x,-y,-z
+-x,y,z
+x,-y,z
+x,y,-z
+-z,-x,-y
+z,x,-y
+-z,x,y
+z,-x,y
+-y,-z,-x
+y,-z,x
+y,z,-x
+-y,z,x
+
+201 Pn-3 (23 origin)
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+z,x,y
+-z,-x,y
+z,-x,-y
+-z,x,-y
+y,z,x
+-y,z,-x
+-y,-z,x
+y,-z,-x
+-x+1/2,-y+1/2,-z+1/2
+-x+1/2,y+1/2,z+1/2
+x+1/2,-y+1/2,z+1/2
+x+1/2,y+1/2,-z+1/2
+-z+1/2,-x+1/2,-y+1/2
+z+1/2,x+1/2,-y+1/2
+-z+1/2,x+1/2,y+1/2
+z+1/2,-x+1/2,y+1/2
+-y+1/2,-z+1/2,-x+1/2
+y+1/2,-z+1/2,x+1/2
+y+1/2,z+1/2,-x+1/2
+-y+1/2,z+1/2,x+1/2
+
+201 Pn-3 (-3 origin)
+x,y,z
+x,-y+1/2,-z+1/2
+-x+1/2,y,-z+1/2
+-x+1/2,-y+1/2,z
+z,x,y
+-z+1/2,-x+1/2,y
+z,-x+1/2,-y+1/2
+-z+1/2,x,-y+1/2
+y,z,x
+-y+1/2,z,-x+1/2
+-y+1/2,-z+1/2,x
+y,-z+1/2,-x+1/2
+-x,-y,-z
+-x,y+1/2,z+1/2
+x+1/2,-y,z+1/2
+x+1/2,y+1/2,-z
+-z,-x,-y
+z+1/2,x+1/2,-y
+-z,x+1/2,y+1/2
+z+1/2,-x,y+1/2
+-y,-z,-x
+y+1/2,-z,x+1/2
+y+1/2,z+1/2,-x
+-y,z+1/2,x+1/2
+
+202 Fm-3
+x,y,z
+x,-y,-z
+-x,y,-z
+-x,-y,z
+z,x,y
+-z,-x,y
+z,-x,-y
+-z,x,-y
+y,z,x
+-y,z,-x
+-y,-z,x
+y,-z,-x
+-x,-y,-z
+-x,y,z
+x,-y,z
+x,y,-z
+-z,-x,-y
+z,x,-y
+-z,x,y
+z,-x,y
+-y,-z,-x
+y,-z,x
+y,z,-x
+-y,z,x
++(0,1/2,1/2),(1/2,0,1/2),(1/2,1/2,0)
+