From d377279494087358c4c6d37a0af6128d01bc4602 Mon Sep 17 00:00:00 2001
From: Chris Maffeo <cmaffeo2@illinois.edu>
Date: Mon, 23 Jul 2018 14:28:25 -0500
Subject: [PATCH] Changed recursive strand-tracing routine into a for loop

---
 segmentmodel.py | 40 ++++++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 16 deletions(-)

diff --git a/segmentmodel.py b/segmentmodel.py
index 1b7300e..12f7962 100644
--- a/segmentmodel.py
+++ b/segmentmodel.py
@@ -368,6 +368,9 @@ class Segment(ConnectableElement, Group):
 
         self.sequence = None
 
+    def __repr__(self):
+        return "<{} {}[{:d}]>".format( type(self), self.name, self.num_nt )
+
 
     def _set_splines_from_ends(self):
         a = np.array([self.start_position,self.end_position]).T
@@ -2101,23 +2104,28 @@ class SegmentModel(ArbdModel):
 
         """ Build strands from connectivity of helices """
         def _recursively_build_strand(strand, segment, pos, is_fwd, mycounter=0, move_at_least=0.5):
-            mycounter+=1
-            if mycounter > 10000:
-                import pdb
-                pdb.set_trace()
-            s,seg = [strand, segment]
-            
-            #if seg.name == "22-1" and pos > 140:
-            # if seg.name == "22-2":
-            #     import pdb
-            #     pdb.set_trace()
-            
-            end_pos, next_seg, next_pos, next_dir, move_at_least = seg.get_strand_segment(pos, is_fwd, move_at_least)
-            s.add_dna(seg, pos, end_pos, is_fwd)
+            seg = segment
+            history = []
+            while True:
+                mycounter+=1
+                if mycounter > 10000:
+                    import pdb
+                    pdb.set_trace()
+
+                #if seg.name == "22-1" and pos > 140:
+                # if seg.name == "22-2":
+                #     import pdb
+                #     pdb.set_trace()
+
+                end_pos, next_seg, next_pos, next_dir, move_at_least = seg.get_strand_segment(pos, is_fwd, move_at_least)
+                strand.add_dna(seg, pos, end_pos, is_fwd)
+
+                if next_seg is None:
+                    return
+                else:
+                    history.append((seg,pos,is_fwd))
+                    seg,pos,is_fwd = (next_seg, next_pos, next_dir)
 
-            if next_seg is not None:
-                # print("  next_dir: {}".format(next_dir))
-                _recursively_build_strand(s, next_seg, next_pos, next_dir, mycounter, move_at_least)
 
         for seg in self.segments:
             locs = seg.get_5prime_locations()
-- 
GitLab