OSDN Git Service

Define Symmetry dialog is being implemented (not done yet)
authortoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Tue, 18 Mar 2014 09:53:42 +0000 (09:53 +0000)
committertoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Tue, 18 Mar 2014 09:53:42 +0000 (09:53 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/molby/trunk@477 a2be9bc6-48de-4e38-9406-05402d4bc13c

MolLib/Ruby_bind/ruby_types.c
Scripts/crystal.rb
Scripts/space_groups.txt [new file with mode: 0644]
wxSources/RubyDialogFrame.cpp

index 7593ec5..e7679c2 100644 (file)
@@ -21,6 +21,7 @@
 #include <string.h>
 #include <ctype.h>
 #include <limits.h>
+#include <float.h>
 
 #pragma mark ====== Global Values ======
 
@@ -121,6 +122,15 @@ s_Vector3D_Initialize(int argc, VALUE *argv, VALUE self)
        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
@@ -658,6 +668,15 @@ s_Transform_NewFromTransform(Transform *tp)
        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)
@@ -809,6 +828,32 @@ s_Transform_IsEqual(VALUE self, VALUE val)
 
 /*
  *  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.
@@ -2894,6 +2939,7 @@ Init_MolbyTypes(void)
        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);
@@ -2926,9 +2972,11 @@ Init_MolbyTypes(void)
        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);
index c5d10ac..0d37e4c 100755 (executable)
@@ -41,6 +41,115 @@ module Math
   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
@@ -1645,9 +1754,200 @@ def cmd_show_ortep
   }
 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)
@@ -1655,5 +1955,3 @@ register_menu("Xtal\t-", nil)
 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
diff --git a/Scripts/space_groups.txt b/Scripts/space_groups.txt
new file mode 100644 (file)
index 0000000..086aeed
--- /dev/null
@@ -0,0 +1,2058 @@
+[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)
+
index cd9aba2..7c29b0d 100644 (file)
@@ -1250,7 +1250,9 @@ RubyDialogCallback_titleOfSubItem(RDItem *item, int pos)
 void
 RubyDialogCallback_setSelectedSubItem(RDItem *item, int pos)
 {
-       if (wxDynamicCast((wxWindow *)item, wxChoice) != NULL && pos >= 0 && pos < ((wxChoice *)item)->GetCount()) {
+       if (wxDynamicCast((wxWindow *)item, wxChoice) != NULL && pos >= -1 && pos < ((wxChoice *)item)->GetCount()) {
+               if (pos == -1)
+                       pos = wxNOT_FOUND;
                ((wxChoice *)item)->SetSelection(pos);
        }
 }