From a83baf1b52d3fea9eda5703e3d938f9dcc3ff25c Mon Sep 17 00:00:00 2001
From: Chris Maffeo <cmaffeo2@illinois.edu>
Date: Wed, 29 Aug 2018 16:43:36 -0500
Subject: [PATCH] polygon_mesh: Changed bead positions at crossovers to fix
 issue with single-nt polymers

---
 bin/dnarbd                     |  9 ++++---
 dnarbd/readers/__init__.py     |  2 +-
 dnarbd/readers/polygon_mesh.py | 48 +++++++++++++++++++++++++---------
 3 files changed, 42 insertions(+), 17 deletions(-)
 mode change 100644 => 100755 bin/dnarbd

diff --git a/bin/dnarbd b/bin/dnarbd
old mode 100644
new mode 100755
index 703c3d8..cf16d9c
--- a/bin/dnarbd
+++ b/bin/dnarbd
@@ -50,10 +50,13 @@ if __name__ == '__main__':
                     
     model = read_model( infile )
 
+    if args.output_prefix is not None:
+        prefix = args.output_prefix
+
     run_args = dict(
         model = model,
-        output_name = args.output_prefix,
-        job_id = "job-"+args.output_prefix,
+        output_name = prefix,
+        job_id = "job-" + prefix,
         directory = args.directory,
         gpu = args.gpu,
         coarse_steps = args.coarse_steps,
@@ -61,7 +64,5 @@ if __name__ == '__main__':
         backbone_scale = args.backbone_scale
     )
 
-    if args.output_prefix == None:
-        run_args['output_name'] = prefix
 
     simulate( **run_args )
diff --git a/dnarbd/readers/__init__.py b/dnarbd/readers/__init__.py
index b846d72..2d1323c 100644
--- a/dnarbd/readers/__init__.py
+++ b/dnarbd/readers/__init__.py
@@ -13,7 +13,7 @@ from .segmentmodel_from_pdb import SegmentModelFromPdb
 ## TODO: make module this package conform to a single style for input/output
 
 def read_cadnano(json_file, **model_parameters):
-    data = read_json_file
+    data = read_json_file(json_file)
     return model_from_cadnano_json(data)
 
 def read_vhelix(maya_file, **model_parameters):
diff --git a/dnarbd/readers/polygon_mesh.py b/dnarbd/readers/polygon_mesh.py
index 15c4c88..f7bcc3a 100644
--- a/dnarbd/readers/polygon_mesh.py
+++ b/dnarbd/readers/polygon_mesh.py
@@ -326,9 +326,15 @@ def convert_maya_to_segments(helices):
         if top not in connectionToSingleStrand:
             ssSeg = get_end3_ssDNA(top)
             if len(ssSeg) > 0:
-                seg2 = SingleStrandedSegment("strand", 
-                                              start_position = ssSeg[0].get_position(),
-                                              end_position = ssSeg[-1].get_position(),
+                r0 = ssSeg[0].get_position()
+                if ssSeg[0].end5 is not None:
+                    r0 = 0.75*r0 + 0.25*ssSeg[0].end5.get_position()
+                r1 = ssSeg[-1].get_position()
+                if ssSeg[-1].end3 is not None:
+                    r1 = 0.75*r1 + 0.25*ssSeg[-1].end3.get_position()
+                seg2 = SingleStrandedSegment("S{:03d}".format(len(ss_segments)), 
+                                              start_position = r0,
+                                              end_position = r1,
                                               num_nt = len(ssSeg))
                 seg.connect_end3(seg2)
                 connectionToSingleStrand[top] = seg2
@@ -354,9 +360,15 @@ def convert_maya_to_segments(helices):
         if top.basepair not in connectionToSingleStrand:
             ssSeg = get_end5_ssDNA(top.basepair)[::-1]
             if len(ssSeg) > 0:
-                seg2 = SingleStrandedSegment("strand", 
-                                              start_position = ssSeg[-1].get_position(),
-                                              end_position = ssSeg[0].get_position(),
+                r0 = ssSeg[-1].get_position()
+                if ssSeg[-1].end5 is not None:
+                    r0 = 0.75*r0 + 0.25*ssSeg[-1].end5.get_position()
+                r1 = ssSeg[0].get_position()
+                if ssSeg[0].end3 is not None:
+                    r1 = 0.75*r1 + 0.25*ssSeg[0].end3.get_position()
+                seg2 = SingleStrandedSegment("S{:03d}".format(len(ss_segments)),
+                                              start_position = r0,
+                                              end_position = r1,
                                               num_nt = len(ssSeg))
                 seg.connect_end5(seg2)
                 connectionToSingleStrand[top.basepair] = seg2
@@ -382,9 +394,15 @@ def convert_maya_to_segments(helices):
         if bot not in connectionToSingleStrand:
             ssSeg = get_end3_ssDNA(bot)
             if len(ssSeg) > 0:
-                seg2 = SingleStrandedSegment("strand", 
-                                              start_position = ssSeg[0].get_position(),
-                                              end_position = ssSeg[-1].get_position(),
+                r0 = ssSeg[0].get_position()
+                if ssSeg[0].end5 is not None:
+                    r0 = 0.75*r0 + 0.25*ssSeg[0].end5.get_position()
+                r1 = ssSeg[-1].get_position()
+                if ssSeg[-1].end3 is not None:
+                    r1 = 0.75*r1 + 0.25*ssSeg[-1].end3.get_position()
+                seg2 = SingleStrandedSegment("S{:03d}".format(len(ss_segments)),
+                                              start_position = r0,
+                                              end_position = r1,
                                               num_nt = len(ssSeg))
                 seg.connect_start3(seg2)
                 connectionToSingleStrand[bot] = seg2
@@ -406,9 +424,15 @@ def convert_maya_to_segments(helices):
         if bot.basepair not in connectionToSingleStrand:
             ssSeg = get_end5_ssDNA(bot.basepair)[::-1]
             if len(ssSeg) > 0:
-                seg2 = SingleStrandedSegment("strand", 
-                                              start_position = ssSeg[-1].get_position(),
-                                              end_position = ssSeg[0].get_position(),
+                r0 = ssSeg[-1].get_position()
+                if ssSeg[-1].end5 is not None:
+                    r0 = 0.75*r0 + 0.25*ssSeg[-1].end5.get_position()
+                r1 = ssSeg[0].get_position()
+                if ssSeg[0].end3 is not None:
+                    r1 = 0.75*r1 + 0.25*ssSeg[0].end3.get_position()
+                seg2 = SingleStrandedSegment("S{:03d}".format(len(ss_segments)),
+                                              start_position = r0,
+                                              end_position = r1,
                                               num_nt = len(ssSeg))
                 seg.connect_start5(seg2)
                 connectionToSingleStrand[bot.basepair] = seg2
-- 
GitLab