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])" ] }, {