Commit e09f423a authored by cmaffeo2's avatar cmaffeo2
Browse files

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

parent 39425b0c
......@@ -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]
......
......@@ -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_):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment