From e09f423a939356c18bb719c55252d13c3743d65b Mon Sep 17 00:00:00 2001 From: Chris Maffeo <cmaffeo2@illinois.edu> Date: Fri, 17 Aug 2018 17:59:08 -0500 Subject: [PATCH] fixup: Updated method of adding atomistic DNA nucleotides, including orientation --- CanonicalNucleotideAtoms.py | 5 +++-- segmentmodel.py | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CanonicalNucleotideAtoms.py b/CanonicalNucleotideAtoms.py index a608eb0..f2eb3ae 100644 --- a/CanonicalNucleotideAtoms.py +++ b/CanonicalNucleotideAtoms.py @@ -59,8 +59,9 @@ class Nucleotide(Group): return seg._get_atomic_nucleotide(nt_idx, is_fwd) class CanonicalNucleotideFactory(Group): - # DefaultOrientation = rotationAboutAxis([0,0,1], 180) - DefaultOrientation = rotationAboutAxis([1,0,0], 180) + DefaultOrientation = rotationAboutAxis([0,0,1], 180).dot( + rotationAboutAxis([1,0,0], 180)) + def __init__(self, prefix, seq): self.sequence = seq # TODO: used? self.resname = resnames[seq] diff --git a/segmentmodel.py b/segmentmodel.py index 16906cd..c45801f 100644 --- a/segmentmodel.py +++ b/segmentmodel.py @@ -408,24 +408,29 @@ class Segment(ConnectableElement, Group): def contour_to_orientation(self,s): assert( isinstance(s,float) or isinstance(s,int) or len(s) == 1 ) # TODO make vectorized version + orientation = None if self.quaternion_spline_params is None: axis = self.contour_to_tangent(s) axis = axis / np.linalg.norm(axis) rotAxis = np.cross(axis,np.array((0,0,1))) rotAxisL = np.linalg.norm(rotAxis) - theta = np.arcsin(rotAxisL) if rotAxisL > 0.001: + theta = np.arcsin(rotAxisL) orientation0 = rotationAboutAxis( rotAxis/rotAxisL, theta*180/np.pi, normalizeAxis=False ) else: - orientation0 = np.eye(3) + if axis.dot(np.array((0,0,1))) > 0: + orientation0 = np.eye(3) + else: + orientation0 = rotationAboutAxis( np.array((1,0,0)), 180, normalizeAxis=False ) orientation = rotationAboutAxis( axis, self.twist_per_nt*self.contour_to_nt_pos(s), normalizeAxis=False ) orientation = orientation.dot(orientation0) else: q = interpolate.splev( s, self.quaternion_spline_params ) if len(q) > 1: q = np.array(q).T # TODO: is this needed? orientation = quaternion_to_matrix(q) + return orientation def get_contour_sorted_connections_and_locations(self,type_): -- GitLab