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)
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"