From 09b759a351fa5930f5bae87efe63e234ccdce53e Mon Sep 17 00:00:00 2001
From: Chris Maffeo <cmaffeo2@illinois.edu>
Date: Wed, 5 Sep 2018 18:21:18 +0000
Subject: [PATCH] Removed mdtraj dependency

---
 dnarbd/coords.py       | 64 ++++++++++--------------------------------
 dnarbd/segmentmodel.py |  2 +-
 dnarbd/simulate.py     |  2 +-
 3 files changed, 17 insertions(+), 51 deletions(-)

diff --git a/dnarbd/coords.py b/dnarbd/coords.py
index 70b6216..b74906d 100644
--- a/dnarbd/coords.py
+++ b/dnarbd/coords.py
@@ -164,63 +164,29 @@ def readArbdCoords(fname):
     return np.array(coords)
 
 def readAvgArbdCoords(psf,pdb,dcd,rmsdThreshold=3.5):
-    import mdtraj as md
-    ## align trajectory to pdb
-    ref = md.load(pdb, top=pdb)
-    sel = md.load(dcd, top=pdb)
-    # return ref.xyz[0,:,:]*10
+    import MDAnalysis as mda
 
-    # ref = sel[-1]
-    ids = ref.topology.select("name =~ 'D.*'")
-    assert(len(ids) > 3)
+    usel = mda.Universe(psf, dcd)
+    sel = usel.select_atoms("name D*")
 
     # r0 = ref.xyz[0,ids,:]
-    r0 = sel.xyz[-1,ids,:]
-    t = -1                      # in case dcd_frames < 3
-    for t in range(len(sel.xyz)-2,-1,-1):
-        # print(t)
-        R,comA,comB = minimizeRmsd(sel.xyz[t,ids,:],r0)
-        sel.xyz[t,:,:] = np.array( [(r-comA).dot(R)+comB for r in sel.xyz[t]] )
-        rmsd = np.mean( (sel.xyz[t,ids,:]-r0)**2 )
-        if rmsd > (0.1*rmsdThreshold)**2:
+    ts = usel.trajectory[-1]
+    r0 = sel.positions
+    pos = []
+    for t in range(ts.frame-1,-1,-1):
+        usel.trajectory[t]
+        R,comA,comB = minimizeRmsd(sel.positions,r0)
+        r = np.array( [(r-comA).dot(R)+comB for r in sel.positions] )
+        rmsd = np.mean( (r-r0)**2 )
+        r = np.array( [(r-comA).dot(R)+comB for r in usel.atoms.positions] )
+        pos.append( r )
+        if rmsd > rmsdThreshold**2:
             break
     t0=t+1
     print( "Averaging coordinates in %s after frame %d" % (dcd, t0) )
 
-    pos = sel.xyz[t0:,:,:]
     pos = np.mean(pos, axis=0)
-    return 10*pos               # convert to Angstroms
-
-# def readAvgArbdCoords(psf,pdb,dcd,rmsdThreshold=3.5):
-#     import MDAnalysis as md
-#     ## align trajectory to pdb
-#     from pdb import set_trace
-#     set_trace()
-#     uref = md.Universe(psf, pdb)
-#     usel = md.Universe(psf, dcd)
-
-#     ref = uref.select_atoms("name 'd*'")
-#     sel = usel.select_atoms("name 'd*'")
-
-#     # r0 = ref.xyz[0,ids,:]
-#     ts = usel.trajectory[-1]
-#     ts.frame
-#     r0 = sel.positions
-#     for t in range(ts.frame-1,-1,-1):
-#         print(t)
-#         usel.trajectory[t]
-#         R,comA,comB = minimizeRmsd(sel.positions,r0)
-#         sel.positions = np.array( [(r-comA).dot(R)+comB for r in sel.positions] )
-#         rmsd = np.mean( (sel.positions-r0)**2 )
-#         if rmsd > (0.1*rmsdThreshold)**2:
-#             break
-#     t0=t+1
-#     print( "Averaging coordinates in %s after frame %d" % (dcd, t0) )
-
-
-#     pos = sel.xyz[t0:,:,:]
-#     pos = np.mean(pos, axis=0)
-#     return 10*pos               # convert to Angstroms
+    return pos
 
 def unit_quat_conversions():
     for axis in [[0,0,1],[1,1,1],[1,0,0],[-1,-2,0]]:
diff --git a/dnarbd/segmentmodel.py b/dnarbd/segmentmodel.py
index 314bcab..eabccb5 100644
--- a/dnarbd/segmentmodel.py
+++ b/dnarbd/segmentmodel.py
@@ -744,7 +744,7 @@ class Segment(ConnectableElement, Group):
             b = self._generate_one_bead( self.nt_pos_to_contour(0), 0)
             existing_beads = [b] + existing_beads
 
-        if existing_beads[-1].get_nt_position(self)-(self.num_nt-1) < -0.5:
+        if existing_beads[-1].get_nt_position(self)-(self.num_nt-1) < -0.5 or len(existing_beads)==1:
             b = self._generate_one_bead( self.nt_pos_to_contour(self.num_nt-1), 0)
             existing_beads.append(b)
         assert(len(existing_beads) > 1)
diff --git a/dnarbd/simulate.py b/dnarbd/simulate.py
index 011fb7a..8d9cc11 100644
--- a/dnarbd/simulate.py
+++ b/dnarbd/simulate.py
@@ -76,7 +76,7 @@ def multiresolution_simulation( model, output_name,
         model._clear_beads()
         model._generate_bead_model( 1, 1, local_twist=True, escapable_twist=False )
         model.simulate( outputPrefix = output_prefix, numSteps=fine_steps, **simargs )
-        coordinates = readAvgArbdCoords('%s.psf' % output_name,'%s.pdb' % output_prefix, '%s.0.dcd' % full_output_prefix )
+        coordinates = readAvgArbdCoords('%s.psf' % output_prefix,'%s.pdb' % output_prefix, '%s.0.dcd' % full_output_prefix )
 
 
         """ Atomic simulation """
-- 
GitLab