Ejemplo n.º 1
0
 def find_third_neighbors(self, dihedral_proxies):
     """ Loop through dihedral angle proxies to find third neighbor
 Fill in neighbors.b1 with iseq and angle proxy"""
     for dp in dihedral_proxies:
         for i_test in dp.i_seqs:
             if (self.h_connectivity[i_test] is None
                     and not self.hd_sel[i_test]):
                 continue
             ih = i_test
             i1, i2, i3, i4 = dp.i_seqs
             if (ih == i1):
                 i_third = i4
             if (ih == i4):
                 i_third = i1
             dihedral = dihedral_angle(sites=[
                 self.sites_cart[i1], self.sites_cart[i2],
                 self.sites_cart[i3], self.sites_cart[i4]
             ])
             if dihedral is None:
                 return
             dihedral_id = dp.angle_ideal
             delta = geometry_restraints.angle_delta_deg(
                 angle_1=math.degrees(dihedral),
                 angle_2=dihedral_id,
                 periodicity=dp.periodicity)
             dihedral_ideal = math.degrees(dihedral) + delta
             b1 = {'iseq': i_third, 'dihedral_ideal': dihedral_ideal}
             self.h_connectivity[ih].b1 = b1
             self.assign_b1_for_H_atom_groups(ih=ih, i_third=i_third)
Ejemplo n.º 2
0
def run(args):
  assert args in [[], ["--verbose"]]
  if (len(args) == 0):
    out = null_out()
  else:
    out = sys.stdout
  #
  mt = flex.mersenne_twister(seed=0)
  #
  for i_trial in xrange(10):
    l0 = mt.random_double() + 0.5
    l1 = mt.random_double() + 0.5
    l2 = mt.random_double() + 0.5
    angle_model = mt.random_double() * 178 + 1 \
                + 180 * (mt.random_size_t() % 3 - 1)
    v = matrix.col(mt.random_double_point_on_sphere())
    axis = v.ortho()
    site1 = v * l1
    site0 = site1 + v * l0
    r = axis.axis_and_angle_as_r3_rotation_matrix(angle=angle_model, deg=True)
    site2 = site1 + (r * v) * l2
    a = angle(
      sites=[site0, site1, site2],
      angle_ideal=mt.random_double() * 720 - 360,
      weight=mt.random_double() * 10 + 0.1)
    assert approx_equal(min(
      abs(angle_delta_deg(angle_1=a.angle_model, angle_2= angle_model)),
      abs(angle_delta_deg(angle_1=a.angle_model, angle_2=-angle_model))), 0)
    check_derivs(out=out, a=a)
  #
  for site2 in [(0,2.3,0), (0,0,2.5)]:
    perm = flex.size_t([0,1,2])
    while True:
      a = angle(
        sites=tuple(flex.vec3_double(
          [(1.2,0,0), (0,0,0), site2]).select(perm)),
        angle_ideal=mt.random_double() * 720 - 360,
        weight=mt.random_double() * 10 + 0.1)
      check_derivs(out=out, a=a)
      if (not perm.next_permutation()):
        break
  #
  for site0 in [(1,0,0),(0,1,0),(0,0,1),(1,1,1)]:
    perm = flex.size_t([0,1,2])
    while True:
      a = angle(
        sites=tuple(flex.vec3_double(
          [site0, (0,0,0), -matrix.col(site0)]).select(perm)),
        angle_ideal=180,
        weight=1.3)
      check_derivs(out=out, a=a, expect_failure=True)
      if (not perm.next_permutation()):
        break
  #
  plot_file_names = []
  for method in ["ana", "fin"]:
    plot_file_names.extend(write_plots(method=method))
  f = open("angle_xy_as_pdf_commands", "w")
  for file_name in plot_file_names:
    print >> f, "ppdf %s > %s" % (file_name, file_name.replace(".xy", ".pdf"))
  f.close()
  #
  print "OK"