From 2e5cefe33b4ccef4dd1c4d94015658588cbb20f8 Mon Sep 17 00:00:00 2001
From: pinyili2 <pinyili2@illinois.edu>
Date: Wed, 14 Aug 2024 08:24:38 -0500
Subject: [PATCH] update code

---
 mrdna/readers/.DS_Store                       |  Bin 0 -> 6148 bytes
 mrdna/readers/__init__.py                     |    2 -
 mrdna/readers/segmentmodel_from_cadnano.py    |   57 +-
 mrdna/readers/test.csv                        | 1246 ---
 mrdna/readers/test/1.json                     |    1 +
 mrdna/readers/test/ipykernel_launcher.json    | 3687 +++++++
 mrdna/readers/test/loopout.sc                 |   45 +
 mrdna/readers/test/s.csv                      |  416 +
 .../segmentmodel_from_cadnano_old.py          |    8 +-
 mrdna/readers/test/seq0.txt                   |   15 +
 mrdna/readers/test/test.ipynb                 |  548 +-
 mrdna/readers/test/test.sc                    |  121 +
 mrdna/readers/test/test2.ipynb                | 8524 ++++++++++++++++-
 mrdna/readers/test/test3.ipynb                |    8 +-
 mrdna/readers/test/test_cad2.5.json           |    1 +
 mrdna/readers/test/test_insert.sc             |  122 +
 mrdna/readers/test/test_insert_2.5.json       |    1 +
 mrdna/readers/test/test_insert_seq2.json      |    1 +
 mrdna/readers/test/test_insert_seq3.json      |    1 +
 19 files changed, 13466 insertions(+), 1338 deletions(-)
 create mode 100644 mrdna/readers/.DS_Store
 delete mode 100644 mrdna/readers/test.csv
 create mode 100644 mrdna/readers/test/1.json
 create mode 100644 mrdna/readers/test/ipykernel_launcher.json
 create mode 100644 mrdna/readers/test/loopout.sc
 create mode 100644 mrdna/readers/test/s.csv
 rename mrdna/readers/{ => test}/segmentmodel_from_cadnano_old.py (96%)
 create mode 100644 mrdna/readers/test/seq0.txt
 create mode 100644 mrdna/readers/test/test.sc
 create mode 100644 mrdna/readers/test/test_cad2.5.json
 create mode 100644 mrdna/readers/test/test_insert.sc
 create mode 100644 mrdna/readers/test/test_insert_2.5.json
 create mode 100644 mrdna/readers/test/test_insert_seq2.json
 create mode 100644 mrdna/readers/test/test_insert_seq3.json

diff --git a/mrdna/readers/.DS_Store b/mrdna/readers/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..ca5d0e6e71945129431efcf086d0e96e397046d8
GIT binary patch
literal 6148
zcmeH~F^<AO3`M`$6i75Fx15FpaDx$o6L5jmZs?FGfPRk7x5o|Htx>f4mh3n7#7gpu
zObo#Gk7);t0M>LTwjO3?%m>_Y#trxB_H+5ZUN2sxtvcW-eZ*`(w*@I61*Cu!kOER*
zK?>wCzTPb8ne-@9Kng5F0slS}y0a!*XM8#sVgw)umczJ?S%NHHAZxO9vO=?*9xPie
z#t^SZJ6ZC&nrxlD9hSp~<(<u^7@GBVSYbl58c>h|QedXQN6$w;|Bv*)=KooXQYjz>
z{+R+c98QNlUn<YmU$5u&udMpI(aE@+;pHcQi66zE^f2xhUywD~I$5FVM<8TSkOFU2
F;0eYx62$-j

literal 0
HcmV?d00001

diff --git a/mrdna/readers/__init__.py b/mrdna/readers/__init__.py
index b694be0..33b2a79 100644
--- a/mrdna/readers/__init__.py
+++ b/mrdna/readers/__init__.py
@@ -9,9 +9,7 @@ def read_cadnano(json_file, sequence=None, fill_sequence='T', **model_parameters
 
 def read_cadnano_input(json_file,sequence=None,**model_parameters):
     from .segmentmodel_from_cadnano import mrdna_model_from_cadnano
-    from .segmentmodel_from_lists import model_from_basepair_stack_3prime
     
-
     return mrdna_model_from_cadnano(json_file,seq=sequence,**model_parameters)
 
 def read_vhelix(maya_file, **model_parameters):
diff --git a/mrdna/readers/segmentmodel_from_cadnano.py b/mrdna/readers/segmentmodel_from_cadnano.py
index 6cb46ea..4b950b0 100644
--- a/mrdna/readers/segmentmodel_from_cadnano.py
+++ b/mrdna/readers/segmentmodel_from_cadnano.py
@@ -1,5 +1,4 @@
 # -*- coding: utf-8 -*-
-import pdb
 import numpy as np
 import os,sys
 from glob import glob
@@ -13,6 +12,7 @@ from ..segmentmodel import SegmentModel, SingleStrandedSegment, DoubleStrandedSe
 from ..model.dna_sequence import m13 as m13seq
 import json
 import re
+import pdb
 
 
 
@@ -23,7 +23,26 @@ import re
 ##   - helices that should be stacked across an empty region (crossovers from and end in the helix to another end in the helix)
 ##   - circular constructs
 
+
+def get_lattice(part):
+    lattice_type = None
+    _gt = part.getGridType()
+    try:
+        lattice_type = _gt.name.lower()
+    except:
+        if _gt == 1:
+            lattice_type = 'square'
+        elif _gt == 2:
+            lattice_type = 'honeycomb'
+        else:
+            print(lattice_type)
+    return lattice_type
+
+
 def read_json_file(filename):
+    import cadnano
+    from cadnano.document import Document
+
     try:
         with open(filename) as ch:
             json_data = json.load(ch)
@@ -38,11 +57,7 @@ def read_json_file(filename):
                 # l = re.sub(r"(\w):", r'\1":', l)
                 content += l+"\n"
             json_data = json.loads(content)
-    return json_data
 
-def cadnano_parts(json_data):
-    import cadnano
-    from cadnano.document import Document
     try:
         doc = Document()
         cadnano.fileio.v3decode.decode(doc, json_data)
@@ -68,20 +83,6 @@ def cadnano_parts(json_data):
         n_df=df.set_index("num")
     return part
 
-def get_lattice(part):
-    lattice_type = None
-    _gt = part.getGridType()
-    try:
-        lattice_type = _gt.name.lower()
-    except:
-        if _gt == 1:
-            lattice_type = 'square'
-        elif _gt == 2:
-            lattice_type = 'honeycomb'
-        else:
-            print("WARNING: unable to determine cadnano part lattice type")
-    return lattice_type
-
 def get_helix_angle(part, helix_id, indices):
     """ Get "start_orientation" for helix """
         # import ipdb
@@ -154,10 +155,11 @@ def gen_id_series(strand,part):
         else:
             df["threeprime_tuple"]=[(strand.connection3p().idNum(),str(strand.connection3p().idx5Prime()),strand.connection3p().isForward())]+L[0:-1]
     ## cadnano 3.1 sequence assign is wrong if there is insertion or deletion. 
-    df["r"]=[np.array([df["x"][i],df["y"][i],df["z"][i]]) for i in df.index]
+    df["r"]=[np.array([df["x"][i],df["y"][i],df["z"][i]],dtype=np.float32) for i in df.index]
     
     return [pd.Series(df.loc[i]) for i in df.index]
 
+
 def gen_prop_table(part):
     strand_set=[]
     for i in part.getidNums():
@@ -170,7 +172,7 @@ def gen_prop_table(part):
     
     nt_prop=pd.DataFrame(id_series)
     nt_prop.reset_index(names=list(range(len(nt_prop.index))),inplace=True)
-    
+    nt_prop["seq"]=-1
     ind_tuple=[(nt_prop["vh"][i],nt_prop["zid"][i],nt_prop["fwd"][i]) for i in nt_prop.index]
     stacks=[]
     for i in list(nt_prop["stack_tuple"]):
@@ -187,7 +189,7 @@ def gen_prop_table(part):
             tprime.append(ind_tuple.index(i))
     nt_prop["threeprime"]=tprime
     vhzid=list(zip(nt_prop["vh"],nt_prop["zid"]))
-
+    nt_prop["bp"]=-1
     nt_prop["orientation"]=[get_helix_angle(part, helix_id, int(float(indices))) for helix_id,indices in vhzid]
     nt_prop=nt_prop.fillna(-1)
     for i in range(int(len(nt_prop.index)/2)):
@@ -199,14 +201,11 @@ def gen_prop_table(part):
             pass
     return nt_prop
 
-
 def mrdna_model_from_cadnano(json_file,seq=None,**model_parameters):
-    json_data=read_json_file(json_file)
-    part,decoder=cadnano_parts(json_data)
-    if decoder==2:
-        nt_prop=gen_prop_table(part)
-    elif decoder==3:
-        nt_prop=gen_prop_table(part)
+    part=read_json_file(json_file)
+    
+    nt_prop=gen_prop_table(part)
+
 
     if seq is None:
         if nt_prop["seq"][0]==-1:
diff --git a/mrdna/readers/test.csv b/mrdna/readers/test.csv
deleted file mode 100644
index 0a81061..0000000
--- a/mrdna/readers/test.csv
+++ /dev/null
@@ -1,1246 +0,0 @@
-,vh,zid,is_scaf,r,bp,stack,threeprime,seq,orientation
-0,0,5,True,[0.   2.25 1.7 ],213,-1,1,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-1,0,6,True,[0.   2.25 2.04],214,-1,2,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-2,0,7,True,[0.   2.25 2.38],215,-1,3,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-3,0,8,True,[0.   2.25 2.72],216,-1,4,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-4,0,9,True,[0.   2.25 3.06],217,-1,5,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-5,0,10,True,[0.   2.25 3.4 ],218,-1,6,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-6,0,11,True,[0.   2.25 3.74],219,-1,7,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-7,0,12,True,[0.   2.25 4.08],220,-1,8,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-8,0,13,True,[0.   2.25 4.42],221,-1,9,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-9,0,14,True,[0.   2.25 4.76],222,-1,10,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-10,0,15,True,[0.   2.25 5.1 ],223,-1,11,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-11,0,16,True,[0.   2.25 5.44],224,-1,12,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-12,0,17,True,[0.   2.25 5.78],225,-1,13,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-13,0,18,True,[0.   2.25 6.12],226,-1,14,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-14,0,19,True,[0.   2.25 6.46],227,-1,15,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-15,0,20,True,[0.   2.25 6.8 ],228,-1,16,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-16,0,21,True,[0.   2.25 7.14],229,-1,17,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-17,0,22,True,[0.   2.25 7.48],230,-1,18,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-18,0,23,True,[0.   2.25 7.82],231,-1,19,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-19,0,24,True,[0.   2.25 8.16],232,-1,20,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-20,0,25,True,[0.   2.25 8.5 ],233,-1,21,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-21,0,26,True,[0.   2.25 8.84],234,-1,22,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-22,0,27,True,[0.   2.25 9.18],235,-1,23,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-23,0,28,True,[0.   2.25 9.52],236,-1,24,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-24,0,29,True,[0.   2.25 9.86],237,-1,25,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-25,0,30,True,[ 0.    2.25 10.2 ],238,-1,26,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-26,0,31,True,[ 0.    2.25 10.54],239,-1,27,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-27,0,32,True,[ 0.    2.25 10.88],240,-1,28,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-28,0,33,True,[ 0.    2.25 11.22],241,-1,29,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-29,0,34,True,[ 0.    2.25 11.56],242,-1,30,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-30,0,35,True,[ 0.    2.25 11.9 ],243,-1,31,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-31,0,36,True,[ 0.    2.25 12.24],244,-1,66,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-32,0,39,True,[ 0.    2.25 13.26],-1,-1,33,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-33,0,40,True,[ 0.    2.25 13.6 ],-1,-1,34,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-34,0,41,True,[ 0.    2.25 13.94],-1,-1,-1,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-35,1,5,True,[-1.94855738  1.125       1.7       ],249,-1,0,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-36,1,6,True,[-1.94855738  1.125       2.04      ],250,-1,35,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-37,1,7,True,[-1.94855738  1.125       2.38      ],251,-1,36,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-38,1,8,True,[-1.94855738  1.125       2.72      ],252,-1,37,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-39,1,9,True,[-1.94855738  1.125       3.06      ],253,-1,38,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-40,1,10,True,[-1.94855738  1.125       3.4       ],254,-1,39,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-41,1,11,True,[-1.94855738  1.125       3.74      ],255,-1,40,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-42,1,12,True,[-1.94855738  1.125       4.08      ],256,-1,41,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-43,1,13,True,[-1.94855738  1.125       4.42      ],257,-1,42,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-44,1,14,True,[-1.94855738  1.125       4.76      ],258,-1,43,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-45,1,15,True,[-1.94855738  1.125       5.1       ],259,-1,44,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-46,1,16,True,[-1.94855738  1.125       5.44      ],260,-1,45,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-47,1,17,True,[-1.94855738  1.125       5.78      ],261,-1,46,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-48,1,18,True,[-1.94855738  1.125       6.12      ],262,-1,47,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-49,1,19,True,[-1.94855738  1.125       6.46      ],263,-1,87,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-50,1,20,True,[-1.94855738  1.125       6.8       ],264,-1,49,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-51,1,21,True,[-1.94855738  1.125       7.14      ],265,-1,50,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-52,1,22,True,[-1.94855738  1.125       7.48      ],266,-1,51,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-53,1,23,True,[-1.94855738  1.125       7.82      ],267,-1,52,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-54,1,24,True,[-1.94855738  1.125       8.16      ],268,-1,53,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-55,1,25,True,[-1.94855738  1.125       8.5       ],269,-1,54,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-56,1,26,True,[-1.94855738  1.125       8.84      ],270,-1,55,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-57,1,27,True,[-1.94855738  1.125       9.18      ],271,-1,56,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-58,1,28,True,[-1.94855738  1.125       9.52      ],272,-1,57,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-59,1,29,True,[-1.94855738  1.125       9.86      ],273,-1,58,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-60,1,30,True,[-1.94855738  1.125      10.2       ],274,-1,59,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-61,1,31,True,[-1.94855738  1.125      10.54      ],275,-1,60,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-62,1,32,True,[-1.94855738  1.125      10.88      ],276,-1,61,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-63,1,33,True,[-1.94855738  1.125      11.22      ],277,-1,62,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-64,1,34,True,[-1.94855738  1.125      11.56      ],278,-1,63,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-65,1,35,True,[-1.94855738  1.125      11.9       ],279,-1,64,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-66,1,36,True,[-1.94855738  1.125      12.24      ],280,-1,65,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-67,1,39,True,[-1.94855738  1.125      13.26      ],-1,-1,-1,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-68,1,40,True,[-1.94855738  1.125      13.6       ],-1,-1,67,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-69,1,41,True,[-1.94855738  1.125      13.94      ],-1,-1,68,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-70,2,2,True,[-1.94855738 -1.125       0.68      ],285,-1,71,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-71,2,3,True,[-1.94855738 -1.125       1.02      ],286,-1,72,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-72,2,4,True,[-1.94855738 -1.125       1.36      ],287,-1,73,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-73,2,5,True,[-1.94855738 -1.125       1.7       ],288,-1,74,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-74,2,6,True,[-1.94855738 -1.125       2.04      ],289,-1,75,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-75,2,7,True,[-1.94855738 -1.125       2.38      ],290,-1,76,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-76,2,8,True,[-1.94855738 -1.125       2.72      ],291,-1,77,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-77,2,9,True,[-1.94855738 -1.125       3.06      ],292,-1,78,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-78,2,10,True,[-1.94855738 -1.125       3.4       ],293,-1,79,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-79,2,11,True,[-1.94855738 -1.125       3.74      ],294,-1,80,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-80,2,12,True,[-1.94855738 -1.125       4.08      ],295,-1,81,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-81,2,13,True,[-1.94855738 -1.125       4.42      ],296,-1,82,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-82,2,14,True,[-1.94855738 -1.125       4.76      ],297,-1,83,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-83,2,15,True,[-1.94855738 -1.125       5.1       ],298,-1,84,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-84,2,16,True,[-1.94855738 -1.125       5.44      ],299,-1,85,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-85,2,17,True,[-1.94855738 -1.125       5.78      ],300,-1,86,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-86,2,18,True,[-1.94855738 -1.125       6.12      ],301,-1,48,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-87,2,19,True,[-1.94855738 -1.125       6.46      ],302,-1,88,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-88,2,20,True,[-1.94855738 -1.125       6.8       ],303,-1,89,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-89,2,21,True,[-1.94855738 -1.125       7.14      ],304,-1,90,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-90,2,22,True,[-1.94855738 -1.125       7.48      ],305,-1,91,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-91,2,23,True,[-1.94855738 -1.125       7.82      ],306,-1,92,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-92,2,24,True,[-1.94855738 -1.125       8.16      ],307,-1,93,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-93,2,25,True,[-1.94855738 -1.125       8.5       ],308,-1,94,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-94,2,26,True,[-1.94855738 -1.125       8.84      ],309,-1,95,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-95,2,27,True,[-1.94855738 -1.125       9.18      ],310,-1,96,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-96,2,28,True,[-1.94855738 -1.125       9.52      ],311,-1,97,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-97,2,29,True,[-1.94855738 -1.125       9.86      ],312,-1,98,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-98,2,30,True,[-1.94855738 -1.125      10.2       ],313,-1,99,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-99,2,31,True,[-1.94855738 -1.125      10.54      ],314,-1,100,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-100,2,32,True,[-1.94855738 -1.125      10.88      ],315,-1,134,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-101,2,39,True,[-1.94855738 -1.125      13.26      ],-1,-1,102,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-102,2,40,True,[-1.94855738 -1.125      13.6       ],-1,-1,103,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-103,2,41,True,[-1.94855738 -1.125      13.94      ],-1,-1,-1,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-104,3,2,True,[ 0.   -2.25  0.68],320,-1,70,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-105,3,3,True,[ 0.   -2.25  1.02],321,-1,104,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-106,3,4,True,[ 0.   -2.25  1.36],322,-1,105,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-107,3,5,True,[ 0.   -2.25  1.7 ],323,-1,106,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-108,3,6,True,[ 0.   -2.25  2.04],324,-1,107,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-109,3,7,True,[ 0.   -2.25  2.38],325,-1,108,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-110,3,8,True,[ 0.   -2.25  2.72],326,-1,109,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-111,3,9,True,[ 0.   -2.25  3.06],327,-1,110,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-112,3,10,True,[ 0.   -2.25  3.4 ],328,-1,111,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-113,3,11,True,[ 0.   -2.25  3.74],329,-1,112,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-114,3,12,True,[ 0.   -2.25  4.08],330,-1,113,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-115,3,13,True,[ 0.   -2.25  4.42],331,-1,114,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-116,3,14,True,[ 0.   -2.25  4.76],332,-1,115,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-117,3,15,True,[ 0.   -2.25  5.1 ],333,-1,116,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-118,3,16,True,[ 0.   -2.25  5.44],334,-1,151,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-119,3,17,True,[ 0.   -2.25  5.78],335,-1,118,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-120,3,18,True,[ 0.   -2.25  6.12],336,-1,119,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-121,3,19,True,[ 0.   -2.25  6.46],337,-1,120,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-122,3,20,True,[ 0.   -2.25  6.8 ],338,-1,121,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-123,3,21,True,[ 0.   -2.25  7.14],339,-1,122,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-124,3,22,True,[ 0.   -2.25  7.48],340,-1,123,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-125,3,23,True,[ 0.   -2.25  7.82],341,-1,124,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-126,3,24,True,[ 0.   -2.25  8.16],342,-1,125,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-127,3,25,True,[ 0.   -2.25  8.5 ],343,-1,126,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-128,3,26,True,[ 0.   -2.25  8.84],344,-1,127,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-129,3,27,True,[ 0.   -2.25  9.18],345,-1,128,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-130,3,28,True,[ 0.   -2.25  9.52],346,-1,129,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-131,3,29,True,[ 0.   -2.25  9.86],347,-1,130,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-132,3,30,True,[ 0.   -2.25 10.2 ],348,-1,131,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-133,3,31,True,[ 0.   -2.25 10.54],349,-1,132,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-134,3,32,True,[ 0.   -2.25 10.88],350,-1,133,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-135,3,37,True,[ 0.   -2.25 12.58],-1,-1,-1,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-136,3,38,True,[ 0.   -2.25 12.92],-1,-1,135,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-137,3,39,True,[ 0.   -2.25 13.26],-1,-1,136,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-138,3,40,True,[ 0.   -2.25 13.6 ],-1,-1,137,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-139,3,41,True,[ 0.   -2.25 13.94],-1,-1,138,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-140,4,0,True,[ 1.94855738 -1.125       0.        ],-1,-1,141,-1,"[[ 2.22044605e-16  1.00000000e+00  0.00000000e+00]
- [-1.00000000e+00  2.22044605e-16  0.00000000e+00]
- [ 0.00000000e+00  0.00000000e+00  1.00000000e+00]]"
-141,4,1,True,[ 1.94855738 -1.125       0.34      ],-1,-1,142,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-142,4,2,True,[ 1.94855738 -1.125       0.68      ],-1,-1,143,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-143,4,3,True,[ 1.94855738 -1.125       1.02      ],-1,-1,-1,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-144,4,9,True,[ 1.94855738 -1.125       3.06      ],353,-1,145,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-145,4,10,True,[ 1.94855738 -1.125       3.4       ],354,-1,146,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-146,4,11,True,[ 1.94855738 -1.125       3.74      ],355,-1,147,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-147,4,12,True,[ 1.94855738 -1.125       4.08      ],356,-1,148,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-148,4,13,True,[ 1.94855738 -1.125       4.42      ],357,-1,149,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-149,4,14,True,[ 1.94855738 -1.125       4.76      ],358,-1,150,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-150,4,15,True,[ 1.94855738 -1.125       5.1       ],359,-1,117,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-151,4,16,True,[ 1.94855738 -1.125       5.44      ],360,-1,152,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-152,4,17,True,[ 1.94855738 -1.125       5.78      ],361,-1,153,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-153,4,18,True,[ 1.94855738 -1.125       6.12      ],362,-1,154,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-154,4,19,True,[ 1.94855738 -1.125       6.46      ],363,-1,155,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-155,4,20,True,[ 1.94855738 -1.125       6.8       ],364,-1,156,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-156,4,21,True,[ 1.94855738 -1.125       7.14      ],365,-1,157,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-157,4,22,True,[ 1.94855738 -1.125       7.48      ],366,-1,158,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-158,4,23,True,[ 1.94855738 -1.125       7.82      ],367,-1,159,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-159,4,24,True,[ 1.94855738 -1.125       8.16      ],368,-1,160,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-160,4,25,True,[ 1.94855738 -1.125       8.5       ],369,-1,161,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-161,4,26,True,[ 1.94855738 -1.125       8.84      ],370,-1,162,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-162,4,27,True,[ 1.94855738 -1.125       9.18      ],371,-1,163,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-163,4,28,True,[ 1.94855738 -1.125       9.52      ],372,-1,164,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-164,4,29,True,[ 1.94855738 -1.125       9.86      ],373,-1,165,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-165,4,30,True,[ 1.94855738 -1.125      10.2       ],374,-1,166,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-166,4,31,True,[ 1.94855738 -1.125      10.54      ],375,-1,167,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-167,4,32,True,[ 1.94855738 -1.125      10.88      ],376,-1,168,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-168,4,33,True,[ 1.94855738 -1.125      11.22      ],377,-1,169,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-169,4,34,True,[ 1.94855738 -1.125      11.56      ],378,-1,170,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-170,4,35,True,[ 1.94855738 -1.125      11.9       ],379,-1,171,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-171,4,36,True,[ 1.94855738 -1.125      12.24      ],380,-1,172,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-172,4,37,True,[ 1.94855738 -1.125      12.58      ],381,-1,173,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-173,4,38,True,[ 1.94855738 -1.125      12.92      ],382,-1,174,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-174,4,39,True,[ 1.94855738 -1.125      13.26      ],383,-1,209,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-175,5,0,True,[1.94855738 1.125      0.        ],-1,-1,-1,-1,"[[ 2.22044605e-16  1.00000000e+00  0.00000000e+00]
- [-1.00000000e+00  2.22044605e-16  0.00000000e+00]
- [ 0.00000000e+00  0.00000000e+00  1.00000000e+00]]"
-176,5,1,True,[1.94855738 1.125      0.34      ],-1,-1,175,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-177,5,2,True,[1.94855738 1.125      0.68      ],-1,-1,176,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-178,5,3,True,[1.94855738 1.125      1.02      ],-1,-1,177,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-179,5,9,True,[1.94855738 1.125      3.06      ],384,-1,144,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-180,5,10,True,[1.94855738 1.125      3.4       ],385,-1,179,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-181,5,11,True,[1.94855738 1.125      3.74      ],386,-1,180,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-182,5,12,True,[1.94855738 1.125      4.08      ],387,-1,181,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-183,5,13,True,[1.94855738 1.125      4.42      ],388,-1,182,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-184,5,14,True,[1.94855738 1.125      4.76      ],389,-1,183,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-185,5,15,True,[1.94855738 1.125      5.1       ],390,-1,184,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-186,5,16,True,[1.94855738 1.125      5.44      ],391,-1,185,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-187,5,17,True,[1.94855738 1.125      5.78      ],392,-1,186,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-188,5,18,True,[1.94855738 1.125      6.12      ],393,-1,187,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-189,5,19,True,[1.94855738 1.125      6.46      ],394,-1,188,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-190,5,20,True,[1.94855738 1.125      6.8       ],395,-1,189,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-191,5,21,True,[1.94855738 1.125      7.14      ],396,-1,190,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-192,5,22,True,[1.94855738 1.125      7.48      ],397,-1,191,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-193,5,23,True,[1.94855738 1.125      7.82      ],398,-1,-1,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-194,5,24,True,[1.94855738 1.125      8.16      ],399,193,193,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-195,5,25,True,[1.94855738 1.125      8.5       ],400,-1,194,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-196,5,26,True,[1.94855738 1.125      8.84      ],401,-1,195,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-197,5,27,True,[1.94855738 1.125      9.18      ],402,-1,196,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-198,5,28,True,[1.94855738 1.125      9.52      ],403,-1,197,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-199,5,29,True,[1.94855738 1.125      9.86      ],404,-1,198,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-200,5,30,True,[ 1.94855738  1.125      10.2       ],405,-1,199,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-201,5,31,True,[ 1.94855738  1.125      10.54      ],406,-1,200,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-202,5,32,True,[ 1.94855738  1.125      10.88      ],407,-1,201,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-203,5,33,True,[ 1.94855738  1.125      11.22      ],408,-1,202,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-204,5,34,True,[ 1.94855738  1.125      11.56      ],409,-1,203,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-205,5,35,True,[ 1.94855738  1.125      11.9       ],410,-1,204,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-206,5,36,True,[ 1.94855738  1.125      12.24      ],411,-1,205,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-207,5,37,True,[ 1.94855738  1.125      12.58      ],-1,-1,206,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-208,5,38,True,[ 1.94855738  1.125      12.92      ],-1,-1,207,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-209,5,39,True,[ 1.94855738  1.125      13.26      ],-1,-1,208,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-210,0,2,False,[0.   2.25 0.68],-1,-1,-1,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-211,0,3,False,[0.   2.25 1.02],-1,-1,210,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-212,0,4,False,[0.   2.25 1.36],-1,-1,211,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-213,0,5,False,[0.   2.25 1.7 ],0,-1,212,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-214,0,6,False,[0.   2.25 2.04],1,-1,213,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-215,0,7,False,[0.   2.25 2.38],2,-1,214,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-216,0,8,False,[0.   2.25 2.72],3,-1,215,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-217,0,9,False,[0.   2.25 3.06],4,-1,216,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-218,0,10,False,[0.   2.25 3.4 ],5,-1,217,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-219,0,11,False,[0.   2.25 3.74],6,-1,218,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-220,0,12,False,[0.   2.25 4.08],7,-1,219,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-221,0,13,False,[0.   2.25 4.42],8,-1,220,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-222,0,14,False,[0.   2.25 4.76],9,-1,221,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-223,0,15,False,[0.   2.25 5.1 ],10,-1,222,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-224,0,16,False,[0.   2.25 5.44],11,-1,223,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-225,0,17,False,[0.   2.25 5.78],12,-1,224,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-226,0,18,False,[0.   2.25 6.12],13,-1,225,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-227,0,19,False,[0.   2.25 6.46],14,-1,226,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-228,0,20,False,[0.   2.25 6.8 ],15,-1,227,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-229,0,21,False,[0.   2.25 7.14],16,-1,265,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-230,0,22,False,[0.   2.25 7.48],17,-1,229,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-231,0,23,False,[0.   2.25 7.82],18,-1,230,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-232,0,24,False,[0.   2.25 8.16],19,-1,-1,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-233,0,25,False,[0.   2.25 8.5 ],20,232,232,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-234,0,26,False,[0.   2.25 8.84],21,-1,233,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-235,0,27,False,[0.   2.25 9.18],22,-1,234,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-236,0,28,False,[0.   2.25 9.52],23,-1,403,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-237,0,29,False,[0.   2.25 9.86],24,-1,236,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-238,0,30,False,[ 0.    2.25 10.2 ],25,-1,237,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-239,0,31,False,[ 0.    2.25 10.54],26,-1,238,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-240,0,32,False,[ 0.    2.25 10.88],27,-1,239,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-241,0,33,False,[ 0.    2.25 11.22],28,-1,240,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-242,0,34,False,[ 0.    2.25 11.56],29,-1,241,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-243,0,35,False,[ 0.    2.25 11.9 ],30,-1,242,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-244,0,36,False,[ 0.    2.25 12.24],31,-1,243,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-245,0,37,False,[ 0.    2.25 12.58],-1,-1,244,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-246,0,38,False,[ 0.    2.25 12.92],-1,-1,245,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-247,1,3,False,[-1.94855738  1.125       1.02      ],-1,-1,248,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-248,1,4,False,[-1.94855738  1.125       1.36      ],-1,-1,249,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-249,1,5,False,[-1.94855738  1.125       1.7       ],35,-1,250,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-250,1,6,False,[-1.94855738  1.125       2.04      ],36,-1,251,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-251,1,7,False,[-1.94855738  1.125       2.38      ],37,-1,252,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-252,1,8,False,[-1.94855738  1.125       2.72      ],38,-1,253,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-253,1,9,False,[-1.94855738  1.125       3.06      ],39,-1,254,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-254,1,10,False,[-1.94855738  1.125       3.4       ],40,-1,255,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-255,1,11,False,[-1.94855738  1.125       3.74      ],41,-1,256,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-256,1,12,False,[-1.94855738  1.125       4.08      ],42,-1,257,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-257,1,13,False,[-1.94855738  1.125       4.42      ],43,-1,258,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-258,1,14,False,[-1.94855738  1.125       4.76      ],44,-1,259,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-259,1,15,False,[-1.94855738  1.125       5.1       ],45,-1,260,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-260,1,16,False,[-1.94855738  1.125       5.44      ],46,-1,261,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-261,1,17,False,[-1.94855738  1.125       5.78      ],47,-1,262,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-262,1,18,False,[-1.94855738  1.125       6.12      ],48,-1,263,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-263,1,19,False,[-1.94855738  1.125       6.46      ],49,-1,264,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-264,1,20,False,[-1.94855738  1.125       6.8       ],50,-1,228,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-265,1,21,False,[-1.94855738  1.125       7.14      ],51,-1,266,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-266,1,22,False,[-1.94855738  1.125       7.48      ],52,-1,267,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-267,1,23,False,[-1.94855738  1.125       7.82      ],53,-1,268,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-268,1,24,False,[-1.94855738  1.125       8.16      ],54,-1,269,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-269,1,25,False,[-1.94855738  1.125       8.5       ],55,-1,270,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-270,1,26,False,[-1.94855738  1.125       8.84      ],56,-1,271,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-271,1,27,False,[-1.94855738  1.125       9.18      ],57,-1,272,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-272,1,28,False,[-1.94855738  1.125       9.52      ],58,-1,273,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-273,1,29,False,[-1.94855738  1.125       9.86      ],59,-1,274,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-274,1,30,False,[-1.94855738  1.125      10.2       ],60,-1,275,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-275,1,31,False,[-1.94855738  1.125      10.54      ],61,-1,276,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-276,1,32,False,[-1.94855738  1.125      10.88      ],62,-1,277,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-277,1,33,False,[-1.94855738  1.125      11.22      ],63,-1,278,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-278,1,34,False,[-1.94855738  1.125      11.56      ],64,-1,279,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-279,1,35,False,[-1.94855738  1.125      11.9       ],65,-1,280,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-280,1,36,False,[-1.94855738  1.125      12.24      ],66,-1,281,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-281,1,37,False,[-1.94855738  1.125      12.58      ],-1,-1,282,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-282,1,38,False,[-1.94855738  1.125      12.92      ],-1,-1,-1,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-283,2,0,False,[-1.94855738 -1.125       0.        ],-1,-1,-1,-1,"[[ 2.22044605e-16  1.00000000e+00  0.00000000e+00]
- [-1.00000000e+00  2.22044605e-16  0.00000000e+00]
- [ 0.00000000e+00  0.00000000e+00  1.00000000e+00]]"
-284,2,1,False,[-1.94855738 -1.125       0.34      ],-1,-1,283,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-285,2,2,False,[-1.94855738 -1.125       0.68      ],70,-1,284,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-286,2,3,False,[-1.94855738 -1.125       1.02      ],71,-1,285,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-287,2,4,False,[-1.94855738 -1.125       1.36      ],72,-1,286,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-288,2,5,False,[-1.94855738 -1.125       1.7       ],73,-1,287,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-289,2,6,False,[-1.94855738 -1.125       2.04      ],74,-1,288,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-290,2,7,False,[-1.94855738 -1.125       2.38      ],75,-1,289,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-291,2,8,False,[-1.94855738 -1.125       2.72      ],76,-1,290,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-292,2,9,False,[-1.94855738 -1.125       3.06      ],77,-1,291,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-293,2,10,False,[-1.94855738 -1.125       3.4       ],78,-1,292,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-294,2,11,False,[-1.94855738 -1.125       3.74      ],79,-1,293,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-295,2,12,False,[-1.94855738 -1.125       4.08      ],80,-1,294,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-296,2,13,False,[-1.94855738 -1.125       4.42      ],81,-1,295,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-297,2,14,False,[-1.94855738 -1.125       4.76      ],82,-1,296,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-298,2,15,False,[-1.94855738 -1.125       5.1       ],83,-1,297,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-299,2,16,False,[-1.94855738 -1.125       5.44      ],84,-1,298,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-300,2,17,False,[-1.94855738 -1.125       5.78      ],85,-1,299,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-301,2,18,False,[-1.94855738 -1.125       6.12      ],86,-1,300,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-302,2,19,False,[-1.94855738 -1.125       6.46      ],87,-1,301,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-303,2,20,False,[-1.94855738 -1.125       6.8       ],88,-1,302,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-304,2,21,False,[-1.94855738 -1.125       7.14      ],89,-1,303,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-305,2,22,False,[-1.94855738 -1.125       7.48      ],90,-1,304,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-306,2,23,False,[-1.94855738 -1.125       7.82      ],91,-1,305,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-307,2,24,False,[-1.94855738 -1.125       8.16      ],92,-1,306,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-308,2,25,False,[-1.94855738 -1.125       8.5       ],93,-1,307,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-309,2,26,False,[-1.94855738 -1.125       8.84      ],94,-1,308,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-310,2,27,False,[-1.94855738 -1.125       9.18      ],95,-1,309,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-311,2,28,False,[-1.94855738 -1.125       9.52      ],96,-1,310,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-312,2,29,False,[-1.94855738 -1.125       9.86      ],97,-1,311,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-313,2,30,False,[-1.94855738 -1.125      10.2       ],98,-1,312,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-314,2,31,False,[-1.94855738 -1.125      10.54      ],99,-1,313,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-315,2,32,False,[-1.94855738 -1.125      10.88      ],100,-1,314,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-316,2,33,False,[-1.94855738 -1.125      11.22      ],-1,-1,315,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-317,2,34,False,[-1.94855738 -1.125      11.56      ],-1,-1,316,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-318,3,0,False,[ 0.   -2.25  0.  ],-1,-1,319,-1,"[[ 2.22044605e-16  1.00000000e+00  0.00000000e+00]
- [-1.00000000e+00  2.22044605e-16  0.00000000e+00]
- [ 0.00000000e+00  0.00000000e+00  1.00000000e+00]]"
-319,3,1,False,[ 0.   -2.25  0.34],-1,-1,320,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-320,3,2,False,[ 0.   -2.25  0.68],104,-1,321,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-321,3,3,False,[ 0.   -2.25  1.02],105,-1,322,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-322,3,4,False,[ 0.   -2.25  1.36],106,-1,323,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-323,3,5,False,[ 0.   -2.25  1.7 ],107,-1,324,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-324,3,6,False,[ 0.   -2.25  2.04],108,-1,325,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-325,3,7,False,[ 0.   -2.25  2.38],109,-1,326,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-326,3,8,False,[ 0.   -2.25  2.72],110,-1,327,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-327,3,9,False,[ 0.   -2.25  3.06],111,-1,328,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-328,3,10,False,[ 0.   -2.25  3.4 ],112,-1,329,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-329,3,11,False,[ 0.   -2.25  3.74],113,-1,330,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-330,3,12,False,[ 0.   -2.25  4.08],114,-1,331,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-331,3,13,False,[ 0.   -2.25  4.42],115,-1,332,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-332,3,14,False,[ 0.   -2.25  4.76],116,-1,333,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-333,3,15,False,[ 0.   -2.25  5.1 ],117,-1,334,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-334,3,16,False,[ 0.   -2.25  5.44],118,-1,335,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-335,3,17,False,[ 0.   -2.25  5.78],119,-1,336,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-336,3,18,False,[ 0.   -2.25  6.12],120,-1,337,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-337,3,19,False,[ 0.   -2.25  6.46],121,-1,338,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-338,3,20,False,[ 0.   -2.25  6.8 ],122,-1,364,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-339,3,21,False,[ 0.   -2.25  7.14],123,-1,340,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-340,3,22,False,[ 0.   -2.25  7.48],124,-1,341,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-341,3,23,False,[ 0.   -2.25  7.82],125,-1,342,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-342,3,24,False,[ 0.   -2.25  8.16],126,-1,343,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-343,3,25,False,[ 0.   -2.25  8.5 ],127,-1,344,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-344,3,26,False,[ 0.   -2.25  8.84],128,-1,345,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-345,3,27,False,[ 0.   -2.25  9.18],129,-1,346,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-346,3,28,False,[ 0.   -2.25  9.52],130,-1,347,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-347,3,29,False,[ 0.   -2.25  9.86],131,-1,348,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-348,3,30,False,[ 0.   -2.25 10.2 ],132,-1,349,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-349,3,31,False,[ 0.   -2.25 10.54],133,-1,350,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-350,3,32,False,[ 0.   -2.25 10.88],134,-1,351,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-351,3,33,False,[ 0.   -2.25 11.22],-1,-1,352,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-352,3,34,False,[ 0.   -2.25 11.56],-1,-1,-1,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-353,4,9,False,[ 1.94855738 -1.125       3.06      ],144,-1,-1,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-354,4,10,False,[ 1.94855738 -1.125       3.4       ],145,353,353,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-355,4,11,False,[ 1.94855738 -1.125       3.74      ],146,-1,354,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-356,4,12,False,[ 1.94855738 -1.125       4.08      ],147,-1,355,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-357,4,13,False,[ 1.94855738 -1.125       4.42      ],148,-1,356,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-358,4,14,False,[ 1.94855738 -1.125       4.76      ],149,-1,357,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-359,4,15,False,[ 1.94855738 -1.125       5.1       ],150,-1,358,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-360,4,16,False,[ 1.94855738 -1.125       5.44      ],151,-1,359,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-361,4,17,False,[ 1.94855738 -1.125       5.78      ],152,-1,360,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-362,4,18,False,[ 1.94855738 -1.125       6.12      ],153,-1,361,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-363,4,19,False,[ 1.94855738 -1.125       6.46      ],154,-1,362,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-364,4,20,False,[ 1.94855738 -1.125       6.8       ],155,-1,363,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-365,4,21,False,[ 1.94855738 -1.125       7.14      ],156,-1,339,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-366,4,22,False,[ 1.94855738 -1.125       7.48      ],157,-1,365,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-367,4,23,False,[ 1.94855738 -1.125       7.82      ],158,-1,366,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-368,4,24,False,[ 1.94855738 -1.125       8.16      ],159,-1,367,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-369,4,25,False,[ 1.94855738 -1.125       8.5       ],160,-1,368,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-370,4,26,False,[ 1.94855738 -1.125       8.84      ],161,-1,369,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-371,4,27,False,[ 1.94855738 -1.125       9.18      ],162,-1,370,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-372,4,28,False,[ 1.94855738 -1.125       9.52      ],163,-1,371,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-373,4,29,False,[ 1.94855738 -1.125       9.86      ],164,-1,372,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-374,4,30,False,[ 1.94855738 -1.125      10.2       ],165,-1,373,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-375,4,31,False,[ 1.94855738 -1.125      10.54      ],166,-1,374,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-376,4,32,False,[ 1.94855738 -1.125      10.88      ],167,-1,375,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-377,4,33,False,[ 1.94855738 -1.125      11.22      ],168,-1,376,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-378,4,34,False,[ 1.94855738 -1.125      11.56      ],169,-1,377,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-379,4,35,False,[ 1.94855738 -1.125      11.9       ],170,-1,378,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-380,4,36,False,[ 1.94855738 -1.125      12.24      ],171,-1,379,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-381,4,37,False,[ 1.94855738 -1.125      12.58      ],172,-1,380,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-382,4,38,False,[ 1.94855738 -1.125      12.92      ],173,-1,381,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-383,4,39,False,[ 1.94855738 -1.125      13.26      ],174,-1,382,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-384,5,9,False,[1.94855738 1.125      3.06      ],179,-1,385,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-385,5,10,False,[1.94855738 1.125      3.4       ],180,-1,386,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-386,5,11,False,[1.94855738 1.125      3.74      ],181,-1,387,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-387,5,12,False,[1.94855738 1.125      4.08      ],182,-1,388,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-388,5,13,False,[1.94855738 1.125      4.42      ],183,-1,389,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-389,5,14,False,[1.94855738 1.125      4.76      ],184,-1,390,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-390,5,15,False,[1.94855738 1.125      5.1       ],185,-1,391,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-391,5,16,False,[1.94855738 1.125      5.44      ],186,-1,392,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-392,5,17,False,[1.94855738 1.125      5.78      ],187,-1,393,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-393,5,18,False,[1.94855738 1.125      6.12      ],188,-1,394,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-394,5,19,False,[1.94855738 1.125      6.46      ],189,-1,395,-1,"[[-0.93087375  0.36534102  0.        ]
- [-0.36534102 -0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-395,5,20,False,[1.94855738 1.125      6.8       ],190,-1,396,-1,"[[-0.56332006  0.82623877  0.        ]
- [-0.82623877 -0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-396,5,21,False,[1.94855738 1.125      7.14      ],191,-1,397,-1,"[[-4.4408921e-16  1.0000000e+00  0.0000000e+00]
- [-1.0000000e+00 -4.4408921e-16  0.0000000e+00]
- [ 0.0000000e+00  0.0000000e+00  1.0000000e+00]]"
-397,5,22,False,[1.94855738 1.125      7.48      ],192,-1,398,-1,"[[ 0.56332006  0.82623877  0.        ]
- [-0.82623877  0.56332006  0.        ]
- [ 0.          0.          1.        ]]"
-398,5,23,False,[1.94855738 1.125      7.82      ],193,-1,399,-1,"[[ 0.93087375  0.36534102  0.        ]
- [-0.36534102  0.93087375  0.        ]
- [ 0.          0.          1.        ]]"
-399,5,24,False,[1.94855738 1.125      8.16      ],194,-1,400,-1,"[[ 0.97492791 -0.22252093  0.        ]
- [ 0.22252093  0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
-400,5,25,False,[1.94855738 1.125      8.5       ],195,-1,401,-1,"[[ 0.68017274 -0.73305187  0.        ]
- [ 0.73305187  0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-401,5,26,False,[1.94855738 1.125      8.84      ],196,-1,402,-1,"[[ 0.14904227 -0.98883083  0.        ]
- [ 0.98883083  0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-402,5,27,False,[1.94855738 1.125      9.18      ],197,-1,235,-1,"[[-0.43388374 -0.90096887  0.        ]
- [ 0.90096887 -0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-403,5,28,False,[1.94855738 1.125      9.52      ],198,-1,404,-1,"[[-0.8660254 -0.5        0.       ]
- [ 0.5       -0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-404,5,29,False,[1.94855738 1.125      9.86      ],199,-1,405,-1,"[[-0.9972038   0.07473009  0.        ]
- [-0.07473009 -0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-405,5,30,False,[ 1.94855738  1.125      10.2       ],200,-1,406,-1,"[[-0.78183148  0.6234898   0.        ]
- [-0.6234898  -0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-406,5,31,False,[ 1.94855738  1.125      10.54      ],201,-1,407,-1,"[[-0.29475517  0.95557281  0.        ]
- [-0.95557281 -0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-407,5,32,False,[ 1.94855738  1.125      10.88      ],202,-1,408,-1,"[[ 0.29475517  0.95557281  0.        ]
- [-0.95557281  0.29475517  0.        ]
- [ 0.          0.          1.        ]]"
-408,5,33,False,[ 1.94855738  1.125      11.22      ],203,-1,409,-1,"[[ 0.78183148  0.6234898   0.        ]
- [-0.6234898   0.78183148  0.        ]
- [ 0.          0.          1.        ]]"
-409,5,34,False,[ 1.94855738  1.125      11.56      ],204,-1,410,-1,"[[ 0.9972038   0.07473009  0.        ]
- [-0.07473009  0.9972038   0.        ]
- [ 0.          0.          1.        ]]"
-410,5,35,False,[ 1.94855738  1.125      11.9       ],205,-1,411,-1,"[[ 0.8660254 -0.5        0.       ]
- [ 0.5        0.8660254  0.       ]
- [ 0.         0.         1.       ]]"
-411,5,36,False,[ 1.94855738  1.125      12.24      ],206,-1,412,-1,"[[ 0.43388374 -0.90096887  0.        ]
- [ 0.90096887  0.43388374  0.        ]
- [ 0.          0.          1.        ]]"
-412,5,37,False,[ 1.94855738  1.125      12.58      ],-1,-1,413,-1,"[[-0.14904227 -0.98883083  0.        ]
- [ 0.98883083 -0.14904227  0.        ]
- [ 0.          0.          1.        ]]"
-413,5,38,False,[ 1.94855738  1.125      12.92      ],-1,-1,414,-1,"[[-0.68017274 -0.73305187  0.        ]
- [ 0.73305187 -0.68017274  0.        ]
- [ 0.          0.          1.        ]]"
-414,5,39,False,[ 1.94855738  1.125      13.26      ],-1,-1,-1,-1,"[[-0.97492791 -0.22252093  0.        ]
- [ 0.22252093 -0.97492791  0.        ]
- [ 0.          0.          1.        ]]"
diff --git a/mrdna/readers/test/1.json b/mrdna/readers/test/1.json
new file mode 100644
index 0000000..a628b8f
--- /dev/null
+++ b/mrdna/readers/test/1.json
@@ -0,0 +1 @@
+{"format":"3.1","date":"2024-08-09 00:08:58","name":"","parts":[{"name":"NaPart1","color":"#0066cc","is_visible":true,"active_phos":null,"crossover_span_angle":45,"max_vhelix_length":42,"neighbor_active_angle":"","grid_type":2,"virtual_helix_order":[0,1,2,3,4,5],"is_lattice":true,"virtual_helices":{"name":["vh0","vh1","vh2","vh3","vh4","vh5"],"is_visible":[true,true,true,true,true,true],"color":["#0066cc","#0066cc","#0066cc","#0066cc","#0066cc","#0066cc"],"eulerZ":[0.0,0.0,0.0,0.0,0.0,0.0],"neighbor_active_angle":[0.0,0.0,0.0,0.0,0.0,0.0],"neighbors":["[1, 5]","[0, 2]","[1, 3]","[2, 4]","[3, 5]","[0, 4]"],"bases_per_repeat":[21,21,21,21,21,21],"turns_per_repeat":[2,2,2,2,2,2],"repeat_hint":[2,2,2,2,2,2],"helical_pitch":[1.0,1.0,1.0,1.0,1.0,1.0],"minor_groove_angle":[180.0,180.0,180.0,180.0,180.0,180.0],"length":[42,42,42,42,42,42],"z":[0.0,0.0,0.0,0.0,0.0,0.0]},"origins":[[0.0,2.25,0.0],[-1.948557375,1.125,0.0],[-1.948557375,-1.125,0.0],[0.0,-2.25,0.0],[1.948557375,-1.125,0.0],[1.948557375,1.125,0.0]],"directions":[[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0]],"vh_list":[[0,42],[1,42],[2,42],[3,42],[4,42],[5,42]],"strands":{"indices":[[[[5,36]],[[5,30],[31,36]]],[[[1,30],[31,34]],[[1,15],[16,34]]],[[],[[1,16]]],[[[15,37]],[[15,37]]],[[[15,38]],[[18,23],[24,33]]],[[[14,23],[24,37]],[[15,30],[31,36]]]],"properties":[[["#0066cc"],["#0066cc","#0066cc"]],[["#0066cc","#0066cc"],["#0066cc","#0066cc"]],[[],["#0066cc"]],[["#0066cc"],["#0066cc"]],[["#0066cc"],["#0066cc","#0066cc"]],[["#0066cc","#0066cc"],["#0066cc","#0066cc"]]]},"insertions":[],"xovers":[[0,false,31,1,true,31],[1,true,30,0,false,30],[3,false,15,1,false,15],[4,true,38,5,false,36],[4,false,24,5,true,24],[5,true,23,4,false,23],[5,false,15,4,true,15]],"oligos":[{"id_num":0,"idx5p":36,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo7360","color":"#0066cc","length":10,"is_visible":true},{"id_num":1,"idx5p":1,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo6512","color":"#0066cc","length":56,"is_visible":true},{"id_num":3,"idx5p":15,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo8176","color":"#0066cc","length":23,"is_visible":true},{"id_num":1,"idx5p":34,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo8000","color":"#0066cc","length":19,"is_visible":true},{"id_num":2,"idx5p":16,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo5072","color":"#0066cc","length":16,"is_visible":true},{"id_num":3,"idx5p":37,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo5456","color":"#0066cc","length":38,"is_visible":true},{"id_num":0,"idx5p":5,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo0016","color":"#0066cc","length":32,"is_visible":true},{"id_num":5,"idx5p":14,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo5344","color":"#0066cc","length":16,"is_visible":true},{"id_num":5,"idx5p":30,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo4128","color":"#0066cc","length":46,"is_visible":true},{"id_num":4,"idx5p":33,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo1344","color":"#0066cc","length":24,"is_visible":true}],"instance_properties":[{"slice:position":[0.0,0.0],"grid:position":[0.0,0.0],"path:position":[0.0,0.0]}],"uuid":"0f339308432240cb80de80d28db856f3"}],"modifications":{}}
\ No newline at end of file
diff --git a/mrdna/readers/test/ipykernel_launcher.json b/mrdna/readers/test/ipykernel_launcher.json
new file mode 100644
index 0000000..3320ac3
--- /dev/null
+++ b/mrdna/readers/test/ipykernel_launcher.json
@@ -0,0 +1,3687 @@
+{
+  "name": "./ipykernel_launcher.json",
+  "vstrands": [
+    {
+      "num": 0,
+      "row": 12,
+      "col": 16,
+      "scaf": [
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          1,
+          5,
+          0,
+          6
+        ],
+        [
+          0,
+          5,
+          0,
+          7
+        ],
+        [
+          0,
+          6,
+          0,
+          8
+        ],
+        [
+          0,
+          7,
+          0,
+          9
+        ],
+        [
+          0,
+          8,
+          0,
+          10
+        ],
+        [
+          0,
+          9,
+          0,
+          11
+        ],
+        [
+          0,
+          10,
+          0,
+          12
+        ],
+        [
+          0,
+          11,
+          0,
+          13
+        ],
+        [
+          0,
+          12,
+          0,
+          14
+        ],
+        [
+          0,
+          13,
+          0,
+          15
+        ],
+        [
+          0,
+          14,
+          0,
+          16
+        ],
+        [
+          0,
+          15,
+          0,
+          17
+        ],
+        [
+          0,
+          16,
+          0,
+          18
+        ],
+        [
+          0,
+          17,
+          0,
+          19
+        ],
+        [
+          0,
+          18,
+          0,
+          20
+        ],
+        [
+          0,
+          19,
+          0,
+          21
+        ],
+        [
+          0,
+          20,
+          0,
+          22
+        ],
+        [
+          0,
+          21,
+          0,
+          23
+        ],
+        [
+          0,
+          22,
+          0,
+          24
+        ],
+        [
+          0,
+          23,
+          0,
+          25
+        ],
+        [
+          0,
+          24,
+          0,
+          26
+        ],
+        [
+          0,
+          25,
+          0,
+          27
+        ],
+        [
+          0,
+          26,
+          0,
+          28
+        ],
+        [
+          0,
+          27,
+          0,
+          29
+        ],
+        [
+          0,
+          28,
+          0,
+          30
+        ],
+        [
+          0,
+          29,
+          0,
+          31
+        ],
+        [
+          0,
+          30,
+          0,
+          32
+        ],
+        [
+          0,
+          31,
+          0,
+          33
+        ],
+        [
+          0,
+          32,
+          0,
+          34
+        ],
+        [
+          0,
+          33,
+          0,
+          35
+        ],
+        [
+          0,
+          34,
+          0,
+          36
+        ],
+        [
+          0,
+          35,
+          1,
+          36
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          0,
+          40
+        ],
+        [
+          0,
+          39,
+          0,
+          41
+        ],
+        [
+          0,
+          40,
+          -1,
+          -1
+        ]
+      ],
+      "stap": [
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          0,
+          3,
+          -1,
+          -1
+        ],
+        [
+          0,
+          4,
+          0,
+          2
+        ],
+        [
+          0,
+          5,
+          0,
+          3
+        ],
+        [
+          0,
+          6,
+          0,
+          4
+        ],
+        [
+          0,
+          7,
+          0,
+          5
+        ],
+        [
+          0,
+          8,
+          0,
+          6
+        ],
+        [
+          0,
+          9,
+          0,
+          7
+        ],
+        [
+          0,
+          10,
+          0,
+          8
+        ],
+        [
+          0,
+          11,
+          0,
+          9
+        ],
+        [
+          0,
+          12,
+          0,
+          10
+        ],
+        [
+          0,
+          13,
+          0,
+          11
+        ],
+        [
+          0,
+          14,
+          0,
+          12
+        ],
+        [
+          0,
+          15,
+          0,
+          13
+        ],
+        [
+          0,
+          16,
+          0,
+          14
+        ],
+        [
+          0,
+          17,
+          0,
+          15
+        ],
+        [
+          0,
+          18,
+          0,
+          16
+        ],
+        [
+          0,
+          19,
+          0,
+          17
+        ],
+        [
+          0,
+          20,
+          0,
+          18
+        ],
+        [
+          1,
+          20,
+          0,
+          19
+        ],
+        [
+          0,
+          22,
+          1,
+          21
+        ],
+        [
+          0,
+          23,
+          0,
+          21
+        ],
+        [
+          -1,
+          -1,
+          0,
+          22
+        ],
+        [
+          0,
+          25,
+          -1,
+          -1
+        ],
+        [
+          0,
+          26,
+          0,
+          24
+        ],
+        [
+          0,
+          27,
+          0,
+          25
+        ],
+        [
+          5,
+          27,
+          0,
+          26
+        ],
+        [
+          0,
+          29,
+          5,
+          28
+        ],
+        [
+          0,
+          30,
+          0,
+          28
+        ],
+        [
+          0,
+          31,
+          0,
+          29
+        ],
+        [
+          0,
+          32,
+          0,
+          30
+        ],
+        [
+          0,
+          33,
+          0,
+          31
+        ],
+        [
+          0,
+          34,
+          0,
+          32
+        ],
+        [
+          0,
+          35,
+          0,
+          33
+        ],
+        [
+          0,
+          36,
+          0,
+          34
+        ],
+        [
+          0,
+          37,
+          0,
+          35
+        ],
+        [
+          0,
+          38,
+          0,
+          36
+        ],
+        [
+          -1,
+          -1,
+          0,
+          37
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ]
+      ],
+      "loop": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "skip": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "stap_colors": [
+        [
+          20,
+          13369344
+        ],
+        [
+          23,
+          12060012
+        ],
+        [
+          27,
+          16204552
+        ],
+        [
+          38,
+          1507550
+        ]
+      ],
+      "scafLoop": [],
+      "stapLoop": []
+    },
+    {
+      "num": 1,
+      "row": 12,
+      "col": 15,
+      "scaf": [
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          1,
+          6,
+          0,
+          5
+        ],
+        [
+          1,
+          7,
+          1,
+          5
+        ],
+        [
+          1,
+          8,
+          1,
+          6
+        ],
+        [
+          1,
+          9,
+          1,
+          7
+        ],
+        [
+          1,
+          10,
+          1,
+          8
+        ],
+        [
+          1,
+          11,
+          1,
+          9
+        ],
+        [
+          1,
+          12,
+          1,
+          10
+        ],
+        [
+          1,
+          13,
+          1,
+          11
+        ],
+        [
+          1,
+          14,
+          1,
+          12
+        ],
+        [
+          1,
+          15,
+          1,
+          13
+        ],
+        [
+          1,
+          16,
+          1,
+          14
+        ],
+        [
+          1,
+          17,
+          1,
+          15
+        ],
+        [
+          1,
+          18,
+          1,
+          16
+        ],
+        [
+          2,
+          18,
+          1,
+          17
+        ],
+        [
+          1,
+          20,
+          2,
+          19
+        ],
+        [
+          1,
+          21,
+          1,
+          19
+        ],
+        [
+          1,
+          22,
+          1,
+          20
+        ],
+        [
+          1,
+          23,
+          1,
+          21
+        ],
+        [
+          1,
+          24,
+          1,
+          22
+        ],
+        [
+          1,
+          25,
+          1,
+          23
+        ],
+        [
+          1,
+          26,
+          1,
+          24
+        ],
+        [
+          1,
+          27,
+          1,
+          25
+        ],
+        [
+          1,
+          28,
+          1,
+          26
+        ],
+        [
+          1,
+          29,
+          1,
+          27
+        ],
+        [
+          1,
+          30,
+          1,
+          28
+        ],
+        [
+          1,
+          31,
+          1,
+          29
+        ],
+        [
+          1,
+          32,
+          1,
+          30
+        ],
+        [
+          1,
+          33,
+          1,
+          31
+        ],
+        [
+          1,
+          34,
+          1,
+          32
+        ],
+        [
+          1,
+          35,
+          1,
+          33
+        ],
+        [
+          1,
+          36,
+          1,
+          34
+        ],
+        [
+          0,
+          36,
+          1,
+          35
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          1,
+          40,
+          -1,
+          -1
+        ],
+        [
+          1,
+          41,
+          1,
+          39
+        ],
+        [
+          -1,
+          -1,
+          1,
+          40
+        ]
+      ],
+      "stap": [
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          1,
+          4
+        ],
+        [
+          1,
+          3,
+          1,
+          5
+        ],
+        [
+          1,
+          4,
+          1,
+          6
+        ],
+        [
+          1,
+          5,
+          1,
+          7
+        ],
+        [
+          1,
+          6,
+          1,
+          8
+        ],
+        [
+          1,
+          7,
+          1,
+          9
+        ],
+        [
+          1,
+          8,
+          1,
+          10
+        ],
+        [
+          1,
+          9,
+          1,
+          11
+        ],
+        [
+          1,
+          10,
+          1,
+          12
+        ],
+        [
+          1,
+          11,
+          1,
+          13
+        ],
+        [
+          1,
+          12,
+          1,
+          14
+        ],
+        [
+          1,
+          13,
+          1,
+          15
+        ],
+        [
+          1,
+          14,
+          1,
+          16
+        ],
+        [
+          1,
+          15,
+          1,
+          17
+        ],
+        [
+          1,
+          16,
+          1,
+          18
+        ],
+        [
+          1,
+          17,
+          1,
+          19
+        ],
+        [
+          1,
+          18,
+          1,
+          20
+        ],
+        [
+          1,
+          19,
+          0,
+          20
+        ],
+        [
+          0,
+          21,
+          1,
+          22
+        ],
+        [
+          1,
+          21,
+          1,
+          23
+        ],
+        [
+          1,
+          22,
+          1,
+          24
+        ],
+        [
+          1,
+          23,
+          1,
+          25
+        ],
+        [
+          1,
+          24,
+          1,
+          26
+        ],
+        [
+          1,
+          25,
+          1,
+          27
+        ],
+        [
+          1,
+          26,
+          1,
+          28
+        ],
+        [
+          1,
+          27,
+          1,
+          29
+        ],
+        [
+          1,
+          28,
+          1,
+          30
+        ],
+        [
+          1,
+          29,
+          1,
+          31
+        ],
+        [
+          1,
+          30,
+          1,
+          32
+        ],
+        [
+          1,
+          31,
+          1,
+          33
+        ],
+        [
+          1,
+          32,
+          1,
+          34
+        ],
+        [
+          1,
+          33,
+          1,
+          35
+        ],
+        [
+          1,
+          34,
+          1,
+          36
+        ],
+        [
+          1,
+          35,
+          1,
+          37
+        ],
+        [
+          1,
+          36,
+          1,
+          38
+        ],
+        [
+          1,
+          37,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ]
+      ],
+      "loop": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "skip": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "stap_colors": [
+        [
+          3,
+          13369344
+        ],
+        [
+          21,
+          12060012
+        ]
+      ],
+      "scafLoop": [],
+      "stapLoop": []
+    },
+    {
+      "num": 2,
+      "row": 13,
+      "col": 15,
+      "scaf": [
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          3,
+          2,
+          2,
+          3
+        ],
+        [
+          2,
+          2,
+          2,
+          4
+        ],
+        [
+          2,
+          3,
+          2,
+          5
+        ],
+        [
+          2,
+          4,
+          2,
+          6
+        ],
+        [
+          2,
+          5,
+          2,
+          7
+        ],
+        [
+          2,
+          6,
+          2,
+          8
+        ],
+        [
+          2,
+          7,
+          2,
+          9
+        ],
+        [
+          2,
+          8,
+          2,
+          10
+        ],
+        [
+          2,
+          9,
+          2,
+          11
+        ],
+        [
+          2,
+          10,
+          2,
+          12
+        ],
+        [
+          2,
+          11,
+          2,
+          13
+        ],
+        [
+          2,
+          12,
+          2,
+          14
+        ],
+        [
+          2,
+          13,
+          2,
+          15
+        ],
+        [
+          2,
+          14,
+          2,
+          16
+        ],
+        [
+          2,
+          15,
+          2,
+          17
+        ],
+        [
+          2,
+          16,
+          2,
+          18
+        ],
+        [
+          2,
+          17,
+          1,
+          18
+        ],
+        [
+          1,
+          19,
+          2,
+          20
+        ],
+        [
+          2,
+          19,
+          2,
+          21
+        ],
+        [
+          2,
+          20,
+          2,
+          22
+        ],
+        [
+          2,
+          21,
+          2,
+          23
+        ],
+        [
+          2,
+          22,
+          2,
+          24
+        ],
+        [
+          2,
+          23,
+          2,
+          25
+        ],
+        [
+          2,
+          24,
+          2,
+          26
+        ],
+        [
+          2,
+          25,
+          2,
+          27
+        ],
+        [
+          2,
+          26,
+          2,
+          28
+        ],
+        [
+          2,
+          27,
+          2,
+          29
+        ],
+        [
+          2,
+          28,
+          2,
+          30
+        ],
+        [
+          2,
+          29,
+          2,
+          31
+        ],
+        [
+          2,
+          30,
+          2,
+          32
+        ],
+        [
+          2,
+          31,
+          3,
+          32
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          2,
+          40
+        ],
+        [
+          2,
+          39,
+          2,
+          41
+        ],
+        [
+          2,
+          40,
+          -1,
+          -1
+        ]
+      ],
+      "stap": [
+        [
+          2,
+          1,
+          -1,
+          -1
+        ],
+        [
+          2,
+          2,
+          2,
+          0
+        ],
+        [
+          2,
+          3,
+          2,
+          1
+        ],
+        [
+          2,
+          4,
+          2,
+          2
+        ],
+        [
+          2,
+          5,
+          2,
+          3
+        ],
+        [
+          2,
+          6,
+          2,
+          4
+        ],
+        [
+          2,
+          7,
+          2,
+          5
+        ],
+        [
+          2,
+          8,
+          2,
+          6
+        ],
+        [
+          2,
+          9,
+          2,
+          7
+        ],
+        [
+          2,
+          10,
+          2,
+          8
+        ],
+        [
+          2,
+          11,
+          2,
+          9
+        ],
+        [
+          2,
+          12,
+          2,
+          10
+        ],
+        [
+          2,
+          13,
+          2,
+          11
+        ],
+        [
+          2,
+          14,
+          2,
+          12
+        ],
+        [
+          2,
+          15,
+          2,
+          13
+        ],
+        [
+          2,
+          16,
+          2,
+          14
+        ],
+        [
+          2,
+          17,
+          2,
+          15
+        ],
+        [
+          2,
+          18,
+          2,
+          16
+        ],
+        [
+          2,
+          19,
+          2,
+          17
+        ],
+        [
+          2,
+          20,
+          2,
+          18
+        ],
+        [
+          2,
+          21,
+          2,
+          19
+        ],
+        [
+          2,
+          22,
+          2,
+          20
+        ],
+        [
+          2,
+          23,
+          2,
+          21
+        ],
+        [
+          2,
+          24,
+          2,
+          22
+        ],
+        [
+          2,
+          25,
+          2,
+          23
+        ],
+        [
+          2,
+          26,
+          2,
+          24
+        ],
+        [
+          2,
+          27,
+          2,
+          25
+        ],
+        [
+          2,
+          28,
+          2,
+          26
+        ],
+        [
+          2,
+          29,
+          2,
+          27
+        ],
+        [
+          2,
+          30,
+          2,
+          28
+        ],
+        [
+          2,
+          31,
+          2,
+          29
+        ],
+        [
+          2,
+          32,
+          2,
+          30
+        ],
+        [
+          2,
+          33,
+          2,
+          31
+        ],
+        [
+          2,
+          34,
+          2,
+          32
+        ],
+        [
+          -1,
+          -1,
+          2,
+          33
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ]
+      ],
+      "loop": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "skip": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "stap_colors": [
+        [
+          34,
+          8947848
+        ]
+      ],
+      "scafLoop": [],
+      "stapLoop": []
+    },
+    {
+      "num": 3,
+      "row": 13,
+      "col": 16,
+      "scaf": [
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          3,
+          3,
+          2,
+          2
+        ],
+        [
+          3,
+          4,
+          3,
+          2
+        ],
+        [
+          3,
+          5,
+          3,
+          3
+        ],
+        [
+          3,
+          6,
+          3,
+          4
+        ],
+        [
+          3,
+          7,
+          3,
+          5
+        ],
+        [
+          3,
+          8,
+          3,
+          6
+        ],
+        [
+          3,
+          9,
+          3,
+          7
+        ],
+        [
+          3,
+          10,
+          3,
+          8
+        ],
+        [
+          3,
+          11,
+          3,
+          9
+        ],
+        [
+          3,
+          12,
+          3,
+          10
+        ],
+        [
+          3,
+          13,
+          3,
+          11
+        ],
+        [
+          3,
+          14,
+          3,
+          12
+        ],
+        [
+          3,
+          15,
+          3,
+          13
+        ],
+        [
+          4,
+          15,
+          3,
+          14
+        ],
+        [
+          3,
+          17,
+          4,
+          16
+        ],
+        [
+          3,
+          18,
+          3,
+          16
+        ],
+        [
+          3,
+          19,
+          3,
+          17
+        ],
+        [
+          3,
+          20,
+          3,
+          18
+        ],
+        [
+          3,
+          21,
+          3,
+          19
+        ],
+        [
+          3,
+          22,
+          3,
+          20
+        ],
+        [
+          3,
+          23,
+          3,
+          21
+        ],
+        [
+          3,
+          24,
+          3,
+          22
+        ],
+        [
+          3,
+          25,
+          3,
+          23
+        ],
+        [
+          3,
+          26,
+          3,
+          24
+        ],
+        [
+          3,
+          27,
+          3,
+          25
+        ],
+        [
+          3,
+          28,
+          3,
+          26
+        ],
+        [
+          3,
+          29,
+          3,
+          27
+        ],
+        [
+          3,
+          30,
+          3,
+          28
+        ],
+        [
+          3,
+          31,
+          3,
+          29
+        ],
+        [
+          3,
+          32,
+          3,
+          30
+        ],
+        [
+          2,
+          32,
+          3,
+          31
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          3,
+          38,
+          -1,
+          -1
+        ],
+        [
+          3,
+          39,
+          3,
+          37
+        ],
+        [
+          3,
+          40,
+          3,
+          38
+        ],
+        [
+          3,
+          41,
+          3,
+          39
+        ],
+        [
+          -1,
+          -1,
+          3,
+          40
+        ]
+      ],
+      "stap": [
+        [
+          -1,
+          -1,
+          3,
+          1
+        ],
+        [
+          3,
+          0,
+          3,
+          2
+        ],
+        [
+          3,
+          1,
+          3,
+          3
+        ],
+        [
+          3,
+          2,
+          3,
+          4
+        ],
+        [
+          3,
+          3,
+          3,
+          5
+        ],
+        [
+          3,
+          4,
+          3,
+          6
+        ],
+        [
+          3,
+          5,
+          3,
+          7
+        ],
+        [
+          3,
+          6,
+          3,
+          8
+        ],
+        [
+          3,
+          7,
+          3,
+          9
+        ],
+        [
+          3,
+          8,
+          3,
+          10
+        ],
+        [
+          3,
+          9,
+          3,
+          11
+        ],
+        [
+          3,
+          10,
+          3,
+          12
+        ],
+        [
+          3,
+          11,
+          3,
+          13
+        ],
+        [
+          3,
+          12,
+          3,
+          14
+        ],
+        [
+          3,
+          13,
+          3,
+          15
+        ],
+        [
+          3,
+          14,
+          3,
+          16
+        ],
+        [
+          3,
+          15,
+          3,
+          17
+        ],
+        [
+          3,
+          16,
+          3,
+          18
+        ],
+        [
+          3,
+          17,
+          3,
+          19
+        ],
+        [
+          3,
+          18,
+          3,
+          20
+        ],
+        [
+          3,
+          19,
+          4,
+          20
+        ],
+        [
+          4,
+          21,
+          3,
+          22
+        ],
+        [
+          3,
+          21,
+          3,
+          23
+        ],
+        [
+          3,
+          22,
+          3,
+          24
+        ],
+        [
+          3,
+          23,
+          3,
+          25
+        ],
+        [
+          3,
+          24,
+          3,
+          26
+        ],
+        [
+          3,
+          25,
+          3,
+          27
+        ],
+        [
+          3,
+          26,
+          3,
+          28
+        ],
+        [
+          3,
+          27,
+          3,
+          29
+        ],
+        [
+          3,
+          28,
+          3,
+          30
+        ],
+        [
+          3,
+          29,
+          3,
+          31
+        ],
+        [
+          3,
+          30,
+          3,
+          32
+        ],
+        [
+          3,
+          31,
+          3,
+          33
+        ],
+        [
+          3,
+          32,
+          3,
+          34
+        ],
+        [
+          3,
+          33,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ]
+      ],
+      "loop": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "skip": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "stap_colors": [
+        [
+          0,
+          13369344
+        ],
+        [
+          21,
+          8947848
+        ]
+      ],
+      "scafLoop": [],
+      "stapLoop": []
+    },
+    {
+      "num": 4,
+      "row": 13,
+      "col": 17,
+      "scaf": [
+        [
+          -1,
+          -1,
+          4,
+          1
+        ],
+        [
+          4,
+          0,
+          4,
+          2
+        ],
+        [
+          4,
+          1,
+          4,
+          3
+        ],
+        [
+          4,
+          2,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          5,
+          9,
+          4,
+          10
+        ],
+        [
+          4,
+          9,
+          4,
+          11
+        ],
+        [
+          4,
+          10,
+          4,
+          12
+        ],
+        [
+          4,
+          11,
+          4,
+          13
+        ],
+        [
+          4,
+          12,
+          4,
+          14
+        ],
+        [
+          4,
+          13,
+          4,
+          15
+        ],
+        [
+          4,
+          14,
+          3,
+          15
+        ],
+        [
+          3,
+          16,
+          4,
+          17
+        ],
+        [
+          4,
+          16,
+          4,
+          18
+        ],
+        [
+          4,
+          17,
+          4,
+          19
+        ],
+        [
+          4,
+          18,
+          4,
+          20
+        ],
+        [
+          4,
+          19,
+          4,
+          21
+        ],
+        [
+          4,
+          20,
+          4,
+          22
+        ],
+        [
+          4,
+          21,
+          4,
+          23
+        ],
+        [
+          4,
+          22,
+          4,
+          24
+        ],
+        [
+          4,
+          23,
+          4,
+          25
+        ],
+        [
+          4,
+          24,
+          4,
+          26
+        ],
+        [
+          4,
+          25,
+          4,
+          27
+        ],
+        [
+          4,
+          26,
+          4,
+          28
+        ],
+        [
+          4,
+          27,
+          4,
+          29
+        ],
+        [
+          4,
+          28,
+          4,
+          30
+        ],
+        [
+          4,
+          29,
+          4,
+          31
+        ],
+        [
+          4,
+          30,
+          4,
+          32
+        ],
+        [
+          4,
+          31,
+          4,
+          33
+        ],
+        [
+          4,
+          32,
+          4,
+          34
+        ],
+        [
+          4,
+          33,
+          4,
+          35
+        ],
+        [
+          4,
+          34,
+          4,
+          36
+        ],
+        [
+          4,
+          35,
+          4,
+          37
+        ],
+        [
+          4,
+          36,
+          4,
+          38
+        ],
+        [
+          4,
+          37,
+          4,
+          39
+        ],
+        [
+          4,
+          38,
+          5,
+          39
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ]
+      ],
+      "stap": [
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          4,
+          10,
+          -1,
+          -1
+        ],
+        [
+          4,
+          11,
+          4,
+          9
+        ],
+        [
+          4,
+          12,
+          4,
+          10
+        ],
+        [
+          4,
+          13,
+          4,
+          11
+        ],
+        [
+          4,
+          14,
+          4,
+          12
+        ],
+        [
+          4,
+          15,
+          4,
+          13
+        ],
+        [
+          4,
+          16,
+          4,
+          14
+        ],
+        [
+          4,
+          17,
+          4,
+          15
+        ],
+        [
+          4,
+          18,
+          4,
+          16
+        ],
+        [
+          4,
+          19,
+          4,
+          17
+        ],
+        [
+          4,
+          20,
+          4,
+          18
+        ],
+        [
+          3,
+          20,
+          4,
+          19
+        ],
+        [
+          4,
+          22,
+          3,
+          21
+        ],
+        [
+          4,
+          23,
+          4,
+          21
+        ],
+        [
+          4,
+          24,
+          4,
+          22
+        ],
+        [
+          4,
+          25,
+          4,
+          23
+        ],
+        [
+          4,
+          26,
+          4,
+          24
+        ],
+        [
+          4,
+          27,
+          4,
+          25
+        ],
+        [
+          4,
+          28,
+          4,
+          26
+        ],
+        [
+          4,
+          29,
+          4,
+          27
+        ],
+        [
+          4,
+          30,
+          4,
+          28
+        ],
+        [
+          4,
+          31,
+          4,
+          29
+        ],
+        [
+          4,
+          32,
+          4,
+          30
+        ],
+        [
+          4,
+          33,
+          4,
+          31
+        ],
+        [
+          4,
+          34,
+          4,
+          32
+        ],
+        [
+          4,
+          35,
+          4,
+          33
+        ],
+        [
+          4,
+          36,
+          4,
+          34
+        ],
+        [
+          4,
+          37,
+          4,
+          35
+        ],
+        [
+          4,
+          38,
+          4,
+          36
+        ],
+        [
+          4,
+          39,
+          4,
+          37
+        ],
+        [
+          -1,
+          -1,
+          4,
+          38
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ]
+      ],
+      "loop": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "skip": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "stap_colors": [
+        [
+          20,
+          13369344
+        ],
+        [
+          39,
+          8947848
+        ]
+      ],
+      "scafLoop": [],
+      "stapLoop": []
+    },
+    {
+      "num": 5,
+      "row": 12,
+      "col": 17,
+      "scaf": [
+        [
+          5,
+          1,
+          -1,
+          -1
+        ],
+        [
+          5,
+          2,
+          5,
+          0
+        ],
+        [
+          5,
+          3,
+          5,
+          1
+        ],
+        [
+          -1,
+          -1,
+          5,
+          2
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          5,
+          10,
+          4,
+          9
+        ],
+        [
+          5,
+          11,
+          5,
+          9
+        ],
+        [
+          5,
+          12,
+          5,
+          10
+        ],
+        [
+          5,
+          13,
+          5,
+          11
+        ],
+        [
+          5,
+          14,
+          5,
+          12
+        ],
+        [
+          5,
+          15,
+          5,
+          13
+        ],
+        [
+          5,
+          16,
+          5,
+          14
+        ],
+        [
+          5,
+          17,
+          5,
+          15
+        ],
+        [
+          5,
+          18,
+          5,
+          16
+        ],
+        [
+          5,
+          19,
+          5,
+          17
+        ],
+        [
+          5,
+          20,
+          5,
+          18
+        ],
+        [
+          5,
+          21,
+          5,
+          19
+        ],
+        [
+          5,
+          22,
+          5,
+          20
+        ],
+        [
+          -1,
+          -1,
+          5,
+          21
+        ],
+        [
+          5,
+          24,
+          -1,
+          -1
+        ],
+        [
+          5,
+          25,
+          5,
+          23
+        ],
+        [
+          5,
+          26,
+          5,
+          24
+        ],
+        [
+          5,
+          27,
+          5,
+          25
+        ],
+        [
+          5,
+          28,
+          5,
+          26
+        ],
+        [
+          5,
+          29,
+          5,
+          27
+        ],
+        [
+          5,
+          30,
+          5,
+          28
+        ],
+        [
+          5,
+          31,
+          5,
+          29
+        ],
+        [
+          5,
+          32,
+          5,
+          30
+        ],
+        [
+          5,
+          33,
+          5,
+          31
+        ],
+        [
+          5,
+          34,
+          5,
+          32
+        ],
+        [
+          5,
+          35,
+          5,
+          33
+        ],
+        [
+          5,
+          36,
+          5,
+          34
+        ],
+        [
+          5,
+          37,
+          5,
+          35
+        ],
+        [
+          5,
+          38,
+          5,
+          36
+        ],
+        [
+          5,
+          39,
+          5,
+          37
+        ],
+        [
+          4,
+          39,
+          5,
+          38
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ]
+      ],
+      "stap": [
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          5,
+          10
+        ],
+        [
+          5,
+          9,
+          5,
+          11
+        ],
+        [
+          5,
+          10,
+          5,
+          12
+        ],
+        [
+          5,
+          11,
+          5,
+          13
+        ],
+        [
+          5,
+          12,
+          5,
+          14
+        ],
+        [
+          5,
+          13,
+          5,
+          15
+        ],
+        [
+          5,
+          14,
+          5,
+          16
+        ],
+        [
+          5,
+          15,
+          5,
+          17
+        ],
+        [
+          5,
+          16,
+          5,
+          18
+        ],
+        [
+          5,
+          17,
+          5,
+          19
+        ],
+        [
+          5,
+          18,
+          5,
+          20
+        ],
+        [
+          5,
+          19,
+          5,
+          21
+        ],
+        [
+          5,
+          20,
+          5,
+          22
+        ],
+        [
+          5,
+          21,
+          5,
+          23
+        ],
+        [
+          5,
+          22,
+          5,
+          24
+        ],
+        [
+          5,
+          23,
+          5,
+          25
+        ],
+        [
+          5,
+          24,
+          5,
+          26
+        ],
+        [
+          5,
+          25,
+          5,
+          27
+        ],
+        [
+          5,
+          26,
+          0,
+          27
+        ],
+        [
+          0,
+          28,
+          5,
+          29
+        ],
+        [
+          5,
+          28,
+          5,
+          30
+        ],
+        [
+          5,
+          29,
+          5,
+          31
+        ],
+        [
+          5,
+          30,
+          5,
+          32
+        ],
+        [
+          5,
+          31,
+          5,
+          33
+        ],
+        [
+          5,
+          32,
+          5,
+          34
+        ],
+        [
+          5,
+          33,
+          5,
+          35
+        ],
+        [
+          5,
+          34,
+          5,
+          36
+        ],
+        [
+          5,
+          35,
+          5,
+          37
+        ],
+        [
+          5,
+          36,
+          5,
+          38
+        ],
+        [
+          5,
+          37,
+          5,
+          39
+        ],
+        [
+          5,
+          38,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ],
+        [
+          -1,
+          -1,
+          -1,
+          -1
+        ]
+      ],
+      "loop": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "skip": [
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0
+      ],
+      "stap_colors": [
+        [
+          9,
+          16204552
+        ],
+        [
+          28,
+          1507550
+        ]
+      ],
+      "scafLoop": [],
+      "stapLoop": []
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mrdna/readers/test/loopout.sc b/mrdna/readers/test/loopout.sc
new file mode 100644
index 0000000..d80ea88
--- /dev/null
+++ b/mrdna/readers/test/loopout.sc
@@ -0,0 +1,45 @@
+{
+  "version": "0.19.3",
+  "grid": "square",
+  "helices": [
+    {"grid_position": [0, 0], "max_offset": 48},
+    {"grid_position": [0, 1], "max_offset": 48}
+  ],
+  "modifications_5p_in_design": {
+    "/5Biosg/": {
+      "display_text": "B",
+      "vendor_code": "/5Biosg/",
+      "location": "5'"
+    }
+  },
+  "strands": [
+    {
+      "color": "#0066cc",
+      "sequence": "AACGTAACGTAACGTAACGTAACGTAACGTAACGTAACGTAACGTAACGTAACGTAACGTAACGTAACG",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 1, "forward": false, "start": 8, "end": 24, "deletions": [20]},
+        {"helix": 0, "forward": true, "start": 8, "end": 40, "insertions": [[14, 1], [26, 2]]},
+        {"loopout": 3},
+        {"helix": 1, "forward": false, "start": 24, "end": 40}
+      ]
+    },
+    {
+      "color": "#f74308",
+      "sequence": "ACGTTACGTTACGTTTTACGTTACGTTACGTT",
+      "domains": [
+        {"helix": 1, "forward": true, "start": 8, "end": 24, "deletions": [20]},
+        {"helix": 0, "forward": false, "start": 8, "end": 24, "insertions": [[14, 1]]}
+      ]
+    },
+    {
+      "color": "#57bb00",
+      "sequence": "ACGTTACGTTACGTTACGCGTTACGTTACGTTAC",
+      "domains": [
+        {"helix": 0, "forward": false, "start": 24, "end": 40, "insertions": [[26, 2]]},
+        {"helix": 1, "forward": true, "start": 24, "end": 40}
+      ],
+      "5prime_modification": "/5Biosg/"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mrdna/readers/test/s.csv b/mrdna/readers/test/s.csv
new file mode 100644
index 0000000..4bab8e1
--- /dev/null
+++ b/mrdna/readers/test/s.csv
@@ -0,0 +1,416 @@
+,0,vh,zid,fwd,stack_tuple,threeprime_tuple,x,y,z,r,seq,stack,threeprime,bp,orientation
+0,0,0,5,True,"(0, '6', True)","(0, '6', True)",0.0,22.5,17.0,[ 0.  22.5 17. ],-1,1,1,38,81.42857142857142
+1,1,0,6,True,"(0, '7', True)","(0, '7', True)",0.0,22.5,20.4,[ 0.  22.5 20.4],-1,2,2,39,115.71428571428572
+2,2,0,7,True,"(0, '8', True)","(0, '8', True)",0.0,22.5,23.8,[ 0.  22.5 23.8],-1,3,3,40,150.0
+3,3,0,8,True,"(0, '9', True)","(0, '9', True)",0.0,22.5,27.2,[ 0.  22.5 27.2],-1,4,4,41,184.28571428571428
+4,4,0,9,True,"(0, '10', True)","(0, '10', True)",0.0,22.5,30.599999999999998,[ 0.  22.5 30.6],-1,5,5,42,218.57142857142856
+5,5,0,10,True,"(0, '11', True)","(0, '11', True)",0.0,22.5,34.0,[ 0.  22.5 34. ],-1,6,6,43,252.85714285714283
+6,6,0,11,True,"(0, '12', True)","(0, '12', True)",0.0,22.5,37.4,[ 0.  22.5 37.4],-1,7,7,44,287.1428571428571
+7,7,0,12,True,"(0, '13', True)","(0, '13', True)",0.0,22.5,40.8,[ 0.  22.5 40.8],-1,8,8,45,321.42857142857144
+8,8,0,13,True,"(0, '14', True)","(0, '14', True)",0.0,22.5,44.199999999999996,[ 0.  22.5 44.2],-1,9,9,46,355.7142857142857
+9,9,0,14,True,"(0, '15', True)","(0, '15', True)",0.0,22.5,47.6,[ 0.  22.5 47.6],-1,10,10,47,390.0
+10,10,0,15,True,"(0, '16', True)","(0, '16', True)",0.0,22.5,51.0,[ 0.  22.5 51. ],-1,11,11,48,424.2857142857142
+11,11,0,16,True,"(0, '17', True)","(0, '17', True)",0.0,22.5,54.4,[ 0.  22.5 54.4],-1,12,12,49,458.57142857142856
+12,12,0,17,True,"(0, '18', True)","(0, '18', True)",0.0,22.5,57.8,[ 0.  22.5 57.8],-1,13,13,50,492.8571428571429
+13,13,0,18,True,"(0, '19', True)","(0, '19', True)",0.0,22.5,61.199999999999996,[ 0.  22.5 61.2],-1,14,14,51,527.1428571428571
+14,14,0,19,True,"(0, '20', True)","(0, '20', True)",0.0,22.5,64.6,[ 0.  22.5 64.6],-1,15,15,52,561.4285714285714
+15,15,0,20,True,"(0, '21', True)","(0, '21', True)",0.0,22.5,68.0,[ 0.  22.5 68. ],-1,16,16,53,595.7142857142857
+16,16,0,21,True,"(0, '22', True)","(0, '22', True)",0.0,22.5,71.39999999999999,[ 0.  22.5 71.4],-1,17,17,54,630.0
+17,17,0,22,True,"(0, '23', True)","(0, '23', True)",0.0,22.5,74.8,[ 0.  22.5 74.8],-1,18,18,55,664.2857142857142
+18,18,0,23,True,"(0, '24', True)","(0, '24', True)",0.0,22.5,78.2,[ 0.  22.5 78.2],-1,19,19,56,698.5714285714286
+19,19,0,24,True,"(0, '25', True)","(0, '25', True)",0.0,22.5,81.6,[ 0.  22.5 81.6],-1,20,20,57,732.8571428571429
+20,20,0,25,True,"(0, '26', True)","(0, '26', True)",0.0,22.5,85.0,[ 0.  22.5 85. ],-1,21,21,58,767.1428571428571
+21,21,0,26,True,"(0, '27', True)","(0, '27', True)",0.0,22.5,88.39999999999999,[ 0.  22.5 88.4],-1,22,22,59,801.4285714285714
+22,22,0,27,True,"(0, '28', True)","(0, '28', True)",0.0,22.5,91.8,[ 0.  22.5 91.8],-1,23,23,60,835.7142857142857
+23,23,0,28,True,"(0, '29', True)","(0, '29', True)",0.0,22.5,95.2,[ 0.  22.5 95.2],-1,24,24,61,870.0
+24,24,0,29,True,"(0, '30', True)","(0, '30', True)",0.0,22.5,98.6,[ 0.  22.5 98.6],-1,25,25,62,904.2857142857142
+25,25,0,30,True,"(0, '31', True)","(0, '31', True)",0.0,22.5,102.0,[  0.   22.5 102. ],-1,26,26,63,938.5714285714284
+26,26,0,31,True,"(0, '32', True)","(0, '32', True)",0.0,22.5,105.39999999999999,[  0.   22.5 105.4],-1,27,27,64,972.8571428571429
+27,27,0,32,True,"(0, '33', True)","(0, '33', True)",0.0,22.5,108.8,[  0.   22.5 108.8],-1,28,28,65,1007.1428571428571
+28,28,0,33,True,"(0, '34', True)","(0, '34', True)",0.0,22.5,112.2,[  0.   22.5 112.2],-1,29,29,66,1041.4285714285713
+29,29,0,34,True,"(0, '35', True)","(0, '35', True)",0.0,22.5,115.6,[  0.   22.5 115.6],-1,30,30,67,1075.7142857142858
+30,30,0,35,True,"(0, '36', True)","(0, '36', True)",0.0,22.5,119.0,[  0.   22.5 119. ],-1,31,31,68,1110.0
+31,31,0,36,True,-1,"(1, '36', False)",0.0,22.5,122.39999999999999,[  0.   22.5 122.4],-1,-1,139,69,1144.2857142857142
+32,0,0,39,True,"(0, '40', True)","(0, '40', True)",0.0,22.5,132.6,[  0.   22.5 132.6],-1,33,33,-1,1247.142857142857
+33,1,0,40,True,"(0, '41', True)","(0, '41', True)",0.0,22.5,136.0,[  0.   22.5 136. ],-1,34,34,-1,1281.4285714285713
+34,2,0,41,True,-1,-1,0.0,22.5,139.4,[  0.   22.5 139.4],-1,-1,-1,-1,1315.7142857142858
+35,0,0,2,False,-1,-1,0.0,22.5,6.8,[ 0.  22.5  6.8],-1,-1,-1,-1,-21.42857142857143
+36,1,0,3,False,"(0, '2', False)","(0, '2', False)",0.0,22.5,10.2,[ 0.  22.5 10.2],-1,35,35,-1,12.857142857142861
+37,2,0,4,False,"(0, '3', False)","(0, '3', False)",0.0,22.5,13.6,[ 0.  22.5 13.6],-1,36,36,-1,47.14285714285714
+38,3,0,5,False,"(0, '4', False)","(0, '4', False)",0.0,22.5,17.0,[ 0.  22.5 17. ],-1,37,37,0,81.42857142857142
+39,4,0,6,False,"(0, '5', False)","(0, '5', False)",0.0,22.5,20.4,[ 0.  22.5 20.4],-1,38,38,1,115.71428571428572
+40,5,0,7,False,"(0, '6', False)","(0, '6', False)",0.0,22.5,23.8,[ 0.  22.5 23.8],-1,39,39,2,150.0
+41,6,0,8,False,"(0, '7', False)","(0, '7', False)",0.0,22.5,27.2,[ 0.  22.5 27.2],-1,40,40,3,184.28571428571428
+42,7,0,9,False,"(0, '8', False)","(0, '8', False)",0.0,22.5,30.599999999999998,[ 0.  22.5 30.6],-1,41,41,4,218.57142857142856
+43,8,0,10,False,"(0, '9', False)","(0, '9', False)",0.0,22.5,34.0,[ 0.  22.5 34. ],-1,42,42,5,252.85714285714283
+44,9,0,11,False,"(0, '10', False)","(0, '10', False)",0.0,22.5,37.4,[ 0.  22.5 37.4],-1,43,43,6,287.1428571428571
+45,10,0,12,False,"(0, '11', False)","(0, '11', False)",0.0,22.5,40.8,[ 0.  22.5 40.8],-1,44,44,7,321.42857142857144
+46,11,0,13,False,"(0, '12', False)","(0, '12', False)",0.0,22.5,44.199999999999996,[ 0.  22.5 44.2],-1,45,45,8,355.7142857142857
+47,12,0,14,False,"(0, '13', False)","(0, '13', False)",0.0,22.5,47.6,[ 0.  22.5 47.6],-1,46,46,9,390.0
+48,13,0,15,False,"(0, '14', False)","(0, '14', False)",0.0,22.5,51.0,[ 0.  22.5 51. ],-1,47,47,10,424.2857142857142
+49,14,0,16,False,"(0, '15', False)","(0, '15', False)",0.0,22.5,54.4,[ 0.  22.5 54.4],-1,48,48,11,458.57142857142856
+50,15,0,17,False,"(0, '16', False)","(0, '16', False)",0.0,22.5,57.8,[ 0.  22.5 57.8],-1,49,49,12,492.8571428571429
+51,16,0,18,False,"(0, '17', False)","(0, '17', False)",0.0,22.5,61.199999999999996,[ 0.  22.5 61.2],-1,50,50,13,527.1428571428571
+52,17,0,19,False,"(0, '18', False)","(0, '18', False)",0.0,22.5,64.6,[ 0.  22.5 64.6],-1,51,51,14,561.4285714285714
+53,18,0,20,False,"(0, '19', False)","(0, '19', False)",0.0,22.5,68.0,[ 0.  22.5 68. ],-1,52,52,15,595.7142857142857
+54,0,0,21,False,-1,"(1, '21', True)",0.0,22.5,71.39999999999999,[ 0.  22.5 71.4],-1,-1,90,16,630.0
+55,1,0,22,False,"(0, '21', False)","(0, '21', False)",0.0,22.5,74.8,[ 0.  22.5 74.8],-1,54,54,17,664.2857142857142
+56,2,0,23,False,"(0, '22', False)","(0, '22', False)",0.0,22.5,78.2,[ 0.  22.5 78.2],-1,55,55,18,698.5714285714286
+57,0,0,24,False,-1,-1,0.0,22.5,81.6,[ 0.  22.5 81.6],-1,-1,-1,19,732.8571428571429
+58,1,0,25,False,"(0, '24', False)","(0, '24', False)",0.0,22.5,85.0,[ 0.  22.5 85. ],-1,57,57,20,767.1428571428571
+59,2,0,26,False,"(0, '25', False)","(0, '25', False)",0.0,22.5,88.39999999999999,[ 0.  22.5 88.4],-1,58,58,21,801.4285714285714
+60,3,0,27,False,"(0, '26', False)","(0, '26', False)",0.0,22.5,91.8,[ 0.  22.5 91.8],-1,59,59,22,835.7142857142857
+61,0,0,28,False,-1,"(5, '28', True)",0.0,22.5,95.2,[ 0.  22.5 95.2],-1,-1,368,23,870.0
+62,1,0,29,False,"(0, '28', False)","(0, '28', False)",0.0,22.5,98.6,[ 0.  22.5 98.6],-1,61,61,24,904.2857142857142
+63,2,0,30,False,"(0, '29', False)","(0, '29', False)",0.0,22.5,102.0,[  0.   22.5 102. ],-1,62,62,25,938.5714285714284
+64,3,0,31,False,"(0, '30', False)","(0, '30', False)",0.0,22.5,105.39999999999999,[  0.   22.5 105.4],-1,63,63,26,972.8571428571429
+65,4,0,32,False,"(0, '31', False)","(0, '31', False)",0.0,22.5,108.8,[  0.   22.5 108.8],-1,64,64,27,1007.1428571428571
+66,5,0,33,False,"(0, '32', False)","(0, '32', False)",0.0,22.5,112.2,[  0.   22.5 112.2],-1,65,65,28,1041.4285714285713
+67,6,0,34,False,"(0, '33', False)","(0, '33', False)",0.0,22.5,115.6,[  0.   22.5 115.6],-1,66,66,29,1075.7142857142858
+68,7,0,35,False,"(0, '34', False)","(0, '34', False)",0.0,22.5,119.0,[  0.   22.5 119. ],-1,67,67,30,1110.0
+69,8,0,36,False,"(0, '35', False)","(0, '35', False)",0.0,22.5,122.39999999999999,[  0.   22.5 122.4],-1,68,68,31,1144.2857142857142
+70,9,0,37,False,"(0, '36', False)","(0, '36', False)",0.0,22.5,125.8,[  0.   22.5 125.8],-1,69,69,-1,1178.5714285714284
+71,10,0,38,False,"(0, '37', False)","(0, '37', False)",0.0,22.5,129.2,[  0.   22.5 129.2],-1,70,70,-1,1212.857142857143
+72,0,1,3,True,"(1, '4', True)","(1, '4', True)",-19.48557375,11.25,10.2,[-19.485573  11.25      10.2     ],-1,73,73,-1,12.857142857142861
+73,1,1,4,True,"(1, '5', True)","(1, '5', True)",-19.48557375,11.25,13.6,[-19.485573  11.25      13.6     ],-1,74,74,-1,47.14285714285714
+74,2,1,5,True,"(1, '6', True)","(1, '6', True)",-19.48557375,11.25,17.0,[-19.485573  11.25      17.      ],-1,75,75,108,81.42857142857142
+75,3,1,6,True,"(1, '7', True)","(1, '7', True)",-19.48557375,11.25,20.4,[-19.485573  11.25      20.4     ],-1,76,76,109,115.71428571428572
+76,4,1,7,True,"(1, '8', True)","(1, '8', True)",-19.48557375,11.25,23.8,[-19.485573  11.25      23.8     ],-1,77,77,110,150.0
+77,5,1,8,True,"(1, '9', True)","(1, '9', True)",-19.48557375,11.25,27.2,[-19.485573  11.25      27.2     ],-1,78,78,111,184.28571428571428
+78,6,1,9,True,"(1, '10', True)","(1, '10', True)",-19.48557375,11.25,30.599999999999998,[-19.485573  11.25      30.6     ],-1,79,79,112,218.57142857142856
+79,7,1,10,True,"(1, '11', True)","(1, '11', True)",-19.48557375,11.25,34.0,[-19.485573  11.25      34.      ],-1,80,80,113,252.85714285714283
+80,8,1,11,True,"(1, '12', True)","(1, '12', True)",-19.48557375,11.25,37.4,[-19.485573  11.25      37.4     ],-1,81,81,114,287.1428571428571
+81,9,1,12,True,"(1, '13', True)","(1, '13', True)",-19.48557375,11.25,40.8,[-19.485573  11.25      40.8     ],-1,82,82,115,321.42857142857144
+82,10,1,13,True,"(1, '14', True)","(1, '14', True)",-19.48557375,11.25,44.199999999999996,[-19.485573  11.25      44.2     ],-1,83,83,116,355.7142857142857
+83,11,1,14,True,"(1, '15', True)","(1, '15', True)",-19.48557375,11.25,47.6,[-19.485573  11.25      47.6     ],-1,84,84,117,390.0
+84,12,1,15,True,"(1, '16', True)","(1, '16', True)",-19.48557375,11.25,51.0,[-19.485573  11.25      51.      ],-1,85,85,118,424.2857142857142
+85,13,1,16,True,"(1, '17', True)","(1, '17', True)",-19.48557375,11.25,54.4,[-19.485573  11.25      54.4     ],-1,86,86,119,458.57142857142856
+86,14,1,17,True,"(1, '18', True)","(1, '18', True)",-19.48557375,11.25,57.8,[-19.485573  11.25      57.8     ],-1,87,87,120,492.8571428571429
+87,15,1,18,True,"(1, '19', True)","(1, '19', True)",-19.48557375,11.25,61.199999999999996,[-19.485573  11.25      61.2     ],-1,88,88,121,527.1428571428571
+88,16,1,19,True,"(1, '20', True)","(1, '20', True)",-19.48557375,11.25,64.6,[-19.485573  11.25      64.6     ],-1,89,89,122,561.4285714285714
+89,17,1,20,True,-1,"(0, '20', False)",-19.48557375,11.25,68.0,[-19.485573  11.25      68.      ],-1,-1,53,123,595.7142857142857
+90,0,1,21,True,"(1, '22', True)","(1, '22', True)",-19.48557375,11.25,71.39999999999999,[-19.485573  11.25      71.4     ],-1,91,91,124,630.0
+91,1,1,22,True,"(1, '23', True)","(1, '23', True)",-19.48557375,11.25,74.8,[-19.485573  11.25      74.8     ],-1,92,92,125,664.2857142857142
+92,2,1,23,True,"(1, '24', True)","(1, '24', True)",-19.48557375,11.25,78.2,[-19.485573  11.25      78.2     ],-1,93,93,126,698.5714285714286
+93,3,1,24,True,"(1, '25', True)","(1, '25', True)",-19.48557375,11.25,81.6,[-19.485573  11.25      81.6     ],-1,94,94,127,732.8571428571429
+94,4,1,25,True,"(1, '26', True)","(1, '26', True)",-19.48557375,11.25,85.0,[-19.485573  11.25      85.      ],-1,95,95,128,767.1428571428571
+95,5,1,26,True,"(1, '27', True)","(1, '27', True)",-19.48557375,11.25,88.39999999999999,[-19.485573  11.25      88.4     ],-1,96,96,129,801.4285714285714
+96,6,1,27,True,"(1, '28', True)","(1, '28', True)",-19.48557375,11.25,91.8,[-19.485573  11.25      91.8     ],-1,97,97,130,835.7142857142857
+97,7,1,28,True,"(1, '29', True)","(1, '29', True)",-19.48557375,11.25,95.2,[-19.485573  11.25      95.2     ],-1,98,98,131,870.0
+98,8,1,29,True,"(1, '30', True)","(1, '30', True)",-19.48557375,11.25,98.6,[-19.485573  11.25      98.6     ],-1,99,99,132,904.2857142857142
+99,9,1,30,True,"(1, '31', True)","(1, '31', True)",-19.48557375,11.25,102.0,[-19.485573  11.25     102.      ],-1,100,100,133,938.5714285714284
+100,10,1,31,True,"(1, '32', True)","(1, '32', True)",-19.48557375,11.25,105.39999999999999,[-19.485573  11.25     105.4     ],-1,101,101,134,972.8571428571429
+101,11,1,32,True,"(1, '33', True)","(1, '33', True)",-19.48557375,11.25,108.8,[-19.485573  11.25     108.8     ],-1,102,102,135,1007.1428571428571
+102,12,1,33,True,"(1, '34', True)","(1, '34', True)",-19.48557375,11.25,112.2,[-19.485573  11.25     112.2     ],-1,103,103,136,1041.4285714285713
+103,13,1,34,True,"(1, '35', True)","(1, '35', True)",-19.48557375,11.25,115.6,[-19.485573  11.25     115.6     ],-1,104,104,137,1075.7142857142858
+104,14,1,35,True,"(1, '36', True)","(1, '36', True)",-19.48557375,11.25,119.0,[-19.485573  11.25     119.      ],-1,105,105,138,1110.0
+105,15,1,36,True,"(1, '37', True)","(1, '37', True)",-19.48557375,11.25,122.39999999999999,[-19.485573  11.25     122.4     ],-1,106,106,139,1144.2857142857142
+106,16,1,37,True,"(1, '38', True)","(1, '38', True)",-19.48557375,11.25,125.8,[-19.485573  11.25     125.8     ],-1,107,107,-1,1178.5714285714284
+107,17,1,38,True,-1,-1,-19.48557375,11.25,129.2,[-19.485573  11.25     129.2     ],-1,-1,-1,-1,1212.857142857143
+108,0,1,5,False,-1,"(0, '5', True)",-19.48557375,11.25,17.0,[-19.485573  11.25      17.      ],-1,-1,0,74,81.42857142857142
+109,1,1,6,False,"(1, '5', False)","(1, '5', False)",-19.48557375,11.25,20.4,[-19.485573  11.25      20.4     ],-1,108,108,75,115.71428571428572
+110,2,1,7,False,"(1, '6', False)","(1, '6', False)",-19.48557375,11.25,23.8,[-19.485573  11.25      23.8     ],-1,109,109,76,150.0
+111,3,1,8,False,"(1, '7', False)","(1, '7', False)",-19.48557375,11.25,27.2,[-19.485573  11.25      27.2     ],-1,110,110,77,184.28571428571428
+112,4,1,9,False,"(1, '8', False)","(1, '8', False)",-19.48557375,11.25,30.599999999999998,[-19.485573  11.25      30.6     ],-1,111,111,78,218.57142857142856
+113,5,1,10,False,"(1, '9', False)","(1, '9', False)",-19.48557375,11.25,34.0,[-19.485573  11.25      34.      ],-1,112,112,79,252.85714285714283
+114,6,1,11,False,"(1, '10', False)","(1, '10', False)",-19.48557375,11.25,37.4,[-19.485573  11.25      37.4     ],-1,113,113,80,287.1428571428571
+115,7,1,12,False,"(1, '11', False)","(1, '11', False)",-19.48557375,11.25,40.8,[-19.485573  11.25      40.8     ],-1,114,114,81,321.42857142857144
+116,8,1,13,False,"(1, '12', False)","(1, '12', False)",-19.48557375,11.25,44.199999999999996,[-19.485573  11.25      44.2     ],-1,115,115,82,355.7142857142857
+117,9,1,14,False,"(1, '13', False)","(1, '13', False)",-19.48557375,11.25,47.6,[-19.485573  11.25      47.6     ],-1,116,116,83,390.0
+118,10,1,15,False,"(1, '14', False)","(1, '14', False)",-19.48557375,11.25,51.0,[-19.485573  11.25      51.      ],-1,117,117,84,424.2857142857142
+119,11,1,16,False,"(1, '15', False)","(1, '15', False)",-19.48557375,11.25,54.4,[-19.485573  11.25      54.4     ],-1,118,118,85,458.57142857142856
+120,12,1,17,False,"(1, '16', False)","(1, '16', False)",-19.48557375,11.25,57.8,[-19.485573  11.25      57.8     ],-1,119,119,86,492.8571428571429
+121,13,1,18,False,"(1, '17', False)","(1, '17', False)",-19.48557375,11.25,61.199999999999996,[-19.485573  11.25      61.2     ],-1,120,120,87,527.1428571428571
+122,0,1,19,False,-1,"(2, '19', True)",-19.48557375,11.25,64.6,[-19.485573  11.25      64.6     ],-1,-1,160,88,561.4285714285714
+123,1,1,20,False,"(1, '19', False)","(1, '19', False)",-19.48557375,11.25,68.0,[-19.485573  11.25      68.      ],-1,122,122,89,595.7142857142857
+124,2,1,21,False,"(1, '20', False)","(1, '20', False)",-19.48557375,11.25,71.39999999999999,[-19.485573  11.25      71.4     ],-1,123,123,90,630.0
+125,3,1,22,False,"(1, '21', False)","(1, '21', False)",-19.48557375,11.25,74.8,[-19.485573  11.25      74.8     ],-1,124,124,91,664.2857142857142
+126,4,1,23,False,"(1, '22', False)","(1, '22', False)",-19.48557375,11.25,78.2,[-19.485573  11.25      78.2     ],-1,125,125,92,698.5714285714286
+127,5,1,24,False,"(1, '23', False)","(1, '23', False)",-19.48557375,11.25,81.6,[-19.485573  11.25      81.6     ],-1,126,126,93,732.8571428571429
+128,6,1,25,False,"(1, '24', False)","(1, '24', False)",-19.48557375,11.25,85.0,[-19.485573  11.25      85.      ],-1,127,127,94,767.1428571428571
+129,7,1,26,False,"(1, '25', False)","(1, '25', False)",-19.48557375,11.25,88.39999999999999,[-19.485573  11.25      88.4     ],-1,128,128,95,801.4285714285714
+130,8,1,27,False,"(1, '26', False)","(1, '26', False)",-19.48557375,11.25,91.8,[-19.485573  11.25      91.8     ],-1,129,129,96,835.7142857142857
+131,9,1,28,False,"(1, '27', False)","(1, '27', False)",-19.48557375,11.25,95.2,[-19.485573  11.25      95.2     ],-1,130,130,97,870.0
+132,10,1,29,False,"(1, '28', False)","(1, '28', False)",-19.48557375,11.25,98.6,[-19.485573  11.25      98.6     ],-1,131,131,98,904.2857142857142
+133,11,1,30,False,"(1, '29', False)","(1, '29', False)",-19.48557375,11.25,102.0,[-19.485573  11.25     102.      ],-1,132,132,99,938.5714285714284
+134,12,1,31,False,"(1, '30', False)","(1, '30', False)",-19.48557375,11.25,105.39999999999999,[-19.485573  11.25     105.4     ],-1,133,133,100,972.8571428571429
+135,13,1,32,False,"(1, '31', False)","(1, '31', False)",-19.48557375,11.25,108.8,[-19.485573  11.25     108.8     ],-1,134,134,101,1007.1428571428571
+136,14,1,33,False,"(1, '32', False)","(1, '32', False)",-19.48557375,11.25,112.2,[-19.485573  11.25     112.2     ],-1,135,135,102,1041.4285714285713
+137,15,1,34,False,"(1, '33', False)","(1, '33', False)",-19.48557375,11.25,115.6,[-19.485573  11.25     115.6     ],-1,136,136,103,1075.7142857142858
+138,16,1,35,False,"(1, '34', False)","(1, '34', False)",-19.48557375,11.25,119.0,[-19.485573  11.25     119.      ],-1,137,137,104,1110.0
+139,17,1,36,False,"(1, '35', False)","(1, '35', False)",-19.48557375,11.25,122.39999999999999,[-19.485573  11.25     122.4     ],-1,138,138,105,1144.2857142857142
+140,0,1,39,False,-1,-1,-19.48557375,11.25,132.6,[-19.485573  11.25     132.6     ],-1,-1,-1,-1,1247.142857142857
+141,1,1,40,False,"(1, '39', False)","(1, '39', False)",-19.48557375,11.25,136.0,[-19.485573  11.25     136.      ],-1,140,140,-1,1281.4285714285713
+142,2,1,41,False,"(1, '40', False)","(1, '40', False)",-19.48557375,11.25,139.4,[-19.485573  11.25     139.4     ],-1,141,141,-1,1315.7142857142858
+143,0,2,2,True,"(2, '3', True)","(2, '3', True)",-19.48557375,-11.25,6.8,[-19.485573 -11.25       6.8     ],-1,144,144,179,-21.42857142857143
+144,1,2,3,True,"(2, '4', True)","(2, '4', True)",-19.48557375,-11.25,10.2,[-19.485573 -11.25      10.2     ],-1,145,145,180,12.857142857142861
+145,2,2,4,True,"(2, '5', True)","(2, '5', True)",-19.48557375,-11.25,13.6,[-19.485573 -11.25      13.6     ],-1,146,146,181,47.14285714285714
+146,3,2,5,True,"(2, '6', True)","(2, '6', True)",-19.48557375,-11.25,17.0,[-19.485573 -11.25      17.      ],-1,147,147,182,81.42857142857142
+147,4,2,6,True,"(2, '7', True)","(2, '7', True)",-19.48557375,-11.25,20.4,[-19.485573 -11.25      20.4     ],-1,148,148,183,115.71428571428572
+148,5,2,7,True,"(2, '8', True)","(2, '8', True)",-19.48557375,-11.25,23.8,[-19.485573 -11.25      23.8     ],-1,149,149,184,150.0
+149,6,2,8,True,"(2, '9', True)","(2, '9', True)",-19.48557375,-11.25,27.2,[-19.485573 -11.25      27.2     ],-1,150,150,185,184.28571428571428
+150,7,2,9,True,"(2, '10', True)","(2, '10', True)",-19.48557375,-11.25,30.599999999999998,[-19.485573 -11.25      30.6     ],-1,151,151,186,218.57142857142856
+151,8,2,10,True,"(2, '11', True)","(2, '11', True)",-19.48557375,-11.25,34.0,[-19.485573 -11.25      34.      ],-1,152,152,187,252.85714285714283
+152,9,2,11,True,"(2, '12', True)","(2, '12', True)",-19.48557375,-11.25,37.4,[-19.485573 -11.25      37.4     ],-1,153,153,188,287.1428571428571
+153,10,2,12,True,"(2, '13', True)","(2, '13', True)",-19.48557375,-11.25,40.8,[-19.485573 -11.25      40.8     ],-1,154,154,189,321.42857142857144
+154,11,2,13,True,"(2, '14', True)","(2, '14', True)",-19.48557375,-11.25,44.199999999999996,[-19.485573 -11.25      44.2     ],-1,155,155,190,355.7142857142857
+155,12,2,14,True,"(2, '15', True)","(2, '15', True)",-19.48557375,-11.25,47.6,[-19.485573 -11.25      47.6     ],-1,156,156,191,390.0
+156,13,2,15,True,"(2, '16', True)","(2, '16', True)",-19.48557375,-11.25,51.0,[-19.485573 -11.25      51.      ],-1,157,157,192,424.2857142857142
+157,14,2,16,True,"(2, '17', True)","(2, '17', True)",-19.48557375,-11.25,54.4,[-19.485573 -11.25      54.4     ],-1,158,158,193,458.57142857142856
+158,15,2,17,True,"(2, '18', True)","(2, '18', True)",-19.48557375,-11.25,57.8,[-19.485573 -11.25      57.8     ],-1,159,159,194,492.8571428571429
+159,16,2,18,True,-1,"(1, '18', False)",-19.48557375,-11.25,61.199999999999996,[-19.485573 -11.25      61.2     ],-1,-1,121,195,527.1428571428571
+160,0,2,19,True,"(2, '20', True)","(2, '20', True)",-19.48557375,-11.25,64.6,[-19.485573 -11.25      64.6     ],-1,161,161,196,561.4285714285714
+161,1,2,20,True,"(2, '21', True)","(2, '21', True)",-19.48557375,-11.25,68.0,[-19.485573 -11.25      68.      ],-1,162,162,197,595.7142857142857
+162,2,2,21,True,"(2, '22', True)","(2, '22', True)",-19.48557375,-11.25,71.39999999999999,[-19.485573 -11.25      71.4     ],-1,163,163,198,630.0
+163,3,2,22,True,"(2, '23', True)","(2, '23', True)",-19.48557375,-11.25,74.8,[-19.485573 -11.25      74.8     ],-1,164,164,199,664.2857142857142
+164,4,2,23,True,"(2, '24', True)","(2, '24', True)",-19.48557375,-11.25,78.2,[-19.485573 -11.25      78.2     ],-1,165,165,200,698.5714285714286
+165,5,2,24,True,"(2, '25', True)","(2, '25', True)",-19.48557375,-11.25,81.6,[-19.485573 -11.25      81.6     ],-1,166,166,201,732.8571428571429
+166,6,2,25,True,"(2, '26', True)","(2, '26', True)",-19.48557375,-11.25,85.0,[-19.485573 -11.25      85.      ],-1,167,167,202,767.1428571428571
+167,7,2,26,True,"(2, '27', True)","(2, '27', True)",-19.48557375,-11.25,88.39999999999999,[-19.485573 -11.25      88.4     ],-1,168,168,203,801.4285714285714
+168,8,2,27,True,"(2, '28', True)","(2, '28', True)",-19.48557375,-11.25,91.8,[-19.485573 -11.25      91.8     ],-1,169,169,204,835.7142857142857
+169,9,2,28,True,"(2, '29', True)","(2, '29', True)",-19.48557375,-11.25,95.2,[-19.485573 -11.25      95.2     ],-1,170,170,205,870.0
+170,10,2,29,True,"(2, '30', True)","(2, '30', True)",-19.48557375,-11.25,98.6,[-19.485573 -11.25      98.6     ],-1,171,171,206,904.2857142857142
+171,11,2,30,True,"(2, '31', True)","(2, '31', True)",-19.48557375,-11.25,102.0,[-19.485573 -11.25     102.      ],-1,172,172,207,938.5714285714284
+172,12,2,31,True,"(2, '32', True)","(2, '32', True)",-19.48557375,-11.25,105.39999999999999,[-19.485573 -11.25     105.4     ],-1,173,173,208,972.8571428571429
+173,13,2,32,True,-1,"(3, '32', False)",-19.48557375,-11.25,108.8,[-19.485573 -11.25     108.8     ],-1,-1,277,209,1007.1428571428571
+174,0,2,39,True,"(2, '40', True)","(2, '40', True)",-19.48557375,-11.25,132.6,[-19.485573 -11.25     132.6     ],-1,175,175,-1,1247.142857142857
+175,1,2,40,True,"(2, '41', True)","(2, '41', True)",-19.48557375,-11.25,136.0,[-19.485573 -11.25     136.      ],-1,176,176,-1,1281.4285714285713
+176,2,2,41,True,-1,-1,-19.48557375,-11.25,139.4,[-19.485573 -11.25     139.4     ],-1,-1,-1,-1,1315.7142857142858
+177,0,2,0,False,-1,-1,-19.48557375,-11.25,0.0,[-19.485573 -11.25       0.      ],-1,-1,-1,-1,-90.0
+178,1,2,1,False,"(2, '0', False)","(2, '0', False)",-19.48557375,-11.25,3.4,[-19.485573 -11.25       3.4     ],-1,177,177,-1,-55.714285714285715
+179,2,2,2,False,"(2, '1', False)","(2, '1', False)",-19.48557375,-11.25,6.8,[-19.485573 -11.25       6.8     ],-1,178,178,143,-21.42857142857143
+180,3,2,3,False,"(2, '2', False)","(2, '2', False)",-19.48557375,-11.25,10.2,[-19.485573 -11.25      10.2     ],-1,179,179,144,12.857142857142861
+181,4,2,4,False,"(2, '3', False)","(2, '3', False)",-19.48557375,-11.25,13.6,[-19.485573 -11.25      13.6     ],-1,180,180,145,47.14285714285714
+182,5,2,5,False,"(2, '4', False)","(2, '4', False)",-19.48557375,-11.25,17.0,[-19.485573 -11.25      17.      ],-1,181,181,146,81.42857142857142
+183,6,2,6,False,"(2, '5', False)","(2, '5', False)",-19.48557375,-11.25,20.4,[-19.485573 -11.25      20.4     ],-1,182,182,147,115.71428571428572
+184,7,2,7,False,"(2, '6', False)","(2, '6', False)",-19.48557375,-11.25,23.8,[-19.485573 -11.25      23.8     ],-1,183,183,148,150.0
+185,8,2,8,False,"(2, '7', False)","(2, '7', False)",-19.48557375,-11.25,27.2,[-19.485573 -11.25      27.2     ],-1,184,184,149,184.28571428571428
+186,9,2,9,False,"(2, '8', False)","(2, '8', False)",-19.48557375,-11.25,30.599999999999998,[-19.485573 -11.25      30.6     ],-1,185,185,150,218.57142857142856
+187,10,2,10,False,"(2, '9', False)","(2, '9', False)",-19.48557375,-11.25,34.0,[-19.485573 -11.25      34.      ],-1,186,186,151,252.85714285714283
+188,11,2,11,False,"(2, '10', False)","(2, '10', False)",-19.48557375,-11.25,37.4,[-19.485573 -11.25      37.4     ],-1,187,187,152,287.1428571428571
+189,12,2,12,False,"(2, '11', False)","(2, '11', False)",-19.48557375,-11.25,40.8,[-19.485573 -11.25      40.8     ],-1,188,188,153,321.42857142857144
+190,13,2,13,False,"(2, '12', False)","(2, '12', False)",-19.48557375,-11.25,44.199999999999996,[-19.485573 -11.25      44.2     ],-1,189,189,154,355.7142857142857
+191,14,2,14,False,"(2, '13', False)","(2, '13', False)",-19.48557375,-11.25,47.6,[-19.485573 -11.25      47.6     ],-1,190,190,155,390.0
+192,15,2,15,False,"(2, '14', False)","(2, '14', False)",-19.48557375,-11.25,51.0,[-19.485573 -11.25      51.      ],-1,191,191,156,424.2857142857142
+193,16,2,16,False,"(2, '15', False)","(2, '15', False)",-19.48557375,-11.25,54.4,[-19.485573 -11.25      54.4     ],-1,192,192,157,458.57142857142856
+194,17,2,17,False,"(2, '16', False)","(2, '16', False)",-19.48557375,-11.25,57.8,[-19.485573 -11.25      57.8     ],-1,193,193,158,492.8571428571429
+195,18,2,18,False,"(2, '17', False)","(2, '17', False)",-19.48557375,-11.25,61.199999999999996,[-19.485573 -11.25      61.2     ],-1,194,194,159,527.1428571428571
+196,19,2,19,False,"(2, '18', False)","(2, '18', False)",-19.48557375,-11.25,64.6,[-19.485573 -11.25      64.6     ],-1,195,195,160,561.4285714285714
+197,20,2,20,False,"(2, '19', False)","(2, '19', False)",-19.48557375,-11.25,68.0,[-19.485573 -11.25      68.      ],-1,196,196,161,595.7142857142857
+198,21,2,21,False,"(2, '20', False)","(2, '20', False)",-19.48557375,-11.25,71.39999999999999,[-19.485573 -11.25      71.4     ],-1,197,197,162,630.0
+199,22,2,22,False,"(2, '21', False)","(2, '21', False)",-19.48557375,-11.25,74.8,[-19.485573 -11.25      74.8     ],-1,198,198,163,664.2857142857142
+200,23,2,23,False,"(2, '22', False)","(2, '22', False)",-19.48557375,-11.25,78.2,[-19.485573 -11.25      78.2     ],-1,199,199,164,698.5714285714286
+201,24,2,24,False,"(2, '23', False)","(2, '23', False)",-19.48557375,-11.25,81.6,[-19.485573 -11.25      81.6     ],-1,200,200,165,732.8571428571429
+202,25,2,25,False,"(2, '24', False)","(2, '24', False)",-19.48557375,-11.25,85.0,[-19.485573 -11.25      85.      ],-1,201,201,166,767.1428571428571
+203,26,2,26,False,"(2, '25', False)","(2, '25', False)",-19.48557375,-11.25,88.39999999999999,[-19.485573 -11.25      88.4     ],-1,202,202,167,801.4285714285714
+204,27,2,27,False,"(2, '26', False)","(2, '26', False)",-19.48557375,-11.25,91.8,[-19.485573 -11.25      91.8     ],-1,203,203,168,835.7142857142857
+205,28,2,28,False,"(2, '27', False)","(2, '27', False)",-19.48557375,-11.25,95.2,[-19.485573 -11.25      95.2     ],-1,204,204,169,870.0
+206,29,2,29,False,"(2, '28', False)","(2, '28', False)",-19.48557375,-11.25,98.6,[-19.485573 -11.25      98.6     ],-1,205,205,170,904.2857142857142
+207,30,2,30,False,"(2, '29', False)","(2, '29', False)",-19.48557375,-11.25,102.0,[-19.485573 -11.25     102.      ],-1,206,206,171,938.5714285714284
+208,31,2,31,False,"(2, '30', False)","(2, '30', False)",-19.48557375,-11.25,105.39999999999999,[-19.485573 -11.25     105.4     ],-1,207,207,172,972.8571428571429
+209,32,2,32,False,"(2, '31', False)","(2, '31', False)",-19.48557375,-11.25,108.8,[-19.485573 -11.25     108.8     ],-1,208,208,173,1007.1428571428571
+210,33,2,33,False,"(2, '32', False)","(2, '32', False)",-19.48557375,-11.25,112.2,[-19.485573 -11.25     112.2     ],-1,209,209,-1,1041.4285714285713
+211,34,2,34,False,"(2, '33', False)","(2, '33', False)",-19.48557375,-11.25,115.6,[-19.485573 -11.25     115.6     ],-1,210,210,-1,1075.7142857142858
+212,0,3,0,True,"(3, '1', True)","(3, '1', True)",0.0,-22.5,0.0,[  0.  -22.5   0. ],-1,213,213,-1,-90.0
+213,1,3,1,True,"(3, '2', True)","(3, '2', True)",0.0,-22.5,3.4,[  0.  -22.5   3.4],-1,214,214,-1,-55.714285714285715
+214,2,3,2,True,"(3, '3', True)","(3, '3', True)",0.0,-22.5,6.8,[  0.  -22.5   6.8],-1,215,215,-1,-21.42857142857143
+215,3,3,3,True,"(3, '4', True)","(3, '4', True)",0.0,-22.5,10.2,[  0.  -22.5  10.2],-1,216,216,-1,12.857142857142861
+216,4,3,4,True,"(3, '5', True)","(3, '5', True)",0.0,-22.5,13.6,[  0.  -22.5  13.6],-1,217,217,-1,47.14285714285714
+217,5,3,5,True,"(3, '6', True)","(3, '6', True)",0.0,-22.5,17.0,[  0.  -22.5  17. ],-1,218,218,-1,81.42857142857142
+218,6,3,6,True,"(3, '7', True)","(3, '7', True)",0.0,-22.5,20.4,[  0.  -22.5  20.4],-1,219,219,-1,115.71428571428572
+219,7,3,7,True,"(3, '8', True)","(3, '8', True)",0.0,-22.5,23.8,[  0.  -22.5  23.8],-1,220,220,-1,150.0
+220,8,3,8,True,"(3, '9', True)","(3, '9', True)",0.0,-22.5,27.2,[  0.  -22.5  27.2],-1,221,221,-1,184.28571428571428
+221,9,3,9,True,"(3, '10', True)","(3, '10', True)",0.0,-22.5,30.599999999999998,[  0.  -22.5  30.6],-1,222,222,-1,218.57142857142856
+222,10,3,10,True,"(3, '11', True)","(3, '11', True)",0.0,-22.5,34.0,[  0.  -22.5  34. ],-1,223,223,-1,252.85714285714283
+223,11,3,11,True,"(3, '12', True)","(3, '12', True)",0.0,-22.5,37.4,[  0.  -22.5  37.4],-1,224,224,-1,287.1428571428571
+224,12,3,12,True,"(3, '13', True)","(3, '13', True)",0.0,-22.5,40.8,[  0.  -22.5  40.8],-1,225,225,-1,321.42857142857144
+225,13,3,13,True,"(3, '14', True)","(3, '14', True)",0.0,-22.5,44.199999999999996,[  0.  -22.5  44.2],-1,226,226,-1,355.7142857142857
+226,14,3,14,True,"(3, '15', True)","(3, '15', True)",0.0,-22.5,47.6,[  0.  -22.5  47.6],-1,227,227,-1,390.0
+227,15,3,15,True,"(3, '16', True)","(3, '16', True)",0.0,-22.5,51.0,[  0.  -22.5  51. ],-1,228,228,-1,424.2857142857142
+228,16,3,16,True,"(3, '17', True)","(3, '17', True)",0.0,-22.5,54.4,[  0.  -22.5  54.4],-1,229,229,-1,458.57142857142856
+229,17,3,17,True,"(3, '18', True)","(3, '18', True)",0.0,-22.5,57.8,[  0.  -22.5  57.8],-1,230,230,-1,492.8571428571429
+230,18,3,18,True,"(3, '19', True)","(3, '19', True)",0.0,-22.5,61.199999999999996,[  0.  -22.5  61.2],-1,231,231,-1,527.1428571428571
+231,19,3,19,True,"(3, '20', True)","(3, '20', True)",0.0,-22.5,64.6,[  0.  -22.5  64.6],-1,232,232,-1,561.4285714285714
+232,20,3,20,True,-1,"(4, '20', False)",0.0,-22.5,68.0,[  0.  -22.5  68. ],-1,-1,329,-1,595.7142857142857
+233,0,3,21,True,"(3, '22', True)","(3, '22', True)",0.0,-22.5,71.39999999999999,[  0.  -22.5  71.4],-1,234,234,-1,630.0
+234,1,3,22,True,"(3, '23', True)","(3, '23', True)",0.0,-22.5,74.8,[  0.  -22.5  74.8],-1,235,235,-1,664.2857142857142
+235,2,3,23,True,"(3, '24', True)","(3, '24', True)",0.0,-22.5,78.2,[  0.  -22.5  78.2],-1,236,236,-1,698.5714285714286
+236,3,3,24,True,"(3, '25', True)","(3, '25', True)",0.0,-22.5,81.6,[  0.  -22.5  81.6],-1,237,237,-1,732.8571428571429
+237,4,3,25,True,"(3, '26', True)","(3, '26', True)",0.0,-22.5,85.0,[  0.  -22.5  85. ],-1,238,238,-1,767.1428571428571
+238,5,3,26,True,"(3, '27', True)","(3, '27', True)",0.0,-22.5,88.39999999999999,[  0.  -22.5  88.4],-1,239,239,-1,801.4285714285714
+239,6,3,27,True,"(3, '28', True)","(3, '28', True)",0.0,-22.5,91.8,[  0.  -22.5  91.8],-1,240,240,-1,835.7142857142857
+240,7,3,28,True,"(3, '29', True)","(3, '29', True)",0.0,-22.5,95.2,[  0.  -22.5  95.2],-1,241,241,-1,870.0
+241,8,3,29,True,"(3, '30', True)","(3, '30', True)",0.0,-22.5,98.6,[  0.  -22.5  98.6],-1,242,242,-1,904.2857142857142
+242,9,3,30,True,"(3, '31', True)","(3, '31', True)",0.0,-22.5,102.0,[  0.  -22.5 102. ],-1,243,243,-1,938.5714285714284
+243,10,3,31,True,"(3, '32', True)","(3, '32', True)",0.0,-22.5,105.39999999999999,[  0.  -22.5 105.4],-1,244,244,-1,972.8571428571429
+244,11,3,32,True,"(3, '33', True)","(3, '33', True)",0.0,-22.5,108.8,[  0.  -22.5 108.8],-1,245,245,-1,1007.1428571428571
+245,12,3,33,True,"(3, '34', True)","(3, '34', True)",0.0,-22.5,112.2,[  0.  -22.5 112.2],-1,246,246,-1,1041.4285714285713
+246,13,3,34,True,-1,-1,0.0,-22.5,115.6,[  0.  -22.5 115.6],-1,-1,-1,-1,1075.7142857142858
+247,0,3,2,False,-1,"(2, '2', True)",0.0,-22.5,6.8,[  0.  -22.5   6.8],-1,-1,143,-1,-21.42857142857143
+248,1,3,3,False,"(3, '2', False)","(3, '2', False)",0.0,-22.5,10.2,[  0.  -22.5  10.2],-1,247,247,-1,12.857142857142861
+249,2,3,4,False,"(3, '3', False)","(3, '3', False)",0.0,-22.5,13.6,[  0.  -22.5  13.6],-1,248,248,-1,47.14285714285714
+250,3,3,5,False,"(3, '4', False)","(3, '4', False)",0.0,-22.5,17.0,[  0.  -22.5  17. ],-1,249,249,-1,81.42857142857142
+251,4,3,6,False,"(3, '5', False)","(3, '5', False)",0.0,-22.5,20.4,[  0.  -22.5  20.4],-1,250,250,-1,115.71428571428572
+252,5,3,7,False,"(3, '6', False)","(3, '6', False)",0.0,-22.5,23.8,[  0.  -22.5  23.8],-1,251,251,-1,150.0
+253,6,3,8,False,"(3, '7', False)","(3, '7', False)",0.0,-22.5,27.2,[  0.  -22.5  27.2],-1,252,252,-1,184.28571428571428
+254,7,3,9,False,"(3, '8', False)","(3, '8', False)",0.0,-22.5,30.599999999999998,[  0.  -22.5  30.6],-1,253,253,-1,218.57142857142856
+255,8,3,10,False,"(3, '9', False)","(3, '9', False)",0.0,-22.5,34.0,[  0.  -22.5  34. ],-1,254,254,-1,252.85714285714283
+256,9,3,11,False,"(3, '10', False)","(3, '10', False)",0.0,-22.5,37.4,[  0.  -22.5  37.4],-1,255,255,-1,287.1428571428571
+257,10,3,12,False,"(3, '11', False)","(3, '11', False)",0.0,-22.5,40.8,[  0.  -22.5  40.8],-1,256,256,-1,321.42857142857144
+258,11,3,13,False,"(3, '12', False)","(3, '12', False)",0.0,-22.5,44.199999999999996,[  0.  -22.5  44.2],-1,257,257,-1,355.7142857142857
+259,12,3,14,False,"(3, '13', False)","(3, '13', False)",0.0,-22.5,47.6,[  0.  -22.5  47.6],-1,258,258,-1,390.0
+260,13,3,15,False,"(3, '14', False)","(3, '14', False)",0.0,-22.5,51.0,[  0.  -22.5  51. ],-1,259,259,-1,424.2857142857142
+261,0,3,16,False,-1,"(4, '16', True)",0.0,-22.5,54.4,[  0.  -22.5  54.4],-1,-1,294,-1,458.57142857142856
+262,1,3,17,False,"(3, '16', False)","(3, '16', False)",0.0,-22.5,57.8,[  0.  -22.5  57.8],-1,261,261,-1,492.8571428571429
+263,2,3,18,False,"(3, '17', False)","(3, '17', False)",0.0,-22.5,61.199999999999996,[  0.  -22.5  61.2],-1,262,262,-1,527.1428571428571
+264,3,3,19,False,"(3, '18', False)","(3, '18', False)",0.0,-22.5,64.6,[  0.  -22.5  64.6],-1,263,263,-1,561.4285714285714
+265,4,3,20,False,"(3, '19', False)","(3, '19', False)",0.0,-22.5,68.0,[  0.  -22.5  68. ],-1,264,264,-1,595.7142857142857
+266,5,3,21,False,"(3, '20', False)","(3, '20', False)",0.0,-22.5,71.39999999999999,[  0.  -22.5  71.4],-1,265,265,-1,630.0
+267,6,3,22,False,"(3, '21', False)","(3, '21', False)",0.0,-22.5,74.8,[  0.  -22.5  74.8],-1,266,266,-1,664.2857142857142
+268,7,3,23,False,"(3, '22', False)","(3, '22', False)",0.0,-22.5,78.2,[  0.  -22.5  78.2],-1,267,267,-1,698.5714285714286
+269,8,3,24,False,"(3, '23', False)","(3, '23', False)",0.0,-22.5,81.6,[  0.  -22.5  81.6],-1,268,268,-1,732.8571428571429
+270,9,3,25,False,"(3, '24', False)","(3, '24', False)",0.0,-22.5,85.0,[  0.  -22.5  85. ],-1,269,269,-1,767.1428571428571
+271,10,3,26,False,"(3, '25', False)","(3, '25', False)",0.0,-22.5,88.39999999999999,[  0.  -22.5  88.4],-1,270,270,-1,801.4285714285714
+272,11,3,27,False,"(3, '26', False)","(3, '26', False)",0.0,-22.5,91.8,[  0.  -22.5  91.8],-1,271,271,-1,835.7142857142857
+273,12,3,28,False,"(3, '27', False)","(3, '27', False)",0.0,-22.5,95.2,[  0.  -22.5  95.2],-1,272,272,-1,870.0
+274,13,3,29,False,"(3, '28', False)","(3, '28', False)",0.0,-22.5,98.6,[  0.  -22.5  98.6],-1,273,273,-1,904.2857142857142
+275,14,3,30,False,"(3, '29', False)","(3, '29', False)",0.0,-22.5,102.0,[  0.  -22.5 102. ],-1,274,274,-1,938.5714285714284
+276,15,3,31,False,"(3, '30', False)","(3, '30', False)",0.0,-22.5,105.39999999999999,[  0.  -22.5 105.4],-1,275,275,-1,972.8571428571429
+277,16,3,32,False,"(3, '31', False)","(3, '31', False)",0.0,-22.5,108.8,[  0.  -22.5 108.8],-1,276,276,-1,1007.1428571428571
+278,0,3,37,False,-1,-1,0.0,-22.5,125.8,[  0.  -22.5 125.8],-1,-1,-1,-1,1178.5714285714284
+279,1,3,38,False,"(3, '37', False)","(3, '37', False)",0.0,-22.5,129.2,[  0.  -22.5 129.2],-1,278,278,-1,1212.857142857143
+280,2,3,39,False,"(3, '38', False)","(3, '38', False)",0.0,-22.5,132.6,[  0.  -22.5 132.6],-1,279,279,-1,1247.142857142857
+281,3,3,40,False,"(3, '39', False)","(3, '39', False)",0.0,-22.5,136.0,[  0.  -22.5 136. ],-1,280,280,-1,1281.4285714285713
+282,4,3,41,False,"(3, '40', False)","(3, '40', False)",0.0,-22.5,139.4,[  0.  -22.5 139.4],-1,281,281,-1,1315.7142857142858
+283,0,4,0,True,"(4, '1', True)","(4, '1', True)",19.48557375,-11.25,0.0,[ 19.485573 -11.25       0.      ],-1,284,284,-1,-90.0
+284,1,4,1,True,"(4, '2', True)","(4, '2', True)",19.48557375,-11.25,3.4,[ 19.485573 -11.25       3.4     ],-1,285,285,-1,-55.714285714285715
+285,2,4,2,True,"(4, '3', True)","(4, '3', True)",19.48557375,-11.25,6.8,[ 19.485573 -11.25       6.8     ],-1,286,286,-1,-21.42857142857143
+286,3,4,3,True,-1,-1,19.48557375,-11.25,10.2,[ 19.485573 -11.25      10.2     ],-1,-1,-1,-1,12.857142857142861
+287,0,4,9,True,"(4, '10', True)","(4, '10', True)",19.48557375,-11.25,30.599999999999998,[ 19.485573 -11.25      30.6     ],-1,288,288,-1,218.57142857142856
+288,1,4,10,True,"(4, '11', True)","(4, '11', True)",19.48557375,-11.25,34.0,[ 19.485573 -11.25      34.      ],-1,289,289,-1,252.85714285714283
+289,2,4,11,True,"(4, '12', True)","(4, '12', True)",19.48557375,-11.25,37.4,[ 19.485573 -11.25      37.4     ],-1,290,290,-1,287.1428571428571
+290,3,4,12,True,"(4, '13', True)","(4, '13', True)",19.48557375,-11.25,40.8,[ 19.485573 -11.25      40.8     ],-1,291,291,-1,321.42857142857144
+291,4,4,13,True,"(4, '14', True)","(4, '14', True)",19.48557375,-11.25,44.199999999999996,[ 19.485573 -11.25      44.2     ],-1,292,292,-1,355.7142857142857
+292,5,4,14,True,"(4, '15', True)","(4, '15', True)",19.48557375,-11.25,47.6,[ 19.485573 -11.25      47.6     ],-1,293,293,-1,390.0
+293,6,4,15,True,-1,"(3, '15', False)",19.48557375,-11.25,51.0,[ 19.485573 -11.25      51.      ],-1,-1,260,-1,424.2857142857142
+294,0,4,16,True,"(4, '17', True)","(4, '17', True)",19.48557375,-11.25,54.4,[ 19.485573 -11.25      54.4     ],-1,295,295,-1,458.57142857142856
+295,1,4,17,True,"(4, '18', True)","(4, '18', True)",19.48557375,-11.25,57.8,[ 19.485573 -11.25      57.8     ],-1,296,296,-1,492.8571428571429
+296,2,4,18,True,"(4, '19', True)","(4, '19', True)",19.48557375,-11.25,61.199999999999996,[ 19.485573 -11.25      61.2     ],-1,297,297,-1,527.1428571428571
+297,3,4,19,True,"(4, '20', True)","(4, '20', True)",19.48557375,-11.25,64.6,[ 19.485573 -11.25      64.6     ],-1,298,298,-1,561.4285714285714
+298,4,4,20,True,"(4, '21', True)","(4, '21', True)",19.48557375,-11.25,68.0,[ 19.485573 -11.25      68.      ],-1,299,299,-1,595.7142857142857
+299,5,4,21,True,"(4, '22', True)","(4, '22', True)",19.48557375,-11.25,71.39999999999999,[ 19.485573 -11.25      71.4     ],-1,300,300,-1,630.0
+300,6,4,22,True,"(4, '23', True)","(4, '23', True)",19.48557375,-11.25,74.8,[ 19.485573 -11.25      74.8     ],-1,301,301,-1,664.2857142857142
+301,7,4,23,True,"(4, '24', True)","(4, '24', True)",19.48557375,-11.25,78.2,[ 19.485573 -11.25      78.2     ],-1,302,302,-1,698.5714285714286
+302,8,4,24,True,"(4, '25', True)","(4, '25', True)",19.48557375,-11.25,81.6,[ 19.485573 -11.25      81.6     ],-1,303,303,-1,732.8571428571429
+303,9,4,25,True,"(4, '26', True)","(4, '26', True)",19.48557375,-11.25,85.0,[ 19.485573 -11.25      85.      ],-1,304,304,-1,767.1428571428571
+304,10,4,26,True,"(4, '27', True)","(4, '27', True)",19.48557375,-11.25,88.39999999999999,[ 19.485573 -11.25      88.4     ],-1,305,305,-1,801.4285714285714
+305,11,4,27,True,"(4, '28', True)","(4, '28', True)",19.48557375,-11.25,91.8,[ 19.485573 -11.25      91.8     ],-1,306,306,-1,835.7142857142857
+306,12,4,28,True,"(4, '29', True)","(4, '29', True)",19.48557375,-11.25,95.2,[ 19.485573 -11.25      95.2     ],-1,307,307,-1,870.0
+307,13,4,29,True,"(4, '30', True)","(4, '30', True)",19.48557375,-11.25,98.6,[ 19.485573 -11.25      98.6     ],-1,308,308,-1,904.2857142857142
+308,14,4,30,True,"(4, '31', True)","(4, '31', True)",19.48557375,-11.25,102.0,[ 19.485573 -11.25     102.      ],-1,309,309,-1,938.5714285714284
+309,15,4,31,True,"(4, '32', True)","(4, '32', True)",19.48557375,-11.25,105.39999999999999,[ 19.485573 -11.25     105.4     ],-1,310,310,-1,972.8571428571429
+310,16,4,32,True,"(4, '33', True)","(4, '33', True)",19.48557375,-11.25,108.8,[ 19.485573 -11.25     108.8     ],-1,311,311,-1,1007.1428571428571
+311,17,4,33,True,"(4, '34', True)","(4, '34', True)",19.48557375,-11.25,112.2,[ 19.485573 -11.25     112.2     ],-1,312,312,-1,1041.4285714285713
+312,18,4,34,True,"(4, '35', True)","(4, '35', True)",19.48557375,-11.25,115.6,[ 19.485573 -11.25     115.6     ],-1,313,313,-1,1075.7142857142858
+313,19,4,35,True,"(4, '36', True)","(4, '36', True)",19.48557375,-11.25,119.0,[ 19.485573 -11.25     119.      ],-1,314,314,-1,1110.0
+314,20,4,36,True,"(4, '37', True)","(4, '37', True)",19.48557375,-11.25,122.39999999999999,[ 19.485573 -11.25     122.4     ],-1,315,315,-1,1144.2857142857142
+315,21,4,37,True,"(4, '38', True)","(4, '38', True)",19.48557375,-11.25,125.8,[ 19.485573 -11.25     125.8     ],-1,316,316,-1,1178.5714285714284
+316,22,4,38,True,"(4, '39', True)","(4, '39', True)",19.48557375,-11.25,129.2,[ 19.485573 -11.25     129.2     ],-1,317,317,-1,1212.857142857143
+317,23,4,39,True,-1,"(5, '39', False)",19.48557375,-11.25,132.6,[ 19.485573 -11.25     132.6     ],-1,-1,414,-1,1247.142857142857
+318,0,4,9,False,-1,-1,19.48557375,-11.25,30.599999999999998,[ 19.485573 -11.25      30.6     ],-1,-1,-1,-1,218.57142857142856
+319,1,4,10,False,"(4, '9', False)","(4, '9', False)",19.48557375,-11.25,34.0,[ 19.485573 -11.25      34.      ],-1,318,318,-1,252.85714285714283
+320,2,4,11,False,"(4, '10', False)","(4, '10', False)",19.48557375,-11.25,37.4,[ 19.485573 -11.25      37.4     ],-1,319,319,-1,287.1428571428571
+321,3,4,12,False,"(4, '11', False)","(4, '11', False)",19.48557375,-11.25,40.8,[ 19.485573 -11.25      40.8     ],-1,320,320,-1,321.42857142857144
+322,4,4,13,False,"(4, '12', False)","(4, '12', False)",19.48557375,-11.25,44.199999999999996,[ 19.485573 -11.25      44.2     ],-1,321,321,-1,355.7142857142857
+323,5,4,14,False,"(4, '13', False)","(4, '13', False)",19.48557375,-11.25,47.6,[ 19.485573 -11.25      47.6     ],-1,322,322,-1,390.0
+324,6,4,15,False,"(4, '14', False)","(4, '14', False)",19.48557375,-11.25,51.0,[ 19.485573 -11.25      51.      ],-1,323,323,-1,424.2857142857142
+325,7,4,16,False,"(4, '15', False)","(4, '15', False)",19.48557375,-11.25,54.4,[ 19.485573 -11.25      54.4     ],-1,324,324,-1,458.57142857142856
+326,8,4,17,False,"(4, '16', False)","(4, '16', False)",19.48557375,-11.25,57.8,[ 19.485573 -11.25      57.8     ],-1,325,325,-1,492.8571428571429
+327,9,4,18,False,"(4, '17', False)","(4, '17', False)",19.48557375,-11.25,61.199999999999996,[ 19.485573 -11.25      61.2     ],-1,326,326,-1,527.1428571428571
+328,10,4,19,False,"(4, '18', False)","(4, '18', False)",19.48557375,-11.25,64.6,[ 19.485573 -11.25      64.6     ],-1,327,327,-1,561.4285714285714
+329,11,4,20,False,"(4, '19', False)","(4, '19', False)",19.48557375,-11.25,68.0,[ 19.485573 -11.25      68.      ],-1,328,328,-1,595.7142857142857
+330,0,4,21,False,-1,"(3, '21', True)",19.48557375,-11.25,71.39999999999999,[ 19.485573 -11.25      71.4     ],-1,-1,233,-1,630.0
+331,1,4,22,False,"(4, '21', False)","(4, '21', False)",19.48557375,-11.25,74.8,[ 19.485573 -11.25      74.8     ],-1,330,330,-1,664.2857142857142
+332,2,4,23,False,"(4, '22', False)","(4, '22', False)",19.48557375,-11.25,78.2,[ 19.485573 -11.25      78.2     ],-1,331,331,-1,698.5714285714286
+333,3,4,24,False,"(4, '23', False)","(4, '23', False)",19.48557375,-11.25,81.6,[ 19.485573 -11.25      81.6     ],-1,332,332,-1,732.8571428571429
+334,4,4,25,False,"(4, '24', False)","(4, '24', False)",19.48557375,-11.25,85.0,[ 19.485573 -11.25      85.      ],-1,333,333,-1,767.1428571428571
+335,5,4,26,False,"(4, '25', False)","(4, '25', False)",19.48557375,-11.25,88.39999999999999,[ 19.485573 -11.25      88.4     ],-1,334,334,-1,801.4285714285714
+336,6,4,27,False,"(4, '26', False)","(4, '26', False)",19.48557375,-11.25,91.8,[ 19.485573 -11.25      91.8     ],-1,335,335,-1,835.7142857142857
+337,7,4,28,False,"(4, '27', False)","(4, '27', False)",19.48557375,-11.25,95.2,[ 19.485573 -11.25      95.2     ],-1,336,336,-1,870.0
+338,8,4,29,False,"(4, '28', False)","(4, '28', False)",19.48557375,-11.25,98.6,[ 19.485573 -11.25      98.6     ],-1,337,337,-1,904.2857142857142
+339,9,4,30,False,"(4, '29', False)","(4, '29', False)",19.48557375,-11.25,102.0,[ 19.485573 -11.25     102.      ],-1,338,338,-1,938.5714285714284
+340,10,4,31,False,"(4, '30', False)","(4, '30', False)",19.48557375,-11.25,105.39999999999999,[ 19.485573 -11.25     105.4     ],-1,339,339,-1,972.8571428571429
+341,11,4,32,False,"(4, '31', False)","(4, '31', False)",19.48557375,-11.25,108.8,[ 19.485573 -11.25     108.8     ],-1,340,340,-1,1007.1428571428571
+342,12,4,33,False,"(4, '32', False)","(4, '32', False)",19.48557375,-11.25,112.2,[ 19.485573 -11.25     112.2     ],-1,341,341,-1,1041.4285714285713
+343,13,4,34,False,"(4, '33', False)","(4, '33', False)",19.48557375,-11.25,115.6,[ 19.485573 -11.25     115.6     ],-1,342,342,-1,1075.7142857142858
+344,14,4,35,False,"(4, '34', False)","(4, '34', False)",19.48557375,-11.25,119.0,[ 19.485573 -11.25     119.      ],-1,343,343,-1,1110.0
+345,15,4,36,False,"(4, '35', False)","(4, '35', False)",19.48557375,-11.25,122.39999999999999,[ 19.485573 -11.25     122.4     ],-1,344,344,-1,1144.2857142857142
+346,16,4,37,False,"(4, '36', False)","(4, '36', False)",19.48557375,-11.25,125.8,[ 19.485573 -11.25     125.8     ],-1,345,345,-1,1178.5714285714284
+347,17,4,38,False,"(4, '37', False)","(4, '37', False)",19.48557375,-11.25,129.2,[ 19.485573 -11.25     129.2     ],-1,346,346,-1,1212.857142857143
+348,18,4,39,False,"(4, '38', False)","(4, '38', False)",19.48557375,-11.25,132.6,[ 19.485573 -11.25     132.6     ],-1,347,347,-1,1247.142857142857
+349,0,5,9,True,"(5, '10', True)","(5, '10', True)",19.48557375,11.25,30.599999999999998,[19.485573 11.25     30.6     ],-1,350,350,-1,218.57142857142856
+350,1,5,10,True,"(5, '11', True)","(5, '11', True)",19.48557375,11.25,34.0,[19.485573 11.25     34.      ],-1,351,351,-1,252.85714285714283
+351,2,5,11,True,"(5, '12', True)","(5, '12', True)",19.48557375,11.25,37.4,[19.485573 11.25     37.4     ],-1,352,352,-1,287.1428571428571
+352,3,5,12,True,"(5, '13', True)","(5, '13', True)",19.48557375,11.25,40.8,[19.485573 11.25     40.8     ],-1,353,353,-1,321.42857142857144
+353,4,5,13,True,"(5, '14', True)","(5, '14', True)",19.48557375,11.25,44.199999999999996,[19.485573 11.25     44.2     ],-1,354,354,-1,355.7142857142857
+354,5,5,14,True,"(5, '15', True)","(5, '15', True)",19.48557375,11.25,47.6,[19.485573 11.25     47.6     ],-1,355,355,-1,390.0
+355,6,5,15,True,"(5, '16', True)","(5, '16', True)",19.48557375,11.25,51.0,[19.485573 11.25     51.      ],-1,356,356,-1,424.2857142857142
+356,7,5,16,True,"(5, '17', True)","(5, '17', True)",19.48557375,11.25,54.4,[19.485573 11.25     54.4     ],-1,357,357,-1,458.57142857142856
+357,8,5,17,True,"(5, '18', True)","(5, '18', True)",19.48557375,11.25,57.8,[19.485573 11.25     57.8     ],-1,358,358,-1,492.8571428571429
+358,9,5,18,True,"(5, '19', True)","(5, '19', True)",19.48557375,11.25,61.199999999999996,[19.485573 11.25     61.2     ],-1,359,359,-1,527.1428571428571
+359,10,5,19,True,"(5, '20', True)","(5, '20', True)",19.48557375,11.25,64.6,[19.485573 11.25     64.6     ],-1,360,360,-1,561.4285714285714
+360,11,5,20,True,"(5, '21', True)","(5, '21', True)",19.48557375,11.25,68.0,[19.485573 11.25     68.      ],-1,361,361,-1,595.7142857142857
+361,12,5,21,True,"(5, '22', True)","(5, '22', True)",19.48557375,11.25,71.39999999999999,[19.485573 11.25     71.4     ],-1,362,362,-1,630.0
+362,13,5,22,True,"(5, '23', True)","(5, '23', True)",19.48557375,11.25,74.8,[19.485573 11.25     74.8     ],-1,363,363,-1,664.2857142857142
+363,14,5,23,True,"(5, '24', True)","(5, '24', True)",19.48557375,11.25,78.2,[19.485573 11.25     78.2     ],-1,364,364,-1,698.5714285714286
+364,15,5,24,True,"(5, '25', True)","(5, '25', True)",19.48557375,11.25,81.6,[19.485573 11.25     81.6     ],-1,365,365,-1,732.8571428571429
+365,16,5,25,True,"(5, '26', True)","(5, '26', True)",19.48557375,11.25,85.0,[19.485573 11.25     85.      ],-1,366,366,-1,767.1428571428571
+366,17,5,26,True,"(5, '27', True)","(5, '27', True)",19.48557375,11.25,88.39999999999999,[19.485573 11.25     88.4     ],-1,367,367,-1,801.4285714285714
+367,18,5,27,True,-1,"(0, '27', False)",19.48557375,11.25,91.8,[19.485573 11.25     91.8     ],-1,-1,60,-1,835.7142857142857
+368,0,5,28,True,"(5, '29', True)","(5, '29', True)",19.48557375,11.25,95.2,[19.485573 11.25     95.2     ],-1,369,369,-1,870.0
+369,1,5,29,True,"(5, '30', True)","(5, '30', True)",19.48557375,11.25,98.6,[19.485573 11.25     98.6     ],-1,370,370,-1,904.2857142857142
+370,2,5,30,True,"(5, '31', True)","(5, '31', True)",19.48557375,11.25,102.0,[ 19.485573  11.25     102.      ],-1,371,371,-1,938.5714285714284
+371,3,5,31,True,"(5, '32', True)","(5, '32', True)",19.48557375,11.25,105.39999999999999,[ 19.485573  11.25     105.4     ],-1,372,372,-1,972.8571428571429
+372,4,5,32,True,"(5, '33', True)","(5, '33', True)",19.48557375,11.25,108.8,[ 19.485573  11.25     108.8     ],-1,373,373,-1,1007.1428571428571
+373,5,5,33,True,"(5, '34', True)","(5, '34', True)",19.48557375,11.25,112.2,[ 19.485573  11.25     112.2     ],-1,374,374,-1,1041.4285714285713
+374,6,5,34,True,"(5, '35', True)","(5, '35', True)",19.48557375,11.25,115.6,[ 19.485573  11.25     115.6     ],-1,375,375,-1,1075.7142857142858
+375,7,5,35,True,"(5, '36', True)","(5, '36', True)",19.48557375,11.25,119.0,[ 19.485573  11.25     119.      ],-1,376,376,-1,1110.0
+376,8,5,36,True,"(5, '37', True)","(5, '37', True)",19.48557375,11.25,122.39999999999999,[ 19.485573  11.25     122.4     ],-1,377,377,-1,1144.2857142857142
+377,9,5,37,True,"(5, '38', True)","(5, '38', True)",19.48557375,11.25,125.8,[ 19.485573  11.25     125.8     ],-1,378,378,-1,1178.5714285714284
+378,10,5,38,True,"(5, '39', True)","(5, '39', True)",19.48557375,11.25,129.2,[ 19.485573  11.25     129.2     ],-1,379,379,-1,1212.857142857143
+379,11,5,39,True,-1,-1,19.48557375,11.25,132.6,[ 19.485573  11.25     132.6     ],-1,-1,-1,-1,1247.142857142857
+380,0,5,0,False,-1,-1,19.48557375,11.25,0.0,[19.485573 11.25      0.      ],-1,-1,-1,-1,-90.0
+381,1,5,1,False,"(5, '0', False)","(5, '0', False)",19.48557375,11.25,3.4,[19.485573 11.25      3.4     ],-1,380,380,-1,-55.714285714285715
+382,2,5,2,False,"(5, '1', False)","(5, '1', False)",19.48557375,11.25,6.8,[19.485573 11.25      6.8     ],-1,381,381,-1,-21.42857142857143
+383,3,5,3,False,"(5, '2', False)","(5, '2', False)",19.48557375,11.25,10.2,[19.485573 11.25     10.2     ],-1,382,382,-1,12.857142857142861
+384,0,5,9,False,-1,"(4, '9', True)",19.48557375,11.25,30.599999999999998,[19.485573 11.25     30.6     ],-1,-1,287,-1,218.57142857142856
+385,1,5,10,False,"(5, '9', False)","(5, '9', False)",19.48557375,11.25,34.0,[19.485573 11.25     34.      ],-1,384,384,-1,252.85714285714283
+386,2,5,11,False,"(5, '10', False)","(5, '10', False)",19.48557375,11.25,37.4,[19.485573 11.25     37.4     ],-1,385,385,-1,287.1428571428571
+387,3,5,12,False,"(5, '11', False)","(5, '11', False)",19.48557375,11.25,40.8,[19.485573 11.25     40.8     ],-1,386,386,-1,321.42857142857144
+388,4,5,13,False,"(5, '12', False)","(5, '12', False)",19.48557375,11.25,44.199999999999996,[19.485573 11.25     44.2     ],-1,387,387,-1,355.7142857142857
+389,5,5,14,False,"(5, '13', False)","(5, '13', False)",19.48557375,11.25,47.6,[19.485573 11.25     47.6     ],-1,388,388,-1,390.0
+390,6,5,15,False,"(5, '14', False)","(5, '14', False)",19.48557375,11.25,51.0,[19.485573 11.25     51.      ],-1,389,389,-1,424.2857142857142
+391,7,5,16,False,"(5, '15', False)","(5, '15', False)",19.48557375,11.25,54.4,[19.485573 11.25     54.4     ],-1,390,390,-1,458.57142857142856
+392,8,5,17,False,"(5, '16', False)","(5, '16', False)",19.48557375,11.25,57.8,[19.485573 11.25     57.8     ],-1,391,391,-1,492.8571428571429
+393,9,5,18,False,"(5, '17', False)","(5, '17', False)",19.48557375,11.25,61.199999999999996,[19.485573 11.25     61.2     ],-1,392,392,-1,527.1428571428571
+394,10,5,19,False,"(5, '18', False)","(5, '18', False)",19.48557375,11.25,64.6,[19.485573 11.25     64.6     ],-1,393,393,-1,561.4285714285714
+395,11,5,20,False,"(5, '19', False)","(5, '19', False)",19.48557375,11.25,68.0,[19.485573 11.25     68.      ],-1,394,394,-1,595.7142857142857
+396,12,5,21,False,"(5, '20', False)","(5, '20', False)",19.48557375,11.25,71.39999999999999,[19.485573 11.25     71.4     ],-1,395,395,-1,630.0
+397,13,5,22,False,"(5, '21', False)","(5, '21', False)",19.48557375,11.25,74.8,[19.485573 11.25     74.8     ],-1,396,396,-1,664.2857142857142
+398,0,5,23,False,-1,-1,19.48557375,11.25,78.2,[19.485573 11.25     78.2     ],-1,-1,-1,-1,698.5714285714286
+399,1,5,24,False,"(5, '23', False)","(5, '23', False)",19.48557375,11.25,81.6,[19.485573 11.25     81.6     ],-1,398,398,-1,732.8571428571429
+400,2,5,25,False,"(5, '24', False)","(5, '24', False)",19.48557375,11.25,85.0,[19.485573 11.25     85.      ],-1,399,399,-1,767.1428571428571
+401,3,5,26,False,"(5, '25', False)","(5, '25', False)",19.48557375,11.25,88.39999999999999,[19.485573 11.25     88.4     ],-1,400,400,-1,801.4285714285714
+402,4,5,27,False,"(5, '26', False)","(5, '26', False)",19.48557375,11.25,91.8,[19.485573 11.25     91.8     ],-1,401,401,-1,835.7142857142857
+403,5,5,28,False,"(5, '27', False)","(5, '27', False)",19.48557375,11.25,95.2,[19.485573 11.25     95.2     ],-1,402,402,-1,870.0
+404,6,5,29,False,"(5, '28', False)","(5, '28', False)",19.48557375,11.25,98.6,[19.485573 11.25     98.6     ],-1,403,403,-1,904.2857142857142
+405,7,5,30,False,"(5, '29', False)","(5, '29', False)",19.48557375,11.25,102.0,[ 19.485573  11.25     102.      ],-1,404,404,-1,938.5714285714284
+406,8,5,31,False,"(5, '30', False)","(5, '30', False)",19.48557375,11.25,105.39999999999999,[ 19.485573  11.25     105.4     ],-1,405,405,-1,972.8571428571429
+407,9,5,32,False,"(5, '31', False)","(5, '31', False)",19.48557375,11.25,108.8,[ 19.485573  11.25     108.8     ],-1,406,406,-1,1007.1428571428571
+408,10,5,33,False,"(5, '32', False)","(5, '32', False)",19.48557375,11.25,112.2,[ 19.485573  11.25     112.2     ],-1,407,407,-1,1041.4285714285713
+409,11,5,34,False,"(5, '33', False)","(5, '33', False)",19.48557375,11.25,115.6,[ 19.485573  11.25     115.6     ],-1,408,408,-1,1075.7142857142858
+410,12,5,35,False,"(5, '34', False)","(5, '34', False)",19.48557375,11.25,119.0,[ 19.485573  11.25     119.      ],-1,409,409,-1,1110.0
+411,13,5,36,False,"(5, '35', False)","(5, '35', False)",19.48557375,11.25,122.39999999999999,[ 19.485573  11.25     122.4     ],-1,410,410,-1,1144.2857142857142
+412,14,5,37,False,"(5, '36', False)","(5, '36', False)",19.48557375,11.25,125.8,[ 19.485573  11.25     125.8     ],-1,411,411,-1,1178.5714285714284
+413,15,5,38,False,"(5, '37', False)","(5, '37', False)",19.48557375,11.25,129.2,[ 19.485573  11.25     129.2     ],-1,412,412,-1,1212.857142857143
+414,16,5,39,False,"(5, '38', False)","(5, '38', False)",19.48557375,11.25,132.6,[ 19.485573  11.25     132.6     ],-1,413,413,-1,1247.142857142857
diff --git a/mrdna/readers/segmentmodel_from_cadnano_old.py b/mrdna/readers/test/segmentmodel_from_cadnano_old.py
similarity index 96%
rename from mrdna/readers/segmentmodel_from_cadnano_old.py
rename to mrdna/readers/test/segmentmodel_from_cadnano_old.py
index 55df7ea..599c1d6 100644
--- a/mrdna/readers/segmentmodel_from_cadnano_old.py
+++ b/mrdna/readers/test/segmentmodel_from_cadnano_old.py
@@ -6,11 +6,11 @@ from glob import glob
 import re
 import pandas as pd
 pd.options.mode.chained_assignment = None  # default='warn'
-from .segmentmodel_from_lists import model_from_basepair_stack_3prime
+from ..segmentmodel_from_lists import model_from_basepair_stack_3prime
 
-from ..arbdmodel.coords import readArbdCoords, readAvgArbdCoords, rotationAboutAxis
-from ..segmentmodel import SegmentModel, SingleStrandedSegment, DoubleStrandedSegment
-from ..model.dna_sequence import m13 as m13seq
+from ...arbdmodel.coords import readArbdCoords, readAvgArbdCoords, rotationAboutAxis
+from ...segmentmodel import SegmentModel, SingleStrandedSegment, DoubleStrandedSegment
+from ...model.dna_sequence import m13 as m13seq
 import json
 import re
 
diff --git a/mrdna/readers/test/seq0.txt b/mrdna/readers/test/seq0.txt
new file mode 100644
index 0000000..1ef8d02
--- /dev/null
+++ b/mrdna/readers/test/seq0.txt
@@ -0,0 +1,15 @@
+Start,End,Color,Mod5,Sequence,Mod3,AbstractSequence
+5[3],5[0],#0066cc,,????,,()
+1[41],1[39],#0066cc,,???,,()
+0[38],5[39],#b8056c,,??ATCCCTTATAAATCAAAAGACTGAGAGAGTTG,,"(,)"
+0[23],1[38],#cc01d1,,CCCTTCCGAAATCGGCAAA??,,"(,)"
+3[0],4[9],#cc0000,,??GACTCCAACGTCAACCCCAGTTTGAGGGCGA,,"(,)"
+5[9],0[24],#000000,,AAAACCGTCTATCATGGCCATAG,,"(,)"
+2[34],2[0],#888888,,??TCCTGTTTGATGGTACTATTAAAGAACGTG??,,()
+0[39],0[41],#0066cc,,???,,()
+5[22],5[23],#0066cc,,TGATAGACGGTTTTTCGCCCTTTGACGTTGGAGTCCACGTTCTTTAATAGTGGACTCTTGTTCCAAACTGGAACAACACTCAACCCTATCTCGGGCTATTCTTTTGATTTATAAGGGATTTTGCCGATTTCGGAACCACCATCAAACAGGATTTTCGCCTGCTGGGGCAAACCAGCGTGGACCGCTTGCTGCAACTCTCTCAGGGCCA,,"(,,,,,,,,,,)"
+3[41],3[37],#0066cc,,?????,,()
+1[3],0[2],#16e876,,??TTGGAACAAGAGTCCGGGAGATAGGGTTGAGTGTTGTTCCAGT???,,"(,)"
+2[39],2[41],#0066cc,,???,,()
+4[39],3[34],#888888,,CAGCAAGCGGTCCACGCTGGCAGGCGAAAA??,,"(,)"
+4[0],4[3],#0066cc,,TGAT,,()
diff --git a/mrdna/readers/test/test.ipynb b/mrdna/readers/test/test.ipynb
index f9f7eeb..60ee725 100644
--- a/mrdna/readers/test/test.ipynb
+++ b/mrdna/readers/test/test.ipynb
@@ -2,7 +2,7 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 342,
+   "execution_count": 1,
    "id": "1955acef",
    "metadata": {
     "scrolled": true
@@ -19,10 +19,29 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 343,
+   "execution_count": 2,
    "id": "1a6b8cb2",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "pip3 install termcolor\n"
+     ]
+    },
+    {
+     "ename": "ModuleNotFoundError",
+     "evalue": "No module named 'mrdna'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[2], line 3\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mcadnano\u001b[39;00m\n\u001b[1;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mcadnano\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdocument\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Document\n\u001b[0;32m----> 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmrdna\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01marbdmodel\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcoords\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m readArbdCoords, readAvgArbdCoords, rotationAboutAxis\n",
+      "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'mrdna'"
+     ]
+    }
+   ],
    "source": [
     "import cadnano\n",
     "from cadnano.document import Document\n",
@@ -225,7 +244,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 5,
    "id": "b317d21a",
    "metadata": {},
    "outputs": [
@@ -265,7 +284,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 6,
    "id": "dc7eb261",
    "metadata": {},
    "outputs": [],
@@ -287,7 +306,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 195,
+   "execution_count": 35,
    "id": "1bf753c6",
    "metadata": {},
    "outputs": [],
@@ -334,59 +353,540 @@
     "            for id_num in part.getIdNums():\n",
     "                if part.vh_properties.loc[id_num,'eulerZ'] == 0:\n",
     "                    part.vh_properties.loc[id_num,'eulerZ'] = 360*(6/10.5)\n",
-    "    df=pd.DataFrame(json_data[\"vstrands\"])\n",
-    "    n_df=df.set_index(\"num\")\n",
-    "    return part,n_df\n"
+    "        df=pd.DataFrame(json_data[\"vstrands\"])\n",
+    "        n_df=df.set_index(\"num\")\n",
+    "    else:\n",
+    "        raise(\"Not yet implemented\")\n",
+    "        \n",
+    "    return part,df,decoder\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 358,
-   "id": "9b534b7c",
+   "execution_count": 72,
+   "id": "17ac5a29-3c76-4b8b-9a98-6343bc91e9e8",
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Found cadnano version 2 file\n"
+      "1.json               test.json.oxdna      test2.ipynb\n",
+      "Na_liu.json          test.json.top        test3.ipynb\n",
+      "rest_scaf_col.json   test.sc              test_cad2.5.json\n",
+      "test.ipynb           test.seq.json        test_insert.json\n",
+      "test.json            test.virt2nuc        test_insert_2.5.json\n"
      ]
-    },
+    }
+   ],
+   "source": [
+    "!ls"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 73,
+   "id": "1c3104ac-787f-4d32-9917-1c7111427925",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "with open(\"test_insert_2.5.json\") as ch:\n",
+    "    json_data = json.load(ch)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 77,
+   "id": "9b534b7c",
+   "metadata": {},
+   "outputs": [
     {
      "data": {
       "text/plain": [
-       "NucleicAcidPart_-1_3904"
+       "{'name': 'NaPart1',\n",
+       " 'color': '#0066cc',\n",
+       " 'is_visible': True,\n",
+       " 'active_phos': None,\n",
+       " 'crossover_span_angle': 45,\n",
+       " 'max_vhelix_length': 42,\n",
+       " 'neighbor_active_angle': '',\n",
+       " 'grid_type': 2,\n",
+       " 'virtual_helix_order': [0, 1, 2, 3, 4, 5, 6],\n",
+       " 'is_lattice': True,\n",
+       " '2': 0,\n",
+       " 'virtual_helices': {'name': ['vh0', 'vh1', 'vh2', 'vh3', 'vh4', 'vh5', 'vh6'],\n",
+       "  'is_visible': [True, True, True, True, True, True, True],\n",
+       "  'color': ['#0066cc',\n",
+       "   '#0066cc',\n",
+       "   '#0066cc',\n",
+       "   '#0066cc',\n",
+       "   '#0066cc',\n",
+       "   '#0066cc',\n",
+       "   '#0066cc'],\n",
+       "  'eulerZ': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],\n",
+       "  'neighbor_active_angle': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],\n",
+       "  'neighbors': ['[1, 5]',\n",
+       "   '[0, 2]',\n",
+       "   '[1, 3]',\n",
+       "   '[2, 4]',\n",
+       "   '[3, 5]',\n",
+       "   '[0, 4]',\n",
+       "   '[]'],\n",
+       "  'bases_per_repeat': [21, 21, 21, 21, 21, 21, 21],\n",
+       "  'turns_per_repeat': [2, 2, 2, 2, 2, 2, 2],\n",
+       "  'repeat_hint': [2, 2, 2, 2, 2, 2, 2],\n",
+       "  'helical_pitch': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\n",
+       "  'minor_groove_angle': [180.0, 180.0, 180.0, 180.0, 180.0, 180.0, 180.0],\n",
+       "  'length': [42, 42, 42, 42, 42, 42, 42],\n",
+       "  'z': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]},\n",
+       " 'origins': [[7.7942295, 9.0, 0.0],\n",
+       "  [5.845672125, 7.875, 0.0],\n",
+       "  [5.845672125, 5.625, 0.0],\n",
+       "  [7.7942295, 4.5, 0.0],\n",
+       "  [9.742786875, 5.625, 0.0],\n",
+       "  [9.742786875, 7.875, 0.0],\n",
+       "  [-13.639901625, -1.125, 0.0]],\n",
+       " 'directions': [[0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0]],\n",
+       " 'vh_list': [[0, 42], [1, 42], [2, 42], [3, 42], [4, 42], [5, 42], [6, 42]],\n",
+       " 'strands': {'indices': [[[[5, 36], [39, 41]],\n",
+       "    [[2, 20], [21, 23], [24, 27], [28, 38]]],\n",
+       "   [[[3, 20], [21, 38]], [[5, 18], [19, 36], [39, 41]]],\n",
+       "   [[[2, 18], [19, 32], [39, 41]], [[0, 34]]],\n",
+       "   [[[0, 20], [21, 34]], [[2, 15], [16, 32], [37, 41]]],\n",
+       "   [[[0, 3], [9, 15], [16, 39]], [[9, 20], [21, 39]]],\n",
+       "   [[[9, 27], [28, 39]], [[0, 3], [9, 22], [23, 39]]],\n",
+       "   [[[1, 31]], [[1, 31]]]],\n",
+       "  'properties': [[['#0066cc', '#0066cc'],\n",
+       "    ['#16e876', '#cc01d1', '#000000', '#b8056c']],\n",
+       "   [['#16e876', '#cc01d1'], ['#0066cc', '#0066cc', '#0066cc']],\n",
+       "   [['#0066cc', '#0066cc', '#0066cc'], ['#888888']],\n",
+       "   [['#cc0000', '#888888'], ['#0066cc', '#0066cc', '#0066cc']],\n",
+       "   [['#0066cc', '#0066cc', '#0066cc'], ['#cc0000', '#888888']],\n",
+       "   [['#000000', '#b8056c'], ['#0066cc', '#0066cc', '#0066cc']],\n",
+       "   [['#0066cc'], ['#0066cc']]]},\n",
+       " 'insertions': [[0, 13, 10],\n",
+       "  [0, 29, 11],\n",
+       "  [1, 10, 1],\n",
+       "  [2, 11, -1],\n",
+       "  [3, 28, -1]],\n",
+       " 'xovers': [[0, True, 36, 1, False, 36],\n",
+       "  [0, False, 21, 1, True, 21],\n",
+       "  [0, False, 28, 5, True, 28],\n",
+       "  [1, True, 20, 0, False, 20],\n",
+       "  [1, False, 5, 0, True, 5],\n",
+       "  [1, False, 19, 2, True, 19],\n",
+       "  [2, True, 18, 1, False, 18],\n",
+       "  [2, True, 32, 3, False, 32],\n",
+       "  [3, True, 20, 4, False, 20],\n",
+       "  [3, False, 2, 2, True, 2],\n",
+       "  [3, False, 16, 4, True, 16],\n",
+       "  [4, True, 15, 3, False, 15],\n",
+       "  [4, True, 39, 5, False, 39],\n",
+       "  [4, False, 21, 3, True, 21],\n",
+       "  [5, True, 27, 0, False, 27],\n",
+       "  [5, False, 9, 4, True, 9]],\n",
+       " 'oligos': [{'id_num': 6,\n",
+       "   'idx5p': 31,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo2304',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 31,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 0,\n",
+       "   'idx5p': 23,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo8960',\n",
+       "   'color': '#cc01d1',\n",
+       "   'length': 21,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 5,\n",
+       "   'idx5p': 3,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo9296',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 4,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 5,\n",
+       "   'idx5p': 9,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo1120',\n",
+       "   'color': '#000000',\n",
+       "   'length': 23,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 6,\n",
+       "   'idx5p': 1,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo7728',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 31,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 3,\n",
+       "   'idx5p': 41,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo4848',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 5,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 2,\n",
+       "   'idx5p': 39,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo3552',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 3,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 3,\n",
+       "   'idx5p': 0,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo7008',\n",
+       "   'color': '#cc0000',\n",
+       "   'length': 33,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 4,\n",
+       "   'idx5p': 0,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo5696',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 4,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 4,\n",
+       "   'idx5p': 39,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo7856',\n",
+       "   'color': '#888888',\n",
+       "   'length': 32,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 1,\n",
+       "   'idx5p': 41,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo6016',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 3,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 0,\n",
+       "   'idx5p': 38,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo4560',\n",
+       "   'color': '#b8056c',\n",
+       "   'length': 34,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 0,\n",
+       "   'idx5p': 39,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo5504',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 3,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 5,\n",
+       "   'idx5p': 22,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo3488',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 208,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 1,\n",
+       "   'idx5p': 3,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo1648',\n",
+       "   'color': '#16e876',\n",
+       "   'length': 48,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 2,\n",
+       "   'idx5p': 34,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo1536',\n",
+       "   'color': '#888888',\n",
+       "   'length': 34,\n",
+       "   'is_visible': True}],\n",
+       " 'instance_properties': [{'slice:position': [0.0, 0.0],\n",
+       "   'grid:position': [0.0, 0.0],\n",
+       "   'path:position': [0.0, 0.0]}],\n",
+       " 'uuid': '217c2ce287e943ca8d0e8cde1ffa3291'}"
       ]
      },
-     "execution_count": 358,
+     "execution_count": 77,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "p,f=read_json_file(\"test.json\")\n",
-    "p"
+    "s=json_data[\"parts\"][0]\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 439,
+   "execution_count": 80,
+   "id": "be6cf774-3ef7-464c-8f34-9877e73a16d0",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[[[5, 36], [39, 41]], [[2, 20], [21, 23], [24, 27], [28, 38]]]"
+      ]
+     },
+     "execution_count": 80,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s[\"strands\"][\"indices\"][0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 71,
+   "id": "6ec811a1-297b-4782-827e-d7c8eebb5daa",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<fwd_StrandSet(2)>.<Strand(39, 41)>"
+      ]
+     },
+     "execution_count": 71,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s=[i for i in part.oligos()]\n",
+    "l=s[0]\n",
+    "l.strand3p()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 68,
+   "id": "188d4ed0-1664-44f1-8318-f11f4fd0e0bd",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "AttributeError",
+     "evalue": "'NucleicAcidPart' object has no attribute 'strand3p'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[68], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mpart\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstrand3p\u001b[49m\n",
+      "\u001b[0;31mAttributeError\u001b[0m: 'NucleicAcidPart' object has no attribute 'strand3p'"
+     ]
+    }
+   ],
+   "source": [
+    "part.strand3p"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 53,
+   "id": "6e2bd586-1f68-44d1-982d-93837c64e616",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "([(5, 36), (39, 41)], ['#0066cc', '#0066cc'])"
+      ]
+     },
+     "execution_count": 53,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fwd,rev=part.getStrandSets(0)\n",
+    "x=[]\n",
+    "fwd.dump(x)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
    "id": "cbb83c93",
    "metadata": {},
+   "outputs": [],
+   "source": [
+    "n=dict(json_data)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "id": "7700a744-858d-4f83-b3be-fd7abb67ae76",
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "NucleicAcidPart_-1_3904"
+       "{'name': 'NaPart1',\n",
+       " 'color': '#0066cc',\n",
+       " 'is_visible': True,\n",
+       " 'active_phos': None,\n",
+       " 'crossover_span_angle': 45,\n",
+       " 'max_vhelix_length': 42,\n",
+       " 'neighbor_active_angle': '',\n",
+       " 'grid_type': 2,\n",
+       " 'virtual_helix_order': [0, 1, 2, 3, 4, 5],\n",
+       " 'is_lattice': True,\n",
+       " 'virtual_helices': {'name': ['vh0', 'vh1', 'vh2', 'vh3', 'vh4', 'vh5'],\n",
+       "  'is_visible': [True, True, True, True, True, True],\n",
+       "  'color': ['#0066cc', '#0066cc', '#0066cc', '#0066cc', '#0066cc', '#0066cc'],\n",
+       "  'eulerZ': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],\n",
+       "  'neighbor_active_angle': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0],\n",
+       "  'neighbors': ['[1, 5]', '[0, 2]', '[1, 3]', '[2, 4]', '[3, 5]', '[0, 4]'],\n",
+       "  'bases_per_repeat': [21, 21, 21, 21, 21, 21],\n",
+       "  'turns_per_repeat': [2, 2, 2, 2, 2, 2],\n",
+       "  'repeat_hint': [2, 2, 2, 2, 2, 2],\n",
+       "  'helical_pitch': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0],\n",
+       "  'minor_groove_angle': [180.0, 180.0, 180.0, 180.0, 180.0, 180.0],\n",
+       "  'length': [42, 42, 42, 42, 42, 42],\n",
+       "  'z': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]},\n",
+       " 'origins': [[-1.948557375, 1.125, 0.0],\n",
+       "  [0.0, 2.25, 0.0],\n",
+       "  [1.948557375, 1.125, 0.0],\n",
+       "  [1.948557375, -1.125, 0.0],\n",
+       "  [0.0, -2.25, 0.0],\n",
+       "  [-1.948557375, -1.125, 0.0]],\n",
+       " 'directions': [[0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0],\n",
+       "  [0.0, 0.0, 1.0]],\n",
+       " 'vh_list': [[0, 42], [1, 42], [2, 42], [3, 42], [4, 42], [5, 42]],\n",
+       " 'strands': {'indices': [[[[0, 2], [3, 20], [21, 35]], []],\n",
+       "   [[], [[0, 20], [21, 41]]],\n",
+       "   [[[0, 23], [24, 41]], []],\n",
+       "   [[], [[0, 9], [10, 23], [24, 30], [31, 41]]],\n",
+       "   [[[0, 9], [10, 30], [31, 41]], []],\n",
+       "   [[], [[0, 2], [3, 35], [36, 41]]]],\n",
+       "  'properties': [[['#0066cc', '#f7931e', '#f7931e'], []],\n",
+       "   [[], ['#f7931e', '#f7931e']],\n",
+       "   [['#f7931e', '#f7931e'], []],\n",
+       "   [[], ['#0066cc', '#f7931e', '#f7931e', '#0066cc']],\n",
+       "   [['#0066cc', '#f7931e', '#0066cc'], []],\n",
+       "   [[], ['#333333', '#f7931e', '#0066cc']]]},\n",
+       " 'insertions': [],\n",
+       " 'xovers': [[0, True, 20, 1, False, 20],\n",
+       "  [0, True, 35, 5, False, 35],\n",
+       "  [1, False, 0, 2, True, 0],\n",
+       "  [1, False, 21, 0, True, 21],\n",
+       "  [2, True, 23, 3, False, 23],\n",
+       "  [2, True, 41, 1, False, 41],\n",
+       "  [3, False, 10, 4, True, 10],\n",
+       "  [3, False, 24, 2, True, 24],\n",
+       "  [3, False, 31, 4, True, 31],\n",
+       "  [4, True, 9, 3, False, 9],\n",
+       "  [4, True, 30, 3, False, 30],\n",
+       "  [5, False, 3, 0, True, 3]],\n",
+       " 'oligos': [{'id_num': 4,\n",
+       "   'idx5p': 0,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo3632',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 20,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 3,\n",
+       "   'idx5p': 30,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': True,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo8000',\n",
+       "   'color': '#f7931e',\n",
+       "   'length': 192,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 3,\n",
+       "   'idx5p': 41,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo0160',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 22,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 5,\n",
+       "   'idx5p': 41,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo7152',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 6,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 0,\n",
+       "   'idx5p': 0,\n",
+       "   'is_5p_fwd': True,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo8896',\n",
+       "   'color': '#0066cc',\n",
+       "   'length': 3,\n",
+       "   'is_visible': True},\n",
+       "  {'id_num': 5,\n",
+       "   'idx5p': 2,\n",
+       "   'is_5p_fwd': False,\n",
+       "   'is_circular': False,\n",
+       "   'sequence': None,\n",
+       "   'name': 'oligo1168',\n",
+       "   'color': '#333333',\n",
+       "   'length': 3,\n",
+       "   'is_visible': True}],\n",
+       " 'instance_properties': [{'slice:position': [0.0, 0.0],\n",
+       "   'grid:position': [0.0, 0.0],\n",
+       "   'path:position': [-12.994158258098764, -4.331386086032921]}],\n",
+       " 'uuid': '7029b213616f4ab5a1adcbf0d3a59edb'}"
       ]
      },
-     "execution_count": 439,
+     "execution_count": 33,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "p"
+    "s=n[\"parts\"][0]\n",
+    "s"
    ]
   },
   {
@@ -891,7 +1391,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "def mrdna_model_from_cadnano(json_data,**model_parameters):\n",
+    "def mrdna_model_from_cadnano_v2(json_data,**model_parameters):\n",
     "    part,vslist=decode_cadnano_part(json_data)\n",
     "    props = part.getModelProperties().copy()\n",
     "\n",
@@ -3713,7 +4213,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -3727,7 +4227,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.18"
+   "version": "3.8.19"
   }
  },
  "nbformat": 4,
diff --git a/mrdna/readers/test/test.sc b/mrdna/readers/test/test.sc
new file mode 100644
index 0000000..4865197
--- /dev/null
+++ b/mrdna/readers/test/test.sc
@@ -0,0 +1,121 @@
+{
+  "version": "0.19.3",
+  "grid": "honeycomb",
+  "helices": [
+    {"grid_position": [16, 12]},
+    {"grid_position": [15, 12]},
+    {"grid_position": [15, 13]},
+    {"grid_position": [16, 13]},
+    {"grid_position": [17, 13]},
+    {"grid_position": [17, 12]}
+  ],
+  "strands": [
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 5, "forward": false, "start": 9, "end": 23},
+        {"helix": 4, "forward": true, "start": 9, "end": 16},
+        {"helix": 3, "forward": false, "start": 2, "end": 16},
+        {"helix": 2, "forward": true, "start": 2, "end": 19},
+        {"helix": 1, "forward": false, "start": 5, "end": 19},
+        {"helix": 0, "forward": true, "start": 5, "end": 37},
+        {"helix": 1, "forward": false, "start": 19, "end": 37},
+        {"helix": 2, "forward": true, "start": 19, "end": 33},
+        {"helix": 3, "forward": false, "start": 16, "end": 33},
+        {"helix": 4, "forward": true, "start": 16, "end": 40},
+        {"helix": 5, "forward": false, "start": 23, "end": 40}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 0, "forward": true, "start": 39, "end": 42}
+      ]
+    },
+    {
+      "color": "#cc0000",
+      "domains": [
+        {"helix": 1, "forward": true, "start": 3, "end": 21},
+        {"helix": 0, "forward": false, "start": 2, "end": 21}
+      ]
+    },
+    {
+      "color": "#b8056c",
+      "domains": [
+        {"helix": 0, "forward": false, "start": 21, "end": 24},
+        {"helix": 1, "forward": true, "start": 21, "end": 39}
+      ]
+    },
+    {
+      "color": "#f74308",
+      "domains": [
+        {"helix": 5, "forward": true, "start": 9, "end": 28},
+        {"helix": 0, "forward": false, "start": 24, "end": 28}
+      ]
+    },
+    {
+      "color": "#1700de",
+      "domains": [
+        {"helix": 0, "forward": false, "start": 28, "end": 39},
+        {"helix": 5, "forward": true, "start": 28, "end": 40}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 1, "forward": false, "start": 39, "end": 42}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 2, "forward": true, "start": 39, "end": 42}
+      ]
+    },
+    {
+      "color": "#888888",
+      "domains": [
+        {"helix": 2, "forward": false, "start": 0, "end": 35}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 3, "forward": false, "start": 37, "end": 42}
+      ]
+    },
+    {
+      "color": "#cc0000",
+      "domains": [
+        {"helix": 3, "forward": true, "start": 0, "end": 21},
+        {"helix": 4, "forward": false, "start": 9, "end": 21}
+      ]
+    },
+    {
+      "color": "#888888",
+      "domains": [
+        {"helix": 4, "forward": false, "start": 21, "end": 40},
+        {"helix": 3, "forward": true, "start": 21, "end": 35}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 4, "forward": true, "start": 0, "end": 4}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 5, "forward": false, "start": 0, "end": 4}
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mrdna/readers/test/test2.ipynb b/mrdna/readers/test/test2.ipynb
index 2fcb4e5..ff33e44 100644
--- a/mrdna/readers/test/test2.ipynb
+++ b/mrdna/readers/test/test2.ipynb
@@ -2,35 +2,7554 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": 1,
    "id": "9ea65628",
    "metadata": {},
    "outputs": [
     {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "             _\n",
-      " _____ ___ _| |___ ___\n",
-      "|     |  _| . |   | .'|\n",
-      "|_|_|_|_| |___|_|_|__,|  v1.0a.dev74  \n",
-      "it/its\n",
-      "\n"
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "pip3 install termcolor\n"
+     ]
+    }
+   ],
+   "source": [
+    "\n",
+    "from cadnano.document import Document\n",
+    "import cadnano\n",
+    "import pandas as pd\n",
+    "import json\n",
+    "import re\n",
+    "import numpy as np\n",
+    "pd.options.mode.chained_assignment = None  # default='warn'"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "1aaf81df-7464-4bd0-ace5-3b04e63815ac",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_lattice(part):\n",
+    "    lattice_type = None\n",
+    "    _gt = part.getGridType()\n",
+    "    try:\n",
+    "        lattice_type = _gt.name.lower()\n",
+    "    except:\n",
+    "        if _gt == 1:\n",
+    "            lattice_type = 'square'\n",
+    "        elif _gt == 2:\n",
+    "            lattice_type = 'honeycomb'\n",
+    "        else:\n",
+    "            print(lattice_type)\n",
+    "    return lattice_type\n",
+    "\n",
+    "\n",
+    "def read_json_file(filename):\n",
+    "\n",
+    "    try:\n",
+    "        with open(filename) as ch:\n",
+    "            json_data = json.load(ch)\n",
+    "    except:\n",
+    "        with open(filename) as ch:\n",
+    "            content = \"\"\n",
+    "            for l in ch:\n",
+    "                l = re.sub(r\"'\", r'\"', l)\n",
+    "                # https://stackoverflow.com/questions/4033633/handling-lazy-json-in-python-expecting-property-name\n",
+    "                # l = re.sub(r\"{\\s*(\\w)\", r'{\"\\1', l)\n",
+    "                # l = re.sub(r\",\\s*(\\w)\", r',\"\\1', l)\n",
+    "                # l = re.sub(r\"(\\w):\", r'\\1\":', l)\n",
+    "                content += l+\"\\n\"\n",
+    "            json_data = json.loads(content)\n",
+    "\n",
+    "    try:\n",
+    "        doc = Document()\n",
+    "        cadnano.fileio.v3decode.decode(doc, json_data)\n",
+    "        decoder = 3\n",
+    "    except:\n",
+    "        doc = Document()\n",
+    "        cadnano.fileio.v2decode.decode(doc, json_data)\n",
+    "        decoder = 2\n",
+    "\n",
+    "    parts = [p for p in doc.getParts()]\n",
+    "    if len(parts) != 1:\n",
+    "        raise Exception(\"Only documents containing a single cadnano part are implemented at this time.\")\n",
+    "    part = parts[0]\n",
+    "\n",
+    "    if decoder == 2:\n",
+    "        \"\"\" It seems cadnano2.5 (as of ce6ff019) does not set the EulerZ for square lattice structures correctly, doing so here \"\"\"\n",
+    "        l = get_lattice(part)\n",
+    "        if l == 'square':\n",
+    "            for id_num in part.getIdNums():\n",
+    "                if part.vh_properties.loc[id_num,'eulerZ'] == 0:\n",
+    "                    part.vh_properties.loc[id_num,'eulerZ'] = 360*(6/10.5)\n",
+    "        df=pd.DataFrame(json_data[\"vstrands\"])\n",
+    "        n_df=df.set_index(\"num\")\n",
+    "    return part"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 581,
+   "id": "c72e5d53-f082-4daa-8e36-6d74bfe8802b",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Found cadnano version 2 file\n"
+     ]
+    }
+   ],
+   "source": [
+    "part=read_json_file(\"test.json\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 574,
+   "id": "ff1c4a3c-9dde-4ea1-b360-f5d5d149b7d0",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def gen_id_series(strand,part):\n",
+    "    df=pd.DataFrame(columns=[\"vh\",\"zid\",\"fwd\",\"stack_tuple\",\"threeprime_tuple\",\"x\",\"y\",\"z\"],index=range(strand.totalLength()),dtype=object)\n",
+    "    df[\"vh\"]=strand._id_num\n",
+    "    df[\"fwd\"]=strand.isForward()\n",
+    "    df[\"x\"]=part.getVirtualHelixOrigin(strand._id_num)[0]*10\n",
+    "    df[\"y\"]=part.getVirtualHelixOrigin(strand._id_num)[1]*10\n",
+    "    id_lo,id_hi=strand.idxs()\n",
+    "    zids=[str(i) for i in range(id_lo,id_hi+1)]\n",
+    "    insert_dict={}\n",
+    "    insert_dict=dict([(j.idx(),j.length()) for j in strand.insertionsOnStrand()])\n",
+    "    z=np.arange(id_lo,id_hi+1)\n",
+    "    zids=[str(i) for i in range(id_lo,id_hi+1)]\n",
+    "    z=list(np.arange(id_lo,id_hi+1))\n",
+    "    zids=[str(i) for i in range(id_lo,id_hi+1)]\n",
+    "    for insert_base in insert_dict:\n",
+    "        z_ind=zids.index(str(insert_base))\n",
+    "        z_val=insert_dict[insert_base]\n",
+    "        z_pos_ind=z.index(insert_base)\n",
+    "        zids.pop(z_ind)\n",
+    "        z.pop(z_pos_ind)\n",
+    "        if z_val!=-1:\n",
+    "            #l=[str(insert_base)+\".\"+str(i) for i in range(z_val+1)]\n",
+    "            l=list(range(z_val+1))\n",
+    "            l.reverse()\n",
+    "            for k in l:                \n",
+    "                zids.insert(z_ind,str(insert_base)+\".\"+str(k))\n",
+    "                z.insert(z_pos_ind,insert_base+k/(z_val+1))\n",
+    "    df[\"zid\"]=zids\n",
+    "    df[\"z\"]=np.array(z)*3.4\n",
+    "    \n",
+    "    \n",
+    "    L=[(df[\"vh\"][i],df[\"zid\"][i],df[\"fwd\"][i]) for i in df.index]\n",
+    "    if strand.isForward()==True:\n",
+    "        df[\"stack_tuple\"]=L[1:]+[-1]\n",
+    "        if strand.connection3p() is None:\n",
+    "            df[\"threeprime_tuple\"]=L[1:]+[-1]\n",
+    "        else:\n",
+    "            df[\"threeprime_tuple\"]=L[1:]+[(strand.connection3p().idNum(),str(strand.connection3p().idx5Prime()),strand.connection3p().isForward())]\n",
+    "        \n",
+    "    \n",
+    "    else:\n",
+    "        df[\"stack_tuple\"]=[-1]+L[0:-1]\n",
+    "        if strand.connection3p() is None:\n",
+    "            df[\"threeprime_tuple\"]=[-1]+L[0:-1]\n",
+    "        else:\n",
+    "            df[\"threeprime_tuple\"]=[(strand.connection3p().idNum(),str(strand.connection3p().idx5Prime()),strand.connection3p().isForward())]+L[0:-1]\n",
+    "    ## cadnano 3.1 sequence assign is wrong if there is insertion or deletion. \n",
+    "    df[\"r\"]=[np.array([df[\"x\"][i],df[\"y\"][i],df[\"z\"][i]],dtype=np.float32) for i in df.index]\n",
+    "    \n",
+    "    return [pd.Series(df.loc[i]) for i in df.index]\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 577,
+   "id": "2356f6ba-8109-4ca1-8704-94f3c6a3bebd",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def gen_prop_table(part):\n",
+    "    strand_set=[]\n",
+    "    for i in part.getidNums():\n",
+    "        fwd,rev=part.getStrandSets(i)\n",
+    "        [strand_set.append(i) for i in fwd.strands()]\n",
+    "        [strand_set.append(i) for i in rev.strands()]\n",
+    "    id_series=[]\n",
+    "    for i in strand_set:\n",
+    "        id_series=id_series+gen_id_series(i,part)\n",
+    "    \n",
+    "    nt_prop=pd.DataFrame(id_series)\n",
+    "    nt_prop.reset_index(names=list(range(len(nt_prop.index))),inplace=True)\n",
+    "    nt_prop[\"seq\"]=-1\n",
+    "    ind_tuple=[(nt_prop[\"vh\"][i],nt_prop[\"zid\"][i],nt_prop[\"fwd\"][i]) for i in nt_prop.index]\n",
+    "    stacks=[]\n",
+    "    for i in list(nt_prop[\"stack_tuple\"]):\n",
+    "        if i ==-1:\n",
+    "            stacks.append(i)\n",
+    "        else:\n",
+    "            stacks.append(ind_tuple.index(i))\n",
+    "    nt_prop[\"stack\"]=stacks\n",
+    "    tprime=[]\n",
+    "    for i in list(nt_prop[\"threeprime_tuple\"]):\n",
+    "        if i ==-1:\n",
+    "            tprime.append(i)\n",
+    "        else:\n",
+    "            tprime.append(ind_tuple.index(i))\n",
+    "    nt_prop[\"threeprime\"]=tprime\n",
+    "    vhzid=list(zip(nt_prop[\"vh\"],nt_prop[\"zid\"]))\n",
+    "    nt_prop[\"bp\"]=-1\n",
+    "    nt_prop[\"orientation\"]=[get_helix_angle(part, helix_id, int(float(indices))) for helix_id,indices in vhzid]\n",
+    "    nt_prop=nt_prop.fillna(-1)\n",
+    "    for i in range(int(len(nt_prop.index)/2)):\n",
+    "        try:\n",
+    "            bp1,bp2=(i,1+i+vhzid[i+1:].index(vhzid[i]))\n",
+    "            nt_prop[\"bp\"][bp1]=bp2\n",
+    "            nt_prop[\"bp\"][bp2]=bp1\n",
+    "        except:\n",
+    "            pass\n",
+    "    return nt_prop"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 582,
+   "id": "d1e57e0e-efba-43c9-abdb-9fd7a7d0760b",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "p=gen_prop_table(part)\n",
+    "p.to_csv(\"s.csv\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 573,
+   "id": "e8fb6171-a275-46b6-ac62-ac2867a30739",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([ 97.42787,  78.75   , 122.4    ], dtype=float32)"
+      ]
+     },
+     "execution_count": 573,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "np.array([97.42786875, 78.75, 122.39999999999999],dtype=np.float32)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 572,
+   "id": "675f4a88-18fe-4d6a-bae9-de364e2f4174",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "11"
+      ]
+     },
+     "execution_count": 572,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "strand_set[11].insertionsOnStrand()[0].idx()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 412,
+   "id": "946198dc-c458-481f-a9aa-3dd4b0f86676",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[5, 6, 7, 8, 9, 10, 11, 12, [13.0, 13.1, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8, 13.9], 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, [29.0, 29.09090909090909, 29.181818181818183, 29.272727272727273, 29.363636363636363, 29.454545454545453, 29.545454545454547, 29.636363636363637, 29.727272727272727, 29.818181818181817, 29.90909090909091], 30, 31, 32, 33, 34, 35, 36] ['5', '6', '7', '8', '9', '10', '11', '12', '13.0', '13.1', '13.2', '13.3', '13.4', '13.5', '13.6', '13.7', '13.8', '13.9', '13.10', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29.0', '29.1', '29.2', '29.3', '29.4', '29.5', '29.6', '29.7', '29.8', '29.9', '29.10', '29.11', '30', '31', '32', '33', '34', '35', '36']\n"
+     ]
+    }
+   ],
+   "source": [
+    "zids=[str(i) for i in range(id_lo,id_hi+1)]\n",
+    "z=list(np.arange(id_lo,id_hi+1))\n",
+    "zids=[str(i) for i in range(id_lo,id_hi+1)]\n",
+    "for insert_base in insert_dict:\n",
+    "    z_ind=zids.index(str(insert_base))\n",
+    "    z_val=insert_dict[insert_base]\n",
+    "    z_pos_ind=z.index(insert_base)\n",
+    "    zids.pop(z_ind)\n",
+    "    if z_val!=-1:\n",
+    "        l=[str(insert_base)+\".\"+str(i) for i in range(z_val+1)]\n",
+    "        l.reverse()\n",
+    "        for k in l:\n",
+    "            zids.insert(z_ind,k)\n",
+    "        z[z_pos_ind]=list(np.arange(z_val)/z_val+insert_base)\n",
+    "    else:\n",
+    "        z[z_pos_ind]=[]\n",
+    "print(z,zids)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 411,
+   "id": "59f3720b-b3c0-44c7-b7ea-6923d2e7f2d6",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "1"
+      ]
+     },
+     "execution_count": 411,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a=np.array([1,2,3,4])\n",
+    "list(a).index(2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 404,
+   "id": "7f94d3f9-2f55-4e25-be6c-735e8de905f2",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[5,\n",
+       " 6,\n",
+       " 7,\n",
+       " 8,\n",
+       " 9,\n",
+       " 10,\n",
+       " 11,\n",
+       " 12,\n",
+       " 13,\n",
+       " 14,\n",
+       " 15,\n",
+       " 16,\n",
+       " 17,\n",
+       " [array([18. , 18.1, 18.2, 18.3, 18.4, 18.5, 18.6, 18.7, 18.8, 18.9])],\n",
+       " 19,\n",
+       " 20,\n",
+       " 21,\n",
+       " 22,\n",
+       " 23,\n",
+       " 24,\n",
+       " 25,\n",
+       " 26,\n",
+       " 27,\n",
+       " 28,\n",
+       " 29,\n",
+       " 30,\n",
+       " 31,\n",
+       " 32,\n",
+       " 33,\n",
+       " [array([34.        , 34.09090909, 34.18181818, 34.27272727, 34.36363636,\n",
+       "         34.45454545, 34.54545455, 34.63636364, 34.72727273, 34.81818182,\n",
+       "         34.90909091])],\n",
+       " 35,\n",
+       " 36]"
+      ]
+     },
+     "execution_count": 404,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "z"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 340,
+   "id": "b29dc9a7-b4cd-43a8-b374-1a6c3c37e326",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n"
+     ]
+    }
+   ],
+   "source": [
+    "part=read_json_file(\"test_insert_seq3.json\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 355,
+   "id": "c26b53aa-2b60-4a42-85f0-2cdf626cf14a",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_helix_angle(part, helix_id, indices):\n",
+    "    \"\"\" Get \"start_orientation\" for helix \"\"\"\n",
+    "        # import ipdb\n",
+    "        # ipdb.set_trace()\n",
+    "\n",
+    "    \"\"\" FROM CADNANO2.5\n",
+    "    + angle is CCW\n",
+    "    - angle is CW\n",
+    "    Right handed DNA rotates clockwise from 5' to 3'\n",
+    "    we use the convention the 5' end starts at 0 degrees\n",
+    "    and it's pair is minor_groove_angle degrees away\n",
+    "    direction, hence the minus signs.  eulerZ\n",
+    "    \"\"\"\n",
+    "\n",
+    "    hp, bpr, tpr, eulerZ, mgroove = part.vh_properties.loc[helix_id,\n",
+    "                                                                    ['helical_pitch',\n",
+    "                                                                     'bases_per_repeat',\n",
+    "                                                                     'turns_per_repeat',\n",
+    "                                                                     'eulerZ',\n",
+    "                                                                     'minor_groove_angle']]\n",
+    "    twist_per_base = tpr*360./bpr\n",
+    "        # angle = eulerZ - twist_per_base*indices + 0.5*mgroove + 180\n",
+    "    angle = eulerZ + twist_per_base*indices - 0.5*mgroove\n",
+    "    return angle"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 362,
+   "id": "25f9ab74-6b64-4bbf-a6c3-c67c811d42e6",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "441.42857142857133"
+      ]
+     },
+     "execution_count": 362,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "get_helix_angle(part, 0,15)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 342,
+   "id": "5d3b60a4-14ec-4723-9693-4b05b95554d1",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "{'id_num': 4, 'idx5p': 0, 'is_5p_fwd': True, 'is_circular': False, 'sequence': 'TGAT', 'name': 'oligo8144', 'color': '#0066cc', 'length': 4, 'is_visible': True} :\n",
+      "4\n",
+      "{'id_num': 4, 'idx5p': 39, 'is_5p_fwd': False, 'is_circular': False, 'sequence': 'CAGCAAGCGGTCCACGCTGGCAGGCGAAAA   ', 'name': 'oligo0272', 'color': '#888888', 'length': 32, 'is_visible': True} :\n",
+      "33\n",
+      "{'id_num': 5, 'idx5p': 3, 'is_5p_fwd': False, 'is_circular': False, 'sequence': None, 'name': 'oligo8768', 'color': '#0066cc', 'length': 4, 'is_visible': True} :\n",
+      "{'id_num': 2, 'idx5p': 34, 'is_5p_fwd': False, 'is_circular': False, 'sequence': '  AAATCGGCAAAATCCACTATTAAAGAACGTG  ', 'name': 'oligo8352', 'color': '#888888', 'length': 34, 'is_visible': True} :\n",
+      "35\n",
+      "{'id_num': 1, 'idx5p': 3, 'is_5p_fwd': True, 'is_circular': False, 'sequence': '  TTGGAACAAGAGTCCGGGAGATAGGGTTGAGTGTT', 'name': 'oligo8240', 'color': '#16e876', 'length': 48, 'is_visible': True} :\n",
+      "37\n",
+      "{'id_num': 0, 'idx5p': 38, 'is_5p_fwd': False, 'is_circular': False, 'sequence': '  TAGCCCGAGGGTCCACGCTGG', 'name': 'oligo0480', 'color': '#b8056c', 'length': 34, 'is_visible': True} :\n",
+      "23\n",
+      "{'id_num': 1, 'idx5p': 41, 'is_5p_fwd': False, 'is_circular': False, 'sequence': None, 'name': 'oligo4576', 'color': '#0066cc', 'length': 3, 'is_visible': True} :\n",
+      "{'id_num': 3, 'idx5p': 41, 'is_5p_fwd': False, 'is_circular': False, 'sequence': None, 'name': 'oligo7120', 'color': '#0066cc', 'length': 5, 'is_visible': True} :\n",
+      "{'id_num': 0, 'idx5p': 39, 'is_5p_fwd': True, 'is_circular': False, 'sequence': None, 'name': 'oligo6960', 'color': '#0066cc', 'length': 3, 'is_visible': True} :\n",
+      "{'id_num': 5, 'idx5p': 22, 'is_5p_fwd': False, 'is_circular': False, 'sequence': 'TGATAGACGGTTTTTCGCCCTTTGACGTTGGAGTCCACGTTCTTTAATAGTGGACTCTTGTTCCAAACTCAACCCTATCTCCACCCTATCTCGGGCTATTCTTTTGATTTATAACGGATTTTGCCGATTT TTTTCGCCTGCCAAACAGGATCAGCGTGGACCGCTTGCTGCCAGCGTGGACCGCTTG', 'name': 'oligo3360', 'color': '#0066cc', 'length': 208, 'is_visible': True} :\n",
+      "188\n",
+      "{'id_num': 3, 'idx5p': 0, 'is_5p_fwd': True, 'is_circular': False, 'sequence': '  GACTCCAACGTCAAGTTTGATCCTAGGGCGA', 'name': 'oligo9376', 'color': '#cc0000', 'length': 33, 'is_visible': True} :\n",
+      "33\n",
+      "{'id_num': 2, 'idx5p': 39, 'is_5p_fwd': True, 'is_circular': False, 'sequence': None, 'name': 'oligo7392', 'color': '#0066cc', 'length': 3, 'is_visible': True} :\n",
+      "{'id_num': 0, 'idx5p': 23, 'is_5p_fwd': False, 'is_circular': False, 'sequence': 'GGTTTATAAATCAAAAGAA  ', 'name': 'oligo9328', 'color': '#cc01d1', 'length': 21, 'is_visible': True} :\n",
+      "21\n",
+      "{'id_num': 5, 'idx5p': 9, 'is_5p_fwd': True, 'is_circular': False, 'sequence': 'AAAACCGTCTATCACAAGCATAG', 'name': 'oligo9456', 'color': '#000000', 'length': 23, 'is_visible': True} :\n",
+      "23\n"
+     ]
+    }
+   ],
+   "source": [
+    "olist=list(part.oligos())\n",
+    "for i in olist:\n",
+    "    print(i.dump(),\":\")\n",
+    "    try:\n",
+    "        print(len(i.sequence()))\n",
+    "    except: continue\n",
+    "\n",
+    "    "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 343,
+   "id": "0ec83cb6-9abf-4fca-a639-ec6aedf1b14a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_decrementLength',\n",
+       " '_incrementLength',\n",
+       " '_is_circular',\n",
+       " '_parent',\n",
+       " '_part',\n",
+       " '_props',\n",
+       " '_setColor',\n",
+       " '_setLength',\n",
+       " '_setLoop',\n",
+       " '_setProperty',\n",
+       " '_signals',\n",
+       " '_strand5p',\n",
+       " '_strandMergeUpdate',\n",
+       " '_strandSplitUpdate',\n",
+       " 'addToPart',\n",
+       " 'applyAbstractSequences',\n",
+       " 'applyColor',\n",
+       " 'applySequence',\n",
+       " 'applySequenceCMD',\n",
+       " 'clearAbstractSequences',\n",
+       " 'connect',\n",
+       " 'deleteLater',\n",
+       " 'destroy',\n",
+       " 'disconnect',\n",
+       " 'displayAbstractSequences',\n",
+       " 'dump',\n",
+       " 'editable_properties',\n",
+       " 'getAbsolutePositionAtLength',\n",
+       " 'getColor',\n",
+       " 'getModelProperties',\n",
+       " 'getName',\n",
+       " 'getNumberOfBasesToEachXover',\n",
+       " 'getOutlineProperties',\n",
+       " 'getProperty',\n",
+       " 'getStrandLengths',\n",
+       " 'isCircular',\n",
+       " 'length',\n",
+       " 'locString',\n",
+       " 'oligoPropertyChangedSignal',\n",
+       " 'oligoRemovedSignal',\n",
+       " 'oligoSelectedChangedSignal',\n",
+       " 'oligoSequenceAddedSignal',\n",
+       " 'oligoSequenceClearedSignal',\n",
+       " 'parent',\n",
+       " 'part',\n",
+       " 'refreshLength',\n",
+       " 'remove',\n",
+       " 'removeFromPart',\n",
+       " 'sequence',\n",
+       " 'sequenceExport',\n",
+       " 'setParent',\n",
+       " 'setPart',\n",
+       " 'setProperty',\n",
+       " 'setStrand5p',\n",
+       " 'shallowCopy',\n",
+       " 'shouldHighlight',\n",
+       " 'signals',\n",
+       " 'splitAtAbsoluteLengths',\n",
+       " 'strand3p',\n",
+       " 'strand5p',\n",
+       " 'undoStack']"
+      ]
+     },
+     "execution_count": 343,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dir(olist[4])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 333,
+   "id": "fc57ba88-6a6a-4d47-8ac6-da84a9f2ab34",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "NucleicAcidPart_-1_0272"
+      ]
+     },
+     "execution_count": 333,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "part"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 334,
+   "id": "85312ea2-5b2c-4fff-a44c-c506686d74ca",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[34]"
+      ]
+     },
+     "execution_count": 334,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "olist[4].getStrandLengths()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 363,
+   "id": "fe8f6f2c-f9ac-48c5-868d-a9e90a4fc675",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "strand_set=[]\n",
+    "for i in part.getidNums():\n",
+    "    fwd,rev=part.getStrandSets(i)\n",
+    "    [strand_set.append(i) for i in fwd.strands()]\n",
+    "    [strand_set.append(i) for i in rev.strands()]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 364,
+   "id": "64967867-a819-4345-9153-5dba2ec33ec3",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_base_idx_high',\n",
+       " '_base_idx_low',\n",
+       " '_deepCopy',\n",
+       " '_document',\n",
+       " '_id_num',\n",
+       " '_is_forward',\n",
+       " '_oligo',\n",
+       " '_parent',\n",
+       " '_sequence',\n",
+       " '_signals',\n",
+       " '_strand3p',\n",
+       " '_strand5p',\n",
+       " '_strandset',\n",
+       " 'abstractSeq',\n",
+       " 'abstract_sequence',\n",
+       " 'addInsertion',\n",
+       " 'addMods',\n",
+       " 'applyAbstractSequence',\n",
+       " 'canInstallXoverAt',\n",
+       " 'canResizeTo',\n",
+       " 'changeInsertion',\n",
+       " 'clearAbstractSequence',\n",
+       " 'clearDecoratorCommands',\n",
+       " 'clearInsertionsCommands',\n",
+       " 'connect',\n",
+       " 'connection3p',\n",
+       " 'connection5p',\n",
+       " 'connectionHigh',\n",
+       " 'connectionLow',\n",
+       " 'copyAbstractSequenceToSequence',\n",
+       " 'deleteLater',\n",
+       " 'destroy',\n",
+       " 'disconnect',\n",
+       " 'document',\n",
+       " 'dump5p',\n",
+       " 'generator3pStrand',\n",
+       " 'generator5pStrand',\n",
+       " 'getColor',\n",
+       " 'getComplementStrands',\n",
+       " 'getRemoveInsertionCommands',\n",
+       " 'getResizeBounds',\n",
+       " 'getSequenceList',\n",
+       " 'hasInsertionAt',\n",
+       " 'hasXoverAt',\n",
+       " 'highIdx',\n",
+       " 'idNum',\n",
+       " 'idx3Prime',\n",
+       " 'idx5Prime',\n",
+       " 'idxs',\n",
+       " 'insertionLengthBetweenIdxs',\n",
+       " 'insertionsOnStrand',\n",
+       " 'isForward',\n",
+       " 'length',\n",
+       " 'lowIdx',\n",
+       " 'merge',\n",
+       " 'modifersOnStrand',\n",
+       " 'oligo',\n",
+       " 'parent',\n",
+       " 'part',\n",
+       " 'reapplySequence',\n",
+       " 'removeInsertion',\n",
+       " 'removeMods',\n",
+       " 'resize',\n",
+       " 'segments',\n",
+       " 'sequence',\n",
+       " 'setComplementSequence',\n",
+       " 'setConnection3p',\n",
+       " 'setConnection5p',\n",
+       " 'setConnectionHigh',\n",
+       " 'setConnectionLow',\n",
+       " 'setIdxs',\n",
+       " 'setOligo',\n",
+       " 'setParent',\n",
+       " 'setSequence',\n",
+       " 'shallowCopy',\n",
+       " 'signals',\n",
+       " 'split',\n",
+       " 'strandConnectionChangedSignal',\n",
+       " 'strandFilter',\n",
+       " 'strandHasNewOligoSignal',\n",
+       " 'strandInsertionAddedSignal',\n",
+       " 'strandInsertionChangedSignal',\n",
+       " 'strandInsertionRemovedSignal',\n",
+       " 'strandModsAddedSignal',\n",
+       " 'strandModsChangedSignal',\n",
+       " 'strandModsRemovedSignal',\n",
+       " 'strandRemovedSignal',\n",
+       " 'strandResizedSignal',\n",
+       " 'strandSelectedChangedSignal',\n",
+       " 'strandSet',\n",
+       " 'strandType',\n",
+       " 'strandXover5pRemovedSignal',\n",
+       " 'totalLength',\n",
+       " 'undoStack']"
+      ]
+     },
+     "execution_count": 364,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dir(strand_set[0])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 351,
+   "id": "6b942c47-1109-4ac2-ac1b-7210fa7a505e",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<fwd_StrandSet(0)>.<Strand(5, 36)> : [(13, ('ACTCAACCC', 'TATCTCCACC')), (29, ('CTATCTCGGGCTA', '')), (58, ('', ''))]\n",
+      "<rev_StrandSet(0)>.<Strand(2, 20)> : [(13, ('GGGTTGAGTGTT', 'GGAGATA')), (31, ('', ''))]\n",
+      "<rev_StrandSet(0)>.<Strand(21, 23)> : [(24, ('GGT', ''))]\n",
+      "<rev_StrandSet(0)>.<Strand(24, 27)> : [(28, ('ATAG', ''))]\n",
+      "<rev_StrandSet(0)>.<Strand(28, 38)> : [(29, ('AG', '  TAGCCCG')), (50, ('', ''))]\n",
+      "<fwd_StrandSet(1)>.<Strand(3, 20)> : [(10, ('  TTGGAA', 'C')), (22, ('AAGAGTCCG', ''))]\n",
+      "<fwd_StrandSet(1)>.<Strand(21, 38)> : [(39, ('TTATAAATCAAAAGAA  ', ''))]\n",
+      "<rev_StrandSet(1)>.<Strand(5, 18)> : [(10, ('TTCCAA', 'G')), (20, ('GACTCTT', ''))]\n",
+      "<rev_StrandSet(1)>.<Strand(19, 36)> : [(37, ('TTCTTTTGATTTATAACG', ''))]\n",
+      "<fwd_StrandSet(2)>.<Strand(2, 18)> : [(11, ('CACGTTCTT ', '')), (18, ('TAATAGT', ''))]\n",
+      "<fwd_StrandSet(2)>.<Strand(19, 32)> : [(33, ('GATTTTGCCGATTT', ''))]\n",
+      "<rev_StrandSet(2)>.<Strand(0, 34)> : [(11, (' AAGAACGTG  ', '')), (34, (' AAATCGGCAAAATCCACTATTA', ''))]\n",
+      "<fwd_StrandSet(3)>.<Strand(0, 20)> : [(21, ('  GACTCCAACGTCAAGTTTG', ''))]\n",
+      "<fwd_StrandSet(3)>.<Strand(21, 34)> : [(28, ('GCAGGCG ', '')), (34, ('AAAA  ', ''))]\n",
+      "<rev_StrandSet(3)>.<Strand(2, 15)> : [(16, ('TTGACGTTGGAGTC', ''))]\n",
+      "<rev_StrandSet(3)>.<Strand(16, 32)> : [(28, (' CGCCTGCCAAAC', '')), (32, ('TTTT', ''))]\n",
+      "<fwd_StrandSet(4)>.<Strand(0, 3)> : [(4, ('TGAT', ''))]\n",
+      "<fwd_StrandSet(4)>.<Strand(9, 15)> : [(16, ('TCGCCCT', ''))]\n",
+      "<fwd_StrandSet(4)>.<Strand(16, 39)> : [(40, ('AGGATCAGCGTGGACCGCTTGCTG', ''))]\n",
+      "<rev_StrandSet(4)>.<Strand(9, 20)> : [(21, ('ATCCTAGGGCGA', ''))]\n",
+      "<rev_StrandSet(4)>.<Strand(21, 39)> : [(40, ('CAGCAAGCGGTCCACGCTG', ''))]\n",
+      "<fwd_StrandSet(5)>.<Strand(9, 27)> : [(28, ('AAAACCGTCTATCACAAGC', ''))]\n",
+      "<fwd_StrandSet(5)>.<Strand(28, 39)> : [(40, ('GGTCCACGCTGG', ''))]\n",
+      "<rev_StrandSet(5)>.<Strand(9, 22)> : [(23, ('TGATAGACGGTTTT', ''))]\n",
+      "<rev_StrandSet(5)>.<Strand(23, 39)> : [(40, ('CCAGCGTGGACCGCTTG', ''))]\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "['__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_base_idx_high',\n",
+       " '_base_idx_low',\n",
+       " '_deepCopy',\n",
+       " '_document',\n",
+       " '_id_num',\n",
+       " '_is_forward',\n",
+       " '_oligo',\n",
+       " '_parent',\n",
+       " '_sequence',\n",
+       " '_signals',\n",
+       " '_strand3p',\n",
+       " '_strand5p',\n",
+       " '_strandset',\n",
+       " 'abstractSeq',\n",
+       " 'abstract_sequence',\n",
+       " 'addInsertion',\n",
+       " 'addMods',\n",
+       " 'applyAbstractSequence',\n",
+       " 'canInstallXoverAt',\n",
+       " 'canResizeTo',\n",
+       " 'changeInsertion',\n",
+       " 'clearAbstractSequence',\n",
+       " 'clearDecoratorCommands',\n",
+       " 'clearInsertionsCommands',\n",
+       " 'connect',\n",
+       " 'connection3p',\n",
+       " 'connection5p',\n",
+       " 'connectionHigh',\n",
+       " 'connectionLow',\n",
+       " 'copyAbstractSequenceToSequence',\n",
+       " 'deleteLater',\n",
+       " 'destroy',\n",
+       " 'disconnect',\n",
+       " 'document',\n",
+       " 'dump5p',\n",
+       " 'generator3pStrand',\n",
+       " 'generator5pStrand',\n",
+       " 'getColor',\n",
+       " 'getComplementStrands',\n",
+       " 'getRemoveInsertionCommands',\n",
+       " 'getResizeBounds',\n",
+       " 'getSequenceList',\n",
+       " 'hasInsertionAt',\n",
+       " 'hasXoverAt',\n",
+       " 'highIdx',\n",
+       " 'idNum',\n",
+       " 'idx3Prime',\n",
+       " 'idx5Prime',\n",
+       " 'idxs',\n",
+       " 'insertionLengthBetweenIdxs',\n",
+       " 'insertionsOnStrand',\n",
+       " 'isForward',\n",
+       " 'length',\n",
+       " 'lowIdx',\n",
+       " 'merge',\n",
+       " 'modifersOnStrand',\n",
+       " 'oligo',\n",
+       " 'parent',\n",
+       " 'part',\n",
+       " 'reapplySequence',\n",
+       " 'removeInsertion',\n",
+       " 'removeMods',\n",
+       " 'resize',\n",
+       " 'segments',\n",
+       " 'sequence',\n",
+       " 'setComplementSequence',\n",
+       " 'setConnection3p',\n",
+       " 'setConnection5p',\n",
+       " 'setConnectionHigh',\n",
+       " 'setConnectionLow',\n",
+       " 'setIdxs',\n",
+       " 'setOligo',\n",
+       " 'setParent',\n",
+       " 'setSequence',\n",
+       " 'shallowCopy',\n",
+       " 'signals',\n",
+       " 'split',\n",
+       " 'strandConnectionChangedSignal',\n",
+       " 'strandFilter',\n",
+       " 'strandHasNewOligoSignal',\n",
+       " 'strandInsertionAddedSignal',\n",
+       " 'strandInsertionChangedSignal',\n",
+       " 'strandInsertionRemovedSignal',\n",
+       " 'strandModsAddedSignal',\n",
+       " 'strandModsChangedSignal',\n",
+       " 'strandModsRemovedSignal',\n",
+       " 'strandRemovedSignal',\n",
+       " 'strandResizedSignal',\n",
+       " 'strandSelectedChangedSignal',\n",
+       " 'strandSet',\n",
+       " 'strandType',\n",
+       " 'strandXover5pRemovedSignal',\n",
+       " 'totalLength',\n",
+       " 'undoStack']"
+      ]
+     },
+     "execution_count": 351,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "for i in strand_set:\n",
+    "    try:\n",
+    "        print(i,\":\",i.getSequenceList())\n",
+    "    except:\n",
+    "        continue\n",
+    "dir(strand_set[0])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 338,
+   "id": "678e48ea-568b-4ad3-98f3-2556b596b70f",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'ACTCAACCCTATCTCCACCCTATCTCGGGCTA'"
+      ]
+     },
+     "execution_count": 338,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "strand_set[0].sequence()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 339,
+   "id": "a27de404-e5c5-4526-9d18-bcff3d8d7b5f",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(<fwd_StrandSet(0)>.<Strand(5, 36)>, 'ACTCAACCCTATCTCCACCCTATCTCGGGCTA'),\n",
+       " (<fwd_StrandSet(0)>.<Strand(39, 41)>, ''),\n",
+       " (<rev_StrandSet(0)>.<Strand(2, 20)>, 'GGAGATAGGGTTGAGTGTT'),\n",
+       " (<rev_StrandSet(0)>.<Strand(21, 23)>, 'GGT'),\n",
+       " (<rev_StrandSet(0)>.<Strand(24, 27)>, 'ATAG'),\n",
+       " (<rev_StrandSet(0)>.<Strand(28, 38)>, '  TAGCCCGAG'),\n",
+       " (<fwd_StrandSet(1)>.<Strand(3, 20)>, '  TTGGAACAAGAGTCCG'),\n",
+       " (<fwd_StrandSet(1)>.<Strand(21, 38)>, 'TTATAAATCAAAAGAA  '),\n",
+       " (<rev_StrandSet(1)>.<Strand(5, 18)>, 'GACTCTTGTTCCAA'),\n",
+       " (<rev_StrandSet(1)>.<Strand(19, 36)>, 'TTCTTTTGATTTATAACG'),\n",
+       " (<rev_StrandSet(1)>.<Strand(39, 41)>, ''),\n",
+       " (<fwd_StrandSet(2)>.<Strand(2, 18)>, 'CACGTTCTTTAATAGTG'),\n",
+       " (<fwd_StrandSet(2)>.<Strand(19, 32)>, 'GATTTTGCCGATTT'),\n",
+       " (<fwd_StrandSet(2)>.<Strand(39, 41)>, ''),\n",
+       " (<rev_StrandSet(2)>.<Strand(0, 34)>, '  AAATCGGCAAAATCCACTATTAAAGAACGTG  '),\n",
+       " (<fwd_StrandSet(3)>.<Strand(0, 20)>, '  GACTCCAACGTCAAGTTTG'),\n",
+       " (<fwd_StrandSet(3)>.<Strand(21, 34)>, 'GCAGGCGAAAA   '),\n",
+       " (<rev_StrandSet(3)>.<Strand(2, 15)>, 'TTGACGTTGGAGTC'),\n",
+       " (<rev_StrandSet(3)>.<Strand(16, 32)>, ' TTTTCGCCTGCCAAAC'),\n",
+       " (<rev_StrandSet(3)>.<Strand(37, 41)>, ''),\n",
+       " (<fwd_StrandSet(4)>.<Strand(0, 3)>, 'TGAT'),\n",
+       " (<fwd_StrandSet(4)>.<Strand(9, 15)>, 'TCGCCCT'),\n",
+       " (<fwd_StrandSet(4)>.<Strand(16, 39)>, 'AGGATCAGCGTGGACCGCTTGCTG'),\n",
+       " (<rev_StrandSet(4)>.<Strand(9, 20)>, 'ATCCTAGGGCGA'),\n",
+       " (<rev_StrandSet(4)>.<Strand(21, 39)>, 'CAGCAAGCGGTCCACGCTG'),\n",
+       " (<fwd_StrandSet(5)>.<Strand(9, 27)>, 'AAAACCGTCTATCACAAGC'),\n",
+       " (<fwd_StrandSet(5)>.<Strand(28, 39)>, 'GGTCCACGCTGG'),\n",
+       " (<rev_StrandSet(5)>.<Strand(0, 3)>, ''),\n",
+       " (<rev_StrandSet(5)>.<Strand(9, 22)>, 'TGATAGACGGTTTT'),\n",
+       " (<rev_StrandSet(5)>.<Strand(23, 39)>, 'CCAGCGTGGACCGCTTG')]"
+      ]
+     },
+     "execution_count": 339,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "[(i,i.sequence()) for i in strand_set]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 383,
+   "id": "02a111ba-ea1e-410b-918e-bccbbdd4141e",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "AttributeError",
+     "evalue": "'numpy.ndarray' object has no attribute 'pop'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[383], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mgen_id_series\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstrand_set\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43mpart\u001b[49m\u001b[43m)\u001b[49m\n",
+      "Cell \u001b[0;32mIn[382], line 16\u001b[0m, in \u001b[0;36mgen_id_series\u001b[0;34m(strand, part)\u001b[0m\n\u001b[1;32m     14\u001b[0m z_val\u001b[38;5;241m=\u001b[39minsert_dict[inset_base]\n\u001b[1;32m     15\u001b[0m zids\u001b[38;5;241m.\u001b[39mpop(z_ind)\n\u001b[0;32m---> 16\u001b[0m \u001b[43mz\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpop\u001b[49m(z_ind)\n\u001b[1;32m     17\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m z_val\u001b[38;5;241m!=\u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m     18\u001b[0m     l\u001b[38;5;241m=\u001b[39m[\u001b[38;5;28mstr\u001b[39m(inset_base)\u001b[38;5;241m+\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m+\u001b[39m\u001b[38;5;28mstr\u001b[39m(i) \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(z_val\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m1\u001b[39m)]\n",
+      "\u001b[0;31mAttributeError\u001b[0m: 'numpy.ndarray' object has no attribute 'pop'"
+     ]
+    }
+   ],
+   "source": [
+    "gen_id_series(strand_set[0],part)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 274,
+   "id": "8a27e1a0-fb25-475d-bc62-0adc23d6b261",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def gen_prop_table(part):\n",
+    "    strand_set=[]\n",
+    "    for i in part.getidNums():\n",
+    "        fwd,rev=part.getStrandSets(i)\n",
+    "        [strand_set.append(i) for i in fwd.strands()]\n",
+    "        [strand_set.append(i) for i in rev.strands()]\n",
+    "    id_series=[]\n",
+    "    for i in strand_set:\n",
+    "        id_series=id_series+gen_id_series(i)\n",
+    "    \n",
+    "    nt_prop=pd.DataFrame(id_series)\n",
+    "    nt_prop.reset_index(names=list(range(len(nt_prop.index))),inplace=True)\n",
+    "    \n",
+    "    ind_tuple=[(nt_prop[\"vh\"][i],nt_prop[\"zid\"][i],nt_prop[\"fwd\"][i]) for i in nt_prop.index]\n",
+    "    stacks=[]\n",
+    "    for i in list(nt_prop[\"stack_tuple\"]):\n",
+    "        if i ==-1:\n",
+    "            stacks.append(i)\n",
+    "        else:\n",
+    "            stacks.append(ind_tuple.index(i))\n",
+    "    nt_prop[\"stack\"]=stacks\n",
+    "    tprime=[]\n",
+    "    for i in list(nt_prop[\"threeprime_tuple\"]):\n",
+    "        if i ==-1:\n",
+    "            tprime.append(i)\n",
+    "        else:\n",
+    "            tprime.append(ind_tuple.index(i))\n",
+    "    nt_prop[\"threeprime\"]=tprime\n",
+    "    \n",
+    "    return nt_prop\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 247,
+   "id": "1389dcb5-51f9-480c-b657-aa7abbd4a2fa",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[0, 1, 2, 3, 4, 5, 6]"
+      ]
+     },
+     "execution_count": 247,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "part.getVirtualHelixOrder()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 242,
+   "id": "c817bd74-a725-4520-826c-8c1f80c02d56",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{0: array([7.7942295, 9.       ]),\n",
+       " 1: array([5.84567213, 7.875     ]),\n",
+       " 2: array([5.84567213, 5.625     ]),\n",
+       " 3: array([7.7942295, 4.5      ]),\n",
+       " 4: array([9.74278688, 5.625     ]),\n",
+       " 5: array([9.74278688, 7.875     ]),\n",
+       " 6: array([-13.63990163,  -1.125     ])}"
+      ]
+     },
+     "execution_count": 242,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "origins = {hid:part.getVirtualHelixOrigin(hid)[:2] for hid in part.getidNums()}\n",
+    "origins"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 359,
+   "id": "ca879ef9-1acc-4943-8c05-62b95558638c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "7.7942295"
+      ]
+     },
+     "execution_count": 359,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "part.getVirtualHelixOrigin(0)[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 134,
+   "id": "1b55d792-37eb-453d-a3db-382b239cf62d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[stack                         -1\n",
+       " threeprime    (0, (5, 28, True))\n",
+       " Name: (0, 28, False), dtype: object,\n",
+       " stack         (0, 28, False)\n",
+       " threeprime    (0, 28, False)\n",
+       " Name: (0, 29.0, False), dtype: object,\n",
+       " stack         (0, 29.0, False)\n",
+       " threeprime    (0, 29.0, False)\n",
+       " Name: (0, 29.1, False), dtype: object,\n",
+       " stack         (0, 29.1, False)\n",
+       " threeprime    (0, 29.1, False)\n",
+       " Name: (0, 29.2, False), dtype: object,\n",
+       " stack         (0, 29.2, False)\n",
+       " threeprime    (0, 29.2, False)\n",
+       " Name: (0, 29.3, False), dtype: object,\n",
+       " stack         (0, 29.3, False)\n",
+       " threeprime    (0, 29.3, False)\n",
+       " Name: (0, 29.4, False), dtype: object,\n",
+       " stack         (0, 29.4, False)\n",
+       " threeprime    (0, 29.4, False)\n",
+       " Name: (0, 29.5, False), dtype: object,\n",
+       " stack         (0, 29.5, False)\n",
+       " threeprime    (0, 29.5, False)\n",
+       " Name: (0, 29.6, False), dtype: object,\n",
+       " stack         (0, 29.6, False)\n",
+       " threeprime    (0, 29.6, False)\n",
+       " Name: (0, 29.7, False), dtype: object,\n",
+       " stack         (0, 29.7, False)\n",
+       " threeprime    (0, 29.7, False)\n",
+       " Name: (0, 29.8, False), dtype: object,\n",
+       " stack         (0, 29.8, False)\n",
+       " threeprime    (0, 29.8, False)\n",
+       " Name: (0, 29.9, False), dtype: object,\n",
+       " stack         (0, 29.9, False)\n",
+       " threeprime    (0, 29.9, False)\n",
+       " Name: (0, 29.10, False), dtype: object,\n",
+       " stack         (0, 29.10, False)\n",
+       " threeprime    (0, 29.10, False)\n",
+       " Name: (0, 29.11, False), dtype: object,\n",
+       " stack         (0, 29.11, False)\n",
+       " threeprime    (0, 29.11, False)\n",
+       " Name: (0, 30, False), dtype: object,\n",
+       " stack         (0, 30, False)\n",
+       " threeprime    (0, 30, False)\n",
+       " Name: (0, 31, False), dtype: object,\n",
+       " stack         (0, 31, False)\n",
+       " threeprime    (0, 31, False)\n",
+       " Name: (0, 32, False), dtype: object,\n",
+       " stack         (0, 32, False)\n",
+       " threeprime    (0, 32, False)\n",
+       " Name: (0, 33, False), dtype: object,\n",
+       " stack         (0, 33, False)\n",
+       " threeprime    (0, 33, False)\n",
+       " Name: (0, 34, False), dtype: object,\n",
+       " stack         (0, 34, False)\n",
+       " threeprime    (0, 34, False)\n",
+       " Name: (0, 35, False), dtype: object,\n",
+       " stack         (0, 35, False)\n",
+       " threeprime    (0, 35, False)\n",
+       " Name: (0, 36, False), dtype: object,\n",
+       " stack         (0, 36, False)\n",
+       " threeprime    (0, 36, False)\n",
+       " Name: (0, 37, False), dtype: object,\n",
+       " stack         (0, 37, False)\n",
+       " threeprime    (0, 37, False)\n",
+       " Name: (0, 38, False), dtype: object]"
+      ]
+     },
+     "execution_count": 134,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "L"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 139,
+   "id": "f8302226-2614-4d47-8050-e332e0ade9f2",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "52"
+      ]
+     },
+     "execution_count": 139,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "list(df[\"stack\"]==df[\"threeprime\"]).index(False)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 74,
+   "id": "4221131e-75af-4676-bb67-24b91d978f72",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(0, '5', True),\n",
+       " (0, '6', True),\n",
+       " (0, '7', True),\n",
+       " (0, '8', True),\n",
+       " (0, '9', True),\n",
+       " (0, '10', True),\n",
+       " (0, '11', True),\n",
+       " (0, '12', True),\n",
+       " (0, '13.0', True),\n",
+       " (0, '13.1', True),\n",
+       " (0, '13.2', True),\n",
+       " (0, '13.3', True),\n",
+       " (0, '13.4', True),\n",
+       " (0, '13.5', True),\n",
+       " (0, '13.6', True),\n",
+       " (0, '13.7', True),\n",
+       " (0, '13.8', True),\n",
+       " (0, '13.9', True),\n",
+       " (0, '13.10', True),\n",
+       " (0, '14', True),\n",
+       " (0, '15', True),\n",
+       " (0, '16', True),\n",
+       " (0, '17', True),\n",
+       " (0, '18', True),\n",
+       " (0, '19', True),\n",
+       " (0, '20', True),\n",
+       " (0, '21', True),\n",
+       " (0, '22', True),\n",
+       " (0, '23', True),\n",
+       " (0, '24', True),\n",
+       " (0, '25', True),\n",
+       " (0, '26', True),\n",
+       " (0, '27', True),\n",
+       " (0, '28', True),\n",
+       " (0, '29.0', True),\n",
+       " (0, '29.1', True),\n",
+       " (0, '29.2', True),\n",
+       " (0, '29.3', True),\n",
+       " (0, '29.4', True),\n",
+       " (0, '29.5', True),\n",
+       " (0, '29.6', True),\n",
+       " (0, '29.7', True),\n",
+       " (0, '29.8', True),\n",
+       " (0, '29.9', True),\n",
+       " (0, '29.10', True),\n",
+       " (0, '29.11', True),\n",
+       " (0, '30', True),\n",
+       " (0, '31', True),\n",
+       " (0, '32', True),\n",
+       " (0, '33', True),\n",
+       " (0, '34', True),\n",
+       " (0, '35', True),\n",
+       " (0, '36', True),\n",
+       " (0, '39', True),\n",
+       " (0, '40', True),\n",
+       " (0, '41', True),\n",
+       " (0, '2', False),\n",
+       " (0, '3', False),\n",
+       " (0, '4', False),\n",
+       " (0, '5', False),\n",
+       " (0, '6', False),\n",
+       " (0, '7', False),\n",
+       " (0, '8', False),\n",
+       " (0, '9', False),\n",
+       " (0, '10', False),\n",
+       " (0, '11', False),\n",
+       " (0, '12', False),\n",
+       " (0, '13.0', False),\n",
+       " (0, '13.1', False),\n",
+       " (0, '13.2', False),\n",
+       " (0, '13.3', False),\n",
+       " (0, '13.4', False),\n",
+       " (0, '13.5', False),\n",
+       " (0, '13.6', False),\n",
+       " (0, '13.7', False),\n",
+       " (0, '13.8', False),\n",
+       " (0, '13.9', False),\n",
+       " (0, '13.10', False),\n",
+       " (0, '14', False),\n",
+       " (0, '15', False),\n",
+       " (0, '16', False),\n",
+       " (0, '17', False),\n",
+       " (0, '18', False),\n",
+       " (0, '19', False),\n",
+       " (0, '20', False),\n",
+       " (0, '21', False),\n",
+       " (0, '22', False),\n",
+       " (0, '23', False),\n",
+       " (0, '24', False),\n",
+       " (0, '25', False),\n",
+       " (0, '26', False),\n",
+       " (0, '27', False),\n",
+       " (0, '28', False),\n",
+       " (0, '29.0', False),\n",
+       " (0, '29.1', False),\n",
+       " (0, '29.2', False),\n",
+       " (0, '29.3', False),\n",
+       " (0, '29.4', False),\n",
+       " (0, '29.5', False),\n",
+       " (0, '29.6', False),\n",
+       " (0, '29.7', False),\n",
+       " (0, '29.8', False),\n",
+       " (0, '29.9', False),\n",
+       " (0, '29.10', False),\n",
+       " (0, '29.11', False),\n",
+       " (0, '30', False),\n",
+       " (0, '31', False),\n",
+       " (0, '32', False),\n",
+       " (0, '33', False),\n",
+       " (0, '34', False),\n",
+       " (0, '35', False),\n",
+       " (0, '36', False),\n",
+       " (0, '37', False),\n",
+       " (0, '38', False),\n",
+       " (1, '3', True),\n",
+       " (1, '4', True),\n",
+       " (1, '5', True),\n",
+       " (1, '6', True),\n",
+       " (1, '7', True),\n",
+       " (1, '8', True),\n",
+       " (1, '9', True),\n",
+       " (1, '10.0', True),\n",
+       " (1, '10.1', True),\n",
+       " (1, '11', True),\n",
+       " (1, '12', True),\n",
+       " (1, '13', True),\n",
+       " (1, '14', True),\n",
+       " (1, '15', True),\n",
+       " (1, '16', True),\n",
+       " (1, '17', True),\n",
+       " (1, '18', True),\n",
+       " (1, '19', True),\n",
+       " (1, '20', True),\n",
+       " (1, '21', True),\n",
+       " (1, '22', True),\n",
+       " (1, '23', True),\n",
+       " (1, '24', True),\n",
+       " (1, '25', True),\n",
+       " (1, '26', True),\n",
+       " (1, '27', True),\n",
+       " (1, '28', True),\n",
+       " (1, '29', True),\n",
+       " (1, '30', True),\n",
+       " (1, '31', True),\n",
+       " (1, '32', True),\n",
+       " (1, '33', True),\n",
+       " (1, '34', True),\n",
+       " (1, '35', True),\n",
+       " (1, '36', True),\n",
+       " (1, '37', True),\n",
+       " (1, '38', True),\n",
+       " (1, '5', False),\n",
+       " (1, '6', False),\n",
+       " (1, '7', False),\n",
+       " (1, '8', False),\n",
+       " (1, '9', False),\n",
+       " (1, '10.0', False),\n",
+       " (1, '10.1', False),\n",
+       " (1, '11', False),\n",
+       " (1, '12', False),\n",
+       " (1, '13', False),\n",
+       " (1, '14', False),\n",
+       " (1, '15', False),\n",
+       " (1, '16', False),\n",
+       " (1, '17', False),\n",
+       " (1, '18', False),\n",
+       " (1, '19', False),\n",
+       " (1, '20', False),\n",
+       " (1, '21', False),\n",
+       " (1, '22', False),\n",
+       " (1, '23', False),\n",
+       " (1, '24', False),\n",
+       " (1, '25', False),\n",
+       " (1, '26', False),\n",
+       " (1, '27', False),\n",
+       " (1, '28', False),\n",
+       " (1, '29', False),\n",
+       " (1, '30', False),\n",
+       " (1, '31', False),\n",
+       " (1, '32', False),\n",
+       " (1, '33', False),\n",
+       " (1, '34', False),\n",
+       " (1, '35', False),\n",
+       " (1, '36', False),\n",
+       " (1, '39', False),\n",
+       " (1, '40', False),\n",
+       " (1, '41', False),\n",
+       " (2, '2', True),\n",
+       " (2, '3', True),\n",
+       " (2, '4', True),\n",
+       " (2, '5', True),\n",
+       " (2, '6', True),\n",
+       " (2, '7', True),\n",
+       " (2, '8', True),\n",
+       " (2, '9', True),\n",
+       " (2, '10', True),\n",
+       " (2, '12', True),\n",
+       " (2, '13', True),\n",
+       " (2, '14', True),\n",
+       " (2, '15', True),\n",
+       " (2, '16', True),\n",
+       " (2, '17', True),\n",
+       " (2, '18', True),\n",
+       " (2, '19', True),\n",
+       " (2, '20', True),\n",
+       " (2, '21', True),\n",
+       " (2, '22', True),\n",
+       " (2, '23', True),\n",
+       " (2, '24', True),\n",
+       " (2, '25', True),\n",
+       " (2, '26', True),\n",
+       " (2, '27', True),\n",
+       " (2, '28', True),\n",
+       " (2, '29', True),\n",
+       " (2, '30', True),\n",
+       " (2, '31', True),\n",
+       " (2, '32', True),\n",
+       " (2, '39', True),\n",
+       " (2, '40', True),\n",
+       " (2, '41', True),\n",
+       " (2, '0', False),\n",
+       " (2, '1', False),\n",
+       " (2, '2', False),\n",
+       " (2, '3', False),\n",
+       " (2, '4', False),\n",
+       " (2, '5', False),\n",
+       " (2, '6', False),\n",
+       " (2, '7', False),\n",
+       " (2, '8', False),\n",
+       " (2, '9', False),\n",
+       " (2, '10', False),\n",
+       " (2, '12', False),\n",
+       " (2, '13', False),\n",
+       " (2, '14', False),\n",
+       " (2, '15', False),\n",
+       " (2, '16', False),\n",
+       " (2, '17', False),\n",
+       " (2, '18', False),\n",
+       " (2, '19', False),\n",
+       " (2, '20', False),\n",
+       " (2, '21', False),\n",
+       " (2, '22', False),\n",
+       " (2, '23', False),\n",
+       " (2, '24', False),\n",
+       " (2, '25', False),\n",
+       " (2, '26', False),\n",
+       " (2, '27', False),\n",
+       " (2, '28', False),\n",
+       " (2, '29', False),\n",
+       " (2, '30', False),\n",
+       " (2, '31', False),\n",
+       " (2, '32', False),\n",
+       " (2, '33', False),\n",
+       " (2, '34', False),\n",
+       " (3, '0', True),\n",
+       " (3, '1', True),\n",
+       " (3, '2', True),\n",
+       " (3, '3', True),\n",
+       " (3, '4', True),\n",
+       " (3, '5', True),\n",
+       " (3, '6', True),\n",
+       " (3, '7', True),\n",
+       " (3, '8', True),\n",
+       " (3, '9', True),\n",
+       " (3, '10', True),\n",
+       " (3, '11', True),\n",
+       " (3, '12', True),\n",
+       " (3, '13', True),\n",
+       " (3, '14', True),\n",
+       " (3, '15', True),\n",
+       " (3, '16', True),\n",
+       " (3, '17', True),\n",
+       " (3, '18', True),\n",
+       " (3, '19', True),\n",
+       " (3, '20', True),\n",
+       " (3, '21', True),\n",
+       " (3, '22', True),\n",
+       " (3, '23', True),\n",
+       " (3, '24', True),\n",
+       " (3, '25', True),\n",
+       " (3, '26', True),\n",
+       " (3, '27', True),\n",
+       " (3, '29', True),\n",
+       " (3, '30', True),\n",
+       " (3, '31', True),\n",
+       " (3, '32', True),\n",
+       " (3, '33', True),\n",
+       " (3, '34', True),\n",
+       " (3, '2', False),\n",
+       " (3, '3', False),\n",
+       " (3, '4', False),\n",
+       " (3, '5', False),\n",
+       " (3, '6', False),\n",
+       " (3, '7', False),\n",
+       " (3, '8', False),\n",
+       " (3, '9', False),\n",
+       " (3, '10', False),\n",
+       " (3, '11', False),\n",
+       " (3, '12', False),\n",
+       " (3, '13', False),\n",
+       " (3, '14', False),\n",
+       " (3, '15', False),\n",
+       " (3, '16', False),\n",
+       " (3, '17', False),\n",
+       " (3, '18', False),\n",
+       " (3, '19', False),\n",
+       " (3, '20', False),\n",
+       " (3, '21', False),\n",
+       " (3, '22', False),\n",
+       " (3, '23', False),\n",
+       " (3, '24', False),\n",
+       " (3, '25', False),\n",
+       " (3, '26', False),\n",
+       " (3, '27', False),\n",
+       " (3, '29', False),\n",
+       " (3, '30', False),\n",
+       " (3, '31', False),\n",
+       " (3, '32', False),\n",
+       " (3, '37', False),\n",
+       " (3, '38', False),\n",
+       " (3, '39', False),\n",
+       " (3, '40', False),\n",
+       " (3, '41', False),\n",
+       " (4, '0', True),\n",
+       " (4, '1', True),\n",
+       " (4, '2', True),\n",
+       " (4, '3', True),\n",
+       " (4, '9', True),\n",
+       " (4, '10', True),\n",
+       " (4, '11', True),\n",
+       " (4, '12', True),\n",
+       " (4, '13', True),\n",
+       " (4, '14', True),\n",
+       " (4, '15', True),\n",
+       " (4, '16', True),\n",
+       " (4, '17', True),\n",
+       " (4, '18', True),\n",
+       " (4, '19', True),\n",
+       " (4, '20', True),\n",
+       " (4, '21', True),\n",
+       " (4, '22', True),\n",
+       " (4, '23', True),\n",
+       " (4, '24', True),\n",
+       " (4, '25', True),\n",
+       " (4, '26', True),\n",
+       " (4, '27', True),\n",
+       " (4, '28', True),\n",
+       " (4, '29', True),\n",
+       " (4, '30', True),\n",
+       " (4, '31', True),\n",
+       " (4, '32', True),\n",
+       " (4, '33', True),\n",
+       " (4, '34', True),\n",
+       " (4, '35', True),\n",
+       " (4, '36', True),\n",
+       " (4, '37', True),\n",
+       " (4, '38', True),\n",
+       " (4, '39', True),\n",
+       " (4, '9', False),\n",
+       " (4, '10', False),\n",
+       " (4, '11', False),\n",
+       " (4, '12', False),\n",
+       " (4, '13', False),\n",
+       " (4, '14', False),\n",
+       " (4, '15', False),\n",
+       " (4, '16', False),\n",
+       " (4, '17', False),\n",
+       " (4, '18', False),\n",
+       " (4, '19', False),\n",
+       " (4, '20', False),\n",
+       " (4, '21', False),\n",
+       " (4, '22', False),\n",
+       " (4, '23', False),\n",
+       " (4, '24', False),\n",
+       " (4, '25', False),\n",
+       " (4, '26', False),\n",
+       " (4, '27', False),\n",
+       " (4, '28', False),\n",
+       " (4, '29', False),\n",
+       " (4, '30', False),\n",
+       " (4, '31', False),\n",
+       " (4, '32', False),\n",
+       " (4, '33', False),\n",
+       " (4, '34', False),\n",
+       " (4, '35', False),\n",
+       " (4, '36', False),\n",
+       " (4, '37', False),\n",
+       " (4, '38', False),\n",
+       " (4, '39', False),\n",
+       " (5, '9', True),\n",
+       " (5, '10', True),\n",
+       " (5, '11', True),\n",
+       " (5, '12', True),\n",
+       " (5, '13', True),\n",
+       " (5, '14', True),\n",
+       " (5, '15', True),\n",
+       " (5, '16', True),\n",
+       " (5, '17', True),\n",
+       " (5, '18', True),\n",
+       " (5, '19', True),\n",
+       " (5, '20', True),\n",
+       " (5, '21', True),\n",
+       " (5, '22', True),\n",
+       " (5, '23', True),\n",
+       " (5, '24', True),\n",
+       " (5, '25', True),\n",
+       " (5, '26', True),\n",
+       " (5, '27', True),\n",
+       " (5, '28', True),\n",
+       " (5, '29', True),\n",
+       " (5, '30', True),\n",
+       " (5, '31', True),\n",
+       " (5, '32', True),\n",
+       " (5, '33', True),\n",
+       " (5, '34', True),\n",
+       " (5, '35', True),\n",
+       " (5, '36', True),\n",
+       " (5, '37', True),\n",
+       " (5, '38', True),\n",
+       " (5, '39', True),\n",
+       " (5, '0', False),\n",
+       " (5, '1', False),\n",
+       " (5, '2', False),\n",
+       " (5, '3', False),\n",
+       " (5, '9', False),\n",
+       " (5, '10', False),\n",
+       " (5, '11', False),\n",
+       " (5, '12', False),\n",
+       " (5, '13', False),\n",
+       " (5, '14', False),\n",
+       " (5, '15', False),\n",
+       " (5, '16', False),\n",
+       " (5, '17', False),\n",
+       " (5, '18', False),\n",
+       " (5, '19', False),\n",
+       " (5, '20', False),\n",
+       " (5, '21', False),\n",
+       " (5, '22', False),\n",
+       " (5, '23', False),\n",
+       " (5, '24', False),\n",
+       " (5, '25', False),\n",
+       " (5, '26', False),\n",
+       " (5, '27', False),\n",
+       " (5, '28', False),\n",
+       " (5, '29', False),\n",
+       " (5, '30', False),\n",
+       " (5, '31', False),\n",
+       " (5, '32', False),\n",
+       " (5, '33', False),\n",
+       " (5, '34', False),\n",
+       " (5, '35', False),\n",
+       " (5, '36', False),\n",
+       " (5, '37', False),\n",
+       " (5, '38', False),\n",
+       " (5, '39', False)]"
+      ]
+     },
+     "execution_count": 74,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "df=pd.DataFrame(L)\n",
+    "df.set_index([\"vh\",\"zid\",\"fwd\"],inplace=True)\n",
+    "L=list(df.index)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "bb4c1c28-0bed-4f3a-b046-241137968efd",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "np.array()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 94,
+   "id": "86772cec-5ebd-4a09-9068-3fe5684a8a00",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "stacks=[]\n",
+    "for i in list(df[\"stack\"]):\n",
+    "    if i ==-1:\n",
+    "        stacks.append(i)\n",
+    "    else:\n",
+    "        stacks.append(list(df.index).index(i))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 96,
+   "id": "ca575331-81bb-4d12-8230-65450bbb7100",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "tprime=[]\n",
+    "for i in list(df[\"stack\"]):\n",
+    "    if i ==-1:\n",
+    "        tprime.append(i)\n",
+    "    else:\n",
+    "        tprime.append(list(df.index).index(i))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 106,
+   "id": "9238476c-157b-4e47-bd2d-e2d66ebc91d8",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(array([], dtype=int64),)"
+      ]
+     },
+     "execution_count": 106,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "np.where(np.array(stacks)!=np.array(tprime))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 77,
+   "id": "4ed59693-4783-4dda-bffa-e9f256c3d211",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "ValueError",
+     "evalue": "-1 is not in list",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[77], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m [\u001b[38;5;28mlist\u001b[39m(df\u001b[38;5;241m.\u001b[39mindex)\u001b[38;5;241m.\u001b[39mindex(i) \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstack\u001b[39m\u001b[38;5;124m\"\u001b[39m]]\n",
+      "Cell \u001b[0;32mIn[77], line 1\u001b[0m, in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[0;32m----> 1\u001b[0m [\u001b[38;5;28;43mlist\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstack\u001b[39m\u001b[38;5;124m\"\u001b[39m]]\n",
+      "\u001b[0;31mValueError\u001b[0m: -1 is not in list"
+     ]
+    }
+   ],
+   "source": [
+    "[list(df.index).index(i) for i in df[\"stack\"]]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "id": "38a3dacc-7991-4475-b356-44043fd90984",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "3d9610cb-d6ea-4c56-be9b-1b23f623fe66",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "\n",
+    "\n",
+    "def gen_prop_table_cad2(json_data,part):\n",
+    "    \n",
+    "    df=pd.DataFrame(json_data[\"vstrands\"])\n",
+    "    vslist=df.set_index(\"num\")\n",
+    "    props = part.getModelProperties().copy()\n",
+    "\n",
+    "    try:\n",
+    "        if props.get('point_type') == PointType.ARBITRARY:\n",
+    "            # TODO add code to encode Parts with ARBITRARY point configurations\n",
+    "            raise NotImplementedError(\"Not implemented\")\n",
+    "    except:\n",
+    "        try:\n",
+    "            vh_props, origins = part.helixPropertiesAndOrigins()\n",
+    "        except:\n",
+    "            origins = {hid:part.getVirtualHelixOrigin(hid)[:2] for hid in part.getidNums()}\n",
+    "    scaf_id=[nttype_v2(vslist['scaf'][i]) for i in vslist.index]\n",
+    "    stap_id=[nttype_v2(vslist['stap'][i]) for i in vslist.index]\n",
+    "    cad_bps=part.getIndices(0)\n",
+    "    vslist[\"scafnt\"]=np.sum(np.array(scaf_id),axis=1)\n",
+    "    vslist[\"stapnt\"]=np.sum(np.array(stap_id),axis=1)\n",
+    "    totnt=np.sum(vslist[\"scafnt\"])+np.sum(vslist[\"stapnt\"])\n",
+    "    is_scaf=np.zeros(totnt,dtype=bool)\n",
+    "    is_scaf[0:np.sum(vslist[\"scafnt\"])]=1\n",
+    "    nt_prop=pd.DataFrame(index=range(totnt),columns=[\"vh\",\"zid\",\"is_scaf\",\"r\",\"bp\",\"stack\",\"threeprime\",\"seq\",\"orientation\"])\n",
+    "    nt_prop[\"is_scaf\"]=is_scaf\n",
+    "    tot_id=scaf_id+stap_id\n",
+    "    vhi,zidi=np.where(np.array(scaf_id)==1)\n",
+    "    vhj,zidj=np.where(np.array(stap_id)==1)\n",
+    "    vhi=vslist.index[vhi]\n",
+    "    vhj=vslist.index[vhj]\n",
+    "    nt_prop[\"vh\"]=list(vhi)+list(vhj)\n",
+    "    nt_prop[\"zid\"]=list(zidi)+list(zidj)\n",
+    "    vhzid=list(zip(nt_prop[\"vh\"],nt_prop[\"zid\"]))\n",
+    "    nt_prop[\"r\"]=[part.getCoordinate(helix_id, indices) for helix_id, indices in zip(nt_prop[\"vh\"],nt_prop[\"zid\"])]\n",
+    "    nt_prop[\"orientation\"]=[get_helix_angle(part, helix_id, indices) for helix_id,indices in zip(nt_prop[\"vh\"],nt_prop[\"zid\"])]\n",
+    "    nt_prop=nt_prop.fillna(-1)\n",
+    "    for i in range(int(len(vhzid)/2)):\n",
+    "        try:\n",
+    "            bp1,bp2=(i,1+i+vhzid[i+1:].index(vhzid[i]))\n",
+    "            nt_prop[\"bp\"][bp1]=bp2\n",
+    "            nt_prop[\"bp\"][bp2]=bp1\n",
+    "        except:\n",
+    "            pass\n",
+    "    tprime_list=-np.ones(len(nt_prop.index),dtype=int)\n",
+    "    index2=list(zip(vhzid,nt_prop[\"is_scaf\"]))\n",
+    "    for i in range(len(nt_prop.index)):\n",
+    "        ((m,n),p)=list(zip(vhzid,nt_prop[\"is_scaf\"]))[i]\n",
+    "        if p==True:\n",
+    "            k,l=(vslist[\"scaf\"][m])[n][2:]\n",
+    "            if k!=-1 and l!=-1:\n",
+    "                n=index2.index(((k,l),True))\n",
+    "                tprime_list[i]=int(n)\n",
+    "            \n",
+    "        else:\n",
+    "            k,l=(vslist[\"stap\"][m])[n][2:]\n",
+    "            if k!=-1 and l!=-1:\n",
+    "                n=index2.index(((k,l),False))\n",
+    "                tprime_list[i]=int(n)\n",
+    "    nt_prop[\"threeprime\"]=tprime_list\n",
+    "    #(n,)=np.where(nt_prop[\"threeprime\"]==-1)\n",
+    "    #stackid=nt_prop[\"bp\"][[list(nt_prop[\"threeprime\"]).index(i) for i in n]]\n",
+    "    index3=dict(zip(nt_prop.index,zip(nt_prop[\"vh\"],nt_prop[\"is_scaf\"])))\n",
+    "    index3[-1]=(-1,-1)\n",
+    "    nt_prop[\"stack\"]=np.where([index3[i]==index3[nt_prop[\"threeprime\"][i]] for i in (nt_prop.index)],nt_prop[\"threeprime\"],-1)  \n",
+    "    \n",
+    "    return nt_prop"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 70,
+   "id": "dbcb2c6d-2e3f-4952-b21e-c624ca2026dc",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import scadnano as sc"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 204,
+   "id": "e7b1dda8-1c43-4f22-b7bb-54e006134cb5",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "s=sc.Design.from_scadnano_file(\"loopout.sc\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 213,
+   "id": "4e2dd66e-fe4d-4728-8233-60cb1d9b156a",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "tot=np.sum([i.dna_length() for i in s.strands])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 214,
+   "id": "786068b5-fa4b-4c02-bdb8-a48af896cd09",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "135"
+      ]
+     },
+     "execution_count": 214,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tot\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 207,
+   "id": "4952a867-7839-4d65-b3d3-228b401fa4de",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "32"
+      ]
+     },
+     "execution_count": 207,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[1].dna_length()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 208,
+   "id": "5d1d1bea-7d71-476b-928b-18b5cf0bd2e5",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "34"
+      ]
+     },
+     "execution_count": 208,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[2].dna_length()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 187,
+   "id": "91b1be83-f406-47f3-8e63-11a0262a653a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[20]"
+      ]
+     },
+     "execution_count": 187,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[0].domains[0].deletions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 183,
+   "id": "e616db25-a0fa-47ea-917d-28f2ec18c67e",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[Domain(, helix=1, forward=False, start=8, end=24, deletions=[20]),\n",
+       " Domain(, helix=1, forward=False, start=24, end=40),\n",
+       " Domain(, helix=1, forward=True, start=8, end=24, deletions=[20]),\n",
+       " Domain(, helix=1, forward=True, start=24, end=40)]"
+      ]
+     },
+     "execution_count": 183,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.helices[1]._domains"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 732,
+   "id": "c0e69e86-6319-480e-a781-80c2a3524ea9",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>vh</th>\n",
+       "      <th>zid</th>\n",
+       "      <th>is_scaf</th>\n",
+       "      <th>r</th>\n",
+       "      <th>bp</th>\n",
+       "      <th>stack</th>\n",
+       "      <th>threeprime</th>\n",
+       "      <th>seq</th>\n",
+       "      <th>orientation</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>10</th>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    vh  zid  is_scaf   r  bp  stack  threeprime  seq  orientation\n",
+       "0  NaN  NaN      NaN NaN NaN    NaN         NaN  NaN          NaN\n",
+       "10 NaN  NaN      NaN NaN NaN    NaN         NaN  NaN          NaN"
+      ]
+     },
+     "execution_count": 732,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "nt_prop=pd.DataFrame(columns=[\"vh\",\"zid\",\"is_scaf\",\"r\",\"bp\",\"stack\",\"threeprime\",\"seq\",\"orientation\"],index=[0,10,2])\n",
+    "\n",
+    "s0=pd.Series(nt_prop.loc[0])\n",
+    "s1=pd.Series(nt_prop.loc[10])\n",
+    "pd.DataFrame([s0,s1])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 740,
+   "id": "66d0e76d-3ab9-4caf-8a11-e73069372672",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "vh             2.0\n",
+       "zid            NaN\n",
+       "is_scaf        NaN\n",
+       "r              NaN\n",
+       "bp             NaN\n",
+       "stack          NaN\n",
+       "threeprime     NaN\n",
+       "seq            NaN\n",
+       "orientation    NaN\n",
+       "dtype: float64"
+      ]
+     },
+     "execution_count": 740,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s=pd.Series(index=[\"vh\",\"zid\",\"is_scaf\",\"r\",\"bp\",\"stack\",\"threeprime\",\"seq\",\"orientation\"])\n",
+    "s[\"vh\"]=2\n",
+    "s"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 164,
+   "id": "c907f808-bcdc-4157-ac33-508aa748e42e",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 164,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[0].is_scaffold"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 119,
+   "id": "5d8aeaca-e795-41a0-a9be-f5e5db5e111f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "m=dict(s.helices)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 139,
+   "id": "93c6bfde-9974-4b99-b65c-85b99ed70895",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Position3D(x=41.569219381653056, y=54.0, z=0)"
+      ]
+     },
+     "execution_count": 139,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "m[0].calculate_position(\"honeycomb\",s.geometry)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 153,
+   "id": "0dc56391-5cc7-49a5-bdc0-674c1ff93488",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{0: Helix(max_offset=42, min_offset=0, major_tick_start=0, major_tick_distance=None, major_tick_periodic_distances=None, major_ticks=None, grid_position=(16, 12), position=None, roll=0.0, idx=0, group='default_group', _domains=[Domain(, helix=0, forward=True, start=5, end=37), Domain(, helix=0, forward=True, start=39, end=42), Domain(, helix=0, forward=False, start=2, end=21), Domain(, helix=0, forward=False, start=21, end=24), Domain(, helix=0, forward=False, start=24, end=28), Domain(, helix=0, forward=False, start=28, end=39)]),\n",
+       " 1: Helix(max_offset=42, min_offset=0, major_tick_start=0, major_tick_distance=None, major_tick_periodic_distances=None, major_ticks=None, grid_position=(15, 12), position=None, roll=0.0, idx=1, group='default_group', _domains=[Domain(, helix=1, forward=False, start=5, end=19), Domain(, helix=1, forward=False, start=19, end=37), Domain(, helix=1, forward=True, start=3, end=21), Domain(, helix=1, forward=True, start=21, end=39), Domain(, helix=1, forward=False, start=39, end=42)]),\n",
+       " 2: Helix(max_offset=42, min_offset=0, major_tick_start=0, major_tick_distance=None, major_tick_periodic_distances=None, major_ticks=None, grid_position=(15, 13), position=None, roll=0.0, idx=2, group='default_group', _domains=[Domain(, helix=2, forward=True, start=2, end=19), Domain(, helix=2, forward=True, start=19, end=33), Domain(, helix=2, forward=True, start=39, end=42), Domain(, helix=2, forward=False, start=0, end=35)]),\n",
+       " 3: Helix(max_offset=42, min_offset=0, major_tick_start=0, major_tick_distance=None, major_tick_periodic_distances=None, major_ticks=None, grid_position=(16, 13), position=None, roll=0.0, idx=3, group='default_group', _domains=[Domain(, helix=3, forward=False, start=2, end=16), Domain(, helix=3, forward=False, start=16, end=33), Domain(, helix=3, forward=False, start=37, end=42), Domain(, helix=3, forward=True, start=0, end=21), Domain(, helix=3, forward=True, start=21, end=35)]),\n",
+       " 4: Helix(max_offset=40, min_offset=0, major_tick_start=0, major_tick_distance=None, major_tick_periodic_distances=None, major_ticks=None, grid_position=(17, 13), position=None, roll=0.0, idx=4, group='default_group', _domains=[Domain(, helix=4, forward=True, start=9, end=16), Domain(, helix=4, forward=True, start=16, end=40), Domain(, helix=4, forward=False, start=9, end=21), Domain(, helix=4, forward=False, start=21, end=40), Domain(, helix=4, forward=True, start=0, end=4)]),\n",
+       " 5: Helix(max_offset=40, min_offset=0, major_tick_start=0, major_tick_distance=None, major_tick_periodic_distances=None, major_ticks=None, grid_position=(17, 12), position=None, roll=0.0, idx=5, group='default_group', _domains=[Domain(, helix=5, forward=False, start=9, end=23), Domain(, helix=5, forward=False, start=23, end=40), Domain(, helix=5, forward=True, start=9, end=28), Domain(, helix=5, forward=True, start=28, end=40), Domain(, helix=5, forward=False, start=0, end=4)])}"
+      ]
+     },
+     "execution_count": 153,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "m"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "522678a9-81e9-40e5-9e56-400f054bd5d4",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "id": "39f36967-8c42-45c5-84b5-e1fab790be36",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 88,
+   "id": "ab8aa441-4b59-4d54-b44d-f776ab8e9e61",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "n=s.to_cadnano_v2_serializable()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 91,
+   "id": "73e69794-fc0a-486e-85f9-88a57276ee68",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[OrderedDict([('num', 0),\n",
+       "              ('row', 12),\n",
+       "              ('col', 16),\n",
+       "              ('scaf',\n",
+       "               [[-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [1, 5, 0, 6],\n",
+       "                [0, 5, 0, 7],\n",
+       "                [0, 6, 0, 8],\n",
+       "                [0, 7, 0, 9],\n",
+       "                [0, 8, 0, 10],\n",
+       "                [0, 9, 0, 11],\n",
+       "                [0, 10, 0, 12],\n",
+       "                [0, 11, 0, 13],\n",
+       "                [0, 12, 0, 14],\n",
+       "                [0, 13, 0, 15],\n",
+       "                [0, 14, 0, 16],\n",
+       "                [0, 15, 0, 17],\n",
+       "                [0, 16, 0, 18],\n",
+       "                [0, 17, 0, 19],\n",
+       "                [0, 18, 0, 20],\n",
+       "                [0, 19, 0, 21],\n",
+       "                [0, 20, 0, 22],\n",
+       "                [0, 21, 0, 23],\n",
+       "                [0, 22, 0, 24],\n",
+       "                [0, 23, 0, 25],\n",
+       "                [0, 24, 0, 26],\n",
+       "                [0, 25, 0, 27],\n",
+       "                [0, 26, 0, 28],\n",
+       "                [0, 27, 0, 29],\n",
+       "                [0, 28, 0, 30],\n",
+       "                [0, 29, 0, 31],\n",
+       "                [0, 30, 0, 32],\n",
+       "                [0, 31, 0, 33],\n",
+       "                [0, 32, 0, 34],\n",
+       "                [0, 33, 0, 35],\n",
+       "                [0, 34, 0, 36],\n",
+       "                [0, 35, 1, 36],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, 0, 40],\n",
+       "                [0, 39, 0, 41],\n",
+       "                [0, 40, -1, -1]]),\n",
+       "              ('stap',\n",
+       "               [[-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [0, 3, -1, -1],\n",
+       "                [0, 4, 0, 2],\n",
+       "                [0, 5, 0, 3],\n",
+       "                [0, 6, 0, 4],\n",
+       "                [0, 7, 0, 5],\n",
+       "                [0, 8, 0, 6],\n",
+       "                [0, 9, 0, 7],\n",
+       "                [0, 10, 0, 8],\n",
+       "                [0, 11, 0, 9],\n",
+       "                [0, 12, 0, 10],\n",
+       "                [0, 13, 0, 11],\n",
+       "                [0, 14, 0, 12],\n",
+       "                [0, 15, 0, 13],\n",
+       "                [0, 16, 0, 14],\n",
+       "                [0, 17, 0, 15],\n",
+       "                [0, 18, 0, 16],\n",
+       "                [0, 19, 0, 17],\n",
+       "                [0, 20, 0, 18],\n",
+       "                [1, 20, 0, 19],\n",
+       "                [0, 22, 1, 21],\n",
+       "                [0, 23, 0, 21],\n",
+       "                [-1, -1, 0, 22],\n",
+       "                [0, 25, -1, -1],\n",
+       "                [0, 26, 0, 24],\n",
+       "                [0, 27, 0, 25],\n",
+       "                [5, 27, 0, 26],\n",
+       "                [0, 29, 5, 28],\n",
+       "                [0, 30, 0, 28],\n",
+       "                [0, 31, 0, 29],\n",
+       "                [0, 32, 0, 30],\n",
+       "                [0, 33, 0, 31],\n",
+       "                [0, 34, 0, 32],\n",
+       "                [0, 35, 0, 33],\n",
+       "                [0, 36, 0, 34],\n",
+       "                [0, 37, 0, 35],\n",
+       "                [0, 38, 0, 36],\n",
+       "                [-1, -1, 0, 37],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1]]),\n",
+       "              ('loop',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('skip',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('stap_colors',\n",
+       "               [[20, 13369344],\n",
+       "                [23, 12060012],\n",
+       "                [27, 16204552],\n",
+       "                [38, 1507550]]),\n",
+       "              ('scafLoop', []),\n",
+       "              ('stapLoop', [])]),\n",
+       " OrderedDict([('num', 1),\n",
+       "              ('row', 12),\n",
+       "              ('col', 15),\n",
+       "              ('scaf',\n",
+       "               [[-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [1, 6, 0, 5],\n",
+       "                [1, 7, 1, 5],\n",
+       "                [1, 8, 1, 6],\n",
+       "                [1, 9, 1, 7],\n",
+       "                [1, 10, 1, 8],\n",
+       "                [1, 11, 1, 9],\n",
+       "                [1, 12, 1, 10],\n",
+       "                [1, 13, 1, 11],\n",
+       "                [1, 14, 1, 12],\n",
+       "                [1, 15, 1, 13],\n",
+       "                [1, 16, 1, 14],\n",
+       "                [1, 17, 1, 15],\n",
+       "                [1, 18, 1, 16],\n",
+       "                [2, 18, 1, 17],\n",
+       "                [1, 20, 2, 19],\n",
+       "                [1, 21, 1, 19],\n",
+       "                [1, 22, 1, 20],\n",
+       "                [1, 23, 1, 21],\n",
+       "                [1, 24, 1, 22],\n",
+       "                [1, 25, 1, 23],\n",
+       "                [1, 26, 1, 24],\n",
+       "                [1, 27, 1, 25],\n",
+       "                [1, 28, 1, 26],\n",
+       "                [1, 29, 1, 27],\n",
+       "                [1, 30, 1, 28],\n",
+       "                [1, 31, 1, 29],\n",
+       "                [1, 32, 1, 30],\n",
+       "                [1, 33, 1, 31],\n",
+       "                [1, 34, 1, 32],\n",
+       "                [1, 35, 1, 33],\n",
+       "                [1, 36, 1, 34],\n",
+       "                [0, 36, 1, 35],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [1, 40, -1, -1],\n",
+       "                [1, 41, 1, 39],\n",
+       "                [-1, -1, 1, 40]]),\n",
+       "              ('stap',\n",
+       "               [[-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, 1, 4],\n",
+       "                [1, 3, 1, 5],\n",
+       "                [1, 4, 1, 6],\n",
+       "                [1, 5, 1, 7],\n",
+       "                [1, 6, 1, 8],\n",
+       "                [1, 7, 1, 9],\n",
+       "                [1, 8, 1, 10],\n",
+       "                [1, 9, 1, 11],\n",
+       "                [1, 10, 1, 12],\n",
+       "                [1, 11, 1, 13],\n",
+       "                [1, 12, 1, 14],\n",
+       "                [1, 13, 1, 15],\n",
+       "                [1, 14, 1, 16],\n",
+       "                [1, 15, 1, 17],\n",
+       "                [1, 16, 1, 18],\n",
+       "                [1, 17, 1, 19],\n",
+       "                [1, 18, 1, 20],\n",
+       "                [1, 19, 0, 20],\n",
+       "                [0, 21, 1, 22],\n",
+       "                [1, 21, 1, 23],\n",
+       "                [1, 22, 1, 24],\n",
+       "                [1, 23, 1, 25],\n",
+       "                [1, 24, 1, 26],\n",
+       "                [1, 25, 1, 27],\n",
+       "                [1, 26, 1, 28],\n",
+       "                [1, 27, 1, 29],\n",
+       "                [1, 28, 1, 30],\n",
+       "                [1, 29, 1, 31],\n",
+       "                [1, 30, 1, 32],\n",
+       "                [1, 31, 1, 33],\n",
+       "                [1, 32, 1, 34],\n",
+       "                [1, 33, 1, 35],\n",
+       "                [1, 34, 1, 36],\n",
+       "                [1, 35, 1, 37],\n",
+       "                [1, 36, 1, 38],\n",
+       "                [1, 37, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1]]),\n",
+       "              ('loop',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('skip',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('stap_colors', [[3, 13369344], [21, 12060012]]),\n",
+       "              ('scafLoop', []),\n",
+       "              ('stapLoop', [])]),\n",
+       " OrderedDict([('num', 2),\n",
+       "              ('row', 13),\n",
+       "              ('col', 15),\n",
+       "              ('scaf',\n",
+       "               [[-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [3, 2, 2, 3],\n",
+       "                [2, 2, 2, 4],\n",
+       "                [2, 3, 2, 5],\n",
+       "                [2, 4, 2, 6],\n",
+       "                [2, 5, 2, 7],\n",
+       "                [2, 6, 2, 8],\n",
+       "                [2, 7, 2, 9],\n",
+       "                [2, 8, 2, 10],\n",
+       "                [2, 9, 2, 11],\n",
+       "                [2, 10, 2, 12],\n",
+       "                [2, 11, 2, 13],\n",
+       "                [2, 12, 2, 14],\n",
+       "                [2, 13, 2, 15],\n",
+       "                [2, 14, 2, 16],\n",
+       "                [2, 15, 2, 17],\n",
+       "                [2, 16, 2, 18],\n",
+       "                [2, 17, 1, 18],\n",
+       "                [1, 19, 2, 20],\n",
+       "                [2, 19, 2, 21],\n",
+       "                [2, 20, 2, 22],\n",
+       "                [2, 21, 2, 23],\n",
+       "                [2, 22, 2, 24],\n",
+       "                [2, 23, 2, 25],\n",
+       "                [2, 24, 2, 26],\n",
+       "                [2, 25, 2, 27],\n",
+       "                [2, 26, 2, 28],\n",
+       "                [2, 27, 2, 29],\n",
+       "                [2, 28, 2, 30],\n",
+       "                [2, 29, 2, 31],\n",
+       "                [2, 30, 2, 32],\n",
+       "                [2, 31, 3, 32],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, 2, 40],\n",
+       "                [2, 39, 2, 41],\n",
+       "                [2, 40, -1, -1]]),\n",
+       "              ('stap',\n",
+       "               [[2, 1, -1, -1],\n",
+       "                [2, 2, 2, 0],\n",
+       "                [2, 3, 2, 1],\n",
+       "                [2, 4, 2, 2],\n",
+       "                [2, 5, 2, 3],\n",
+       "                [2, 6, 2, 4],\n",
+       "                [2, 7, 2, 5],\n",
+       "                [2, 8, 2, 6],\n",
+       "                [2, 9, 2, 7],\n",
+       "                [2, 10, 2, 8],\n",
+       "                [2, 11, 2, 9],\n",
+       "                [2, 12, 2, 10],\n",
+       "                [2, 13, 2, 11],\n",
+       "                [2, 14, 2, 12],\n",
+       "                [2, 15, 2, 13],\n",
+       "                [2, 16, 2, 14],\n",
+       "                [2, 17, 2, 15],\n",
+       "                [2, 18, 2, 16],\n",
+       "                [2, 19, 2, 17],\n",
+       "                [2, 20, 2, 18],\n",
+       "                [2, 21, 2, 19],\n",
+       "                [2, 22, 2, 20],\n",
+       "                [2, 23, 2, 21],\n",
+       "                [2, 24, 2, 22],\n",
+       "                [2, 25, 2, 23],\n",
+       "                [2, 26, 2, 24],\n",
+       "                [2, 27, 2, 25],\n",
+       "                [2, 28, 2, 26],\n",
+       "                [2, 29, 2, 27],\n",
+       "                [2, 30, 2, 28],\n",
+       "                [2, 31, 2, 29],\n",
+       "                [2, 32, 2, 30],\n",
+       "                [2, 33, 2, 31],\n",
+       "                [2, 34, 2, 32],\n",
+       "                [-1, -1, 2, 33],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1]]),\n",
+       "              ('loop',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('skip',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('stap_colors', [[34, 8947848]]),\n",
+       "              ('scafLoop', []),\n",
+       "              ('stapLoop', [])]),\n",
+       " OrderedDict([('num', 3),\n",
+       "              ('row', 13),\n",
+       "              ('col', 16),\n",
+       "              ('scaf',\n",
+       "               [[-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [3, 3, 2, 2],\n",
+       "                [3, 4, 3, 2],\n",
+       "                [3, 5, 3, 3],\n",
+       "                [3, 6, 3, 4],\n",
+       "                [3, 7, 3, 5],\n",
+       "                [3, 8, 3, 6],\n",
+       "                [3, 9, 3, 7],\n",
+       "                [3, 10, 3, 8],\n",
+       "                [3, 11, 3, 9],\n",
+       "                [3, 12, 3, 10],\n",
+       "                [3, 13, 3, 11],\n",
+       "                [3, 14, 3, 12],\n",
+       "                [3, 15, 3, 13],\n",
+       "                [4, 15, 3, 14],\n",
+       "                [3, 17, 4, 16],\n",
+       "                [3, 18, 3, 16],\n",
+       "                [3, 19, 3, 17],\n",
+       "                [3, 20, 3, 18],\n",
+       "                [3, 21, 3, 19],\n",
+       "                [3, 22, 3, 20],\n",
+       "                [3, 23, 3, 21],\n",
+       "                [3, 24, 3, 22],\n",
+       "                [3, 25, 3, 23],\n",
+       "                [3, 26, 3, 24],\n",
+       "                [3, 27, 3, 25],\n",
+       "                [3, 28, 3, 26],\n",
+       "                [3, 29, 3, 27],\n",
+       "                [3, 30, 3, 28],\n",
+       "                [3, 31, 3, 29],\n",
+       "                [3, 32, 3, 30],\n",
+       "                [2, 32, 3, 31],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [3, 38, -1, -1],\n",
+       "                [3, 39, 3, 37],\n",
+       "                [3, 40, 3, 38],\n",
+       "                [3, 41, 3, 39],\n",
+       "                [-1, -1, 3, 40]]),\n",
+       "              ('stap',\n",
+       "               [[-1, -1, 3, 1],\n",
+       "                [3, 0, 3, 2],\n",
+       "                [3, 1, 3, 3],\n",
+       "                [3, 2, 3, 4],\n",
+       "                [3, 3, 3, 5],\n",
+       "                [3, 4, 3, 6],\n",
+       "                [3, 5, 3, 7],\n",
+       "                [3, 6, 3, 8],\n",
+       "                [3, 7, 3, 9],\n",
+       "                [3, 8, 3, 10],\n",
+       "                [3, 9, 3, 11],\n",
+       "                [3, 10, 3, 12],\n",
+       "                [3, 11, 3, 13],\n",
+       "                [3, 12, 3, 14],\n",
+       "                [3, 13, 3, 15],\n",
+       "                [3, 14, 3, 16],\n",
+       "                [3, 15, 3, 17],\n",
+       "                [3, 16, 3, 18],\n",
+       "                [3, 17, 3, 19],\n",
+       "                [3, 18, 3, 20],\n",
+       "                [3, 19, 4, 20],\n",
+       "                [4, 21, 3, 22],\n",
+       "                [3, 21, 3, 23],\n",
+       "                [3, 22, 3, 24],\n",
+       "                [3, 23, 3, 25],\n",
+       "                [3, 24, 3, 26],\n",
+       "                [3, 25, 3, 27],\n",
+       "                [3, 26, 3, 28],\n",
+       "                [3, 27, 3, 29],\n",
+       "                [3, 28, 3, 30],\n",
+       "                [3, 29, 3, 31],\n",
+       "                [3, 30, 3, 32],\n",
+       "                [3, 31, 3, 33],\n",
+       "                [3, 32, 3, 34],\n",
+       "                [3, 33, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1]]),\n",
+       "              ('loop',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('skip',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('stap_colors', [[0, 13369344], [21, 8947848]]),\n",
+       "              ('scafLoop', []),\n",
+       "              ('stapLoop', [])]),\n",
+       " OrderedDict([('num', 4),\n",
+       "              ('row', 13),\n",
+       "              ('col', 17),\n",
+       "              ('scaf',\n",
+       "               [[-1, -1, 4, 1],\n",
+       "                [4, 0, 4, 2],\n",
+       "                [4, 1, 4, 3],\n",
+       "                [4, 2, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [5, 9, 4, 10],\n",
+       "                [4, 9, 4, 11],\n",
+       "                [4, 10, 4, 12],\n",
+       "                [4, 11, 4, 13],\n",
+       "                [4, 12, 4, 14],\n",
+       "                [4, 13, 4, 15],\n",
+       "                [4, 14, 3, 15],\n",
+       "                [3, 16, 4, 17],\n",
+       "                [4, 16, 4, 18],\n",
+       "                [4, 17, 4, 19],\n",
+       "                [4, 18, 4, 20],\n",
+       "                [4, 19, 4, 21],\n",
+       "                [4, 20, 4, 22],\n",
+       "                [4, 21, 4, 23],\n",
+       "                [4, 22, 4, 24],\n",
+       "                [4, 23, 4, 25],\n",
+       "                [4, 24, 4, 26],\n",
+       "                [4, 25, 4, 27],\n",
+       "                [4, 26, 4, 28],\n",
+       "                [4, 27, 4, 29],\n",
+       "                [4, 28, 4, 30],\n",
+       "                [4, 29, 4, 31],\n",
+       "                [4, 30, 4, 32],\n",
+       "                [4, 31, 4, 33],\n",
+       "                [4, 32, 4, 34],\n",
+       "                [4, 33, 4, 35],\n",
+       "                [4, 34, 4, 36],\n",
+       "                [4, 35, 4, 37],\n",
+       "                [4, 36, 4, 38],\n",
+       "                [4, 37, 4, 39],\n",
+       "                [4, 38, 5, 39],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1]]),\n",
+       "              ('stap',\n",
+       "               [[-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [4, 10, -1, -1],\n",
+       "                [4, 11, 4, 9],\n",
+       "                [4, 12, 4, 10],\n",
+       "                [4, 13, 4, 11],\n",
+       "                [4, 14, 4, 12],\n",
+       "                [4, 15, 4, 13],\n",
+       "                [4, 16, 4, 14],\n",
+       "                [4, 17, 4, 15],\n",
+       "                [4, 18, 4, 16],\n",
+       "                [4, 19, 4, 17],\n",
+       "                [4, 20, 4, 18],\n",
+       "                [3, 20, 4, 19],\n",
+       "                [4, 22, 3, 21],\n",
+       "                [4, 23, 4, 21],\n",
+       "                [4, 24, 4, 22],\n",
+       "                [4, 25, 4, 23],\n",
+       "                [4, 26, 4, 24],\n",
+       "                [4, 27, 4, 25],\n",
+       "                [4, 28, 4, 26],\n",
+       "                [4, 29, 4, 27],\n",
+       "                [4, 30, 4, 28],\n",
+       "                [4, 31, 4, 29],\n",
+       "                [4, 32, 4, 30],\n",
+       "                [4, 33, 4, 31],\n",
+       "                [4, 34, 4, 32],\n",
+       "                [4, 35, 4, 33],\n",
+       "                [4, 36, 4, 34],\n",
+       "                [4, 37, 4, 35],\n",
+       "                [4, 38, 4, 36],\n",
+       "                [4, 39, 4, 37],\n",
+       "                [-1, -1, 4, 38],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1]]),\n",
+       "              ('loop',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('skip',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('stap_colors', [[20, 13369344], [39, 8947848]]),\n",
+       "              ('scafLoop', []),\n",
+       "              ('stapLoop', [])]),\n",
+       " OrderedDict([('num', 5),\n",
+       "              ('row', 12),\n",
+       "              ('col', 17),\n",
+       "              ('scaf',\n",
+       "               [[5, 1, -1, -1],\n",
+       "                [5, 2, 5, 0],\n",
+       "                [5, 3, 5, 1],\n",
+       "                [-1, -1, 5, 2],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [5, 10, 4, 9],\n",
+       "                [5, 11, 5, 9],\n",
+       "                [5, 12, 5, 10],\n",
+       "                [5, 13, 5, 11],\n",
+       "                [5, 14, 5, 12],\n",
+       "                [5, 15, 5, 13],\n",
+       "                [5, 16, 5, 14],\n",
+       "                [5, 17, 5, 15],\n",
+       "                [5, 18, 5, 16],\n",
+       "                [5, 19, 5, 17],\n",
+       "                [5, 20, 5, 18],\n",
+       "                [5, 21, 5, 19],\n",
+       "                [5, 22, 5, 20],\n",
+       "                [-1, -1, 5, 21],\n",
+       "                [5, 24, -1, -1],\n",
+       "                [5, 25, 5, 23],\n",
+       "                [5, 26, 5, 24],\n",
+       "                [5, 27, 5, 25],\n",
+       "                [5, 28, 5, 26],\n",
+       "                [5, 29, 5, 27],\n",
+       "                [5, 30, 5, 28],\n",
+       "                [5, 31, 5, 29],\n",
+       "                [5, 32, 5, 30],\n",
+       "                [5, 33, 5, 31],\n",
+       "                [5, 34, 5, 32],\n",
+       "                [5, 35, 5, 33],\n",
+       "                [5, 36, 5, 34],\n",
+       "                [5, 37, 5, 35],\n",
+       "                [5, 38, 5, 36],\n",
+       "                [5, 39, 5, 37],\n",
+       "                [4, 39, 5, 38],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1]]),\n",
+       "              ('stap',\n",
+       "               [[-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, 5, 10],\n",
+       "                [5, 9, 5, 11],\n",
+       "                [5, 10, 5, 12],\n",
+       "                [5, 11, 5, 13],\n",
+       "                [5, 12, 5, 14],\n",
+       "                [5, 13, 5, 15],\n",
+       "                [5, 14, 5, 16],\n",
+       "                [5, 15, 5, 17],\n",
+       "                [5, 16, 5, 18],\n",
+       "                [5, 17, 5, 19],\n",
+       "                [5, 18, 5, 20],\n",
+       "                [5, 19, 5, 21],\n",
+       "                [5, 20, 5, 22],\n",
+       "                [5, 21, 5, 23],\n",
+       "                [5, 22, 5, 24],\n",
+       "                [5, 23, 5, 25],\n",
+       "                [5, 24, 5, 26],\n",
+       "                [5, 25, 5, 27],\n",
+       "                [5, 26, 0, 27],\n",
+       "                [0, 28, 5, 29],\n",
+       "                [5, 28, 5, 30],\n",
+       "                [5, 29, 5, 31],\n",
+       "                [5, 30, 5, 32],\n",
+       "                [5, 31, 5, 33],\n",
+       "                [5, 32, 5, 34],\n",
+       "                [5, 33, 5, 35],\n",
+       "                [5, 34, 5, 36],\n",
+       "                [5, 35, 5, 37],\n",
+       "                [5, 36, 5, 38],\n",
+       "                [5, 37, 5, 39],\n",
+       "                [5, 38, -1, -1],\n",
+       "                [-1, -1, -1, -1],\n",
+       "                [-1, -1, -1, -1]]),\n",
+       "              ('loop',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('skip',\n",
+       "               [0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0,\n",
+       "                0]),\n",
+       "              ('stap_colors', [[9, 16204552], [28, 1507550]]),\n",
+       "              ('scafLoop', []),\n",
+       "              ('stapLoop', [])])]"
+      ]
+     },
+     "execution_count": 91,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "n['vstrands']"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 92,
+   "id": "acf7fe2e-0203-485e-a176-d711c847477a",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Found cadnano version 2 file\n"
+     ]
+    }
+   ],
+   "source": [
+    "doc = Document()\n",
+    "cadnano.fileio.v2decode.decode(doc,n)\n",
+    "decoder = 2"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 962,
+   "id": "bce3f7a8-b003-4a82-ade5-37501b68c0f4",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n",
+      "/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:1105: RuntimeWarning: invalid value encountered in scalar divide\n",
+      "  np.add(m2, m1*((1 - cos_)/sin_squared), out=m0)\n"
+     ]
+    }
+   ],
+   "source": [
+    "doc = Document()\n",
+    "cadnano.fileio.v3decode.decode(doc,json_data)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 97,
+   "id": "8208056b-181d-43bd-a344-ec6d0a24b7f6",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "NucleicAcidPart_-1_5920"
+      ]
+     },
+     "execution_count": 97,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "parts = [p for p in doc.getParts()]\n",
+    "parts[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 961,
+   "id": "f07e1b32",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "#json_data=read_json_file(\"test_cad2.5.json\")\n",
+    "filename=\"test_insert_2.5.json\"\n",
+    "try:\n",
+    "    with open(filename) as ch:\n",
+    "        json_data = json.load(ch)\n",
+    "except:\n",
+    "    with open(filename) as ch:\n",
+    "        content = \"\"\n",
+    "        for l in ch:\n",
+    "            l = re.sub(r\"'\", r'\"', l)\n",
+    "            # https://stackoverflow.com/questions/4033633/handling-lazy-json-in-python-expecting-property-name\n",
+    "            # l = re.sub(r\"{\\s*(\\w)\", r'{\"\\1', l)\n",
+    "            # l = re.sub(r\",\\s*(\\w)\", r',\"\\1', l)\n",
+    "            # l = re.sub(r\"(\\w):\", r'\\1\":', l)\n",
+    "            content += l+\"\\n\"\n",
+    "        json_data = json.loads(content)\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 575,
+   "id": "6931b352-2f85-4ba1-9de3-a53c24041c0c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(34, <rev_StrandSet(2)>.<Strand(0, 34)>, <rev_StrandSet(2)>.<Strand(0, 34)>),\n",
+       " (31, <fwd_StrandSet(6)>.<Strand(1, 31)>, <fwd_StrandSet(6)>.<Strand(1, 31)>),\n",
+       " (3, <fwd_StrandSet(0)>.<Strand(39, 41)>, <fwd_StrandSet(0)>.<Strand(39, 41)>),\n",
+       " (21,\n",
+       "  <rev_StrandSet(0)>.<Strand(21, 23)>,\n",
+       "  <fwd_StrandSet(1)>.<Strand(21, 38)>),\n",
+       " (23, <fwd_StrandSet(5)>.<Strand(9, 27)>, <rev_StrandSet(0)>.<Strand(24, 27)>),\n",
+       " (5, <rev_StrandSet(3)>.<Strand(37, 41)>, <rev_StrandSet(3)>.<Strand(37, 41)>),\n",
+       " (32,\n",
+       "  <rev_StrandSet(4)>.<Strand(21, 39)>,\n",
+       "  <fwd_StrandSet(3)>.<Strand(21, 34)>),\n",
+       " (208,\n",
+       "  <rev_StrandSet(5)>.<Strand(9, 22)>,\n",
+       "  <rev_StrandSet(5)>.<Strand(23, 39)>),\n",
+       " (3, <rev_StrandSet(1)>.<Strand(39, 41)>, <rev_StrandSet(1)>.<Strand(39, 41)>),\n",
+       " (33, <fwd_StrandSet(3)>.<Strand(0, 20)>, <rev_StrandSet(4)>.<Strand(9, 20)>),\n",
+       " (31, <rev_StrandSet(6)>.<Strand(1, 31)>, <rev_StrandSet(6)>.<Strand(1, 31)>),\n",
+       " (34,\n",
+       "  <rev_StrandSet(0)>.<Strand(28, 38)>,\n",
+       "  <fwd_StrandSet(5)>.<Strand(28, 39)>),\n",
+       " (4, <rev_StrandSet(5)>.<Strand(0, 3)>, <rev_StrandSet(5)>.<Strand(0, 3)>),\n",
+       " (48, <fwd_StrandSet(1)>.<Strand(3, 20)>, <rev_StrandSet(0)>.<Strand(2, 20)>),\n",
+       " (4, <fwd_StrandSet(4)>.<Strand(0, 3)>, <fwd_StrandSet(4)>.<Strand(0, 3)>),\n",
+       " (3, <fwd_StrandSet(2)>.<Strand(39, 41)>, <fwd_StrandSet(2)>.<Strand(39, 41)>)]"
+      ]
+     },
+     "execution_count": 575,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "o0=list(part.oligos())[11]\n",
+    "[(i.length(),i.strand5p(),i.strand3p()) for i in part.oligos()]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 600,
+   "id": "43cda523-ec1a-42ca-b546-17ffac4dea17",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[[(2, <StrandEnum.STAPLE: 1>, 34),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 35),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 36),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 37),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 38),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 39),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 40),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 45),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 46),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 47),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 48),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 49),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 50),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 51),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 52),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 53),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 54),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 55),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 56),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 57),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 58),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 59),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 60),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 61),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 62),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 63),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 64),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 65),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 66),\n",
+       "  (2, <StrandEnum.STAPLE: 1>, 67)],\n",
+       " [(6, <StrandEnum.SCAFFOLD: 0>, 1),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 2),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 3),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 4),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 5),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 6),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 7),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 8),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 9),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 10),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 11),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 12),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 13),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 14),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 15),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 16),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 17),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 18),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 19),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 20),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 21),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 22),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 23),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 24),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 25),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 26),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 27),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       "  (6, <StrandEnum.SCAFFOLD: 0>, 31)],\n",
+       " [(0, <StrandEnum.SCAFFOLD: 0>, 39),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 40),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 41)],\n",
+       " [(0, <StrandEnum.STAPLE: 1>, 23),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 24),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 25),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 21),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 22),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 23),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 24),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 25),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 26),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 27),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 31),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 32),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 33),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 34),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 35),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 36),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 37),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 38)],\n",
+       " [(5, <StrandEnum.SCAFFOLD: 0>, 9),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 10),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 11),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 12),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 13),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 14),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 15),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 16),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 17),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 18),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 19),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 20),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 21),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 22),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 23),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 24),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 25),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 26),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 27),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 27),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 28),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 29),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 30)],\n",
+       " [(3, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 45)],\n",
+       " [(4, <StrandEnum.STAPLE: 1>, 39),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 40),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 45),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 46),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 47),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 48),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 49),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 50),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 51),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 52),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 53),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 54),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 55),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 56),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 57),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 21),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 22),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 23),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 24),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 25),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 26),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 27),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 31),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 32),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 33)],\n",
+       " [(5, <StrandEnum.STAPLE: 1>, 22),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 23),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 24),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 25),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 26),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 27),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 28),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 29),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 30),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 31),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 32),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 33),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 34),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 35),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 9),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 10),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 11),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 12),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 13),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 14),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 15),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 15),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 16),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 17),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 18),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 19),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 20),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 21),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 22),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 23),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 24),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 25),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 26),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 27),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 28),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 2),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 3),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 4),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 5),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 6),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 7),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 8),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 9),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 10),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 11),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 12),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 13),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 14),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 15),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 16),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 17),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 18),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 19),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 20),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 21),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 22),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 23),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 24),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 25),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 26),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 27),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 28),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 29),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 30),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 31),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 32),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 5),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 6),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 7),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 8),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 9),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 10),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 11),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 12),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 13),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 14),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 15),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 16),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 17),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 18),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 19),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 20),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 21),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 22),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 23),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 24),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 25),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 26),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 27),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 31),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 32),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 33),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 34),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 35),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 36),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 37),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 38),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 39),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 40),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 41),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 42),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 43),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 44),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 45),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 46),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 47),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 48),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 49),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 50),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 51),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 52),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 53),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 54),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 55),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 56),\n",
+       "  (0, <StrandEnum.SCAFFOLD: 0>, 57),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 36),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 37),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 38),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 39),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 40),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 45),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 46),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 47),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 48),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 49),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 50),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 51),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 52),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 53),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 19),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 20),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 21),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 22),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 23),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 24),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 25),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 26),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 27),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 31),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 32),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 32),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 33),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 34),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 35),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 36),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 37),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 38),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 39),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 40),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 45),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 46),\n",
+       "  (3, <StrandEnum.STAPLE: 1>, 47),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 16),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 17),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 18),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 19),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 20),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 21),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 22),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 23),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 24),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 25),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 26),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 27),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 31),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 32),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 33),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 34),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 35),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 36),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 37),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 38),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 39),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 39),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 40),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 45),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 46),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 47),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 48),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 49),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 50),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 51),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 52),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 53),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 54),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 55)],\n",
+       " [(1, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (1, <StrandEnum.STAPLE: 1>, 43)],\n",
+       " [(3, <StrandEnum.SCAFFOLD: 0>, 0),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 1),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 2),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 3),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 4),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 5),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 6),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 7),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 8),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 9),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 10),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 11),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 12),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 13),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 14),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 15),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 16),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 17),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 18),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 19),\n",
+       "  (3, <StrandEnum.SCAFFOLD: 0>, 20),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 20),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 21),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 22),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 23),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 24),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 25),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 26),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 27),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 28),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 29),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 30),\n",
+       "  (4, <StrandEnum.STAPLE: 1>, 31)],\n",
+       " [(6, <StrandEnum.STAPLE: 1>, 31),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 32),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 33),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 34),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 35),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 36),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 37),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 38),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 39),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 40),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 45),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 46),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 47),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 48),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 49),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 50),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 51),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 52),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 53),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 54),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 55),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 56),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 57),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 58),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 59),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 60),\n",
+       "  (6, <StrandEnum.STAPLE: 1>, 61)],\n",
+       " [(0, <StrandEnum.STAPLE: 1>, 38),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 39),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 40),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 45),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 46),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 47),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 48),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 49),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 50),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 51),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 52),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 53),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 54),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 55),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 56),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 57),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 58),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 59),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 31),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 32),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 33),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 34),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 35),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 36),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 37),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 38),\n",
+       "  (5, <StrandEnum.SCAFFOLD: 0>, 39)],\n",
+       " [(5, <StrandEnum.STAPLE: 1>, 3),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 4),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 5),\n",
+       "  (5, <StrandEnum.STAPLE: 1>, 6)],\n",
+       " [(1, <StrandEnum.SCAFFOLD: 0>, 3),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 4),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 5),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 6),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 7),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 8),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 9),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 10),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 11),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 12),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 13),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 14),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 15),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 16),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 17),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 18),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 19),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 20),\n",
+       "  (1, <StrandEnum.SCAFFOLD: 0>, 21),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 20),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 21),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 22),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 23),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 24),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 25),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 26),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 27),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 28),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 29),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 30),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 31),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 32),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 33),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 34),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 35),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 36),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 37),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 38),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 39),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 40),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 41),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 42),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 43),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 44),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 45),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 46),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 47),\n",
+       "  (0, <StrandEnum.STAPLE: 1>, 48)],\n",
+       " [(4, <StrandEnum.SCAFFOLD: 0>, 0),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 1),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 2),\n",
+       "  (4, <StrandEnum.SCAFFOLD: 0>, 3)],\n",
+       " [(2, <StrandEnum.SCAFFOLD: 0>, 39),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 40),\n",
+       "  (2, <StrandEnum.SCAFFOLD: 0>, 41)]]"
+      ]
+     },
+     "execution_count": 600,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "[[i.getAbsolutePositionAtLength(j) for j in range(i.length())] for i in part.oligos()]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 584,
+   "id": "ec3b6b7c-f03a-4c34-85d9-e4f44ed59792",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[22, 12]"
+      ]
+     },
+     "execution_count": 584,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "o0.getStrandLengths()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 596,
+   "id": "dadccba2-b9b3-4110-8328-1076ede1432c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_decrementLength',\n",
+       " '_incrementLength',\n",
+       " '_is_circular',\n",
+       " '_parent',\n",
+       " '_part',\n",
+       " '_props',\n",
+       " '_setColor',\n",
+       " '_setLength',\n",
+       " '_setLoop',\n",
+       " '_setProperty',\n",
+       " '_signals',\n",
+       " '_strand5p',\n",
+       " '_strandMergeUpdate',\n",
+       " '_strandSplitUpdate',\n",
+       " 'addToPart',\n",
+       " 'applyAbstractSequences',\n",
+       " 'applyColor',\n",
+       " 'applySequence',\n",
+       " 'applySequenceCMD',\n",
+       " 'clearAbstractSequences',\n",
+       " 'connect',\n",
+       " 'deleteLater',\n",
+       " 'destroy',\n",
+       " 'disconnect',\n",
+       " 'displayAbstractSequences',\n",
+       " 'dump',\n",
+       " 'editable_properties',\n",
+       " 'getAbsolutePositionAtLength',\n",
+       " 'getColor',\n",
+       " 'getModelProperties',\n",
+       " 'getName',\n",
+       " 'getNumberOfBasesToEachXover',\n",
+       " 'getOutlineProperties',\n",
+       " 'getProperty',\n",
+       " 'getStrandLengths',\n",
+       " 'isCircular',\n",
+       " 'length',\n",
+       " 'locString',\n",
+       " 'oligoPropertyChangedSignal',\n",
+       " 'oligoRemovedSignal',\n",
+       " 'oligoSelectedChangedSignal',\n",
+       " 'oligoSequenceAddedSignal',\n",
+       " 'oligoSequenceClearedSignal',\n",
+       " 'parent',\n",
+       " 'part',\n",
+       " 'refreshLength',\n",
+       " 'remove',\n",
+       " 'removeFromPart',\n",
+       " 'sequence',\n",
+       " 'sequenceExport',\n",
+       " 'setParent',\n",
+       " 'setPart',\n",
+       " 'setProperty',\n",
+       " 'setStrand5p',\n",
+       " 'shallowCopy',\n",
+       " 'shouldHighlight',\n",
+       " 'signals',\n",
+       " 'splitAtAbsoluteLengths',\n",
+       " 'strand3p',\n",
+       " 'strand5p',\n",
+       " 'undoStack']"
+      ]
+     },
+     "execution_count": 596,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dir(o0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 588,
+   "id": "0db298ba-4f29-49d8-bdc3-a6faa4674e22",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(0, <StrandEnum.STAPLE: 1>, 38),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 39),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 40),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 41),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 42),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 43),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 44),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 45),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 46),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 47),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 48),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 49),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 50),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 51),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 52),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 53),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 54),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 55),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 56),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 57),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 58),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 59),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 31),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 32),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 33),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 34),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 35),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 36),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 37),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 38),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 39)]"
+      ]
+     },
+     "execution_count": 588,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "[o0.getAbsolutePositionAtLength(i) for i in range(34)]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "72874b29-ac4d-4c89-abd6-187e1d2a99aa",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "o0.getAbsolutePositionAtLength(i)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 578,
+   "id": "4af733b6-ebfd-47fc-aaef-2ee5d4267c88",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<rev_StrandSet(0)>.<Strand(28, 38)>"
+      ]
+     },
+     "execution_count": 578,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "o0.strand5p()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 582,
+   "id": "828c35da-7c02-469d-9a8e-ee2420bed581",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(0, <StrandEnum.STAPLE: 1>, 38),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 39),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 40),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 41),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 42),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 43),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 44),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 45),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 46),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 47),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 48),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 49),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 50),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 51),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 52),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 53),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 54),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 55),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 56),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 57),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 58),\n",
+       " (0, <StrandEnum.STAPLE: 1>, 59),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 28),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 29),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 30),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 31),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 32),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 33),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 34),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 35),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 36),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 37),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 38),\n",
+       " (5, <StrandEnum.SCAFFOLD: 0>, 39)]"
+      ]
+     },
+     "execution_count": 582,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "[o0.getAbsolutePositionAtLength(i) for i in range(o0.length())]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 563,
+   "id": "ffd99357-946a-4334-8202-4fd78e63e062",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_decrementLength',\n",
+       " '_incrementLength',\n",
+       " '_is_circular',\n",
+       " '_parent',\n",
+       " '_part',\n",
+       " '_props',\n",
+       " '_setColor',\n",
+       " '_setLength',\n",
+       " '_setLoop',\n",
+       " '_setProperty',\n",
+       " '_signals',\n",
+       " '_strand5p',\n",
+       " '_strandMergeUpdate',\n",
+       " '_strandSplitUpdate',\n",
+       " 'addToPart',\n",
+       " 'applyAbstractSequences',\n",
+       " 'applyColor',\n",
+       " 'applySequence',\n",
+       " 'applySequenceCMD',\n",
+       " 'clearAbstractSequences',\n",
+       " 'connect',\n",
+       " 'deleteLater',\n",
+       " 'destroy',\n",
+       " 'disconnect',\n",
+       " 'displayAbstractSequences',\n",
+       " 'dump',\n",
+       " 'editable_properties',\n",
+       " 'getAbsolutePositionAtLength',\n",
+       " 'getColor',\n",
+       " 'getModelProperties',\n",
+       " 'getName',\n",
+       " 'getNumberOfBasesToEachXover',\n",
+       " 'getOutlineProperties',\n",
+       " 'getProperty',\n",
+       " 'getStrandLengths',\n",
+       " 'isCircular',\n",
+       " 'length',\n",
+       " 'locString',\n",
+       " 'oligoPropertyChangedSignal',\n",
+       " 'oligoRemovedSignal',\n",
+       " 'oligoSelectedChangedSignal',\n",
+       " 'oligoSequenceAddedSignal',\n",
+       " 'oligoSequenceClearedSignal',\n",
+       " 'parent',\n",
+       " 'part',\n",
+       " 'refreshLength',\n",
+       " 'remove',\n",
+       " 'removeFromPart',\n",
+       " 'sequence',\n",
+       " 'sequenceExport',\n",
+       " 'setParent',\n",
+       " 'setPart',\n",
+       " 'setProperty',\n",
+       " 'setStrand5p',\n",
+       " 'shallowCopy',\n",
+       " 'shouldHighlight',\n",
+       " 'signals',\n",
+       " 'splitAtAbsoluteLengths',\n",
+       " 'strand3p',\n",
+       " 'strand5p',\n",
+       " 'undoStack']"
+      ]
+     },
+     "execution_count": 563,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dir(o0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 562,
+   "id": "828c7161-0700-4bcd-a51e-eeb195340e35",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'id_num': 2,\n",
+       " 'idx5p': 34,\n",
+       " 'is_5p_fwd': False,\n",
+       " 'is_circular': False,\n",
+       " 'sequence': None,\n",
+       " 'name': 'oligo7088',\n",
+       " 'color': '#888888',\n",
+       " 'length': 34,\n",
+       " 'is_visible': True}"
+      ]
+     },
+     "execution_count": 562,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "o0.dump()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 439,
+   "id": "4c0546f8-b0d4-45b2-9d81-d3699ee95921",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "strands5 = [o.strand5p() for o in part.oligos()]\n",
+    "strands3 = [o.strand3p() for o in part.oligos()]\n",
+    "        \n",
+    "fprime_list = [(s.idNum(),s.isForward(),s.idx5Prime()) for s in strands5]\n",
+    "tprime_list = [(s.idNum(),s.isForward(),s.idx3Prime()) for s in strands3]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 557,
+   "id": "7c15d8bc-7c0e-46bb-860b-cfa5cf5a5a0c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<rev_StrandSet(2)>.<Strand(0, 34)>"
+      ]
+     },
+     "execution_count": 557,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "strands5[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 556,
+   "id": "eaef916c-98d2-47c9-948e-a7fd76a1d3b4",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "34"
+      ]
+     },
+     "execution_count": 556,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "strands5[0].totalLength()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 543,
+   "id": "ca6571df-2523-484a-a5b8-32cf44bb5afc",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(2, False, 34),\n",
+       " (6, True, 1),\n",
+       " (0, True, 39),\n",
+       " (0, False, 23),\n",
+       " (5, True, 9),\n",
+       " (3, False, 41),\n",
+       " (4, False, 39),\n",
+       " (5, False, 22),\n",
+       " (1, False, 41),\n",
+       " (3, True, 0),\n",
+       " (6, False, 31),\n",
+       " (0, False, 38),\n",
+       " (5, False, 3),\n",
+       " (1, True, 3),\n",
+       " (4, True, 0),\n",
+       " (2, True, 39)]"
+      ]
+     },
+     "execution_count": 543,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fprime_list"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 544,
+   "id": "b5d1a3b8-f616-4050-ae12-de34bd18b4c9",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(2, False, 0),\n",
+       " (6, True, 31),\n",
+       " (0, True, 41),\n",
+       " (1, True, 38),\n",
+       " (0, False, 24),\n",
+       " (3, False, 37),\n",
+       " (3, True, 34),\n",
+       " (5, False, 23),\n",
+       " (1, False, 39),\n",
+       " (4, False, 9),\n",
+       " (6, False, 1),\n",
+       " (5, True, 39),\n",
+       " (5, False, 0),\n",
+       " (0, False, 2),\n",
+       " (4, True, 3),\n",
+       " (2, True, 41)]"
+      ]
+     },
+     "execution_count": 544,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "tprime_list"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 442,
+   "id": "559bab5d-b474-4d30-99dc-e97ae61e39e5",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "hp, bpr, tpr, eulerZ, mgroove = part.vh_properties.loc[5,\n",
+    "                                                                    ['helical_pitch',\n",
+    "                                                                     'bases_per_repeat',\n",
+    "                                                                     'turns_per_repeat',\n",
+    "                                                                     'eulerZ',\n",
+    "                                                                     'minor_groove_angle']]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 969,
+   "id": "a500615f-07df-4e65-9dc6-ef94af3dfcdf",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "TypeError",
+     "evalue": "'generator' object is not subscriptable",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[969], line 2\u001b[0m\n\u001b[1;32m      1\u001b[0m part\u001b[38;5;241m=\u001b[39mdoc\u001b[38;5;241m.\u001b[39mgetParts()\n\u001b[0;32m----> 2\u001b[0m \u001b[43mpart\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\n",
+      "\u001b[0;31mTypeError\u001b[0m: 'generator' object is not subscriptable"
+     ]
+    }
+   ],
+   "source": [
+    "part=doc.getParts()\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 495,
+   "id": "69e89135-155f-4413-a4f4-d7323528c211",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[0, 1, 2, 3, 4, 5, 6]"
+      ]
+     },
+     "execution_count": 495,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "part.getidNums()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 502,
+   "id": "9139dfed-d055-408f-986f-c96da4cb88af",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(<fwd_StrandSet(0)>, <rev_StrandSet(0)>),\n",
+       " (<fwd_StrandSet(1)>, <rev_StrandSet(1)>),\n",
+       " (<fwd_StrandSet(2)>, <rev_StrandSet(2)>),\n",
+       " (<fwd_StrandSet(3)>, <rev_StrandSet(3)>),\n",
+       " (<fwd_StrandSet(4)>, <rev_StrandSet(4)>),\n",
+       " (<fwd_StrandSet(5)>, <rev_StrandSet(5)>),\n",
+       " (<fwd_StrandSet(6)>, <rev_StrandSet(6)>)]"
+      ]
+     },
+     "execution_count": 502,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "[part.getStrandSets(i) for i in part.getidNums()]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 971,
+   "id": "7e39d2ea-b5d7-40a6-b43f-7e43ab26cc4f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "parts = [p for p in doc.getParts()]\n",
+    "part=parts[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 972,
+   "id": "a5ba9310-16b1-4faa-b9c7-6ac5073df569",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "strand_set={}\n",
+    "for i in part.getidNums():\n",
+    "    fwd,rev=part.getStrandSets(i)\n",
+    "    strand_set[(i,True)]=fwd.strands()\n",
+    "    strand_set[(i,False)]=rev.strands()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 975,
+   "id": "05b7fa7d-5329-4f0c-8a94-c3631494e9bb",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "i=strand_set[(0,0)][0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 980,
+   "id": "cfc0060c-188c-4cc5-9cbe-ff7fa2eb89e4",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(2, 4), (5, 20)]"
+      ]
+     },
+     "execution_count": 980,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "i.segments"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 989,
+   "id": "2b8a31bf-f956-4bf1-8546-140ebca169f4",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'TGAGTGTTGTTCCAGTGTT'"
+      ]
+     },
+     "execution_count": 989,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "i.sequence()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 928,
+   "id": "36855d5e-c95c-4642-a162-ca1ef378a3d4",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0"
+      ]
+     },
+     "execution_count": 928,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "i._id_num"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1000,
+   "id": "dfaef123-43a8-43af-869d-cd4407c41e8c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'  TTGGAACAAGAGTCGATGAGTGTTGTTCCAGTGTT'"
+      ]
+     },
+     "execution_count": 1000,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "i.oligo().sequence()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1004,
+   "id": "a9a3b1f8-eae4-42f6-ae88-99832ab47070",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "id_num,s,ind=i.oligo().getAbsolutePositionAtLength(10)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1007,
+   "id": "13618171-1df2-4db0-b24c-7a7470a6c615",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'SCAFFOLD'"
+      ]
+     },
+     "execution_count": 1007,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.name"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1030,
+   "id": "d9e4b3c5-cecb-4d1f-a283-6069b6837dad",
+   "metadata": {
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>vh</th>\n",
+       "      <th>zid</th>\n",
+       "      <th>fwd</th>\n",
+       "      <th>stack</th>\n",
+       "      <th>threeprime</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>0</td>\n",
+       "      <td>2</td>\n",
+       "      <td>False</td>\n",
+       "      <td>-1</td>\n",
+       "      <td>-1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>0</td>\n",
+       "      <td>3</td>\n",
+       "      <td>False</td>\n",
+       "      <td>(0, 2, False)</td>\n",
+       "      <td>(0, 2, False)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>0</td>\n",
+       "      <td>4</td>\n",
+       "      <td>False</td>\n",
+       "      <td>(0, 3, False)</td>\n",
+       "      <td>(0, 3, False)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>0</td>\n",
+       "      <td>5</td>\n",
+       "      <td>False</td>\n",
+       "      <td>(0, 4, False)</td>\n",
+       "      <td>(0, 4, False)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>0</td>\n",
+       "      <td>6</td>\n",
+       "      <td>False</td>\n",
+       "      <td>(0, 5, False)</td>\n",
+       "      <td>(0, 5, False)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>48</th>\n",
+       "      <td>0</td>\n",
+       "      <td>32</td>\n",
+       "      <td>True</td>\n",
+       "      <td>(0, 33, True)</td>\n",
+       "      <td>(0, 33, True)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>49</th>\n",
+       "      <td>0</td>\n",
+       "      <td>33</td>\n",
+       "      <td>True</td>\n",
+       "      <td>(0, 34, True)</td>\n",
+       "      <td>(0, 34, True)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>50</th>\n",
+       "      <td>0</td>\n",
+       "      <td>34</td>\n",
+       "      <td>True</td>\n",
+       "      <td>(0, 35, True)</td>\n",
+       "      <td>(0, 35, True)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>51</th>\n",
+       "      <td>0</td>\n",
+       "      <td>35</td>\n",
+       "      <td>True</td>\n",
+       "      <td>(0, 36, True)</td>\n",
+       "      <td>(0, 36, True)</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>52</th>\n",
+       "      <td>0</td>\n",
+       "      <td>36</td>\n",
+       "      <td>True</td>\n",
+       "      <td>(1, 36, False)</td>\n",
+       "      <td>(1, 36, False)</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>82 rows × 5 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    vh zid    fwd           stack      threeprime\n",
+       "0    0   2  False              -1              -1\n",
+       "1    0   3  False   (0, 2, False)   (0, 2, False)\n",
+       "2    0   4  False   (0, 3, False)   (0, 3, False)\n",
+       "3    0   5  False   (0, 4, False)   (0, 4, False)\n",
+       "4    0   6  False   (0, 5, False)   (0, 5, False)\n",
+       "..  ..  ..    ...             ...             ...\n",
+       "48   0  32   True   (0, 33, True)   (0, 33, True)\n",
+       "49   0  33   True   (0, 34, True)   (0, 34, True)\n",
+       "50   0  34   True   (0, 35, True)   (0, 35, True)\n",
+       "51   0  35   True   (0, 36, True)   (0, 36, True)\n",
+       "52   0  36   True  (1, 36, False)  (1, 36, False)\n",
+       "\n",
+       "[82 rows x 5 columns]"
+      ]
+     },
+     "execution_count": 1030,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pd.DataFrame(gen_id_series(strand_set[(0,0)][0])+gen_id_series(strand_set[(0,1)][0]))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "f18fdcc9-6ead-4bd2-ab0e-1c759e328f2f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def gen_id_series(strand):\n",
+    "    df=pd.DataFrame(columns=[\"vh\",\"zid\",\"fwd\",\"stack\",\"threeprime\"],index=range(strand.totalLength()),dtype=object)\n",
+    "    df[\"vh\"]=strand._id_num\n",
+    "    df[\"fwd\"]=strand.isForward()\n",
+    "    id_lo,id_hi=strand.idxs()\n",
+    "    zids=[str(i) for i in range(id_lo,id_hi+1)]\n",
+    "    insert_dict={}\n",
+    "    insert_dict=dict([(j.idx(),j.length()) for j in strand.insertionsOnStrand()])\n",
+    "    for inset_base in insert_dict:\n",
+    "        z_ind=zids.index(str(inset_base))\n",
+    "        z_val=insert_dict[inset_base]\n",
+    "        zids.pop(z_ind)\n",
+    "        if z_val!=-1:\n",
+    "            l=[str(inset_base)+\".\"+str(i) for i in range(z_val+1)]\n",
+    "            l.reverse()\n",
+    "            for k in l:\n",
+    "                zids.insert(z_ind,k)\n",
+    "    df[\"zid\"]=zids\n",
+    "    dg=df.set_index([\"vh\",\"zid\",\"fwd\"])\n",
+    "    L=list(dg.index)\n",
+    "    if strand.isForward()==True:\n",
+    "        if strand.connection3p() is None:\n",
+    "            L.append(-1)\n",
+    "        else:\n",
+    "            L.append((strand.connection3p().idNum(),strand.connection3p().idx5Prime(),strand.connection3p().isForward()))\n",
+    "        df[\"stack\"]=L[1:]\n",
+    "    \n",
+    "    else:\n",
+    "        if strand.connection3p() is None:\n",
+    "            L.insert(0,-1)\n",
+    "        else:\n",
+    "            L.insert(0,(strand.connection3p().idNum(),strand.connection3p().idx5Prime(),strand.connection3p().isForward()))\n",
+    "        df[\"stack\"]=L[0:-1]\n",
+    "    df[\"threeprime\"]=df[\"stack\"]\n",
+    "    df_ind=list(df.index)\n",
+    "    return [pd.Series(df.loc[i]) for i in df_ind]\n",
+    "    "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 951,
+   "id": "2d929c54-7b65-48d2-b28b-68562af15104",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df=pd.DataFrame(columns=[\"vh\",\"zid\",\"fwd\",\"r\",\"bp\",\"stack\",\"threeprime\",\"seq\",\"orientation\"],index=range(i.totalLength()),dtype=object)\n",
+    "df[\"vh\"]=i._id_num\n",
+    "df[\"fwd\"]=i.isForward()\n",
+    "id_lo,id_hi=i.idxs()\n",
+    "zids=[str(i) for i in range(id_lo,id_hi+1)]\n",
+    "insert_dict={}\n",
+    "insert_dict=dict([(j.idx(),j.length()) for j in i.insertionsOnStrand()])\n",
+    "for j in insert_dict:\n",
+    "    z_ind=zids.index(str(j))\n",
+    "    z_val=insert_dict[j]\n",
+    "    zids.pop(z_ind)\n",
+    "    if z_val!=-1:\n",
+    "        l=[str(j)+\".\"+str(i) for i in range(z_val+1)]\n",
+    "        l.reverse()\n",
+    "        for k in l:\n",
+    "            zids.insert(z_ind,k)\n",
+    "df[\"zid\"]=zids\n",
+    "dg=df.set_index([\"vh\",\"zid\",\"fwd\"])\n",
+    "L=list(dg.index)\n",
+    "if i.isForward()==True:\n",
+    "    if i.connection3p() is None:\n",
+    "        L.append(-1)\n",
+    "    else:\n",
+    "        L.append((i.connection3p().idNum(),i.connection3p().idx5Prime(),i.connection3p().isForward()))\n",
+    "    df[\"stack\"]=L[1:]\n",
+    "    \n",
+    "else:\n",
+    "    if i.connection3p() is None:\n",
+    "        L.insert(0,-1)\n",
+    "    else:\n",
+    "        L.insert(0,(i.connection3p().idNum(),i.connection3p().idx5Prime(),i.connection3p().isForward()))\n",
+    "    df[\"stack\"]=L[0:-1]\n",
+    "df[\"threeprime\"]=df[\"stack\"]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1013,
+   "id": "d20b67b7-94fc-4200-a84b-edd66b355c01",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "TypeError",
+     "evalue": "'RangeIndex' object is not callable",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[1013], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n",
+      "\u001b[0;31mTypeError\u001b[0m: 'RangeIndex' object is not callable"
+     ]
+    }
+   ],
+   "source": [
+    "df.index()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 948,
+   "id": "5daca1b7-beb5-42ba-94c6-911ab6ca33be",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "18 False 1\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(i.connection3p().idx5Prime(),i.connection3p().isForward(),i.connection3p().idNum())\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 901,
+   "id": "d4bc3787-567f-4e57-823e-7c844c7eb262",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df[\"zid\"]=zids"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 902,
+   "id": "3a01b186-cb93-4f92-b8d0-0db0bc45e104",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>vh</th>\n",
+       "      <th>zid</th>\n",
+       "      <th>fwd</th>\n",
+       "      <th>r</th>\n",
+       "      <th>bp</th>\n",
+       "      <th>stack</th>\n",
+       "      <th>threeprime</th>\n",
+       "      <th>seq</th>\n",
+       "      <th>orientation</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>0</td>\n",
+       "      <td>2</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>0</td>\n",
+       "      <td>3</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>0</td>\n",
+       "      <td>4</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>0</td>\n",
+       "      <td>5</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>0</td>\n",
+       "      <td>6</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>0</td>\n",
+       "      <td>7</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>6</th>\n",
+       "      <td>0</td>\n",
+       "      <td>8</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>7</th>\n",
+       "      <td>0</td>\n",
+       "      <td>9</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>8</th>\n",
+       "      <td>0</td>\n",
+       "      <td>10</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>9</th>\n",
+       "      <td>0</td>\n",
+       "      <td>11</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>10</th>\n",
+       "      <td>0</td>\n",
+       "      <td>12</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>11</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.0</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>12</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.1</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>13</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.2</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>14</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.3</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>15</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.4</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>16</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.5</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>17</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.6</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>18</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.7</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>19</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.8</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>20</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.9</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>21</th>\n",
+       "      <td>0</td>\n",
+       "      <td>13.10</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>22</th>\n",
+       "      <td>0</td>\n",
+       "      <td>14</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>23</th>\n",
+       "      <td>0</td>\n",
+       "      <td>15</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>24</th>\n",
+       "      <td>0</td>\n",
+       "      <td>16</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>25</th>\n",
+       "      <td>0</td>\n",
+       "      <td>17</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>26</th>\n",
+       "      <td>0</td>\n",
+       "      <td>18</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>27</th>\n",
+       "      <td>0</td>\n",
+       "      <td>19</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>28</th>\n",
+       "      <td>0</td>\n",
+       "      <td>20</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "    vh    zid    fwd    r   bp stack threeprime  seq orientation\n",
+       "0    0      2  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "1    0      3  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "2    0      4  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "3    0      5  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "4    0      6  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "5    0      7  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "6    0      8  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "7    0      9  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "8    0     10  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "9    0     11  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "10   0     12  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "11   0   13.0  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "12   0   13.1  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "13   0   13.2  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "14   0   13.3  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "15   0   13.4  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "16   0   13.5  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "17   0   13.6  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "18   0   13.7  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "19   0   13.8  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "20   0   13.9  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "21   0  13.10  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "22   0     14  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "23   0     15  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "24   0     16  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "25   0     17  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "26   0     18  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "27   0     19  False  NaN  NaN   NaN        NaN  NaN         NaN\n",
+       "28   0     20  False  NaN  NaN   NaN        NaN  NaN         NaN"
+      ]
+     },
+     "execution_count": 902,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "df"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 864,
+   "id": "1d2a4032-a6b6-4ad7-bcf5-03bf37cb68e0",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "zids.insert(11,\"test\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 865,
+   "id": "3cd82283-e341-4dfd-95c4-e789d3630f74",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['2',\n",
+       " '3',\n",
+       " '4',\n",
+       " '5',\n",
+       " '6',\n",
+       " '7',\n",
+       " '8',\n",
+       " '9',\n",
+       " '10',\n",
+       " '11',\n",
+       " '12',\n",
+       " 'test',\n",
+       " '13',\n",
+       " '14',\n",
+       " '15',\n",
+       " '16',\n",
+       " '17',\n",
+       " '18',\n",
+       " '19']"
+      ]
+     },
+     "execution_count": 865,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "zids"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 847,
+   "id": "c5eba0d7-3972-4553-a9dd-f6fccaef7a4e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "z=np.insert(zids,11,insertions)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 848,
+   "id": "a650a181-1258-4dfd-b41c-f4142f6034ef",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array(['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13',\n",
+       "       '13', '13', '13', '13', '13', '13', '13', '13', '13', '13', '13',\n",
+       "       '13', '13', '13', '13', '13', '13', '13', '13', '13', '14', '15',\n",
+       "       '16', '17', '18', '19'], dtype='<U2')"
+      ]
+     },
+     "execution_count": 848,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "z"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 823,
+   "id": "324e02ef-7688-45bf-80be-f80d25cc1516",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[0, 1, 2, 3, 4]"
+      ]
+     },
+     "execution_count": 823,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "zids.pop(11)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 820,
+   "id": "6b7d23a1-b66a-47ca-b59e-42d1addabee5",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "zids.insert(11,[0,1,2,3,4])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 821,
+   "id": "ab0b76c4-c77d-4bbb-9883-bd7b8c1569f2",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[2,\n",
+       " 3,\n",
+       " 4,\n",
+       " 5,\n",
+       " 6,\n",
+       " 7,\n",
+       " 8,\n",
+       " 9,\n",
+       " 10,\n",
+       " 11,\n",
+       " 12,\n",
+       " [0, 1, 2, 3, 4],\n",
+       " 13,\n",
+       " 14,\n",
+       " 15,\n",
+       " 16,\n",
+       " 17,\n",
+       " 18,\n",
+       " 19]"
+      ]
+     },
+     "execution_count": 821,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "zids"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 712,
+   "id": "0e8099a0-70d1-4119-bd56-33b79a83359c",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "2 18 <rev_StrandSet(1)>.<Strand(5, 18)> <rev_StrandSet(3)>.<Strand(2, 15)> [(11, -1)] 16\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(i.idx5Prime(),i.idx3Prime(),i.connection3p(),i.connection5p(),[(j.idx(),j.length()) for j in i.insertionsOnStrand()],i.totalLength())"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 746,
+   "id": "55d4b8da-692a-40ae-9e1a-3030f2dd659f",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "s=pd.Series(index=[\"vh\",\"zid\",\"fwd\",\"r\",\"bp\",\"stack\",\"threeprime\",\"seq\",\"orientation\"],dtype=object)\n",
+    "s[\"vh\"]=2\n",
+    "s[\"zid\"]=2\n",
+    "s[\"stack\"]=(2,2,1)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "a7a02cdd-7409-441a-8e60-07b5912d8e56",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "65ebfe49-aae9-42a3-acb5-0a7afb390e8d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "df"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "8a5ea8a4-3353-4779-b6aa-98c8919259c9",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "i.idx5Prime(),i.idx3Prime()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 710,
+   "id": "ff047223-c82c-4ac4-b30e-65c41613a9e4",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "(19, 36) 1\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(i.connection3p().idxs(),i.connection3p().idNum())"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 510,
+   "id": "c5832bdd-1df9-4af7-8cb7-89d522a33c86",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[None,\n",
+       " None,\n",
+       " None,\n",
+       " None,\n",
+       " None,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(5, 36)>,\n",
+       " None,\n",
+       " None,\n",
+       " <fwd_StrandSet(0)>.<Strand(39, 41)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(39, 41)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(39, 41)>]"
+      ]
+     },
+     "execution_count": 510,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fwd.strand_array"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 644,
+   "id": "a7a8c302-165a-404f-aa98-f857b8839638",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Oligo_(1.0[3])_7344"
+      ]
+     },
+     "execution_count": 644,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rev0._oligo"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 618,
+   "id": "6b6ab174-90a3-4414-a798-806fb1793937",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "rev0=rev.strands()[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 623,
+   "id": "843291d1-530f-4c2b-97e3-65b30d814cf9",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "29"
+      ]
+     },
+     "execution_count": 623,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rev0.totalLength()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 629,
+   "id": "4a4cbdb1-f626-4817-9bee-c2d9fed0675d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_base_idx_high',\n",
+       " '_base_idx_low',\n",
+       " '_deepCopy',\n",
+       " '_document',\n",
+       " '_id_num',\n",
+       " '_is_forward',\n",
+       " '_oligo',\n",
+       " '_parent',\n",
+       " '_sequence',\n",
+       " '_signals',\n",
+       " '_strand3p',\n",
+       " '_strand5p',\n",
+       " '_strandset',\n",
+       " 'abstractSeq',\n",
+       " 'abstract_sequence',\n",
+       " 'addInsertion',\n",
+       " 'addMods',\n",
+       " 'applyAbstractSequence',\n",
+       " 'canInstallXoverAt',\n",
+       " 'canResizeTo',\n",
+       " 'changeInsertion',\n",
+       " 'clearAbstractSequence',\n",
+       " 'clearDecoratorCommands',\n",
+       " 'clearInsertionsCommands',\n",
+       " 'connect',\n",
+       " 'connection3p',\n",
+       " 'connection5p',\n",
+       " 'connectionHigh',\n",
+       " 'connectionLow',\n",
+       " 'copyAbstractSequenceToSequence',\n",
+       " 'deleteLater',\n",
+       " 'destroy',\n",
+       " 'disconnect',\n",
+       " 'document',\n",
+       " 'dump5p',\n",
+       " 'generator3pStrand',\n",
+       " 'generator5pStrand',\n",
+       " 'getColor',\n",
+       " 'getComplementStrands',\n",
+       " 'getRemoveInsertionCommands',\n",
+       " 'getResizeBounds',\n",
+       " 'getSequenceList',\n",
+       " 'hasInsertionAt',\n",
+       " 'hasXoverAt',\n",
+       " 'highIdx',\n",
+       " 'idNum',\n",
+       " 'idx3Prime',\n",
+       " 'idx5Prime',\n",
+       " 'idxs',\n",
+       " 'insertionLengthBetweenIdxs',\n",
+       " 'insertionsOnStrand',\n",
+       " 'isForward',\n",
+       " 'length',\n",
+       " 'lowIdx',\n",
+       " 'merge',\n",
+       " 'modifersOnStrand',\n",
+       " 'oligo',\n",
+       " 'parent',\n",
+       " 'part',\n",
+       " 'reapplySequence',\n",
+       " 'removeInsertion',\n",
+       " 'removeMods',\n",
+       " 'resize',\n",
+       " 'segments',\n",
+       " 'sequence',\n",
+       " 'setComplementSequence',\n",
+       " 'setConnection3p',\n",
+       " 'setConnection5p',\n",
+       " 'setConnectionHigh',\n",
+       " 'setConnectionLow',\n",
+       " 'setIdxs',\n",
+       " 'setOligo',\n",
+       " 'setParent',\n",
+       " 'setSequence',\n",
+       " 'shallowCopy',\n",
+       " 'signals',\n",
+       " 'split',\n",
+       " 'strandConnectionChangedSignal',\n",
+       " 'strandFilter',\n",
+       " 'strandHasNewOligoSignal',\n",
+       " 'strandInsertionAddedSignal',\n",
+       " 'strandInsertionChangedSignal',\n",
+       " 'strandInsertionRemovedSignal',\n",
+       " 'strandModsAddedSignal',\n",
+       " 'strandModsChangedSignal',\n",
+       " 'strandModsRemovedSignal',\n",
+       " 'strandRemovedSignal',\n",
+       " 'strandResizedSignal',\n",
+       " 'strandSelectedChangedSignal',\n",
+       " 'strandSet',\n",
+       " 'strandType',\n",
+       " 'strandXover5pRemovedSignal',\n",
+       " 'totalLength',\n",
+       " 'undoStack']"
+      ]
+     },
+     "execution_count": 629,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dir(rev0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 633,
+   "id": "a6e188a0-52c9-4f27-9e91-f9f0f6b43829",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<fwd_StrandSet(1)>.<Strand(3, 20)>"
+      ]
+     },
+     "execution_count": 633,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rev0.connection5p()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 663,
+   "id": "6dbd83c9-1542-4acf-8e54-1f279db6da3a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<fwd_StrandSet(2)>.<Strand(2, 18)>"
+      ]
+     },
+     "execution_count": 663,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "strand_set[\"2fwd\"].strands()[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 640,
+   "id": "08856a0e-eb36-4e2f-a68d-55b43ca38a82",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "13"
+      ]
+     },
+     "execution_count": 640,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rev0.insertionsOnStrand()[0].idx()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 642,
+   "id": "15747c0b-8bcc-414e-b570-03c1a61cf8b9",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "10"
+      ]
+     },
+     "execution_count": 642,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rev0.insertionsOnStrand()[0].length()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 631,
+   "id": "5164cbab-4cad-49cb-b578-162f4df8fb3d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "29"
+      ]
+     },
+     "execution_count": 631,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rev0.totalLength()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 628,
+   "id": "9de2a715-9a6d-48ca-98d3-154c6856f73c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 628,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fwd0.hasInsertionAt(13)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 539,
+   "id": "4fa350d1-50a9-4d03-a808-a948f9db12af",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 539,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fwd.isForward()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 532,
+   "id": "f9246900-a13c-40d8-b345-8167199f45de",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 532,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fwd.isScaffold()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 537,
+   "id": "bc02e0de-08a8-42d3-afd8-2b21f616d470",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(0, True, 36, 1, False, 36)]"
+      ]
+     },
+     "execution_count": 537,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "x=[]\n",
+    "fwd_connect,col=fwd.dump(x)\n",
+    "fwd_connect"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 538,
+   "id": "e5238c66-a33b-4e93-ad9a-1a8fefe574cc",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(5, 36), (39, 41)]"
+      ]
+     },
+     "execution_count": 538,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fwd_connect"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 541,
+   "id": "803533ed-9577-4eca-9d51-c106f3efb3d1",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "([(2, 20), (21, 23), (24, 27), (28, 38)],\n",
+       " ['#16e876', '#cc01d1', '#000000', '#b8056c'])"
+      ]
+     },
+     "execution_count": 541,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "y=[]\n",
+    "rev.dump(y)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 505,
+   "id": "75d655fc-46e1-4b4d-9e05-ee1403e2e363",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "NameError",
+     "evalue": "name 'strand_set' is not defined",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[505], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mpart\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetOligoAt\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43mfwd\u001b[49m\u001b[43m,\u001b[49m\u001b[38;5;241;43m15\u001b[39;49m\u001b[43m)\u001b[49m\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/part/nucleicacidpart.py:3283\u001b[0m, in \u001b[0;36mNucleicAcidPart.getOligoAt\u001b[0;34m(self, id_num, is_rev, idx)\u001b[0m\n\u001b[1;32m   3271\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Convenience method. Given a id_num strand_set, idx, return\u001b[39;00m\n\u001b[1;32m   3272\u001b[0m \u001b[38;5;124;03mthe oligo at that location, if it exists. Otherwise return None.\u001b[39;00m\n\u001b[1;32m   3273\u001b[0m \n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   3280\u001b[0m \u001b[38;5;124;03m    Oligo: reference to oligo at (id_num, strand_set, idx) or None.\u001b[39;00m\n\u001b[1;32m   3281\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m   3282\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3283\u001b[0m     ss \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgetStrandSets(id_num)[\u001b[43mstrand_set\u001b[49m]\n\u001b[1;32m   3284\u001b[0m     strand \u001b[38;5;241m=\u001b[39m ss\u001b[38;5;241m.\u001b[39mgetStrand(idx)\n\u001b[1;32m   3285\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m strand\u001b[38;5;241m.\u001b[39moligo()\n",
+      "\u001b[0;31mNameError\u001b[0m: name 'strand_set' is not defined"
+     ]
+    }
+   ],
+   "source": [
+    "part.getOligoAt(0,fwd,15)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 460,
+   "id": "1dda0acd-7dd4-467c-9633-66c5350d1911",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['_BASE_WIDTH',\n",
+       " '_FLOAT_PROPERTY_KEYS',\n",
+       " '_HELICAL_PITCH',\n",
+       " '_NucleicAcidPart__count',\n",
+       " '_STEP_SIZE',\n",
+       " '_SUB_STEP_SIZE',\n",
+       " '_TURNS_PER_STEP',\n",
+       " '_TWIST_PER_BASE',\n",
+       " '__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_abstract_segment_id',\n",
+       " '_active_base_index',\n",
+       " '_active_id_num',\n",
+       " '_addCoordinates',\n",
+       " '_addModInstanceKey',\n",
+       " '_addOligoToSet',\n",
+       " '_canReAdd',\n",
+       " '_canRemove',\n",
+       " '_count',\n",
+       " '_createHelix',\n",
+       " '_current_base_count',\n",
+       " '_decrementInstance',\n",
+       " '_deepCopy',\n",
+       " '_document',\n",
+       " '_getModKeyTokens',\n",
+       " '_getNewIdNum',\n",
+       " '_getVirtualHelixOriginNeighbors',\n",
+       " '_group_properties',\n",
+       " '_highest_even_id_num_used',\n",
+       " '_highest_odd_id_num_used',\n",
+       " '_incrementInstance',\n",
+       " '_insertions',\n",
+       " '_instance_count',\n",
+       " '_instances',\n",
+       " '_mods',\n",
+       " '_offset_and_size',\n",
+       " '_oligos',\n",
+       " '_origin_cache',\n",
+       " '_origin_cache_keys',\n",
+       " '_origin_pts',\n",
+       " '_parent',\n",
+       " '_point_cache',\n",
+       " '_point_cache_keys',\n",
+       " '_pointsFromDirection',\n",
+       " '_projectionPointOnPlane',\n",
+       " '_queryBasePoint',\n",
+       " '_queryIdNumRange',\n",
+       " '_queryIdNumRangeNeighbor',\n",
+       " '_queryVirtualHelixOrigin',\n",
+       " '_queryVirtualHelixOriginRect',\n",
+       " '_radius',\n",
+       " '_recycleIdNum',\n",
+       " '_refreshSegments',\n",
+       " '_removeCoordinates',\n",
+       " '_removeHelix',\n",
+       " '_removeOligoFromSet',\n",
+       " '_reserveIdNum',\n",
+       " '_resetOriginCache',\n",
+       " '_resetPointCache',\n",
+       " '_resizeHelix',\n",
+       " '_sanity_check_id_numbers',\n",
+       " '_selected',\n",
+       " '_selections',\n",
+       " '_setCoordinates',\n",
+       " '_setProperty',\n",
+       " '_setVirtualHelixOriginLimits',\n",
+       " '_setVirtualHelixProperties',\n",
+       " '_signals',\n",
+       " '_translateCoordinates',\n",
+       " '_translateVirtualHelices',\n",
+       " '_virtual_helices_dict',\n",
+       " 'activeBaseIndex',\n",
+       " 'activeIdNum',\n",
+       " 'active_base_info',\n",
+       " 'addModInstance',\n",
+       " 'addModStrandInstance',\n",
+       " 'angleNormalize',\n",
+       " 'angleRangeCheck',\n",
+       " 'axis_pts',\n",
+       " 'baseWidth',\n",
+       " 'batchCreateVirtualHelices',\n",
+       " 'boundDimensions',\n",
+       " 'changeInstanceProperty',\n",
+       " 'clearActiveVirtualHelix',\n",
+       " 'connect',\n",
+       " 'copy',\n",
+       " 'createVirtualHelix',\n",
+       " 'createXover',\n",
+       " 'cross',\n",
+       " 'deleteLater',\n",
+       " 'delta2D_scratch',\n",
+       " 'delta3D_scratch',\n",
+       " 'destroy',\n",
+       " 'directions',\n",
+       " 'disconnect',\n",
+       " 'document',\n",
+       " 'dumpInsertions',\n",
+       " 'dumpModInstances',\n",
+       " 'editable_properties',\n",
+       " 'eye3_scratch',\n",
+       " 'fwd_pts',\n",
+       " 'fwd_strandsets',\n",
+       " 'getAllVirtualHelixProperties',\n",
+       " 'getCircularOligos',\n",
+       " 'getColor',\n",
+       " 'getCoordinate',\n",
+       " 'getCoordinates',\n",
+       " 'getDirections',\n",
+       " 'getGridType',\n",
+       " 'getIdNums',\n",
+       " 'getIndices',\n",
+       " 'getInstanceProperty',\n",
+       " 'getMaxIdNum',\n",
+       " 'getModID',\n",
+       " 'getModStrandIdx',\n",
+       " 'getModelProperties',\n",
+       " 'getName',\n",
+       " 'getNeighbors',\n",
+       " 'getNewAbstractSegmentId',\n",
+       " 'getOffsetAndSize',\n",
+       " 'getOligoAt',\n",
+       " 'getOutlineProperties',\n",
+       " 'getProperty',\n",
+       " 'getSequences',\n",
+       " 'getStrand',\n",
+       " 'getStrandModSequence',\n",
+       " 'getStrandSets',\n",
+       " 'getVirtualHelicesInArea',\n",
+       " 'getVirtualHelix',\n",
+       " 'getVirtualHelixAtPoint',\n",
+       " 'getVirtualHelixOrder',\n",
+       " 'getVirtualHelixOrigin',\n",
+       " 'getVirtualHelixOriginLimits',\n",
+       " 'getVirtualHelixProperties',\n",
+       " 'getidNums',\n",
+       " 'hasStrandAtIdx',\n",
+       " 'helicalPitch',\n",
+       " 'helixProperties',\n",
+       " 'id_nums',\n",
+       " 'indexOfRightmostNonemptyBase',\n",
+       " 'indices',\n",
+       " 'initializeAbstractSegmentId',\n",
+       " 'insertions',\n",
+       " 'instanceProperties',\n",
+       " 'isAGreaterThanB_Z',\n",
+       " 'isSelected',\n",
+       " 'isVirtualHelixActive',\n",
+       " 'isVirtualHelixNearPoint',\n",
+       " 'isZEditable',\n",
+       " 'is_active',\n",
+       " 'lengthSq',\n",
+       " 'locationQt',\n",
+       " 'm3_scratch0',\n",
+       " 'm3_scratch1',\n",
+       " 'm3_scratch2',\n",
+       " 'makeRotation',\n",
+       " 'maxBaseIdx',\n",
+       " 'newPart',\n",
+       " 'normalize',\n",
+       " 'normalizedRange',\n",
+       " 'oligos',\n",
+       " 'origin_limits',\n",
+       " 'parent',\n",
+       " 'partActiveBaseInfoSignal',\n",
+       " 'partActiveChangedSignal',\n",
+       " 'partActiveVirtualHelixChangedSignal',\n",
+       " 'partDocumentSettingChangedSignal',\n",
+       " 'partInstanceAddedSignal',\n",
+       " 'partInstancePropertySignal',\n",
+       " 'partOligoAddedSignal',\n",
+       " 'partParentChangedSignal',\n",
+       " 'partPropertyChangedSignal',\n",
+       " 'partRemovedSignal',\n",
+       " 'partSelectedChangedSignal',\n",
+       " 'partStrandChangedSignal',\n",
+       " 'partType',\n",
+       " 'partVirtualHelicesSelectedSignal',\n",
+       " 'partVirtualHelicesTranslatedSignal',\n",
+       " 'partVirtualHelixAddedSignal',\n",
+       " 'partVirtualHelixPropertyChangedSignal',\n",
+       " 'partVirtualHelixRemovedSignal',\n",
+       " 'partVirtualHelixRemovingSignal',\n",
+       " 'partVirtualHelixResizedSignal',\n",
+       " 'partZDimensionsChangedSignal',\n",
+       " 'potentialCrossoverMap',\n",
+       " 'queryBasePoint',\n",
+       " 'queryIdNumNeighbor',\n",
+       " 'queryVirtualHelixOrigin',\n",
+       " 'radius',\n",
+       " 'radiusForAngle',\n",
+       " 'recycle_bin',\n",
+       " 'reemitActiveVirtualHelix',\n",
+       " 'refreshSegments',\n",
+       " 'remove',\n",
+       " 'removeAllOligos',\n",
+       " 'removeModInstance',\n",
+       " 'removeModStrandInstance',\n",
+       " 'removeVirtualHelices',\n",
+       " 'removeVirtualHelix',\n",
+       " 'removeXover',\n",
+       " 'reserved_ids',\n",
+       " 'resetCoordinates',\n",
+       " 'rev_pts',\n",
+       " 'rev_strandsets',\n",
+       " 'segment_dict',\n",
+       " 'setAbstractSequences',\n",
+       " 'setActive',\n",
+       " 'setActiveBaseInfo',\n",
+       " 'setActiveVirtualHelix',\n",
+       " 'setAllVirtualHelixSizes',\n",
+       " 'setDocument',\n",
+       " 'setGridType',\n",
+       " 'setImportedVHelixOrder',\n",
+       " 'setInstanceProperty',\n",
+       " 'setParent',\n",
+       " 'setProperty',\n",
+       " 'setSelected',\n",
+       " 'setVirtualHelixProperties',\n",
+       " 'setVirtualHelixSize',\n",
+       " 'shallowCopy',\n",
+       " 'signals',\n",
+       " 'splitOligoAtAbsoluteLengths',\n",
+       " 'stepSize',\n",
+       " 'subStepSize',\n",
+       " 'total_id_nums',\n",
+       " 'total_points',\n",
+       " 'translateVirtualHelices',\n",
+       " 'twistPerBase',\n",
+       " 'undoStack',\n",
+       " 'uuid',\n",
+       " 'verifyOligos',\n",
+       " 'vh_editable_properties',\n",
+       " 'vh_properties',\n",
+       " 'xoverSnapTo',\n",
+       " 'zBoundsIds']"
+      ]
+     },
+     "execution_count": 460,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dir(part)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 445,
+   "id": "67b2283f-b3ec-4941-9753-8939883fc634",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "k=[s.idxs() for s in rev_ss.strands()]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 451,
+   "id": "055da421-6f35-47ba-b54a-dedaff3851f5",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "fwd_ss, rev_ss = part.getStrandSets(5)\n",
+    "xover_list=[]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 452,
+   "id": "b9337cb3-5725-4a22-956d-0f7bfdf98f1e",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "fwd_idxs, fwd_colors  = fwd_ss.dump(xover_list)\n",
+    "rev_idxs, rev_colors  = rev_ss.dump(xover_list)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 455,
+   "id": "307dcec8-b15f-48c0-895e-b57794d96c1e",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(5, True, 27, 0, False, 27), (5, False, 9, 4, True, 9)]"
+      ]
+     },
+     "execution_count": 455,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "xover_list"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 456,
+   "id": "9ff52284-e37d-466c-a844-3cbc929433b8",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(9, 27), (28, 39)]"
+      ]
+     },
+     "execution_count": 456,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fwd_idxs"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 457,
+   "id": "319ede75-f8a8-4f80-9d90-f990d351cc1b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<fwd_StrandSet(5)>"
+      ]
+     },
+     "execution_count": 457,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 431,
+   "id": "9e6bd392-559f-449b-8a4e-049d8b100349",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "AttributeError",
+     "evalue": "'StrandSet' object has no attribute 'revStrandSet'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[431], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mv0\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrevStrandSet\u001b[49m()\u001b[38;5;241m.\u001b[39mstrands()[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m.\u001b[39midNum())\n\u001b[1;32m      2\u001b[0m \u001b[38;5;28mprint\u001b[39m(v0\u001b[38;5;241m.\u001b[39mrevStrandSet()\u001b[38;5;241m.\u001b[39mstrands()[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m.\u001b[39midxs())\n",
+      "\u001b[0;31mAttributeError\u001b[0m: 'StrandSet' object has no attribute 'revStrandSet'"
+     ]
+    }
+   ],
+   "source": [
+    "print(v0.revStrandSet().strands()[1].idNum())\n",
+    "print(v0.revStrandSet().strands()[1].idxs())\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 421,
+   "id": "03cc2f40-8c54-44ff-b590-81cf857c2965",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "([(2, 20), (21, 23), (24, 27), (28, 38)],\n",
+       " ['#16e876', '#cc01d1', '#000000', '#b8056c'])"
+      ]
+     },
+     "execution_count": 421,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "x=[]\n",
+    "k.dump(x)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 386,
+   "id": "6efd2667-59d7-4ad3-b9a9-faf8f003399b",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[34, 31, 3, 21, 23, 5, 32, 208, 3, 33, 31, 34, 4, 48, 4, 3]"
+      ]
+     },
+     "execution_count": 386,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s=list(n.oligos())\n",
+    "a=s[5]\n",
+    "l=[i.length() for i in s]\n",
+    "l"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 399,
+   "id": "9063878f-b3bd-4856-9d5b-68f459ea6e06",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a=s[7]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 397,
+   "id": "69c6d275-9b13-4add-bcb0-75c281628f09",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 398,
+   "id": "dcba5559-a9c1-40ce-854d-ca2ceefd61d0",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "m"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 401,
+   "id": "0b3beb34-9715-4719-b0b2-778c54891555",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'id_num': 5,\n",
+       " 'idx5p': 22,\n",
+       " 'is_5p_fwd': False,\n",
+       " 'is_circular': False,\n",
+       " 'sequence': None,\n",
+       " 'name': 'oligo7456',\n",
+       " 'color': '#0066cc',\n",
+       " 'length': 208,\n",
+       " 'is_visible': True}"
+      ]
+     },
+     "execution_count": 401,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "a.dump()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 258,
+   "id": "efdc824b-d784-40c8-98fd-af86f4887319",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(<fwd_StrandSet(0)>, <rev_StrandSet(0)>)"
+      ]
+     },
+     "execution_count": 258,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "fwd,rev=n.getStrandSets(0)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 232,
+   "id": "07cb8a8b-32c0-4aac-a8e2-9b10ab938fbc",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['oligo2304',\n",
+       " 'oligo8960',\n",
+       " 'oligo9296',\n",
+       " 'oligo1120',\n",
+       " 'oligo7728',\n",
+       " 'oligo4848',\n",
+       " 'oligo3552',\n",
+       " 'oligo7008',\n",
+       " 'oligo5696',\n",
+       " 'oligo7856',\n",
+       " 'oligo6016',\n",
+       " 'oligo4560',\n",
+       " 'oligo5504',\n",
+       " 'oligo3488',\n",
+       " 'oligo1648',\n",
+       " 'oligo1536']"
+      ]
+     },
+     "execution_count": 232,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "names=[i[\"name\"] for i in cad3[\"parts\"][0][\"oligos\"]]\n",
+    "names"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 225,
+   "id": "fc06b8ed-283f-4365-a063-c87f43598bef",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "sc=dict(json_data2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 64,
+   "id": "9c67d96b-a9e9-43cb-8617-bae9d6fb36bf",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'version': '0.19.3',\n",
+       " 'grid': 'honeycomb',\n",
+       " 'helices': [{'grid_position': [16, 12]},\n",
+       "  {'grid_position': [15, 12]},\n",
+       "  {'grid_position': [15, 13]},\n",
+       "  {'grid_position': [16, 13]},\n",
+       "  {'grid_position': [17, 13]},\n",
+       "  {'grid_position': [17, 12]},\n",
+       "  {'grid_position': [5, 15]}],\n",
+       " 'strands': [{'color': '#0066cc',\n",
+       "   'is_scaffold': True,\n",
+       "   'domains': [{'helix': 5, 'forward': False, 'start': 9, 'end': 23},\n",
+       "    {'helix': 4, 'forward': True, 'start': 9, 'end': 16},\n",
+       "    {'helix': 3, 'forward': False, 'start': 2, 'end': 16},\n",
+       "    {'helix': 2, 'forward': True, 'start': 2, 'end': 19, 'deletions': [11]},\n",
+       "    {'helix': 1,\n",
+       "     'forward': False,\n",
+       "     'start': 5,\n",
+       "     'end': 19,\n",
+       "     'insertions': [[10, 1]]},\n",
+       "    {'helix': 0,\n",
+       "     'forward': True,\n",
+       "     'start': 5,\n",
+       "     'end': 37,\n",
+       "     'insertions': [[13, 10], [29, 11]]},\n",
+       "    {'helix': 1, 'forward': False, 'start': 19, 'end': 37},\n",
+       "    {'helix': 2, 'forward': True, 'start': 19, 'end': 33},\n",
+       "    {'helix': 3, 'forward': False, 'start': 16, 'end': 33, 'deletions': [28]},\n",
+       "    {'helix': 4, 'forward': True, 'start': 16, 'end': 40},\n",
+       "    {'helix': 5, 'forward': False, 'start': 23, 'end': 40}]},\n",
+       "  {'color': '#0066cc',\n",
+       "   'is_scaffold': True,\n",
+       "   'domains': [{'helix': 0, 'forward': True, 'start': 39, 'end': 42}]},\n",
+       "  {'color': '#16e876',\n",
+       "   'domains': [{'helix': 1,\n",
+       "     'forward': True,\n",
+       "     'start': 3,\n",
+       "     'end': 21,\n",
+       "     'insertions': [[10, 1]]},\n",
+       "    {'helix': 0,\n",
+       "     'forward': False,\n",
+       "     'start': 2,\n",
+       "     'end': 21,\n",
+       "     'insertions': [[13, 10]]}]},\n",
+       "  {'color': '#cc01d1',\n",
+       "   'domains': [{'helix': 0, 'forward': False, 'start': 21, 'end': 24},\n",
+       "    {'helix': 1, 'forward': True, 'start': 21, 'end': 39}]},\n",
+       "  {'color': '#000000',\n",
+       "   'domains': [{'helix': 5, 'forward': True, 'start': 9, 'end': 28},\n",
+       "    {'helix': 0, 'forward': False, 'start': 24, 'end': 28}]},\n",
+       "  {'color': '#b8056c',\n",
+       "   'domains': [{'helix': 0,\n",
+       "     'forward': False,\n",
+       "     'start': 28,\n",
+       "     'end': 39,\n",
+       "     'insertions': [[29, 11]]},\n",
+       "    {'helix': 5, 'forward': True, 'start': 28, 'end': 40}]},\n",
+       "  {'color': '#0066cc',\n",
+       "   'is_scaffold': True,\n",
+       "   'domains': [{'helix': 1, 'forward': False, 'start': 39, 'end': 42}]},\n",
+       "  {'color': '#0066cc',\n",
+       "   'is_scaffold': True,\n",
+       "   'domains': [{'helix': 2, 'forward': True, 'start': 39, 'end': 42}]},\n",
+       "  {'color': '#888888',\n",
+       "   'domains': [{'helix': 2,\n",
+       "     'forward': False,\n",
+       "     'start': 0,\n",
+       "     'end': 35,\n",
+       "     'deletions': [11]}]},\n",
+       "  {'color': '#0066cc',\n",
+       "   'is_scaffold': True,\n",
+       "   'domains': [{'helix': 3, 'forward': False, 'start': 37, 'end': 42}]},\n",
+       "  {'color': '#cc0000',\n",
+       "   'domains': [{'helix': 3, 'forward': True, 'start': 0, 'end': 21},\n",
+       "    {'helix': 4, 'forward': False, 'start': 9, 'end': 21}]},\n",
+       "  {'color': '#888888',\n",
+       "   'domains': [{'helix': 4, 'forward': False, 'start': 21, 'end': 40},\n",
+       "    {'helix': 3, 'forward': True, 'start': 21, 'end': 35, 'deletions': [28]}]},\n",
+       "  {'color': '#0066cc',\n",
+       "   'is_scaffold': True,\n",
+       "   'domains': [{'helix': 4, 'forward': True, 'start': 0, 'end': 4}]},\n",
+       "  {'color': '#0066cc',\n",
+       "   'is_scaffold': True,\n",
+       "   'domains': [{'helix': 5, 'forward': False, 'start': 0, 'end': 4}]}]}"
+      ]
+     },
+     "execution_count": 64,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "sc"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "id": "66a215f5-fac0-455b-b990-a0713a2e3e62",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['_BASE_WIDTH',\n",
+       " '_FLOAT_PROPERTY_KEYS',\n",
+       " '_HELICAL_PITCH',\n",
+       " '_NucleicAcidPart__count',\n",
+       " '_STEP_SIZE',\n",
+       " '_SUB_STEP_SIZE',\n",
+       " '_TURNS_PER_STEP',\n",
+       " '_TWIST_PER_BASE',\n",
+       " '__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_abstract_segment_id',\n",
+       " '_active_base_index',\n",
+       " '_active_id_num',\n",
+       " '_addCoordinates',\n",
+       " '_addModInstanceKey',\n",
+       " '_addOligoToSet',\n",
+       " '_canReAdd',\n",
+       " '_canRemove',\n",
+       " '_count',\n",
+       " '_createHelix',\n",
+       " '_current_base_count',\n",
+       " '_decrementInstance',\n",
+       " '_deepCopy',\n",
+       " '_document',\n",
+       " '_getModKeyTokens',\n",
+       " '_getNewIdNum',\n",
+       " '_getVirtualHelixOriginNeighbors',\n",
+       " '_group_properties',\n",
+       " '_highest_even_id_num_used',\n",
+       " '_highest_odd_id_num_used',\n",
+       " '_incrementInstance',\n",
+       " '_insertions',\n",
+       " '_instance_count',\n",
+       " '_instances',\n",
+       " '_mods',\n",
+       " '_offset_and_size',\n",
+       " '_oligos',\n",
+       " '_origin_cache',\n",
+       " '_origin_cache_keys',\n",
+       " '_origin_pts',\n",
+       " '_parent',\n",
+       " '_point_cache',\n",
+       " '_point_cache_keys',\n",
+       " '_pointsFromDirection',\n",
+       " '_projectionPointOnPlane',\n",
+       " '_queryBasePoint',\n",
+       " '_queryIdNumRange',\n",
+       " '_queryIdNumRangeNeighbor',\n",
+       " '_queryVirtualHelixOrigin',\n",
+       " '_queryVirtualHelixOriginRect',\n",
+       " '_radius',\n",
+       " '_recycleIdNum',\n",
+       " '_refreshSegments',\n",
+       " '_removeCoordinates',\n",
+       " '_removeHelix',\n",
+       " '_removeOligoFromSet',\n",
+       " '_reserveIdNum',\n",
+       " '_resetOriginCache',\n",
+       " '_resetPointCache',\n",
+       " '_resizeHelix',\n",
+       " '_sanity_check_id_numbers',\n",
+       " '_selected',\n",
+       " '_selections',\n",
+       " '_setCoordinates',\n",
+       " '_setProperty',\n",
+       " '_setVirtualHelixOriginLimits',\n",
+       " '_setVirtualHelixProperties',\n",
+       " '_signals',\n",
+       " '_translateCoordinates',\n",
+       " '_translateVirtualHelices',\n",
+       " '_virtual_helices_dict',\n",
+       " 'activeBaseIndex',\n",
+       " 'activeIdNum',\n",
+       " 'active_base_info',\n",
+       " 'addModInstance',\n",
+       " 'addModStrandInstance',\n",
+       " 'angleNormalize',\n",
+       " 'angleRangeCheck',\n",
+       " 'axis_pts',\n",
+       " 'baseWidth',\n",
+       " 'batchCreateVirtualHelices',\n",
+       " 'boundDimensions',\n",
+       " 'changeInstanceProperty',\n",
+       " 'clearActiveVirtualHelix',\n",
+       " 'connect',\n",
+       " 'copy',\n",
+       " 'createVirtualHelix',\n",
+       " 'createXover',\n",
+       " 'cross',\n",
+       " 'deleteLater',\n",
+       " 'delta2D_scratch',\n",
+       " 'delta3D_scratch',\n",
+       " 'destroy',\n",
+       " 'directions',\n",
+       " 'disconnect',\n",
+       " 'document',\n",
+       " 'dumpInsertions',\n",
+       " 'dumpModInstances',\n",
+       " 'editable_properties',\n",
+       " 'eye3_scratch',\n",
+       " 'fwd_pts',\n",
+       " 'fwd_strandsets',\n",
+       " 'getAllVirtualHelixProperties',\n",
+       " 'getCircularOligos',\n",
+       " 'getColor',\n",
+       " 'getCoordinate',\n",
+       " 'getCoordinates',\n",
+       " 'getDirections',\n",
+       " 'getGridType',\n",
+       " 'getIdNums',\n",
+       " 'getIndices',\n",
+       " 'getInstanceProperty',\n",
+       " 'getMaxIdNum',\n",
+       " 'getModID',\n",
+       " 'getModStrandIdx',\n",
+       " 'getModelProperties',\n",
+       " 'getName',\n",
+       " 'getNeighbors',\n",
+       " 'getNewAbstractSegmentId',\n",
+       " 'getOffsetAndSize',\n",
+       " 'getOligoAt',\n",
+       " 'getOutlineProperties',\n",
+       " 'getProperty',\n",
+       " 'getSequences',\n",
+       " 'getStrand',\n",
+       " 'getStrandModSequence',\n",
+       " 'getStrandSets',\n",
+       " 'getVirtualHelicesInArea',\n",
+       " 'getVirtualHelix',\n",
+       " 'getVirtualHelixAtPoint',\n",
+       " 'getVirtualHelixOrder',\n",
+       " 'getVirtualHelixOrigin',\n",
+       " 'getVirtualHelixOriginLimits',\n",
+       " 'getVirtualHelixProperties',\n",
+       " 'getidNums',\n",
+       " 'hasStrandAtIdx',\n",
+       " 'helicalPitch',\n",
+       " 'helixProperties',\n",
+       " 'id_nums',\n",
+       " 'indexOfRightmostNonemptyBase',\n",
+       " 'indices',\n",
+       " 'initializeAbstractSegmentId',\n",
+       " 'insertions',\n",
+       " 'instanceProperties',\n",
+       " 'isAGreaterThanB_Z',\n",
+       " 'isSelected',\n",
+       " 'isVirtualHelixActive',\n",
+       " 'isVirtualHelixNearPoint',\n",
+       " 'isZEditable',\n",
+       " 'is_active',\n",
+       " 'lengthSq',\n",
+       " 'locationQt',\n",
+       " 'm3_scratch0',\n",
+       " 'm3_scratch1',\n",
+       " 'm3_scratch2',\n",
+       " 'makeRotation',\n",
+       " 'maxBaseIdx',\n",
+       " 'newPart',\n",
+       " 'normalize',\n",
+       " 'normalizedRange',\n",
+       " 'oligos',\n",
+       " 'origin_limits',\n",
+       " 'parent',\n",
+       " 'partActiveBaseInfoSignal',\n",
+       " 'partActiveChangedSignal',\n",
+       " 'partActiveVirtualHelixChangedSignal',\n",
+       " 'partDocumentSettingChangedSignal',\n",
+       " 'partInstanceAddedSignal',\n",
+       " 'partInstancePropertySignal',\n",
+       " 'partOligoAddedSignal',\n",
+       " 'partParentChangedSignal',\n",
+       " 'partPropertyChangedSignal',\n",
+       " 'partRemovedSignal',\n",
+       " 'partSelectedChangedSignal',\n",
+       " 'partStrandChangedSignal',\n",
+       " 'partType',\n",
+       " 'partVirtualHelicesSelectedSignal',\n",
+       " 'partVirtualHelicesTranslatedSignal',\n",
+       " 'partVirtualHelixAddedSignal',\n",
+       " 'partVirtualHelixPropertyChangedSignal',\n",
+       " 'partVirtualHelixRemovedSignal',\n",
+       " 'partVirtualHelixRemovingSignal',\n",
+       " 'partVirtualHelixResizedSignal',\n",
+       " 'partZDimensionsChangedSignal',\n",
+       " 'potentialCrossoverMap',\n",
+       " 'queryBasePoint',\n",
+       " 'queryIdNumNeighbor',\n",
+       " 'queryVirtualHelixOrigin',\n",
+       " 'radius',\n",
+       " 'radiusForAngle',\n",
+       " 'recycle_bin',\n",
+       " 'reemitActiveVirtualHelix',\n",
+       " 'refreshSegments',\n",
+       " 'remove',\n",
+       " 'removeAllOligos',\n",
+       " 'removeModInstance',\n",
+       " 'removeModStrandInstance',\n",
+       " 'removeVirtualHelices',\n",
+       " 'removeVirtualHelix',\n",
+       " 'removeXover',\n",
+       " 'reserved_ids',\n",
+       " 'resetCoordinates',\n",
+       " 'rev_pts',\n",
+       " 'rev_strandsets',\n",
+       " 'segment_dict',\n",
+       " 'setAbstractSequences',\n",
+       " 'setActive',\n",
+       " 'setActiveBaseInfo',\n",
+       " 'setActiveVirtualHelix',\n",
+       " 'setAllVirtualHelixSizes',\n",
+       " 'setDocument',\n",
+       " 'setGridType',\n",
+       " 'setImportedVHelixOrder',\n",
+       " 'setInstanceProperty',\n",
+       " 'setParent',\n",
+       " 'setProperty',\n",
+       " 'setSelected',\n",
+       " 'setVirtualHelixProperties',\n",
+       " 'setVirtualHelixSize',\n",
+       " 'shallowCopy',\n",
+       " 'signals',\n",
+       " 'splitOligoAtAbsoluteLengths',\n",
+       " 'stepSize',\n",
+       " 'subStepSize',\n",
+       " 'total_id_nums',\n",
+       " 'total_points',\n",
+       " 'translateVirtualHelices',\n",
+       " 'twistPerBase',\n",
+       " 'undoStack',\n",
+       " 'uuid',\n",
+       " 'verifyOligos',\n",
+       " 'vh_editable_properties',\n",
+       " 'vh_properties',\n",
+       " 'xoverSnapTo',\n",
+       " 'zBoundsIds']"
+      ]
+     },
+     "execution_count": 26,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dir(json_data)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 344,
+   "id": "6c6b8a93-aa6d-4a5e-83c9-fb66381c6ce3",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "AttributeError",
+     "evalue": "'dict' object has no attribute 'fwd_strandsets'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[344], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m s\u001b[38;5;241m=\u001b[39m\u001b[43mjson_data\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfwd_strandsets\u001b[49m\n\u001b[1;32m      2\u001b[0m s[\u001b[38;5;241m0\u001b[39m]\n",
+      "\u001b[0;31mAttributeError\u001b[0m: 'dict' object has no attribute 'fwd_strandsets'"
      ]
     }
    ],
    "source": [
+    "s=json_data.fwd_strandsets\n",
+    "s[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 90,
+   "id": "fe082e4f-7622-4a9c-ac54-17cd2cb741d2",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['__class__',\n",
+       " '__delattr__',\n",
+       " '__dict__',\n",
+       " '__dir__',\n",
+       " '__doc__',\n",
+       " '__eq__',\n",
+       " '__format__',\n",
+       " '__ge__',\n",
+       " '__getattribute__',\n",
+       " '__gt__',\n",
+       " '__hash__',\n",
+       " '__init__',\n",
+       " '__init_subclass__',\n",
+       " '__le__',\n",
+       " '__lt__',\n",
+       " '__module__',\n",
+       " '__ne__',\n",
+       " '__new__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_base_idx_high',\n",
+       " '_base_idx_low',\n",
+       " '_deepCopy',\n",
+       " '_document',\n",
+       " '_id_num',\n",
+       " '_is_forward',\n",
+       " '_oligo',\n",
+       " '_parent',\n",
+       " '_sequence',\n",
+       " '_signals',\n",
+       " '_strand3p',\n",
+       " '_strand5p',\n",
+       " '_strandset',\n",
+       " 'abstractSeq',\n",
+       " 'abstract_sequence',\n",
+       " 'addInsertion',\n",
+       " 'addMods',\n",
+       " 'applyAbstractSequence',\n",
+       " 'canInstallXoverAt',\n",
+       " 'canResizeTo',\n",
+       " 'changeInsertion',\n",
+       " 'clearAbstractSequence',\n",
+       " 'clearDecoratorCommands',\n",
+       " 'clearInsertionsCommands',\n",
+       " 'connect',\n",
+       " 'connection3p',\n",
+       " 'connection5p',\n",
+       " 'connectionHigh',\n",
+       " 'connectionLow',\n",
+       " 'copyAbstractSequenceToSequence',\n",
+       " 'deleteLater',\n",
+       " 'destroy',\n",
+       " 'disconnect',\n",
+       " 'document',\n",
+       " 'dump5p',\n",
+       " 'generator3pStrand',\n",
+       " 'generator5pStrand',\n",
+       " 'getColor',\n",
+       " 'getComplementStrands',\n",
+       " 'getRemoveInsertionCommands',\n",
+       " 'getResizeBounds',\n",
+       " 'getSequenceList',\n",
+       " 'hasInsertionAt',\n",
+       " 'hasXoverAt',\n",
+       " 'highIdx',\n",
+       " 'idNum',\n",
+       " 'idx3Prime',\n",
+       " 'idx5Prime',\n",
+       " 'idxs',\n",
+       " 'insertionLengthBetweenIdxs',\n",
+       " 'insertionsOnStrand',\n",
+       " 'isForward',\n",
+       " 'length',\n",
+       " 'lowIdx',\n",
+       " 'merge',\n",
+       " 'modifersOnStrand',\n",
+       " 'oligo',\n",
+       " 'parent',\n",
+       " 'part',\n",
+       " 'reapplySequence',\n",
+       " 'removeInsertion',\n",
+       " 'removeMods',\n",
+       " 'resize',\n",
+       " 'segments',\n",
+       " 'sequence',\n",
+       " 'setComplementSequence',\n",
+       " 'setConnection3p',\n",
+       " 'setConnection5p',\n",
+       " 'setConnectionHigh',\n",
+       " 'setConnectionLow',\n",
+       " 'setIdxs',\n",
+       " 'setOligo',\n",
+       " 'setParent',\n",
+       " 'setSequence',\n",
+       " 'shallowCopy',\n",
+       " 'signals',\n",
+       " 'split',\n",
+       " 'strandConnectionChangedSignal',\n",
+       " 'strandFilter',\n",
+       " 'strandHasNewOligoSignal',\n",
+       " 'strandInsertionAddedSignal',\n",
+       " 'strandInsertionChangedSignal',\n",
+       " 'strandInsertionRemovedSignal',\n",
+       " 'strandModsAddedSignal',\n",
+       " 'strandModsChangedSignal',\n",
+       " 'strandModsRemovedSignal',\n",
+       " 'strandRemovedSignal',\n",
+       " 'strandResizedSignal',\n",
+       " 'strandSelectedChangedSignal',\n",
+       " 'strandSet',\n",
+       " 'strandType',\n",
+       " 'strandXover5pRemovedSignal',\n",
+       " 'totalLength',\n",
+       " 'undoStack']"
+      ]
+     },
+     "execution_count": 90,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "i=[s[0].getStrand(i) for i in range(s[0].length())]\n",
+    "dir(i[6])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 59,
+   "id": "4d9e756f-8f34-4738-909c-a1714e4a4459",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_helix_angle(part, helix_id, indices):\n",
+    "    \"\"\" Get \"start_orientation\" for helix \"\"\"\n",
+    "        # import ipdb\n",
+    "        # ipdb.set_trace()\n",
     "\n",
+    "    \"\"\" FROM CADNANO2.5\n",
+    "    + angle is CCW\n",
+    "    - angle is CW\n",
+    "    Right handed DNA rotates clockwise from 5' to 3'\n",
+    "    we use the convention the 5' end starts at 0 degrees\n",
+    "    and it's pair is minor_groove_angle degrees away\n",
+    "    direction, hence the minus signs.  eulerZ\n",
+    "    \"\"\"\n",
     "\n",
-    "from mrdna.readers.cadnano_segments import *\n",
-    "from cadnano.document import Document\n",
-    "import cadnano"
+    "    hp, bpr, tpr, eulerZ, mgroove = part.vh_properties.loc[helix_id,\n",
+    "                                                                    ['helical_pitch',\n",
+    "                                                                     'bases_per_repeat',\n",
+    "                                                                     'turns_per_repeat',\n",
+    "                                                                     'eulerZ',\n",
+    "                                                                     'minor_groove_angle']]\n",
+    "    twist_per_base = tpr*360./bpr\n",
+    "        # angle = eulerZ - twist_per_base*indices + 0.5*mgroove + 180\n",
+    "    angle = eulerZ + twist_per_base*indices - 0.5*mgroove\n",
+    "    return rotationAboutAxis(np.array((0,0,1)),angle)\n",
+    "\n",
+    "def nttype(scafs):\n",
+    "    def judge(i):\n",
+    "        if i ==[-1,-1,-1,-1]:\n",
+    "            return 0\n",
+    "        else: return 1\n",
+    "    n=np.array([judge(i) for i in scafs])\n",
+    "    return n\n",
+    "\n",
+    "            \n",
+    "def gen_prop_table(json_file):\n",
+    "    part,vslist=read_json_file(json_file)\n",
+    "    props = part.getModelProperties().copy()\n",
+    "    try:\n",
+    "        if props.get('point_type') == PointType.ARBITRARY:\n",
+    "            # TODO add code to encode Parts with ARBITRARY point configurations\n",
+    "            raise NotImplementedError(\"Not implemented\")\n",
+    "    except:\n",
+    "        try:\n",
+    "            vh_props, origins = part.helixPropertiesAndOrigins()\n",
+    "        except:\n",
+    "            origins = {hid:part.getVirtualHelixOrigin(hid)[:2] for hid in part.getidNums()}\n",
+    "    scaf_id=[nttype(vslist['scaf'][i]) for i in vslist.index]\n",
+    "    stap_id=[nttype(vslist['stap'][i]) for i in vslist.index]\n",
+    "    cad_bps=part.getIndices(0)\n",
+    "    vslist[\"scafnt\"]=np.sum(np.array(scaf_id),axis=1)\n",
+    "    vslist[\"stapnt\"]=np.sum(np.array(stap_id),axis=1)\n",
+    "    totnt=np.sum(vslist[\"scafnt\"])+np.sum(vslist[\"stapnt\"])\n",
+    "    is_scaf=np.zeros(totnt,dtype=bool)\n",
+    "    is_scaf[0:np.sum(vslist[\"scafnt\"])]=1\n",
+    "    nt_prop=pd.DataFrame(index=range(totnt),columns=[\"vh\",\"zid\",\"is_scaf\",\"r\",\"bp\",\"stack\",\"threeprime\",\"seq\",\"orientation\"])\n",
+    "    nt_prop[\"is_scaf\"]=is_scaf\n",
+    "    tot_id=scaf_id+stap_id\n",
+    "    vhi,zidi=np.where(np.array(scaf_id)==1)\n",
+    "    vhj,zidj=np.where(np.array(stap_id)==1)\n",
+    "    vhi=vslist.index[vhi]\n",
+    "    vhj=vslist.index[vhj]\n",
+    "    nt_prop[\"vh\"]=list(vhi)+list(vhj)\n",
+    "    nt_prop[\"zid\"]=list(zidi)+list(zidj)\n",
+    "    vhzid=list(zip(nt_prop[\"vh\"],nt_prop[\"zid\"]))\n",
+    "    nt_prop[\"r\"]=[part.getCoordinate(helix_id, indices) for helix_id, indices in zip(nt_prop[\"vh\"],nt_prop[\"zid\"])]\n",
+    "    #nt_prop[\"orientation\"]=[get_helix_angle(part, helix_id, indices) for helix_id,indices in zip(nt_prop[\"vh\"],nt_prop[\"zid\"])]\n",
+    "    nt_prop=nt_prop.fillna(-1)\n",
+    "    for i in range(int(len(vhzid)/2)):\n",
+    "        try:\n",
+    "            bp1,bp2=(i,1+i+vhzid[i+1:].index(vhzid[i]))\n",
+    "            nt_prop[\"bp\"][bp1]=bp2\n",
+    "            nt_prop[\"bp\"][bp2]=bp1\n",
+    "        except:\n",
+    "            pass\n",
+    "    tprime_list=-np.ones(len(nt_prop.index),dtype=int)\n",
+    "    index2=list(zip(vhzid,nt_prop[\"is_scaf\"]))\n",
+    "    for i in range(len(nt_prop.index)):\n",
+    "        ((m,n),p)=list(zip(vhzid,nt_prop[\"is_scaf\"]))[i]\n",
+    "        if p==True:\n",
+    "            k,l=(vslist[\"scaf\"][m])[n][2:]\n",
+    "            if k!=-1 and l!=-1:\n",
+    "                n=index2.index(((k,l),True))\n",
+    "                tprime_list[i]=int(n)\n",
+    "            \n",
+    "        else:\n",
+    "            k,l=(vslist[\"stap\"][m])[n][2:]\n",
+    "            if k!=-1 and l!=-1:\n",
+    "                n=index2.index(((k,l),False))\n",
+    "                tprime_list[i]=int(n)\n",
+    "    nt_prop[\"threeprime\"]=tprime_list\n",
+    "    #(n,)=np.where(nt_prop[\"threeprime\"]==-1)\n",
+    "    #stackid=nt_prop[\"bp\"][[list(nt_prop[\"threeprime\"]).index(i) for i in n]]\n",
+    "    index3=dict(zip(nt_prop.index,zip(nt_prop[\"vh\"],nt_prop[\"is_scaf\"])))\n",
+    "    index3[-1]=(-1,-1)\n",
+    "    nt_prop[\"stack\"]=np.where([index3[i]==index3[nt_prop[\"threeprime\"][i]] for i in (nt_prop.index)],nt_prop[\"threeprime\"],-1)  \n",
+    "    \n",
+    "\n",
+    "    return nt_prop\n",
+    "\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
-   "id": "f07e1b32",
+   "execution_count": 60,
+   "id": "dd26d9a2-9676-4286-8032-442997d872c2",
    "metadata": {},
    "outputs": [
     {
@@ -39,25 +7558,940 @@
      "text": [
       "Found cadnano version 2 file\n"
      ]
+    },
+    {
+     "ename": "TypeError",
+     "evalue": "cannot unpack non-iterable NucleicAcidPart object",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[60], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m s\u001b[38;5;241m=\u001b[39m\u001b[43mgen_prop_table\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtest_insert.json\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n",
+      "Cell \u001b[0;32mIn[59], line 36\u001b[0m, in \u001b[0;36mgen_prop_table\u001b[0;34m(json_file)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgen_prop_table\u001b[39m(json_file):\n\u001b[0;32m---> 36\u001b[0m     part,vslist\u001b[38;5;241m=\u001b[39mread_json_file(json_file)\n\u001b[1;32m     37\u001b[0m     props \u001b[38;5;241m=\u001b[39m part\u001b[38;5;241m.\u001b[39mgetModelProperties()\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m     38\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n",
+      "\u001b[0;31mTypeError\u001b[0m: cannot unpack non-iterable NucleicAcidPart object"
+     ]
+    }
+   ],
+   "source": [
+    "s=gen_prop_table(\"test_insert.json\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "id": "26d573d8-7e97-40bb-81f2-554009fbe689",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "s.to_csv(\"s.csv\")"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 141,
+   "id": "caa9367f-1047-4d70-b0c0-2ea99015adc9",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[1,\n",
+       " 2,\n",
+       " 3,\n",
+       " 4,\n",
+       " 5,\n",
+       " 6,\n",
+       " 7,\n",
+       " 8,\n",
+       " 9,\n",
+       " 10,\n",
+       " 11,\n",
+       " 12,\n",
+       " 13,\n",
+       " 14,\n",
+       " 15,\n",
+       " 16,\n",
+       " 17,\n",
+       " 18,\n",
+       " 19,\n",
+       " 20,\n",
+       " 21,\n",
+       " 22,\n",
+       " 23,\n",
+       " 24,\n",
+       " 25,\n",
+       " 26,\n",
+       " 27,\n",
+       " 28,\n",
+       " 29,\n",
+       " 30,\n",
+       " 31,\n",
+       " -1,\n",
+       " 33,\n",
+       " 34,\n",
+       " -1,\n",
+       " -1,\n",
+       " 35,\n",
+       " 36,\n",
+       " 37,\n",
+       " 38,\n",
+       " 39,\n",
+       " 40,\n",
+       " 41,\n",
+       " 42,\n",
+       " 43,\n",
+       " 44,\n",
+       " 45,\n",
+       " 46,\n",
+       " 47,\n",
+       " -1,\n",
+       " 49,\n",
+       " 50,\n",
+       " 51,\n",
+       " 52,\n",
+       " 53,\n",
+       " 54,\n",
+       " 55,\n",
+       " 56,\n",
+       " 57,\n",
+       " 58,\n",
+       " 59,\n",
+       " 60,\n",
+       " 61,\n",
+       " 62,\n",
+       " 63,\n",
+       " 64,\n",
+       " 65,\n",
+       " -1,\n",
+       " 67,\n",
+       " 68,\n",
+       " 71,\n",
+       " 72,\n",
+       " 73,\n",
+       " 74,\n",
+       " 75,\n",
+       " 76,\n",
+       " 77,\n",
+       " 78,\n",
+       " 79,\n",
+       " 80,\n",
+       " 81,\n",
+       " 82,\n",
+       " 83,\n",
+       " 84,\n",
+       " 85,\n",
+       " 86,\n",
+       " -1,\n",
+       " 88,\n",
+       " 89,\n",
+       " 90,\n",
+       " 91,\n",
+       " 92,\n",
+       " 93,\n",
+       " 94,\n",
+       " 95,\n",
+       " 96,\n",
+       " 97,\n",
+       " 98,\n",
+       " 99,\n",
+       " 100,\n",
+       " -1,\n",
+       " 102,\n",
+       " 103,\n",
+       " -1,\n",
+       " -1,\n",
+       " 104,\n",
+       " 105,\n",
+       " 106,\n",
+       " 107,\n",
+       " 108,\n",
+       " 109,\n",
+       " 110,\n",
+       " 111,\n",
+       " 112,\n",
+       " 113,\n",
+       " 114,\n",
+       " 115,\n",
+       " 116,\n",
+       " -1,\n",
+       " 118,\n",
+       " 119,\n",
+       " 120,\n",
+       " 121,\n",
+       " 122,\n",
+       " 123,\n",
+       " 124,\n",
+       " 125,\n",
+       " 126,\n",
+       " 127,\n",
+       " 128,\n",
+       " 129,\n",
+       " 130,\n",
+       " 131,\n",
+       " 132,\n",
+       " 133,\n",
+       " -1,\n",
+       " 135,\n",
+       " 136,\n",
+       " 137,\n",
+       " 138,\n",
+       " 141,\n",
+       " 142,\n",
+       " 143,\n",
+       " -1,\n",
+       " 145,\n",
+       " 146,\n",
+       " 147,\n",
+       " 148,\n",
+       " 149,\n",
+       " 150,\n",
+       " -1,\n",
+       " 152,\n",
+       " 153,\n",
+       " 154,\n",
+       " 155,\n",
+       " 156,\n",
+       " 157,\n",
+       " 158,\n",
+       " 159,\n",
+       " 160,\n",
+       " 161,\n",
+       " 162,\n",
+       " 163,\n",
+       " 164,\n",
+       " 165,\n",
+       " 166,\n",
+       " 167,\n",
+       " 168,\n",
+       " 169,\n",
+       " 170,\n",
+       " 171,\n",
+       " 172,\n",
+       " 173,\n",
+       " 174,\n",
+       " -1,\n",
+       " -1,\n",
+       " 175,\n",
+       " 176,\n",
+       " 177,\n",
+       " -1,\n",
+       " 179,\n",
+       " 180,\n",
+       " 181,\n",
+       " 182,\n",
+       " 183,\n",
+       " 184,\n",
+       " 185,\n",
+       " 186,\n",
+       " 187,\n",
+       " 188,\n",
+       " 189,\n",
+       " 190,\n",
+       " 191,\n",
+       " -1,\n",
+       " 193,\n",
+       " 194,\n",
+       " 195,\n",
+       " 196,\n",
+       " 197,\n",
+       " 198,\n",
+       " 199,\n",
+       " 200,\n",
+       " 201,\n",
+       " 202,\n",
+       " 203,\n",
+       " 204,\n",
+       " 205,\n",
+       " 206,\n",
+       " 207,\n",
+       " 208,\n",
+       " -1,\n",
+       " 210,\n",
+       " 211,\n",
+       " 212,\n",
+       " 213,\n",
+       " 214,\n",
+       " 215,\n",
+       " 216,\n",
+       " 217,\n",
+       " 218,\n",
+       " 219,\n",
+       " 220,\n",
+       " 221,\n",
+       " 222,\n",
+       " 223,\n",
+       " 224,\n",
+       " 225,\n",
+       " 226,\n",
+       " 227,\n",
+       " -1,\n",
+       " 229,\n",
+       " 230,\n",
+       " -1,\n",
+       " 232,\n",
+       " 233,\n",
+       " 234,\n",
+       " -1,\n",
+       " 236,\n",
+       " 237,\n",
+       " 238,\n",
+       " 239,\n",
+       " 240,\n",
+       " 241,\n",
+       " 242,\n",
+       " 243,\n",
+       " 244,\n",
+       " 245,\n",
+       " 248,\n",
+       " 249,\n",
+       " 250,\n",
+       " 251,\n",
+       " 252,\n",
+       " 253,\n",
+       " 254,\n",
+       " 255,\n",
+       " 256,\n",
+       " 257,\n",
+       " 258,\n",
+       " 259,\n",
+       " 260,\n",
+       " 261,\n",
+       " 262,\n",
+       " 263,\n",
+       " 264,\n",
+       " -1,\n",
+       " 266,\n",
+       " 267,\n",
+       " 268,\n",
+       " 269,\n",
+       " 270,\n",
+       " 271,\n",
+       " 272,\n",
+       " 273,\n",
+       " 274,\n",
+       " 275,\n",
+       " 276,\n",
+       " 277,\n",
+       " 278,\n",
+       " 279,\n",
+       " 280,\n",
+       " 281,\n",
+       " 282,\n",
+       " -1,\n",
+       " -1,\n",
+       " 283,\n",
+       " 284,\n",
+       " 285,\n",
+       " 286,\n",
+       " 287,\n",
+       " 288,\n",
+       " 289,\n",
+       " 290,\n",
+       " 291,\n",
+       " 292,\n",
+       " 293,\n",
+       " 294,\n",
+       " 295,\n",
+       " 296,\n",
+       " 297,\n",
+       " 298,\n",
+       " 299,\n",
+       " 300,\n",
+       " 301,\n",
+       " 302,\n",
+       " 303,\n",
+       " 304,\n",
+       " 305,\n",
+       " 306,\n",
+       " 307,\n",
+       " 308,\n",
+       " 309,\n",
+       " 310,\n",
+       " 311,\n",
+       " 312,\n",
+       " 313,\n",
+       " 314,\n",
+       " 315,\n",
+       " 316,\n",
+       " 319,\n",
+       " 320,\n",
+       " 321,\n",
+       " 322,\n",
+       " 323,\n",
+       " 324,\n",
+       " 325,\n",
+       " 326,\n",
+       " 327,\n",
+       " 328,\n",
+       " 329,\n",
+       " 330,\n",
+       " 331,\n",
+       " 332,\n",
+       " 333,\n",
+       " 334,\n",
+       " 335,\n",
+       " 336,\n",
+       " 337,\n",
+       " 338,\n",
+       " -1,\n",
+       " 340,\n",
+       " 341,\n",
+       " 342,\n",
+       " 343,\n",
+       " 344,\n",
+       " 345,\n",
+       " 346,\n",
+       " 347,\n",
+       " 348,\n",
+       " 349,\n",
+       " 350,\n",
+       " 351,\n",
+       " 352,\n",
+       " -1,\n",
+       " -1,\n",
+       " 353,\n",
+       " 354,\n",
+       " 355,\n",
+       " 356,\n",
+       " 357,\n",
+       " 358,\n",
+       " 359,\n",
+       " 360,\n",
+       " 361,\n",
+       " 362,\n",
+       " 363,\n",
+       " -1,\n",
+       " 365,\n",
+       " 366,\n",
+       " 367,\n",
+       " 368,\n",
+       " 369,\n",
+       " 370,\n",
+       " 371,\n",
+       " 372,\n",
+       " 373,\n",
+       " 374,\n",
+       " 375,\n",
+       " 376,\n",
+       " 377,\n",
+       " 378,\n",
+       " 379,\n",
+       " 380,\n",
+       " 381,\n",
+       " 382,\n",
+       " 385,\n",
+       " 386,\n",
+       " 387,\n",
+       " 388,\n",
+       " 389,\n",
+       " 390,\n",
+       " 391,\n",
+       " 392,\n",
+       " 393,\n",
+       " 394,\n",
+       " 395,\n",
+       " 396,\n",
+       " 397,\n",
+       " 398,\n",
+       " 399,\n",
+       " 400,\n",
+       " 401,\n",
+       " 402,\n",
+       " -1,\n",
+       " 404,\n",
+       " 405,\n",
+       " 406,\n",
+       " 407,\n",
+       " 408,\n",
+       " 409,\n",
+       " 410,\n",
+       " 411,\n",
+       " 412,\n",
+       " 413,\n",
+       " 414,\n",
+       " -1]"
+      ]
+     },
+     "execution_count": 141,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "list(s[\"stack\"])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 133,
+   "id": "2ac38001-5cb0-4df8-b6ff-0853f3b4a7f3",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "ind=dict(zip(s.index,zip(s[\"vh\"],s[\"is_scaf\"])))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 134,
+   "id": "7c2c51bb-c1d5-4ec3-abb6-15d7d357cf63",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "ind[-1]=(-1,-1)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 126,
+   "id": "3fc0b810-6b65-4cbe-adbb-13ebe72ee1b8",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " True,\n",
+       " False]"
+      ]
+     },
+     "execution_count": 126,
+     "metadata": {},
+     "output_type": "execute_result"
     }
    ],
    "source": [
-    "json_data=read_json_file(\"test.json\")\n",
-    "part=decode_cadnano_part(json_data)\n",
-    "model=cadnano_part(part)"
+    "[ind[i]==ind[s[\"threeprime\"][i]] for i in (s.index)]"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 24,
    "id": "a4d48fe0",
    "metadata": {},
    "outputs": [
     {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Found cadnano version 2 file\n"
+     "ename": "TypeError",
+     "evalue": "'NucleicAcidPart' object is not subscriptable",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[24], line 2\u001b[0m\n\u001b[1;32m      1\u001b[0m doc\u001b[38;5;241m=\u001b[39mDocument()\n\u001b[0;32m----> 2\u001b[0m \u001b[43mcadnano\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfileio\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mv2decode\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdoc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjson_data\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m      3\u001b[0m parts \u001b[38;5;241m=\u001b[39m [p \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m doc\u001b[38;5;241m.\u001b[39mgetParts()]\n\u001b[1;32m      4\u001b[0m part\u001b[38;5;241m=\u001b[39mparts[\u001b[38;5;241m0\u001b[39m]\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/cadnano/fileio/v2decode.py:36\u001b[0m, in \u001b[0;36mdecode\u001b[0;34m(document, obj, emit_signals)\u001b[0m\n\u001b[1;32m     24\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdecode\u001b[39m(document: DocT, obj: \u001b[38;5;28mdict\u001b[39m, emit_signals: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m):\n\u001b[1;32m     25\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"Parses a dictionary (obj) created from reading a json file and uses it\u001b[39;00m\n\u001b[1;32m     26\u001b[0m \u001b[38;5;124;03m    to populate the given document with model data.\u001b[39;00m\n\u001b[1;32m     27\u001b[0m \n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m     34\u001b[0m \u001b[38;5;124;03m        IOError, AssertionError, TypeError\u001b[39;00m\n\u001b[1;32m     35\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m---> 36\u001b[0m     num_bases \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(\u001b[43mobj\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mvstrands\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mscaf\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m     37\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m num_bases \u001b[38;5;241m%\u001b[39m \u001b[38;5;241m32\u001b[39m \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m     38\u001b[0m         lattice_type \u001b[38;5;241m=\u001b[39m LatticeEnum\u001b[38;5;241m.\u001b[39mSQUARE\n",
+      "\u001b[0;31mTypeError\u001b[0m: 'NucleicAcidPart' object is not subscriptable"
      ]
     }
    ],
@@ -154,13 +8588,47 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 92,
    "id": "1e934f2b",
    "metadata": {},
    "outputs": [],
    "source": [
-    "strands5 = [o.strand5p() for o in part.oligos()]\n",
-    "strands3 = [o.strand3p() for o in part.oligos()]"
+    "strands5 = [o.strand5p() for o in json_data.oligos()]\n",
+    "strands3 = [o.strand3p() for o in json_data.oligos()]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 94,
+   "id": "1f942831-b170-4d1b-b445-1f58565bf2f1",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[<rev_StrandSet(0)>.<Strand(24, 27)>,\n",
+       " <rev_StrandSet(2)>.<Strand(0, 34)>,\n",
+       " <rev_StrandSet(3)>.<Strand(37, 41)>,\n",
+       " <rev_StrandSet(4)>.<Strand(9, 20)>,\n",
+       " <fwd_StrandSet(1)>.<Strand(21, 38)>,\n",
+       " <fwd_StrandSet(4)>.<Strand(0, 3)>,\n",
+       " <rev_StrandSet(5)>.<Strand(0, 3)>,\n",
+       " <fwd_StrandSet(3)>.<Strand(21, 34)>,\n",
+       " <fwd_StrandSet(2)>.<Strand(39, 41)>,\n",
+       " <fwd_StrandSet(0)>.<Strand(39, 41)>,\n",
+       " <rev_StrandSet(0)>.<Strand(2, 20)>,\n",
+       " <fwd_StrandSet(5)>.<Strand(28, 39)>,\n",
+       " <rev_StrandSet(1)>.<Strand(39, 41)>,\n",
+       " <rev_StrandSet(5)>.<Strand(23, 39)>]"
+      ]
+     },
+     "execution_count": 94,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "strands3"
    ]
   },
   {
@@ -951,7 +9419,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -965,7 +9433,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.18"
+   "version": "3.8.19"
   }
  },
  "nbformat": 4,
diff --git a/mrdna/readers/test/test3.ipynb b/mrdna/readers/test/test3.ipynb
index 0985a55..6f04987 100644
--- a/mrdna/readers/test/test3.ipynb
+++ b/mrdna/readers/test/test3.ipynb
@@ -536,9 +536,7 @@
    "cell_type": "code",
    "execution_count": 62,
    "id": "f666ffb1",
-   "metadata": {
-    "scrolled": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -2115,7 +2113,7 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
@@ -2129,7 +2127,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.8.18"
+   "version": "3.8.19"
   }
  },
  "nbformat": 4,
diff --git a/mrdna/readers/test/test_cad2.5.json b/mrdna/readers/test/test_cad2.5.json
new file mode 100644
index 0000000..e46b1cd
--- /dev/null
+++ b/mrdna/readers/test/test_cad2.5.json
@@ -0,0 +1 @@
+{"format":"3.1","date":"2024-08-08 23:20:21","name":"","parts":[{"name":"NaPart1","color":"#0066cc","is_visible":true,"active_phos":null,"crossover_span_angle":45,"max_vhelix_length":42,"neighbor_active_angle":"","grid_type":2,"virtual_helix_order":[0,1,2,3,4,5],"is_lattice":true,"virtual_helices":{"name":["vh0","vh1","vh2","vh3","vh4","vh5"],"is_visible":[true,true,true,true,true,true],"color":["#0066cc","#0066cc","#0066cc","#0066cc","#0066cc","#0066cc"],"eulerZ":[0.0,0.0,0.0,0.0,0.0,0.0],"neighbor_active_angle":[0.0,0.0,0.0,0.0,0.0,0.0],"neighbors":["[1, 5]","[0, 2]","[1, 3]","[2, 4]","[3, 5]","[0, 4]"],"bases_per_repeat":[21,21,21,21,21,21],"turns_per_repeat":[2,2,2,2,2,2],"repeat_hint":[2,2,2,2,2,2],"helical_pitch":[1.0,1.0,1.0,1.0,1.0,1.0],"minor_groove_angle":[180.0,180.0,180.0,180.0,180.0,180.0],"length":[42,42,42,42,42,42],"z":[0.0,0.0,0.0,0.0,0.0,0.0]},"origins":[[-1.948557375,1.125,0.0],[0.0,2.25,0.0],[1.948557375,1.125,0.0],[1.948557375,-1.125,0.0],[0.0,-2.25,0.0],[-1.948557375,-1.125,0.0]],"directions":[[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0]],"vh_list":[[0,42],[1,42],[2,42],[3,42],[4,42],[5,42]],"strands":{"indices":[[[[0,2],[3,20],[21,35]],[]],[[],[[0,20],[21,41]]],[[[0,23],[24,41]],[]],[[],[[0,9],[10,23],[24,30],[31,41]]],[[[0,9],[10,30],[31,41]],[]],[[],[[0,2],[3,35],[36,41]]]],"properties":[[["#0066cc","#f7931e","#f7931e"],[]],[[],["#f7931e","#f7931e"]],[["#f7931e","#f7931e"],[]],[[],["#0066cc","#f7931e","#f7931e","#0066cc"]],[["#0066cc","#f7931e","#0066cc"],[]],[[],["#333333","#f7931e","#0066cc"]]]},"insertions":[],"xovers":[[0,true,20,1,false,20],[0,true,35,5,false,35],[1,false,0,2,true,0],[1,false,21,0,true,21],[2,true,23,3,false,23],[2,true,41,1,false,41],[3,false,10,4,true,10],[3,false,24,2,true,24],[3,false,31,4,true,31],[4,true,9,3,false,9],[4,true,30,3,false,30],[5,false,3,0,true,3]],"oligos":[{"id_num":4,"idx5p":0,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo3632","color":"#0066cc","length":20,"is_visible":true},{"id_num":3,"idx5p":30,"is_5p_fwd":false,"is_circular":true,"sequence":null,"name":"oligo8000","color":"#f7931e","length":192,"is_visible":true},{"id_num":3,"idx5p":41,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo0160","color":"#0066cc","length":22,"is_visible":true},{"id_num":5,"idx5p":41,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo7152","color":"#0066cc","length":6,"is_visible":true},{"id_num":0,"idx5p":0,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo8896","color":"#0066cc","length":3,"is_visible":true},{"id_num":5,"idx5p":2,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo1168","color":"#333333","length":3,"is_visible":true}],"instance_properties":[{"slice:position":[0.0,0.0],"grid:position":[0.0,0.0],"path:position":[-12.994158258098764,-4.331386086032921]}],"uuid":"7029b213616f4ab5a1adcbf0d3a59edb"}],"modifications":{}}
\ No newline at end of file
diff --git a/mrdna/readers/test/test_insert.sc b/mrdna/readers/test/test_insert.sc
new file mode 100644
index 0000000..5414ea7
--- /dev/null
+++ b/mrdna/readers/test/test_insert.sc
@@ -0,0 +1,122 @@
+{
+  "version": "0.19.3",
+  "grid": "honeycomb",
+  "helices": [
+    {"grid_position": [16, 12]},
+    {"grid_position": [15, 12]},
+    {"grid_position": [15, 13]},
+    {"grid_position": [16, 13]},
+    {"grid_position": [17, 13]},
+    {"grid_position": [17, 12]},
+    {"grid_position": [5, 15]}
+  ],
+  "strands": [
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 5, "forward": false, "start": 9, "end": 23},
+        {"helix": 4, "forward": true, "start": 9, "end": 16},
+        {"helix": 3, "forward": false, "start": 2, "end": 16},
+        {"helix": 2, "forward": true, "start": 2, "end": 19, "deletions": [11]},
+        {"helix": 1, "forward": false, "start": 5, "end": 19, "insertions": [[10, 1]]},
+        {"helix": 0, "forward": true, "start": 5, "end": 37, "insertions": [[13, 10], [29, 11]]},
+        {"helix": 1, "forward": false, "start": 19, "end": 37},
+        {"helix": 2, "forward": true, "start": 19, "end": 33},
+        {"helix": 3, "forward": false, "start": 16, "end": 33, "deletions": [28]},
+        {"helix": 4, "forward": true, "start": 16, "end": 40},
+        {"helix": 5, "forward": false, "start": 23, "end": 40}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 0, "forward": true, "start": 39, "end": 42}
+      ]
+    },
+    {
+      "color": "#16e876",
+      "domains": [
+        {"helix": 1, "forward": true, "start": 3, "end": 21, "insertions": [[10, 1]]},
+        {"helix": 0, "forward": false, "start": 2, "end": 21, "insertions": [[13, 10]]}
+      ]
+    },
+    {
+      "color": "#cc01d1",
+      "domains": [
+        {"helix": 0, "forward": false, "start": 21, "end": 24},
+        {"helix": 1, "forward": true, "start": 21, "end": 39}
+      ]
+    },
+    {
+      "color": "#000000",
+      "domains": [
+        {"helix": 5, "forward": true, "start": 9, "end": 28},
+        {"helix": 0, "forward": false, "start": 24, "end": 28}
+      ]
+    },
+    {
+      "color": "#b8056c",
+      "domains": [
+        {"helix": 0, "forward": false, "start": 28, "end": 39, "insertions": [[29, 11]]},
+        {"helix": 5, "forward": true, "start": 28, "end": 40}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 1, "forward": false, "start": 39, "end": 42}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 2, "forward": true, "start": 39, "end": 42}
+      ]
+    },
+    {
+      "color": "#888888",
+      "domains": [
+        {"helix": 2, "forward": false, "start": 0, "end": 35, "deletions": [11]}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 3, "forward": false, "start": 37, "end": 42}
+      ]
+    },
+    {
+      "color": "#cc0000",
+      "domains": [
+        {"helix": 3, "forward": true, "start": 0, "end": 21},
+        {"helix": 4, "forward": false, "start": 9, "end": 21}
+      ]
+    },
+    {
+      "color": "#888888",
+      "domains": [
+        {"helix": 4, "forward": false, "start": 21, "end": 40},
+        {"helix": 3, "forward": true, "start": 21, "end": 35, "deletions": [28]}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 4, "forward": true, "start": 0, "end": 4}
+      ]
+    },
+    {
+      "color": "#0066cc",
+      "is_scaffold": true,
+      "domains": [
+        {"helix": 5, "forward": false, "start": 0, "end": 4}
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mrdna/readers/test/test_insert_2.5.json b/mrdna/readers/test/test_insert_2.5.json
new file mode 100644
index 0000000..98fba76
--- /dev/null
+++ b/mrdna/readers/test/test_insert_2.5.json
@@ -0,0 +1 @@
+{"format":"3.1","date":"2024-08-12 23:06:06","name":"","parts":[{"name":"NaPart1","color":"#0066cc","is_visible":true,"active_phos":null,"crossover_span_angle":45,"max_vhelix_length":42,"neighbor_active_angle":"","grid_type":2,"virtual_helix_order":[0,1,2,3,4,5,6],"is_lattice":true,"2":0,"virtual_helices":{"name":["vh0","vh1","vh2","vh3","vh4","vh5","vh6"],"is_visible":[true,true,true,true,true,true,true],"color":["#0066cc","#0066cc","#0066cc","#0066cc","#0066cc","#0066cc","#0066cc"],"eulerZ":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],"neighbor_active_angle":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],"neighbors":["[1, 5]","[0, 2]","[1, 3]","[2, 4]","[3, 5]","[0, 4]","[]"],"bases_per_repeat":[21,21,21,21,21,21,21],"turns_per_repeat":[2,2,2,2,2,2,2],"repeat_hint":[2,2,2,2,2,2,2],"helical_pitch":[1.0,1.0,1.0,1.0,1.0,1.0,1.0],"minor_groove_angle":[180.0,180.0,180.0,180.0,180.0,180.0,180.0],"length":[42,42,42,42,42,42,42],"z":[0.0,0.0,0.0,0.0,0.0,0.0,0.0]},"origins":[[7.7942295,9.0,0.0],[5.845672125,7.875,0.0],[5.845672125,5.625,0.0],[7.7942295,4.5,0.0],[9.742786875,5.625,0.0],[9.742786875,7.875,0.0],[-13.639901625,-1.125,0.0]],"directions":[[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0]],"vh_list":[[0,42],[1,42],[2,42],[3,42],[4,42],[5,42],[6,42]],"strands":{"indices":[[[[5,36],[39,41]],[[2,20],[21,23],[24,27],[28,38]]],[[[3,20],[21,38]],[[5,18],[19,36],[39,41]]],[[[2,18],[19,32],[39,41]],[[0,34]]],[[[0,20],[21,34]],[[2,15],[16,32],[37,41]]],[[[0,3],[9,15],[16,39]],[[9,20],[21,39]]],[[[9,27],[28,39]],[[0,3],[9,22],[23,39]]],[[],[]]],"properties":[[["#0066cc","#0066cc"],["#16e876","#cc01d1","#000000","#b8056c"]],[["#16e876","#cc01d1"],["#0066cc","#0066cc","#0066cc"]],[["#0066cc","#0066cc","#0066cc"],["#888888"]],[["#cc0000","#888888"],["#0066cc","#0066cc","#0066cc"]],[["#0066cc","#0066cc","#0066cc"],["#cc0000","#888888"]],[["#000000","#b8056c"],["#0066cc","#0066cc","#0066cc"]],[[],[]]]},"insertions":[[0,13,10],[0,29,11],[1,10,1],[2,11,-1],[3,28,-1]],"xovers":[[0,true,36,1,false,36],[0,false,21,1,true,21],[0,false,28,5,true,28],[1,true,20,0,false,20],[1,false,5,0,true,5],[1,false,19,2,true,19],[2,true,18,1,false,18],[2,true,32,3,false,32],[3,true,20,4,false,20],[3,false,2,2,true,2],[3,false,16,4,true,16],[4,true,15,3,false,15],[4,true,39,5,false,39],[4,false,21,3,true,21],[5,true,27,0,false,27],[5,false,9,4,true,9]],"oligos":[{"id_num":1,"idx5p":3,"is_5p_fwd":true,"is_circular":false,"sequence":"  TTGGAACAAGAGTCCGGGAGATAGGGTTGAGTGTTGTTCCAGT   ","name":"oligo3216","color":"#16e876","length":48,"is_visible":true},{"id_num":0,"idx5p":39,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo6480","color":"#0066cc","length":3,"is_visible":true},{"id_num":5,"idx5p":22,"is_5p_fwd":false,"is_circular":false,"sequence":"TGATAGACGGTTTTTCGCCCTTTGACGTTGGAGTCCACGTTCTTTAATAGTGGACTCTTGTTCCAAACTGGAACAACACTCAACCCTATCTCGGGCTATTCTTTTGATTTATAAGGGATTTTGCCGATTTCGGAACCACCATCAAACAGGATTTTCGCCTGCTGGGGCAAACCAGCGTGGACCGCTTGCTGCAACTCTCTCAGGGCCA","name":"oligo8640","color":"#0066cc","length":208,"is_visible":true},{"id_num":1,"idx5p":41,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo6720","color":"#0066cc","length":3,"is_visible":true},{"id_num":3,"idx5p":41,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo6128","color":"#0066cc","length":5,"is_visible":true},{"id_num":3,"idx5p":0,"is_5p_fwd":true,"is_circular":false,"sequence":"  GACTCCAACGTCAACCCCAGTTTGAGGGCGA","name":"oligo8288","color":"#cc0000","length":33,"is_visible":true},{"id_num":4,"idx5p":0,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo1072","color":"#0066cc","length":4,"is_visible":true},{"id_num":4,"idx5p":39,"is_5p_fwd":false,"is_circular":false,"sequence":"CAGCAAGCGGTCCACGCTGGCAGGCGAAAA  ","name":"oligo3232","color":"#888888","length":32,"is_visible":true},{"id_num":2,"idx5p":34,"is_5p_fwd":false,"is_circular":false,"sequence":"  TCCTGTTTGATGGTACTATTAAAGAACGTG  ","name":"oligo8144","color":"#888888","length":34,"is_visible":true},{"id_num":2,"idx5p":39,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo0304","color":"#0066cc","length":3,"is_visible":true},{"id_num":5,"idx5p":9,"is_5p_fwd":true,"is_circular":false,"sequence":"AAAACCGTCTATCATGGCCATAG","name":"oligo2160","color":"#000000","length":23,"is_visible":true},{"id_num":0,"idx5p":23,"is_5p_fwd":false,"is_circular":false,"sequence":"CCCTTCCGAAATCGGCAAA  ","name":"oligo4320","color":"#cc01d1","length":21,"is_visible":true},{"id_num":0,"idx5p":38,"is_5p_fwd":false,"is_circular":false,"sequence":"  ATCCCTTATAAATCAAAAGACTGAGAGAGTTG","name":"oligo2032","color":"#b8056c","length":34,"is_visible":true},{"id_num":5,"idx5p":3,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo7088","color":"#0066cc","length":4,"is_visible":true}],"instance_properties":[{"slice:position":[0.0,0.0],"grid:position":[0.0,0.0],"path:position":[0.0,0.0]}],"uuid":"b0dc440fa30e4f96bb04ce198ab14d55"}],"modifications":{}}
\ No newline at end of file
diff --git a/mrdna/readers/test/test_insert_seq2.json b/mrdna/readers/test/test_insert_seq2.json
new file mode 100644
index 0000000..09eafc2
--- /dev/null
+++ b/mrdna/readers/test/test_insert_seq2.json
@@ -0,0 +1 @@
+{"format":"3.1","date":"2024-08-13 19:10:11","name":"","parts":[{"name":"NaPart2","color":"#0066cc","is_visible":true,"active_phos":null,"crossover_span_angle":45,"max_vhelix_length":42,"neighbor_active_angle":"","grid_type":2,"virtual_helix_order":[0,1,2,3,4,5,6],"is_lattice":true,"2":0,"virtual_helices":{"name":["vh0","vh1","vh2","vh3","vh4","vh5","vh6"],"is_visible":[true,true,true,true,true,true,true],"color":["#0066cc","#0066cc","#0066cc","#0066cc","#0066cc","#0066cc","#0066cc"],"eulerZ":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],"neighbor_active_angle":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],"neighbors":["[1, 5]","[0, 2]","[1, 3]","[2, 4]","[3, 5]","[0, 4]","[]"],"bases_per_repeat":[21,21,21,21,21,21,21],"turns_per_repeat":[2,2,2,2,2,2,2],"repeat_hint":[2,2,2,2,2,2,2],"helical_pitch":[1.0,1.0,1.0,1.0,1.0,1.0,1.0],"minor_groove_angle":[180.0,180.0,180.0,180.0,180.0,180.0,180.0],"length":[42,42,42,42,42,42,42],"z":[0.0,0.0,0.0,0.0,0.0,0.0,0.0]},"origins":[[7.7942295,9.0,0.0],[5.845672125,7.875,0.0],[5.845672125,5.625,0.0],[7.7942295,4.5,0.0],[9.742786875,5.625,0.0],[9.742786875,7.875,0.0],[-13.639901625,-1.125,0.0]],"directions":[[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0]],"vh_list":[[0,42],[1,42],[2,42],[3,42],[4,42],[5,42],[6,42]],"strands":{"indices":[[[[5,36],[39,41]],[[2,20],[21,23],[24,27],[28,38]]],[[[3,20],[21,38]],[[5,18],[19,36],[39,41]]],[[[2,18],[19,32],[39,41]],[[0,34]]],[[[0,20],[21,34]],[[2,15],[16,32],[37,41]]],[[[0,3],[9,15],[16,39]],[[9,20],[21,39]]],[[[9,27],[28,39]],[[0,3],[9,22],[23,39]]],[[],[]]],"properties":[[["#0066cc","#0066cc"],["#16e876","#cc01d1","#000000","#b8056c"]],[["#16e876","#cc01d1"],["#0066cc","#0066cc","#0066cc"]],[["#0066cc","#0066cc","#0066cc"],["#888888"]],[["#cc0000","#888888"],["#0066cc","#0066cc","#0066cc"]],[["#0066cc","#0066cc","#0066cc"],["#cc0000","#888888"]],[["#000000","#b8056c"],["#0066cc","#0066cc","#0066cc"]],[[],[]]]},"insertions":[[0,13,10],[0,29,11],[1,10,1],[2,11,-1],[3,28,-1]],"xovers":[[0,true,36,1,false,36],[0,false,21,1,true,21],[0,false,28,5,true,28],[1,true,20,0,false,20],[1,false,5,0,true,5],[1,false,19,2,true,19],[2,true,18,1,false,18],[2,true,32,3,false,32],[3,true,20,4,false,20],[3,false,2,2,true,2],[3,false,16,4,true,16],[4,true,15,3,false,15],[4,true,39,5,false,39],[4,false,21,3,true,21],[5,true,27,0,false,27],[5,false,9,4,true,9]],"oligos":[{"id_num":5,"idx5p":3,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo5104","color":"#0066cc","length":4,"is_visible":true},{"id_num":1,"idx5p":41,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo8096","color":"#0066cc","length":3,"is_visible":true},{"id_num":0,"idx5p":38,"is_5p_fwd":false,"is_circular":false,"sequence":"  ATCCCTTATAAATCAAAAGACTGAGAGAGTTG","name":"oligo8448","color":"#b8056c","length":34,"is_visible":true},{"id_num":0,"idx5p":23,"is_5p_fwd":false,"is_circular":false,"sequence":"CCCTTCCGAAATCGGCAAA  ","name":"oligo6928","color":"#cc01d1","length":21,"is_visible":true},{"id_num":3,"idx5p":0,"is_5p_fwd":true,"is_circular":false,"sequence":"  GACTCCAACGTCAACCCCAGTTTGAGGGCGA","name":"oligo5280","color":"#cc0000","length":33,"is_visible":true},{"id_num":5,"idx5p":9,"is_5p_fwd":true,"is_circular":false,"sequence":"AAAACCGTCTATCATGGCCATAG","name":"oligo5056","color":"#000000","length":23,"is_visible":true},{"id_num":2,"idx5p":34,"is_5p_fwd":false,"is_circular":false,"sequence":"  TCCTGTTTGATGGTACTATTAAAGAACGTG  ","name":"oligo3616","color":"#888888","length":34,"is_visible":true},{"id_num":0,"idx5p":39,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo9504","color":"#0066cc","length":3,"is_visible":true},{"id_num":5,"idx5p":22,"is_5p_fwd":false,"is_circular":false,"sequence":"TGATAGACGGTTTTTCGCCCTTTGACGTTGGAGTCCACGTTCTTTAATAGTGGACTCTTGTTCCAAACTGGAACAACACTCAACCCTATCTCGGGCTATTCTTTTGATTTATAAGGGATTTTGCCGATTTCGGAACCACCATCAAACAGGATTTTCGCCTGCTGGGGCAAACCAGCGTGGACCGCTTGCTGCAACTCTCTCAGGGCCA","name":"oligo3120","color":"#0066cc","length":208,"is_visible":true},{"id_num":3,"idx5p":41,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo7728","color":"#0066cc","length":5,"is_visible":true},{"id_num":1,"idx5p":3,"is_5p_fwd":true,"is_circular":false,"sequence":"  TTGGAACAAGAGTCCGGGAGATAGGGTTGAGTGTTGTTCCAGT   ","name":"oligo7632","color":"#16e876","length":48,"is_visible":true},{"id_num":2,"idx5p":39,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo6336","color":"#0066cc","length":3,"is_visible":true},{"id_num":4,"idx5p":39,"is_5p_fwd":false,"is_circular":false,"sequence":"CAGCAAGCGGTCCACGCTGGCAGGCGAAAA  ","name":"oligo7376","color":"#888888","length":32,"is_visible":true},{"id_num":4,"idx5p":0,"is_5p_fwd":true,"is_circular":false,"sequence":"TGAT","name":"oligo9536","color":"#0066cc","length":4,"is_visible":true}],"instance_properties":[{"slice:position":[0.0,0.0],"grid:position":[0.0,0.0],"path:position":[0.0,0.0]}],"uuid":"82ed578c79094c379b902a07db3713e9"}],"modifications":{}}
\ No newline at end of file
diff --git a/mrdna/readers/test/test_insert_seq3.json b/mrdna/readers/test/test_insert_seq3.json
new file mode 100644
index 0000000..462575c
--- /dev/null
+++ b/mrdna/readers/test/test_insert_seq3.json
@@ -0,0 +1 @@
+{"format":"3.1","date":"2024-08-13 19:40:10","name":"","parts":[{"name":"NaPart2","color":"#0066cc","is_visible":true,"active_phos":null,"crossover_span_angle":45,"max_vhelix_length":42,"neighbor_active_angle":"","grid_type":2,"virtual_helix_order":[0,1,2,3,4,5,6],"is_lattice":true,"2":0,"virtual_helices":{"name":["vh0","vh1","vh2","vh3","vh4","vh5","vh6"],"is_visible":[true,true,true,true,true,true,true],"color":["#0066cc","#0066cc","#0066cc","#0066cc","#0066cc","#0066cc","#0066cc"],"eulerZ":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],"neighbor_active_angle":[0.0,0.0,0.0,0.0,0.0,0.0,0.0],"neighbors":["[1, 5]","[0, 2]","[1, 3]","[2, 4]","[3, 5]","[0, 4]","[]"],"bases_per_repeat":[21,21,21,21,21,21,21],"turns_per_repeat":[2,2,2,2,2,2,2],"repeat_hint":[2,2,2,2,2,2,2],"helical_pitch":[1.0,1.0,1.0,1.0,1.0,1.0,1.0],"minor_groove_angle":[180.0,180.0,180.0,180.0,180.0,180.0,180.0],"length":[42,42,42,42,42,42,42],"z":[0.0,0.0,0.0,0.0,0.0,0.0,0.0]},"origins":[[7.7942295,9.0,0.0],[5.845672125,7.875,0.0],[5.845672125,5.625,0.0],[7.7942295,4.5,0.0],[9.742786875,5.625,0.0],[9.742786875,7.875,0.0],[-13.639901625,-1.125,0.0]],"directions":[[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0],[0.0,0.0,1.0]],"vh_list":[[0,42],[1,42],[2,42],[3,42],[4,42],[5,42],[6,42]],"strands":{"indices":[[[[5,36],[39,41]],[[2,20],[21,23],[24,27],[28,38]]],[[[3,20],[21,38]],[[5,18],[19,36],[39,41]]],[[[2,18],[19,32],[39,41]],[[0,34]]],[[[0,20],[21,34]],[[2,15],[16,32],[37,41]]],[[[0,3],[9,15],[16,39]],[[9,20],[21,39]]],[[[9,27],[28,39]],[[0,3],[9,22],[23,39]]],[[],[]]],"properties":[[["#0066cc","#0066cc"],["#16e876","#cc01d1","#000000","#b8056c"]],[["#16e876","#cc01d1"],["#0066cc","#0066cc","#0066cc"]],[["#0066cc","#0066cc","#0066cc"],["#888888"]],[["#cc0000","#888888"],["#0066cc","#0066cc","#0066cc"]],[["#0066cc","#0066cc","#0066cc"],["#cc0000","#888888"]],[["#000000","#b8056c"],["#0066cc","#0066cc","#0066cc"]],[[],[]]]},"insertions":[[0,13,10],[0,29,11],[1,10,1],[2,11,-1],[3,28,-1]],"xovers":[[0,true,36,1,false,36],[0,false,21,1,true,21],[0,false,28,5,true,28],[1,true,20,0,false,20],[1,false,5,0,true,5],[1,false,19,2,true,19],[2,true,18,1,false,18],[2,true,32,3,false,32],[3,true,20,4,false,20],[3,false,2,2,true,2],[3,false,16,4,true,16],[4,true,15,3,false,15],[4,true,39,5,false,39],[4,false,21,3,true,21],[5,true,27,0,false,27],[5,false,9,4,true,9]],"oligos":[{"id_num":5,"idx5p":3,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo5104","color":"#0066cc","length":4,"is_visible":true},{"id_num":1,"idx5p":41,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo8096","color":"#0066cc","length":3,"is_visible":true},{"id_num":0,"idx5p":38,"is_5p_fwd":false,"is_circular":false,"sequence":"  ATCCCTTATAAATCAAAAGACTGAGAGAGTTG","name":"oligo8448","color":"#b8056c","length":34,"is_visible":true},{"id_num":0,"idx5p":23,"is_5p_fwd":false,"is_circular":false,"sequence":"CCCTTCCGAAATCGGCAAA  ","name":"oligo6928","color":"#cc01d1","length":21,"is_visible":true},{"id_num":3,"idx5p":0,"is_5p_fwd":true,"is_circular":false,"sequence":"  GACTCCAACGTCAACCCCAGTTTGAGGGCGA","name":"oligo5280","color":"#cc0000","length":33,"is_visible":true},{"id_num":5,"idx5p":9,"is_5p_fwd":true,"is_circular":false,"sequence":"AAAACCGTCTATCATGGCCATAG","name":"oligo5056","color":"#000000","length":23,"is_visible":true},{"id_num":2,"idx5p":34,"is_5p_fwd":false,"is_circular":false,"sequence":"  TCCTGTTTGATGGTACTATTAAAGAACGTG  ","name":"oligo3616","color":"#888888","length":34,"is_visible":true},{"id_num":0,"idx5p":39,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo9504","color":"#0066cc","length":3,"is_visible":true},{"id_num":5,"idx5p":22,"is_5p_fwd":false,"is_circular":false,"sequence":"TGATAGACGGTTTTTCGCCCTTTGACGTTGGAGTCCACGTTCTTTAATAGTGGACTCTTGTTCCAAACTGGAACAACACTCAACCCTATCTCGGGCTATTCTTTTGATTTATAAGGGATTTTGCCGATTTCGGAACCACCATCAAACAGGATTTTCGCCTGCTGGGGCAAACCAGCGTGGACCGCTTGCTGCAACTCTCTCAGGGCCA","name":"oligo3120","color":"#0066cc","length":208,"is_visible":true},{"id_num":3,"idx5p":41,"is_5p_fwd":false,"is_circular":false,"sequence":null,"name":"oligo7728","color":"#0066cc","length":5,"is_visible":true},{"id_num":1,"idx5p":3,"is_5p_fwd":true,"is_circular":false,"sequence":"  TTGGAACAAGAGTCCGGGAGATAGGGTTGAGTGTTGTTCCAGT   ","name":"oligo7632","color":"#16e876","length":48,"is_visible":true},{"id_num":2,"idx5p":39,"is_5p_fwd":true,"is_circular":false,"sequence":null,"name":"oligo6336","color":"#0066cc","length":3,"is_visible":true},{"id_num":4,"idx5p":39,"is_5p_fwd":false,"is_circular":false,"sequence":"CAGCAAGCGGTCCACGCTGGCAGGCGAAAA  ","name":"oligo7376","color":"#888888","length":32,"is_visible":true},{"id_num":4,"idx5p":0,"is_5p_fwd":true,"is_circular":false,"sequence":"TGAT","name":"oligo9536","color":"#0066cc","length":4,"is_visible":true}],"instance_properties":[{"slice:position":[0.0,0.0],"grid:position":[0.0,0.0],"path:position":[0.0,0.0]}],"uuid":"82ed578c79094c379b902a07db3713e9"}],"modifications":{}}
\ No newline at end of file
-- 
GitLab