Skip to content
Snippets Groups Projects
Commit e09f423a authored by cmaffeo2's avatar cmaffeo2
Browse files

fixup: Updated method of adding atomistic DNA nucleotides, including orientation

parent 39425b0c
No related branches found
No related tags found
No related merge requests found
...@@ -59,8 +59,9 @@ class Nucleotide(Group): ...@@ -59,8 +59,9 @@ class Nucleotide(Group):
return seg._get_atomic_nucleotide(nt_idx, is_fwd) return seg._get_atomic_nucleotide(nt_idx, is_fwd)
class CanonicalNucleotideFactory(Group): class CanonicalNucleotideFactory(Group):
# DefaultOrientation = rotationAboutAxis([0,0,1], 180) DefaultOrientation = rotationAboutAxis([0,0,1], 180).dot(
DefaultOrientation = rotationAboutAxis([1,0,0], 180) rotationAboutAxis([1,0,0], 180))
def __init__(self, prefix, seq): def __init__(self, prefix, seq):
self.sequence = seq # TODO: used? self.sequence = seq # TODO: used?
self.resname = resnames[seq] self.resname = resnames[seq]
......
...@@ -408,24 +408,29 @@ class Segment(ConnectableElement, Group): ...@@ -408,24 +408,29 @@ class Segment(ConnectableElement, Group):
def contour_to_orientation(self,s): def contour_to_orientation(self,s):
assert( isinstance(s,float) or isinstance(s,int) or len(s) == 1 ) # TODO make vectorized version assert( isinstance(s,float) or isinstance(s,int) or len(s) == 1 ) # TODO make vectorized version
orientation = None orientation = None
if self.quaternion_spline_params is None: if self.quaternion_spline_params is None:
axis = self.contour_to_tangent(s) axis = self.contour_to_tangent(s)
axis = axis / np.linalg.norm(axis) axis = axis / np.linalg.norm(axis)
rotAxis = np.cross(axis,np.array((0,0,1))) rotAxis = np.cross(axis,np.array((0,0,1)))
rotAxisL = np.linalg.norm(rotAxis) rotAxisL = np.linalg.norm(rotAxis)
theta = np.arcsin(rotAxisL)
if rotAxisL > 0.001: if rotAxisL > 0.001:
theta = np.arcsin(rotAxisL)
orientation0 = rotationAboutAxis( rotAxis/rotAxisL, theta*180/np.pi, normalizeAxis=False ) orientation0 = rotationAboutAxis( rotAxis/rotAxisL, theta*180/np.pi, normalizeAxis=False )
else: 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 = rotationAboutAxis( axis, self.twist_per_nt*self.contour_to_nt_pos(s), normalizeAxis=False )
orientation = orientation.dot(orientation0) orientation = orientation.dot(orientation0)
else: else:
q = interpolate.splev( s, self.quaternion_spline_params ) q = interpolate.splev( s, self.quaternion_spline_params )
if len(q) > 1: q = np.array(q).T # TODO: is this needed? if len(q) > 1: q = np.array(q).T # TODO: is this needed?
orientation = quaternion_to_matrix(q) orientation = quaternion_to_matrix(q)
return orientation return orientation
def get_contour_sorted_connections_and_locations(self,type_): def get_contour_sorted_connections_and_locations(self,type_):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment