diff --git a/mrdna/readers/.DS_Store b/mrdna/readers/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..ca5d0e6e71945129431efcf086d0e96e397046d8
Binary files /dev/null and b/mrdna/readers/.DS_Store differ
diff --git a/mrdna/readers/segmentmodel_from_cadnano.py b/mrdna/readers/segmentmodel_from_cadnano.py
index 23b78e9dbbf1c46a3d9f93985d80b4bb528d96f1..7021722e887437e5cdae7c3004e405fe0a47530d 100644
--- a/mrdna/readers/segmentmodel_from_cadnano.py
+++ b/mrdna/readers/segmentmodel_from_cadnano.py
@@ -204,7 +204,7 @@ def gen_prop_table(part):
 
     return nt_prop
 
-def mrdna_model_from_cadnano(json_file,seq=None,return_nt=True,**model_parameters):
+def mrdna_model_from_cadnano(json_file,seq=None,**model_parameters):
     part=read_json_file(json_file)
     
     nt_prop=gen_prop_table(part)
@@ -222,7 +222,5 @@ def mrdna_model_from_cadnano(json_file,seq=None,return_nt=True,**model_parameter
     stack=np.array((list(nt_prop["stack"])))
     orientation=np.array(list(nt_prop["orientation"]))
     model = model_from_basepair_stack_3prime( r, bp, stack, three_prime, seq, orientation, **model_parameters )
-    if return_nt==True:
-        return model,nt_prop
-    else:
-        return model
+    model._dataframe=nt_prop
+    return model
diff --git a/mrdna/readers/segmentmodel_from_oxdna_pinyi.py b/mrdna/readers/segmentmodel_from_oxdna_pinyi.py
index ebf52f2e2e8fb5831f3dfa271fd4a32fcc7568de..564065882e7bcc745f4c93a5b9a2a24789bba3dc 100644
--- a/mrdna/readers/segmentmodel_from_oxdna_pinyi.py
+++ b/mrdna/readers/segmentmodel_from_oxdna_pinyi.py
@@ -198,10 +198,8 @@ def mrdna_model_from_oxdna(coordinate_file, topology_file,virt2nuc=None,get_nt_p
     
     simulate( model, output_name='test', directory='test4' )
     """
-    if get_nt_prop is True:
-        return nt_prop,model
-    else:
-        return model
+    model._dataframe=nt_prop
+    return model
 
 if __name__ == "__main__":
     mrdna_model_from_oxdna("0-from-collab/nanopore.oxdna","0-from-collab/nanopore.top")
diff --git a/mrdna/readers/segmentmodel_from_scadnano.py b/mrdna/readers/segmentmodel_from_scadnano.py
new file mode 100644
index 0000000000000000000000000000000000000000..71c70b81cbae68978857b6c88ca05ac6ad2d4265
--- /dev/null
+++ b/mrdna/readers/segmentmodel_from_scadnano.py
@@ -0,0 +1,145 @@
+# -*- coding: utf-8 -*-
+import numpy as np
+import os,sys
+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
+import scadnano as sc
+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
+import pdb
+
+
+
+## TODO: separate SegmentModel from ArbdModel so multiple parts can be combined
+## TODO: catch circular strands in "get_5prime" cadnano calls
+## TODO: handle special motifs
+##   - doubly-nicked helices
+##   - 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 gen_id_series(domain,design):
+    df=pd.DataFrame(columns=["vh","zid","fwd","r"],index=range(domain.dna_length()),dtype=object)
+    df["loopout"]=False
+    hid=domain.helix
+    df["vh"]=hid
+    fwd=domain.forward
+    df["fwd"]=fwd
+    x=design.helices[domain.helix].calculate_position(design.grid,design.geometry).x*10
+    y=design.helices[domain.helix].calculate_position(design.grid,design.geometry).y*10     
+    start=domain.start
+    end=domain.end
+    dels=domain.deletions
+    loops=domain.insertions
+    zids=[i for i in range(start,end)]
+    if len(dels)>0:
+        for d in dels:
+            zids.pop(zids.index(d))
+    if len(loops)>0:
+        for ind,ins in loops:
+            n=zids.index(ind)
+            zids.pop(n)
+            loop=[ind+round((j/(ins+1))*100)/100 for j in range(ins+1)]
+            loop.reverse()
+            for j in loop:
+                zids.insert(n,j)
+    df["zid"]=zids
+    if fwd==True:
+        start5=domain.start
+        end3=domain.end
+        df["zid"]=zids
+    else:
+        start5=domain.end
+        end3=domain.start
+        df["zid"]=zids[::-1]
+    df["x"]=x
+    df["y"]=y
+    df["z"]=df["zid"]*3.4
+    df["orientation_angle"]=[design.helices[hid].backbone_angle_at_offset(float(i),fwd,design.geometry) for i in df["zid"]]
+    df["stacked"]=[True]*(domain.dna_length()-1)+[False]
+    return [pd.Series(df.loc[i]) for i in df.index],(x,y,list(df["z"])[-1])
+
+
+def gen_strand(strand,design,group_index=0):
+    domain_list=[]
+    for do in strand.domains:
+        
+        if type(do) is sc.scadnano.Domain:
+            L,(x,y,z)=gen_id_series(do,design)
+            if len(domain_list)>2:
+                if type(domain_list[-1]) is pd.DataFrame:
+                    loop=domain_list.pop(-1)
+                    inds=loop.index
+                    loop["x"]=lx+(x-lx)*(loop.index+1)/(len(loop.index)+2)
+                    loop["y"]=ly+(y-ly)*(loop.index+1)/(len(loop.index)+2)
+                    loop["z"]=lz+(L[0]["z"]-lz)*(loop.index+1)/(len(loop.index)+2)
+                    loop["orientation_angle"]=0
+                    L=[pd.Series(loop.loc[i]) for i in loop.index]+L
+            domain_list=domain_list+L        
+        elif type(do) is sc.scadnano.Loopout:
+            n=pd.DataFrame(columns=["loopout","x","y","z"],index=range(do.dna_length()),dtype=object)
+            n["loopout"]=True
+            n["stacked"]=False
+            lx,ly,lz=(x,y,z)
+            loop_out_length=do.dna_length()
+            domain_list.append(n)
+                
+    strand_df=pd.DataFrame(domain_list).reset_index(drop=True)
+    strand_df["threeprime"]=list(strand_df.index[1:]+group_index)+[-1]
+    stack=np.where(strand_df["stacked"],strand_df["threeprime"],-1)
+    strand_df["stack"]=stack
+    if len(strand.dna_sequence)==len(strand_df.index):
+        strand_df["seq"]=list(strand.dna_sequence)
+    else:
+        strand_df["seq"]=-1
+    strand_df["index"]=strand_df.index+group_index
+    #strand_df["seg_index"]=index
+    return strand_df
+
+def gen_prop_table(fname):
+    sc_design=sc.Design.from_scadnano_file(fname)
+    nt_list=[]
+    group_index=0
+    for i in range(len(sc_design.strands)):
+        dfi=gen_strand(sc_design.strands[i],sc_design,group_index)
+        group_index+=len(dfi.index)
+        nt_list.append(dfi)
+
+    nt_prop=pd.concat(nt_list)
+    nt_prop.set_index("index",inplace=True)
+    ## Generate bps
+    bp_map={}
+    for i in nt_prop.index:
+        if nt_prop["loopout"][i]==False:
+            bp_map[(nt_prop["vh"][i],nt_prop["zid"][i],nt_prop["fwd"][i])]=i
+    ind_tuple=list(zip(nt_prop.index,nt_prop["vh"],nt_prop["zid"],nt_prop["fwd"]))
+    bp=-np.ones(len(nt_prop.index),dtype=int)
+    for i,j,k,l in ind_tuple:
+        try:
+            bp[i]=bp_map[(j,k,not(l))]
+        except:
+            continue
+    nt_prop["bp"]=bp
+    nt_prop["r"]=list(np.array([nt_prop["x"],nt_prop["y"],nt_prop["z"]],dtype="<f4").T)
+    return nt_prop
+
+def mrdna_model_from_scadnano(sc_file,seq=None,**model_parameters):
+    
+    nt_prop=gen_prop_table(sc_file)
+    
+    r=np.array(list(nt_prop['r']))
+    bp=np.array(list(nt_prop['bp']))
+    three_prime=np.array((list(nt_prop["threeprime"])))
+    stack=np.array((list(nt_prop["stack"])))
+    if nt_prop["seq"][0]==-1:
+        seq=None
+    else:
+        seq=nt_prop["seq"]
+    orientation=[rotationAboutAxis(np.array((0,0,1)),i) for i in list(nt_prop["orientation_angle"])]
+    model = model_from_basepair_stack_3prime( r, bp, stack, three_prime, seq, orientation, **model_parameters )
+    model._dataframe=nt_prop
+    return model
diff --git a/mrdna/readers/test/loopout.csv b/mrdna/readers/test/loopout.csv
new file mode 100644
index 0000000000000000000000000000000000000000..ac096e7ca80778dd8fd5cc5889e5c17bf26f5edb
--- /dev/null
+++ b/mrdna/readers/test/loopout.csv
@@ -0,0 +1,456 @@
+index,vh,zid,fwd,r,loopout,x,y,z,orientation_angle,stacked,threeprime,stack,seq,bp
+0,5,22.0,False,[441.67294 555.       74.8    ],False,441.6729559300637,555.0,74.8,184.28571428571422,True,1,1,-1,293
+1,5,21.0,False,[441.67294 555.       71.4    ],False,441.6729559300637,555.0,71.39999999999999,150.0,True,2,2,-1,292
+2,5,20.0,False,[441.67294 555.       68.     ],False,441.6729559300637,555.0,68.0,115.71428571428567,True,3,3,-1,291
+3,5,19.0,False,[441.67294 555.       64.6    ],False,441.6729559300637,555.0,64.6,81.42857142857144,True,4,4,-1,290
+4,5,18.0,False,[441.67294 555.       61.2    ],False,441.6729559300637,555.0,61.199999999999996,47.14285714285711,True,5,5,-1,289
+5,5,17.0,False,[441.67294 555.       57.8    ],False,441.6729559300637,555.0,57.8,12.85714285714289,True,6,6,-1,288
+6,5,16.0,False,[441.67294 555.       54.4    ],False,441.6729559300637,555.0,54.4,338.57142857142856,True,7,7,-1,287
+7,5,15.0,False,[441.67294 555.       51.     ],False,441.6729559300637,555.0,51.0,304.2857142857142,True,8,8,-1,286
+8,5,14.0,False,[441.67294 555.       47.6    ],False,441.6729559300637,555.0,47.6,270.0,True,9,9,-1,285
+9,5,13.0,False,[441.67294 555.       44.2    ],False,441.6729559300637,555.0,44.199999999999996,235.71428571428578,True,10,10,-1,284
+10,5,12.0,False,[441.67294 555.       40.8    ],False,441.6729559300637,555.0,40.8,201.42857142857144,True,11,11,-1,283
+11,5,11.0,False,[441.67294 555.       37.4    ],False,441.6729559300637,555.0,37.4,167.1428571428571,True,12,12,-1,282
+12,5,10.0,False,[441.67294 555.       34.     ],False,441.6729559300637,555.0,34.0,132.85714285714283,True,13,13,-1,281
+13,5,9.0,False,[441.67294 555.       30.6    ],False,441.6729559300637,555.0,30.599999999999998,98.57142857142856,False,14,-1,-1,280
+14,4,9.0,True,[441.67294 585.       30.6    ],False,441.6729559300637,585.0,30.599999999999998,308.57142857142856,True,15,15,-1,414
+15,4,10.0,True,[441.67294 585.       34.     ],False,441.6729559300637,585.0,34.0,342.85714285714283,True,16,16,-1,413
+16,4,11.0,True,[441.67294 585.       37.4    ],False,441.6729559300637,585.0,37.4,17.14285714285711,True,17,17,-1,412
+17,4,12.0,True,[441.67294 585.       40.8    ],False,441.6729559300637,585.0,40.8,51.428571428571445,True,18,18,-1,411
+18,4,13.0,True,[441.67294 585.       44.2    ],False,441.6729559300637,585.0,44.199999999999996,85.71428571428572,True,19,19,-1,410
+19,4,14.0,True,[441.67294 585.       47.6    ],False,441.6729559300637,585.0,47.6,120.0,True,20,20,-1,409
+20,4,15.0,True,[441.67294 585.       51.     ],False,441.6729559300637,585.0,51.0,154.28571428571422,False,21,-1,-1,408
+21,3,15.0,False,[415.6922 600.      51.    ],False,415.69219381653056,600.0,51.0,304.2857142857142,True,22,22,-1,397
+22,3,14.0,False,[415.6922 600.      47.6   ],False,415.69219381653056,600.0,47.6,270.0,True,23,23,-1,396
+23,3,13.0,False,[415.6922 600.      44.2   ],False,415.69219381653056,600.0,44.199999999999996,235.71428571428578,True,24,24,-1,395
+24,3,12.0,False,[415.6922 600.      40.8   ],False,415.69219381653056,600.0,40.8,201.42857142857144,True,25,25,-1,394
+25,3,11.0,False,[415.6922 600.      37.4   ],False,415.69219381653056,600.0,37.4,167.1428571428571,True,26,26,-1,393
+26,3,10.0,False,[415.6922 600.      34.    ],False,415.69219381653056,600.0,34.0,132.85714285714283,True,27,27,-1,392
+27,3,9.0,False,[415.6922 600.      30.6   ],False,415.69219381653056,600.0,30.599999999999998,98.57142857142856,True,28,28,-1,391
+28,3,8.0,False,[415.6922 600.      27.2   ],False,415.69219381653056,600.0,27.2,64.28571428571428,True,29,29,-1,390
+29,3,7.0,False,[415.6922 600.      23.8   ],False,415.69219381653056,600.0,23.8,30.0,True,30,30,-1,389
+30,3,6.0,False,[415.6922 600.      20.4   ],False,415.69219381653056,600.0,20.4,355.7142857142857,True,31,31,-1,388
+31,3,5.0,False,[415.6922 600.      17.    ],False,415.69219381653056,600.0,17.0,321.42857142857144,True,32,32,-1,387
+32,3,4.0,False,[415.6922 600.      13.6   ],False,415.69219381653056,600.0,13.6,287.1428571428571,True,33,33,-1,386
+33,3,3.0,False,[415.6922 600.      10.2   ],False,415.69219381653056,600.0,10.2,252.85714285714286,True,34,34,-1,385
+34,3,2.0,False,[415.6922 600.       6.8   ],False,415.69219381653056,600.0,6.8,218.57142857142856,False,35,-1,-1,384
+35,2,2.0,True,[389.71143 585.        6.8    ],False,389.71143170299734,585.0,6.8,68.57142857142857,True,36,36,-1,374
+36,2,3.0,True,[389.71143 585.       10.2    ],False,389.71143170299734,585.0,10.2,102.85714285714286,True,37,37,-1,373
+37,2,4.0,True,[389.71143 585.       13.6    ],False,389.71143170299734,585.0,13.6,137.14285714285714,True,38,38,-1,372
+38,2,5.0,True,[389.71143 585.       17.     ],False,389.71143170299734,585.0,17.0,171.42857142857142,True,39,39,-1,371
+39,2,6.0,True,[389.71143 585.       20.4    ],False,389.71143170299734,585.0,20.4,205.71428571428572,True,40,40,-1,370
+40,2,7.0,True,[389.71143 585.       23.8    ],False,389.71143170299734,585.0,23.8,240.0,True,41,41,-1,369
+41,2,8.0,True,[389.71143 585.       27.2    ],False,389.71143170299734,585.0,27.2,274.2857142857143,True,42,42,-1,368
+42,2,9.0,True,[389.71143 585.       30.6    ],False,389.71143170299734,585.0,30.599999999999998,308.57142857142856,True,43,43,-1,367
+43,2,10.0,True,[389.71143 585.       34.     ],False,389.71143170299734,585.0,34.0,342.85714285714283,True,44,44,-1,366
+44,2,12.0,True,[389.71143 585.       40.8    ],False,389.71143170299734,585.0,40.8,51.428571428571445,True,45,45,-1,365
+45,2,13.0,True,[389.71143 585.       44.2    ],False,389.71143170299734,585.0,44.199999999999996,85.71428571428572,True,46,46,-1,364
+46,2,14.0,True,[389.71143 585.       47.6    ],False,389.71143170299734,585.0,47.6,120.0,True,47,47,-1,363
+47,2,15.0,True,[389.71143 585.       51.     ],False,389.71143170299734,585.0,51.0,154.28571428571422,True,48,48,-1,362
+48,2,16.0,True,[389.71143 585.       54.4    ],False,389.71143170299734,585.0,54.4,188.57142857142856,True,49,49,-1,361
+49,2,17.0,True,[389.71143 585.       57.8    ],False,389.71143170299734,585.0,57.8,222.8571428571429,True,50,50,-1,360
+50,2,18.0,True,[389.71143 585.       61.2    ],False,389.71143170299734,585.0,61.199999999999996,257.1428571428571,False,51,-1,-1,359
+51,1,18.0,False,[389.71143 555.       61.2    ],False,389.71143170299734,555.0,61.199999999999996,47.14285714285711,True,52,52,-1,227
+52,1,17.0,False,[389.71143 555.       57.8    ],False,389.71143170299734,555.0,57.8,12.85714285714289,True,53,53,-1,226
+53,1,16.0,False,[389.71143 555.       54.4    ],False,389.71143170299734,555.0,54.4,338.57142857142856,True,54,54,-1,225
+54,1,15.0,False,[389.71143 555.       51.     ],False,389.71143170299734,555.0,51.0,304.2857142857142,True,55,55,-1,224
+55,1,14.0,False,[389.71143 555.       47.6    ],False,389.71143170299734,555.0,47.6,270.0,True,56,56,-1,223
+56,1,13.0,False,[389.71143 555.       44.2    ],False,389.71143170299734,555.0,44.199999999999996,235.71428571428578,True,57,57,-1,222
+57,1,12.0,False,[389.71143 555.       40.8    ],False,389.71143170299734,555.0,40.8,201.42857142857144,True,58,58,-1,221
+58,1,11.0,False,[389.71143 555.       37.4    ],False,389.71143170299734,555.0,37.4,167.1428571428571,True,59,59,-1,220
+59,1,10.5,False,[389.71143 555.       35.7    ],False,389.71143170299734,555.0,35.699999999999996,150.0,True,60,60,-1,219
+60,1,10.0,False,[389.71143 555.       34.     ],False,389.71143170299734,555.0,34.0,132.85714285714283,True,61,61,-1,218
+61,1,9.0,False,[389.71143 555.       30.6    ],False,389.71143170299734,555.0,30.599999999999998,98.57142857142856,True,62,62,-1,217
+62,1,8.0,False,[389.71143 555.       27.2    ],False,389.71143170299734,555.0,27.2,64.28571428571428,True,63,63,-1,216
+63,1,7.0,False,[389.71143 555.       23.8    ],False,389.71143170299734,555.0,23.8,30.0,True,64,64,-1,215
+64,1,6.0,False,[389.71143 555.       20.4    ],False,389.71143170299734,555.0,20.4,355.7142857142857,True,65,65,-1,214
+65,1,5.0,False,[389.71143 555.       17.     ],False,389.71143170299734,555.0,17.0,321.42857142857144,False,66,-1,-1,213
+66,0,5.0,True,[415.6922 540.      17.    ],False,415.69219381653056,540.0,17.0,171.42857142857142,True,67,67,-1,255
+67,0,6.0,True,[415.6922 540.      20.4   ],False,415.69219381653056,540.0,20.4,205.71428571428572,True,68,68,-1,254
+68,0,7.0,True,[415.6922 540.      23.8   ],False,415.69219381653056,540.0,23.8,240.0,True,69,69,-1,253
+69,0,8.0,True,[415.6922 540.      27.2   ],False,415.69219381653056,540.0,27.2,274.2857142857143,True,70,70,-1,252
+70,0,9.0,True,[415.6922 540.      30.6   ],False,415.69219381653056,540.0,30.599999999999998,308.57142857142856,True,71,71,-1,251
+71,0,10.0,True,[415.6922 540.      34.    ],False,415.69219381653056,540.0,34.0,342.85714285714283,True,72,72,-1,250
+72,0,11.0,True,[415.6922 540.      37.4   ],False,415.69219381653056,540.0,37.4,17.14285714285711,True,73,73,-1,249
+73,0,12.0,True,[415.6922 540.      40.8   ],False,415.69219381653056,540.0,40.8,51.428571428571445,True,74,74,-1,248
+74,0,13.0,True,[415.6922 540.      44.2   ],False,415.69219381653056,540.0,44.199999999999996,85.71428571428572,True,75,75,-1,247
+75,0,13.09,True,[415.6922 540.      44.506 ],False,415.69219381653056,540.0,44.506,88.79999999999995,True,76,76,-1,246
+76,0,13.18,True,[415.6922 540.      44.812 ],False,415.69219381653056,540.0,44.812,91.88571428571424,True,77,77,-1,245
+77,0,13.27,True,[415.6922 540.      45.118 ],False,415.69219381653056,540.0,45.117999999999995,94.97142857142853,True,78,78,-1,244
+78,0,13.36,True,[415.6922 540.      45.424 ],False,415.69219381653056,540.0,45.424,98.05714285714282,True,79,79,-1,243
+79,0,13.45,True,[415.6922 540.      45.73  ],False,415.69219381653056,540.0,45.73,101.14285714285711,True,80,80,-1,242
+80,0,13.55,True,[415.6922 540.      46.07  ],False,415.69219381653056,540.0,46.07,104.57142857142856,True,81,81,-1,241
+81,0,13.64,True,[415.6922 540.      46.376 ],False,415.69219381653056,540.0,46.376,107.65714285714284,True,82,82,-1,240
+82,0,13.73,True,[415.6922 540.      46.682 ],False,415.69219381653056,540.0,46.682,110.74285714285713,True,83,83,-1,239
+83,0,13.82,True,[415.6922 540.      46.988 ],False,415.69219381653056,540.0,46.988,113.82857142857142,True,84,84,-1,238
+84,0,13.91,True,[415.6922 540.      47.294 ],False,415.69219381653056,540.0,47.294,116.91428571428571,True,85,85,-1,237
+85,0,14.0,True,[415.6922 540.      47.6   ],False,415.69219381653056,540.0,47.6,120.0,True,86,86,-1,236
+86,0,15.0,True,[415.6922 540.      51.    ],False,415.69219381653056,540.0,51.0,154.28571428571422,True,87,87,-1,235
+87,0,16.0,True,[415.6922 540.      54.4   ],False,415.69219381653056,540.0,54.4,188.57142857142856,True,88,88,-1,234
+88,0,17.0,True,[415.6922 540.      57.8   ],False,415.69219381653056,540.0,57.8,222.8571428571429,True,89,89,-1,233
+89,0,18.0,True,[415.6922 540.      61.2   ],False,415.69219381653056,540.0,61.199999999999996,257.1428571428571,True,90,90,-1,232
+90,0,19.0,True,[415.6922 540.      64.6   ],False,415.69219381653056,540.0,64.6,291.42857142857144,True,91,91,-1,231
+91,0,20.0,True,[415.6922 540.      68.    ],False,415.69219381653056,540.0,68.0,325.71428571428567,True,92,92,-1,230
+92,0,21.0,True,[415.6922 540.      71.4   ],False,415.69219381653056,540.0,71.39999999999999,0.0,True,93,93,-1,261
+93,0,22.0,True,[415.6922 540.      74.8   ],False,415.69219381653056,540.0,74.8,34.28571428571422,True,94,94,-1,260
+94,0,23.0,True,[415.6922 540.      78.2   ],False,415.69219381653056,540.0,78.2,68.57142857142856,True,95,95,-1,259
+95,0,24.0,True,[415.6922 540.      81.6   ],False,415.69219381653056,540.0,81.6,102.85714285714289,True,96,96,-1,302
+96,0,25.0,True,[415.6922 540.      85.    ],False,415.69219381653056,540.0,85.0,137.1428571428571,True,97,97,-1,301
+97,0,26.0,True,[415.6922 540.      88.4   ],False,415.69219381653056,540.0,88.39999999999999,171.42857142857144,True,98,98,-1,300
+98,0,27.0,True,[415.6922 540.      91.8   ],False,415.69219381653056,540.0,91.8,205.71428571428567,True,99,99,-1,299
+99,0,28.0,True,[415.6922 540.      95.2   ],False,415.69219381653056,540.0,95.2,240.0,True,100,100,-1,324
+100,0,29.0,True,[415.6922 540.      98.6   ],False,415.69219381653056,540.0,98.6,274.2857142857142,True,101,101,-1,323
+101,0,29.08,True,[415.6922 540.      98.872 ],False,415.69219381653056,540.0,98.87199999999999,277.02857142857135,True,102,102,-1,322
+102,0,29.17,True,[415.6922 540.      99.178 ],False,415.69219381653056,540.0,99.178,280.11428571428576,True,103,103,-1,321
+103,0,29.25,True,[415.6922 540.      99.45  ],False,415.69219381653056,540.0,99.45,282.8571428571428,True,104,104,-1,320
+104,0,29.33,True,[415.6922 540.      99.722 ],False,415.69219381653056,540.0,99.722,285.5999999999999,True,105,105,-1,319
+105,0,29.42,True,[415.6922 540.     100.028 ],False,415.69219381653056,540.0,100.028,288.6857142857143,True,106,106,-1,318
+106,0,29.5,True,[415.6922 540.     100.3   ],False,415.69219381653056,540.0,100.3,291.42857142857144,True,107,107,-1,317
+107,0,29.58,True,[415.6922 540.     100.572 ],False,415.69219381653056,540.0,100.57199999999999,294.17142857142846,True,108,108,-1,316
+108,0,29.67,True,[415.6922 540.     100.878 ],False,415.69219381653056,540.0,100.878,297.25714285714287,True,109,109,-1,315
+109,0,29.75,True,[415.6922 540.     101.15  ],False,415.69219381653056,540.0,101.14999999999999,300.0,True,110,110,-1,314
+110,0,29.83,True,[415.6922 540.     101.422 ],False,415.69219381653056,540.0,101.422,302.742857142857,True,111,111,-1,313
+111,0,29.92,True,[415.6922 540.     101.728 ],False,415.69219381653056,540.0,101.72800000000001,305.8285714285714,True,112,112,-1,312
+112,0,30.0,True,[415.6922 540.     102.    ],False,415.69219381653056,540.0,102.0,308.57142857142844,True,113,113,-1,311
+113,0,31.0,True,[415.6922 540.     105.4   ],False,415.69219381653056,540.0,105.39999999999999,342.8571428571429,True,114,114,-1,310
+114,0,32.0,True,[415.6922 540.     108.8   ],False,415.69219381653056,540.0,108.8,17.14285714285711,True,115,115,-1,309
+115,0,33.0,True,[415.6922 540.     112.2   ],False,415.69219381653056,540.0,112.2,51.42857142857133,True,116,116,-1,308
+116,0,34.0,True,[415.6922 540.     115.6   ],False,415.69219381653056,540.0,115.6,85.71428571428578,True,117,117,-1,307
+117,0,35.0,True,[415.6922 540.     119.    ],False,415.69219381653056,540.0,119.0,120.0,True,118,118,-1,306
+118,0,36.0,True,[415.6922 540.     122.4   ],False,415.69219381653056,540.0,122.39999999999999,154.28571428571422,False,119,-1,-1,305
+119,1,36.0,False,[389.71143 555.      122.4    ],False,389.71143170299734,555.0,122.39999999999999,304.2857142857142,True,120,120,-1,277
+120,1,35.0,False,[389.71143 555.      119.     ],False,389.71143170299734,555.0,119.0,270.0,True,121,121,-1,276
+121,1,34.0,False,[389.71143 555.      115.6    ],False,389.71143170299734,555.0,115.6,235.71428571428578,True,122,122,-1,275
+122,1,33.0,False,[389.71143 555.      112.2    ],False,389.71143170299734,555.0,112.2,201.42857142857133,True,123,123,-1,274
+123,1,32.0,False,[389.71143 555.      108.8    ],False,389.71143170299734,555.0,108.8,167.1428571428571,True,124,124,-1,273
+124,1,31.0,False,[389.71143 555.      105.4    ],False,389.71143170299734,555.0,105.39999999999999,132.8571428571429,True,125,125,-1,272
+125,1,30.0,False,[389.71143 555.      102.     ],False,389.71143170299734,555.0,102.0,98.57142857142844,True,126,126,-1,271
+126,1,29.0,False,[389.71143 555.       98.6    ],False,389.71143170299734,555.0,98.6,64.28571428571422,True,127,127,-1,270
+127,1,28.0,False,[389.71143 555.       95.2    ],False,389.71143170299734,555.0,95.2,30.0,True,128,128,-1,269
+128,1,27.0,False,[389.71143 555.       91.8    ],False,389.71143170299734,555.0,91.8,355.7142857142858,True,129,129,-1,268
+129,1,26.0,False,[389.71143 555.       88.4    ],False,389.71143170299734,555.0,88.39999999999999,321.42857142857156,True,130,130,-1,267
+130,1,25.0,False,[389.71143 555.       85.     ],False,389.71143170299734,555.0,85.0,287.1428571428571,True,131,131,-1,266
+131,1,24.0,False,[389.71143 555.       81.6    ],False,389.71143170299734,555.0,81.6,252.8571428571429,True,132,132,-1,265
+132,1,23.0,False,[389.71143 555.       78.2    ],False,389.71143170299734,555.0,78.2,218.57142857142856,True,133,133,-1,264
+133,1,22.0,False,[389.71143 555.       74.8    ],False,389.71143170299734,555.0,74.8,184.28571428571422,True,134,134,-1,263
+134,1,21.0,False,[389.71143 555.       71.4    ],False,389.71143170299734,555.0,71.39999999999999,150.0,True,135,135,-1,262
+135,1,20.0,False,[389.71143 555.       68.     ],False,389.71143170299734,555.0,68.0,115.71428571428567,True,136,136,-1,229
+136,1,19.0,False,[389.71143 555.       64.6    ],False,389.71143170299734,555.0,64.6,81.42857142857144,False,137,-1,-1,228
+137,2,19.0,True,[389.71143 585.       64.6    ],False,389.71143170299734,585.0,64.6,291.42857142857144,True,138,138,-1,358
+138,2,20.0,True,[389.71143 585.       68.     ],False,389.71143170299734,585.0,68.0,325.71428571428567,True,139,139,-1,357
+139,2,21.0,True,[389.71143 585.       71.4    ],False,389.71143170299734,585.0,71.39999999999999,0.0,True,140,140,-1,356
+140,2,22.0,True,[389.71143 585.       74.8    ],False,389.71143170299734,585.0,74.8,34.28571428571422,True,141,141,-1,355
+141,2,23.0,True,[389.71143 585.       78.2    ],False,389.71143170299734,585.0,78.2,68.57142857142856,True,142,142,-1,354
+142,2,24.0,True,[389.71143 585.       81.6    ],False,389.71143170299734,585.0,81.6,102.85714285714289,True,143,143,-1,353
+143,2,25.0,True,[389.71143 585.       85.     ],False,389.71143170299734,585.0,85.0,137.1428571428571,True,144,144,-1,352
+144,2,26.0,True,[389.71143 585.       88.4    ],False,389.71143170299734,585.0,88.39999999999999,171.42857142857144,True,145,145,-1,351
+145,2,27.0,True,[389.71143 585.       91.8    ],False,389.71143170299734,585.0,91.8,205.71428571428567,True,146,146,-1,350
+146,2,28.0,True,[389.71143 585.       95.2    ],False,389.71143170299734,585.0,95.2,240.0,True,147,147,-1,349
+147,2,29.0,True,[389.71143 585.       98.6    ],False,389.71143170299734,585.0,98.6,274.2857142857142,True,148,148,-1,348
+148,2,30.0,True,[389.71143 585.      102.     ],False,389.71143170299734,585.0,102.0,308.57142857142844,True,149,149,-1,347
+149,2,31.0,True,[389.71143 585.      105.4    ],False,389.71143170299734,585.0,105.39999999999999,342.8571428571429,True,150,150,-1,346
+150,2,32.0,True,[389.71143 585.      108.8    ],False,389.71143170299734,585.0,108.8,17.14285714285711,False,151,-1,-1,345
+151,3,32.0,False,[415.6922 600.     108.8   ],False,415.69219381653056,600.0,108.8,167.1428571428571,True,152,152,-1,444
+152,3,31.0,False,[415.6922 600.     105.4   ],False,415.69219381653056,600.0,105.39999999999999,132.8571428571429,True,153,153,-1,443
+153,3,30.0,False,[415.6922 600.     102.    ],False,415.69219381653056,600.0,102.0,98.57142857142844,True,154,154,-1,442
+154,3,29.0,False,[415.6922 600.      98.6   ],False,415.69219381653056,600.0,98.6,64.28571428571422,True,155,155,-1,441
+155,3,27.0,False,[415.6922 600.      91.8   ],False,415.69219381653056,600.0,91.8,355.7142857142858,True,156,156,-1,440
+156,3,26.0,False,[415.6922 600.      88.4   ],False,415.69219381653056,600.0,88.39999999999999,321.42857142857156,True,157,157,-1,439
+157,3,25.0,False,[415.6922 600.      85.    ],False,415.69219381653056,600.0,85.0,287.1428571428571,True,158,158,-1,438
+158,3,24.0,False,[415.6922 600.      81.6   ],False,415.69219381653056,600.0,81.6,252.8571428571429,True,159,159,-1,437
+159,3,23.0,False,[415.6922 600.      78.2   ],False,415.69219381653056,600.0,78.2,218.57142857142856,True,160,160,-1,436
+160,3,22.0,False,[415.6922 600.      74.8   ],False,415.69219381653056,600.0,74.8,184.28571428571422,True,161,161,-1,435
+161,3,21.0,False,[415.6922 600.      71.4   ],False,415.69219381653056,600.0,71.39999999999999,150.0,True,162,162,-1,434
+162,3,20.0,False,[415.6922 600.      68.    ],False,415.69219381653056,600.0,68.0,115.71428571428567,True,163,163,-1,402
+163,3,19.0,False,[415.6922 600.      64.6   ],False,415.69219381653056,600.0,64.6,81.42857142857144,True,164,164,-1,401
+164,3,18.0,False,[415.6922 600.      61.2   ],False,415.69219381653056,600.0,61.199999999999996,47.14285714285711,True,165,165,-1,400
+165,3,17.0,False,[415.6922 600.      57.8   ],False,415.69219381653056,600.0,57.8,12.85714285714289,True,166,166,-1,399
+166,3,16.0,False,[415.6922 600.      54.4   ],False,415.69219381653056,600.0,54.4,338.57142857142856,False,167,-1,-1,398
+167,4,16.0,True,[441.67294 585.       54.4    ],False,441.6729559300637,585.0,54.4,188.57142857142856,True,168,168,-1,407
+168,4,17.0,True,[441.67294 585.       57.8    ],False,441.6729559300637,585.0,57.8,222.8571428571429,True,169,169,-1,406
+169,4,18.0,True,[441.67294 585.       61.2    ],False,441.6729559300637,585.0,61.199999999999996,257.1428571428571,True,170,170,-1,405
+170,4,19.0,True,[441.67294 585.       64.6    ],False,441.6729559300637,585.0,64.6,291.42857142857144,True,171,171,-1,404
+171,4,20.0,True,[441.67294 585.       68.     ],False,441.6729559300637,585.0,68.0,325.71428571428567,True,172,172,-1,403
+172,4,21.0,True,[441.67294 585.       71.4    ],False,441.6729559300637,585.0,71.39999999999999,0.0,True,173,173,-1,433
+173,4,22.0,True,[441.67294 585.       74.8    ],False,441.6729559300637,585.0,74.8,34.28571428571422,True,174,174,-1,432
+174,4,23.0,True,[441.67294 585.       78.2    ],False,441.6729559300637,585.0,78.2,68.57142857142856,True,175,175,-1,431
+175,4,24.0,True,[441.67294 585.       81.6    ],False,441.6729559300637,585.0,81.6,102.85714285714289,True,176,176,-1,430
+176,4,25.0,True,[441.67294 585.       85.     ],False,441.6729559300637,585.0,85.0,137.1428571428571,True,177,177,-1,429
+177,4,26.0,True,[441.67294 585.       88.4    ],False,441.6729559300637,585.0,88.39999999999999,171.42857142857144,True,178,178,-1,428
+178,4,27.0,True,[441.67294 585.       91.8    ],False,441.6729559300637,585.0,91.8,205.71428571428567,True,179,179,-1,427
+179,4,28.0,True,[441.67294 585.       95.2    ],False,441.6729559300637,585.0,95.2,240.0,True,180,180,-1,426
+180,4,29.0,True,[441.67294 585.       98.6    ],False,441.6729559300637,585.0,98.6,274.2857142857142,True,181,181,-1,425
+181,4,30.0,True,[441.67294 585.      102.     ],False,441.6729559300637,585.0,102.0,308.57142857142844,True,182,182,-1,424
+182,4,31.0,True,[441.67294 585.      105.4    ],False,441.6729559300637,585.0,105.39999999999999,342.8571428571429,True,183,183,-1,423
+183,4,32.0,True,[441.67294 585.      108.8    ],False,441.6729559300637,585.0,108.8,17.14285714285711,True,184,184,-1,422
+184,4,33.0,True,[441.67294 585.      112.2    ],False,441.6729559300637,585.0,112.2,51.42857142857133,True,185,185,-1,421
+185,4,34.0,True,[441.67294 585.      115.6    ],False,441.6729559300637,585.0,115.6,85.71428571428578,True,186,186,-1,420
+186,4,35.0,True,[441.67294 585.      119.     ],False,441.6729559300637,585.0,119.0,120.0,True,187,187,-1,419
+187,4,36.0,True,[441.67294 585.      122.4    ],False,441.6729559300637,585.0,122.39999999999999,154.28571428571422,True,188,188,-1,418
+188,4,37.0,True,[441.67294 585.      125.8    ],False,441.6729559300637,585.0,125.8,188.57142857142844,True,189,189,-1,417
+189,4,38.0,True,[441.67294 585.      129.2    ],False,441.6729559300637,585.0,129.2,222.8571428571429,True,190,190,-1,416
+190,4,39.0,True,[441.67294 585.      132.6    ],False,441.6729559300637,585.0,132.6,257.1428571428571,False,191,-1,-1,415
+191,5,39.0,False,[441.67294 555.      132.6    ],False,441.6729559300637,555.0,132.6,47.14285714285711,True,192,192,-1,336
+192,5,38.0,False,[441.67294 555.      129.2    ],False,441.6729559300637,555.0,129.2,12.85714285714289,True,193,193,-1,335
+193,5,37.0,False,[441.67294 555.      125.8    ],False,441.6729559300637,555.0,125.8,338.57142857142844,True,194,194,-1,334
+194,5,36.0,False,[441.67294 555.      122.4    ],False,441.6729559300637,555.0,122.39999999999999,304.2857142857142,True,195,195,-1,333
+195,5,35.0,False,[441.67294 555.      119.     ],False,441.6729559300637,555.0,119.0,270.0,True,196,196,-1,332
+196,5,34.0,False,[441.67294 555.      115.6    ],False,441.6729559300637,555.0,115.6,235.71428571428578,True,197,197,-1,331
+197,5,33.0,False,[441.67294 555.      112.2    ],False,441.6729559300637,555.0,112.2,201.42857142857133,True,198,198,-1,330
+198,5,32.0,False,[441.67294 555.      108.8    ],False,441.6729559300637,555.0,108.8,167.1428571428571,True,199,199,-1,329
+199,5,31.0,False,[441.67294 555.      105.4    ],False,441.6729559300637,555.0,105.39999999999999,132.8571428571429,True,200,200,-1,328
+200,5,30.0,False,[441.67294 555.      102.     ],False,441.6729559300637,555.0,102.0,98.57142857142844,True,201,201,-1,327
+201,5,29.0,False,[441.67294 555.       98.6    ],False,441.6729559300637,555.0,98.6,64.28571428571422,True,202,202,-1,326
+202,5,28.0,False,[441.67294 555.       95.2    ],False,441.6729559300637,555.0,95.2,30.0,True,203,203,-1,325
+203,5,27.0,False,[441.67294 555.       91.8    ],False,441.6729559300637,555.0,91.8,355.7142857142858,True,204,204,-1,298
+204,5,26.0,False,[441.67294 555.       88.4    ],False,441.6729559300637,555.0,88.39999999999999,321.42857142857156,True,205,205,-1,297
+205,5,25.0,False,[441.67294 555.       85.     ],False,441.6729559300637,555.0,85.0,287.1428571428571,True,206,206,-1,296
+206,5,24.0,False,[441.67294 555.       81.6    ],False,441.6729559300637,555.0,81.6,252.8571428571429,True,207,207,-1,295
+207,5,23.0,False,[441.67294 555.       78.2    ],False,441.6729559300637,555.0,78.2,218.57142857142856,False,-1,-1,-1,294
+208,0,39.0,True,[415.6922 540.     132.6   ],False,415.69219381653056,540.0,132.6,257.1428571428571,True,209,209,-1,-1
+209,0,40.0,True,[415.6922 540.     136.    ],False,415.69219381653056,540.0,136.0,291.42857142857133,True,210,210,-1,-1
+210,0,41.0,True,[415.6922 540.     139.4   ],False,415.69219381653056,540.0,139.4,325.7142857142858,False,-1,-1,-1,-1
+211,1,3.0,True,[389.71143 555.       10.2    ],False,389.71143170299734,555.0,10.2,102.85714285714286,True,212,212,-1,-1
+212,1,4.0,True,[389.71143 555.       13.6    ],False,389.71143170299734,555.0,13.6,137.14285714285714,True,213,213,-1,-1
+213,1,5.0,True,[389.71143 555.       17.     ],False,389.71143170299734,555.0,17.0,171.42857142857142,True,214,214,-1,65
+214,1,6.0,True,[389.71143 555.       20.4    ],False,389.71143170299734,555.0,20.4,205.71428571428572,True,215,215,-1,64
+215,1,7.0,True,[389.71143 555.       23.8    ],False,389.71143170299734,555.0,23.8,240.0,True,216,216,-1,63
+216,1,8.0,True,[389.71143 555.       27.2    ],False,389.71143170299734,555.0,27.2,274.2857142857143,True,217,217,-1,62
+217,1,9.0,True,[389.71143 555.       30.6    ],False,389.71143170299734,555.0,30.599999999999998,308.57142857142856,True,218,218,-1,61
+218,1,10.0,True,[389.71143 555.       34.     ],False,389.71143170299734,555.0,34.0,342.85714285714283,True,219,219,-1,60
+219,1,10.5,True,[389.71143 555.       35.7    ],False,389.71143170299734,555.0,35.699999999999996,0.0,True,220,220,-1,59
+220,1,11.0,True,[389.71143 555.       37.4    ],False,389.71143170299734,555.0,37.4,17.14285714285711,True,221,221,-1,58
+221,1,12.0,True,[389.71143 555.       40.8    ],False,389.71143170299734,555.0,40.8,51.428571428571445,True,222,222,-1,57
+222,1,13.0,True,[389.71143 555.       44.2    ],False,389.71143170299734,555.0,44.199999999999996,85.71428571428572,True,223,223,-1,56
+223,1,14.0,True,[389.71143 555.       47.6    ],False,389.71143170299734,555.0,47.6,120.0,True,224,224,-1,55
+224,1,15.0,True,[389.71143 555.       51.     ],False,389.71143170299734,555.0,51.0,154.28571428571422,True,225,225,-1,54
+225,1,16.0,True,[389.71143 555.       54.4    ],False,389.71143170299734,555.0,54.4,188.57142857142856,True,226,226,-1,53
+226,1,17.0,True,[389.71143 555.       57.8    ],False,389.71143170299734,555.0,57.8,222.8571428571429,True,227,227,-1,52
+227,1,18.0,True,[389.71143 555.       61.2    ],False,389.71143170299734,555.0,61.199999999999996,257.1428571428571,True,228,228,-1,51
+228,1,19.0,True,[389.71143 555.       64.6    ],False,389.71143170299734,555.0,64.6,291.42857142857144,True,229,229,-1,136
+229,1,20.0,True,[389.71143 555.       68.     ],False,389.71143170299734,555.0,68.0,325.71428571428567,False,230,-1,-1,135
+230,0,20.0,False,[415.6922 540.      68.    ],False,415.69219381653056,540.0,68.0,115.71428571428567,True,231,231,-1,91
+231,0,19.0,False,[415.6922 540.      64.6   ],False,415.69219381653056,540.0,64.6,81.42857142857144,True,232,232,-1,90
+232,0,18.0,False,[415.6922 540.      61.2   ],False,415.69219381653056,540.0,61.199999999999996,47.14285714285711,True,233,233,-1,89
+233,0,17.0,False,[415.6922 540.      57.8   ],False,415.69219381653056,540.0,57.8,12.85714285714289,True,234,234,-1,88
+234,0,16.0,False,[415.6922 540.      54.4   ],False,415.69219381653056,540.0,54.4,338.57142857142856,True,235,235,-1,87
+235,0,15.0,False,[415.6922 540.      51.    ],False,415.69219381653056,540.0,51.0,304.2857142857142,True,236,236,-1,86
+236,0,14.0,False,[415.6922 540.      47.6   ],False,415.69219381653056,540.0,47.6,270.0,True,237,237,-1,85
+237,0,13.91,False,[415.6922 540.      47.294 ],False,415.69219381653056,540.0,47.294,266.9142857142857,True,238,238,-1,84
+238,0,13.82,False,[415.6922 540.      46.988 ],False,415.69219381653056,540.0,46.988,263.8285714285714,True,239,239,-1,83
+239,0,13.73,False,[415.6922 540.      46.682 ],False,415.69219381653056,540.0,46.682,260.74285714285713,True,240,240,-1,82
+240,0,13.64,False,[415.6922 540.      46.376 ],False,415.69219381653056,540.0,46.376,257.65714285714284,True,241,241,-1,81
+241,0,13.55,False,[415.6922 540.      46.07  ],False,415.69219381653056,540.0,46.07,254.57142857142856,True,242,242,-1,80
+242,0,13.45,False,[415.6922 540.      45.73  ],False,415.69219381653056,540.0,45.73,251.1428571428571,True,243,243,-1,79
+243,0,13.36,False,[415.6922 540.      45.424 ],False,415.69219381653056,540.0,45.424,248.05714285714282,True,244,244,-1,78
+244,0,13.27,False,[415.6922 540.      45.118 ],False,415.69219381653056,540.0,45.117999999999995,244.97142857142853,True,245,245,-1,77
+245,0,13.18,False,[415.6922 540.      44.812 ],False,415.69219381653056,540.0,44.812,241.88571428571424,True,246,246,-1,76
+246,0,13.09,False,[415.6922 540.      44.506 ],False,415.69219381653056,540.0,44.506,238.79999999999995,True,247,247,-1,75
+247,0,13.0,False,[415.6922 540.      44.2   ],False,415.69219381653056,540.0,44.199999999999996,235.71428571428578,True,248,248,-1,74
+248,0,12.0,False,[415.6922 540.      40.8   ],False,415.69219381653056,540.0,40.8,201.42857142857144,True,249,249,-1,73
+249,0,11.0,False,[415.6922 540.      37.4   ],False,415.69219381653056,540.0,37.4,167.1428571428571,True,250,250,-1,72
+250,0,10.0,False,[415.6922 540.      34.    ],False,415.69219381653056,540.0,34.0,132.85714285714283,True,251,251,-1,71
+251,0,9.0,False,[415.6922 540.      30.6   ],False,415.69219381653056,540.0,30.599999999999998,98.57142857142856,True,252,252,-1,70
+252,0,8.0,False,[415.6922 540.      27.2   ],False,415.69219381653056,540.0,27.2,64.28571428571428,True,253,253,-1,69
+253,0,7.0,False,[415.6922 540.      23.8   ],False,415.69219381653056,540.0,23.8,30.0,True,254,254,-1,68
+254,0,6.0,False,[415.6922 540.      20.4   ],False,415.69219381653056,540.0,20.4,355.7142857142857,True,255,255,-1,67
+255,0,5.0,False,[415.6922 540.      17.    ],False,415.69219381653056,540.0,17.0,321.42857142857144,True,256,256,-1,66
+256,0,4.0,False,[415.6922 540.      13.6   ],False,415.69219381653056,540.0,13.6,287.1428571428571,True,257,257,-1,-1
+257,0,3.0,False,[415.6922 540.      10.2   ],False,415.69219381653056,540.0,10.2,252.85714285714286,True,258,258,-1,-1
+258,0,2.0,False,[415.6922 540.       6.8   ],False,415.69219381653056,540.0,6.8,218.57142857142856,False,-1,-1,-1,-1
+259,0,23.0,False,[415.6922 540.      78.2   ],False,415.69219381653056,540.0,78.2,218.57142857142856,True,260,260,-1,94
+260,0,22.0,False,[415.6922 540.      74.8   ],False,415.69219381653056,540.0,74.8,184.28571428571422,True,261,261,-1,93
+261,0,21.0,False,[415.6922 540.      71.4   ],False,415.69219381653056,540.0,71.39999999999999,150.0,False,262,-1,-1,92
+262,1,21.0,True,[389.71143 555.       71.4    ],False,389.71143170299734,555.0,71.39999999999999,0.0,True,263,263,-1,134
+263,1,22.0,True,[389.71143 555.       74.8    ],False,389.71143170299734,555.0,74.8,34.28571428571422,True,264,264,-1,133
+264,1,23.0,True,[389.71143 555.       78.2    ],False,389.71143170299734,555.0,78.2,68.57142857142856,True,265,265,-1,132
+265,1,24.0,True,[389.71143 555.       81.6    ],False,389.71143170299734,555.0,81.6,102.85714285714289,True,266,266,-1,131
+266,1,25.0,True,[389.71143 555.       85.     ],False,389.71143170299734,555.0,85.0,137.1428571428571,True,267,267,-1,130
+267,1,26.0,True,[389.71143 555.       88.4    ],False,389.71143170299734,555.0,88.39999999999999,171.42857142857144,True,268,268,-1,129
+268,1,27.0,True,[389.71143 555.       91.8    ],False,389.71143170299734,555.0,91.8,205.71428571428567,True,269,269,-1,128
+269,1,28.0,True,[389.71143 555.       95.2    ],False,389.71143170299734,555.0,95.2,240.0,True,270,270,-1,127
+270,1,29.0,True,[389.71143 555.       98.6    ],False,389.71143170299734,555.0,98.6,274.2857142857142,True,271,271,-1,126
+271,1,30.0,True,[389.71143 555.      102.     ],False,389.71143170299734,555.0,102.0,308.57142857142844,True,272,272,-1,125
+272,1,31.0,True,[389.71143 555.      105.4    ],False,389.71143170299734,555.0,105.39999999999999,342.8571428571429,True,273,273,-1,124
+273,1,32.0,True,[389.71143 555.      108.8    ],False,389.71143170299734,555.0,108.8,17.14285714285711,True,274,274,-1,123
+274,1,33.0,True,[389.71143 555.      112.2    ],False,389.71143170299734,555.0,112.2,51.42857142857133,True,275,275,-1,122
+275,1,34.0,True,[389.71143 555.      115.6    ],False,389.71143170299734,555.0,115.6,85.71428571428578,True,276,276,-1,121
+276,1,35.0,True,[389.71143 555.      119.     ],False,389.71143170299734,555.0,119.0,120.0,True,277,277,-1,120
+277,1,36.0,True,[389.71143 555.      122.4    ],False,389.71143170299734,555.0,122.39999999999999,154.28571428571422,True,278,278,-1,119
+278,1,37.0,True,[389.71143 555.      125.8    ],False,389.71143170299734,555.0,125.8,188.57142857142844,True,279,279,-1,-1
+279,1,38.0,True,[389.71143 555.      129.2    ],False,389.71143170299734,555.0,129.2,222.8571428571429,False,-1,-1,-1,-1
+280,5,9.0,True,[441.67294 555.       30.6    ],False,441.6729559300637,555.0,30.599999999999998,308.57142857142856,True,281,281,-1,13
+281,5,10.0,True,[441.67294 555.       34.     ],False,441.6729559300637,555.0,34.0,342.85714285714283,True,282,282,-1,12
+282,5,11.0,True,[441.67294 555.       37.4    ],False,441.6729559300637,555.0,37.4,17.14285714285711,True,283,283,-1,11
+283,5,12.0,True,[441.67294 555.       40.8    ],False,441.6729559300637,555.0,40.8,51.428571428571445,True,284,284,-1,10
+284,5,13.0,True,[441.67294 555.       44.2    ],False,441.6729559300637,555.0,44.199999999999996,85.71428571428572,True,285,285,-1,9
+285,5,14.0,True,[441.67294 555.       47.6    ],False,441.6729559300637,555.0,47.6,120.0,True,286,286,-1,8
+286,5,15.0,True,[441.67294 555.       51.     ],False,441.6729559300637,555.0,51.0,154.28571428571422,True,287,287,-1,7
+287,5,16.0,True,[441.67294 555.       54.4    ],False,441.6729559300637,555.0,54.4,188.57142857142856,True,288,288,-1,6
+288,5,17.0,True,[441.67294 555.       57.8    ],False,441.6729559300637,555.0,57.8,222.8571428571429,True,289,289,-1,5
+289,5,18.0,True,[441.67294 555.       61.2    ],False,441.6729559300637,555.0,61.199999999999996,257.1428571428571,True,290,290,-1,4
+290,5,19.0,True,[441.67294 555.       64.6    ],False,441.6729559300637,555.0,64.6,291.42857142857144,True,291,291,-1,3
+291,5,20.0,True,[441.67294 555.       68.     ],False,441.6729559300637,555.0,68.0,325.71428571428567,True,292,292,-1,2
+292,5,21.0,True,[441.67294 555.       71.4    ],False,441.6729559300637,555.0,71.39999999999999,0.0,True,293,293,-1,1
+293,5,22.0,True,[441.67294 555.       74.8    ],False,441.6729559300637,555.0,74.8,34.28571428571422,True,294,294,-1,0
+294,5,23.0,True,[441.67294 555.       78.2    ],False,441.6729559300637,555.0,78.2,68.57142857142856,True,295,295,-1,207
+295,5,24.0,True,[441.67294 555.       81.6    ],False,441.6729559300637,555.0,81.6,102.85714285714289,True,296,296,-1,206
+296,5,25.0,True,[441.67294 555.       85.     ],False,441.6729559300637,555.0,85.0,137.1428571428571,True,297,297,-1,205
+297,5,26.0,True,[441.67294 555.       88.4    ],False,441.6729559300637,555.0,88.39999999999999,171.42857142857144,True,298,298,-1,204
+298,5,27.0,True,[441.67294 555.       91.8    ],False,441.6729559300637,555.0,91.8,205.71428571428567,False,299,-1,-1,203
+299,0,27.0,False,[415.6922 540.      91.8   ],False,415.69219381653056,540.0,91.8,355.7142857142858,True,300,300,-1,98
+300,0,26.0,False,[415.6922 540.      88.4   ],False,415.69219381653056,540.0,88.39999999999999,321.42857142857156,True,301,301,-1,97
+301,0,25.0,False,[415.6922 540.      85.    ],False,415.69219381653056,540.0,85.0,287.1428571428571,True,302,302,-1,96
+302,0,24.0,False,[415.6922 540.      81.6   ],False,415.69219381653056,540.0,81.6,252.8571428571429,False,-1,-1,-1,95
+303,0,38.0,False,[415.6922 540.     129.2   ],False,415.69219381653056,540.0,129.2,12.85714285714289,True,304,304,-1,-1
+304,0,37.0,False,[415.6922 540.     125.8   ],False,415.69219381653056,540.0,125.8,338.57142857142844,True,305,305,-1,-1
+305,0,36.0,False,[415.6922 540.     122.4   ],False,415.69219381653056,540.0,122.39999999999999,304.2857142857142,True,306,306,-1,118
+306,0,35.0,False,[415.6922 540.     119.    ],False,415.69219381653056,540.0,119.0,270.0,True,307,307,-1,117
+307,0,34.0,False,[415.6922 540.     115.6   ],False,415.69219381653056,540.0,115.6,235.71428571428578,True,308,308,-1,116
+308,0,33.0,False,[415.6922 540.     112.2   ],False,415.69219381653056,540.0,112.2,201.42857142857133,True,309,309,-1,115
+309,0,32.0,False,[415.6922 540.     108.8   ],False,415.69219381653056,540.0,108.8,167.1428571428571,True,310,310,-1,114
+310,0,31.0,False,[415.6922 540.     105.4   ],False,415.69219381653056,540.0,105.39999999999999,132.8571428571429,True,311,311,-1,113
+311,0,30.0,False,[415.6922 540.     102.    ],False,415.69219381653056,540.0,102.0,98.57142857142844,True,312,312,-1,112
+312,0,29.92,False,[415.6922 540.     101.728 ],False,415.69219381653056,540.0,101.72800000000001,95.82857142857142,True,313,313,-1,111
+313,0,29.83,False,[415.6922 540.     101.422 ],False,415.69219381653056,540.0,101.422,92.74285714285702,True,314,314,-1,110
+314,0,29.75,False,[415.6922 540.     101.15  ],False,415.69219381653056,540.0,101.14999999999999,90.0,True,315,315,-1,109
+315,0,29.67,False,[415.6922 540.     100.878 ],False,415.69219381653056,540.0,100.878,87.25714285714275,True,316,316,-1,108
+316,0,29.58,False,[415.6922 540.     100.572 ],False,415.69219381653056,540.0,100.57199999999999,84.17142857142835,True,317,317,-1,107
+317,0,29.5,False,[415.6922 540.     100.3   ],False,415.69219381653056,540.0,100.3,81.42857142857156,True,318,318,-1,106
+318,0,29.42,False,[415.6922 540.     100.028 ],False,415.69219381653056,540.0,100.028,78.68571428571431,True,319,319,-1,105
+319,0,29.33,False,[415.6922 540.      99.722 ],False,415.69219381653056,540.0,99.722,75.59999999999991,True,320,320,-1,104
+320,0,29.25,False,[415.6922 540.      99.45  ],False,415.69219381653056,540.0,99.45,72.85714285714266,True,321,321,-1,103
+321,0,29.17,False,[415.6922 540.      99.178 ],False,415.69219381653056,540.0,99.178,70.11428571428587,True,322,322,-1,102
+322,0,29.08,False,[415.6922 540.      98.872 ],False,415.69219381653056,540.0,98.87199999999999,67.02857142857147,True,323,323,-1,101
+323,0,29.0,False,[415.6922 540.      98.6   ],False,415.69219381653056,540.0,98.6,64.28571428571422,True,324,324,-1,100
+324,0,28.0,False,[415.6922 540.      95.2   ],False,415.69219381653056,540.0,95.2,30.0,False,325,-1,-1,99
+325,5,28.0,True,[441.67294 555.       95.2    ],False,441.6729559300637,555.0,95.2,240.0,True,326,326,-1,202
+326,5,29.0,True,[441.67294 555.       98.6    ],False,441.6729559300637,555.0,98.6,274.2857142857142,True,327,327,-1,201
+327,5,30.0,True,[441.67294 555.      102.     ],False,441.6729559300637,555.0,102.0,308.57142857142844,True,328,328,-1,200
+328,5,31.0,True,[441.67294 555.      105.4    ],False,441.6729559300637,555.0,105.39999999999999,342.8571428571429,True,329,329,-1,199
+329,5,32.0,True,[441.67294 555.      108.8    ],False,441.6729559300637,555.0,108.8,17.14285714285711,True,330,330,-1,198
+330,5,33.0,True,[441.67294 555.      112.2    ],False,441.6729559300637,555.0,112.2,51.42857142857133,True,331,331,-1,197
+331,5,34.0,True,[441.67294 555.      115.6    ],False,441.6729559300637,555.0,115.6,85.71428571428578,True,332,332,-1,196
+332,5,35.0,True,[441.67294 555.      119.     ],False,441.6729559300637,555.0,119.0,120.0,True,333,333,-1,195
+333,5,36.0,True,[441.67294 555.      122.4    ],False,441.6729559300637,555.0,122.39999999999999,154.28571428571422,True,334,334,-1,194
+334,5,37.0,True,[441.67294 555.      125.8    ],False,441.6729559300637,555.0,125.8,188.57142857142844,True,335,335,-1,193
+335,5,38.0,True,[441.67294 555.      129.2    ],False,441.6729559300637,555.0,129.2,222.8571428571429,True,336,336,-1,192
+336,5,39.0,True,[441.67294 555.      132.6    ],False,441.6729559300637,555.0,132.6,257.1428571428571,False,-1,-1,-1,191
+337,1,41.0,False,[389.71143 555.      139.4    ],False,389.71143170299734,555.0,139.4,115.71428571428578,True,338,338,-1,-1
+338,1,40.0,False,[389.71143 555.      136.     ],False,389.71143170299734,555.0,136.0,81.42857142857133,True,339,339,-1,-1
+339,1,39.0,False,[389.71143 555.      132.6    ],False,389.71143170299734,555.0,132.6,47.14285714285711,False,-1,-1,-1,-1
+340,2,39.0,True,[389.71143 585.      132.6    ],False,389.71143170299734,585.0,132.6,257.1428571428571,True,341,341,-1,-1
+341,2,40.0,True,[389.71143 585.      136.     ],False,389.71143170299734,585.0,136.0,291.42857142857133,True,342,342,-1,-1
+342,2,41.0,True,[389.71143 585.      139.4    ],False,389.71143170299734,585.0,139.4,325.7142857142858,False,-1,-1,-1,-1
+343,2,34.0,False,[389.71143 585.      115.6    ],False,389.71143170299734,585.0,115.6,235.71428571428578,True,344,344,-1,-1
+344,2,33.0,False,[389.71143 585.      112.2    ],False,389.71143170299734,585.0,112.2,201.42857142857133,True,345,345,-1,-1
+345,2,32.0,False,[389.71143 585.      108.8    ],False,389.71143170299734,585.0,108.8,167.1428571428571,True,346,346,-1,150
+346,2,31.0,False,[389.71143 585.      105.4    ],False,389.71143170299734,585.0,105.39999999999999,132.8571428571429,True,347,347,-1,149
+347,2,30.0,False,[389.71143 585.      102.     ],False,389.71143170299734,585.0,102.0,98.57142857142844,True,348,348,-1,148
+348,2,29.0,False,[389.71143 585.       98.6    ],False,389.71143170299734,585.0,98.6,64.28571428571422,True,349,349,-1,147
+349,2,28.0,False,[389.71143 585.       95.2    ],False,389.71143170299734,585.0,95.2,30.0,True,350,350,-1,146
+350,2,27.0,False,[389.71143 585.       91.8    ],False,389.71143170299734,585.0,91.8,355.7142857142858,True,351,351,-1,145
+351,2,26.0,False,[389.71143 585.       88.4    ],False,389.71143170299734,585.0,88.39999999999999,321.42857142857156,True,352,352,-1,144
+352,2,25.0,False,[389.71143 585.       85.     ],False,389.71143170299734,585.0,85.0,287.1428571428571,True,353,353,-1,143
+353,2,24.0,False,[389.71143 585.       81.6    ],False,389.71143170299734,585.0,81.6,252.8571428571429,True,354,354,-1,142
+354,2,23.0,False,[389.71143 585.       78.2    ],False,389.71143170299734,585.0,78.2,218.57142857142856,True,355,355,-1,141
+355,2,22.0,False,[389.71143 585.       74.8    ],False,389.71143170299734,585.0,74.8,184.28571428571422,True,356,356,-1,140
+356,2,21.0,False,[389.71143 585.       71.4    ],False,389.71143170299734,585.0,71.39999999999999,150.0,True,357,357,-1,139
+357,2,20.0,False,[389.71143 585.       68.     ],False,389.71143170299734,585.0,68.0,115.71428571428567,True,358,358,-1,138
+358,2,19.0,False,[389.71143 585.       64.6    ],False,389.71143170299734,585.0,64.6,81.42857142857144,True,359,359,-1,137
+359,2,18.0,False,[389.71143 585.       61.2    ],False,389.71143170299734,585.0,61.199999999999996,47.14285714285711,True,360,360,-1,50
+360,2,17.0,False,[389.71143 585.       57.8    ],False,389.71143170299734,585.0,57.8,12.85714285714289,True,361,361,-1,49
+361,2,16.0,False,[389.71143 585.       54.4    ],False,389.71143170299734,585.0,54.4,338.57142857142856,True,362,362,-1,48
+362,2,15.0,False,[389.71143 585.       51.     ],False,389.71143170299734,585.0,51.0,304.2857142857142,True,363,363,-1,47
+363,2,14.0,False,[389.71143 585.       47.6    ],False,389.71143170299734,585.0,47.6,270.0,True,364,364,-1,46
+364,2,13.0,False,[389.71143 585.       44.2    ],False,389.71143170299734,585.0,44.199999999999996,235.71428571428578,True,365,365,-1,45
+365,2,12.0,False,[389.71143 585.       40.8    ],False,389.71143170299734,585.0,40.8,201.42857142857144,True,366,366,-1,44
+366,2,10.0,False,[389.71143 585.       34.     ],False,389.71143170299734,585.0,34.0,132.85714285714283,True,367,367,-1,43
+367,2,9.0,False,[389.71143 585.       30.6    ],False,389.71143170299734,585.0,30.599999999999998,98.57142857142856,True,368,368,-1,42
+368,2,8.0,False,[389.71143 585.       27.2    ],False,389.71143170299734,585.0,27.2,64.28571428571428,True,369,369,-1,41
+369,2,7.0,False,[389.71143 585.       23.8    ],False,389.71143170299734,585.0,23.8,30.0,True,370,370,-1,40
+370,2,6.0,False,[389.71143 585.       20.4    ],False,389.71143170299734,585.0,20.4,355.7142857142857,True,371,371,-1,39
+371,2,5.0,False,[389.71143 585.       17.     ],False,389.71143170299734,585.0,17.0,321.42857142857144,True,372,372,-1,38
+372,2,4.0,False,[389.71143 585.       13.6    ],False,389.71143170299734,585.0,13.6,287.1428571428571,True,373,373,-1,37
+373,2,3.0,False,[389.71143 585.       10.2    ],False,389.71143170299734,585.0,10.2,252.85714285714286,True,374,374,-1,36
+374,2,2.0,False,[389.71143 585.        6.8    ],False,389.71143170299734,585.0,6.8,218.57142857142856,True,375,375,-1,35
+375,2,1.0,False,[389.71143 585.        3.4    ],False,389.71143170299734,585.0,3.4,184.28571428571428,True,376,376,-1,-1
+376,2,0.0,False,[389.71143 585.        0.     ],False,389.71143170299734,585.0,0.0,150.0,False,-1,-1,-1,-1
+377,3,41.0,False,[415.6922 600.     139.4   ],False,415.69219381653056,600.0,139.4,115.71428571428578,True,378,378,-1,-1
+378,3,40.0,False,[415.6922 600.     136.    ],False,415.69219381653056,600.0,136.0,81.42857142857133,True,379,379,-1,-1
+379,3,39.0,False,[415.6922 600.     132.6   ],False,415.69219381653056,600.0,132.6,47.14285714285711,True,380,380,-1,-1
+380,3,38.0,False,[415.6922 600.     129.2   ],False,415.69219381653056,600.0,129.2,12.85714285714289,True,381,381,-1,-1
+381,3,37.0,False,[415.6922 600.     125.8   ],False,415.69219381653056,600.0,125.8,338.57142857142844,False,-1,-1,-1,-1
+382,3,0.0,True,[415.6922 600.       0.    ],False,415.69219381653056,600.0,0.0,0.0,True,383,383,-1,-1
+383,3,1.0,True,[415.6922 600.       3.4   ],False,415.69219381653056,600.0,3.4,34.285714285714285,True,384,384,-1,-1
+384,3,2.0,True,[415.6922 600.       6.8   ],False,415.69219381653056,600.0,6.8,68.57142857142857,True,385,385,-1,34
+385,3,3.0,True,[415.6922 600.      10.2   ],False,415.69219381653056,600.0,10.2,102.85714285714286,True,386,386,-1,33
+386,3,4.0,True,[415.6922 600.      13.6   ],False,415.69219381653056,600.0,13.6,137.14285714285714,True,387,387,-1,32
+387,3,5.0,True,[415.6922 600.      17.    ],False,415.69219381653056,600.0,17.0,171.42857142857142,True,388,388,-1,31
+388,3,6.0,True,[415.6922 600.      20.4   ],False,415.69219381653056,600.0,20.4,205.71428571428572,True,389,389,-1,30
+389,3,7.0,True,[415.6922 600.      23.8   ],False,415.69219381653056,600.0,23.8,240.0,True,390,390,-1,29
+390,3,8.0,True,[415.6922 600.      27.2   ],False,415.69219381653056,600.0,27.2,274.2857142857143,True,391,391,-1,28
+391,3,9.0,True,[415.6922 600.      30.6   ],False,415.69219381653056,600.0,30.599999999999998,308.57142857142856,True,392,392,-1,27
+392,3,10.0,True,[415.6922 600.      34.    ],False,415.69219381653056,600.0,34.0,342.85714285714283,True,393,393,-1,26
+393,3,11.0,True,[415.6922 600.      37.4   ],False,415.69219381653056,600.0,37.4,17.14285714285711,True,394,394,-1,25
+394,3,12.0,True,[415.6922 600.      40.8   ],False,415.69219381653056,600.0,40.8,51.428571428571445,True,395,395,-1,24
+395,3,13.0,True,[415.6922 600.      44.2   ],False,415.69219381653056,600.0,44.199999999999996,85.71428571428572,True,396,396,-1,23
+396,3,14.0,True,[415.6922 600.      47.6   ],False,415.69219381653056,600.0,47.6,120.0,True,397,397,-1,22
+397,3,15.0,True,[415.6922 600.      51.    ],False,415.69219381653056,600.0,51.0,154.28571428571422,True,398,398,-1,21
+398,3,16.0,True,[415.6922 600.      54.4   ],False,415.69219381653056,600.0,54.4,188.57142857142856,True,399,399,-1,166
+399,3,17.0,True,[415.6922 600.      57.8   ],False,415.69219381653056,600.0,57.8,222.8571428571429,True,400,400,-1,165
+400,3,18.0,True,[415.6922 600.      61.2   ],False,415.69219381653056,600.0,61.199999999999996,257.1428571428571,True,401,401,-1,164
+401,3,19.0,True,[415.6922 600.      64.6   ],False,415.69219381653056,600.0,64.6,291.42857142857144,True,402,402,-1,163
+402,3,20.0,True,[415.6922 600.      68.    ],False,415.69219381653056,600.0,68.0,325.71428571428567,False,403,-1,-1,162
+403,4,20.0,False,[441.67294 585.       68.     ],False,441.6729559300637,585.0,68.0,115.71428571428567,True,404,404,-1,171
+404,4,19.0,False,[441.67294 585.       64.6    ],False,441.6729559300637,585.0,64.6,81.42857142857144,True,405,405,-1,170
+405,4,18.0,False,[441.67294 585.       61.2    ],False,441.6729559300637,585.0,61.199999999999996,47.14285714285711,True,406,406,-1,169
+406,4,17.0,False,[441.67294 585.       57.8    ],False,441.6729559300637,585.0,57.8,12.85714285714289,True,407,407,-1,168
+407,4,16.0,False,[441.67294 585.       54.4    ],False,441.6729559300637,585.0,54.4,338.57142857142856,True,408,408,-1,167
+408,4,15.0,False,[441.67294 585.       51.     ],False,441.6729559300637,585.0,51.0,304.2857142857142,True,409,409,-1,20
+409,4,14.0,False,[441.67294 585.       47.6    ],False,441.6729559300637,585.0,47.6,270.0,True,410,410,-1,19
+410,4,13.0,False,[441.67294 585.       44.2    ],False,441.6729559300637,585.0,44.199999999999996,235.71428571428578,True,411,411,-1,18
+411,4,12.0,False,[441.67294 585.       40.8    ],False,441.6729559300637,585.0,40.8,201.42857142857144,True,412,412,-1,17
+412,4,11.0,False,[441.67294 585.       37.4    ],False,441.6729559300637,585.0,37.4,167.1428571428571,True,413,413,-1,16
+413,4,10.0,False,[441.67294 585.       34.     ],False,441.6729559300637,585.0,34.0,132.85714285714283,True,414,414,-1,15
+414,4,9.0,False,[441.67294 585.       30.6    ],False,441.6729559300637,585.0,30.599999999999998,98.57142857142856,False,-1,-1,-1,14
+415,4,39.0,False,[441.67294 585.      132.6    ],False,441.6729559300637,585.0,132.6,47.14285714285711,True,416,416,-1,190
+416,4,38.0,False,[441.67294 585.      129.2    ],False,441.6729559300637,585.0,129.2,12.85714285714289,True,417,417,-1,189
+417,4,37.0,False,[441.67294 585.      125.8    ],False,441.6729559300637,585.0,125.8,338.57142857142844,True,418,418,-1,188
+418,4,36.0,False,[441.67294 585.      122.4    ],False,441.6729559300637,585.0,122.39999999999999,304.2857142857142,True,419,419,-1,187
+419,4,35.0,False,[441.67294 585.      119.     ],False,441.6729559300637,585.0,119.0,270.0,True,420,420,-1,186
+420,4,34.0,False,[441.67294 585.      115.6    ],False,441.6729559300637,585.0,115.6,235.71428571428578,True,421,421,-1,185
+421,4,33.0,False,[441.67294 585.      112.2    ],False,441.6729559300637,585.0,112.2,201.42857142857133,True,422,422,-1,184
+422,4,32.0,False,[441.67294 585.      108.8    ],False,441.6729559300637,585.0,108.8,167.1428571428571,True,423,423,-1,183
+423,4,31.0,False,[441.67294 585.      105.4    ],False,441.6729559300637,585.0,105.39999999999999,132.8571428571429,True,424,424,-1,182
+424,4,30.0,False,[441.67294 585.      102.     ],False,441.6729559300637,585.0,102.0,98.57142857142844,True,425,425,-1,181
+425,4,29.0,False,[441.67294 585.       98.6    ],False,441.6729559300637,585.0,98.6,64.28571428571422,True,426,426,-1,180
+426,4,28.0,False,[441.67294 585.       95.2    ],False,441.6729559300637,585.0,95.2,30.0,True,427,427,-1,179
+427,4,27.0,False,[441.67294 585.       91.8    ],False,441.6729559300637,585.0,91.8,355.7142857142858,True,428,428,-1,178
+428,4,26.0,False,[441.67294 585.       88.4    ],False,441.6729559300637,585.0,88.39999999999999,321.42857142857156,True,429,429,-1,177
+429,4,25.0,False,[441.67294 585.       85.     ],False,441.6729559300637,585.0,85.0,287.1428571428571,True,430,430,-1,176
+430,4,24.0,False,[441.67294 585.       81.6    ],False,441.6729559300637,585.0,81.6,252.8571428571429,True,431,431,-1,175
+431,4,23.0,False,[441.67294 585.       78.2    ],False,441.6729559300637,585.0,78.2,218.57142857142856,True,432,432,-1,174
+432,4,22.0,False,[441.67294 585.       74.8    ],False,441.6729559300637,585.0,74.8,184.28571428571422,True,433,433,-1,173
+433,4,21.0,False,[441.67294 585.       71.4    ],False,441.6729559300637,585.0,71.39999999999999,150.0,False,434,-1,-1,172
+434,3,21.0,True,[415.6922 600.      71.4   ],False,415.69219381653056,600.0,71.39999999999999,0.0,True,435,435,-1,161
+435,3,22.0,True,[415.6922 600.      74.8   ],False,415.69219381653056,600.0,74.8,34.28571428571422,True,436,436,-1,160
+436,3,23.0,True,[415.6922 600.      78.2   ],False,415.69219381653056,600.0,78.2,68.57142857142856,True,437,437,-1,159
+437,3,24.0,True,[415.6922 600.      81.6   ],False,415.69219381653056,600.0,81.6,102.85714285714289,True,438,438,-1,158
+438,3,25.0,True,[415.6922 600.      85.    ],False,415.69219381653056,600.0,85.0,137.1428571428571,True,439,439,-1,157
+439,3,26.0,True,[415.6922 600.      88.4   ],False,415.69219381653056,600.0,88.39999999999999,171.42857142857144,True,440,440,-1,156
+440,3,27.0,True,[415.6922 600.      91.8   ],False,415.69219381653056,600.0,91.8,205.71428571428567,True,441,441,-1,155
+441,3,29.0,True,[415.6922 600.      98.6   ],False,415.69219381653056,600.0,98.6,274.2857142857142,True,442,442,-1,154
+442,3,30.0,True,[415.6922 600.     102.    ],False,415.69219381653056,600.0,102.0,308.57142857142844,True,443,443,-1,153
+443,3,31.0,True,[415.6922 600.     105.4   ],False,415.69219381653056,600.0,105.39999999999999,342.8571428571429,True,444,444,-1,152
+444,3,32.0,True,[415.6922 600.     108.8   ],False,415.69219381653056,600.0,108.8,17.14285714285711,True,445,445,-1,151
+445,3,33.0,True,[415.6922 600.     112.2   ],False,415.69219381653056,600.0,112.2,51.42857142857133,True,446,446,-1,-1
+446,3,34.0,True,[415.6922 600.     115.6   ],False,415.69219381653056,600.0,115.6,85.71428571428578,False,-1,-1,-1,-1
+447,4,0.0,True,[441.67294 585.        0.     ],False,441.6729559300637,585.0,0.0,0.0,True,448,448,-1,-1
+448,4,1.0,True,[441.67294 585.        3.4    ],False,441.6729559300637,585.0,3.4,34.285714285714285,True,449,449,-1,-1
+449,4,2.0,True,[441.67294 585.        6.8    ],False,441.6729559300637,585.0,6.8,68.57142857142857,True,450,450,-1,-1
+450,4,3.0,True,[441.67294 585.       10.2    ],False,441.6729559300637,585.0,10.2,102.85714285714286,False,-1,-1,-1,-1
+451,5,3.0,False,[441.67294 555.       10.2    ],False,441.6729559300637,555.0,10.2,252.85714285714286,True,452,452,-1,-1
+452,5,2.0,False,[441.67294 555.        6.8    ],False,441.6729559300637,555.0,6.8,218.57142857142856,True,453,453,-1,-1
+453,5,1.0,False,[441.67294 555.        3.4    ],False,441.6729559300637,555.0,3.4,184.28571428571428,True,454,454,-1,-1
+454,5,0.0,False,[441.67294 555.        0.     ],False,441.6729559300637,555.0,0.0,150.0,False,-1,-1,-1,-1
diff --git a/mrdna/readers/test/sc.csv b/mrdna/readers/test/sc.csv
new file mode 100644
index 0000000000000000000000000000000000000000..77ee3c5d241f58c125276905321d8a2517aea065
--- /dev/null
+++ b/mrdna/readers/test/sc.csv
@@ -0,0 +1,70 @@
+,vh,zid,fwd,loopout,stacked,seq,seg_index,threeprime,stack
+0,1.0,23,False,False,True,A,0,1,1
+1,1.0,22,False,False,True,A,0,2,2
+2,1.0,21,False,False,True,C,0,3,3
+3,1.0,19,False,False,True,G,0,4,4
+4,1.0,18,False,False,True,T,0,5,5
+5,1.0,17,False,False,True,A,0,6,6
+6,1.0,16,False,False,True,A,0,7,7
+7,1.0,15,False,False,True,C,0,8,8
+8,1.0,14,False,False,True,G,0,9,9
+9,1.0,13,False,False,True,T,0,10,10
+10,1.0,12,False,False,True,A,0,11,11
+11,1.0,11,False,False,True,A,0,12,12
+12,1.0,10,False,False,True,C,0,13,13
+13,1.0,9,False,False,True,G,0,14,14
+14,1.0,8,False,False,False,T,0,15,-1
+15,0.0,8,True,False,True,A,0,16,16
+16,0.0,9,True,False,True,A,0,17,17
+17,0.0,10,True,False,True,C,0,18,18
+18,0.0,11,True,False,True,G,0,19,19
+19,0.0,12,True,False,True,T,0,20,20
+20,0.0,13,True,False,True,A,0,21,21
+21,0.0,14.0,True,False,True,A,0,22,22
+22,0.0,14.1,True,False,True,C,0,23,23
+23,0.0,15,True,False,True,G,0,24,24
+24,0.0,16,True,False,True,T,0,25,25
+25,0.0,17,True,False,True,A,0,26,26
+26,0.0,18,True,False,True,A,0,27,27
+27,0.0,19,True,False,True,C,0,28,28
+28,0.0,20,True,False,True,G,0,29,29
+29,0.0,21,True,False,True,T,0,30,30
+30,0.0,22,True,False,True,A,0,31,31
+31,0.0,23,True,False,True,A,0,32,32
+32,0.0,24,True,False,True,C,0,33,33
+33,0.0,25,True,False,True,G,0,34,34
+34,0.0,26.0,True,False,True,T,0,35,35
+35,0.0,26.1,True,False,True,A,0,36,36
+36,0.0,26.2,True,False,True,A,0,37,37
+37,0.0,27,True,False,True,C,0,38,38
+38,0.0,28,True,False,True,G,0,39,39
+39,0.0,29,True,False,True,T,0,40,40
+40,0.0,30,True,False,True,A,0,41,41
+41,0.0,31,True,False,True,A,0,42,42
+42,0.0,32,True,False,True,C,0,43,43
+43,0.0,33,True,False,True,G,0,44,44
+44,0.0,34,True,False,True,T,0,45,45
+45,0.0,35,True,False,True,A,0,46,46
+46,0.0,36,True,False,True,A,0,47,47
+47,0.0,37,True,False,True,C,0,48,48
+48,0.0,38,True,False,True,G,0,49,49
+49,0.0,39,True,False,False,T,0,50,-1
+50,0.5,,False,True,,A,0,51,51
+51,0.5,,False,True,,A,0,52,52
+52,0.5,,False,True,,C,0,53,53
+53,1.0,39,False,False,True,G,0,54,54
+54,1.0,38,False,False,True,T,0,55,55
+55,1.0,37,False,False,True,A,0,56,56
+56,1.0,36,False,False,True,A,0,57,57
+57,1.0,35,False,False,True,C,0,58,58
+58,1.0,34,False,False,True,G,0,59,59
+59,1.0,33,False,False,True,T,0,60,60
+60,1.0,32,False,False,True,A,0,61,61
+61,1.0,31,False,False,True,A,0,62,62
+62,1.0,30,False,False,True,C,0,63,63
+63,1.0,29,False,False,True,G,0,64,64
+64,1.0,28,False,False,True,T,0,65,65
+65,1.0,27,False,False,True,A,0,66,66
+66,1.0,26,False,False,True,A,0,67,67
+67,1.0,25,False,False,True,C,0,68,68
+68,1.0,24,False,False,False,G,0,-1,-1
diff --git a/mrdna/readers/test/test.csv b/mrdna/readers/test/test.csv
new file mode 100644
index 0000000000000000000000000000000000000000..c59ee2f1285a69e8766e333d63a4125ad767d5ea
--- /dev/null
+++ b/mrdna/readers/test/test.csv
@@ -0,0 +1,70 @@
+,vh,zid,fwd,offset_angle,stacked,seq,seg_index,threeprime,stack
+0,1.0,23.0,False,,True,A,0,1,1
+1,1.0,22.0,False,,True,A,0,2,2
+2,1.0,21.0,False,,True,C,0,3,3
+3,1.0,19.0,False,,True,G,0,4,4
+4,1.0,18.0,False,,True,T,0,5,5
+5,1.0,17.0,False,,True,A,0,6,6
+6,1.0,16.0,False,,True,A,0,7,7
+7,1.0,15.0,False,,True,C,0,8,8
+8,1.0,14.0,False,,True,G,0,9,9
+9,1.0,13.0,False,,True,T,0,10,10
+10,1.0,12.0,False,,True,A,0,11,11
+11,1.0,11.0,False,,True,A,0,12,12
+12,1.0,10.0,False,,True,C,0,13,13
+13,1.0,9.0,False,,True,G,0,14,14
+14,1.0,8.0,False,,False,T,0,15,-1
+15,0.0,8.0,True,,True,A,0,16,16
+16,0.0,9.0,True,,True,A,0,17,17
+17,0.0,10.0,True,,True,C,0,18,18
+18,0.0,11.0,True,,True,G,0,19,19
+19,0.0,12.0,True,,True,T,0,20,20
+20,0.0,13.0,True,,True,A,0,21,21
+21,0.0,14.0,True,,True,A,0,22,22
+22,0.0,14.5,True,,True,C,0,23,23
+23,0.0,15.0,True,,True,G,0,24,24
+24,0.0,16.0,True,,True,T,0,25,25
+25,0.0,17.0,True,,True,A,0,26,26
+26,0.0,18.0,True,,True,A,0,27,27
+27,0.0,19.0,True,,True,C,0,28,28
+28,0.0,20.0,True,,True,G,0,29,29
+29,0.0,21.0,True,,True,T,0,30,30
+30,0.0,22.0,True,,True,A,0,31,31
+31,0.0,23.0,True,,True,A,0,32,32
+32,0.0,24.0,True,,True,C,0,33,33
+33,0.0,25.0,True,,True,G,0,34,34
+34,0.0,26.0,True,,True,T,0,35,35
+35,0.0,26.33,True,,True,A,0,36,36
+36,0.0,26.67,True,,True,A,0,37,37
+37,0.0,27.0,True,,True,C,0,38,38
+38,0.0,28.0,True,,True,G,0,39,39
+39,0.0,29.0,True,,True,T,0,40,40
+40,0.0,30.0,True,,True,A,0,41,41
+41,0.0,31.0,True,,True,A,0,42,42
+42,0.0,32.0,True,,True,C,0,43,43
+43,0.0,33.0,True,,True,G,0,44,44
+44,0.0,34.0,True,,True,T,0,45,45
+45,0.0,35.0,True,,True,A,0,46,46
+46,0.0,36.0,True,,True,A,0,47,47
+47,0.0,37.0,True,,True,C,0,48,48
+48,0.0,38.0,True,,True,G,0,49,49
+49,0.0,39.0,True,,False,T,0,50,-1
+50,0.5,40.0,False,,,A,0,51,51
+51,0.5,40.0,False,,,A,0,52,52
+52,0.5,40.0,False,,,C,0,53,53
+53,1.0,39.0,False,,True,G,0,54,54
+54,1.0,38.0,False,,True,T,0,55,55
+55,1.0,37.0,False,,True,A,0,56,56
+56,1.0,36.0,False,,True,A,0,57,57
+57,1.0,35.0,False,,True,C,0,58,58
+58,1.0,34.0,False,,True,G,0,59,59
+59,1.0,33.0,False,,True,T,0,60,60
+60,1.0,32.0,False,,True,A,0,61,61
+61,1.0,31.0,False,,True,A,0,62,62
+62,1.0,30.0,False,,True,C,0,63,63
+63,1.0,29.0,False,,True,G,0,64,64
+64,1.0,28.0,False,,True,T,0,65,65
+65,1.0,27.0,False,,True,A,0,66,66
+66,1.0,26.0,False,,True,A,0,67,67
+67,1.0,25.0,False,,True,C,0,68,68
+68,1.0,24.0,False,,False,G,0,-1,-1
diff --git a/mrdna/readers/test/test.ipynb b/mrdna/readers/test/test.ipynb
index e6aff5ff10d28e647d5337c78b99ddb632756bb4..270b98c02dd96d0b2ed26defc0c0193c92b9de32 100644
--- a/mrdna/readers/test/test.ipynb
+++ b/mrdna/readers/test/test.ipynb
@@ -3247,23 +3247,35 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 171,
+   "execution_count": 263,
    "id": "170a2918-f113-475c-b0a3-edbf33153e33",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "False"
+       "0      -1\n",
+       "1      -1\n",
+       "2      -1\n",
+       "3      -1\n",
+       "4      -1\n",
+       "       ..\n",
+       "450    77\n",
+       "451    76\n",
+       "452    75\n",
+       "453    74\n",
+       "454    73\n",
+       "Name: bp, Length: 455, dtype: int64"
       ]
      },
-     "execution_count": 171,
+     "execution_count": 263,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "not(True)"
+    "coordinate_col=\"bp\"\n",
+    "dg[coordinate_col]"
    ]
   },
   {
diff --git a/mrdna/readers/test/test2.ipynb b/mrdna/readers/test/test2.ipynb
index 2ebc69d8abad1e817d8e18950e7739adf839d85a..825e255b883e0a49cde86e0bb75fda657d1bd01f 100644
--- a/mrdna/readers/test/test2.ipynb
+++ b/mrdna/readers/test/test2.ipynb
@@ -2,10 +2,18 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 584,
+   "execution_count": 1,
    "id": "9ea65628",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "pip3 install termcolor\n"
+     ]
+    }
+   ],
    "source": [
     "\n",
     "from cadnano.document import Document\n",
@@ -2835,11 +2843,18 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 648,
    "id": "38a3dacc-7991-4475-b356-44043fd90984",
    "metadata": {},
    "outputs": [],
-   "source": []
+   "source": [
+    "hp, bpr, tpr, eulerZ, mgroove = part.vh_properties.loc[0,\n",
+    "                                                                    ['helical_pitch',\n",
+    "                                                                     'bases_per_repeat',\n",
+    "                                                                     'turns_per_repeat',\n",
+    "                                                                     'eulerZ',\n",
+    "                                                                     'minor_groove_angle']]"
+   ]
   },
   {
    "cell_type": "code",
@@ -2920,140 +2935,2002 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 70,
+   "execution_count": 2,
    "id": "dbcb2c6d-2e3f-4952-b21e-c624ca2026dc",
    "metadata": {},
    "outputs": [],
    "source": [
-    "import scadnano as sc"
+    "import scadnano as sc\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 204,
+   "execution_count": 3,
    "id": "e7b1dda8-1c43-4f22-b7bb-54e006134cb5",
    "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['__abstractmethods__',\n",
+       " '__annotations__',\n",
+       " '__class__',\n",
+       " '__dataclass_fields__',\n",
+       " '__dataclass_params__',\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",
+       " '__post_init__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_abc_impl',\n",
+       " '_add_new_excel_plate_sheet',\n",
+       " '_assign_color_to_strand',\n",
+       " '_assign_colors_to_strands',\n",
+       " '_assign_default_helices_view_orders_to_groups',\n",
+       " '_build_domains_on_helix_lists',\n",
+       " '_cadnano_v2_color_of_stap',\n",
+       " '_cadnano_v2_fill_blank',\n",
+       " '_cadnano_v2_import_circular_strands_merge_first_last_domains',\n",
+       " '_cadnano_v2_import_explore_domains',\n",
+       " '_cadnano_v2_import_explore_strand',\n",
+       " '_cadnano_v2_import_extract_deletions',\n",
+       " '_cadnano_v2_import_extract_insertions',\n",
+       " '_cadnano_v2_import_find_5_end',\n",
+       " '_cadnano_v2_import_find_strand_color',\n",
+       " '_cadnano_v2_place_crossover',\n",
+       " '_cadnano_v2_place_strand',\n",
+       " '_cadnano_v2_place_strand_segment',\n",
+       " '_check_helix_offsets',\n",
+       " '_check_legal_design',\n",
+       " '_check_loopout_not_singleton',\n",
+       " '_check_loopouts_length',\n",
+       " '_check_loopouts_not_consecutive_or_singletons_or_zero_length',\n",
+       " '_check_loopouts_not_first_or_last_substrand',\n",
+       " '_check_mutually_exclusive_fields',\n",
+       " '_check_strand_has_legal_offsets_in_helices',\n",
+       " '_check_strand_references_legal_helices',\n",
+       " '_check_strands_overlap_legally',\n",
+       " '_check_strands_reference_helices_legally',\n",
+       " '_check_strands_with_same_name_agree_on_other_idt_fields',\n",
+       " '_check_two_consecutive_loopouts',\n",
+       " '_check_types',\n",
+       " '_default_group',\n",
+       " '_ensure_helices_distinct_objects',\n",
+       " '_ensure_helix_groups_exist',\n",
+       " '_ensure_mods_have_unique_vendor_codes',\n",
+       " '_ensure_strands_distinct_objects',\n",
+       " '_get_default_group',\n",
+       " '_get_multiple_of_x_sup_closest_to_y',\n",
+       " '_groups_and_grid_from_json',\n",
+       " '_has_default_groups',\n",
+       " '_helices_and_groups_and_grid_from_json',\n",
+       " '_helices_from_json',\n",
+       " '_helices_to_string',\n",
+       " '_idt_strands_to_export',\n",
+       " '_inline_deletions_insertions_on_helix',\n",
+       " '_normalize_helices_as_dict',\n",
+       " '_num_helix_groups',\n",
+       " '_prepare_nicks_for_full_crossover',\n",
+       " '_set_helices_grid_positions_or_positions',\n",
+       " '_set_helices_min_max_offsets',\n",
+       " '_setup_excel_file',\n",
+       " '_warn_if_strand_names_not_unique',\n",
+       " '_write_plates_assuming_explicit_plates_in_each_strand',\n",
+       " '_write_plates_default',\n",
+       " 'add_deletion',\n",
+       " 'add_full_crossover',\n",
+       " 'add_half_crossover',\n",
+       " 'add_helix',\n",
+       " 'add_insertion',\n",
+       " 'add_nick',\n",
+       " 'add_strand',\n",
+       " 'append_domain',\n",
+       " 'assign_dna',\n",
+       " 'assign_m13_to_scaffold',\n",
+       " 'assign_modifications_to_strands',\n",
+       " 'automatically_assign_color',\n",
+       " 'base_pairs',\n",
+       " 'color_cycler',\n",
+       " 'domain_at',\n",
+       " 'domains_at',\n",
+       " 'draw_strand',\n",
+       " 'from_cadnano_v2',\n",
+       " 'from_scadnano_file',\n",
+       " 'from_scadnano_json_map',\n",
+       " 'from_scadnano_json_str',\n",
+       " 'geometry',\n",
+       " 'grid',\n",
+       " 'groups',\n",
+       " 'helices',\n",
+       " 'helices_idxs_in_group',\n",
+       " 'helices_view_order',\n",
+       " 'inline_deletions_insertions',\n",
+       " 'insert_domain',\n",
+       " 'ligate',\n",
+       " 'modifications',\n",
+       " 'move_strand_offsets',\n",
+       " 'move_strands_on_helices',\n",
+       " 'pitch_of_helix',\n",
+       " 'plate_maps',\n",
+       " 'relax_helix_rolls',\n",
+       " 'remove_domain',\n",
+       " 'remove_strand',\n",
+       " 'reverse_all',\n",
+       " 'roll_of_helix',\n",
+       " 'scaffold',\n",
+       " 'set_end',\n",
+       " 'set_grid',\n",
+       " 'set_helices_view_order',\n",
+       " 'set_helix_idx',\n",
+       " 'set_major_tick_distance',\n",
+       " 'set_start',\n",
+       " 'strand',\n",
+       " 'strand_with_name',\n",
+       " 'strands',\n",
+       " 'strands_ending_on_helix',\n",
+       " 'strands_starting_on_helix',\n",
+       " 'to_cadnano_v2_json',\n",
+       " 'to_cadnano_v2_serializable',\n",
+       " 'to_idt_bulk_input_format',\n",
+       " 'to_json',\n",
+       " 'to_json_serializable',\n",
+       " 'to_oxdna_format',\n",
+       " 'to_oxview_format',\n",
+       " 'to_oxview_json',\n",
+       " 'write_cadnano_v2_file',\n",
+       " 'write_idt_bulk_input_file',\n",
+       " 'write_idt_plate_excel_file',\n",
+       " 'write_oxdna_files',\n",
+       " 'write_oxview_file',\n",
+       " 'write_scadnano_file',\n",
+       " 'yaw_of_helix']"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s=sc.Design.from_scadnano_file(\"loopout.sc\")\n",
+    "dir(s)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 65,
+   "id": "898974c3-dcbb-4374-bf1d-86c87a643d6e",
+   "metadata": {},
    "outputs": [],
    "source": [
-    "s=sc.Design.from_scadnano_file(\"loopout.sc\")"
+    "def gen_id_series(domain,design):\n",
+    "    df=pd.DataFrame(columns=[\"vh\",\"zid\",\"fwd\",\"r\"],index=range(domain.dna_length()),dtype=object)\n",
+    "    df[\"loopout\"]=False\n",
+    "    hid=domain.helix\n",
+    "    df[\"vh\"]=hid\n",
+    "    fwd=domain.forward\n",
+    "    df[\"fwd\"]=fwd\n",
+    "    x=design.helices[domain.helix].calculate_position(design.grid,design.geometry).x*10\n",
+    "    y=design.helices[domain.helix].calculate_position(design.grid,design.geometry).y*10     \n",
+    "    start=domain.start\n",
+    "    end=domain.end\n",
+    "    dels=domain.deletions\n",
+    "    loops=domain.insertions\n",
+    "    zids=[i for i in range(start,end)]\n",
+    "    if len(dels)>0:\n",
+    "        for d in dels:\n",
+    "            zids.pop(zids.index(d))\n",
+    "    if len(loops)>0:\n",
+    "        for ind,ins in loops:\n",
+    "            n=zids.index(ind)\n",
+    "            zids.pop(n)\n",
+    "            loop=[ind+round((j/(ins+1))*100)/100 for j in range(ins+1)]\n",
+    "            loop.reverse()\n",
+    "            for j in loop:\n",
+    "                zids.insert(n,j)\n",
+    "    df[\"zid\"]=zids\n",
+    "    if fwd==True:\n",
+    "        start5=domain.start\n",
+    "        end3=domain.end\n",
+    "        df[\"zid\"]=zids\n",
+    "    else:\n",
+    "        start5=domain.end\n",
+    "        end3=domain.start\n",
+    "        df[\"zid\"]=zids[::-1]\n",
+    "    df[\"x\"]=x\n",
+    "    df[\"y\"]=y\n",
+    "    df[\"z\"]=df[\"zid\"]*3.4\n",
+    "    df[\"orientation_angle\"]=[design.helices[hid].backbone_angle_at_offset(float(i),fwd,design.geometry) for i in df[\"zid\"]]\n",
+    "    df[\"stacked\"]=[True]*(domain.dna_length()-1)+[False]\n",
+    "    return [pd.Series(df.loc[i]) for i in df.index],(x,y,list(df[\"z\"])[-1])\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 213,
-   "id": "4e2dd66e-fe4d-4728-8233-60cb1d9b156a",
+   "execution_count": 66,
+   "id": "722d5ad3-52bc-4c95-856c-a0766e28c701",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 66,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "type(pd.DataFrame({\"seq\":np.arange(0,3),\"vh\":0})) is pd.DataFrame"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 67,
+   "id": "325c75d6-6951-439d-b2b3-ff2e74cc2245",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[0, 1, 2]"
+      ]
+     },
+     "execution_count": 67,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "list(pd.DataFrame({\"seq\":np.arange(0,3),\"vh\":0}).index)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 151,
+   "id": "76d1979d-74c2-4ffb-8dc5-659b889d52b6",
    "metadata": {},
    "outputs": [],
    "source": [
-    "tot=np.sum([i.dna_length() for i in s.strands])"
+    "\n",
+    "def gen_strand(strand,design,group_index=0):\n",
+    "    domain_list=[]\n",
+    "    for do in strand.domains:\n",
+    "        \n",
+    "        if type(do) is sc.scadnano.Domain:\n",
+    "            L,(x,y,z)=gen_id_series(do,design)\n",
+    "            if len(domain_list)>2:\n",
+    "                if type(domain_list[-1]) is pd.DataFrame:\n",
+    "                    loop=domain_list.pop(-1)\n",
+    "                    inds=loop.index\n",
+    "                    loop[\"x\"]=lx+(x-lx)*(loop.index+1)/(len(loop.index)+2)\n",
+    "                    loop[\"y\"]=ly+(y-ly)*(loop.index+1)/(len(loop.index)+2)\n",
+    "                    loop[\"z\"]=lz+(L[0][\"z\"]-lz)*(loop.index+1)/(len(loop.index)+2)\n",
+    "                    loop[\"orientation_angle\"]=0\n",
+    "                    L=[pd.Series(loop.loc[i]) for i in loop.index]+L\n",
+    "            domain_list=domain_list+L        \n",
+    "        elif type(do) is sc.scadnano.Loopout:\n",
+    "            \"\"\"\n",
+    "            for i in range(do.dna_length()):\n",
+    "                n=pd.Series({\"seq\":do.dna_sequence[i],\"fwd\":False,\"vh\":helix+0.5,\"zid\":end3,\"loopout\":True})\n",
+    "                domain_list.append(n)\n",
+    "            \"\"\"\n",
+    "            n=pd.DataFrame(columns=[\"loopout\",\"x\",\"y\",\"z\"],index=range(do.dna_length()),dtype=object)\n",
+    "            n[\"loopout\"]=True\n",
+    "            n[\"stacked\"]=False\n",
+    "            lx,ly,lz=(x,y,z)\n",
+    "            loop_out_length=do.dna_length()\n",
+    "            domain_list.append(n)\n",
+    "                \n",
+    "            \n",
+    "    strand_df=pd.DataFrame(domain_list).reset_index(drop=True)\n",
+    "    strand_df[\"threeprime\"]=list(strand_df.index[1:]+group_index)+[-1]\n",
+    "    stack=np.where(strand_df[\"stacked\"],strand_df[\"threeprime\"],-1)\n",
+    "    strand_df[\"stack\"]=stack\n",
+    "    strand_df[\"seq\"]=-1\n",
+    "    if strand.dna_sequence is not None:\n",
+    "        if len(strand.dna_sequence)==len(strand_df.index):\n",
+    "            strand_df[\"seq\"]=list(strand.dna_sequence)\n",
+    "            \n",
+    "    strand_df[\"index\"]=strand_df.index+group_index\n",
+    "    #strand_df[\"seg_index\"]=index\n",
+    "    return strand_df"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 152,
+   "id": "45e6434e-58a9-4aa2-b1f7-6b871daedba3",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def gen_prop_table(fname):\n",
+    "    sc_design=sc.Design.from_scadnano_file(fname)\n",
+    "    nt_list=[]\n",
+    "    group_index=0\n",
+    "    for i in range(len(sc_design.strands)):\n",
+    "        dfi=gen_strand(sc_design.strands[i],sc_design,group_index)\n",
+    "        group_index+=len(dfi.index)\n",
+    "        nt_list.append(dfi)\n",
+    "\n",
+    "    nt_prop=pd.concat(nt_list)\n",
+    "    nt_prop.set_index(\"index\",inplace=True)\n",
+    "    ## Generate bps\n",
+    "    bp_map={}\n",
+    "    for i in nt_prop.index:\n",
+    "        if nt_prop[\"loopout\"][i]==False:\n",
+    "            bp_map[(nt_prop[\"vh\"][i],nt_prop[\"zid\"][i],nt_prop[\"fwd\"][i])]=i\n",
+    "    ind_tuple=list(zip(nt_prop.index,nt_prop[\"vh\"],nt_prop[\"zid\"],nt_prop[\"fwd\"]))\n",
+    "    bp=-np.ones(len(nt_prop.index),dtype=int)\n",
+    "    for i,j,k,l in ind_tuple:\n",
+    "        try:\n",
+    "            bp[i]=bp_map[(j,k,not(l))]\n",
+    "        except:\n",
+    "            continue\n",
+    "    nt_prop[\"bp\"]=bp\n",
+    "    nt_prop[\"r\"]=list(np.array([nt_prop[\"x\"],nt_prop[\"y\"],nt_prop[\"z\"]],dtype=\"<f4\").T)\n",
+    "    return nt_prop"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 153,
+   "id": "44f994b6-6c49-4b8a-916b-7ac224558ded",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "n=gen_prop_table(\"test_insert.sc\")\n",
+    "n.to_csv(\"loopout.csv\")"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 214,
-   "id": "786068b5-fa4b-4c02-bdb8-a48af896cd09",
+   "execution_count": 150,
+   "id": "fae9db1a-6148-4cd6-9d30-6c6d8ccbcec6",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "135"
+       "vh                                 1.0\n",
+       "zid                               23.0\n",
+       "fwd                               True\n",
+       "r                    [0.0, 30.0, 78.2]\n",
+       "loopout                          False\n",
+       "x                                  0.0\n",
+       "y                                 30.0\n",
+       "z                                 78.2\n",
+       "orientation_angle            68.571429\n",
+       "stacked                          False\n",
+       "threeprime                          84\n",
+       "stack                               -1\n",
+       "seq                                  T\n",
+       "bp                                   0\n",
+       "Name: 83, dtype: object"
       ]
      },
-     "execution_count": 214,
+     "execution_count": 150,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "tot\n"
+    "n.loc[83]"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 207,
-   "id": "4952a867-7839-4d65-b3d3-228b401fa4de",
+   "execution_count": 117,
+   "id": "6db39eca-d003-4690-a140-18e6abb6b246",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "32"
+       "{(1.0, 23.0, False): 0,\n",
+       " (1.0, 22.0, False): 1,\n",
+       " (1.0, 21.0, False): 2,\n",
+       " (1.0, 19.0, False): 3,\n",
+       " (1.0, 18.0, False): 4,\n",
+       " (1.0, 17.0, False): 5,\n",
+       " (1.0, 16.0, False): 6,\n",
+       " (1.0, 15.0, False): 7,\n",
+       " (1.0, 14.0, False): 8,\n",
+       " (1.0, 13.0, False): 9,\n",
+       " (1.0, 12.0, False): 10,\n",
+       " (1.0, 11.0, False): 11,\n",
+       " (1.0, 10.0, False): 12,\n",
+       " (1.0, 9.0, False): 13,\n",
+       " (1.0, 8.0, False): 14,\n",
+       " (0.0, 8.0, True): 15,\n",
+       " (0.0, 9.0, True): 16,\n",
+       " (0.0, 10.0, True): 17,\n",
+       " (0.0, 11.0, True): 18,\n",
+       " (0.0, 12.0, True): 19,\n",
+       " (0.0, 13.0, True): 20,\n",
+       " (0.0, 14.0, True): 21,\n",
+       " (0.0, 14.5, True): 22,\n",
+       " (0.0, 15.0, True): 23,\n",
+       " (0.0, 16.0, True): 24,\n",
+       " (0.0, 17.0, True): 25,\n",
+       " (0.0, 18.0, True): 26,\n",
+       " (0.0, 19.0, True): 27,\n",
+       " (0.0, 20.0, True): 28,\n",
+       " (0.0, 21.0, True): 29,\n",
+       " (0.0, 22.0, True): 30,\n",
+       " (0.0, 23.0, True): 31,\n",
+       " (0.0, 24.0, True): 32,\n",
+       " (0.0, 25.0, True): 33,\n",
+       " (0.0, 26.0, True): 34,\n",
+       " (0.0, 26.33, True): 35,\n",
+       " (0.0, 26.67, True): 36,\n",
+       " (0.0, 27.0, True): 37,\n",
+       " (0.0, 28.0, True): 38,\n",
+       " (0.0, 29.0, True): 39,\n",
+       " (0.0, 30.0, True): 40,\n",
+       " (0.0, 31.0, True): 41,\n",
+       " (0.0, 32.0, True): 42,\n",
+       " (0.0, 33.0, True): 43,\n",
+       " (0.0, 34.0, True): 44,\n",
+       " (0.0, 35.0, True): 45,\n",
+       " (0.0, 36.0, True): 46,\n",
+       " (0.0, 37.0, True): 47,\n",
+       " (0.0, 38.0, True): 48,\n",
+       " (0.0, 39.0, True): 49,\n",
+       " (1.0, 39.0, False): 53,\n",
+       " (1.0, 38.0, False): 54,\n",
+       " (1.0, 37.0, False): 55,\n",
+       " (1.0, 36.0, False): 56,\n",
+       " (1.0, 35.0, False): 57,\n",
+       " (1.0, 34.0, False): 58,\n",
+       " (1.0, 33.0, False): 59,\n",
+       " (1.0, 32.0, False): 60,\n",
+       " (1.0, 31.0, False): 61,\n",
+       " (1.0, 30.0, False): 62,\n",
+       " (1.0, 29.0, False): 63,\n",
+       " (1.0, 28.0, False): 64,\n",
+       " (1.0, 27.0, False): 65,\n",
+       " (1.0, 26.0, False): 66,\n",
+       " (1.0, 25.0, False): 67,\n",
+       " (1.0, 24.0, False): 68,\n",
+       " (1.0, 8.0, True): 69,\n",
+       " (1.0, 9.0, True): 70,\n",
+       " (1.0, 10.0, True): 71,\n",
+       " (1.0, 11.0, True): 72,\n",
+       " (1.0, 12.0, True): 73,\n",
+       " (1.0, 13.0, True): 74,\n",
+       " (1.0, 14.0, True): 75,\n",
+       " (1.0, 15.0, True): 76,\n",
+       " (1.0, 16.0, True): 77,\n",
+       " (1.0, 17.0, True): 78,\n",
+       " (1.0, 18.0, True): 79,\n",
+       " (1.0, 19.0, True): 80,\n",
+       " (1.0, 21.0, True): 81,\n",
+       " (1.0, 22.0, True): 82,\n",
+       " (1.0, 23.0, True): 83,\n",
+       " (0.0, 23.0, False): 84,\n",
+       " (0.0, 22.0, False): 85,\n",
+       " (0.0, 21.0, False): 86,\n",
+       " (0.0, 20.0, False): 87,\n",
+       " (0.0, 19.0, False): 88,\n",
+       " (0.0, 18.0, False): 89,\n",
+       " (0.0, 17.0, False): 90,\n",
+       " (0.0, 16.0, False): 91,\n",
+       " (0.0, 15.0, False): 92,\n",
+       " (0.0, 14.5, False): 93,\n",
+       " (0.0, 14.0, False): 94,\n",
+       " (0.0, 13.0, False): 95,\n",
+       " (0.0, 12.0, False): 96,\n",
+       " (0.0, 11.0, False): 97,\n",
+       " (0.0, 10.0, False): 98,\n",
+       " (0.0, 9.0, False): 99,\n",
+       " (0.0, 8.0, False): 100,\n",
+       " (0.0, 39.0, False): 101,\n",
+       " (0.0, 38.0, False): 102,\n",
+       " (0.0, 37.0, False): 103,\n",
+       " (0.0, 36.0, False): 104,\n",
+       " (0.0, 35.0, False): 105,\n",
+       " (0.0, 34.0, False): 106,\n",
+       " (0.0, 33.0, False): 107,\n",
+       " (0.0, 32.0, False): 108,\n",
+       " (0.0, 31.0, False): 109,\n",
+       " (0.0, 30.0, False): 110,\n",
+       " (0.0, 29.0, False): 111,\n",
+       " (0.0, 28.0, False): 112,\n",
+       " (0.0, 27.0, False): 113,\n",
+       " (0.0, 26.67, False): 114,\n",
+       " (0.0, 26.33, False): 115,\n",
+       " (0.0, 26.0, False): 116,\n",
+       " (0.0, 25.0, False): 117,\n",
+       " (0.0, 24.0, False): 118,\n",
+       " (1.0, 24.0, True): 119,\n",
+       " (1.0, 25.0, True): 120,\n",
+       " (1.0, 26.0, True): 121,\n",
+       " (1.0, 27.0, True): 122,\n",
+       " (1.0, 28.0, True): 123,\n",
+       " (1.0, 29.0, True): 124,\n",
+       " (1.0, 30.0, True): 125,\n",
+       " (1.0, 31.0, True): 126,\n",
+       " (1.0, 32.0, True): 127,\n",
+       " (1.0, 33.0, True): 128,\n",
+       " (1.0, 34.0, True): 129,\n",
+       " (1.0, 35.0, True): 130,\n",
+       " (1.0, 36.0, True): 131,\n",
+       " (1.0, 37.0, True): 132,\n",
+       " (1.0, 38.0, True): 133,\n",
+       " (1.0, 39.0, True): 134}"
       ]
      },
-     "execution_count": 207,
+     "execution_count": 117,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "s.strands[1].dna_length()"
+    "bp_map={}\n",
+    "for i in nt_prop.index:\n",
+    "    if nt_prop[\"loopout\"][i]==False:\n",
+    "        bp_map[(nt_prop[\"vh\"][i],nt_prop[\"zid\"][i],nt_prop[\"fwd\"][i])]=i\n",
+    "bp_map"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 208,
-   "id": "5d1d1bea-7d71-476b-928b-18b5cf0bd2e5",
+   "execution_count": null,
+   "id": "4e4ae946-464f-4033-8462-5c5931198123",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 119,
+   "id": "8c52f71c-0333-4d50-a9f7-92dbe60226cb",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "34"
+       "[(0, 1.0, 23.0, False),\n",
+       " (1, 1.0, 22.0, False),\n",
+       " (2, 1.0, 21.0, False),\n",
+       " (3, 1.0, 19.0, False),\n",
+       " (4, 1.0, 18.0, False),\n",
+       " (5, 1.0, 17.0, False),\n",
+       " (6, 1.0, 16.0, False),\n",
+       " (7, 1.0, 15.0, False),\n",
+       " (8, 1.0, 14.0, False),\n",
+       " (9, 1.0, 13.0, False),\n",
+       " (10, 1.0, 12.0, False),\n",
+       " (11, 1.0, 11.0, False),\n",
+       " (12, 1.0, 10.0, False),\n",
+       " (13, 1.0, 9.0, False),\n",
+       " (14, 1.0, 8.0, False),\n",
+       " (15, 0.0, 8.0, True),\n",
+       " (16, 0.0, 9.0, True),\n",
+       " (17, 0.0, 10.0, True),\n",
+       " (18, 0.0, 11.0, True),\n",
+       " (19, 0.0, 12.0, True),\n",
+       " (20, 0.0, 13.0, True),\n",
+       " (21, 0.0, 14.0, True),\n",
+       " (22, 0.0, 14.5, True),\n",
+       " (23, 0.0, 15.0, True),\n",
+       " (24, 0.0, 16.0, True),\n",
+       " (25, 0.0, 17.0, True),\n",
+       " (26, 0.0, 18.0, True),\n",
+       " (27, 0.0, 19.0, True),\n",
+       " (28, 0.0, 20.0, True),\n",
+       " (29, 0.0, 21.0, True),\n",
+       " (30, 0.0, 22.0, True),\n",
+       " (31, 0.0, 23.0, True),\n",
+       " (32, 0.0, 24.0, True),\n",
+       " (33, 0.0, 25.0, True),\n",
+       " (34, 0.0, 26.0, True),\n",
+       " (35, 0.0, 26.33, True),\n",
+       " (36, 0.0, 26.67, True),\n",
+       " (37, 0.0, 27.0, True),\n",
+       " (38, 0.0, 28.0, True),\n",
+       " (39, 0.0, 29.0, True),\n",
+       " (40, 0.0, 30.0, True),\n",
+       " (41, 0.0, 31.0, True),\n",
+       " (42, 0.0, 32.0, True),\n",
+       " (43, 0.0, 33.0, True),\n",
+       " (44, 0.0, 34.0, True),\n",
+       " (45, 0.0, 35.0, True),\n",
+       " (46, 0.0, 36.0, True),\n",
+       " (47, 0.0, 37.0, True),\n",
+       " (48, 0.0, 38.0, True),\n",
+       " (49, 0.0, 39.0, True),\n",
+       " (50, nan, nan, nan),\n",
+       " (51, nan, nan, nan),\n",
+       " (52, nan, nan, nan),\n",
+       " (53, 1.0, 39.0, False),\n",
+       " (54, 1.0, 38.0, False),\n",
+       " (55, 1.0, 37.0, False),\n",
+       " (56, 1.0, 36.0, False),\n",
+       " (57, 1.0, 35.0, False),\n",
+       " (58, 1.0, 34.0, False),\n",
+       " (59, 1.0, 33.0, False),\n",
+       " (60, 1.0, 32.0, False),\n",
+       " (61, 1.0, 31.0, False),\n",
+       " (62, 1.0, 30.0, False),\n",
+       " (63, 1.0, 29.0, False),\n",
+       " (64, 1.0, 28.0, False),\n",
+       " (65, 1.0, 27.0, False),\n",
+       " (66, 1.0, 26.0, False),\n",
+       " (67, 1.0, 25.0, False),\n",
+       " (68, 1.0, 24.0, False),\n",
+       " (69, 1.0, 8.0, True),\n",
+       " (70, 1.0, 9.0, True),\n",
+       " (71, 1.0, 10.0, True),\n",
+       " (72, 1.0, 11.0, True),\n",
+       " (73, 1.0, 12.0, True),\n",
+       " (74, 1.0, 13.0, True),\n",
+       " (75, 1.0, 14.0, True),\n",
+       " (76, 1.0, 15.0, True),\n",
+       " (77, 1.0, 16.0, True),\n",
+       " (78, 1.0, 17.0, True),\n",
+       " (79, 1.0, 18.0, True),\n",
+       " (80, 1.0, 19.0, True),\n",
+       " (81, 1.0, 21.0, True),\n",
+       " (82, 1.0, 22.0, True),\n",
+       " (83, 1.0, 23.0, True),\n",
+       " (84, 0.0, 23.0, False),\n",
+       " (85, 0.0, 22.0, False),\n",
+       " (86, 0.0, 21.0, False),\n",
+       " (87, 0.0, 20.0, False),\n",
+       " (88, 0.0, 19.0, False),\n",
+       " (89, 0.0, 18.0, False),\n",
+       " (90, 0.0, 17.0, False),\n",
+       " (91, 0.0, 16.0, False),\n",
+       " (92, 0.0, 15.0, False),\n",
+       " (93, 0.0, 14.5, False),\n",
+       " (94, 0.0, 14.0, False),\n",
+       " (95, 0.0, 13.0, False),\n",
+       " (96, 0.0, 12.0, False),\n",
+       " (97, 0.0, 11.0, False),\n",
+       " (98, 0.0, 10.0, False),\n",
+       " (99, 0.0, 9.0, False),\n",
+       " (100, 0.0, 8.0, False),\n",
+       " (101, 0.0, 39.0, False),\n",
+       " (102, 0.0, 38.0, False),\n",
+       " (103, 0.0, 37.0, False),\n",
+       " (104, 0.0, 36.0, False),\n",
+       " (105, 0.0, 35.0, False),\n",
+       " (106, 0.0, 34.0, False),\n",
+       " (107, 0.0, 33.0, False),\n",
+       " (108, 0.0, 32.0, False),\n",
+       " (109, 0.0, 31.0, False),\n",
+       " (110, 0.0, 30.0, False),\n",
+       " (111, 0.0, 29.0, False),\n",
+       " (112, 0.0, 28.0, False),\n",
+       " (113, 0.0, 27.0, False),\n",
+       " (114, 0.0, 26.67, False),\n",
+       " (115, 0.0, 26.33, False),\n",
+       " (116, 0.0, 26.0, False),\n",
+       " (117, 0.0, 25.0, False),\n",
+       " (118, 0.0, 24.0, False),\n",
+       " (119, 1.0, 24.0, True),\n",
+       " (120, 1.0, 25.0, True),\n",
+       " (121, 1.0, 26.0, True),\n",
+       " (122, 1.0, 27.0, True),\n",
+       " (123, 1.0, 28.0, True),\n",
+       " (124, 1.0, 29.0, True),\n",
+       " (125, 1.0, 30.0, True),\n",
+       " (126, 1.0, 31.0, True),\n",
+       " (127, 1.0, 32.0, True),\n",
+       " (128, 1.0, 33.0, True),\n",
+       " (129, 1.0, 34.0, True),\n",
+       " (130, 1.0, 35.0, True),\n",
+       " (131, 1.0, 36.0, True),\n",
+       " (132, 1.0, 37.0, True),\n",
+       " (133, 1.0, 38.0, True),\n",
+       " (134, 1.0, 39.0, True)]"
       ]
      },
-     "execution_count": 208,
+     "execution_count": 119,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "s.strands[2].dna_length()"
+    "ind_tuple=list(zip(nt_prop.index,nt_prop[\"vh\"],nt_prop[\"zid\"],nt_prop[\"fwd\"]))\n",
+    "ind_tuple"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 187,
-   "id": "91b1be83-f406-47f3-8e63-11a0262a653a",
+   "execution_count": 355,
+   "id": "039b65c8-5a0d-4127-a2dc-2808ce11fba1",
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "[20]"
+       "(array([50, 51, 52]),)"
       ]
      },
-     "execution_count": 187,
+     "execution_count": 355,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "s.strands[0].domains[0].deletions"
+    "x=s.helices[0].calculate_position(s.grid,s.geometry)\n",
+    "np.where(m[\"loopout\"])"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 183,
-   "id": "e616db25-a0fa-47ea-917d-28f2ec18c67e",
+   "execution_count": 368,
+   "id": "570999f4-a7b9-400b-a61d-c1d66eaf0999",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def get_pos(design,vh,zid,fwd,loopout=False):\n",
+    "    if loopout==False:\n",
+    "        x=design.helices[int(vh)].calculate_position(design.grid,design.geometry).x\n",
+    "        y=design.helices[int(vh)].calculate_position(design.grid,design.geometry).y\n",
+    "        z=zid*3.4\n",
+    "        orientation_angle=design.helices[int(vh)].backbone_angle_at_offset(float(zid),True,design.geometry)\n",
+    "        return np.array([x,y,z]),orientation_angle\n",
+    "    else:\n",
+    "        return np.array([np.nan]*3),0"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 370,
+   "id": "b0e5cb3c-8cb4-4fd6-8fcc-1b63c7733acd",
    "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)]"
+       "(array([ 0. ,  0. , 40.8]), 51.428571428571445)"
       ]
      },
-     "execution_count": 183,
+     "execution_count": 370,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 371,
+   "id": "837c9a06-1e50-434d-b97b-70bfb8d20c42",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "NameError",
+     "evalue": "name 'vh' 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[371], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m s\u001b[38;5;241m.\u001b[39mhelices[\u001b[38;5;28mint\u001b[39m(\u001b[43mvh\u001b[49m)]\u001b[38;5;241m.\u001b[39mbackbone_angle_at_offset(\u001b[38;5;28mfloat\u001b[39m(zid),\u001b[38;5;28;01mTrue\u001b[39;00m,s\u001b[38;5;241m.\u001b[39mgeometry)\n",
+      "\u001b[0;31mNameError\u001b[0m: name 'vh' is not defined"
+     ]
+    }
+   ],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 225,
+   "id": "998f4321-f520-45f7-bffb-92177b6a0fec",
+   "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>loopout</th>\n",
+       "      <th>stacked</th>\n",
+       "      <th>seq</th>\n",
+       "      <th>bp</th>\n",
+       "      <th>seg_index</th>\n",
+       "      <th>threeprime</th>\n",
+       "      <th>stack</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>23</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>22</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>21</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>3</td>\n",
+       "      <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>19</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>4</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>18</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>5</td>\n",
+       "      <td>5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>64</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>28</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>65</td>\n",
+       "      <td>65</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>65</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>27</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>66</td>\n",
+       "      <td>66</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>66</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>26</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>67</td>\n",
+       "      <td>67</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>67</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>25</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>68</td>\n",
+       "      <td>68</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>68</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>24</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0</td>\n",
+       "      <td>-1</td>\n",
+       "      <td>-1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>69 rows × 10 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     vh zid    fwd loopout stacked  seq  bp  seg_index  threeprime  stack\n",
+       "0   1.0  23  False   False    True  NaN NaN          0           1      1\n",
+       "1   1.0  22  False   False    True  NaN NaN          0           2      2\n",
+       "2   1.0  21  False   False    True  NaN NaN          0           3      3\n",
+       "3   1.0  19  False   False    True  NaN NaN          0           4      4\n",
+       "4   1.0  18  False   False    True  NaN NaN          0           5      5\n",
+       "..  ...  ..    ...     ...     ...  ...  ..        ...         ...    ...\n",
+       "64  1.0  28  False   False    True  NaN NaN          0          65     65\n",
+       "65  1.0  27  False   False    True  NaN NaN          0          66     66\n",
+       "66  1.0  26  False   False    True  NaN NaN          0          67     67\n",
+       "67  1.0  25  False   False    True  NaN NaN          0          68     68\n",
+       "68  1.0  24  False   False   False  NaN NaN          0          -1     -1\n",
+       "\n",
+       "[69 rows x 10 columns]"
+      ]
+     },
+     "execution_count": 225,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "f"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 211,
+   "id": "10ec47a4-3221-468d-a185-b171c5bd82f6",
+   "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>stacked</th>\n",
+       "      <th>seq</th>\n",
+       "      <th>seg_index</th>\n",
+       "      <th>threeprime</th>\n",
+       "      <th>stack</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>23</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>A</td>\n",
+       "      <td>0</td>\n",
+       "      <td>70</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>22</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>A</td>\n",
+       "      <td>0</td>\n",
+       "      <td>71</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>21</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>C</td>\n",
+       "      <td>0</td>\n",
+       "      <td>72</td>\n",
+       "      <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>19</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>G</td>\n",
+       "      <td>0</td>\n",
+       "      <td>73</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>18</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>T</td>\n",
+       "      <td>0</td>\n",
+       "      <td>74</td>\n",
+       "      <td>5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>64</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>28</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>T</td>\n",
+       "      <td>0</td>\n",
+       "      <td>134</td>\n",
+       "      <td>65</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>65</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>27</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>A</td>\n",
+       "      <td>0</td>\n",
+       "      <td>135</td>\n",
+       "      <td>66</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>66</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>26</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>A</td>\n",
+       "      <td>0</td>\n",
+       "      <td>136</td>\n",
+       "      <td>67</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>67</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>25</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>C</td>\n",
+       "      <td>0</td>\n",
+       "      <td>137</td>\n",
+       "      <td>68</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>68</th>\n",
+       "      <td>1.0</td>\n",
+       "      <td>24</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>G</td>\n",
+       "      <td>0</td>\n",
+       "      <td>-1</td>\n",
+       "      <td>-1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>69 rows × 8 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     vh zid    fwd stacked seq  seg_index  threeprime  stack\n",
+       "0   1.0  23  False    True   A          0          70      1\n",
+       "1   1.0  22  False    True   A          0          71      2\n",
+       "2   1.0  21  False    True   C          0          72      3\n",
+       "3   1.0  19  False    True   G          0          73      4\n",
+       "4   1.0  18  False    True   T          0          74      5\n",
+       "..  ...  ..    ...     ...  ..        ...         ...    ...\n",
+       "64  1.0  28  False    True   T          0         134     65\n",
+       "65  1.0  27  False    True   A          0         135     66\n",
+       "66  1.0  26  False    True   A          0         136     67\n",
+       "67  1.0  25  False    True   C          0         137     68\n",
+       "68  1.0  24  False   False   G          0          -1     -1\n",
+       "\n",
+       "[69 rows x 8 columns]"
+      ]
+     },
+     "execution_count": 211,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "f1[\"threeprime\"]=list(f[\"threeprime\"]+f.index[-1]+1)[0:-1]+[-1]\n",
+    "f1"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 216,
+   "id": "4a136eaa-919b-4ad7-88be-42169cfab25f",
+   "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>index</th>\n",
+       "      <th>vh</th>\n",
+       "      <th>zid</th>\n",
+       "      <th>fwd</th>\n",
+       "      <th>stacked</th>\n",
+       "      <th>seq</th>\n",
+       "      <th>seg_index</th>\n",
+       "      <th>threeprime</th>\n",
+       "      <th>stack</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>0</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>23</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>A</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>22</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>A</td>\n",
+       "      <td>0</td>\n",
+       "      <td>2</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>2</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>21</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>C</td>\n",
+       "      <td>0</td>\n",
+       "      <td>3</td>\n",
+       "      <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>3</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>19</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>G</td>\n",
+       "      <td>0</td>\n",
+       "      <td>4</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>4</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>18</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>T</td>\n",
+       "      <td>0</td>\n",
+       "      <td>5</td>\n",
+       "      <td>5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>133</th>\n",
+       "      <td>64</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>28</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>T</td>\n",
+       "      <td>0</td>\n",
+       "      <td>134</td>\n",
+       "      <td>65</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>134</th>\n",
+       "      <td>65</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>27</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>A</td>\n",
+       "      <td>0</td>\n",
+       "      <td>135</td>\n",
+       "      <td>66</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>135</th>\n",
+       "      <td>66</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>26</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>A</td>\n",
+       "      <td>0</td>\n",
+       "      <td>136</td>\n",
+       "      <td>67</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>136</th>\n",
+       "      <td>67</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>25</td>\n",
+       "      <td>False</td>\n",
+       "      <td>True</td>\n",
+       "      <td>C</td>\n",
+       "      <td>0</td>\n",
+       "      <td>137</td>\n",
+       "      <td>68</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>137</th>\n",
+       "      <td>68</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>24</td>\n",
+       "      <td>False</td>\n",
+       "      <td>False</td>\n",
+       "      <td>G</td>\n",
+       "      <td>0</td>\n",
+       "      <td>-1</td>\n",
+       "      <td>-1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>138 rows × 9 columns</p>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "     index   vh zid    fwd stacked seq  seg_index  threeprime  stack\n",
+       "0        0  1.0  23  False    True   A          0           1      1\n",
+       "1        1  1.0  22  False    True   A          0           2      2\n",
+       "2        2  1.0  21  False    True   C          0           3      3\n",
+       "3        3  1.0  19  False    True   G          0           4      4\n",
+       "4        4  1.0  18  False    True   T          0           5      5\n",
+       "..     ...  ...  ..    ...     ...  ..        ...         ...    ...\n",
+       "133     64  1.0  28  False    True   T          0         134     65\n",
+       "134     65  1.0  27  False    True   A          0         135     66\n",
+       "135     66  1.0  26  False    True   A          0         136     67\n",
+       "136     67  1.0  25  False    True   C          0         137     68\n",
+       "137     68  1.0  24  False   False   G          0          -1     -1\n",
+       "\n",
+       "[138 rows x 9 columns]"
+      ]
+     },
+     "execution_count": 216,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "pd.concat([f,f1]).reset_index()\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "id": "fc6acf26-2c3a-405b-b905-dd116fc5c875",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "d1=gen_id_series(s.strands[0].domains[1])\n",
+    "d2=gen_id_series(s.strands[0].domains[0])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 48,
+   "id": "87066a06-49a9-4cd2-9082-135372adc0d7",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 48,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "type(s.strands[0].domains[0]) is sc.scadnano.Domain"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 52,
+   "id": "6cf497ad-08f1-4901-b855-bb44be284f87",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 52,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "type(s.strands[0].domains[2]) is sc.scadnano.Loopout"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "id": "27717aa9-0a17-444d-866a-50fc3fa31ca2",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Strand(domains=[Domain(, helix=1, forward=False, start=8, end=24, deletions=[20]), Domain(, helix=0, forward=True, start=8, end=40, insertions=[(14, 1), (26, 2)]), Loopout(3, ), Domain(, helix=1, forward=False, start=24, end=40)], circular=False, color=Color(r=0, g=102, b=204), vendor_fields=None, is_scaffold=True, modification_5p=None, modification_3p=None, modifications_int={}, name=None, label=None)"
+      ]
+     },
+     "execution_count": 43,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 34,
+   "id": "5dc7d2bf-5221-4afd-ad45-e97dab156d83",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "16"
+      ]
+     },
+     "execution_count": 34,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "len(n)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "id": "12fd269b-1dc5-488c-a246-0d91d9e2fdd5",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "20"
+      ]
+     },
+     "execution_count": 33,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "n=list(range(8,25))\n",
+    "n.pop(-5)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "ef80053e-350c-4c5a-ac94-c1ffbedc1e46",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "ValueError",
+     "evalue": "Length of values (16) does not match length of index (14)",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[22], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mgen_id_series\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstrands\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdomains\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n",
+      "Cell \u001b[0;32mIn[20], line 22\u001b[0m, in \u001b[0;36mgen_id_series\u001b[0;34m(domain)\u001b[0m\n\u001b[1;32m     20\u001b[0m         \u001b[38;5;28;01mfor\u001b[39;00m j \u001b[38;5;129;01min\u001b[39;00m loop:\n\u001b[1;32m     21\u001b[0m             zids\u001b[38;5;241m.\u001b[39minsert(n,j)\n\u001b[0;32m---> 22\u001b[0m \u001b[43mdf\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mzids\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241m=\u001b[39mzids\n\u001b[1;32m     23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fwd\u001b[38;5;241m==\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m     24\u001b[0m     df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstack_tuple\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mlist\u001b[39m(\u001b[38;5;28mzip\u001b[39m(df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvh\u001b[39m\u001b[38;5;124m\"\u001b[39m],df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mzid\u001b[39m\u001b[38;5;124m\"\u001b[39m],df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfwd\u001b[39m\u001b[38;5;124m\"\u001b[39m]))[\u001b[38;5;241m1\u001b[39m:]\u001b[38;5;241m+\u001b[39m[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/pandas/core/frame.py:3950\u001b[0m, in \u001b[0;36mDataFrame.__setitem__\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m   3947\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_setitem_array([key], value)\n\u001b[1;32m   3948\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m   3949\u001b[0m     \u001b[38;5;66;03m# set column\u001b[39;00m\n\u001b[0;32m-> 3950\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_set_item\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/pandas/core/frame.py:4143\u001b[0m, in \u001b[0;36mDataFrame._set_item\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m   4133\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_set_item\u001b[39m(\u001b[38;5;28mself\u001b[39m, key, value) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m   4134\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m   4135\u001b[0m \u001b[38;5;124;03m    Add series to DataFrame in specified column.\u001b[39;00m\n\u001b[1;32m   4136\u001b[0m \n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   4141\u001b[0m \u001b[38;5;124;03m    ensure homogeneity.\u001b[39;00m\n\u001b[1;32m   4142\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m-> 4143\u001b[0m     value \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sanitize_column\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   4145\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m   4146\u001b[0m         key \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\n\u001b[1;32m   4147\u001b[0m         \u001b[38;5;129;01mand\u001b[39;00m value\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m   4148\u001b[0m         \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_extension_array_dtype(value)\n\u001b[1;32m   4149\u001b[0m     ):\n\u001b[1;32m   4150\u001b[0m         \u001b[38;5;66;03m# broadcast across multiple columns if necessary\u001b[39;00m\n\u001b[1;32m   4151\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mis_unique \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns, MultiIndex):\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/pandas/core/frame.py:4870\u001b[0m, in \u001b[0;36mDataFrame._sanitize_column\u001b[0;34m(self, value)\u001b[0m\n\u001b[1;32m   4867\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m _reindex_for_setitem(Series(value), \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex)\n\u001b[1;32m   4869\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_list_like(value):\n\u001b[0;32m-> 4870\u001b[0m     \u001b[43mcom\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequire_length_match\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   4871\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m sanitize_array(value, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex, copy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, allow_2d\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/pandas/core/common.py:576\u001b[0m, in \u001b[0;36mrequire_length_match\u001b[0;34m(data, index)\u001b[0m\n\u001b[1;32m    572\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    573\u001b[0m \u001b[38;5;124;03mCheck the length of data matches the length of the index.\u001b[39;00m\n\u001b[1;32m    574\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    575\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(data) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(index):\n\u001b[0;32m--> 576\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m    577\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLength of values \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    578\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m(\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(data)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m) \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    579\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdoes not match length of index \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    580\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m(\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(index)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    581\u001b[0m     )\n",
+      "\u001b[0;31mValueError\u001b[0m: Length of values (16) does not match length of index (14)"
+     ]
+    }
+   ],
+   "source": [
+    "gen_id_series(s.strands[0].domains[0])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "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": 18,
+   "id": "4952a867-7839-4d65-b3d3-228b401fa4de",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[Domain(, helix=1, forward=True, start=8, end=24, deletions=[20]),\n",
+       " Domain(, helix=0, forward=False, start=8, end=24, insertions=[(14, 1)])]"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[1].domains"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 626,
+   "id": "5d1d1bea-7d71-476b-928b-18b5cf0bd2e5",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Strand(domains=[Domain(, helix=0, forward=False, start=24, end=40, insertions=[(26, 2)]), Domain(, helix=1, forward=True, start=24, end=40)], circular=False, color=Color(r=87, g=187, b=0), vendor_fields=None, is_scaffold=False, modification_5p=Modification5Prime(display_text='B', vendor_code='/5Biosg/', connector_length=4), modification_3p=None, modifications_int={}, name=None, label=None)"
+      ]
+     },
+     "execution_count": 626,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[2]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "id": "91b1be83-f406-47f3-8e63-11a0262a653a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'AACGTAACGTAACGTAACGTAACGTAACGTAACGT'"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.helices[0].domains[0].dna_sequence"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 723,
+   "id": "e616db25-a0fa-47ea-917d-28f2ec18c67e",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "0"
+      ]
+     },
+     "execution_count": 723,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.helices[0].domains[0].helix"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 721,
+   "id": "216ec8a1-d779-4725-b3c2-4a2f01c3dd52",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Position3D(x=0.0, y=3.0, z=0)"
+      ]
+     },
+     "execution_count": 721,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.helices[1].calculate_position(s.grid,s.geometry)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 700,
+   "id": "0d5d750d-f978-4096-b819-8a26ca2be63d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[20]"
+      ]
+     },
+     "execution_count": 700,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.helices[1]._domains[0].deletions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 710,
+   "id": "855c45bb-5744-48ff-9ea3-4a7ab6221208",
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "AttributeError",
+     "evalue": "'Domain' object has no attribute 'backbone_angle_at_offset'",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[710], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43ms\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhelices\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdomains\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackbone_angle_at_offset\u001b[49m(\u001b[38;5;241m12\u001b[39m,\u001b[38;5;28;01mTrue\u001b[39;00m,s\u001b[38;5;241m.\u001b[39mgeometry)\n",
+      "\u001b[0;31mAttributeError\u001b[0m: 'Domain' object has no attribute 'backbone_angle_at_offset'"
+     ]
+    }
+   ],
+   "source": [
+    "s.helices[0].domains[0].backbone_angle_at_offset(12,True,s.geometry)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 726,
+   "id": "7af4b044-e9e9-43e3-ab29-1cac35a9ac46",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def gen_id_series(domain):\n",
+    "\n",
+    "    df=pd.DataFrame(columns=[\"vh\",\"zid\",\"fwd\",\"stack_tuple\",\"threeprime_tuple\"],index=range(domain.dna_length()),dtype=object)\n",
+    "    df[\"vh\"]=domain.helix\n",
+    "    fwd=domain.forward\n",
+    "    df[\"fwd\"]=fwd\n",
+    "    start=domain.start\n",
+    "    end=domain.end\n",
+    "    dels=domain.deletions\n",
+    "    loops=domain.insertions\n",
+    "    zids=[str(i) for i in range(start,end+1)]\n",
+    "    if len(dels)>0:\n",
+    "        for d in dels:\n",
+    "            zids.pop(zids.index(str(d)))\n",
+    "    if len(loops)>0:\n",
+    "        for ind,ins in loops:\n",
+    "            n=zids.index(str(ind))\n",
+    "            zids.pop(n)\n",
+    "            loop=[str(ind)+\".\"+str(j) for j in range(ins+1)]\n",
+    "            loop.reverse()\n",
+    "            for j in loop:\n",
+    "                zids.insert(n,j)\n",
+    "    print(zids)\n",
+    "    df[\"zids\"]=zids\n",
+    "    if fwd==True:\n",
+    "        df[\"stack_tuple\"]=list(zip(df[\"vh\"],df[\"zid\"],df[\"fwd\"]))[1:]+[-1]\n",
+    "    else:\n",
+    "        df[\"stack_tuple\"]=[-1]+list(zip(df[\"vh\"],df[\"zid\"],df[\"fwd\"]))[0:-1]\n",
+    "        \n",
+    "    if len(domain.dna_sequence)==domain.dna_length():\n",
+    "        df[\"seq\"]=list(domain.dna_sequence)\n",
+    "    else:\n",
+    "        df[\"seq\"]=-1\n",
+    "\n",
+    "    return [pd.Series(df.loc[i]) for i in df.index]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 734,
+   "id": "3c488e25-5333-4a34-bbe4-6467dc291894",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[Domain(, helix=1, forward=False, start=8, end=24, deletions=[20]),\n",
+       " Domain(, helix=0, forward=True, start=8, end=40, insertions=[(14, 1), (26, 2)]),\n",
+       " Loopout(3, ),\n",
+       " Domain(, helix=1, forward=False, start=24, end=40)]"
+      ]
+     },
+     "execution_count": 734,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[0].domains"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 741,
+   "id": "d9c3d962-831f-4b5f-b889-e6173f7e2c5c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Domain(, helix=1, forward=False, start=8, end=24, deletions=[20])"
+      ]
+     },
+     "execution_count": 741,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.strands[0].first_domain()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "eff8f4a8-a228-40d5-8487-e091b1c425d9",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 728,
+   "id": "eb4f45b4-3064-4238-830b-0dfea9a0e99d",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[(14, 1), (26, 2)]"
+      ]
+     },
+     "execution_count": 728,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.helices[0].domains[0].insertions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 729,
+   "id": "42960c56-4516-4021-989a-4e2848ad4215",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "Domain(, helix=0, forward=True, start=8, end=40, insertions=[(14, 1), (26, 2)])"
+      ]
+     },
+     "execution_count": 729,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.helices[0].domains[0]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 727,
+   "id": "2c4153a3-88a1-4b6a-ac1d-0bdd3d9ef621",
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "['8', '9', '10', '11', '12', '13', '14.0', '14.1', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26.0', '26.1', '26.2', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40']\n"
+     ]
+    },
+    {
+     "ename": "ValueError",
+     "evalue": "Length of values (36) does not match length of index (35)",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
+      "Cell \u001b[0;32mIn[727], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mgen_id_series\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhelices\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdomains\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n",
+      "Cell \u001b[0;32mIn[726], line 24\u001b[0m, in \u001b[0;36mgen_id_series\u001b[0;34m(domain)\u001b[0m\n\u001b[1;32m     22\u001b[0m             zids\u001b[38;5;241m.\u001b[39minsert(n,j)\n\u001b[1;32m     23\u001b[0m \u001b[38;5;28mprint\u001b[39m(zids)\n\u001b[0;32m---> 24\u001b[0m \u001b[43mdf\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mzids\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241m=\u001b[39mzids\n\u001b[1;32m     25\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fwd\u001b[38;5;241m==\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m     26\u001b[0m     df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstack_tuple\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mlist\u001b[39m(\u001b[38;5;28mzip\u001b[39m(df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvh\u001b[39m\u001b[38;5;124m\"\u001b[39m],df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mzid\u001b[39m\u001b[38;5;124m\"\u001b[39m],df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfwd\u001b[39m\u001b[38;5;124m\"\u001b[39m]))[\u001b[38;5;241m1\u001b[39m:]\u001b[38;5;241m+\u001b[39m[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/pandas/core/frame.py:3950\u001b[0m, in \u001b[0;36mDataFrame.__setitem__\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m   3947\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_setitem_array([key], value)\n\u001b[1;32m   3948\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m   3949\u001b[0m     \u001b[38;5;66;03m# set column\u001b[39;00m\n\u001b[0;32m-> 3950\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_set_item\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/pandas/core/frame.py:4143\u001b[0m, in \u001b[0;36mDataFrame._set_item\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m   4133\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_set_item\u001b[39m(\u001b[38;5;28mself\u001b[39m, key, value) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m   4134\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m   4135\u001b[0m \u001b[38;5;124;03m    Add series to DataFrame in specified column.\u001b[39;00m\n\u001b[1;32m   4136\u001b[0m \n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   4141\u001b[0m \u001b[38;5;124;03m    ensure homogeneity.\u001b[39;00m\n\u001b[1;32m   4142\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m-> 4143\u001b[0m     value \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sanitize_column\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   4145\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m   4146\u001b[0m         key \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\n\u001b[1;32m   4147\u001b[0m         \u001b[38;5;129;01mand\u001b[39;00m value\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m   4148\u001b[0m         \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m is_extension_array_dtype(value)\n\u001b[1;32m   4149\u001b[0m     ):\n\u001b[1;32m   4150\u001b[0m         \u001b[38;5;66;03m# broadcast across multiple columns if necessary\u001b[39;00m\n\u001b[1;32m   4151\u001b[0m         \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mis_unique \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns, MultiIndex):\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/pandas/core/frame.py:4870\u001b[0m, in \u001b[0;36mDataFrame._sanitize_column\u001b[0;34m(self, value)\u001b[0m\n\u001b[1;32m   4867\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m _reindex_for_setitem(Series(value), \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex)\n\u001b[1;32m   4869\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_list_like(value):\n\u001b[0;32m-> 4870\u001b[0m     \u001b[43mcom\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequire_length_match\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   4871\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m sanitize_array(value, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex, copy\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, allow_2d\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n",
+      "File \u001b[0;32m/usr/local/Caskroom/miniconda/base/lib/python3.8/site-packages/pandas/core/common.py:576\u001b[0m, in \u001b[0;36mrequire_length_match\u001b[0;34m(data, index)\u001b[0m\n\u001b[1;32m    572\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    573\u001b[0m \u001b[38;5;124;03mCheck the length of data matches the length of the index.\u001b[39;00m\n\u001b[1;32m    574\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m    575\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(data) \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(index):\n\u001b[0;32m--> 576\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m    577\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mLength of values \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    578\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m(\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(data)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m) \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    579\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdoes not match length of index \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    580\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m(\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(index)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m)\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    581\u001b[0m     )\n",
+      "\u001b[0;31mValueError\u001b[0m: Length of values (36) does not match length of index (35)"
+     ]
+    }
+   ],
+   "source": [
+    "gen_id_series(s.helices[0].domains[0])\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "83578dcc-15c5-4112-9225-ba93370bfd3c",
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 672,
+   "id": "09e48bf8-ae24-4d32-817e-f576a9ca019c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "51.428571428571445"
+      ]
+     },
+     "execution_count": 672,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "s.helices[0].backbone_angle_at_offset(12,True,s.geometry)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 642,
+   "id": "9517ec2a-d5f9-4a7f-8af9-1d042486b6c5",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['__abstractmethods__',\n",
+       " '__annotations__',\n",
+       " '__class__',\n",
+       " '__dataclass_fields__',\n",
+       " '__dataclass_params__',\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",
+       " '__post_init__',\n",
+       " '__reduce__',\n",
+       " '__reduce_ex__',\n",
+       " '__repr__',\n",
+       " '__setattr__',\n",
+       " '__sizeof__',\n",
+       " '__slots__',\n",
+       " '__str__',\n",
+       " '__subclasshook__',\n",
+       " '__weakref__',\n",
+       " '_abc_impl',\n",
+       " '_domains',\n",
+       " 'backbone_angle_at_offset',\n",
+       " 'calculate_major_ticks',\n",
+       " 'calculate_position',\n",
+       " 'compute_relaxed_roll_delta',\n",
+       " 'crossover_addresses',\n",
+       " 'default_grid_position',\n",
+       " 'domains',\n",
+       " 'from_json',\n",
+       " 'grid_position',\n",
+       " 'group',\n",
+       " 'idx',\n",
+       " 'major_tick_distance',\n",
+       " 'major_tick_distance_is_default',\n",
+       " 'major_tick_periodic_distances',\n",
+       " 'major_tick_periodic_distances_is_default',\n",
+       " 'major_tick_start',\n",
+       " 'major_tick_start_is_default',\n",
+       " 'major_ticks',\n",
+       " 'major_ticks_is_default',\n",
+       " 'max_offset',\n",
+       " 'min_offset',\n",
+       " 'min_offset_is_default',\n",
+       " 'position',\n",
+       " 'relax_roll',\n",
+       " 'roll',\n",
+       " 'to_json_serializable']"
+      ]
+     },
+     "execution_count": 642,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "s.helices[1]._domains"
+    "dir(s.helices[0])"
    ]
   },
   {