Example #1
0
def make_o_si_o_sym_table(si_o_structure, si_o_bond_sym_table):
  scatterers = si_o_structure.scatterers()
  si_o_full_sym_table = si_o_bond_sym_table.full_connectivity(
    site_symmetry_table=si_o_structure.site_symmetry_table())
  o_si_o_sym_table = crystal.pair_sym_table(si_o_full_sym_table.size())
  for i_seq,pair_sym_dict in enumerate(si_o_full_sym_table):
    if (scatterers[i_seq].scattering_type != "Si"): continue
    jr_list = []
    for j_seq,sym_ops in pair_sym_dict.items():
      if (scatterers[j_seq].scattering_type != "O"): continue
      for rt_mx_ji in sym_ops:
        jr_list.append((j_seq,rt_mx_ji))
    for i_jj1 in xrange(0,len(jr_list)-1):
      jr1 = jr_list[i_jj1]
      i_seq = jr1[0]
      rt_mx_jr1_inv = jr1[1].inverse()
      for i_jj2 in xrange(i_jj1+1,len(jr_list)):
        jr2 = jr_list[i_jj2]
        j_seq = jr2[0]
        rt_mx_jr21 = rt_mx_jr1_inv.multiply(jr2[1])
        if (i_seq <= j_seq):
          o_si_o_sym_table[i_seq].setdefault(j_seq).append(rt_mx_jr21)
        else:
          o_si_o_sym_table[j_seq].setdefault(i_seq).append(rt_mx_jr21.inverse())
  return o_si_o_sym_table.tidy(
    site_symmetry_table=si_o_structure.site_symmetry_table())
Example #2
0
 def __init__(self, si_structure, si_si_sym_table):
   self.structure = si_structure.deep_copy_scatterers()
   bond_sym_table = crystal.pair_sym_table(si_si_sym_table.size())
   sites_frac = si_structure.sites_frac()
   i_oxygen = count(1)
   for i_seq,pair_sym_dict in enumerate(si_si_sym_table):
     site_frac_i = mx.col(sites_frac[i_seq])
     for j_seq,sym_ops in pair_sym_dict.items():
       assert j_seq >= i_seq
       for rt_mx_ji in sym_ops:
         site_frac_ji = mx.col(rt_mx_ji * sites_frac[j_seq])
         bond_center = (site_frac_i + site_frac_ji) / 2
         i_seq_o = self.structure.scatterers().size()
         self.structure.add_scatterer(xray.scatterer(
           label="O%d"%i_oxygen.next(),
           site=bond_center))
         bond_sym_table[i_seq].setdefault(i_seq_o).append(
           sgtbx.rt_mx(1,1))
         bond_sym_table[j_seq].setdefault(i_seq_o).append(
           rt_mx_ji.inverse_cancel())
         bond_sym_table.append(crystal.pair_sym_dict())
   self.bond_sym_table = bond_sym_table.tidy(
     site_symmetry_table=self.structure.site_symmetry_table())