def angles(self): angles = [] for triplet in self.psf.angles: c_atom = triplet.atom2 a_1 = triplet.atom1 a_2 = triplet.atom3 v1 = np.array(self.positions[a_1]) - np.array( self.positions[c_atom]) v2 = np.array(self.positions[a_2]) - np.array( self.positions[c_atom]) prod = np.dot(v1, v2) if prod == 0: angle = np.pi / 2 else: prod /= (np.linalg.norm(v1) * np.linalg.norm(v2)) prod = np.clip(prod, -1, 1) angle = np.arccos(prod) angles.append([(a_1.type, c_atom.type, a_2.type), np.degrees(angle)]) return angles
def dihedrals(self): d_angles = [] for quad in self.psf.dihedrals: a_1, a_2, a_3, a_4 = quad.atom1, quad.atom2, quad.atom3, quad.atom4 v1 = np.array(self.positions[a_2]) - np.array(self.positions[a_1]) v2 = np.array(self.positions[a_3]) - np.array(self.positions[a_1]) n1 = np.cross(v1, v2) v3 = np.array(self.positions[a_4]) - np.array(self.positions[a_3]) v4 = -v2 n2 = np.cross(v3, v4) prod = np.dot(n1, n2) if prod == 0: angle = 0 else: prod /= (np.linalg.norm(n1) * np.linalg.norm(n2)) prod = np.clip(prod, -1, 1) angle = np.arccos(prod) d_angles.append([(a_1.type, a_2.type, a_3.type, a_4.type), np.degrees(angle)]) return d_angles
def TE_angle(self): # Returns the trailing edge angle of the airfoil, in degrees upper_TE_vec = self.coordinates[0, :] - self.coordinates[1, :] lower_TE_vec = self.coordinates[-1, :] - self.coordinates[-2, :] return np.degrees(np.arctan2( upper_TE_vec[0] * lower_TE_vec[1] - upper_TE_vec[1] * lower_TE_vec[0], upper_TE_vec[0] * lower_TE_vec[0] + upper_TE_vec[1] * upper_TE_vec[1] ))
def impropers(self): i_angles = [] for quad in self.psf.impropers: # a_1 bonded to a_2, a_1 is central atom a_1, a_2, a_3, a_4 = quad.atom1, quad.atom2, quad.atom3, quad.atom4 v1 = np.array(self.positions[a_3]) - np.array(self.positions[a_1]) v2 = np.array(self.positions[a_4]) - np.array(self.positions[a_1]) n = np.cross(v1, v2) v3 = np.array(self.positions[a_2]) - np.array(self.positions[a_1]) prod = np.dot(n, v3) if prod == 0: angle = np.pi / 2 else: prod /= (np.linalg.norm(n) * np.linalg.norm(v3)) prod = np.clip(prod, -1, 1) angle = np.pi / 2 - np.arccos(prod) i_angles.append([(a_1.type, a_2.type, a_3.type, a_4.type), np.degrees(angle)]) return i_angles
def test_degrees(): fun = lambda x : 3.0 * np.degrees(x) d_fun = grad(fun) check_grads(fun, 10.0*npr.rand()) check_grads(d_fun, 10.0*npr.rand())
def test_degrees(): unary_ufunc_check(lambda x : np.degrees(x)/50.0, test_complex=False) def test_exp(): unary_ufunc_check(np.exp)
def test_degrees(): unary_ufunc_check(lambda x: np.degrees(x) / 50.0, test_complex=False)
def test_degrees(): fun = lambda x: 3.0 * np.degrees(x) check_grads(fun)(10.0 * npr.rand())
def deduce_state(self, s): rpy = np.degrees(rowan.to_euler(rowan.normalize(s[6:10]), 'xyz')) return rpy
def test_degrees(): fun = lambda x : 3.0 * np.degrees(x) check_grads(fun)(10.0*npr.rand())