From ef81ba73587266663dcd208cb03b877d499b8f6b Mon Sep 17 00:00:00 2001 From: dr3y Date: Mon, 27 May 2019 13:52:34 -0700 Subject: [PATCH 01/43] Update README.md text to update library from my repo --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index bce113e..380fa1c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +pip install --upgrade --no-deps git+git://github.com/dr3y/dnaplotlib.git@master + # DNAplotlib DNAplotlib is a library that enables highly customizable visualization of individual genetic constructs and libraries of design variants. It can be thought of in many ways as matplotlib for genetic diagrams. Publication quality vector-based output is produced and all aspects of the rendering process can be easily customized or replaced by the user. DNAplotlib is capable of SBOL Visual compliant diagrams in addition to a format able to better illustrate the precise location and length of each genetic part. This alternative "traced-based" visualization method enables direct comparison with nucleotide-level information such as RNA-seq read depth or other base resolution measures. While it is envisaged that access will be predominantly via the programming interface, several easy to use text-based input formats can be processed by a command-line scripts to facilitate broader usage. DNAplotlib is cross-platform and open-source software released under the OSI OSL-3.0 license. From fd930f866bc633f4bd49a51587eb7e8f3e6dc427 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 14:00:49 -0700 Subject: [PATCH 02/43] added recombinase site renderers --- dnaplotlib/dnaplotlib.py | 550 +++++++++++++++++++++++++-------------- 1 file changed, 350 insertions(+), 200 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index ff6ab05..9dc9caa 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -4,21 +4,21 @@ ========== This module is designed to allow for highly customisable visualisation of DNA fragments. Diagrams can be in the form of conceptual SBOL compliant icons or - make use of icons whose width is scaled to allow for easier comparison of part + make use of icons whose width is scaled to allow for easier comparison of part locations to trace information, such as for corresponding RNA-seq read depth - data. All plotting is performed using matplotlib and to an axis object. This + data. All plotting is performed using matplotlib and to an axis object. This enables the export of publication quality, vector-based figures. Furthermore, - all standard renderers can be replaced with user defined versions to allow + all standard renderers can be replaced with user defined versions to allow for full customisation of the plot. - To make use of this module it is necessary to create the rendering object + To make use of this module it is necessary to create the rendering object after importing the module: > import dnaplotlib as dpl > dr = dpl.DNARenderer() This object performs all rendering using the renderDNA() method. To describe - what should be plotted, dnaplotlib requires the DNA design in a specific + what should be plotted, dnaplotlib requires the DNA design in a specific format. For standard SBOL diagrams a design is a list of dictionaries where each dictionary relates to a specific part and as a minimum contains the keys: @@ -40,7 +40,7 @@ > start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) The function returns the start and end point of the design which can then - be used for resizing the axes and figure. For more advanced use cases we + be used for resizing the axes and figure. For more advanced use cases we advise looking at the gallery distributed with this module. """ @@ -100,7 +100,7 @@ def write_label (ax, label_text, x_pos, opts=None): if 'label_rotation' in list(opts.keys()): label_rotation = opts['label_rotation'] ax.text(x_pos+label_x_offset, label_y_offset+y_offset, label_text, horizontalalignment='center', - verticalalignment='center', fontsize=label_size, fontstyle=label_style, + verticalalignment='center', fontsize=label_size, fontstyle=label_style, color=label_color, rotation=label_rotation, zorder=30+zorder_add) @@ -152,17 +152,17 @@ def sbol_promoter (ax, type, num, start, end, prev_end, scale, linewidth, opts): end = start+x_extent final_end = end+end_pad # Draw the promoter symbol - l1 = Line2D([start,start],[0,dir_fac*y_extent], linewidth=linewidth, + l1 = Line2D([start,start],[0,dir_fac*y_extent], linewidth=linewidth, color=color, zorder=9+zorder_add) l2 = Line2D([start,start+dir_fac*x_extent-dir_fac*(arrowhead_length*0.5)], - [dir_fac*y_extent,dir_fac*y_extent], linewidth=linewidth, + [dir_fac*y_extent,dir_fac*y_extent], linewidth=linewidth, color=color, zorder=10+zorder_add) ax.add_line(l1) ax.add_line(l2) - p1 = Polygon([(start+dir_fac*x_extent-dir_fac*arrowhead_length, - dir_fac*y_extent+(arrowhead_height)), + p1 = Polygon([(start+dir_fac*x_extent-dir_fac*arrowhead_length, + dir_fac*y_extent+(arrowhead_height)), (start+dir_fac*x_extent, dir_fac*y_extent), - (start+dir_fac*x_extent-dir_fac*arrowhead_length, + (start+dir_fac*x_extent-dir_fac*arrowhead_length, dir_fac*y_extent-(arrowhead_height))], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=1+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 @@ -233,15 +233,15 @@ def sbol_cds (ax, type, num, start, end, prev_end, scale, linewidth, opts): end = start+x_extent final_end = end+end_pad # Draw the CDS symbol - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (end-dir_fac*arrowhead_length, -y_extent), (end-dir_fac*arrowhead_length, -y_extent-arrowhead_height), (end, 0), (end-dir_fac*arrowhead_length, y_extent+arrowhead_height), (end-dir_fac*arrowhead_length, y_extent)], - edgecolor=edgecolor, facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=11+zorder_add, + edgecolor=edgecolor, facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=11+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 ax.add_patch(p1) if opts != None and 'label' in list(opts.keys()): @@ -297,9 +297,9 @@ def sbol_terminator (ax, type, num, start, end, prev_end, scale, linewidth, opts end = start+x_extent final_end = end+end_pad # Draw the terminator symbol - l1 = Line2D([start+dir_fac*(x_extent/2.0),start+dir_fac*(x_extent/2.0)],[0,dir_fac*y_extent], linewidth=linewidth, + l1 = Line2D([start+dir_fac*(x_extent/2.0),start+dir_fac*(x_extent/2.0)],[0,dir_fac*y_extent], linewidth=linewidth, color=color, zorder=8+zorder_add) - l2 = Line2D([start,start+(dir_fac*x_extent)],[dir_fac*y_extent,dir_fac*y_extent], + l2 = Line2D([start,start+(dir_fac*x_extent)],[dir_fac*y_extent,dir_fac*y_extent], linewidth=linewidth, color=color, zorder=9+zorder_add) ax.add_line(l1) ax.add_line(l2) @@ -352,7 +352,7 @@ def sbol_rbs (ax, type, num, start, end, prev_end, scale, linewidth, opts): end = prev_end+end_pad final_end = start+start_pad rbs_center = (end+((start-end)/2.0),0) - w1 = Wedge(rbs_center, x_extent/2.0, 180, 360, linewidth=linewidth, + w1 = Wedge(rbs_center, x_extent/2.0, 180, 360, linewidth=linewidth, facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) ax.add_patch(w1) else: @@ -360,7 +360,7 @@ def sbol_rbs (ax, type, num, start, end, prev_end, scale, linewidth, opts): end = start+x_extent final_end = end+end_pad rbs_center = (start+((end-start)/2.0),0) - w1 = Wedge(rbs_center, x_extent/2.0, 0, 180, linewidth=linewidth, + w1 = Wedge(rbs_center, x_extent/2.0, 0, 180, linewidth=linewidth, facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) ax.add_patch(w1) if opts != None and 'label' in list(opts.keys()): @@ -435,20 +435,20 @@ def stick_figure (ax, type, num, start, end, prev_end, scale, linewidth, opts): end = prev_end+end_pad final_end = start+start_pad rbs_center = (end+((start-end)/2.0),-y_extent) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=8+zorder_add) - x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.5], + x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.5], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[-y_extent/1.5,-y_extent*1.25], + x2 = Line2D([start,end],[-y_extent/1.5,-y_extent*1.25], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent/4], + dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent/4], linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[-y_extent/2,-y_extent+(x_extent/2.0)], + dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[-y_extent/2,-y_extent+(x_extent/2.0)], linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent+(x_extent/2.0)], + solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent+(x_extent/2.0)], linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent], + solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent], linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) if(headgroup == "O" and linetype == "dash"): @@ -472,20 +472,20 @@ def stick_figure (ax, type, num, start, end, prev_end, scale, linewidth, opts): end = start+x_extent final_end = end+end_pad rbs_center = (start+((end-start)/2.0),y_extent) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=8+zorder_add) - x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.5], + x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.5], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[y_extent/1.5,y_extent*1.25], + x2 = Line2D([start,end],[y_extent/1.5,y_extent*1.25], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent/4], + dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent/4], linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[y_extent/2,y_extent-(x_extent/2.0)], + dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[y_extent/2,y_extent-(x_extent/2.0)], linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent-(x_extent/2.0)], + solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent-(x_extent/2.0)], linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], + solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) if(headgroup == 'O' and linetype == 'dash'): @@ -504,7 +504,7 @@ def stick_figure (ax, type, num, start, end, prev_end, scale, linewidth, opts): ax.add_line(x1) ax.add_line(x2) ax.add_line(solidX) - + if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) @@ -834,17 +834,17 @@ def sbol_scar (ax, type, num, start, end, prev_end, scale, linewidth, opts): start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + + l_top = Line2D([start,start+x_extent],[y_extent,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start,start+x_extent],[-1*y_extent,-1*y_extent], + l_bottom = Line2D([start,start+x_extent],[-1*y_extent,-1*y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (start+x_extent, -y_extent), (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) @@ -928,18 +928,18 @@ def sbol_5_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + + l_top = Line2D([start,start+x_extent],[y_extent,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start+(x_extent/2.0),start+x_extent],[-1*y_extent,-1*y_extent], + l_bottom = Line2D([start+(x_extent/2.0),start+x_extent],[-1*y_extent,-1*y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (start+x_extent, -y_extent), (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) ax.add_line(l_top) @@ -995,18 +995,18 @@ def sbol_3_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + + l_top = Line2D([start,start+x_extent],[y_extent,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start,start+(x_extent/2.0)],[-1*y_extent,-1*y_extent], + l_bottom = Line2D([start,start+(x_extent/2.0)],[-1*y_extent,-1*y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (start+x_extent, -y_extent), (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) ax.add_line(l_top) @@ -1058,7 +1058,7 @@ def sbol_blunt_restriction_site (ax, type, num, start, end, prev_end, scale, lin linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - + # Direction is meaningless for this part => start is always < end if start > end: temp_end = end @@ -1071,21 +1071,21 @@ def sbol_blunt_restriction_site (ax, type, num, start, end, prev_end, scale, lin start = prev_end+start_pad end = start+x_extent+site_space+x_extent final_end = end+end_pad - - l1 = Line2D([start+x_extent,start+x_extent],[-y_extent,y_extent], + + l1 = Line2D([start+x_extent,start+x_extent],[-y_extent,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start,start+x_extent],[y_extent,y_extent], + l1_top = Line2D([start,start+x_extent],[y_extent,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start,start+x_extent],[-y_extent,-y_extent], + l1_bottom = Line2D([start,start+x_extent],[-y_extent,-y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l2 = Line2D([end-x_extent,end-x_extent],[-y_extent,y_extent], + l2 = Line2D([end-x_extent,end-x_extent],[-y_extent,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l2_top = Line2D([end,end-x_extent],[y_extent,y_extent], + l2_top = Line2D([end,end-x_extent],[y_extent,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l2_bottom = Line2D([end,end-x_extent],[-y_extent,-y_extent], + l2_bottom = Line2D([end,end-x_extent],[-y_extent,-y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - + ax.add_line(l1) ax.add_line(l1_top) ax.add_line(l1_bottom) @@ -1136,7 +1136,7 @@ def sbol_primer_binding_site (ax, type, num, start, end, prev_end, scale, linewi linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - + direction = 'F' if start > end: direction = 'R' @@ -1217,7 +1217,7 @@ def sbol_5_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - + # Direction is meaningless for this part => start is always < end if start > end: temp_end = end @@ -1230,24 +1230,24 @@ def sbol_5_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, start = prev_end+start_pad end = start+end_space+x_extent+end_space final_end = end+end_pad - - l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], + + l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start+end_space,start+end_space],[0,y_extent], + l1_top = Line2D([start+end_space,start+end_space],[0,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,-y_extent], + l1_bottom = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,-y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) ax.add_line(l1) ax.add_line(l1_top) ax.add_line(l1_bottom) # White rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (end, -y_extent), (end, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) @@ -1291,7 +1291,7 @@ def sbol_3_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - + # Direction is meaningless for this part => start is always < end if start > end: temp_end = end @@ -1304,24 +1304,24 @@ def sbol_3_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, start = prev_end+start_pad end = start+end_space+x_extent+end_space final_end = end+end_pad - - l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], + + l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,y_extent], + l1_top = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start+end_space,start+end_space],[0,-y_extent], + l1_bottom = Line2D([start+end_space,start+end_space],[0,-y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) ax.add_line(l1) ax.add_line(l1_top) ax.add_line(l1_bottom) # White rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (end, -y_extent), (end, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) @@ -1372,17 +1372,17 @@ def sbol_user_defined (ax, type, num, start, end, prev_end, scale, linewidth, o start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - + #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (start+x_extent, -y_extent), (start+x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) - + if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) @@ -1429,7 +1429,7 @@ def sbol_signature (ax, type, num, start, end, prev_end, scale, linewidth, opts linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - + direction = 'F' if start > end: direction = 'R' @@ -1455,12 +1455,12 @@ def sbol_signature (ax, type, num, start, end, prev_end, scale, linewidth, opts cross_width = (y_extent*2.0)*0.7 if direction == 'F': - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (start+x_extent, -y_extent), (start+x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) top1x = start + indent_fac top1y = y_extent - indent_fac @@ -1470,21 +1470,21 @@ def sbol_signature (ax, type, num, start, end, prev_end, scale, linewidth, opts bot1y = -y_extent + indent_fac bot2x = start + cross_width bot2y = -y_extent + indent_fac - lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], + lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], + lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) ax.add_line(lcross1) ax.add_line(lcross2) - lsign = Line2D([bot2x+indent_fac,end-indent_fac],[-y_extent+indent_fac,-y_extent+indent_fac], + lsign = Line2D([bot2x+indent_fac,end-indent_fac],[-y_extent+indent_fac,-y_extent+indent_fac], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) ax.add_line(lsign) else: - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (start-x_extent, -y_extent), (start-x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) top1x = start - indent_fac @@ -1495,13 +1495,13 @@ def sbol_signature (ax, type, num, start, end, prev_end, scale, linewidth, opts bot1y = -y_extent + indent_fac bot2x = start - cross_width bot2y = -y_extent + indent_fac - lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], + lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], + lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) ax.add_line(lcross1) ax.add_line(lcross2) - lsign = Line2D([bot2x-indent_fac,end+indent_fac],[y_extent-indent_fac,y_extent-indent_fac], + lsign = Line2D([bot2x-indent_fac,end+indent_fac],[y_extent-indent_fac,y_extent-indent_fac], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) ax.add_line(lsign) @@ -1515,6 +1515,152 @@ def sbol_signature (ax, type, num, start, end, prev_end, scale, linewidth, opts return prev_end, final_start else: return prev_end, final_end +def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ SBOL recombinase site renderer - forward direction + """ + # Default parameters + color = (0,0,0) + color2 = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 6.0 + y_extent = 6.0 + linestyle = '-' + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'color2' in list(opts.keys()): + color2 = opts['color2'] + # Check direction add start padding + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 + if start > end: + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad + final_end = start+start_pad + color = color2 + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad + # Draw the site + p1 = Polygon([(start, y_lower), + (start, y_upper), + (end,0)], + edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, + path_effects=[Stroke(joinstyle="miter")]) + ax.add_patch(p1) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + +def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ SBOL recombinase site renderer - reverse direction + """ + # Default parameters + color = (0,0,0) + color2 = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 6.0 + y_extent = 6.0 + linestyle = '-' + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'color2' in list(opts.keys()): + color2 = opts['color2'] + else: + if 'color' in list(opts.keys()): + r2 = float(color[0]) / 2 + g2 = float(color[1]) / 2 + b2 = float(color[2]) / 2 + color2 = (r2,g2,b2) + # Check direction add start padding + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 + if start > end: + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad + final_end = start+start_pad + temp = color + color = color2 + color2 = temp + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad + # Draw the site + p1 = Polygon([(start, y_lower), + (start, y_upper), + (end,0)], + edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, + path_effects=[Stroke(joinstyle="miter")]) + midpoint = (end + start) / 2 + hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) + hypotenuse2 = hypotenuse / 2 + cosineA = (y_extent/2) / hypotenuse + f = hypotenuse2 * cosineA + p2 = Polygon([(midpoint, -1*f), + (midpoint, f), + (end,0)], + edgecolor=(0,0,0), facecolor=color2, linewidth=linewidth, zorder=12, + path_effects=[Stroke(joinstyle="miter")]) + ax.add_patch(p1) + ax.add_patch(p2) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): @@ -1552,8 +1698,8 @@ def sbol_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth start = prev_end+start_pad end = start + linewidth final_end = end+end_pad - - l1 = Line2D([start,start],[-y_extent,y_extent], + + l1 = Line2D([start,start],[-y_extent,y_extent], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) ax.add_line(l1) @@ -1606,7 +1752,7 @@ def sbol_spacer (ax, type, num, start, end, prev_end, scale, linewidth, opts): # Check direction add start padding final_end = end final_start = prev_end - + start = prev_end+start_pad end = start+x_extent final_end = end+end_pad @@ -1616,13 +1762,13 @@ def sbol_spacer (ax, type, num, start, end, prev_end, scale, linewidth, opts): delta = radius - 0.5 * radius * math.sqrt(2) - l1 = Line2D([start+delta,end-delta],[radius-delta,-1*radius+delta], + l1 = Line2D([start+delta,end-delta],[radius-delta,-1*radius+delta], linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) - l2 = Line2D([start+delta,end-delta],[-1*radius+delta,radius-delta], + l2 = Line2D([start+delta,end-delta],[-1*radius+delta,radius-delta], linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=edgecolor, + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=edgecolor, facecolor=color, zorder=12+zorder_add) - + ax.add_patch(c1) ax.add_line(l1) ax.add_line(l2) @@ -1673,17 +1819,17 @@ def sbol_origin (ax, type, num, start, end, prev_end, scale, linewidth, opts): # Check direction add start padding final_end = end final_start = prev_end - + start = prev_end+start_pad end = start+x_extent final_end = end+end_pad ori_center = (start+((end-start)/2.0),0) - - c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + + c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=12+zorder_add) - + ax.add_patch(c1) - + if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) @@ -1734,17 +1880,17 @@ def sbol_operator (ax, type, num, start, end, prev_end, scale, linewidth, opts): start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - + #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (start+x_extent, -y_extent), (start+x_extent, y_extent)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) - + if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) @@ -1788,21 +1934,21 @@ def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts) linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - + # Check direction add start padding final_end = end final_start = prev_end start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - + #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + p1 = Polygon([(start, y_extent), (start, -y_extent), (start+x_extent, -y_extent), (start+x_extent, y_extent)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) bits = 5.0 gap_size = ((end-start)/bits) @@ -1810,16 +1956,16 @@ def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts) x_inset_end = start + ((bits-1.0)*gap_size) # Inside rectangle - p2 = Polygon([(x_inset_start, y_extent-gap_size), + p2 = Polygon([(x_inset_start, y_extent-gap_size), (x_inset_start, -y_extent+gap_size), (x_inset_end, -y_extent+gap_size), (x_inset_end, y_extent-gap_size)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=12+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=12+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) ax.add_patch(p2) - + if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) @@ -1878,13 +2024,13 @@ def temporary_repressor (ax, type, num, start, end, prev_end, scale, linewidth, start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - + e1center = (start+((end-start)/2.0),0) e2center = (start+((end-start)/2.0)+x_extent/3.75,0) - e1 = Ellipse(e1center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, + e1 = Ellipse(e1center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, fill=True, zorder=12+zorder_add) - e2 = Ellipse(e2center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, + e2 = Ellipse(e2center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, fill=True, zorder=11+zorder_add) ax.add_patch(e1) @@ -1933,7 +2079,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ arcHeightEnd = arcHeightStart*1.5 arc_start_x_offset = 0.0 arc_end_x_offset = 0.0 - + # Reset defaults if provided if opts != None: if 'arrowhead_length' in list(opts.keys()): @@ -1979,17 +2125,17 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ corr *= -1 - line_away = Line2D([start,start],[base,top], + line_away = Line2D([start,start],[base,top], linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_across = Line2D([start,end],[top,top], + line_across = Line2D([start,end],[top,top], linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_toward = Line2D([end,end],[top,arcHeightEnd+corr], + line_toward = Line2D([end,end],[top,arcHeightEnd+corr], linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_rep = Line2D([end-arrowhead_length,end+arrowhead_length],[arcHeightEnd,arcHeightEnd], + line_rep = Line2D([end-arrowhead_length,end+arrowhead_length],[arcHeightEnd,arcHeightEnd], linewidth=linewidth, color=color, zorder=12, linestyle='-') - line_ind1 = Line2D([end-arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], + line_ind1 = Line2D([end-arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], linewidth=linewidth, color=color, zorder=12, linestyle='-') - line_ind2 = Line2D([end+arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], + line_ind2 = Line2D([end+arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], linewidth=linewidth, color=color, zorder=12, linestyle='-') if(type == 'Repression'): @@ -2058,26 +2204,26 @@ def trace_promoter_start (ax, type, num, start_bp, end_bp, prev_end, scale, line dir_fac = -1.0 y_offset = -y_offset # Draw the promoter symbol - l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) l2 = Line2D([start_bp,start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], - [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) ax.add_line(l1) ax.add_line(l2) - p1 = Polygon([(start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent+(arrowhead_height)+y_offset), + p1 = Polygon([(start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent+(arrowhead_height)+y_offset), (start_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), - (start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + (start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, dir_fac*y_extent-(arrowhead_height)+y_offset)], - facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), (start_bp, highlight_y_extent+y_offset), (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p2) if opts != None and 'label' in list(opts.keys()): @@ -2130,26 +2276,26 @@ def trace_promoter (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, dir_fac = -1.0 y_offset = -y_offset # Draw the promoter symbol - l1 = Line2D([end_bp,end_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + l1 = Line2D([end_bp,end_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) l2 = Line2D([end_bp,end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], - [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) ax.add_line(l1) ax.add_line(l2) - p1 = Polygon([(end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent+(arrowhead_height)+y_offset), + p1 = Polygon([(end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent+(arrowhead_height)+y_offset), (end_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), - (end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + (end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, dir_fac*y_extent-(arrowhead_height)+y_offset)], - facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), (start_bp, highlight_y_extent+y_offset), (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p2) if opts != None and 'label' in list(opts.keys()): @@ -2201,10 +2347,10 @@ def trace_rbs (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts c1 = Ellipse((start_bp,dir_fac*y_extent+y_offset),width=(x_extent*scale),height=y_extent*0.4,color=color, zorder=14+zorder_add) ax.add_artist(c1) # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), (start_bp, highlight_y_extent+y_offset), (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p2) if opts != None and 'label' in list(opts.keys()): @@ -2248,12 +2394,12 @@ def trace_user_defined (ax, type, num, start_bp, end_bp, prev_end, scale, linewi if start_bp > end_bp: dir_fac = -1.0 # Draw the CDS symbol - p1 = Polygon([(start_bp, y_extent+y_offset), + p1 = Polygon([(start_bp, y_extent+y_offset), (start_bp, -y_extent+y_offset), (end_bp-dir_fac*scale, -y_extent+y_offset), (end_bp-dir_fac*scale, y_extent+y_offset)], - edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=15+zorder_add, + edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=15+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) if opts != None and 'label' in list(opts.keys()): @@ -2303,15 +2449,15 @@ def trace_cds (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts if start_bp > end_bp: dir_fac = -1.0 # Draw the CDS symbol - p1 = Polygon([(start_bp, y_extent+y_offset), + p1 = Polygon([(start_bp, y_extent+y_offset), (start_bp, -y_extent+y_offset), (end_bp-dir_fac*arrowhead_length*scale, -y_extent+y_offset), (end_bp-dir_fac*arrowhead_length*scale, -y_extent-arrowhead_height+y_offset), (end_bp, 0+y_offset), (end_bp-dir_fac*arrowhead_length*scale, y_extent+arrowhead_height+y_offset), (end_bp-dir_fac*arrowhead_length*scale, y_extent+y_offset)], - edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=15+zorder_add, + edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=15+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) if opts != None and 'label' in list(opts.keys()): @@ -2363,10 +2509,10 @@ def trace_terminator (ax, type, num, start_bp, end_bp, prev_end, scale, linewidt ax.add_line(l1) ax.add_line(l2) # Shade the terminator area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), (start_bp, highlight_y_extent+y_offset), (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=13, + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=13, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p2) if opts != None and 'label' in list(opts.keys()): @@ -2389,13 +2535,15 @@ class DNARenderer: """ # Standard part types - STD_PART_TYPES = ['Promoter', - 'CDS', + STD_PART_TYPES = ['Promoter', + 'CDS', 'Terminator', 'RBS', 'Scar', 'Spacer', 'EmptySpace', + 'RecombinaseSite', + 'RecombinaseSite2', 'Ribozyme', 'Ribonuclease', 'Protease', @@ -2427,7 +2575,7 @@ class DNARenderer: 'Activation', 'Connection'] - def __init__(self, scale=1.0, linewidth=1.0, linecolor=(0,0,0), + def __init__(self, scale=1.0, linewidth=1.0, linecolor=(0,0,0), backbone_pad_left=0.0, backbone_pad_right=0.0): """ Constructor to generate an empty DNARenderer. @@ -2456,8 +2604,8 @@ def SBOL_part_renderers (self): """ Return dictionary of all standard built-in SBOL part renderers. """ return { - 'Promoter' :sbol_promoter, - 'CDS' :sbol_cds, + 'Promoter' :sbol_promoter, + 'CDS' :sbol_cds, 'Terminator' :sbol_terminator, 'RBS' :sbol_rbs, 'Scar' :sbol_scar, @@ -2465,6 +2613,8 @@ def SBOL_part_renderers (self): 'EmptySpace' :sbol_empty_space, 'Ribozyme' :sbol_ribozyme, 'Ribonuclease' :sbol_stem_top, + 'RecombinaseSite' :sbol_recombinase1, + 'RecombinaseSite2' :sbol_recombinase2, 'Protease' :sbol_stem_top, 'DNACleavageSite' :sbol_stem_top, 'RNACleavageSite' :sbol_stem_top, @@ -2493,17 +2643,17 @@ def trace_part_renderers (self): """ Return dictionary of all standard built-in trace part renderers. """ return { - 'Promoter' :trace_promoter, - 'CDS' :trace_cds, + 'Promoter' :trace_promoter, + 'CDS' :trace_cds, 'Terminator' :trace_terminator, 'RBS' :trace_rbs, - 'UserDefined' :trace_user_defined} + 'UserDefined' :trace_user_defined} def std_reg_renderers (self): """ Return dictionary of all standard built-in regulation renderers. """ return { - 'Repression' :repress, + 'Repression' :repress, 'Activation' :induce, 'Connection' :connect} @@ -2519,7 +2669,7 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p The design to draw. This is a list of dicts, where each dict relates to a part and must contain the following keys: - name (string) - - type (string) + - type (string) - fwd (bool) - start (float, optional) - end (float, optional) @@ -2533,12 +2683,12 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p Regulation present in the design. This is a list of dicts, where each dict relates to a single regulation arc and must contain the following keys: - type (string) - - from_part (part object dict) + - from_part (part object dict) - to_part (part object dict) These will then be drawn in accordance with the renders selected. reg_renderers : dict(functions) (default=None) - Dict of functions where the key in the regulation type and the dictionary + Dict of functions where the key in the regulation type and the dictionary returns the function to be used to draw that regulation type. Returns @@ -2555,7 +2705,7 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p matplotlib.rcParams['lines.solid_joinstyle'] = 'miter' matplotlib.rcParams['lines.solid_capstyle'] = 'projecting' # Make text editable in Adobe Illustrator - matplotlib.rcParams['pdf.fonttype'] = 42 + matplotlib.rcParams['pdf.fonttype'] = 42 # Plot the parts to the axis part_num = 0 prev_end = 0 @@ -2592,9 +2742,9 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p # Use the correct renderer if 'renderer' in list(part.keys()): # Use custom renderer - prev_start, prev_end = part['renderer'](ax, part['type'], part_num, + prev_start, prev_end = part['renderer'](ax, part['type'], part_num, part['start'], part['end'], prev_end, - self.scale, self.linewidth, + self.scale, self.linewidth, opts=part_opts) #update start,end for regulation @@ -2607,12 +2757,12 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p else: # Use standard renderer, if one exists if part['type'] in list(part_renderers.keys()): - prev_start, prev_end = part_renderers[part['type']](ax, - part['type'], part_num, - part['start'], part['end'], - prev_end, self.scale, + prev_start, prev_end = part_renderers[part['type']](ax, + part['type'], part_num, + part['start'], part['end'], + prev_end, self.scale, self.linewidth, opts=part_opts) - + #update start,end for regulation [TEG] if part['fwd'] == True: part['start'] = prev_start @@ -2620,12 +2770,12 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p else: part['start'] = prev_end part['end'] = prev_start - + if first_part == True: first_start = prev_start first_part = False part_num += 1 - + # first pass to get all of the arcranges if regs != None: @@ -2639,9 +2789,9 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p reg_opts = None if 'opts' in list(reg.keys()): reg_opts = reg['opts'] - + if reg['type'] in list(reg_renderers.keys()): - + ############################################################################## arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 @@ -2669,20 +2819,20 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p reg_opts = None if 'opts' in list(reg.keys()): reg_opts = reg['opts'] - + if reg['type'] in list(reg_renderers.keys()): - + ############################################################################## # arc height algorithm: greedy from left-to-right on DNA design - + arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 - + arcmin = min(arcstart,arcend) arcmax = max(arcstart,arcend) arcrange = [arcmin,arcmax,reg['arc_height_index']] arc_height_index = 1 - + # arc above if to_part is fwd if(reg['to_part']['fwd'] == True): # find max arc height index of ONLY the prior arcs that clash with the current arc @@ -2700,7 +2850,7 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p elif(arcrange[1] > r[1] and arcrange[0] < r[0]): if(r[2] > current_max): current_max = r[2] - + # if arcs cross over, increment the arc height index for r in pos_arc_ranges: if (arcrange[0] > r[0] and arcrange[0] < r[1]): @@ -2716,7 +2866,7 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p reg['arc_height_index'] = current_max + 1 arcrange[2] = reg['arc_height_index'] pos_arc_ranges.append(arcrange) - + # arc below if to_part is reverse else: # find max arc height index @@ -2734,7 +2884,7 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p elif(arcrange[1] > r[1] and arcrange[0] < r[0]): if(r[2] > current_max): current_max = r[2] - + # if arcs cross over, increment the arc height index for r in neg_arc_ranges: if (arcrange[0] > r[0] and arcrange[0] < r[1]): @@ -2751,14 +2901,14 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p arcrange[2] = reg['arc_height_index'] neg_arc_ranges.append(arcrange) ############################################################################## - reg_renderers[reg['type']](ax, reg['type'], - reg_num, reg['from_part'], - reg['to_part'], self.scale, + reg_renderers[reg['type']](ax, reg['type'], + reg_num, reg['from_part'], + reg['to_part'], self.scale, self.linewidth, reg['arc_height_index'], opts=reg_opts) reg_num += 1 # Plot the backbone (z=1) if plot_backbone == True: - l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], + l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], linewidth=self.linewidth, color=self.linecolor, zorder=10) ax.add_line(l1) return first_start, prev_end @@ -2772,10 +2922,10 @@ def annotate (self, ax, part_renderers, part, annotate_zorder=1000): else: part['opts']['zorder_add'] = annotate_zorder # Draw the part - part_renderers[part['type']](ax, - part['type'], 1, - part['start'], part['end'], - part['start'], self.scale, + part_renderers[part['type']](ax, + part['type'], 1, + part['start'], part['end'], + part['start'], self.scale, self.linewidth, opts=part['opts']) @@ -2790,7 +2940,7 @@ def plot_sbol_designs (axes, dna_designs, regulations=None, plot_params={}, plot Parameters ---------- axes : list(matplotlib.axis) - List of axis objects to plot the designs to. + List of axis objects to plot the designs to. dna_designs : list(dict(design_information)) List of designs to plot. @@ -2830,7 +2980,7 @@ def plot_sbol_designs (axes, dna_designs, regulations=None, plot_params={}, plot if 'linewidth' in list(plot_params.keys()): linewidth = plot_params['linewidth'] dr = DNARenderer(scale=scale, linewidth=linewidth, - backbone_pad_left=left_pad, + backbone_pad_left=left_pad, backbone_pad_right=right_pad) # We default to the standard regulation renderers @@ -2945,8 +3095,8 @@ def convert_attrib (attrib): return attrib -dpl_default_type_map = {'gene': 'CDS', - 'promoter': 'Promoter', +dpl_default_type_map = {'gene': 'CDS', + 'promoter': 'Promoter', 'terminator': 'Terminator', 'rbs': 'RBS'} From 49934449f5e6142e447ce270a39fcd1a612d4176 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 14:11:59 -0700 Subject: [PATCH 03/43] reverse crash fix? --- dnaplotlib/dnaplotlib.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 9dc9caa..1698035 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2721,10 +2721,11 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p part['fwd'] = True else: if part['fwd'] == False: - start = part['start'] - end = part['end'] - part['end'] = start - part['start'] = end + if('start' in keys): + start = part['start'] + end = part['end'] + part['end'] = start + part['start'] = end if 'start' not in keys: if part['fwd'] == True: part['start'] = part_num From e800399fc3afaf35cd500b9379bb8bedb9ec891c Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 14:40:00 -0700 Subject: [PATCH 04/43] reverse crash fix try 2 --- dnaplotlib/dnaplotlib.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 1698035..10987b6 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2720,12 +2720,13 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p if 'fwd' not in keys: part['fwd'] = True else: - if part['fwd'] == False: - if('start' in keys): - start = part['start'] - end = part['end'] - part['end'] = start - part['start'] = end + pass + #if part['fwd'] == False: + #if('start' in keys): + # start = part['start'] + # end = part['end'] + # part['end'] = start + # part['start'] = end if 'start' not in keys: if part['fwd'] == True: part['start'] = part_num From 0ca5ed3117f026524c33aca63f21dba3f582d246 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 15:39:26 -0700 Subject: [PATCH 05/43] recombinase spacing bug on reverse fixed? --- dnaplotlib/dnaplotlib.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 10987b6..cb62a58 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1551,9 +1551,11 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op final_start = prev_end y_lower = -1 * y_extent/2 y_upper = y_extent/2 + + if start > end: start = prev_end+end_pad+x_extent+linewidth - end = prev_end+end_pad + end = prev_end+end_pad+linewidth final_end = start+start_pad color = color2 else: @@ -1623,7 +1625,7 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op y_upper = y_extent/2 if start > end: start = prev_end+end_pad+x_extent+linewidth - end = prev_end+end_pad + end = prev_end+end_pad+linewidth final_end = start+start_pad temp = color color = color2 From d1c521fd8ed8ad334dcfc9e012c7fe508d3760f0 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 16:43:43 -0700 Subject: [PATCH 06/43] rna symbol --- dnaplotlib/dnaplotlib.py | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index cb62a58..1049cb8 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1581,6 +1581,82 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op else: return prev_end, final_end +def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ SBOL recombinase site renderer - reverse direction + """ + # Default parameters + color = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 6.0 + y_extent = 6.0 + linestyle = '-' + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + # Check direction add start padding + + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 + if start > end: + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad+linewidth + final_end = start+start_pad + temp = color + color = color2 + color2 = temp + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad + # Draw the site + p1 = Polygon([(start, y_lower), + (start, y_upper), + (end,0)], + edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, + path_effects=[Stroke(joinstyle="miter")]) + midpoint = (end + start) / 2 + hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) + hypotenuse2 = hypotenuse / 2 + cosineA = (y_extent/2) / hypotenuse + f = hypotenuse2 * cosineA + p2 = Polygon([(midpoint, -1*f), + (midpoint, f), + (end,0)], + edgecolor=(0,0,0), facecolor=color2, linewidth=linewidth, zorder=12, + path_effects=[Stroke(joinstyle="miter")]) + ax.add_patch(p1) + ax.add_patch(p2) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, opts): """ SBOL recombinase site renderer - reverse direction """ @@ -2546,6 +2622,7 @@ class DNARenderer: 'EmptySpace', 'RecombinaseSite', 'RecombinaseSite2', + 'NCRNA', 'Ribozyme', 'Ribonuclease', 'Protease', @@ -2614,6 +2691,7 @@ def SBOL_part_renderers (self): 'Spacer' :sbol_spacer, 'EmptySpace' :sbol_empty_space, 'Ribozyme' :sbol_ribozyme, + 'NCRNA' :sbol_ncrna, 'Ribonuclease' :sbol_stem_top, 'RecombinaseSite' :sbol_recombinase1, 'RecombinaseSite2' :sbol_recombinase2, From dcaa3b2ceca3485904a4c33d8469ce801992ad90 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 16:43:43 -0700 Subject: [PATCH 07/43] rna symbol --- dnaplotlib/dnaplotlib.py | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index cb62a58..1049cb8 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1581,6 +1581,82 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op else: return prev_end, final_end +def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ SBOL recombinase site renderer - reverse direction + """ + # Default parameters + color = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 6.0 + y_extent = 6.0 + linestyle = '-' + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + # Check direction add start padding + + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 + if start > end: + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad+linewidth + final_end = start+start_pad + temp = color + color = color2 + color2 = temp + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad + # Draw the site + p1 = Polygon([(start, y_lower), + (start, y_upper), + (end,0)], + edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, + path_effects=[Stroke(joinstyle="miter")]) + midpoint = (end + start) / 2 + hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) + hypotenuse2 = hypotenuse / 2 + cosineA = (y_extent/2) / hypotenuse + f = hypotenuse2 * cosineA + p2 = Polygon([(midpoint, -1*f), + (midpoint, f), + (end,0)], + edgecolor=(0,0,0), facecolor=color2, linewidth=linewidth, zorder=12, + path_effects=[Stroke(joinstyle="miter")]) + ax.add_patch(p1) + ax.add_patch(p2) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, opts): """ SBOL recombinase site renderer - reverse direction """ @@ -2546,6 +2622,7 @@ class DNARenderer: 'EmptySpace', 'RecombinaseSite', 'RecombinaseSite2', + 'NCRNA', 'Ribozyme', 'Ribonuclease', 'Protease', @@ -2614,6 +2691,7 @@ def SBOL_part_renderers (self): 'Spacer' :sbol_spacer, 'EmptySpace' :sbol_empty_space, 'Ribozyme' :sbol_ribozyme, + 'NCRNA' :sbol_ncrna, 'Ribonuclease' :sbol_stem_top, 'RecombinaseSite' :sbol_recombinase1, 'RecombinaseSite2' :sbol_recombinase2, From bd18e7d2cbc850ce3a00c21b45671f21e98dddb6 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 16:57:06 -0700 Subject: [PATCH 08/43] more rna symbol --- dnaplotlib/dnaplotlib.py | 54 +++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 1049cb8..09d702b 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1615,6 +1615,7 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): final_start = prev_end y_lower = -1 * y_extent/2 y_upper = y_extent/2 + wavemult = 1 if start > end: start = prev_end+end_pad+x_extent+linewidth end = prev_end+end_pad+linewidth @@ -1622,28 +1623,47 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): temp = color color = color2 color2 = temp + wavemult = -1 else: start = prev_end+start_pad+linewidth end = start+x_extent final_end = end+end_pad - # Draw the site - p1 = Polygon([(start, y_lower), - (start, y_upper), - (end,0)], - edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, - path_effects=[Stroke(joinstyle="miter")]) midpoint = (end + start) / 2 - hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) - hypotenuse2 = hypotenuse / 2 - cosineA = (y_extent/2) / hypotenuse - f = hypotenuse2 * cosineA - p2 = Polygon([(midpoint, -1*f), - (midpoint, f), - (end,0)], - edgecolor=(0,0,0), facecolor=color2, linewidth=linewidth, zorder=12, - path_effects=[Stroke(joinstyle="miter")]) - ax.add_patch(p1) - ax.add_patch(p2) + + + wave_height = wavemult*y_extent + #wave_height = -y_extent + wave_start = start + + wave_length = end-start + wave_bezier_amp = y_extent*0.2 + wave_bezier_dx = wave_length/15.0#wave_bezier_amp*math.cos(math.pi/4) + wave_bezier_dy = wavemult*wave_bezier_amp*math.sin(math.pi/4) + wavy_rna_path = Path(vertices=[[wave_start,0], + [wave_start, wave_height], + [wave_start + wave_bezier_dx, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*2, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*3, wave_height], + [wave_start + wave_bezier_dx*4, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*5, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*6, wave_height], + [wave_start + wave_bezier_dx*7, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*8, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*9, wave_height], + [wave_start + wave_bezier_dx*10, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*11, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*12, wave_height], + [wave_start + wave_bezier_dx*13, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*14, wave_height+wave_bezier_dy], + [wave_end,wave_height], + [wave_end,0], + [wave_end,0] + ], + codes=[1, 2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79]) + wavy_rna = PathPatch(wavy_rna_path, linewidth=linewidth, edgecolor=(0,0,0), + facecolor=color, zorder=12, linestyle='-') + + ax.add_patch(wavy_rna) # Add a label if needed if opts != None and 'label' in list(opts.keys()): if final_start > final_end: From 6c59d1630c438c2e077c5a6f41824349a73fd565 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 16:59:27 -0700 Subject: [PATCH 09/43] bugfix --- dnaplotlib/dnaplotlib.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 09d702b..1f49c76 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1620,9 +1620,6 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): start = prev_end+end_pad+x_extent+linewidth end = prev_end+end_pad+linewidth final_end = start+start_pad - temp = color - color = color2 - color2 = temp wavemult = -1 else: start = prev_end+start_pad+linewidth From e2eed118bf2acdbf49f589e642a36ad28ed1f3d4 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 17:01:28 -0700 Subject: [PATCH 10/43] bugfix --- dnaplotlib/dnaplotlib.py | 5942 +++++++++++++++++++------------------- 1 file changed, 2971 insertions(+), 2971 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 1f49c76..d1a707e 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2,46 +2,46 @@ """ DNAplotlib ========== - This module is designed to allow for highly customisable visualisation of DNA - fragments. Diagrams can be in the form of conceptual SBOL compliant icons or - make use of icons whose width is scaled to allow for easier comparison of part - locations to trace information, such as for corresponding RNA-seq read depth - data. All plotting is performed using matplotlib and to an axis object. This - enables the export of publication quality, vector-based figures. Furthermore, - all standard renderers can be replaced with user defined versions to allow - for full customisation of the plot. - - To make use of this module it is necessary to create the rendering object - after importing the module: - - > import dnaplotlib as dpl - > dr = dpl.DNARenderer() - - This object performs all rendering using the renderDNA() method. To describe - what should be plotted, dnaplotlib requires the DNA design in a specific - format. For standard SBOL diagrams a design is a list of dictionaries where - each dictionary relates to a specific part and as a minimum contains the - keys: - - - name: A name that can be potentially used in regulation. - - type: The type of part (decides which renderer to use). - - fwd: Boolean defining if the part is in a forward orientation. - - start: Start position (optional) - - end: End position (optional) - - Once this list is defined and an axis object is created the design can be - draw using standard renders and to a user created matplotlib axes by running: - - > reg_renderers = dr.std_reg_renderers() - > part_renderers = dr.SBOL_part_renderers() - > regs = None - > design = ... Design is created here ... - > ax = ... matplotlib axes created here ... - > start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) - - The function returns the start and end point of the design which can then - be used for resizing the axes and figure. For more advanced use cases we - advise looking at the gallery distributed with this module. + This module is designed to allow for highly customisable visualisation of DNA + fragments. Diagrams can be in the form of conceptual SBOL compliant icons or + make use of icons whose width is scaled to allow for easier comparison of part + locations to trace information, such as for corresponding RNA-seq read depth + data. All plotting is performed using matplotlib and to an axis object. This + enables the export of publication quality, vector-based figures. Furthermore, + all standard renderers can be replaced with user defined versions to allow + for full customisation of the plot. + + To make use of this module it is necessary to create the rendering object + after importing the module: + + > import dnaplotlib as dpl + > dr = dpl.DNARenderer() + + This object performs all rendering using the renderDNA() method. To describe + what should be plotted, dnaplotlib requires the DNA design in a specific + format. For standard SBOL diagrams a design is a list of dictionaries where + each dictionary relates to a specific part and as a minimum contains the + keys: + + - name: A name that can be potentially used in regulation. + - type: The type of part (decides which renderer to use). + - fwd: Boolean defining if the part is in a forward orientation. + - start: Start position (optional) + - end: End position (optional) + + Once this list is defined and an axis object is created the design can be + draw using standard renders and to a user created matplotlib axes by running: + + > reg_renderers = dr.std_reg_renderers() + > part_renderers = dr.SBOL_part_renderers() + > regs = None + > design = ... Design is created here ... + > ax = ... matplotlib axes created here ... + > start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) + + The function returns the start and end point of the design which can then + be used for resizing the axes and figure. For more advanced use cases we + advise looking at the gallery distributed with this module. """ @@ -60,8 +60,8 @@ __author__ = 'Thomas E. Gorochowski \n\ - Bryan Der \n\ - Emerson Glassey ' + Bryan Der \n\ + Emerson Glassey ' __license__ = 'MIT' __version__ = '1.0' @@ -72,1451 +72,1610 @@ def write_label (ax, label_text, x_pos, opts=None): - """ Renders labels on parts. - """ - zorder_add = 0.0 - y_offset = 0.0 - label_style = 'normal' - label_size = 7 - label_y_offset = 0 - label_x_offset = 0 - label_color = (0,0,0) - label_rotation = 0 - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'label_style' in list(opts.keys()): - label_style = opts['label_style'] - if 'label_size' in list(opts.keys()): - label_size = opts['label_size'] - if 'label_y_offset' in list(opts.keys()): - label_y_offset = opts['label_y_offset'] - if 'label_x_offset' in list(opts.keys()): - label_x_offset = opts['label_x_offset'] - if 'label_color' in list(opts.keys()): - label_color = opts['label_color'] - if 'label_rotation' in list(opts.keys()): - label_rotation = opts['label_rotation'] - ax.text(x_pos+label_x_offset, label_y_offset+y_offset, label_text, horizontalalignment='center', - verticalalignment='center', fontsize=label_size, fontstyle=label_style, - color=label_color, rotation=label_rotation, zorder=30+zorder_add) + """ Renders labels on parts. + """ + zorder_add = 0.0 + y_offset = 0.0 + label_style = 'normal' + label_size = 7 + label_y_offset = 0 + label_x_offset = 0 + label_color = (0,0,0) + label_rotation = 0 + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'label_style' in list(opts.keys()): + label_style = opts['label_style'] + if 'label_size' in list(opts.keys()): + label_size = opts['label_size'] + if 'label_y_offset' in list(opts.keys()): + label_y_offset = opts['label_y_offset'] + if 'label_x_offset' in list(opts.keys()): + label_x_offset = opts['label_x_offset'] + if 'label_color' in list(opts.keys()): + label_color = opts['label_color'] + if 'label_rotation' in list(opts.keys()): + label_rotation = opts['label_rotation'] + ax.text(x_pos+label_x_offset, label_y_offset+y_offset, label_text, horizontalalignment='center', + verticalalignment='center', fontsize=label_size, fontstyle=label_style, + color=label_color, rotation=label_rotation, zorder=30+zorder_add) def sbol_promoter (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL promoter renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.0,0.0,0.0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 10 - x_extent = 10 - arrowhead_height = 2 - arrowhead_length = 4 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Draw the promoter symbol - l1 = Line2D([start,start],[0,dir_fac*y_extent], linewidth=linewidth, - color=color, zorder=9+zorder_add) - l2 = Line2D([start,start+dir_fac*x_extent-dir_fac*(arrowhead_length*0.5)], - [dir_fac*y_extent,dir_fac*y_extent], linewidth=linewidth, - color=color, zorder=10+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - p1 = Polygon([(start+dir_fac*x_extent-dir_fac*arrowhead_length, - dir_fac*y_extent+(arrowhead_height)), - (start+dir_fac*x_extent, dir_fac*y_extent), - (start+dir_fac*x_extent-dir_fac*arrowhead_length, - dir_fac*y_extent-(arrowhead_height))], - facecolor=color, edgecolor=color, linewidth=linewidth, zorder=1+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 - ax.add_patch(p1) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL promoter renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.0,0.0,0.0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 10 + x_extent = 10 + arrowhead_height = 2 + arrowhead_length = 4 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Draw the promoter symbol + l1 = Line2D([start,start],[0,dir_fac*y_extent], linewidth=linewidth, + color=color, zorder=9+zorder_add) + l2 = Line2D([start,start+dir_fac*x_extent-dir_fac*(arrowhead_length*0.5)], + [dir_fac*y_extent,dir_fac*y_extent], linewidth=linewidth, + color=color, zorder=10+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + p1 = Polygon([(start+dir_fac*x_extent-dir_fac*arrowhead_length, + dir_fac*y_extent+(arrowhead_height)), + (start+dir_fac*x_extent, dir_fac*y_extent), + (start+dir_fac*x_extent-dir_fac*arrowhead_length, + dir_fac*y_extent-(arrowhead_height))], + facecolor=color, edgecolor=color, linewidth=linewidth, zorder=1+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 + ax.add_patch(p1) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_cds (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL coding sequence renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - hatch = '' - start_pad = 1.0 - end_pad = 1.0 - y_extent = 5 - x_extent = 30 - arrowhead_height = 4 - arrowhead_length = 8 - edgecolor = (0,0,0) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'hatch' in list(opts.keys()): - hatch = opts['hatch'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'edge_color' in list(opts.keys()): - edgecolor = opts['edge_color'] - - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Draw the CDS symbol - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (end-dir_fac*arrowhead_length, -y_extent), - (end-dir_fac*arrowhead_length, -y_extent-arrowhead_height), - (end, 0), - (end-dir_fac*arrowhead_length, y_extent+arrowhead_height), - (end-dir_fac*arrowhead_length, y_extent)], - edgecolor=edgecolor, facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 - ax.add_patch(p1) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL coding sequence renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + hatch = '' + start_pad = 1.0 + end_pad = 1.0 + y_extent = 5 + x_extent = 30 + arrowhead_height = 4 + arrowhead_length = 8 + edgecolor = (0,0,0) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'hatch' in list(opts.keys()): + hatch = opts['hatch'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'edge_color' in list(opts.keys()): + edgecolor = opts['edge_color'] + + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Draw the CDS symbol + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (end-dir_fac*arrowhead_length, -y_extent), + (end-dir_fac*arrowhead_length, -y_extent-arrowhead_height), + (end, 0), + (end-dir_fac*arrowhead_length, y_extent+arrowhead_height), + (end-dir_fac*arrowhead_length, y_extent)], + edgecolor=edgecolor, facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 + ax.add_patch(p1) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_terminator (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL terminator renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 10.0 - x_extent = 8.0 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Draw the terminator symbol - l1 = Line2D([start+dir_fac*(x_extent/2.0),start+dir_fac*(x_extent/2.0)],[0,dir_fac*y_extent], linewidth=linewidth, - color=color, zorder=8+zorder_add) - l2 = Line2D([start,start+(dir_fac*x_extent)],[dir_fac*y_extent,dir_fac*y_extent], - linewidth=linewidth, color=color, zorder=9+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL terminator renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 10.0 + x_extent = 8.0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Draw the terminator symbol + l1 = Line2D([start+dir_fac*(x_extent/2.0),start+dir_fac*(x_extent/2.0)],[0,dir_fac*y_extent], linewidth=linewidth, + color=color, zorder=8+zorder_add) + l2 = Line2D([start,start+(dir_fac*x_extent)],[dir_fac*y_extent,dir_fac*y_extent], + linewidth=linewidth, color=color, zorder=9+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_rbs (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL ribosome binding site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 10.0 - edgecolor = (0,0,0) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'edge_color' in list(opts.keys()): - edgecolor = opts['edge_color'] - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - rbs_center = (0,0) - if start > end: - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - rbs_center = (end+((start-end)/2.0),0) - w1 = Wedge(rbs_center, x_extent/2.0, 180, 360, linewidth=linewidth, - facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) - ax.add_patch(w1) - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - rbs_center = (start+((end-start)/2.0),0) - w1 = Wedge(rbs_center, x_extent/2.0, 0, 180, linewidth=linewidth, - facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) - ax.add_patch(w1) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL ribosome binding site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 10.0 + edgecolor = (0,0,0) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'edge_color' in list(opts.keys()): + edgecolor = opts['edge_color'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + rbs_center = (0,0) + if start > end: + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + rbs_center = (end+((start-end)/2.0),0) + w1 = Wedge(rbs_center, x_extent/2.0, 180, 360, linewidth=linewidth, + facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) + ax.add_patch(w1) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + rbs_center = (start+((end-start)/2.0),0) + w1 = Wedge(rbs_center, x_extent/2.0, 0, 180, linewidth=linewidth, + facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) + ax.add_patch(w1) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_ribozyme (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL ribozyme renderer. - """ - return stick_figure(ax,type,num,start,end,prev_end,scale,linewidth,opts) + """ Built-in SBOL ribozyme renderer. + """ + return stick_figure(ax,type,num,start,end,prev_end,scale,linewidth,opts) def stick_figure (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ General function for drawing stick based parts (e.g., ribozyme and protease sites). - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 5.0 - y_extent = 10.0 - linestyle = '-' - linetype = ""; - shapetype = ""; - if(type == "Ribozyme"): - linetype = 'dash' - headgroup = 'O' - elif(type == "Protease"): - linetype = 'dash' - headgroup = 'X' - elif(type == "ProteinStability"): - linetype = 'solid' - headgroup = 'O' - elif(type == "Ribonuclease"): - linetype = 'solid' - headgroup = 'X' - - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - if start > end: - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - rbs_center = (end+((start-end)/2.0),-y_extent) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=8+zorder_add) - x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.5], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[-y_extent/1.5,-y_extent*1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - - dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent/4], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[-y_extent/2,-y_extent+(x_extent/2.0)], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent+(x_extent/2.0)], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - - if(headgroup == "O" and linetype == "dash"): - ax.add_patch(c1) - ax.add_line(dash1) - ax.add_line(dash2) - elif(headgroup == "X" and linetype == "dash"): - ax.add_line(x1) - ax.add_line(x2) - ax.add_line(dash1) - ax.add_line(dash2) - elif(headgroup == "O" and linetype == "solid"): - ax.add_patch(c1) - ax.add_line(solidO) - elif(headgroup == "X" and linetype == "solid"): - ax.add_line(x1) - ax.add_line(x2) - ax.add_line(solidX) - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - rbs_center = (start+((end-start)/2.0),y_extent) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=8+zorder_add) - x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.5], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[y_extent/1.5,y_extent*1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - - dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent/4], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[y_extent/2,y_extent-(x_extent/2.0)], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent-(x_extent/2.0)], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - - if(headgroup == 'O' and linetype == 'dash'): - ax.add_patch(c1) - ax.add_line(dash1) - ax.add_line(dash2) - elif(headgroup == "X" and linetype == "dash"): - ax.add_line(x1) - ax.add_line(x2) - ax.add_line(dash1) - ax.add_line(dash2) - elif(headgroup == "O" and linetype == "solid"): - ax.add_patch(c1) - ax.add_line(solidO) - elif(headgroup == "X" and linetype == "solid"): - ax.add_line(x1) - ax.add_line(x2) - ax.add_line(solidX) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ General function for drawing stick based parts (e.g., ribozyme and protease sites). + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 5.0 + y_extent = 10.0 + linestyle = '-' + linetype = ""; + shapetype = ""; + if(type == "Ribozyme"): + linetype = 'dash' + headgroup = 'O' + elif(type == "Protease"): + linetype = 'dash' + headgroup = 'X' + elif(type == "ProteinStability"): + linetype = 'solid' + headgroup = 'O' + elif(type == "Ribonuclease"): + linetype = 'solid' + headgroup = 'X' + + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + if start > end: + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + rbs_center = (end+((start-end)/2.0),-y_extent) + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=8+zorder_add) + x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.5], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + x2 = Line2D([start,end],[-y_extent/1.5,-y_extent*1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + + dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent/4], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[-y_extent/2,-y_extent+(x_extent/2.0)], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent+(x_extent/2.0)], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + + if(headgroup == "O" and linetype == "dash"): + ax.add_patch(c1) + ax.add_line(dash1) + ax.add_line(dash2) + elif(headgroup == "X" and linetype == "dash"): + ax.add_line(x1) + ax.add_line(x2) + ax.add_line(dash1) + ax.add_line(dash2) + elif(headgroup == "O" and linetype == "solid"): + ax.add_patch(c1) + ax.add_line(solidO) + elif(headgroup == "X" and linetype == "solid"): + ax.add_line(x1) + ax.add_line(x2) + ax.add_line(solidX) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + rbs_center = (start+((end-start)/2.0),y_extent) + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=8+zorder_add) + x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.5], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + x2 = Line2D([start,end],[y_extent/1.5,y_extent*1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + + dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent/4], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[y_extent/2,y_extent-(x_extent/2.0)], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent-(x_extent/2.0)], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + + if(headgroup == 'O' and linetype == 'dash'): + ax.add_patch(c1) + ax.add_line(dash1) + ax.add_line(dash2) + elif(headgroup == "X" and linetype == "dash"): + ax.add_line(x1) + ax.add_line(x2) + ax.add_line(dash1) + ax.add_line(dash2) + elif(headgroup == "O" and linetype == "solid"): + ax.add_patch(c1) + ax.add_line(solidO) + elif(headgroup == "X" and linetype == "solid"): + ax.add_line(x1) + ax.add_line(x2) + ax.add_line(solidX) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_stem_top (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ General function for drawing stem-top parts (e.g., ribozyme and protease sites). - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 5.0 - y_extent = 10.0 - linestyle = '-' - shapetype = ""; - if type in ["DNACleavageSite"]: - stemtype = 'straight' - toptype = 'X' - elif type in ["RNACleavageSite", "Ribonuclease"]: - stemtype = 'wavy' - toptype = 'X' - elif type in ["ProteinCleavageSite", "Protease"]: - stemtype = 'loopy' - toptype = 'X' - elif type in ["DNALocation"]: - stemtype = 'straight' - toptype = 'O' - elif type in ["RNALocation"]: - stemtype = 'wavy' - toptype = 'O' - elif type in ["ProteinLocation"]: - stemtype = 'loopy' - toptype = 'O' - elif type in ["DNAStability"]: - stemtype = 'straight' - toptype = 'P' - elif type in ["RNAStability"]: - stemtype = 'wavy' - toptype = 'P' - elif type in ["ProteinStability"]: - stemtype = 'loopy' - toptype = 'P' - elif type in ["StemTop"]: - stemtype = opts['stem'] - toptype = opts['top'] - - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - if start > end: - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - # Patches and lines for top glyph - # toptype=="X" - x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[-y_extent/1.25,-y_extent*1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - # toptype=="O" - center = (end+((start-end)/2.0),-y_extent) - c1 = Circle(center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - # toptype=='P' - pentagon_xy = [[end, -y_extent*1.25], - [end, -y_extent*0.87], - [(start + end)/2, -y_extent*0.68], - [start, -y_extent*0.87], - [start, -y_extent*1.25], - ] - p1 = Polygon(pentagon_xy, closed=True, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - - # Lines for stem glyph - # stemtype=='straight' - straight_stem = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0, -y_extent], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - # stemtype=='wavy' - wave_height = y_extent/6 - wave_start = (start + end)/2 - wave_bezier_amp = x_extent*0.2 - wave_bezier_dx = wave_bezier_amp*math.cos(math.pi/4) - wave_bezier_dy = wave_bezier_amp*math.sin(math.pi/4) - wavy_stem_path = Path(vertices=[[wave_start, 0], - [wave_start - wave_bezier_dx, -wave_bezier_dy], - [wave_start - wave_bezier_dx, -(wave_height - wave_bezier_dy)], - [wave_start, -wave_height], - [wave_start + wave_bezier_dx, -(wave_height + wave_bezier_dy)], - [wave_start + wave_bezier_dx, -(2*wave_height - wave_bezier_dy)], - [wave_start, -2*wave_height], - [wave_start - wave_bezier_dx, -(2*wave_height + wave_bezier_dy)], - [wave_start - wave_bezier_dx, -(3*wave_height - wave_bezier_dy)], - [wave_start, -3*wave_height], - [wave_start + wave_bezier_dx, -(3*wave_height + wave_bezier_dy)], - [wave_start + wave_bezier_dx, -(4*wave_height - wave_bezier_dy)], - [wave_start, -4*wave_height], - [wave_start - wave_bezier_dx, -(4*wave_height + wave_bezier_dy)], - [wave_start - wave_bezier_dx, -(5*wave_height - wave_bezier_dy)], - [wave_start, -5*wave_height], - [wave_start + wave_bezier_dx, -(5*wave_height + wave_bezier_dy)], - [wave_start + wave_bezier_dx, -(6*wave_height - wave_bezier_dy)], - [wave_start, -6*wave_height]], - codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) - wavy_stem = PathPatch(wavy_stem_path, linewidth=linewidth, edgecolor=color, - facecolor='none', zorder=8+zorder_add, linestyle=linestyle) - # stemtype=='loopy' - loop_offset_y = y_extent*0.015 - loop_height = (y_extent - 2*loop_offset_y)/4 - loop_start = (start + end)/2 + x_extent*0.05 - loop_end = end + x_extent*0.15 - loop_bezier_amp = y_extent*0.03 - loop_stem_path = Path(vertices=[[loop_start, -loop_offset_y], - [loop_start, -(loop_offset_y - loop_bezier_amp)], - [loop_end, -(loop_offset_y - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*0.5)], - [loop_end, -(loop_offset_y + loop_height + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height)], - [loop_start, -(loop_offset_y + loop_height - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*1.5)], - [loop_end, -(loop_offset_y + loop_height*2 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*2 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*2)], - [loop_start, -(loop_offset_y + loop_height*2 - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*2 - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*2.5)], - [loop_end, -(loop_offset_y + loop_height*3 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*3 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*3)], - [loop_start, -(loop_offset_y + loop_height*3 - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*3 - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*3.5)], - [loop_end, -(loop_offset_y + loop_height*4 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*4 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*4)], - ], - codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) - loop_stem = PathPatch(loop_stem_path, linewidth=linewidth, edgecolor=color, - facecolor='none', zorder=8+zorder_add, linestyle=linestyle) - - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Patches and lines for top glyph - # toptype=="X" - x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[y_extent/1.25,y_extent*1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - - # toptype=="O" - center = (start+((end-start)/2.0),y_extent) - c1 = Circle(center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - # toptype=='P' - pentagon_xy = [[start, y_extent*1.25], - [start, y_extent*0.87], - [(start + end)/2, y_extent*0.68], - [end, y_extent*0.87], - [end, y_extent*1.25], - ] - p1 = Polygon(pentagon_xy, closed=True, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - - # Lines for stem glyph - # stemtype=='straight' - straight_stem = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - # stemtype=='wavy' - wave_height = y_extent/6 - wave_start = (start + end)/2 - wave_bezier_amp = x_extent*0.2 - wave_bezier_dx = wave_bezier_amp*math.cos(math.pi/4) - wave_bezier_dy = wave_bezier_amp*math.sin(math.pi/4) - wavy_stem_path = Path(vertices=[[wave_start, 0], - [wave_start + wave_bezier_dx, wave_bezier_dy], - [wave_start + wave_bezier_dx, wave_height - wave_bezier_dy], - [wave_start, wave_height], - [wave_start - wave_bezier_dx, wave_height + wave_bezier_dy], - [wave_start - wave_bezier_dx, 2*wave_height - wave_bezier_dy], - [wave_start, 2*wave_height], - [wave_start + wave_bezier_dx, 2*wave_height + wave_bezier_dy], - [wave_start + wave_bezier_dx, 3*wave_height - wave_bezier_dy], - [wave_start, 3*wave_height], - [wave_start - wave_bezier_dx, 3*wave_height + wave_bezier_dy], - [wave_start - wave_bezier_dx, 4*wave_height - wave_bezier_dy], - [wave_start, 4*wave_height], - [wave_start + wave_bezier_dx, 4*wave_height + wave_bezier_dy], - [wave_start + wave_bezier_dx, 5*wave_height - wave_bezier_dy], - [wave_start, 5*wave_height], - [wave_start - wave_bezier_dx, 5*wave_height + wave_bezier_dy], - [wave_start - wave_bezier_dx, 6*wave_height - wave_bezier_dy], - [wave_start, 6*wave_height]], - codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) - wavy_stem = PathPatch(wavy_stem_path, linewidth=linewidth, edgecolor=color, - facecolor='none', zorder=8+zorder_add, linestyle=linestyle) - # stemtype=='loopy' - loop_offset_y = y_extent*0.015 - loop_height = (y_extent - 2*loop_offset_y)/4 - loop_start = (start + end)/2 - x_extent*0.05 - loop_end = end - x_extent*0.15 - loop_bezier_amp = y_extent*0.03 - loop_stem_path = Path(vertices=[[loop_start, loop_offset_y], - [loop_start, loop_offset_y - loop_bezier_amp], - [loop_end, loop_offset_y - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*0.5], - [loop_end, loop_offset_y + loop_height + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height], - [loop_start, loop_offset_y + loop_height - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*1.5], - [loop_end, loop_offset_y + loop_height*2 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*2 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*2], - [loop_start, loop_offset_y + loop_height*2 - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*2 - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*2.5], - [loop_end, loop_offset_y + loop_height*3 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*3 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*3], - [loop_start, loop_offset_y + loop_height*3 - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*3 - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*3.5], - [loop_end, loop_offset_y + loop_height*4 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*4 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*4], - ], - codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) - loop_stem = PathPatch(loop_stem_path, linewidth=linewidth, edgecolor=color, - facecolor='none', zorder=8+zorder_add, linestyle=linestyle) - - # Add stem patches and/or lines - if stemtype == 'straight': - ax.add_line(straight_stem) - elif stemtype == 'wavy': - ax.add_line(wavy_stem) - elif stemtype == 'loopy': - ax.add_line(loop_stem) - - # Add top patches and/or lines - if toptype == 'O': - ax.add_patch(c1) - elif toptype == 'X': - ax.add_line(x1) - ax.add_line(x2) - elif toptype == 'P': - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ General function for drawing stem-top parts (e.g., ribozyme and protease sites). + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 5.0 + y_extent = 10.0 + linestyle = '-' + shapetype = ""; + if type in ["DNACleavageSite"]: + stemtype = 'straight' + toptype = 'X' + elif type in ["RNACleavageSite", "Ribonuclease"]: + stemtype = 'wavy' + toptype = 'X' + elif type in ["ProteinCleavageSite", "Protease"]: + stemtype = 'loopy' + toptype = 'X' + elif type in ["DNALocation"]: + stemtype = 'straight' + toptype = 'O' + elif type in ["RNALocation"]: + stemtype = 'wavy' + toptype = 'O' + elif type in ["ProteinLocation"]: + stemtype = 'loopy' + toptype = 'O' + elif type in ["DNAStability"]: + stemtype = 'straight' + toptype = 'P' + elif type in ["RNAStability"]: + stemtype = 'wavy' + toptype = 'P' + elif type in ["ProteinStability"]: + stemtype = 'loopy' + toptype = 'P' + elif type in ["StemTop"]: + stemtype = opts['stem'] + toptype = opts['top'] + + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end -def sbol_scar (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL scar renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 6.0 - y_extent = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start,start+x_extent],[-1*y_extent,-1*y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - ax.add_line(l_top) - ax.add_line(l_bottom) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + if start > end: + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + # Patches and lines for top glyph + # toptype=="X" + x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + x2 = Line2D([start,end],[-y_extent/1.25,-y_extent*1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + # toptype=="O" + center = (end+((start-end)/2.0),-y_extent) + c1 = Circle(center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + # toptype=='P' + pentagon_xy = [[end, -y_extent*1.25], + [end, -y_extent*0.87], + [(start + end)/2, -y_extent*0.68], + [start, -y_extent*0.87], + [start, -y_extent*1.25], + ] + p1 = Polygon(pentagon_xy, closed=True, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + + # Lines for stem glyph + # stemtype=='straight' + straight_stem = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0, -y_extent], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + # stemtype=='wavy' + wave_height = y_extent/6 + wave_start = (start + end)/2 + wave_bezier_amp = x_extent*0.2 + wave_bezier_dx = wave_bezier_amp*math.cos(math.pi/4) + wave_bezier_dy = wave_bezier_amp*math.sin(math.pi/4) + wavy_stem_path = Path(vertices=[[wave_start, 0], + [wave_start - wave_bezier_dx, -wave_bezier_dy], + [wave_start - wave_bezier_dx, -(wave_height - wave_bezier_dy)], + [wave_start, -wave_height], + [wave_start + wave_bezier_dx, -(wave_height + wave_bezier_dy)], + [wave_start + wave_bezier_dx, -(2*wave_height - wave_bezier_dy)], + [wave_start, -2*wave_height], + [wave_start - wave_bezier_dx, -(2*wave_height + wave_bezier_dy)], + [wave_start - wave_bezier_dx, -(3*wave_height - wave_bezier_dy)], + [wave_start, -3*wave_height], + [wave_start + wave_bezier_dx, -(3*wave_height + wave_bezier_dy)], + [wave_start + wave_bezier_dx, -(4*wave_height - wave_bezier_dy)], + [wave_start, -4*wave_height], + [wave_start - wave_bezier_dx, -(4*wave_height + wave_bezier_dy)], + [wave_start - wave_bezier_dx, -(5*wave_height - wave_bezier_dy)], + [wave_start, -5*wave_height], + [wave_start + wave_bezier_dx, -(5*wave_height + wave_bezier_dy)], + [wave_start + wave_bezier_dx, -(6*wave_height - wave_bezier_dy)], + [wave_start, -6*wave_height]], + codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) + wavy_stem = PathPatch(wavy_stem_path, linewidth=linewidth, edgecolor=color, + facecolor='none', zorder=8+zorder_add, linestyle=linestyle) + # stemtype=='loopy' + loop_offset_y = y_extent*0.015 + loop_height = (y_extent - 2*loop_offset_y)/4 + loop_start = (start + end)/2 + x_extent*0.05 + loop_end = end + x_extent*0.15 + loop_bezier_amp = y_extent*0.03 + loop_stem_path = Path(vertices=[[loop_start, -loop_offset_y], + [loop_start, -(loop_offset_y - loop_bezier_amp)], + [loop_end, -(loop_offset_y - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*0.5)], + [loop_end, -(loop_offset_y + loop_height + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height)], + [loop_start, -(loop_offset_y + loop_height - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*1.5)], + [loop_end, -(loop_offset_y + loop_height*2 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*2 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*2)], + [loop_start, -(loop_offset_y + loop_height*2 - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*2 - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*2.5)], + [loop_end, -(loop_offset_y + loop_height*3 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*3 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*3)], + [loop_start, -(loop_offset_y + loop_height*3 - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*3 - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*3.5)], + [loop_end, -(loop_offset_y + loop_height*4 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*4 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*4)], + ], + codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) + loop_stem = PathPatch(loop_stem_path, linewidth=linewidth, edgecolor=color, + facecolor='none', zorder=8+zorder_add, linestyle=linestyle) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Patches and lines for top glyph + # toptype=="X" + x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + x2 = Line2D([start,end],[y_extent/1.25,y_extent*1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + + # toptype=="O" + center = (start+((end-start)/2.0),y_extent) + c1 = Circle(center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + # toptype=='P' + pentagon_xy = [[start, y_extent*1.25], + [start, y_extent*0.87], + [(start + end)/2, y_extent*0.68], + [end, y_extent*0.87], + [end, y_extent*1.25], + ] + p1 = Polygon(pentagon_xy, closed=True, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + + # Lines for stem glyph + # stemtype=='straight' + straight_stem = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + # stemtype=='wavy' + wave_height = y_extent/6 + wave_start = (start + end)/2 + wave_bezier_amp = x_extent*0.2 + wave_bezier_dx = wave_bezier_amp*math.cos(math.pi/4) + wave_bezier_dy = wave_bezier_amp*math.sin(math.pi/4) + wavy_stem_path = Path(vertices=[[wave_start, 0], + [wave_start + wave_bezier_dx, wave_bezier_dy], + [wave_start + wave_bezier_dx, wave_height - wave_bezier_dy], + [wave_start, wave_height], + [wave_start - wave_bezier_dx, wave_height + wave_bezier_dy], + [wave_start - wave_bezier_dx, 2*wave_height - wave_bezier_dy], + [wave_start, 2*wave_height], + [wave_start + wave_bezier_dx, 2*wave_height + wave_bezier_dy], + [wave_start + wave_bezier_dx, 3*wave_height - wave_bezier_dy], + [wave_start, 3*wave_height], + [wave_start - wave_bezier_dx, 3*wave_height + wave_bezier_dy], + [wave_start - wave_bezier_dx, 4*wave_height - wave_bezier_dy], + [wave_start, 4*wave_height], + [wave_start + wave_bezier_dx, 4*wave_height + wave_bezier_dy], + [wave_start + wave_bezier_dx, 5*wave_height - wave_bezier_dy], + [wave_start, 5*wave_height], + [wave_start - wave_bezier_dx, 5*wave_height + wave_bezier_dy], + [wave_start - wave_bezier_dx, 6*wave_height - wave_bezier_dy], + [wave_start, 6*wave_height]], + codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) + wavy_stem = PathPatch(wavy_stem_path, linewidth=linewidth, edgecolor=color, + facecolor='none', zorder=8+zorder_add, linestyle=linestyle) + # stemtype=='loopy' + loop_offset_y = y_extent*0.015 + loop_height = (y_extent - 2*loop_offset_y)/4 + loop_start = (start + end)/2 - x_extent*0.05 + loop_end = end - x_extent*0.15 + loop_bezier_amp = y_extent*0.03 + loop_stem_path = Path(vertices=[[loop_start, loop_offset_y], + [loop_start, loop_offset_y - loop_bezier_amp], + [loop_end, loop_offset_y - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*0.5], + [loop_end, loop_offset_y + loop_height + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height], + [loop_start, loop_offset_y + loop_height - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*1.5], + [loop_end, loop_offset_y + loop_height*2 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*2 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*2], + [loop_start, loop_offset_y + loop_height*2 - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*2 - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*2.5], + [loop_end, loop_offset_y + loop_height*3 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*3 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*3], + [loop_start, loop_offset_y + loop_height*3 - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*3 - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*3.5], + [loop_end, loop_offset_y + loop_height*4 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*4 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*4], + ], + codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) + loop_stem = PathPatch(loop_stem_path, linewidth=linewidth, edgecolor=color, + facecolor='none', zorder=8+zorder_add, linestyle=linestyle) + + # Add stem patches and/or lines + if stemtype == 'straight': + ax.add_line(straight_stem) + elif stemtype == 'wavy': + ax.add_line(wavy_stem) + elif stemtype == 'loopy': + ax.add_line(loop_stem) + + # Add top patches and/or lines + if toptype == 'O': + ax.add_patch(c1) + elif toptype == 'X': + ax.add_line(x1) + ax.add_line(x2) + elif toptype == 'P': + ax.add_patch(p1) -def sbol_empty_space (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in empty space renderer. - """ - # Default options - zorder_add = 0.0 - x_extent = 12.0 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - # Check direction add start padding - final_start = prev_end - final_end = final_start+x_extent - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end -def sbol_5_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL 5' overhang renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 0.0 - end_pad = 2.0 - x_extent = 6.0 - y_extent = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start+(x_extent/2.0),start+x_extent],[-1*y_extent,-1*y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - ax.add_line(l_top) - ax.add_line(l_bottom) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end +def sbol_scar (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL scar renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 6.0 + y_extent = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l_bottom = Line2D([start,start+x_extent],[-1*y_extent,-1*y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) -def sbol_3_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL 3' overhang renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 0.0 - x_extent = 6.0 - y_extent = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start,start+(x_extent/2.0)],[-1*y_extent,-1*y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - ax.add_line(l_top) - ax.add_line(l_bottom) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + ax.add_patch(p1) + ax.add_line(l_top) + ax.add_line(l_bottom) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end -def sbol_blunt_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL blunt-end restriction site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 4.0 - x_extent = 1.5 - site_space = 1.5 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'site_space' in list(opts.keys()): - site_space = opts['site_space'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - # Direction is meaningless for this part => start is always < end - if start > end: - temp_end = end - end = start - start = temp_end - - # Check direction add start padding - final_end = end - final_start = prev_end - start = prev_end+start_pad - end = start+x_extent+site_space+x_extent - final_end = end+end_pad - - l1 = Line2D([start+x_extent,start+x_extent],[-y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start,start+x_extent],[y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start,start+x_extent],[-y_extent,-y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - - l2 = Line2D([end-x_extent,end-x_extent],[-y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l2_top = Line2D([end,end-x_extent],[y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l2_bottom = Line2D([end,end-x_extent],[-y_extent,-y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - - ax.add_line(l1) - ax.add_line(l1_top) - ax.add_line(l1_bottom) - ax.add_line(l2) - ax.add_line(l2_top) - ax.add_line(l2_bottom) - - if opts != None and 'label' in list(opts.keys()): - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - return final_start, final_end +def sbol_empty_space (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in empty space renderer. + """ + # Default options + zorder_add = 0.0 + x_extent = 12.0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + # Check direction add start padding + final_start = prev_end + final_end = final_start+x_extent + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + +def sbol_5_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL 5' overhang renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 0.0 + end_pad = 2.0 + x_extent = 6.0 + y_extent = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l_bottom = Line2D([start+(x_extent/2.0),start+x_extent],[-1*y_extent,-1*y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + ax.add_line(l_top) + ax.add_line(l_bottom) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + +def sbol_3_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL 3' overhang renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 0.0 + x_extent = 6.0 + y_extent = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l_bottom = Line2D([start,start+(x_extent/2.0)],[-1*y_extent,-1*y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + ax.add_line(l_top) + ax.add_line(l_bottom) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + +def sbol_blunt_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL blunt-end restriction site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 4.0 + x_extent = 1.5 + site_space = 1.5 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'site_space' in list(opts.keys()): + site_space = opts['site_space'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + # Direction is meaningless for this part => start is always < end + if start > end: + temp_end = end + end = start + start = temp_end + + # Check direction add start padding + final_end = end + final_start = prev_end + start = prev_end+start_pad + end = start+x_extent+site_space+x_extent + final_end = end+end_pad + + l1 = Line2D([start+x_extent,start+x_extent],[-y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_top = Line2D([start,start+x_extent],[y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_bottom = Line2D([start,start+x_extent],[-y_extent,-y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + + l2 = Line2D([end-x_extent,end-x_extent],[-y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l2_top = Line2D([end,end-x_extent],[y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l2_bottom = Line2D([end,end-x_extent],[-y_extent,-y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + + ax.add_line(l1) + ax.add_line(l1_top) + ax.add_line(l1_bottom) + ax.add_line(l2) + ax.add_line(l2_top) + ax.add_line(l2_bottom) + + if opts != None and 'label' in list(opts.keys()): + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + return final_start, final_end + + +def sbol_primer_binding_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL primer binding site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 2.0 + y_offset = 1.5 + x_extent = 8.0 + arrowhead_length = 2.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + direction = 'F' + if start > end: + direction = 'R' + temp_end = end + end = start + start = temp_end + + final_end = prev_end + final_start = prev_end + + if direction == 'F': + final_start = prev_end + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + else: + final_start = prev_end + end = prev_end+end_pad + start = end+x_extent + final_start = start+start_pad + + if direction == 'F': + verts = [(start, y_offset), (end, y_offset), (end-arrowhead_length, y_offset+y_extent)] + codes = [Path.MOVETO, Path.LINETO, Path.LINETO] + path = Path(verts, codes) + patch = PathPatch(path, lw=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=1+zorder_add) + ax.add_patch(patch) + else: + verts = [(start, -y_offset), (end, -y_offset), (end+arrowhead_length, -y_offset-y_extent)] + codes = [Path.MOVETO, Path.LINETO, Path.LINETO] + path = Path(verts, codes) + patch = PathPatch(path, lw=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=1+zorder_add) + ax.add_patch(patch) + + if opts != None and 'label' in list(opts.keys()): + if start > end: + write_label(ax, opts['label'], end+((start-end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start+((end-start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + +def sbol_5_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL 5' sticky-end restriction site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 4.0 + x_extent = 8.0 + end_space = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'end_space' in list(opts.keys()): + end_space = opts['end_space'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + # Direction is meaningless for this part => start is always < end + if start > end: + temp_end = end + end = start + start = temp_end + + # Check direction add start padding + final_end = end + final_start = prev_end + start = prev_end+start_pad + end = start+end_space+x_extent+end_space + final_end = end+end_pad + + l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_top = Line2D([start+end_space,start+end_space],[0,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_bottom = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,-y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(l1) + ax.add_line(l1_top) + ax.add_line(l1_bottom) + + # White rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (end, -y_extent), + (end, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + + if opts != None and 'label' in list(opts.keys()): + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + return final_start, final_end + + +def sbol_3_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL 3' sticky-end restriction site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 4.0 + x_extent = 8.0 + end_space = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'end_space' in list(opts.keys()): + end_space = opts['end_space'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + # Direction is meaningless for this part => start is always < end + if start > end: + temp_end = end + end = start + start = temp_end + + # Check direction add start padding + final_end = end + final_start = prev_end + start = prev_end+start_pad + end = start+end_space+x_extent+end_space + final_end = end+end_pad + + l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_top = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_bottom = Line2D([start+end_space,start+end_space],[0,-y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(l1) + ax.add_line(l1_top) + ax.add_line(l1_bottom) + + # White rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (end, -y_extent), + (end, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + + if opts != None and 'label' in list(opts.keys()): + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + return final_start, final_end + + +def sbol_user_defined (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL user-defined element renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 12.0 + y_extent = 3.0 + linestyle = '-' + fill_color = (1,1,1) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'fill_color' in list(opts.keys()): + fill_color = opts['fill_color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + +def sbol_signature (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL signature renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 12.0 + y_extent = 3.0 + linestyle = '-' + fill_color = (1,1,1) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'fill_color' in list(opts.keys()): + fill_color = opts['fill_color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + direction = 'F' + if start > end: + direction = 'R' + temp_end = end + end = start + start = temp_end + + final_end = prev_end + final_start = prev_end + + if direction == 'F': + final_start = prev_end + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + else: + final_start = prev_end + end = prev_end+end_pad + start = end+x_extent + final_start = start+start_pad + + indent_fac = (y_extent*2.0)*0.3 + cross_width = (y_extent*2.0)*0.7 + + if direction == 'F': + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + top1x = start + indent_fac + top1y = y_extent - indent_fac + top2x = start + cross_width + top2y = y_extent - indent_fac + bot1x = start + indent_fac + bot1y = -y_extent + indent_fac + bot2x = start + cross_width + bot2y = -y_extent + indent_fac + lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(lcross1) + ax.add_line(lcross2) + lsign = Line2D([bot2x+indent_fac,end-indent_fac],[-y_extent+indent_fac,-y_extent+indent_fac], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(lsign) + else: + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start-x_extent, -y_extent), + (start-x_extent, y_extent)], + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + top1x = start - indent_fac + top1y = y_extent - indent_fac + top2x = start - cross_width + top2y = y_extent - indent_fac + bot1x = start - indent_fac + bot1y = -y_extent + indent_fac + bot2x = start - cross_width + bot2y = -y_extent + indent_fac + lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(lcross1) + ax.add_line(lcross2) + lsign = Line2D([bot2x-indent_fac,end+indent_fac],[y_extent-indent_fac,y_extent-indent_fac], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(lsign) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end +def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ SBOL recombinase site renderer - forward direction + """ + # Default parameters + color = (0,0,0) + color2 = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 6.0 + y_extent = 6.0 + linestyle = '-' + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'color2' in list(opts.keys()): + color2 = opts['color2'] + # Check direction add start padding + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 -def sbol_primer_binding_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL primer binding site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 2.0 - y_offset = 1.5 - x_extent = 8.0 - arrowhead_length = 2.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - direction = 'F' - if start > end: - direction = 'R' - temp_end = end - end = start - start = temp_end - - final_end = prev_end - final_start = prev_end - - if direction == 'F': - final_start = prev_end - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - else: - final_start = prev_end - end = prev_end+end_pad - start = end+x_extent - final_start = start+start_pad - - if direction == 'F': - verts = [(start, y_offset), (end, y_offset), (end-arrowhead_length, y_offset+y_extent)] - codes = [Path.MOVETO, Path.LINETO, Path.LINETO] - path = Path(verts, codes) - patch = PathPatch(path, lw=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=1+zorder_add) - ax.add_patch(patch) - else: - verts = [(start, -y_offset), (end, -y_offset), (end+arrowhead_length, -y_offset-y_extent)] - codes = [Path.MOVETO, Path.LINETO, Path.LINETO] - path = Path(verts, codes) - patch = PathPatch(path, lw=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=1+zorder_add) - ax.add_patch(patch) - - if opts != None and 'label' in list(opts.keys()): - if start > end: - write_label(ax, opts['label'], end+((start-end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start+((end-start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + if start > end: + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad+linewidth + final_end = start+start_pad + color = color2 + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad + # Draw the site + p1 = Polygon([(start, y_lower), + (start, y_upper), + (end,0)], + edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, + path_effects=[Stroke(joinstyle="miter")]) + ax.add_patch(p1) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end -def sbol_5_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL 5' sticky-end restriction site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 4.0 - x_extent = 8.0 - end_space = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'end_space' in list(opts.keys()): - end_space = opts['end_space'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - # Direction is meaningless for this part => start is always < end - if start > end: - temp_end = end - end = start - start = temp_end - - # Check direction add start padding - final_end = end - final_start = prev_end - start = prev_end+start_pad - end = start+end_space+x_extent+end_space - final_end = end+end_pad - - l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start+end_space,start+end_space],[0,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,-y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(l1) - ax.add_line(l1_top) - ax.add_line(l1_bottom) - - # White rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (end, -y_extent), - (end, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - return final_start, final_end +def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ SBOL recombinase site renderer - reverse direction + """ + # Default parameters + color = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 6.0 + y_extent = 6.0 + linestyle = '-' + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + # Check direction add start padding + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 + wavemult = 1 + if start > end: + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad+linewidth + final_end = start+start_pad + wavemult = -1 + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad + midpoint = (end + start) / 2 -def sbol_3_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL 3' sticky-end restriction site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 4.0 - x_extent = 8.0 - end_space = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'end_space' in list(opts.keys()): - end_space = opts['end_space'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - # Direction is meaningless for this part => start is always < end - if start > end: - temp_end = end - end = start - start = temp_end - - # Check direction add start padding - final_end = end - final_start = prev_end - start = prev_end+start_pad - end = start+end_space+x_extent+end_space - final_end = end+end_pad - - l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start+end_space,start+end_space],[0,-y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(l1) - ax.add_line(l1_top) - ax.add_line(l1_bottom) - - # White rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (end, -y_extent), - (end, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - return final_start, final_end + wave_height = wavemult*y_extent + #wave_height = -y_extent + wave_start = start + + wave_length = end-start + wave_bezier_amp = y_extent*0.2 + wave_bezier_dx = wave_length/15.0#wave_bezier_amp*math.cos(math.pi/4) + wave_bezier_dy = wavemult*wave_bezier_amp*math.sin(math.pi/4) + wavy_rna_path = Path(vertices=[[wave_start,0], + [wave_start, wave_height], + [wave_start + wave_bezier_dx, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*2, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*3, wave_height], + [wave_start + wave_bezier_dx*4, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*5, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*6, wave_height], + [wave_start + wave_bezier_dx*7, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*8, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*9, wave_height], + [wave_start + wave_bezier_dx*10, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*11, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*12, wave_height], + [wave_start + wave_bezier_dx*13, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*14, wave_height+wave_bezier_dy], + [wave_end,wave_height], + [wave_end,0], + [wave_end,0] + ], + codes=[1, 2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79]) + wavy_rna = PathPatch(wavy_rna_path, linewidth=linewidth, edgecolor=(0,0,0), + facecolor=color, zorder=12, linestyle='-') -def sbol_user_defined (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL user-defined element renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 12.0 - y_extent = 3.0 - linestyle = '-' - fill_color = (1,1,1) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'fill_color' in list(opts.keys()): - fill_color = opts['fill_color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + ax.add_patch(wavy_rna) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end -def sbol_signature (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL signature renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 12.0 - y_extent = 3.0 - linestyle = '-' - fill_color = (1,1,1) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'fill_color' in list(opts.keys()): - fill_color = opts['fill_color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - direction = 'F' - if start > end: - direction = 'R' - temp_end = end - end = start - start = temp_end - - final_end = prev_end - final_start = prev_end - - if direction == 'F': - final_start = prev_end - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - else: - final_start = prev_end - end = prev_end+end_pad - start = end+x_extent - final_start = start+start_pad - - indent_fac = (y_extent*2.0)*0.3 - cross_width = (y_extent*2.0)*0.7 - - if direction == 'F': - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - top1x = start + indent_fac - top1y = y_extent - indent_fac - top2x = start + cross_width - top2y = y_extent - indent_fac - bot1x = start + indent_fac - bot1y = -y_extent + indent_fac - bot2x = start + cross_width - bot2y = -y_extent + indent_fac - lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(lcross1) - ax.add_line(lcross2) - lsign = Line2D([bot2x+indent_fac,end-indent_fac],[-y_extent+indent_fac,-y_extent+indent_fac], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(lsign) - else: - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start-x_extent, -y_extent), - (start-x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - top1x = start - indent_fac - top1y = y_extent - indent_fac - top2x = start - cross_width - top2y = y_extent - indent_fac - bot1x = start - indent_fac - bot1y = -y_extent + indent_fac - bot2x = start - cross_width - bot2y = -y_extent + indent_fac - lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(lcross1) - ax.add_line(lcross2) - lsign = Line2D([bot2x-indent_fac,end+indent_fac],[y_extent-indent_fac,y_extent-indent_fac], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(lsign) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end -def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ SBOL recombinase site renderer - forward direction +def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ SBOL recombinase site renderer - reverse direction """ # Default parameters color = (0,0,0) @@ -1546,53 +1705,255 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op color = opts['color'] if 'color2' in list(opts.keys()): color2 = opts['color2'] + else: + if 'color' in list(opts.keys()): + r2 = float(color[0]) / 2 + g2 = float(color[1]) / 2 + b2 = float(color[2]) / 2 + color2 = (r2,g2,b2) # Check direction add start padding final_end = end final_start = prev_end y_lower = -1 * y_extent/2 y_upper = y_extent/2 - - if start > end: start = prev_end+end_pad+x_extent+linewidth end = prev_end+end_pad+linewidth final_end = start+start_pad + temp = color color = color2 + color2 = temp else: start = prev_end+start_pad+linewidth end = start+x_extent final_end = end+end_pad # Draw the site p1 = Polygon([(start, y_lower), - (start, y_upper), - (end,0)], - edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, - path_effects=[Stroke(joinstyle="miter")]) + (start, y_upper), + (end,0)], + edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, + path_effects=[Stroke(joinstyle="miter")]) + midpoint = (end + start) / 2 + hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) + hypotenuse2 = hypotenuse / 2 + cosineA = (y_extent/2) / hypotenuse + f = hypotenuse2 * cosineA + p2 = Polygon([(midpoint, -1*f), + (midpoint, f), + (end,0)], + edgecolor=(0,0,0), facecolor=color2, linewidth=linewidth, zorder=12, + path_effects=[Stroke(joinstyle="miter")]) ax.add_patch(p1) + ax.add_patch(p2) # Add a label if needed if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) else: write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - # Return the final start and end positions to the DNA renderer + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + +def sbol_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL restriction site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 4.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start + linewidth + final_end = end+end_pad + + l1 = Line2D([start,start],[-y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(l1) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + +def sbol_spacer (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL spacer renderer. + """ + # Default options + zorder_add = 0.0 + color = (1,1,1) + edgecolor = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 6.0 + y_extent = 6.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + rbs_center = (start+((end-start)/2.0),0) + center_x = start+(end-start)/2.0 + radius = x_extent/2 + + delta = radius - 0.5 * radius * math.sqrt(2) + + l1 = Line2D([start+delta,end-delta],[radius-delta,-1*radius+delta], + linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) + l2 = Line2D([start+delta,end-delta],[-1*radius+delta,radius-delta], + linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=edgecolor, + facecolor=color, zorder=12+zorder_add) + + ax.add_patch(c1) + ax.add_line(l1) + ax.add_line(l2) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + + +def sbol_origin (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL origin renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 10.0 + y_extent = 10.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + ori_center = (start+((end-start)/2.0),0) + + c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + + ax.add_patch(c1) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: return prev_end, final_start else: return prev_end, final_end -def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ SBOL recombinase site renderer - reverse direction + +def sbol_operator (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL operator renderer. """ - # Default parameters + # Default options + zorder_add = 0.0 color = (0,0,0) - start_pad = 0.0 - end_pad = 0.0 + start_pad = 2.0 + end_pad = 2.0 x_extent = 6.0 - y_extent = 6.0 + y_extent = 3.0 linestyle = '-' - # Update default parameters if provided + # Reset defaults if provided if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] if 'start_pad' in list(opts.keys()): start_pad = opts['start_pad'] if 'end_pad' in list(opts.keys()): @@ -1607,86 +1968,53 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - if 'color' in list(opts.keys()): - color = opts['color'] # Check direction add start padding - final_end = end final_start = prev_end - y_lower = -1 * y_extent/2 - y_upper = y_extent/2 - wavemult = 1 - if start > end: - start = prev_end+end_pad+x_extent+linewidth - end = prev_end+end_pad+linewidth - final_end = start+start_pad - wavemult = -1 - else: - start = prev_end+start_pad+linewidth - end = start+x_extent - final_end = end+end_pad - midpoint = (end + start) / 2 + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad - wave_height = wavemult*y_extent - #wave_height = -y_extent - wave_start = start - - wave_length = end-start - wave_bezier_amp = y_extent*0.2 - wave_bezier_dx = wave_length/15.0#wave_bezier_amp*math.cos(math.pi/4) - wave_bezier_dy = wavemult*wave_bezier_amp*math.sin(math.pi/4) - wavy_rna_path = Path(vertices=[[wave_start,0], - [wave_start, wave_height], - [wave_start + wave_bezier_dx, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*2, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*3, wave_height], - [wave_start + wave_bezier_dx*4, wave_height-wave_bezier_dy], - [wave_start + wave_bezier_dx*5, wave_height-wave_bezier_dy], - [wave_start + wave_bezier_dx*6, wave_height], - [wave_start + wave_bezier_dx*7, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*8, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*9, wave_height], - [wave_start + wave_bezier_dx*10, wave_height-wave_bezier_dy], - [wave_start + wave_bezier_dx*11, wave_height-wave_bezier_dy], - [wave_start + wave_bezier_dx*12, wave_height], - [wave_start + wave_bezier_dx*13, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*14, wave_height+wave_bezier_dy], - [wave_end,wave_height], - [wave_end,0], - [wave_end,0] - ], - codes=[1, 2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79]) - wavy_rna = PathPatch(wavy_rna_path, linewidth=linewidth, edgecolor=(0,0,0), - facecolor=color, zorder=12, linestyle='-') + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) - ax.add_patch(wavy_rna) - # Add a label if needed if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) else: write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - # Return the final start and end positions to the DNA renderer + if final_start > final_end: return prev_end, final_start else: return prev_end, final_end -def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ SBOL recombinase site renderer - reverse direction +def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL insulator renderer. """ - # Default parameters + # Default options + zorder_add = 0.0 color = (0,0,0) - color2 = (0,0,0) - start_pad = 0.0 - end_pad = 0.0 - x_extent = 6.0 - y_extent = 6.0 + start_pad = 2.0 + end_pad = 2.0 + x_extent = 8.0 + y_extent = 4.0 linestyle = '-' - # Update default parameters if provided + # Reset defaults if provided if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] if 'start_pad' in list(opts.keys()): start_pad = opts['start_pad'] if 'end_pad' in list(opts.keys()): @@ -1701,440 +2029,112 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'color2' in list(opts.keys()): - color2 = opts['color2'] - else: - if 'color' in list(opts.keys()): - r2 = float(color[0]) / 2 - g2 = float(color[1]) / 2 - b2 = float(color[2]) / 2 - color2 = (r2,g2,b2) + # Check direction add start padding final_end = end final_start = prev_end - y_lower = -1 * y_extent/2 - y_upper = y_extent/2 - if start > end: - start = prev_end+end_pad+x_extent+linewidth - end = prev_end+end_pad+linewidth - final_end = start+start_pad - temp = color - color = color2 - color2 = temp - else: - start = prev_end+start_pad+linewidth - end = start+x_extent - final_end = end+end_pad - # Draw the site - p1 = Polygon([(start, y_lower), - (start, y_upper), - (end,0)], - edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, - path_effects=[Stroke(joinstyle="miter")]) - midpoint = (end + start) / 2 - hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) - hypotenuse2 = hypotenuse / 2 - cosineA = (y_extent/2) / hypotenuse - f = hypotenuse2 * cosineA - p2 = Polygon([(midpoint, -1*f), - (midpoint, f), - (end,0)], - edgecolor=(0,0,0), facecolor=color2, linewidth=linewidth, zorder=12, - path_effects=[Stroke(joinstyle="miter")]) + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + bits = 5.0 + gap_size = ((end-start)/bits) + x_inset_start = start + gap_size + x_inset_end = start + ((bits-1.0)*gap_size) + + # Inside rectangle + p2 = Polygon([(x_inset_start, y_extent-gap_size), + (x_inset_start, -y_extent+gap_size), + (x_inset_end, -y_extent+gap_size), + (x_inset_end, y_extent-gap_size)], + edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=12+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) ax.add_patch(p2) - # Add a label if needed + if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) else: write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - # Return the final start and end positions to the DNA renderer + if final_start > final_end: return prev_end, final_start else: return prev_end, final_end -def sbol_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL restriction site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 4.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start + linewidth - final_end = end+end_pad - - l1 = Line2D([start,start],[-y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(l1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end - - -def sbol_spacer (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL spacer renderer. - """ - # Default options - zorder_add = 0.0 - color = (1,1,1) - edgecolor = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 6.0 - y_extent = 6.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'edgecolor' in list(opts.keys()): - edgecolor = opts['edgecolor'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - rbs_center = (start+((end-start)/2.0),0) - center_x = start+(end-start)/2.0 - radius = x_extent/2 - - delta = radius - 0.5 * radius * math.sqrt(2) - - l1 = Line2D([start+delta,end-delta],[radius-delta,-1*radius+delta], - linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) - l2 = Line2D([start+delta,end-delta],[-1*radius+delta,radius-delta], - linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=edgecolor, - facecolor=color, zorder=12+zorder_add) - - ax.add_patch(c1) - ax.add_line(l1) - ax.add_line(l2) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end - - -def sbol_origin (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL origin renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 10.0 - y_extent = 10.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - ori_center = (start+((end-start)/2.0),0) - - c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - - ax.add_patch(c1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end - - -def sbol_operator (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL operator renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 6.0 - y_extent = 3.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end +# Not used at present +def temporary_repressor (ax, type, num, start, end, prev_end, scale, linewidth, opts): + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 10 + x_extent = 10 + arrowhead_height = 2 + arrowhead_length = 4 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + e1center = (start+((end-start)/2.0),0) + e2center = (start+((end-start)/2.0)+x_extent/3.75,0) -def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL insulator renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 8.0 - y_extent = 4.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - # Check direction add start padding - final_end = end - final_start = prev_end - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - bits = 5.0 - gap_size = ((end-start)/bits) - x_inset_start = start + gap_size - x_inset_end = start + ((bits-1.0)*gap_size) - - # Inside rectangle - p2 = Polygon([(x_inset_start, y_extent-gap_size), - (x_inset_start, -y_extent+gap_size), - (x_inset_end, -y_extent+gap_size), - (x_inset_end, y_extent-gap_size)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=12+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - ax.add_patch(p2) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + e1 = Ellipse(e1center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, + linewidth=linewidth, fill=True, zorder=12+zorder_add) + e2 = Ellipse(e2center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, + linewidth=linewidth, fill=True, zorder=11+zorder_add) + ax.add_patch(e1) + ax.add_patch(e2) -# Not used at present -def temporary_repressor (ax, type, num, start, end, prev_end, scale, linewidth, opts): - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 10 - x_extent = 10 - arrowhead_height = 2 - arrowhead_length = 4 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - e1center = (start+((end-start)/2.0),0) - e2center = (start+((end-start)/2.0)+x_extent/3.75,0) - - e1 = Ellipse(e1center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, - linewidth=linewidth, fill=True, zorder=12+zorder_add) - e2 = Ellipse(e2center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, - linewidth=linewidth, fill=True, zorder=11+zorder_add) - - ax.add_patch(e1) - ax.add_patch(e2) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end ############################################################################### @@ -2143,115 +2143,115 @@ def temporary_repressor (ax, type, num, start, end, prev_end, scale, linewidth, def repress (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): - """ Standard repression regulation renderer. - """ - regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) + """ Standard repression regulation renderer. + """ + regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) def induce (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): - """ Standard induction regulation renderer. - """ - regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) + """ Standard induction regulation renderer. + """ + regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) def connect (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): - """ Standard induction regulation renderer. - """ - regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) + """ Standard induction regulation renderer. + """ + regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): - """ General function for drawing regulation arcs. - """ - - color = (0.0,0.0,0.0) - arrowhead_length = 3 - linestyle = '-' - arcHeightConst = 15 - arcHeightSpacing = 5 - arcHeightStart = 10 - arcHeight = arcHeightConst + arc_height_index*arcHeightSpacing - arcHeightEnd = arcHeightStart*1.5 - arc_start_x_offset = 0.0 - arc_end_x_offset = 0.0 - - # Reset defaults if provided - if opts != None: - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'arc_height' in list(opts.keys()): - arcHeight = opts['arc_height'] - if 'arc_height_const' in list(opts.keys()): - arcHeightConst = opts['arc_height_const'] - if 'arc_height_spacing' in list(opts.keys()): - arcHeightSpacing = opts['arc_height_spacing'] - if 'arc_height_start' in list(opts.keys()): - arcHeightStart = opts['arc_height_start'] - if 'arc_height_end' in list(opts.keys()): - arcHeightEnd = opts['arc_height_end'] - if 'arc_start_x_offset' in list(opts.keys()): - arc_start_x_offset = opts['arc_start_x_offset'] - if 'arc_end_x_offset' in list(opts.keys()): - arc_end_x_offset = opts['arc_end_x_offset'] - - if opts == None or 'arc_height' not in list(opts.keys()): - arcHeight = arcHeightConst + arc_height_index*arcHeightSpacing - startHeight = arcHeightStart - - start = ((from_part['start'] + from_part['end']) / 2) + arc_start_x_offset - end = ((to_part['start'] + to_part['end']) / 2) + arc_end_x_offset - - top = arcHeight; - base = startHeight; - indHeight = arrowhead_length - corr = linewidth - - if to_part['fwd'] == False: - base = -1*startHeight - arcHeightEnd = -arcHeightEnd - top = -1*arcHeight - indHeight = -1*arrowhead_length - corr *= -1 - - - line_away = Line2D([start,start],[base,top], - linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_across = Line2D([start,end],[top,top], - linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_toward = Line2D([end,end],[top,arcHeightEnd+corr], - linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_rep = Line2D([end-arrowhead_length,end+arrowhead_length],[arcHeightEnd,arcHeightEnd], - linewidth=linewidth, color=color, zorder=12, linestyle='-') - line_ind1 = Line2D([end-arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], - linewidth=linewidth, color=color, zorder=12, linestyle='-') - line_ind2 = Line2D([end+arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], - linewidth=linewidth, color=color, zorder=12, linestyle='-') - - if(type == 'Repression'): - ax.add_line(line_rep) - ax.add_line(line_away) - ax.add_line(line_across) - ax.add_line(line_toward) - - if(type == 'Activation'): - ax.add_line(line_ind1) - ax.add_line(line_ind2) - ax.add_line(line_away) - ax.add_line(line_across) - ax.add_line(line_toward) - - if(type == 'Connection'): - verts = [ (start, base), (start, top), (end, top), (end, base) ] - codes = [Path.MOVETO, Path.CURVE4, Path.CURVE4, Path.CURVE4] - path1 = Path(verts, codes) - patch = patches.PathPatch(path1, facecolor='none', lw=linewidth, edgecolor=color) - ax.add_patch(patch) + """ General function for drawing regulation arcs. + """ + + color = (0.0,0.0,0.0) + arrowhead_length = 3 + linestyle = '-' + arcHeightConst = 15 + arcHeightSpacing = 5 + arcHeightStart = 10 + arcHeight = arcHeightConst + arc_height_index*arcHeightSpacing + arcHeightEnd = arcHeightStart*1.5 + arc_start_x_offset = 0.0 + arc_end_x_offset = 0.0 + + # Reset defaults if provided + if opts != None: + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'arc_height' in list(opts.keys()): + arcHeight = opts['arc_height'] + if 'arc_height_const' in list(opts.keys()): + arcHeightConst = opts['arc_height_const'] + if 'arc_height_spacing' in list(opts.keys()): + arcHeightSpacing = opts['arc_height_spacing'] + if 'arc_height_start' in list(opts.keys()): + arcHeightStart = opts['arc_height_start'] + if 'arc_height_end' in list(opts.keys()): + arcHeightEnd = opts['arc_height_end'] + if 'arc_start_x_offset' in list(opts.keys()): + arc_start_x_offset = opts['arc_start_x_offset'] + if 'arc_end_x_offset' in list(opts.keys()): + arc_end_x_offset = opts['arc_end_x_offset'] + + if opts == None or 'arc_height' not in list(opts.keys()): + arcHeight = arcHeightConst + arc_height_index*arcHeightSpacing + startHeight = arcHeightStart + + start = ((from_part['start'] + from_part['end']) / 2) + arc_start_x_offset + end = ((to_part['start'] + to_part['end']) / 2) + arc_end_x_offset + + top = arcHeight; + base = startHeight; + indHeight = arrowhead_length + corr = linewidth + + if to_part['fwd'] == False: + base = -1*startHeight + arcHeightEnd = -arcHeightEnd + top = -1*arcHeight + indHeight = -1*arrowhead_length + corr *= -1 + + + line_away = Line2D([start,start],[base,top], + linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) + line_across = Line2D([start,end],[top,top], + linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) + line_toward = Line2D([end,end],[top,arcHeightEnd+corr], + linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) + line_rep = Line2D([end-arrowhead_length,end+arrowhead_length],[arcHeightEnd,arcHeightEnd], + linewidth=linewidth, color=color, zorder=12, linestyle='-') + line_ind1 = Line2D([end-arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], + linewidth=linewidth, color=color, zorder=12, linestyle='-') + line_ind2 = Line2D([end+arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], + linewidth=linewidth, color=color, zorder=12, linestyle='-') + + if(type == 'Repression'): + ax.add_line(line_rep) + ax.add_line(line_away) + ax.add_line(line_across) + ax.add_line(line_toward) + + if(type == 'Activation'): + ax.add_line(line_ind1) + ax.add_line(line_ind2) + ax.add_line(line_away) + ax.add_line(line_across) + ax.add_line(line_toward) + + if(type == 'Connection'): + verts = [ (start, base), (start, top), (end, top), (end, base) ] + codes = [Path.MOVETO, Path.CURVE4, Path.CURVE4, Path.CURVE4] + path1 = Path(verts, codes) + patch = patches.PathPatch(path1, facecolor='none', lw=linewidth, edgecolor=color) + ax.add_patch(patch) ############################################################################### @@ -2260,365 +2260,365 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ def trace_promoter_start (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based promoter renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.0,0.0,1.0) - y_offset = 0.0 - y_extent = 6.0 - x_extent = 30.0 - arrowhead_height = 0.5 - arrowhead_length = 15.0 - highlight_y_extent = 0.8 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'highlight_y_extent' in list(opts.keys()): - highlight_y_extent = opts['highlight_y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - y_offset = -y_offset - # Draw the promoter symbol - l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=14+zorder_add) - l2 = Line2D([start_bp,start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], - [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=14+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - p1 = Polygon([(start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent+(arrowhead_height)+y_offset), - (start_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), - (start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent-(arrowhead_height)+y_offset)], - facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), - (start_bp, highlight_y_extent+y_offset), - (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p2) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based promoter renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.0,0.0,1.0) + y_offset = 0.0 + y_extent = 6.0 + x_extent = 30.0 + arrowhead_height = 0.5 + arrowhead_length = 15.0 + highlight_y_extent = 0.8 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'highlight_y_extent' in list(opts.keys()): + highlight_y_extent = opts['highlight_y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + y_offset = -y_offset + # Draw the promoter symbol + l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=14+zorder_add) + l2 = Line2D([start_bp,start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], + [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=14+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + p1 = Polygon([(start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent+(arrowhead_height)+y_offset), + (start_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), + (start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent-(arrowhead_height)+y_offset)], + facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + # Shade the promoter area (normally smaller than symbol extent) + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + (start_bp, highlight_y_extent+y_offset), + (end_bp, highlight_y_extent+y_offset), + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p2) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_promoter (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based promoter renderer with arrow at TSS. - """ - # Default options - zorder_add = 0.0 - color = (0.0,0.0,1.0) - y_offset = 0.0 - y_extent = 6.0 - x_extent = 30.0 - arrowhead_height = 0.5 - arrowhead_length = 15.0 - highlight_y_extent = 0.8 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'highlight_y_extent' in list(opts.keys()): - highlight_y_extent = opts['highlight_y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - y_offset = -y_offset - # Draw the promoter symbol - l1 = Line2D([end_bp,end_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=14+zorder_add) - l2 = Line2D([end_bp,end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], - [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=14+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - p1 = Polygon([(end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent+(arrowhead_height)+y_offset), - (end_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), - (end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent-(arrowhead_height)+y_offset)], - facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), - (start_bp, highlight_y_extent+y_offset), - (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p2) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based promoter renderer with arrow at TSS. + """ + # Default options + zorder_add = 0.0 + color = (0.0,0.0,1.0) + y_offset = 0.0 + y_extent = 6.0 + x_extent = 30.0 + arrowhead_height = 0.5 + arrowhead_length = 15.0 + highlight_y_extent = 0.8 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'highlight_y_extent' in list(opts.keys()): + highlight_y_extent = opts['highlight_y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + y_offset = -y_offset + # Draw the promoter symbol + l1 = Line2D([end_bp,end_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=14+zorder_add) + l2 = Line2D([end_bp,end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], + [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=14+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + p1 = Polygon([(end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent+(arrowhead_height)+y_offset), + (end_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), + (end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent-(arrowhead_height)+y_offset)], + facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + # Shade the promoter area (normally smaller than symbol extent) + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + (start_bp, highlight_y_extent+y_offset), + (end_bp, highlight_y_extent+y_offset), + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p2) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_rbs (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based ribosome binding site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.16,0.68,0.15) - y_offset = 0.0 - y_extent = 3.5 - x_extent = 10.0 - highlight_y_extent = 0.8 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'highlight_y_extent' in list(opts.keys()): - highlight_y_extent = opts['highlight_y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - # Draw the RBS symbol - l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) - ax.add_line(l1) - c1 = Ellipse((start_bp,dir_fac*y_extent+y_offset),width=(x_extent*scale),height=y_extent*0.4,color=color, zorder=14+zorder_add) - ax.add_artist(c1) - # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), - (start_bp, highlight_y_extent+y_offset), - (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p2) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based ribosome binding site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.16,0.68,0.15) + y_offset = 0.0 + y_extent = 3.5 + x_extent = 10.0 + highlight_y_extent = 0.8 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'highlight_y_extent' in list(opts.keys()): + highlight_y_extent = opts['highlight_y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + # Draw the RBS symbol + l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) + ax.add_line(l1) + c1 = Ellipse((start_bp,dir_fac*y_extent+y_offset),width=(x_extent*scale),height=y_extent*0.4,color=color, zorder=14+zorder_add) + ax.add_artist(c1) + # Shade the promoter area (normally smaller than symbol extent) + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + (start_bp, highlight_y_extent+y_offset), + (end_bp, highlight_y_extent+y_offset), + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p2) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_user_defined (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based user defined region renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - hatch = '' - y_offset = 0.0 - y_extent = 1.5 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'hatch' in list(opts.keys()): - hatch = opts['hatch'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - # Draw the CDS symbol - p1 = Polygon([(start_bp, y_extent+y_offset), - (start_bp, -y_extent+y_offset), - (end_bp-dir_fac*scale, -y_extent+y_offset), - (end_bp-dir_fac*scale, y_extent+y_offset)], - edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=15+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based user defined region renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + hatch = '' + y_offset = 0.0 + y_extent = 1.5 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'hatch' in list(opts.keys()): + hatch = opts['hatch'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + # Draw the CDS symbol + p1 = Polygon([(start_bp, y_extent+y_offset), + (start_bp, -y_extent+y_offset), + (end_bp-dir_fac*scale, -y_extent+y_offset), + (end_bp-dir_fac*scale, y_extent+y_offset)], + edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=15+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_cds (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based coding sequence renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - hatch = '' - y_offset = 0.0 - y_extent = 1.5 - arrowhead_height = 1.0 - arrowhead_length = 30.0 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'hatch' in list(opts.keys()): - hatch = opts['hatch'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - # Draw the CDS symbol - p1 = Polygon([(start_bp, y_extent+y_offset), - (start_bp, -y_extent+y_offset), - (end_bp-dir_fac*arrowhead_length*scale, -y_extent+y_offset), - (end_bp-dir_fac*arrowhead_length*scale, -y_extent-arrowhead_height+y_offset), - (end_bp, 0+y_offset), - (end_bp-dir_fac*arrowhead_length*scale, y_extent+arrowhead_height+y_offset), - (end_bp-dir_fac*arrowhead_length*scale, y_extent+y_offset)], - edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=15+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based coding sequence renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + hatch = '' + y_offset = 0.0 + y_extent = 1.5 + arrowhead_height = 1.0 + arrowhead_length = 30.0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'hatch' in list(opts.keys()): + hatch = opts['hatch'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + # Draw the CDS symbol + p1 = Polygon([(start_bp, y_extent+y_offset), + (start_bp, -y_extent+y_offset), + (end_bp-dir_fac*arrowhead_length*scale, -y_extent+y_offset), + (end_bp-dir_fac*arrowhead_length*scale, -y_extent-arrowhead_height+y_offset), + (end_bp, 0+y_offset), + (end_bp-dir_fac*arrowhead_length*scale, y_extent+arrowhead_height+y_offset), + (end_bp-dir_fac*arrowhead_length*scale, y_extent+y_offset)], + edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=15+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_terminator (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based terminator renderer. - """ - # Default options - zorder_add = 0.0 - color = (1.0,0.0,0.0) - y_offset = 0.0 - y_extent = 3.5 - x_extent = 10.0 - highlight_y_extent = 0.8 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'highlight_y_extent' in list(opts.keys()): - highlight_y_extent = opts['highlight_y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - # Draw the terminator symbol - l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=8+zorder_add) - l2 = Line2D([start_bp-(x_extent*scale),start_bp+(x_extent*scale)],[dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - # Shade the terminator area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), - (start_bp, highlight_y_extent+y_offset), - (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=13, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p2) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based terminator renderer. + """ + # Default options + zorder_add = 0.0 + color = (1.0,0.0,0.0) + y_offset = 0.0 + y_extent = 3.5 + x_extent = 10.0 + highlight_y_extent = 0.8 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'highlight_y_extent' in list(opts.keys()): + highlight_y_extent = opts['highlight_y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + # Draw the terminator symbol + l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=8+zorder_add) + l2 = Line2D([start_bp-(x_extent*scale),start_bp+(x_extent*scale)],[dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + # Shade the terminator area (normally smaller than symbol extent) + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + (start_bp, highlight_y_extent+y_offset), + (end_bp, highlight_y_extent+y_offset), + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=13, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p2) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp ############################################################################### # The DNA renderer @@ -2626,406 +2626,406 @@ def trace_terminator (ax, type, num, start_bp, end_bp, prev_end, scale, linewidt class DNARenderer: - """ Class defining the DNA rendering funtionality. - """ - - # Standard part types - STD_PART_TYPES = ['Promoter', - 'CDS', - 'Terminator', - 'RBS', - 'Scar', - 'Spacer', - 'EmptySpace', - 'RecombinaseSite', - 'RecombinaseSite2', - 'NCRNA', - 'Ribozyme', - 'Ribonuclease', - 'Protease', - 'DNACleavageSite', - 'RNACleavageSite', - 'ProteinCleavageSite', - 'DNALocation', - 'RNALocation', - 'ProteinLocation', - 'DNAStability', - 'RNAStability', - 'ProteinStability', - 'StemTop', - 'Operator', - 'Origin', - 'Insulator', - '5Overhang', - '3Overhang', - 'RestrictionSite', - 'BluntRestrictionSite', - 'PrimerBindingSite', - '5StickyRestrictionSite', - '3StickyRestrictionSite', - 'UserDefined', - 'Signature'] - - # Standard regulatory types - STD_REG_TYPES = ['Repression', - 'Activation', - 'Connection'] - - def __init__(self, scale=1.0, linewidth=1.0, linecolor=(0,0,0), - backbone_pad_left=0.0, backbone_pad_right=0.0): - """ Constructor to generate an empty DNARenderer. - - Parameters - ---------- - scale : float (default=1.0) - A scaling factor for the plot. Only used if rendering traces. - - linewidth : float (default=1.0) - The default linewidth for all part drawing. - - backbone_pad_left : float (default=0.0) - Padding to add to the left side of the backbone. - - backbone_pad_right : float (default=0.0) - Padding to add to the left side of the backbone. - """ - self.scale = scale - self.linewidth = linewidth - self.linecolor = linecolor - self.backbone_pad_left = backbone_pad_left - self.backbone_pad_right = backbone_pad_right - self.reg_height = 15 - - def SBOL_part_renderers (self): - """ Return dictionary of all standard built-in SBOL part renderers. - """ - return { - 'Promoter' :sbol_promoter, - 'CDS' :sbol_cds, - 'Terminator' :sbol_terminator, - 'RBS' :sbol_rbs, - 'Scar' :sbol_scar, - 'Spacer' :sbol_spacer, - 'EmptySpace' :sbol_empty_space, - 'Ribozyme' :sbol_ribozyme, - 'NCRNA' :sbol_ncrna, - 'Ribonuclease' :sbol_stem_top, - 'RecombinaseSite' :sbol_recombinase1, - 'RecombinaseSite2' :sbol_recombinase2, - 'Protease' :sbol_stem_top, - 'DNACleavageSite' :sbol_stem_top, - 'RNACleavageSite' :sbol_stem_top, - 'ProteinCleavageSite':sbol_stem_top, - 'DNALocation' :sbol_stem_top, - 'RNALocation' :sbol_stem_top, - 'ProteinLocation' :sbol_stem_top, - 'DNAStability' :sbol_stem_top, - 'RNAStability' :sbol_stem_top, - 'ProteinStability' :sbol_stem_top, - 'StemTop' :sbol_stem_top, - 'Operator' :sbol_operator, - 'Origin' :sbol_origin, - 'Insulator' :sbol_insulator, - '5Overhang' :sbol_5_overhang, - '3Overhang' :sbol_3_overhang, - 'RestrictionSite' :sbol_restriction_site, - 'BluntRestrictionSite' :sbol_blunt_restriction_site, - 'PrimerBindingSite' :sbol_primer_binding_site, - '5StickyRestrictionSite' :sbol_5_sticky_restriction_site, - '3StickyRestrictionSite' :sbol_3_sticky_restriction_site, - 'UserDefined' :sbol_user_defined, - 'Signature' :sbol_signature} - - def trace_part_renderers (self): - """ Return dictionary of all standard built-in trace part renderers. - """ - return { - 'Promoter' :trace_promoter, - 'CDS' :trace_cds, - 'Terminator' :trace_terminator, - 'RBS' :trace_rbs, - 'UserDefined' :trace_user_defined} - - def std_reg_renderers (self): - """ Return dictionary of all standard built-in regulation renderers. - """ - return { - 'Repression' :repress, - 'Activation' :induce, - 'Connection' :connect} - - def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True): - """ Render the parts on the DNA and regulation. - - Parameters - ---------- - ax : matplotlib.axes - Axes to draw the design to. - - parts : list(dict) - The design to draw. This is a list of dicts, where each dict relates to - a part and must contain the following keys: - - name (string) - - type (string) - - fwd (bool) - - start (float, optional) - - end (float, optional) - These will then be drawn in accordance with the renders selected - - part_renderers : dict(functions) - Dict of functions where the key in the part type and the dictionary returns - the function to be used to draw that part type. - - regs : list(dict) (default=None) - Regulation present in the design. This is a list of dicts, where each dict - relates to a single regulation arc and must contain the following keys: - - type (string) - - from_part (part object dict) - - to_part (part object dict) - These will then be drawn in accordance with the renders selected. - - reg_renderers : dict(functions) (default=None) - Dict of functions where the key in the regulation type and the dictionary - returns the function to be used to draw that regulation type. - - Returns - ------- - start : float - The x-point in the axis space that drawing begins. - - end : float - The x-point in the axis space that drawing ends. - """ - # Update the matplotlib rendering default for drawing the parts (we want mitered edges) - matplotlib.rcParams['lines.dash_joinstyle'] = 'miter' - matplotlib.rcParams['lines.dash_capstyle'] = 'butt' - matplotlib.rcParams['lines.solid_joinstyle'] = 'miter' - matplotlib.rcParams['lines.solid_capstyle'] = 'projecting' - # Make text editable in Adobe Illustrator - matplotlib.rcParams['pdf.fonttype'] = 42 - # Plot the parts to the axis - part_num = 0 - prev_end = 0 - first_start = 0 - first_part = True - - for part in parts: - keys = list(part.keys()) - - # Check the part has minimal details required - if 'type' in keys: - if 'fwd' not in keys: - part['fwd'] = True - else: - pass - #if part['fwd'] == False: - #if('start' in keys): - # start = part['start'] - # end = part['end'] - # part['end'] = start - # part['start'] = end - if 'start' not in keys: - if part['fwd'] == True: - part['start'] = part_num - else: - part['start'] = part_num+1 - if 'end' not in keys: - if part['fwd'] == True: - part['end'] = part_num+1 - else: - part['end'] = part_num - # Extract custom part options (if available) - part_opts = None - if 'opts' in list(part.keys()): - part_opts = part['opts'] - # Use the correct renderer - if 'renderer' in list(part.keys()): - # Use custom renderer - prev_start, prev_end = part['renderer'](ax, part['type'], part_num, - part['start'], part['end'], prev_end, - self.scale, self.linewidth, - opts=part_opts) - - #update start,end for regulation - #part['start'] = prev_start - #part['end'] = prev_end - - if first_part == True: - first_start = prev_start - first_part = False - else: - # Use standard renderer, if one exists - if part['type'] in list(part_renderers.keys()): - prev_start, prev_end = part_renderers[part['type']](ax, - part['type'], part_num, - part['start'], part['end'], - prev_end, self.scale, - self.linewidth, opts=part_opts) - - #update start,end for regulation [TEG] - if part['fwd'] == True: - part['start'] = prev_start - part['end'] = prev_end - else: - part['start'] = prev_end - part['end'] = prev_start - - if first_part == True: - first_start = prev_start - first_part = False - part_num += 1 - - # first pass to get all of the arcranges - if regs != None: - - for reg in regs: - keys = list(reg.keys()) - - # Check the part has minimal details required - if 'type' in keys and 'from_part' in keys and 'to_part' in keys: - # Extract custom part options (if available) - - reg_opts = None - if 'opts' in list(reg.keys()): - reg_opts = reg['opts'] - - if reg['type'] in list(reg_renderers.keys()): - - ############################################################################## - arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 - arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 - arcrange = [arcstart,arcend] - reg['arclength'] = math.fabs(arcstart-arcend) - reg['arc_height_index'] = 1 - ############################################################################## - - #sort regs by arc ranges from shortest to longest - regs.sort(key=lambda x: x['arclength'], reverse=False) - - reg_num = 0 - pos_arc_ranges = [] # arc above DNA backbone if to_part is fwd - neg_arc_ranges = [] # arc below DNA backbone if to_part is reverse - current_max = 1 - - # second pass to render all the arcs - for reg in regs: - keys = list(reg.keys()) - - # Check the part has minimal details required - if 'type' in keys and 'from_part' in keys and 'to_part' in keys: - # Extract custom part options (if available) - - reg_opts = None - if 'opts' in list(reg.keys()): - reg_opts = reg['opts'] - - if reg['type'] in list(reg_renderers.keys()): - - ############################################################################## - # arc height algorithm: greedy from left-to-right on DNA design - - arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 - arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 - - arcmin = min(arcstart,arcend) - arcmax = max(arcstart,arcend) - arcrange = [arcmin,arcmax,reg['arc_height_index']] - arc_height_index = 1 - - # arc above if to_part is fwd - if(reg['to_part']['fwd'] == True): - # find max arc height index of ONLY the prior arcs that clash with the current arc - current_max = 1 - for r in pos_arc_ranges: - if (arcrange[0] > r[0] and arcrange[0] < r[1]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[0] > r[1] and arcrange[0] < r[0]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[1] > r[0] and arcrange[0] < r[1]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[1] > r[1] and arcrange[0] < r[0]): - if(r[2] > current_max): - current_max = r[2] - - # if arcs cross over, increment the arc height index - for r in pos_arc_ranges: - if (arcrange[0] > r[0] and arcrange[0] < r[1]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[0] > r[1] and arcrange[0] < r[0]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[1] > r[0] and arcrange[0] < r[1]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[1] > r[1] and arcrange[0] < r[0]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - pos_arc_ranges.append(arcrange) - - # arc below if to_part is reverse - else: - # find max arc height index - current_max = 1 - for r in neg_arc_ranges: - if (arcrange[0] > r[0] and arcrange[0] < r[1]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[0] > r[1] and arcrange[0] < r[0]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[1] > r[0] and arcrange[0] < r[1]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[1] > r[1] and arcrange[0] < r[0]): - if(r[2] > current_max): - current_max = r[2] - - # if arcs cross over, increment the arc height index - for r in neg_arc_ranges: - if (arcrange[0] > r[0] and arcrange[0] < r[1]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[0] > r[1] and arcrange[0] < r[0]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[1] > r[0] and arcrange[0] < r[1]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[1] > r[1] and arcrange[0] < r[0]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - neg_arc_ranges.append(arcrange) - ############################################################################## - reg_renderers[reg['type']](ax, reg['type'], - reg_num, reg['from_part'], - reg['to_part'], self.scale, - self.linewidth, reg['arc_height_index'], opts=reg_opts) - reg_num += 1 - # Plot the backbone (z=1) - if plot_backbone == True: - l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], - linewidth=self.linewidth, color=self.linecolor, zorder=10) - ax.add_line(l1) - return first_start, prev_end - - def annotate (self, ax, part_renderers, part, annotate_zorder=1000): - """ Annotate a plot at a user specified location and offset. - """ - # Annotations show be placed on top of existing design - if 'opts' not in list(part.keys()): - part['opts'] = {'zorder_add': annotate_zorder} - else: - part['opts']['zorder_add'] = annotate_zorder - # Draw the part - part_renderers[part['type']](ax, - part['type'], 1, - part['start'], part['end'], - part['start'], self.scale, - self.linewidth, opts=part['opts']) + """ Class defining the DNA rendering funtionality. + """ + + # Standard part types + STD_PART_TYPES = ['Promoter', + 'CDS', + 'Terminator', + 'RBS', + 'Scar', + 'Spacer', + 'EmptySpace', + 'RecombinaseSite', + 'RecombinaseSite2', + 'NCRNA', + 'Ribozyme', + 'Ribonuclease', + 'Protease', + 'DNACleavageSite', + 'RNACleavageSite', + 'ProteinCleavageSite', + 'DNALocation', + 'RNALocation', + 'ProteinLocation', + 'DNAStability', + 'RNAStability', + 'ProteinStability', + 'StemTop', + 'Operator', + 'Origin', + 'Insulator', + '5Overhang', + '3Overhang', + 'RestrictionSite', + 'BluntRestrictionSite', + 'PrimerBindingSite', + '5StickyRestrictionSite', + '3StickyRestrictionSite', + 'UserDefined', + 'Signature'] + + # Standard regulatory types + STD_REG_TYPES = ['Repression', + 'Activation', + 'Connection'] + + def __init__(self, scale=1.0, linewidth=1.0, linecolor=(0,0,0), + backbone_pad_left=0.0, backbone_pad_right=0.0): + """ Constructor to generate an empty DNARenderer. + + Parameters + ---------- + scale : float (default=1.0) + A scaling factor for the plot. Only used if rendering traces. + + linewidth : float (default=1.0) + The default linewidth for all part drawing. + + backbone_pad_left : float (default=0.0) + Padding to add to the left side of the backbone. + + backbone_pad_right : float (default=0.0) + Padding to add to the left side of the backbone. + """ + self.scale = scale + self.linewidth = linewidth + self.linecolor = linecolor + self.backbone_pad_left = backbone_pad_left + self.backbone_pad_right = backbone_pad_right + self.reg_height = 15 + + def SBOL_part_renderers (self): + """ Return dictionary of all standard built-in SBOL part renderers. + """ + return { + 'Promoter' :sbol_promoter, + 'CDS' :sbol_cds, + 'Terminator' :sbol_terminator, + 'RBS' :sbol_rbs, + 'Scar' :sbol_scar, + 'Spacer' :sbol_spacer, + 'EmptySpace' :sbol_empty_space, + 'Ribozyme' :sbol_ribozyme, + 'NCRNA' :sbol_ncrna, + 'Ribonuclease' :sbol_stem_top, + 'RecombinaseSite' :sbol_recombinase1, + 'RecombinaseSite2' :sbol_recombinase2, + 'Protease' :sbol_stem_top, + 'DNACleavageSite' :sbol_stem_top, + 'RNACleavageSite' :sbol_stem_top, + 'ProteinCleavageSite':sbol_stem_top, + 'DNALocation' :sbol_stem_top, + 'RNALocation' :sbol_stem_top, + 'ProteinLocation' :sbol_stem_top, + 'DNAStability' :sbol_stem_top, + 'RNAStability' :sbol_stem_top, + 'ProteinStability' :sbol_stem_top, + 'StemTop' :sbol_stem_top, + 'Operator' :sbol_operator, + 'Origin' :sbol_origin, + 'Insulator' :sbol_insulator, + '5Overhang' :sbol_5_overhang, + '3Overhang' :sbol_3_overhang, + 'RestrictionSite' :sbol_restriction_site, + 'BluntRestrictionSite' :sbol_blunt_restriction_site, + 'PrimerBindingSite' :sbol_primer_binding_site, + '5StickyRestrictionSite' :sbol_5_sticky_restriction_site, + '3StickyRestrictionSite' :sbol_3_sticky_restriction_site, + 'UserDefined' :sbol_user_defined, + 'Signature' :sbol_signature} + + def trace_part_renderers (self): + """ Return dictionary of all standard built-in trace part renderers. + """ + return { + 'Promoter' :trace_promoter, + 'CDS' :trace_cds, + 'Terminator' :trace_terminator, + 'RBS' :trace_rbs, + 'UserDefined' :trace_user_defined} + + def std_reg_renderers (self): + """ Return dictionary of all standard built-in regulation renderers. + """ + return { + 'Repression' :repress, + 'Activation' :induce, + 'Connection' :connect} + + def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True): + """ Render the parts on the DNA and regulation. + + Parameters + ---------- + ax : matplotlib.axes + Axes to draw the design to. + + parts : list(dict) + The design to draw. This is a list of dicts, where each dict relates to + a part and must contain the following keys: + - name (string) + - type (string) + - fwd (bool) + - start (float, optional) + - end (float, optional) + These will then be drawn in accordance with the renders selected + + part_renderers : dict(functions) + Dict of functions where the key in the part type and the dictionary returns + the function to be used to draw that part type. + + regs : list(dict) (default=None) + Regulation present in the design. This is a list of dicts, where each dict + relates to a single regulation arc and must contain the following keys: + - type (string) + - from_part (part object dict) + - to_part (part object dict) + These will then be drawn in accordance with the renders selected. + + reg_renderers : dict(functions) (default=None) + Dict of functions where the key in the regulation type and the dictionary + returns the function to be used to draw that regulation type. + + Returns + ------- + start : float + The x-point in the axis space that drawing begins. + + end : float + The x-point in the axis space that drawing ends. + """ + # Update the matplotlib rendering default for drawing the parts (we want mitered edges) + matplotlib.rcParams['lines.dash_joinstyle'] = 'miter' + matplotlib.rcParams['lines.dash_capstyle'] = 'butt' + matplotlib.rcParams['lines.solid_joinstyle'] = 'miter' + matplotlib.rcParams['lines.solid_capstyle'] = 'projecting' + # Make text editable in Adobe Illustrator + matplotlib.rcParams['pdf.fonttype'] = 42 + # Plot the parts to the axis + part_num = 0 + prev_end = 0 + first_start = 0 + first_part = True + + for part in parts: + keys = list(part.keys()) + + # Check the part has minimal details required + if 'type' in keys: + if 'fwd' not in keys: + part['fwd'] = True + else: + pass + #if part['fwd'] == False: + #if('start' in keys): + # start = part['start'] + # end = part['end'] + # part['end'] = start + # part['start'] = end + if 'start' not in keys: + if part['fwd'] == True: + part['start'] = part_num + else: + part['start'] = part_num+1 + if 'end' not in keys: + if part['fwd'] == True: + part['end'] = part_num+1 + else: + part['end'] = part_num + # Extract custom part options (if available) + part_opts = None + if 'opts' in list(part.keys()): + part_opts = part['opts'] + # Use the correct renderer + if 'renderer' in list(part.keys()): + # Use custom renderer + prev_start, prev_end = part['renderer'](ax, part['type'], part_num, + part['start'], part['end'], prev_end, + self.scale, self.linewidth, + opts=part_opts) + + #update start,end for regulation + #part['start'] = prev_start + #part['end'] = prev_end + + if first_part == True: + first_start = prev_start + first_part = False + else: + # Use standard renderer, if one exists + if part['type'] in list(part_renderers.keys()): + prev_start, prev_end = part_renderers[part['type']](ax, + part['type'], part_num, + part['start'], part['end'], + prev_end, self.scale, + self.linewidth, opts=part_opts) + + #update start,end for regulation [TEG] + if part['fwd'] == True: + part['start'] = prev_start + part['end'] = prev_end + else: + part['start'] = prev_end + part['end'] = prev_start + + if first_part == True: + first_start = prev_start + first_part = False + part_num += 1 + + # first pass to get all of the arcranges + if regs != None: + + for reg in regs: + keys = list(reg.keys()) + + # Check the part has minimal details required + if 'type' in keys and 'from_part' in keys and 'to_part' in keys: + # Extract custom part options (if available) + + reg_opts = None + if 'opts' in list(reg.keys()): + reg_opts = reg['opts'] + + if reg['type'] in list(reg_renderers.keys()): + + ############################################################################## + arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 + arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 + arcrange = [arcstart,arcend] + reg['arclength'] = math.fabs(arcstart-arcend) + reg['arc_height_index'] = 1 + ############################################################################## + + #sort regs by arc ranges from shortest to longest + regs.sort(key=lambda x: x['arclength'], reverse=False) + + reg_num = 0 + pos_arc_ranges = [] # arc above DNA backbone if to_part is fwd + neg_arc_ranges = [] # arc below DNA backbone if to_part is reverse + current_max = 1 + + # second pass to render all the arcs + for reg in regs: + keys = list(reg.keys()) + + # Check the part has minimal details required + if 'type' in keys and 'from_part' in keys and 'to_part' in keys: + # Extract custom part options (if available) + + reg_opts = None + if 'opts' in list(reg.keys()): + reg_opts = reg['opts'] + + if reg['type'] in list(reg_renderers.keys()): + + ############################################################################## + # arc height algorithm: greedy from left-to-right on DNA design + + arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 + arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 + + arcmin = min(arcstart,arcend) + arcmax = max(arcstart,arcend) + arcrange = [arcmin,arcmax,reg['arc_height_index']] + arc_height_index = 1 + + # arc above if to_part is fwd + if(reg['to_part']['fwd'] == True): + # find max arc height index of ONLY the prior arcs that clash with the current arc + current_max = 1 + for r in pos_arc_ranges: + if (arcrange[0] > r[0] and arcrange[0] < r[1]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[0] > r[1] and arcrange[0] < r[0]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[1] > r[0] and arcrange[0] < r[1]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[1] > r[1] and arcrange[0] < r[0]): + if(r[2] > current_max): + current_max = r[2] + + # if arcs cross over, increment the arc height index + for r in pos_arc_ranges: + if (arcrange[0] > r[0] and arcrange[0] < r[1]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[0] > r[1] and arcrange[0] < r[0]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[1] > r[0] and arcrange[0] < r[1]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[1] > r[1] and arcrange[0] < r[0]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + pos_arc_ranges.append(arcrange) + + # arc below if to_part is reverse + else: + # find max arc height index + current_max = 1 + for r in neg_arc_ranges: + if (arcrange[0] > r[0] and arcrange[0] < r[1]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[0] > r[1] and arcrange[0] < r[0]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[1] > r[0] and arcrange[0] < r[1]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[1] > r[1] and arcrange[0] < r[0]): + if(r[2] > current_max): + current_max = r[2] + + # if arcs cross over, increment the arc height index + for r in neg_arc_ranges: + if (arcrange[0] > r[0] and arcrange[0] < r[1]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[0] > r[1] and arcrange[0] < r[0]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[1] > r[0] and arcrange[0] < r[1]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[1] > r[1] and arcrange[0] < r[0]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + neg_arc_ranges.append(arcrange) + ############################################################################## + reg_renderers[reg['type']](ax, reg['type'], + reg_num, reg['from_part'], + reg['to_part'], self.scale, + self.linewidth, reg['arc_height_index'], opts=reg_opts) + reg_num += 1 + # Plot the backbone (z=1) + if plot_backbone == True: + l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], + linewidth=self.linewidth, color=self.linecolor, zorder=10) + ax.add_line(l1) + return first_start, prev_end + + def annotate (self, ax, part_renderers, part, annotate_zorder=1000): + """ Annotate a plot at a user specified location and offset. + """ + # Annotations show be placed on top of existing design + if 'opts' not in list(part.keys()): + part['opts'] = {'zorder_add': annotate_zorder} + else: + part['opts']['zorder_add'] = annotate_zorder + # Draw the part + part_renderers[part['type']](ax, + part['type'], 1, + part['start'], part['end'], + part['start'], self.scale, + self.linewidth, opts=part['opts']) ############################################################################### @@ -3034,142 +3034,142 @@ def annotate (self, ax, part_renderers, part, annotate_zorder=1000): def plot_sbol_designs (axes, dna_designs, regulations=None, plot_params={}, plot_names=None): - """ Plot SBOL designs to axes. - - Parameters - ---------- - axes : list(matplotlib.axis) - List of axis objects to plot the designs to. - - dna_designs : list(dict(design_information)) - List of designs to plot. - - regulations : list(dict(regulation_information)) (default=None) - List of regulations to use for each design. - - plot_params : dict (default={}) - General plotting parameters to use. - - plot_names : list(string) (default=None) - List of names to use on each plot. If None provided then no titles displayed. - - Returns - ------- - xlims : [float, float] - The x-axis range for each axis. - - ylims : [float, float] - The y-axis range for each axis. - """ - # Standard plotting parameters - if 'axis_y' not in list(plot_params.keys()): - plot_params['axis_y'] = 35 - left_pad = 0.0 - right_pad = 0.0 - scale = 1.0 - linewidth = 1.0 - fig_y = 5.0 - fig_x = 5.0 - if 'backbone_pad_left' in list(plot_params.keys()): - left_pad = plot_params['backbone_pad_left'] - if 'backbone_pad_right' in list(plot_params.keys()): - right_pad = plot_params['backbone_pad_right'] - if 'scale' in list(plot_params.keys()): - scale = plot_params['scale'] - if 'linewidth' in list(plot_params.keys()): - linewidth = plot_params['linewidth'] - dr = DNARenderer(scale=scale, linewidth=linewidth, - backbone_pad_left=left_pad, - backbone_pad_right=right_pad) - - # We default to the standard regulation renderers - reg_renderers = dr.std_reg_renderers() - # We default to the SBOL part renderers - part_renderers = dr.SBOL_part_renderers() - - # Plot each design on the appropriate axis - num_of_designs = len(dna_designs) - max_dna_len = 0.0 - for i in range(num_of_designs): - - # Create axis for the design and plot - regs = None - if(regulations != None): - regs = regulations[i] - design = dna_designs[i] - ax = axes[i] - - if plot_names != None: - ax.set_title(plot_names[i], fontsize=8) - - start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) - - dna_len = end-start - if max_dna_len < dna_len: - max_dna_len = dna_len - - # Update formatting and resize all axis in similar way - for ax in axes: - ax.set_xticks([]) - ax.set_yticks([]) - # Set bounds - ax.set_xlim([(-0.01*max_dna_len)-left_pad, - max_dna_len+(0.01*max_dna_len)+right_pad]) - ax.set_ylim([-plot_params['axis_y'],plot_params['axis_y']]) - ax.set_aspect('equal') - ax.set_axis_off() - - # xlims, ylims are returned - return max_dna_len, [(-0.01*max_dna_len)-left_pad, max_dna_len+(0.01*max_dna_len)+right_pad], [-plot_params['axis_y'],plot_params['axis_y']] + """ Plot SBOL designs to axes. + + Parameters + ---------- + axes : list(matplotlib.axis) + List of axis objects to plot the designs to. + + dna_designs : list(dict(design_information)) + List of designs to plot. + + regulations : list(dict(regulation_information)) (default=None) + List of regulations to use for each design. + + plot_params : dict (default={}) + General plotting parameters to use. + + plot_names : list(string) (default=None) + List of names to use on each plot. If None provided then no titles displayed. + + Returns + ------- + xlims : [float, float] + The x-axis range for each axis. + + ylims : [float, float] + The y-axis range for each axis. + """ + # Standard plotting parameters + if 'axis_y' not in list(plot_params.keys()): + plot_params['axis_y'] = 35 + left_pad = 0.0 + right_pad = 0.0 + scale = 1.0 + linewidth = 1.0 + fig_y = 5.0 + fig_x = 5.0 + if 'backbone_pad_left' in list(plot_params.keys()): + left_pad = plot_params['backbone_pad_left'] + if 'backbone_pad_right' in list(plot_params.keys()): + right_pad = plot_params['backbone_pad_right'] + if 'scale' in list(plot_params.keys()): + scale = plot_params['scale'] + if 'linewidth' in list(plot_params.keys()): + linewidth = plot_params['linewidth'] + dr = DNARenderer(scale=scale, linewidth=linewidth, + backbone_pad_left=left_pad, + backbone_pad_right=right_pad) + + # We default to the standard regulation renderers + reg_renderers = dr.std_reg_renderers() + # We default to the SBOL part renderers + part_renderers = dr.SBOL_part_renderers() + + # Plot each design on the appropriate axis + num_of_designs = len(dna_designs) + max_dna_len = 0.0 + for i in range(num_of_designs): + + # Create axis for the design and plot + regs = None + if(regulations != None): + regs = regulations[i] + design = dna_designs[i] + ax = axes[i] + + if plot_names != None: + ax.set_title(plot_names[i], fontsize=8) + + start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) + + dna_len = end-start + if max_dna_len < dna_len: + max_dna_len = dna_len + + # Update formatting and resize all axis in similar way + for ax in axes: + ax.set_xticks([]) + ax.set_yticks([]) + # Set bounds + ax.set_xlim([(-0.01*max_dna_len)-left_pad, + max_dna_len+(0.01*max_dna_len)+right_pad]) + ax.set_ylim([-plot_params['axis_y'],plot_params['axis_y']]) + ax.set_aspect('equal') + ax.set_axis_off() + + # xlims, ylims are returned + return max_dna_len, [(-0.01*max_dna_len)-left_pad, max_dna_len+(0.01*max_dna_len)+right_pad], [-plot_params['axis_y'],plot_params['axis_y']] def save_sbol_designs (filename, dna_designs, regulations=None, plot_params={}, plot_names=None): - """ Plot SBOL designs to axes. + """ Plot SBOL designs to axes. - Parameters - ---------- - filename : string - Image filename to save designs to. Extention provided will determine format - and must be supported by matplotlib. + Parameters + ---------- + filename : string + Image filename to save designs to. Extention provided will determine format + and must be supported by matplotlib. - dna_designs : list(dict(design_information)) - List of designs to plot. + dna_designs : list(dict(design_information)) + List of designs to plot. - regulations : list(dict(regulation_information)) (default=None) - List of regulations to use for each design. + regulations : list(dict(regulation_information)) (default=None) + List of regulations to use for each design. - plot_params : dict (default={}) - General plotting parameters to use. + plot_params : dict (default={}) + General plotting parameters to use. - plot_names : list(string) (default=None) - List of names to use on each plot. If None provided then no titles displayed. - """ + plot_names : list(string) (default=None) + List of names to use on each plot. If None provided then no titles displayed. + """ - # Create the figure - fig = plt.figure(figsize=(10,10)) - fig.patch.set_facecolor('white') + # Create the figure + fig = plt.figure(figsize=(10,10)) + fig.patch.set_facecolor('white') - # Create all the axes required - axes = [] - for i in range(len(dna_designs)): - ax = fig.add_subplot(len(dna_designs),1,i+1, axisbg='white') - axes.append(ax) + # Create all the axes required + axes = [] + for i in range(len(dna_designs)): + ax = fig.add_subplot(len(dna_designs),1,i+1, axisbg='white') + axes.append(ax) - # Plot design to the axes - max_dna_len, lims, params = plot_sbol_designs (axes, dna_designs, regulations=regulations, plot_params=plot_params, plot_names=plot_names) + # Plot design to the axes + max_dna_len, lims, params = plot_sbol_designs (axes, dna_designs, regulations=regulations, plot_params=plot_params, plot_names=plot_names) - # Update the size of the figure to fit the constructs drawn - fig_x_dim = max_dna_len/70.0 - if fig_x_dim < 1.0: - fig_x_dim = 1.0 - fig_y_dim = 1.2*len(axes) - plt.gcf().set_size_inches( (fig_x_dim, fig_y_dim) ) + # Update the size of the figure to fit the constructs drawn + fig_x_dim = max_dna_len/70.0 + if fig_x_dim < 1.0: + fig_x_dim = 1.0 + fig_y_dim = 1.2*len(axes) + plt.gcf().set_size_inches( (fig_x_dim, fig_y_dim) ) - # Save the figure - plt.tight_layout() - fig.savefig(filename, transparent=True, dpi=300) - # Clear the plotting cache - plt.close('all') + # Save the figure + plt.tight_layout() + fig.savefig(filename, transparent=True, dpi=300) + # Clear the plotting cache + plt.close('all') ############################################################################### @@ -3178,80 +3178,80 @@ def save_sbol_designs (filename, dna_designs, regulations=None, plot_params={}, def convert_attrib (attrib): - if attrib[0] == '(' and attrib[-1] == ')' and len(attrib.split(',')) == 3: - col_parts = attrib[1:-1].split(',') - new_col = (float(col_parts[0]), float(col_parts[1]), float(col_parts[2])) - return new_col - if attrib[0] == '(' and attrib[-1] == ')' and len(attrib.split(',')) == 4: - col_parts = attrib[1:-1].split(',') - new_col = (float(col_parts[0]), float(col_parts[1]), float(col_parts[2]), float(col_parts[3])) - return new_col - try: - # See if a number - return float(attrib) - except ValueError: - # Must be a string - return attrib + if attrib[0] == '(' and attrib[-1] == ')' and len(attrib.split(',')) == 3: + col_parts = attrib[1:-1].split(',') + new_col = (float(col_parts[0]), float(col_parts[1]), float(col_parts[2])) + return new_col + if attrib[0] == '(' and attrib[-1] == ')' and len(attrib.split(',')) == 4: + col_parts = attrib[1:-1].split(',') + new_col = (float(col_parts[0]), float(col_parts[1]), float(col_parts[2]), float(col_parts[3])) + return new_col + try: + # See if a number + return float(attrib) + except ValueError: + # Must be a string + return attrib dpl_default_type_map = {'gene': 'CDS', - 'promoter': 'Promoter', - 'terminator': 'Terminator', - 'rbs': 'RBS'} + 'promoter': 'Promoter', + 'terminator': 'Terminator', + 'rbs': 'RBS'} def load_design_from_gff (filename, chrom, type_map=dpl_default_type_map, region=None): - # Load the GFF data - gff = [] - data_reader = csv.reader(open(filename, 'rU'), delimiter='\t') - for row in data_reader: - if len(row) == 9: - cur_chrom = row[0] - part_type = row[2] - start_bp = int(row[3]) - end_bp = int(row[4]) - part_dir = row[6] - part_attribs = {} - split_attribs = row[8].split(';') - part_name = None - for attrib in split_attribs: - key_value = attrib.split('=') - if len(key_value) == 2: - if key_value[0] == 'Name': - part_name = key_value[1] - else: - part_attribs[key_value[0]] = convert_attrib(key_value[1]) - if part_name != None and cur_chrom == chrom and part_type in list(type_map.keys()): - # Check feature start falls in region - if region != None and (start_bp > region[0] and start_bp < region[1]): - gff.append([part_name, type_map[part_type], part_dir, start_bp, end_bp, part_attribs]) - # Convert to DNAplotlib design (sort on start position first) - design = [] - for gff_el in sorted(gff, key=itemgetter(3)): - new_part = {} - new_part['name'] = gff_el[0] - new_part['type'] = gff_el[1] - if gff_el[2] == '+': - new_part['fwd'] = True - else: - new_part['fwd'] = False - new_part['start'] = gff_el[3] - new_part['end'] = gff_el[4] - new_part['opts'] = gff_el[5] - design.append(new_part) - # Return the sorted design - return design + # Load the GFF data + gff = [] + data_reader = csv.reader(open(filename, 'rU'), delimiter='\t') + for row in data_reader: + if len(row) == 9: + cur_chrom = row[0] + part_type = row[2] + start_bp = int(row[3]) + end_bp = int(row[4]) + part_dir = row[6] + part_attribs = {} + split_attribs = row[8].split(';') + part_name = None + for attrib in split_attribs: + key_value = attrib.split('=') + if len(key_value) == 2: + if key_value[0] == 'Name': + part_name = key_value[1] + else: + part_attribs[key_value[0]] = convert_attrib(key_value[1]) + if part_name != None and cur_chrom == chrom and part_type in list(type_map.keys()): + # Check feature start falls in region + if region != None and (start_bp > region[0] and start_bp < region[1]): + gff.append([part_name, type_map[part_type], part_dir, start_bp, end_bp, part_attribs]) + # Convert to DNAplotlib design (sort on start position first) + design = [] + for gff_el in sorted(gff, key=itemgetter(3)): + new_part = {} + new_part['name'] = gff_el[0] + new_part['type'] = gff_el[1] + if gff_el[2] == '+': + new_part['fwd'] = True + else: + new_part['fwd'] = False + new_part['start'] = gff_el[3] + new_part['end'] = gff_el[4] + new_part['opts'] = gff_el[5] + design.append(new_part) + # Return the sorted design + return design def load_profile_from_bed (filename, chrom, region): - region_len = region[1]-region[0] - profile = [0]*region_len - data_reader = csv.reader(open(filename, 'rU'), delimiter='\t') - for row in data_reader: - if len(row) == 5: - cur_chrom = row[0] - cur_start_bp = int(row[1]) - cur_end_bp = int(row[2]) - if cur_start_bp == region[0] and cur_end_bp == region[1]: - profile[int(row[3])-1] = float(row[4]) - return profile + region_len = region[1]-region[0] + profile = [0]*region_len + data_reader = csv.reader(open(filename, 'rU'), delimiter='\t') + for row in data_reader: + if len(row) == 5: + cur_chrom = row[0] + cur_start_bp = int(row[1]) + cur_end_bp = int(row[2]) + if cur_start_bp == region[0] and cur_end_bp == region[1]: + profile[int(row[3])-1] = float(row[4]) + return profile From dfcaea7c8e88b8045b56739b92a814700c34e1ee Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Mon, 27 May 2019 17:03:18 -0700 Subject: [PATCH 11/43] wave end --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index d1a707e..ce771a1 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1631,7 +1631,7 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): wave_height = wavemult*y_extent #wave_height = -y_extent wave_start = start - + wave_end = end wave_length = end-start wave_bezier_amp = y_extent*0.2 wave_bezier_dx = wave_length/15.0#wave_bezier_amp*math.cos(math.pi/4) From b82d00720d69c7cc5467ff59db3fa94b55eb7ba4 Mon Sep 17 00:00:00 2001 From: dr3y Date: Fri, 31 May 2019 01:12:16 -0700 Subject: [PATCH 12/43] fixed operator and added oriT --- dnaplotlib/dnaplotlib.py | 155 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 149 insertions(+), 6 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index ce771a1..9af6e6a 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -314,6 +314,64 @@ def sbol_terminator (ax, type, num, start, end, prev_end, scale, linewidth, opts return prev_end, final_end +def sbol_aptamer (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL terminator renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 10.0 + x_extent = 8.0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Draw the terminator symbol + l1 = Line2D([start+dir_fac*(x_extent/2.0),start+dir_fac*(x_extent/2.0)],[0,dir_fac*y_extent], linewidth=linewidth, + color=color, zorder=8+zorder_add) + l2 = Line2D([start,start+(dir_fac*x_extent)],[dir_fac*y_extent,dir_fac*y_extent], + linewidth=linewidth, color=color, zorder=9+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + def sbol_rbs (ax, type, num, start, end, prev_end, scale, linewidth, opts): """ Built-in SBOL ribosome binding site renderer. """ @@ -1936,6 +1994,79 @@ def sbol_origin (ax, type, num, start, end, prev_end, scale, linewidth, opts): else: return prev_end, final_end +def sbol_origin_of_transfer (ax, type, num, start, end, prev_end, scale, linewidth, opts): + """ Built-in SBOL origin of transfer renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 10.0 + y_extent = 10.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + ori_center = (start+((end-start)/2.0),0) + extend = 1.2 + arrowlongedge = x_extent*extend*.20 + arrowshortedge = x_extent*extend*.09 + arrowdest = (start+x_extent*extend,y_extent*extend/2) + + c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + #arrow = FancyArrow(ori_center[0],ori_center[1],\ + # x_extent/2*extend,y_extent/2*extend,width=linewidth) + arrowpath =Path(vertices=[ori_center, + arrowdest, + (arrowdest[0]-arrowlongedge,arrowdest[1]-arrowshortedge), + (arrowdest[0]-arrowshortedge,arrowdest[1]-arrowlongedge), + arrowdest, + arrowdest,], + codes=[1, 2,2,1,2,79]) + p2 = PathPatch(arrowpath, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add, linestyle='-') + + + ax.add_patch(c1) + ax.add_patch(p2) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end + def sbol_operator (ax, type, num, start, end, prev_end, scale, linewidth, opts): """ Built-in SBOL operator renderer. @@ -1977,14 +2108,24 @@ def sbol_operator (ax, type, num, start, end, prev_end, scale, linewidth, opts): final_end = end+end_pad #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), + + #p1 = Polygon([(start, y_extent), + # (start, -y_extent), + # (start+x_extent, -y_extent), + # (start+x_extent, y_extent)], + # edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=None, zorder=11+zorder_add, + # path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + operatorpath = Path(vertices=[(start, y_extent), (start, -y_extent), (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) + (start+x_extent, y_extent), + (start, y_extent), + (start, y_extent)], + codes=[1, 2,2,2,1,79]) + p2 = PathPatch(operatorpath, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=11+zorder_add, linestyle='-') + #ax.add_patch(p1) + ax.add_patch(p2) if opts != None and 'label' in list(opts.keys()): if final_start > final_end: @@ -2655,6 +2796,7 @@ class DNARenderer: 'StemTop', 'Operator', 'Origin', + 'OriginOfTransfer', 'Insulator', '5Overhang', '3Overhang', @@ -2725,6 +2867,7 @@ def SBOL_part_renderers (self): 'StemTop' :sbol_stem_top, 'Operator' :sbol_operator, 'Origin' :sbol_origin, + 'OriginOfTransfer' :sbol_origin_of_transfer, 'Insulator' :sbol_insulator, '5Overhang' :sbol_5_overhang, '3Overhang' :sbol_3_overhang, From 62c6b05d34057c6dfdc423659fefcb806756d4b9 Mon Sep 17 00:00:00 2001 From: dr3y Date: Fri, 31 May 2019 11:58:45 -0700 Subject: [PATCH 13/43] aptamer added --- dnaplotlib/dnaplotlib.py | 80 +++++++++++++++++++++++++++++++++------- requirements.txt | 1 + 2 files changed, 67 insertions(+), 14 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 9af6e6a..f16a183 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -57,6 +57,7 @@ from matplotlib.lines import Line2D from matplotlib.patheffects import Stroke import matplotlib.patches as patches +import numpy as np __author__ = 'Thomas E. Gorochowski \n\ @@ -320,10 +321,10 @@ def sbol_aptamer (ax, type, num, start, end, prev_end, scale, linewidth, opts): # Default options zorder_add = 0.0 color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 10.0 - x_extent = 8.0 + start_pad = 0 + end_pad = 0 + y_extent = 12.0 + x_extent = 12.0 # Reset defaults if provided if opts != None: if 'zorder_add' in list(opts.keys()): @@ -348,20 +349,69 @@ def sbol_aptamer (ax, type, num, start, end, prev_end, scale, linewidth, opts): final_start = prev_end if start > end: dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad + start = prev_end+end_pad + end = start+x_extent + final_end = end+start_pad else: start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - # Draw the terminator symbol - l1 = Line2D([start+dir_fac*(x_extent/2.0),start+dir_fac*(x_extent/2.0)],[0,dir_fac*y_extent], linewidth=linewidth, - color=color, zorder=8+zorder_add) - l2 = Line2D([start,start+(dir_fac*x_extent)],[dir_fac*y_extent,dir_fac*y_extent], - linewidth=linewidth, color=color, zorder=9+zorder_add) - ax.add_line(l1) - ax.add_line(l2) + # Draw the aptamer symbol + aptavertex = np.array([[ 0.43387125, -0.01575775], + [ 0.43387125, 0.27341225], + [ 0.51520025, 0.29435275], + [ 0.57536225, 0.3680035 ], + [ 0.57536225, 0.45586 ], + [ 0.57536225, 0.47506525], + [ 0.572457, 0.49357225], + [ 0.567137, 0.51102275], + [ 0.73824675, 0.60982125], + [ 0.751528, 0.60265225], + [ 0.7664885, 0.59823775], + [ 0.782656, 0.59823775], + [ 0.8347625, 0.59823775], + [ 0.8769835, 0.64045875], + [ 0.8769835, 0.69256525], + [ 0.8769835, 0.74465275], + [ 0.8347625, 0.7868925 ], + [ 0.782656, 0.7868925 ], + [ 0.73053075, 0.7868925 ], + [ 0.68832875, 0.74465275], + [ 0.68832875, 0.69256525], + [ 0.68832875, 0.69171525], + [ 0.68855375, 0.69090525], + [ 0.68859375, 0.69007525], + [ 0.5176915, 0.5914275 ], + [ 0.4837525, 0.6242535 ], + [ 0.4376265, 0.644515 ], + [ 0.386671, 0.644515 ], + [ 0.28251475, 0.644515 ], + [ 0.19801625, 0.56005425], + [ 0.19801625, 0.45586025], + [ 0.19801625, 0.367985 ], + [ 0.25817825, 0.294353 ], + [ 0.33950725, 0.2734125 ], + [ 0.33950725, -0.0157575 ]]) + aptacodes = [1, 2, 4, 4, 4, 4,\ + 4, 4, 2, 4, 4, 4,\ + 4, 4, 4, 4, 4, 4,\ + 4, 4, 4, 4, 4, 4,\ + 2, 4, 4, 4, 4, 4,\ + 4, 4, 4, 4, 2] + aptavertexFlip = np.dot(aptavertex,np.array([[-1,0],[0,-1]]))+(1,0) + aptavertexScaled = aptavertex*(x_extent,y_extent)+(start,0) + aptavertexFlipScaled = aptavertexFlip*(x_extent,y_extent)+(start,0) + #aptapath = Path(aptavertex,aptacodes) + #aptapathFlip = Path(aptavertexFlip,aptacodes) + + if(dir_fac==-1): + aptapath = Path(aptavertexFlipScaled,aptacodes) + else: + aptapath = Path(aptavertexScaled,aptacodes) + aptapatch = PathPatch(aptapath, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=8+zorder_add, linestyle='-') + + ax.add_patch(aptapatch) if opts != None and 'label' in list(opts.keys()): if final_start > final_end: write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) @@ -2772,6 +2822,7 @@ class DNARenderer: # Standard part types STD_PART_TYPES = ['Promoter', + 'Aptamer', 'CDS', 'Terminator', 'RBS', @@ -2843,6 +2894,7 @@ def SBOL_part_renderers (self): """ return { 'Promoter' :sbol_promoter, + 'Aptamer' :sbol_aptamer, 'CDS' :sbol_cds, 'Terminator' :sbol_terminator, 'RBS' :sbol_rbs, diff --git a/requirements.txt b/requirements.txt index 0bc64fb..5b10244 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ matplotlib>=1.5.0 pysbol2 +numpy From 6120aeca6a42ec1d8bd945c13f5f97d877a7ea52 Mon Sep 17 00:00:00 2001 From: dr3y Date: Tue, 11 Jun 2019 10:54:25 -0700 Subject: [PATCH 14/43] fixed up spacing on some symbols, reverse on 5poverhang and 3poverhang --- dnaplotlib/dnaplotlib.py | 61 +++++++++++++++-------- gallery/all_parts/actually_all_parts.png | Bin 0 -> 135810 bytes gallery/all_parts/actually_all_parts.py | 39 +++++++++++++++ 3 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 gallery/all_parts/actually_all_parts.png create mode 100644 gallery/all_parts/actually_all_parts.py diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index f16a183..476cb55 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1030,16 +1030,23 @@ def sbol_5_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts if 'scale' in list(opts.keys()): scale = opts['scale'] # Check direction add start padding - final_end = end + fliptopbottom = 1 final_start = prev_end + spmod = 0 + if(start > end): + start = prev_end+end_pad + end = start+x_extent + fliptopbottom = -1 + final_end = end+start_pad + spmod = (x_extent/2.0) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + l_top = Line2D([start,start+x_extent],[y_extent*fliptopbottom,y_extent*fliptopbottom], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start+(x_extent/2.0),start+x_extent],[-1*y_extent,-1*y_extent], + l_bottom = Line2D([start+(x_extent/2.0)-spmod,start+x_extent-spmod],[-1*y_extent*fliptopbottom,-1*y_extent*fliptopbottom], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) #white rectangle overlays backbone line p1 = Polygon([(start, y_extent), @@ -1097,16 +1104,23 @@ def sbol_3_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts if 'scale' in list(opts.keys()): scale = opts['scale'] # Check direction add start padding - final_end = end + fliptopbottom = 1 final_start = prev_end + spmod = 0 + if(start > end): + start = prev_end+end_pad + end = start+x_extent + fliptopbottom = -1 + final_end = end+start_pad + spmod = (x_extent/2.0) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + l_top = Line2D([start,start+x_extent],[y_extent*fliptopbottom,y_extent*fliptopbottom], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start,start+(x_extent/2.0)],[-1*y_extent,-1*y_extent], + l_bottom = Line2D([start+spmod,start+(x_extent/2.0)+spmod],[-1*y_extent*fliptopbottom,-1*y_extent*fliptopbottom], linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) #white rectangle overlays backbone line p1 = Polygon([(start, y_extent), @@ -1664,12 +1678,14 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op if start > end: start = prev_end+end_pad+x_extent+linewidth end = prev_end+end_pad+linewidth - final_end = start+start_pad + final_end = start+start_pad+linewidth + #temp = color color = color2 + #color2 = temp else: start = prev_end+start_pad+linewidth end = start+x_extent - final_end = end+end_pad + final_end = end+end_pad+linewidth # Draw the site p1 = Polygon([(start, y_lower), (start, y_upper), @@ -1724,15 +1740,16 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): y_lower = -1 * y_extent/2 y_upper = y_extent/2 wavemult = 1 + #print("oogabooga") if start > end: start = prev_end+end_pad+x_extent+linewidth end = prev_end+end_pad+linewidth - final_end = start+start_pad + final_end = start+start_pad+linewidth wavemult = -1 else: start = prev_end+start_pad+linewidth end = start+x_extent - final_end = end+end_pad + final_end = end+end_pad+linewidth midpoint = (end + start) / 2 @@ -1827,14 +1844,14 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op if start > end: start = prev_end+end_pad+x_extent+linewidth end = prev_end+end_pad+linewidth - final_end = start+start_pad + final_end = start+start_pad+linewidth temp = color color = color2 color2 = temp else: start = prev_end+start_pad+linewidth end = start+x_extent - final_end = end+end_pad + final_end = end+end_pad+linewidth # Draw the site p1 = Polygon([(start, y_lower), (start, y_upper), @@ -1898,8 +1915,8 @@ def sbol_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth final_end = end final_start = prev_end - start = prev_end+start_pad - end = start + linewidth + start = prev_end+start_pad+linewidth/2 + end = start + linewidth/2 final_end = end+end_pad l1 = Line2D([start,start],[-y_extent,y_extent], diff --git a/gallery/all_parts/actually_all_parts.png b/gallery/all_parts/actually_all_parts.png new file mode 100644 index 0000000000000000000000000000000000000000..ad7245eb70d7e9702aa5f33f4461db1d96a415c6 GIT binary patch literal 135810 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 +nY;5SMTK9NON5-7nz}TR7HYgu_New1 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
3^;R0rUdqhNcaLS!WTH55`L^& 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 Date: Tue, 11 Jun 2019 10:56:02 -0700 Subject: [PATCH 15/43] updated parts picture --- gallery/all_parts/actually_all_parts.png | Bin 135810 -> 144296 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/gallery/all_parts/actually_all_parts.png b/gallery/all_parts/actually_all_parts.png index ad7245eb70d7e9702aa5f33f4461db1d96a415c6..957b51bff27cab11b51ca654426d00b0405c06c8 100644 GIT binary patch literal 144296 zcmeFZWn7f&8#OwhY%FA3pdes@G)hWafHcyLA|c(K2B3g|q;z*l3^jy`NQcw_!w}M) zL&v!u_xt|NxAWnA{`1>zaTuO?=Dx33YhCM}j|y@UWM`<(pin3>$!AX$Q795;Jsq}^jl{1}FP{c23qCukG!v1vohV-zTtJ*&1{3oZW3gp>Cig zpFUD{j$6b#xhtz2{aQ0-NRxeh<5SS7li|9=zPcw*D&OF~GWYh`^9v0mYIwT5KPhJ; zNiHkoTo!xePkb@w6eG(;*9+<)7w^4)A2Kq%P0GnBVY8 z-%sB${+TC6X-7mvWaBYWW}OKtIXe6I(XZD64-Q)^t5{K}7Y|jC!I08 zR#u|XGA@ZM`bC%RS{}evwmIPiLYiAzlno}OmIgQC=X+h0+havjy}j29*w3O+SDz_% z8_LG?cJvtz_s{;mu)enD^!M(3#lM}stf*?1aqG64NoPV|jt(X@hR;j<&71ANFOA&d zB9wS8bcT-^wyGAZVV4DS1jPsnKM`8FoW7pc}z=HQpIajGGurtRZk(8c{u*ESTkQ$jgn}1;XK_)9!K5v_|_Vk9F^Rf z7(TkRu`&N$MM{OPt!173sn*73)AlM8x{}Hd3C@3XgjXN766c*m1vW&JYe-A^_cYRN zmzq(F9I$AxHf#v-l54;|Gzl8568jqV)q0qrtwy(VG)m$%ORwgQjY$=-pQ(7Yzm;EO zQNbdqp>a*K*dQ>$eSI`X6YWBzLW=sO&l$Zz7&oMlwxJCI*sSmj5F~#{L`3qJFFlSH zBO{)2u{NQhp&@=X`9pPH@mnjw3ZJMf`cfKhL@-|X6JF*0HuUr79JJY8{`VM5%jNZL zj$G*|ITn_M!YQiaV$M>d_PQ$XX$d!U;ohc z=EQ{@-I{#loAZZN0T%*)@yw<8-uk*U^31J=Aca z2z!F+*fRd^1J)A?fXYbkjoA)oN|71eRXTg?)CrK@p#T7t2zt23Nc~6;o)JGLfwiOo(1`@0q#+8 z*9)7PBKB6i>L5L%W4BmT^TL1pNKic78(-h7uIhd4>gw;fsGddV6_>lYIcdI~t6r4M ztZF{nl@Jq?1*t1|{clElyImvV2syzJHet#DQL($TBWQSFwh%ZS85`S}$mO`-+F6*U zWJ+W?_3h0mk8S)@`n!6y7Nf0Eoo4tda3+2H*%#@V7uuo^HA|*P&r5Um=3*O|R{n+vD)rVF$+@QX_9w~7 zI(?-kUc0*y)(-p?qy~nDkiDn<1GS?UJd~6!p-p=3@_FFv>m`tUhIfjjqGr{mgP}p1 zRA_x5ej$RH;N22c7`EVwtS71>7Q*`<#k3EZkDp+&O?o_;HMs|1n`l2n`GV9l8Lj0R zthFrK$(4yVUEkVLl9GDcktmwOqIT5uy@{c(kglLVKe6ZIB|$>-UHK{Nx?HZ=`uawG zp$}xp<-Og=h&W!L#QdFe9=%&e*1?~G%ogsv(Ht*u7iV2=+Ba=FR9XjjH1Tg~f=G>o zpd)Kn@{?G4evy0mkA3#$yT-4;y)OiCh%YP-9`YA7>N6F19%kekG=~h=UO`?1wJd;kYjmGh1p6}lyxb0{4X#`3i z^<-`*>FjEq@4of|!4ih#vRazt85xSnpx3sq(2L1Y*=3}~I$aNx^ zeX@Lpb7^?_quU6!VJ*Q=uDe_!0%@02qUYS78$)Wcz&Ti54I@_CD35dmKZ2O{J-O(#lnA@ncHH8-z0Lc&bJa~#d)GSca1Ol1CE zWZB_lHOku@|Dc4Ih2^&VgkgEzV4LWZzdxHK8O?(ifZB$}1%2d?&s<~I5qMQ@!CBdi z#|z58`ipw43vZ8+pbS_ZRD|NUlAlnobB}y~x3y17sutdC(9-ke@0ErZoSUdnH?+{E z4qYEFiQ>wFX>bK;X%C>+*a@qOi^rU&)n2(L0+F73=gyti+spVNv{}@x+qbV!Qf7vS zU#_gIY;J9po@$L!JKQ5&p`ywmrE^!Xv=q8Zfl_#YC=$gg`I=@(+4!5H&>_&S1kC)% zVZ3%{^`{Rz!HS9n189ie5fe1A_*&iZq5NI>1m%VPd>tKsUd!Pu|0^sx`VIaC>?Ei& zGUn!a)9taD{C3l?M{7Nx*7FZ_>KDz9`_c7(eOcdI>*4l87aGowi)65L5NtV+e~uQ= zL0&fokyKI{uZ;8!Rc@Tclf`!X$Ufw0?FMQITHpHWCi+r-3# zJ^uviOiO~W+h!YAC!mC4Djw7Dtz~@dgtZzp$k5HD^3nOCMp~t3&pt57#bs4gRJi9| zMR~^|%Ra0e%X@orN~O1e?baVrO^jo4cXy~&rInFU6|Yr7@)ed}I5eixCCg(!Dqff6 z#pSiNwfTXfRJnM8snCf;As0m&LC4+*7B$P!Yp8SV{QMeT`?yi%I!}-GXfBE7=JHz4 z=8s`_<>%2@T_wVNAKJ8!`L6P5)WealPfwu6GN2mgYL%ClzW&W9i8ZQJCv0>EI7~K? zoA%9XsN@elhBja30e7^Cv%(ST$rI;;MS}zbcXuWVv!M=>Z2aT>n3 z>)W?)#DbPGGJyj2vq@Q5S;T@2sEU>#8bNOBv4=GLwv!niG7Q;IPg_N>TYRpo%k;l| zzu7cGQHhJtNZ0J|FQw@2?pn4lE+&?3H`6iSlNl_sH+!4pj{{EI^sMI8^KVK_zzAsmBNf?C+Q9=?CXZrikHE3kX z?XkuKv{jC>s;U`saRW@beL0uzIvPzDbV%4`3#jZS8Qma7G)!ykYG8F7kpY`MDyI-JSX1+y1MIhv@y5Wk$ZG|5SIb0 zJ5uy52EKmx6!P-&5jrd#780hHWGK-{*D7lp<+JhYINrHke(yvR8hRL`urR)CY1&A! z#`O_<-t0W&cU4(X6+;C&n8mWzhz*;a1ACv45Pe6S zjg5_f&7b!HIYg-8vq)n>o%#IjAqQcZ=9ZJweru`M@&4!@#Kz)~$ieCp*{X3z@e&N? zvFmoEvA0=&(n;^P>#ZDh0~S&27BvSz>@SD(I2tf8TCUjBNW zuD*WU#Y;U)Ln)~o%uGzT>!dL=h8p?)buWuN>Ts;~bXTu_S+Z!`uENF7RNBlb%J3e` zKV`XjQq^P0r{{z@mH^&BitcC-n2qAlE7S5!`MR;a9Tgjk zlhvCM>eO8p>CC4R7PzIiPeMVU9k^5Lc!>88Sh8ktRLALdMzQLGS9DNDlt}diOUS z8PgnBYO~0wJEpQ$D#@rXU%D3Ec?H4YjOGA;lX3%+kJlRMfLNNgD=I2h>%=zvxf}Lz z^x3+WwtkAM`$3To4qNY+TM^tTyM6lHxwe(!b90U}{L8~5J(+}cO1*)y!|Li%gB@!J z=VK3yryVJoVx>1K^Lp5Sn+q5~1)vl#T9b#O^z< zEUydLKkINV?ZK}eJ?I>l0@3SE$za^OhAwG}XKY{9e(HbTC(|o_`}WisZILw^wX?)X|Yjh!c*@qL-GN{k3w5&VBXG zKjgHmlCE2W#t~n>WIaz6KkWN%+V_!OTG`q>L*TjO{*%X@gf>&oL=ifYfH`zdb2KC}ua&odG?%KzXQo+Gd66{7q zGf`=FThgR}RKAHt3~PbHY1W3 zpajUwkDiA8cq=v_XIENWKjmU)0@@67Kky&aWg$@i;F`KdMv-OaAFE{Pa#K<+0@h}d zl95p}%1{yW|1!0(P;imHS~(|N%xI%eYx6vff8Xwg7e2+5Qxf?xbZ`9zA?2!4F%gmF zLE5|Q>?)b^cbRYA)XC0{E>`z%>g;@C*s5tiul!d3RnOvHxfxcj#JDqZFz#?=-KazZ zzVG)rOIZr2Tg%PVJTHh%GcD(EzqP$b2^v@YXcdoymmUcl3s+AcJuos*9eaxnrSr8b zyZb2)M~|5qxqH)FxwVIDwE7oBN`!@kdb6J2j_Nyss_^%w1js-rE>4q;?ZDSgkahQz zT&9lA85mFosTzo%c%J zS1_IQ1oe{Q%ZIHTjuyZNC%-GA6i)pev{xvU7^RomPD%P%mjfx)tZ|KSuDh{XlHKmT=XC* zWTZxiGhn;B)L#iK`$fNNS5B>t!6Hy&^hrkx)=)hm85J#KlquAf_mwkN zMyTyv(+LC?TVvO@x7Erm@wUC&esrE)4FQydrrW_ySS+8!{sA=4y~FKM1bwx%wk||^ z#PC|=gwjj50NQSu?nV;~22eVx{odUn&P#+BC?t@_Ap53ITE<+hL(!O76%k ze(Wr+TyWC@Tc8tUe2Vgp*D+@MEGugA*Vy-WJTB`7@uFTM{f@3nn!74FcY^ghqWN6} zRdZD`Rr3{%r2KXEsjaHVy9wSzD6hXOFEr5=}1OaR@O$e z!Ch8X835wXot-P5B)QixDP_#QA*F5VDMF!kGo9D|#PHi?25amX1|lh>eV5KLaiXfM#wafphFW(K=iwC(Hwj^*kU zvTOCokcm!dq;+d!YJ>*c$m6kRpBYGkvW^F_AX~2v@bE|Dj@g|*4J|U#t=Lz`Ya5*c z7|$9Vt&bP!xgF+v-G$jvH=GbC)buW}O~zwmp^$$b<2Wi}h~K%xRuPw&m{_1)`DfFn zkOWhCI{5bO+wq$9$T~w;$qYJ;VsxhS+(~YUU@^uzPI(>oSZ&O(ELG86jBkjE&Mu+m z6Uf7`NOBpqDL}982|kUgutQ4jaB}_g=kwcx#+oHgRzZ86!^L8q?eV!vSmA>+1!}pf zYzQLXS(}if+16CwAA3hW0+ht_P&rTietRt6N~ARN@JGH;ccmx3=WOP`puFEst*jKH z&9Kb(?sXLiueDvHiQ|=}bXtk*lN7ymSFa+ezQkzmfL!!JH7~@6kDs656ik|CknO(_ z)y>7lV^RMP;doPtre-<$E`QNJ#OUVcTuiwIb&1Q_kF>(B&q75GHhz=4{%VmAq1StV={h ze9166SmS=LcH2@;Kj9_kVU)+(mFctUB$kQtv)GDWVT3PYw(Yt@L zA$4MeT#6&vv?47MJ@&Uu)+d|!sW=1#G=WPfJ%0Rl#C=0ngOx%OFioiE(XKJ378>1e zxPON~KTp#LIV(W9ICK7d2adW${PQibQs*^&C|Uz^z+BJBy?&ilW{J-!Hf$BBrtmtb z2x^N-f5K(NxEG}to)BVG&@+Vglz>+oo)+?GRAIg-%<2R_soE<+01LagiCpe3reGqQ`j)$K!1CQ|Y^%BDw2)!kpDZaA+DG)gvrmv53GR;<48>(YfmR&6_BO&nm$}4_f5z?k>}vJ5SqVczV2v zPAI2}lVR4lI5{_=^vw~ldO!|hVFw~&VsZe6`}p|G`B3UAfJD1-=#e1cAoYowPgPkt z{5+jV9x1K!jnUxKmsPcmzs;)VYo^a6xXC?#{#=d*YtFmSr>56eVKXr~H8s^+M1<;) z_;xl)VIqL?OxSn3X~y;K(WRl0`5_e=Gi=A&)s1qC9g=sthH|L>juPd4{eypi-6#;NLC*Zb~C$hiD6?H5~f@-4aN9qu1|1!?Fd}(GXopPwGo$vti`xUK+GBr7kqLFH3 zS}wT`&V4q7wonVpgicw_Q7=k?K%SlFyp#Pf@*NBdu9pnvf#{k8q`0N6t@rb7iBdBx zI}+i>9dXa4r2HY~VQJGL!*eb1RcFY^RG<<75?q*HCqlWvNCfrpd>+1T)Dk00m|thK zH9iicC|B==t=9^sMN=mt$m_v7*zFv(!UA|-xmKgK1?;4#kWLVAoNAyjw;FH`9WN@cb`WAgTsB!Au5?9E{n$4m&>4IB zrlusdwc~yT({aqri!q~Sq@<*k`pG))u+jY+l6k)s|5elsu=JP^R&PI1)Ju0`rV|VN zKktd(d4BDE3GJjK=5Fogyf{Kc+DxL?Uu+45W|4TrX5tsq&6|(hwia!i{~ZKX+yM%m zyQ>8B=j+nkV+m6;Gnv0WQMa0+=Yfw<@ma<}TSJOQl%A&s;I**K%uL6{ftNT4Fn-gn zq&KV-0ZZ6jKxzDe2wKWj$yEiFP8nBb0b!PVkzQ&xLQVI%xVSI$9B$Xm*AZ-5s=B(m zh-?j)9lIw7#M5@(VT|d&Z{rP#KZ>o+TsPVTi+7aCK_>;Y#2|5!amc! zyNT{8U0n*8A**ViMbM}@qh*l0tUXwl_VM*?!Qr%Siw8C>=<&UHJwi)+-h#4FySe8} zCWlTjj(vVA;=h1{kv8Bq832fl!E|*NUK|`8FnnmjLFFaIY91Jg>1<-t85B7uc)~z2DrBZ5M*@+KqQhxmSQEJ#qfeR&r zR8)b^MEG%*1159Bme<}*GzObNmoGb8m;A&J2JipGaGQiy+0UhX_;4y(hCxz|gHr-} zH2lk9w(C*o-!`^7Uca|mPtIdI`3zS9Fz9)rh{xu1td;3>TXYWG@Q?a>9@AdNz5*TG z_!fYkNR#m&J~1L5RS9m({95}UjQ0US{dApQFMNs>nf4X}AF+e8=2mWssI$ld&M+Yvli6S}}rxnMFt*Er#US$kD^_}MS zc3G?HHD4s)Fk1*jhH9z?;i-}?b%n>QUxtjDR~ZHn%1geaS;Qy>1t{Iyf#oBv(%-*- zXMUdYe!e$5Rinfx8@h;Qt$U?T9rTeQA53Vee#05qox>$7uM(|b*kT0;MKzeX*4vUo zDX`m7sWa)xfSIf7(eBI=aUTp~r9&;mi|!z3`OK+PU9iMUznsC5apmI06sy`@28k7@ znm*v&LU&|$}KQuw8+8O(9VJBUe-e4 zp&7OyA4Z+(+y>Dh<^&Q!5jxVU!&6hbwj1j#zj8 z4O=Iyw^94%(|X@M!2Z2vd-gRwsea7(dkZtFWpsiWm7+(lvHgG{whcF2PL3_F!Hf}S zK?iraQoRv`UzfrTKM4DJZxuiTfN=lIOkWDg1)Y|Af&3A6CW1>cn3kK+X2&od1({Os z(p|Y;(3K{amX^8zGUi&~${Z~~jtGTLlpzxCZJziVDmyFLkY=l81-%f05Ao} zH&o@2i_`%fjAQfdSi(L~UXGL16~^!1zki@zVc4i&^q>@P8adLgi?N}wmeXyWGygW+ zMpderkHjzZJeM93NTE_($MVXUE9Iq&++H|dHu?d!USym_!KV3F8Gzk}S^8&f4vY<- zzqC}hKORGvDzn(T&ClPsFRY0vOR(w@ck7IMo*2#Lz|Jlg%5B}xT7xUeq*5txZ#~Rc z%>^8oS*}{3-0yHqj)`ukvcX4*qnt9SqZEd!T}nn=X5!7G)NCVv{(Op=N?mVRV0XD{ zpsE_FsH9Xvwr9OvaWqs1RS{_qh`a)T0tN((vk{R=8t3XiTZD|hwC zi{?YJnn9BusXnJY;u z0Hd7-ZA!+XEQ6d*w^=6Ryk`zeY z(QZ}}#J4z{o%4yxL;+W($z>!Hbi{5J#gbY1j&xy8{L|*IVneF^KD9D{WEYi`2tVGE zxDr}9&@;ZInUZSn@c2x*xham?uGmrc)KcmrkpzoDMe<>NUtw=IHMn17-qe?`r8Y7$ z0z*k9q!(M@crl*)+bdB};h_B^@r*nJ029^5%#3z0t?(qED!`-*bD4>%4ub+Zfhdu??$ZiON&0o}3vrxUFfGXAQFJlCE<%v(2^=5tE+nh@U zac}`3eamkVY(f3R#Do&UvgIzY=)y|19=s$61_=?c8YwO9+CwSiK=aq$bh7k#r00wLlK;tvSyDYw!C zky){@W-A8dndyK3(Sr&J!dHZ$S<#gch!VIr@^P#P$FuR*6Ds<26IGb%wafs3mvf*tnuM~^Mt zK0E^!Mz2E_4jrois24OMe<^9{9>_Ir@L#thsP2(xhAUe1S`eLY-ZgU~;i02$-FfcMM~p>rQUe!L0dB;$=655YsyC3>_* zE+#HMpIca4EI2Z?<1D<@bh|j5qp;Xwi1E<(-!XCe!-LJoxH40PA_UMqXK`BTZ=dea zqPGxmSC2hUr)vE>B}X$S++A4sN@83d$aVg*QZ0^kL1;6x8(i)v1MrCCNCeX&ItbFk z$gXidg}xIb>QxI5r9+*3FdSX_;yZD?ppzVgP0xo5w-+N*fSDq604fEW?3a6w{La&K zgQ{}*(xp_Wq2Sa_rxJ4h3SA%tA%IY*`#=S^Efx9!P#Y1T{w_MmGl@ z4U5Ct<0ChO>I%DVDu8dqVRzk-O}APd=F>_*@Ys4m8c2g#DUw5n8;Qrt4gOc?C1HXS zS|Cz#10oJ&9|Y>cDk8YD1|oH+*f0R3qd(Se2XO0v>bdoQo`N=w`%+O}y*nMNSz(=w zNN4~9hRcq-)1~PT9hM~(pFVxBS#G&xEetM+JYYhSp}>}xf5O1ILYNpr8PH@((W}OJ zz2m(oq&(}^xH8exi-9kt8+Mup?k{tMm`M^bbZvsTvH&HpRCvwl_~;N(EI?~VxqC!MTaQ)PW(~ghu)OWi_}Nff#8Zpe3IT3>lEHU9hf~uU#|IDo%pwCD^;Np_S$H zjW|z~p>;84lS9Ft2s;4<0NlZevo+fzB_87B)VwmO62WCSCs6v3@ym$kz6I{dYj{V9 z$M7{28pP@c&e<2`oj^Ykl`>ziZp0CHfZ)h%MS9t|2hV#l<*~;lPNU<`Bj%_ZSE40v zKg_!66Z!rjV=^Tr6Y-f3-07#XxOEi1{@E)js+z3|zd~}B_hj0~8-~wM5?wfXGX0&R z7}=c=S}E7q-NWypQw9t-PfPlStjttZ6bN_n+jVda+Avhk2(Rq-D#>4?eZ?D#cH6eB z*RN#sf)PFsXbZ^P3^A)|%nkt1ZVsjAZ)^Z%4Yq1;3ugrb8-Qc2$|Z3;5D0b1350#{K%zcD2|+5c0XnA$5bMd1 z?Fo|?$p++@1MmgXE(VVd>+a^Bh_&Kg#XF((S9E{iIiUjaNIiRYk2R+s<75S@r^!gQ zi({kT`}dRYF={$AIv98cu};ZjpELa9mY`w)GrJ6w1;Pg;5>v38ItC+*+P8W033sxalM1VW zx$ABr!GOPIF0JRzOW}jndaSUTu2<5e!zXWVl%H^a*7GMTHQNcu zlx{({1OUoz$6ZGPW&eS*a&CsnLcht<_jfJ!|2ADwR@97P*Phwhep@v=*6(O`lOmcW z7;y1jz>FZ^Hm)|hfS62xU_(r4wb-^@SBEMeGl-IG087YJ^Q?V)ULGsL$$?dM&-G+3 z>2?NXkT-j{E%sF=oggM&49W-1yF=)6cSPR|y$N)2M69Y$NJ&k#J8}XqiMEii;qD6Y zqmc-fg^Ay(c0UIH)zgz*9@TqkV-vHUc>G$A_Lxk~+M#cNU1#$}W039f%7@aI<@gLV z>G{`#ouVxB-SmFJVQE!;xn|EWj#OP$Xy(ydXRi=3@`JRc2AK#t{e}<&m=o{$Jcg#c zA=F=AU%xuSF?CpL#u*LDyP@-FyF85Qbe85f{{@kWf2PiPE#(NjldmDC&(AQ{Sdag3 z$dr5Fv>eCD$=REy!G-aFE(}dBpU<s`nIH}@SjqCwxrxuAN!(k(0vwv2kZ0n?98mJnBs zY{Ldp&<<3g>pz#f9qruiv@X|cjdVTe5S-GfEKb&K#_NzfE@oZu+70OV1+&WC4T0E@ zq`XD*%E}7HBqLd#wQaSf9F?;N8z)h*?HS;U&n)AO`oCU)g_2H@){QSPFR3rf%rs7D zoZcRZ!PdTYf8<$Xr{@*~Q7;cz91F6m1I)p5VYUP^H-fbgS=}%3iq8^L;oLE!RO}5eHNQhePJT&;Z;DD17R5Nlso4@K?SCOGg%r+L_B5`RdlGPeCUt}y%ca-W)0SQ z(R*BJH-iuyXlB2cJJOC1W<(tuX9&@NSZLtXz#J4R$Nh_!E?uFeP2eJ&L=Bt%#aa>) z3xH@90S%GuLoqh|LXlZ|hn{{aZ=dL!%a;Rk#>{R`E*|4nihO=+Z|iM}muO7_%>CeK zPX?8!XEj0xwpWlz8^{8sFc64qj2Ck0UJhOW5Aw4r&Y}67+`0<>7|ZYaMFXE=5Van3 z5&xxKom{7t5jf=)c?8NT3p;y1?3T$dw^yQ0<{j{%RT_7=X$;(20*YY zfKh`0M^6fXS$^Z&M@f3}WEKd&0>IS~0s+d<*Q^`XVJ}W{D9E`~RL$$XBQ-Oh z>DaU1ceLPllxZ{9Dzg}=)-di&;9;c-#lftf@F#!+Gig0gg#4TEt$Xh9pR#+2G1?D5z6g*YPd6`ssgRY=5u2qF%+YX+DbvJpi@DD%XGB6m%L87 zWjr|Fz{$rvhbaHRzEe_CN^K^@497=X9B$`8E4*lxO02VDjd>YN|lEa;v^9~V%;TZ zIQGziIio=)k2jV*GlR<1L7I`9bpdH`l0Yq=B{ZHSC54l$6no&&AuMB7q(b4OLn=7a zwGcEWLFaJ?<|4vtKQG0=k%_kHWBlxMOA^8pP3ekWN6bmKh3YgEKhr+3{e-Jky8B3Mg+Gcozd9{h* z#_!ad zdU~2d5GHu;nHZO=zlITa??$I+Asm=NqWH||)4v5*s#8Hi7$m7iJP+XZDMaMYgPpaO zmX_{VtJ>_4kbl9&_!o&l!O4MznS;405UQXAuOk;kcCxjzv+L$M=^aWKw(CTgD{}8Z zdszXoi@`fpgQF1V78GG?UIVQM-02S!a8^;#x;T%*+P$2Y9UCCUXMqynyAVjlBL#wG zH`JOiE;k*KJRHikX&uT>bECnmbTo!1sszGEwLm+ejN3D9&#*jHL zJp%($)k2YpRb^F`DU@UW#*;9kVPcZJfB(Mkn;WRO;0x8Lb8o9_cpO$=d|DV%*#J=@ zL(dBxn|qltpo-fx?b`NeA*E_w6W=6Htc>en?fxkzqA>;|^q@Tx{giK~-S6-G*Zcf) z{4+D_NrZ@!vWSU^xs5xnBPX0bfBuXVOX&Amu#{3j@_PWU5&%9*hH93XyWlry9#}s_ zRv8qi3>c!-*M9r<5Hs=a?b}mMZ({!ibm2z~o{?WkkM^!J9yj`z_}6>@-Lh7 zCr&U* zLcjrG3jz3&1{Q~hP(yk^oLQnMZEGDYG42CF5r~@@(gi?ZP%hFJLu9y(Hm>tCSnwIK zE@u)YT?GeWliI`fn7tW~ZJpDukh$e2YZxbDcJ>z%-~BTety^Qic;G^xnc3RYF8k^5 zK)JQGb#Mu>Df{#ny^;VqQwBBVDu)o~X(nzOP7s+Ng?pUw&w%v$@a$`k6F;$V?!KC+@6L8al zn>XKM;KeGkE$~$;*_9MYk#}IIURZae8QNQFf*doGhUf=CSb}h3r-Qx=wG;sjUp@L@ zICJI76_w$o6O4}n$4C?y38uYW;n19J>tIZef@n0ocD@#0`~CN*Fa3Oe`N&_UhYZX? z-AD2UDUUEPNA!O@#z_r$7LW-Zs}UhYbAsNo2SZlGdIA!kDe%v~c?ik@VXj94APN;I zKX7vXG~i5G(W9Nz{zAP%*eIwIt%LH{9uh^Hlf=i7pss&-_N?mw@KO8c+bu^c?ipNu zWJ=|~KE)4%`L06c3ig(nYOHLO-6!9T9EIco3h`H;c~A`?yn1$nAdw9T4<~d>fIcdK zwA7a-c?r$~DI;R#OHChy*Mo9_;2(fAQxg-Zpsg%?;u}Fsad!~%8*67(gY z#)x083vuIo{dx~T?o=EHsCr-?8vTwwBM`t0cuzuubzq*qDI+u6YUE@~`ED!mw*nf_PYb9iDZy!*0Eb>a`?^Lj zd%CVS_t87TN1hcJ0ukgj=7Wl8%_ZRB8U-S~9(>?Hm3jyE>q}$8!gg_Wwds}CT@*@f zz?}DRXX3HN;Cd|{TElrN-o;T{r$XgC>^XALJj2!m71Me8CpG#F^R8oWoF-RB)6@$| zQ4e+h#=dRQp!wc1eEx?S_K#4ojZ@(r(Yjxtcd66TMi`)tSeTgPK7YP@g?b;8*S{!4 z$LGEyLvpf|C3}k~X;{F0huVYCx8S()y|(rfxC2&lY^P!xY~#c3dUdr#aImnj;1z%_ z7tp%S3PZ)pR4+JzdidzCyIi~8sKf+@2LjeFKH)`52F2QA@ac|AzFC&|NEf;C5cu4U zR0%$lm5~VlKq1TWQGJ`9)p0AP2Nkc1w#iXb__-boTEAhVrA>yXH&>N_eMepkA7669 za`pf|5TtvLz-3UPLFV9foPoS&Xi{iu0a0i!$N^52^{4jOQJV+0e2iJ|_O_2PIjRJX z-d#B1nqgHNospL2`~=_7ppz=@kyYiOHLOsFLb=U!(qU&3Me`>oPd=%6?88iTUtjg} zh?@m(Y?;NrIgt7Ggc>;IFg?(oygrQ!w|5y=_0o@ zM8>pEY?7TFRqD88Cg5U=N!CT@)G^5HJhrq<5L>>68dHD#_A!BarJKAv{j^8F79qL66woy%k{r9U3SbF?RVv&d}D=mG>rm>#J z$r);A$`B^@#7|DGHPR#C`m$7LZmwSpZ;cWq`%^}S>C*8S6O)giIBbv+&ZEAnCBKb& z{KSok)x7TFrB`dtT$3Pe$7JrECt`f{;3mofjK#`e^w;bUOJ%|3p#alBnRR8FUv zg56xrN}Fz9>3?&=%+?f;DC=)CVpPHFQO^%RsgwJ1k1Z?QZr}Pt3I5J|>1o>GeK8i! zfx+@mgjc@_t^-vaS|UbS>i`0Rn};`OQ(qPvn>pWa@%#_Ay=F|_U~4E-@nXr0%kdPhyo z6n5khko;dZwU5?)e7WD9&WQ2BN%u-Cdsk+re!>C~cM6Ic4Jer_#oT!#0Z++TaBfFOuE3RJk-wQJdX ze*%nQjE8mHU#@r+x3`^`#~|y<2z~73C}eV}apxIKBRJwDf`vHs&}M#A^H91pi~hI( zqAzw%g!=4*IHOTFvYl3p4LJ{2)NbeUNVBL46{e-_=wp6;yo7_ce0?78D_=G7$M-J%E3(;EZy+m;eMSyU*obb*>OMAu%(WLISu%LFpn%> zGC}Hj5X48_xpYADNjB%zS`)nq$fln2|Do)?!?}L{_u*HXMj<;zOG-u>D5TIpgX~>I zMabTxvK1vnvSnsx3uUEY6xo}|-h15Vv(NYQyN~;K+`r?v@AqH5qu1*>uIn+*$9bNY z9vG1|#xQOvZ9x%p?9?gEo*oY~17t*abO^&yOA*BfGWiuhr+CF=t)L%4Ve;5z$mE0# zOn#L4W>P9T!@B58e#egdvHq8>7rMkG5M=oqL`Argbt(+bSsD~ZVR`OSOd00X?xKnJwZGr>t(x@L zOEBTNp```9^mtyK{IS@0&Ie`gg0O;Gv7%hH7@1E%z8sjk3X_YsV$K>qjMwW1zSXzHWJX?x?~|Q8QutdD@riuntRp_-NTes!Nzmq<*F3eEA5vPCk>W-!e z=W)z`(XXl-&nANFs(FO<)fQB!%o+vs?@-3dYG?$Pts(6wKAIeZ&m5F)PG;sa0YCJ? zhI`W6SH{3%tHF8G7!0ALvZ`D|LCJ;onW8&2+N2BhaLj?Wp$asp`nPZVZXN;`UN}jk zrSQUFddoxXI?b`pkIk|rYx6IMTW0=>uv_<*3xHw>f%@OG*}@YJ;$gym$J$>ZAbb9+ zYxiE2%7+SiJw@BOL*e0|g=I=)xM;+!LMsX8d`eOU_t~WVZU4c6z0eO>W)%NEVRF0UhV{G=3U3v(Ix&6ZeYpD@V1IZiT~^m znaj!U?;)GPte;yRjtu;$v9q@AT#kQp`tNvb zD$2LL|LOHF9C-pSgjfNf*GhYTxM<1IcFXvI$gLk2*z9y%?({4>a^Rzgfj~1C?`y)h&h8qo_!;Rb93M`a^4db z7FK_{ZD%H>H3vLfqzJ``Sq|DO5Qp`c#-)EkW0wm2kD->1Bz>X8i4Xi7efL&`S}>QM z+>+-z`)^G_ee&-c&Z80lf$Ce&d7yfjxe%fN|5@PBhJe&|`31%T=~5#nC-)}^m4={L z*|M!*a(@i&FWb&-m-a2R=Rg3mM-1a{;L{R`f6m%vbxRqG;VqH73vgX6AGG@!{1c>DH+yr1v-_4W1Z5UV+I zTA_7cXa46PB8mI~uJozZQz46U6oTJ|-uMk)1sa-d0~^ljY;1#l@2nu24H`3SSU~e;4%f0(;f7;yl!H z-bbCYe0G3EmeIy`DM2|+%3V!I=l%QN4>>KjkV@zN&zE|v;+UuDCcJ;uP--M0*R6E2a9fc zZ=-tD6Q4@oo%IzyNJMJcTr}g+*C;95;`vG(KFOLR?QGht)swyRzwwlWarWV~_1dpJ|8fEF2?dsh7?-uQ@DLY{cAgFyj>Q0O3ukO56+(Wj z=2MZ5vM!dBNx%4^|BDzhBDmcL;*Mz*wgOmFgR3Um+S-I@0lQTmb5fa@#)IV4)J=p! zijaFkWVysvc(;1D6wr)hVo*U&cO(I_25yy2k=LLcl$OfBn_z3Fbf=t&6tD>Z7Q}-( z5@>J|0j2QzxQPXt&S0a$0n?ixG>$46pT#VJprMM0?BzR2(f)pMWb@Gj;AhKY00?qU z9QIj1>-Zl=28MS8Ws%^}V=jS#zSfg4#!k#dh(R`#JwpJ(^Uyn|!1an4W8>No| z3x;yAM^G4a6u8?hq{ghTjU<|M*$sDg;H4@DzJ8rtR)wjX0fG+xg@THT3i{7VeQbSD`X)iIS7LA7IMSv(x4fVn*7;E}2CHjwDt~(OquW!x6~s4UQXw;a zjMyZ$-oEQUjL&Oz>l4CYFkp^j)Icz^baZvYI&Ou~AgwZK*<8f*0dl8vpLoBD9APB$ zuAcq-YYyT6Y&+Dqg{|2$c!XyZqQuuXS}t9B2lqvxeP?&4J)`Q|(Sk8~0-`EG5`FSi z#>Cu~UWliI;sCr;WSTr9DIa-UrZEKqlPmxDpUPq7)5fHY`-6q;KAA z0$oS;{Ti`7@|PC3$effaFng_`q*PG6JZ$-#ZH?S~GWxp|=o+AZ&w_4l*jw&pH=aL; z#*XJ+uH`Q1`2EH$zH4j1Q^!xiaVK=9Y-T^RBXvJt=C5OR-W(O=(@0WtviE zm|Wki@->(*r%MvM?ZQ1iZdFyZ*z5DGAIs%}SF)zCLT-mZyDTNOSo9e~t(T2zlXItB zLZzU6Ax5xRCBv|lBW#nh)C-PDg6~57@9o=>#7{qKwwu8Z6%IvoF|fj%*tK9eJ{t2o z#qjIhlMKs63|x6b;r7GTO}S4xiosU}e4*=h{+`^m;1i#EJhZoJYZI%2mtl0JkPUz@20XF(8wk)N+fe&eZz0X`(Tg&mnKTA^Y}oIhVI8= zIob@bKQ9|V<^8%yXS4z~_gY>aVg*flqjy0rfCZ^KFvj!}QQUzuMO>29t0Tuwp3IyL zHGlHu%T+=?fQ!f129*ildaO>qiSN;7=(khRc?{TpU!Lm$m-Mq+k#bpw*oH+>aEqd! z=)8(oO3)rwR{IXQ&t4!+$G#B!GZ?{8d`F_V3Uo4QFdU9H*do=rdjwFRC!X1`$zBiw{HJtP61~trMVs#dT1;cj_pp?(Mmgz_Gp*f5Uk_Ka-Mq`tru?tFlK; zc=xJi*B2(8Hx`_~*8KTRSg!}bjkoPICKjsPsqV`_;6|qP{+zhfA{*oGG5%5T!p-w6 zNf7q$vg@)P+y{}&zgh`YF6ol`-H)Kh5nbwkMKI0_CyHg#eat)%Z=*p{ItFE?>_}T~ zxZPY*49b-;-;MdUM`N8~8+;xtEG@8T{_y$pXjz9`%$~o#!mISVZ&jq5fQweK-b2_5 zfN{iPpeQchZ(X&|K*%7#@e3=XQsfIky9MJ*Lc!CYO0G~h{%w(;Tb@7D06t?jBo+tH z6Kz9e_mih4O_3K(m<|5^t-jXiax&h|(t77!=E(SP3dK-?GkR7pR%7GiN5IXNM=d>D zPInVR)96`No^7DL+Vy&I($mw&f|{uP_wQf4lSdS=ruT%fL$`T;VL>5Fzwxk?b$d@d zo9L)S=X2IW(^R&w4KGFr4@VZ&%}E-`wkL}N|4T%o{KOD6Sfmb zOHoSk_ilm?pg6mrd}#XtlUpjmH~2K)-21}%5l*@S#vhVb7KRR#q-t_VHA+Yf{54t4 zA6P$21VWB?4}J;5m`_Y%Z1%6_*Bai|0y>vdiphUcH*Fpsspg!awj2B&5`$bn1lCn9 zYq>=h1u6ni3L7IYZYFpXESEG`x8*4!7hR&ErHz8&V2$iZT~yGWLPKS-4%_&?7uHR@ zx?e)I^Mnl)4lOO&{%J7yJ&U2WUYRK@G*#uoFNd2&q?yUS5Ha}uy=5M^5K|vB7N>Ca zocSN=FQFsqzlJmm=`$X@>aaBEvb_gJaiI0ey!#j`me(yNudr=o=PkxXDqDC+6~hK~ zAe%=SwB^Ko*I&tJMb|`-VG;-dFO)X`pGI77q)i}o5&sLiMI^P@>WkYfgI( z2;q+V8*2y&t8AB-G+C?k3#Wy_1Tu!*Z2c96y?fsiKMe^9 z!8*!IBp!OYN!R%@s3sT&hKCo$;%mYj_qi8^3P$|OF&fOiTWw<1lNulIbJ@@Mu(tLJ zk`hD`cbf@YPPiXX&d^U=z^Dc3jM*S?xXIe)eSAbj-^-$VwZpj_G8Rs40%2`ME#s!y z_VWQIgEhNqA6Qu`R|K6?DsU+Dz<6r;9-W4<5vj4v-Lq_E>8 zH`(FZMbJwc)5nGfIGUsbr-js}XXg~LsOH+DFMTaI!hB;FwQ}aurO@HoVUCD4liJ+v zH^sy_)~Bx2%tPQ#&&sM^7axi8?#t-?Cy8dM>1pQe?KWY;O08)#{rx`DHw4zBXjxg| zP5u7XNK~wfk$`5+oLj`}`1tR>LH)c3ifZ;9A0BD1*LB)h%WUtEIg;o7{Q8-P_w@A{ zhi8h?p$kbv;~&(#lok)B>hzcF%NH+Bp0obWQj#0{j^pn)K5Za+Z=;+B!~D3;uZt(n znt8!auBTeqG9AKrRggGVL(0wI$k(twML zi%!0i6G4uz5uUh@X8Y?`u8ywc-o8Gp6t$tMsdFBuLLPE&r#K3UF-CL+>yK@jPanO& zqt=i&Zdzz{$?#WP(cmkdtH2BVIZFP{{{7}QoOQJ5$U-0w`)8G zF_KB^)nR4jtjcG{RPyZS7JuHhGCy8t$^Z|``?L2$W)|aqZPW-;(qrWMZbw%T`dG|_ zYrcKEzR)gz^QPE7q@FY}7xK~{Pmx!)DH(n$?zndS$It3lz9#!HHpIB)Ntcp}f$l`g zZ!&hfsd94FnP9rVFjD(^L*{s$Z65r$@Sn7{on6i@cHbs1x|-1GZ5Mj@xAVzT`M*jN z<0L$C8Tr<)57rKfx_$bcGN_l;(vT9`Cs$l)7*x|g9a3Gr_1ySsj*)kJ4o~e`^JZNdn;=EjFedYL> zGi@znq@#z)v@R$gk?`~KIyO0lN+VcF`_z?(ckgyar36^#jf@*B*%g?&j^-G>%xsAr z@0i(To1zpN9sP{*H4LknfGAwK7$F``xEs+Py1bgUkZ`o+y;8_@2>1Hx?-cLVp6!JN zE%1qb_U!FgfcfBT8!lAH>~8S^lj)@ycgP;LkCai1aZj2j$USZI+IwttWUrtgUTWa{ zNV|R(7e|EuYhD&aWCO`tR;s>fS72G*Ir9q{hGDcFBj1SQcW|59=Z?g4lGg zCdYYUJjt@nh{G)9eS^ZjaQ-q`VbuH%j*gU$y!hOyb0wx(f<`|J$~<;vdlXvKZ+2di zNnF5k%7`wmiHVK|Jm;hH_W%!%y4Z#TNAq==Z^F%EEm`sF^SLF7FtDsJ>v$scsN03G zHUL36zajP5l#_2J&gpmo83E-P7CZ3Yc5a%;H@Ec@x{h@beW|3ytu&A;|NiU{4Jeg* zDcbDD%?oAJFa2YUJ67+SrK{O$XuLUj>iMTf5Yu|=i7&Jt$T)LK{(-4!Qupm?XVBxn z7`5$nFSMMSp8RZIL{Ezw@0js0_*qm{Tj40!<5;A5!6kgO z>8Ad6XYJCn-pl7|zw4?MeZDI5?e|TwOHjz_Oz*UU4mgc)rUXV;*kj13gsj#0KQvl! z@Ct}-nX74FZLgkO3%eGX&_w_fJKO5(6AK<4=orrn2q^ljsr;OU?x2YYwdIhk40cr0 zc!t<2O=61rp?x)1LhaATqG@Mr+b#XCkbTbLg-33# zc;&N~hVP`^*YFTVaxeJ=1nP)QpM?o$Vtu{4+JAD3OVL@i`d&~LcUVU?G;kZWS!re6 z+lWR2n4z+U`XT{MG(qGylSbPQJYxh{*0E@<7$-Q2D~+{xtZY(p@=E>-r^?R{qF52v{o<_}g|(vNF37JtlLp39=P zwI206=~`6fr;SlqrMejo46r$Lv#JIJaH_VD*L;J|db3*|o-5JwiMAR|x7YaSwAMe? z-PTbg-r10FRN_l$SWsNv)9pK}p1~~!oJYY~2Lw8o>GFpst2-)$4)r~o8wpgR%AJpS zC?!?>bD>L{C1VBqK>DWj-qBs4_Yyi>^hFI=0=LF9A3?#I0y5_ikS~JQ3h2a`f@nqt zc3p(YK=uQ9SN~U8A09$%!XpnJV9Q;)^8}TPv>V-8M|9}#+6SILXiN$u%*J3?LMW+gjJH4HBFcDhaV;P!Wj5Hps~pHrpSQ0S z{kS_YE3L+yl-zAp2`0*2`KP2Q8Q;PoZ%TdPUbt=Cjt*_@@fm%ff(=i$dZX?r)E%K_ zj(oE<`0@eH{<-Os4e~KDmJZ_@75jv4CoGJ$DHAeB@dez(g(ZPrK4-ZZ4MW3+=j{~I z;EC{1yi;At%q$4Xcb5ypvy1%H};HH!d?XH%m zFQqX6bV9Ws6~xGDXsxmKc(Y;_jrl3th6Gc+o@|W+CY6`^KARHuqaej=d-@U}u7)0e z=$zl<&0}!}D$f0$ajEK@$xkcZ%2|QsLT-glkZG(v#5!I0Ve^SKs0VPsk{i6^#$9j7 z+<@~BIA;{ZUqge%e39=f0|5_!D}EnMlMSOfZ|LN0Yc-~Ht>4MU06W+wb3z}}V`6fYBpNizW zc&GC_l9UwZM2h)SArXKJjdDLm?m#PgbI{W7J+G0PFWyP0F%lDwa$36e1_kPg9c+W= z9ehFS2<|#s{A8eHH-^635~^@Q)Bp(-=J(t03eY|7`CXCBns*W00eE#~geF}qIB7Dz zy2J^kidQB>FJr>&?8C7Zx|p-(zFa3yRv0_OzKAgQWF0PyBy>1v$Je4>pHiM6uLuytz zbixu+CqjP^>K}{IW`05f3{1t;O6CSZcqaaraJ-YC7L}~?QQw_r5Xro_wDcDPD?+K> zQS9k?mq)`!+WgPnU#Xh)-kw*L^yAiyPDx3H!0kt7`A=w;-AKwIwUYBVUuC}JA;I5< zOpx#8;LF#LN(fQeX35Jl6gz$NEt(6eahiF~yEY$s5}wn(S^D~1XAg?k7h3&oetY&@ z_M<5OLkCBF3DGcKC0xvu57rWI<7ireyX$?>AeHG?wg!d$R!{dwF;_8p{;jUr{;R-z0>Pyz=_;^$^C0m}|y~0w} z#BhOsdTy=}nwe|}^c}>|2pv0rUi0P4W8S_uJ{sox0*E-|G1pR_>^1|4!kVPAbAD@ke z^?X|%f=?t8jehL`ASFUzm8H)0i;%HHArAT9E#L?zUjygz^cCL)O>LPbHScF~G!f9+uGgogDrx;H`-fgE~E+Iubf(a*pK%=n%6 zC~OSB2lEgAPGO}?+*Eq~yFu39Td51PT;bs-XF8vUDxm260Ceo_Sb^hm!f&J8z%SXE zx8yBtDybyKpqha0nGb}iiXKTATRG2%+&X#E%)m)8X~>71PNBY|!z*kP$(VjYpTzO~ zAI*^sJ%PvJV-VpG=^UtBKv2*TpNfNUXCd6C4;(n4H=gqX!W2S!@ZvCd*CV*M|7}8* zs;Q0w5Gwh=x9vQn$jI+UUL`5M9~u=Pkt(`j?;V6 zu{HThX&)6;xEaqFwJP8hSz3XzKq4I`bZA~Mdbwqg6y>BHDp0_4^b0{n@TQ~lA%21M zh?1~LD!=4o!QT`hyzj}A+1$bjVovAMi{l)L-zep&1oav3#QWwAfrhq*w6t9Jov%ES zlV5=@LN6G1pZKLm-(+rHm7N{$INPSUM?fL)^7FlHp&`KuU-k*dZty-+KfC`z<9ftL zVZY>KYkj2ke4gC4=uG+pZr-QQQ0YCt`yxaC^fUT67U8mImJj)VA85NxmFfCkwW?L6 z>SWM~FMGtf{9~`TIXXE9kEi`gxf|eJy8?#VO2>rlxNW$7$JvGU3EP^5j4XS;zQbJH z+tW15rqpu}^KUmd|Gu$oIP`U(;xyO6gIpBXCU*l_q^;l1Gd3X8zH7&YRv)IM=ByVq z4XewB%&O`#t@?*K`>ZaIv?|IIboiNgBMWGbE>v?)7=4$VI4F@={&sDJBO}w!ZgQkE z%qNMK*3m^J`mrbR-+2|5>gv2#hrremPb}~F5&Cj*GKwoGB*yT68$M8Q{qEiF z9(LyoM*~SN!CCiS?qvyC@ePm`S?!}f3ZUK~LGn_P(mUx2(Ji>Wga7OHIA=qv(@ryx!(4FEq!34WSwjL01d4i?VTsDiTh|c z>UKfnmVf`vrHLoHxG<~=JVq-u1WV`d~OtjY10bSAk^I#$j=ib%m4bhS~M&LW3%jlckNxLXYMQ_@8@Hw84G_=hCDTW)9gC zzv8Lyo>Z;hm9zy$azhYJnNmL;`q-nogI13GrKNvRm$s=|`t6I4Z|O7}pE zNe)iKW_V$%sH?-wgRL38OCfcDC&eWPvy*DIVaJzzZr

ze5|_#RM_fx9sQFju6JF zYOC;wot&Dwh{_`>Ihj&aR1~RXJ6x!t zPfK2_*^@)Uyl`{KHFs>TfphxrZjnQQ_~q`&#pPwj$&SSmLW(uLsCbR4*Q6_`oG@)^ zZf(^;uJX50)7aaas`;v%Fvb)*cTNZ9Oa3;Obq?ylL9ZMU)=Ro*ElipQpB-_|;sT4C z`0j`zb57r`0>x`FT<7w`uD}<)8-cqF3FGA_)dhA}$oW72`bDRtq$GQkK0!8$Z13K^ zb+BL6fWg}HTE6#Pr|{yGOsQQwJ!5g0jW66R=@(8kaI2(~f`Wo3EI3wC^*pk$z`+M( z5dZQ+uSL3`qQZ<5)O=uUW`Q>9#pP>~vpu0F^(cypiXydL++N|0xkWfFlY`WA1*M7{ zx>VeMdyy?2tg08`7>MeAvjSYN=JqNpE6M#axLr}gY(9kAiPfeM(9ObjI+u`kSI(VP|iz3rsohRh9VtbLY+l3z;4ym3DOO zgBG$B6dp69WQ>`l$#U=4lVPC$2?hD|s6FPpTiH14S9EU0Q8_(qV=OMTO4JFF=BPC8 zpeSJztt>MS-DP*1 zvUg92)xlm$a7|Rt<%M^EVtd)q-LNA31TAkmj9gH?$z>WL8)CN|jeAK;8+cxo{42!R zx}ROimvS^qoJ3K>dO#hl3)TM#0fC^05u)}2C|q{FjG^+#&d%-^21&T&3J^ieBTj_N~+*f1GWEivJy6DXJ>^pt$oP;7a($*g04Cmi+8J2aZZi^aBnw!L7%Gc zrN+}|&Sb!LDL6EAvyEt>DXo?>U>)$lxW{SCd% zTgeIem78J}jh;KUxVa|i{0#|V&VN7`WM>~^oNZ7cRPg!rjEEfos`Tva3QY0&VUCYM zCw?F&p^mZ-h~g&H8Ho;kYmS_F+R3ILcL0@|~>G z^+Xhck?=99`}Io#W*Gd?`jReaXzT^zecQl*0{iv@j&2y+{yr^@52Sc;2?>6*L<&g? z

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 +nY;5SMTK9NON5-7nz}TR7HYgu_New1 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

3^;R0rUdqhNcaLS!WTH55`L^& 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 Date: Tue, 11 Jun 2019 15:51:55 -0700 Subject: [PATCH 16/43] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 380fa1c..95c0073 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The DNAplotlib library is contained within the `dnaplotlib.py` file in the `lib` We provide an extensive gallery of use cases for DNAplotlib in the `gallery` directory. Click on a thumbnail below to go directly to the example code: ### Genetic Designs and Annotation - + From 4ff2d02408d5ff8bf6ff6d50b55a8197f96bf5a2 Mon Sep 17 00:00:00 2001 From: dr3y Date: Tue, 11 Jun 2019 15:52:42 -0700 Subject: [PATCH 17/43] Update README.md --- gallery/all_parts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gallery/all_parts/README.md b/gallery/all_parts/README.md index 0e65e4f..bcb9f1b 100644 --- a/gallery/all_parts/README.md +++ b/gallery/all_parts/README.md @@ -1,6 +1,6 @@ # SBOL Visual Parts & Customization - + Illustration of all SBOL Visual parts in forward and reverse direction. Each part can have its apperance customised to convay further information. From 96336c2bbc2b8f452c11d462da316020dd5c5a28 Mon Sep 17 00:00:00 2001 From: dr3y Date: Tue, 11 Jun 2019 18:06:05 -0700 Subject: [PATCH 18/43] default ncrna length --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 476cb55..41a1b16 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1712,7 +1712,7 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): color = (0,0,0) start_pad = 0.0 end_pad = 0.0 - x_extent = 6.0 + x_extent = 30.0 y_extent = 6.0 linestyle = '-' # Update default parameters if provided From 9bd4ea72bbfea1cb3590fd26466eef5a7c00d0fd Mon Sep 17 00:00:00 2001 From: dr3y Date: Thu, 13 Jun 2019 15:50:11 -0700 Subject: [PATCH 19/43] made recombinase site bigger --- dnaplotlib/dnaplotlib.py | 8 ++++---- gallery/all_parts/actually_all_parts.png | Bin 144296 -> 144363 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 41a1b16..b4b3830 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1645,8 +1645,8 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op color2 = (0,0,0) start_pad = 0.0 end_pad = 0.0 - x_extent = 6.0 - y_extent = 6.0 + x_extent = 12.0 + y_extent = 12.0 linestyle = '-' # Update default parameters if provided if opts != None: @@ -1807,8 +1807,8 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op color2 = (0,0,0) start_pad = 0.0 end_pad = 0.0 - x_extent = 6.0 - y_extent = 6.0 + x_extent = 12.0 + y_extent = 12.0 linestyle = '-' # Update default parameters if provided if opts != None: diff --git a/gallery/all_parts/actually_all_parts.png b/gallery/all_parts/actually_all_parts.png index 957b51bff27cab11b51ca654426d00b0405c06c8..7003862aa87a2dcb205004a8fb24d4b33922cc8e 100644 GIT binary patch literal 144363 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 &@k79QMH7Y65g=^T!d15OjRHlmy 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 literal 144296 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 z

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 Date: Mon, 10 Feb 2020 12:17:01 -0800 Subject: [PATCH 20/43] don't flip attL/R color? --- dnaplotlib/dnaplotlib.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index b4b3830..81554c3 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1842,17 +1842,19 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op y_lower = -1 * y_extent/2 y_upper = y_extent/2 if start > end: + #this is reverse start = prev_end+end_pad+x_extent+linewidth end = prev_end+end_pad+linewidth final_end = start+start_pad+linewidth - temp = color - color = color2 - color2 = temp + #temp = color + #color = color2 + #color2 = temp else: start = prev_end+start_pad+linewidth end = start+x_extent final_end = end+end_pad+linewidth # Draw the site + #big triangle (the whole thing) p1 = Polygon([(start, y_lower), (start, y_upper), (end,0)], @@ -1863,6 +1865,7 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op hypotenuse2 = hypotenuse / 2 cosineA = (y_extent/2) / hypotenuse f = hypotenuse2 * cosineA + #small triangle p2 = Polygon([(midpoint, -1*f), (midpoint, f), (end,0)], From af301a7cf4d0a6696c16c2644a3bb9b8364674b4 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:07:52 -0700 Subject: [PATCH 21/43] linewidth over 2 --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index ce771a1..1b9832e 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2210,7 +2210,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = linewidth + corr = linewidth/2 if to_part['fwd'] == False: base = -1*startHeight From dc3f0765a89a968d665b89f1c14c13c070058ac2 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:11:34 -0700 Subject: [PATCH 22/43] arrow distance 3/4 --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 9420e09..f8b3bf4 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = linewidth/2 + corr = linewidth*3/4 if to_part['fwd'] == False: base = -1*startHeight From 28a7d2f4b3ebada1122a284bdad587b5bdef0b6c Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:12:52 -0700 Subject: [PATCH 23/43] 1.5x linewidth --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index f8b3bf4..1d59e21 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = linewidth*3/4 + corr = linewidth*1.5 if to_part['fwd'] == False: base = -1*startHeight From 90a9e87a3b87a1c336a3093a9772a88c83c1914f Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:17:35 -0700 Subject: [PATCH 24/43] zero test --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 1d59e21..2a7ade6 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = linewidth*1.5 + corr = 0*linewidth*2 if to_part['fwd'] == False: base = -1*startHeight From 86dbe50ac4e6e35098748d0b3e15a779a2f7b167 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:22:44 -0700 Subject: [PATCH 25/43] revert --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 2a7ade6..81554c3 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = 0*linewidth*2 + corr = linewidth if to_part['fwd'] == False: base = -1*startHeight From 7796a9a7ee92f6ff32898df7f3829d73dc14e7d2 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:25:35 -0700 Subject: [PATCH 26/43] Revert "revert" This reverts commit 86dbe50ac4e6e35098748d0b3e15a779a2f7b167. --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 81554c3..2a7ade6 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = linewidth + corr = 0*linewidth*2 if to_part['fwd'] == False: base = -1*startHeight From f1316448064c96fae66c2a20dfcffbbb91702fd4 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:27:41 -0700 Subject: [PATCH 27/43] testtt --- dnaplotlib/dnaplotlib.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 2a7ade6..cc4386c 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2422,6 +2422,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ base = startHeight; indHeight = arrowhead_length corr = 0*linewidth*2 + if to_part['fwd'] == False: base = -1*startHeight @@ -2449,7 +2450,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ ax.add_line(line_away) ax.add_line(line_across) ax.add_line(line_toward) - + print(corr) if(type == 'Activation'): ax.add_line(line_ind1) ax.add_line(line_ind2) From 8625a559fce73304e3f69037d5a14873293d9058 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:29:45 -0700 Subject: [PATCH 28/43] space a bit --- dnaplotlib/dnaplotlib.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index cc4386c..5cdc297 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = 0*linewidth*2 + corr = .25*linewidth if to_part['fwd'] == False: @@ -2450,7 +2450,6 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ ax.add_line(line_away) ax.add_line(line_across) ax.add_line(line_toward) - print(corr) if(type == 'Activation'): ax.add_line(line_ind1) ax.add_line(line_ind2) From 42eec90804a4a7cbf93d826b37932398f20e2254 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:31:30 -0700 Subject: [PATCH 29/43] back to half!! --- dnaplotlib/dnaplotlib.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 5cdc297..bf03c9e 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = .25*linewidth + corr = .5*linewidth if to_part['fwd'] == False: From 36f2e153e9afd8e57911bad3d9125b7d89e6739d Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:35:08 -0700 Subject: [PATCH 30/43] moveitabit --- dnaplotlib/dnaplotlib.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index bf03c9e..d5644d6 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = .5*linewidth + corr = .75*linewidth if to_part['fwd'] == False: @@ -2429,7 +2429,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ arcHeightEnd = -arcHeightEnd top = -1*arcHeight indHeight = -1*arrowhead_length - corr *= -1 + corr *= -1.0 line_away = Line2D([start,start],[base,top], From b5384542f01f66db45d3d22bae571a0f617141a2 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:36:21 -0700 Subject: [PATCH 31/43] Revert "moveitabit" This reverts commit 36f2e153e9afd8e57911bad3d9125b7d89e6739d. --- dnaplotlib/dnaplotlib.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index d5644d6..bf03c9e 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = .75*linewidth + corr = .5*linewidth if to_part['fwd'] == False: @@ -2429,7 +2429,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ arcHeightEnd = -arcHeightEnd top = -1*arcHeight indHeight = -1*arrowhead_length - corr *= -1.0 + corr *= -1 line_away = Line2D([start,start],[base,top], From 4d26c79a9e2a898b34352bbb7680968f1a9861c9 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 14 Apr 2020 16:38:51 -0700 Subject: [PATCH 32/43] move tiny bit --- dnaplotlib/dnaplotlib.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index bf03c9e..e93015d 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2421,7 +2421,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ top = arcHeight; base = startHeight; indHeight = arrowhead_length - corr = .5*linewidth + corr = .4*linewidth if to_part['fwd'] == False: @@ -2429,7 +2429,7 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ arcHeightEnd = -arcHeightEnd top = -1*arcHeight indHeight = -1*arrowhead_length - corr *= -1 + corr *= -1.0 line_away = Line2D([start,start],[base,top], From 5af17753d90085c970c08b8664df571314f856b2 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Wed, 15 Apr 2020 15:16:38 -0700 Subject: [PATCH 33/43] dont change color for reverse integrase site --- .vscode/settings.json | 3 +++ dnaplotlib/dnaplotlib.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..079583a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "C:\\Users\\andrey\\Anaconda3\\python.exe" +} \ No newline at end of file diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index e93015d..0caac0c 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -1680,7 +1680,7 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op end = prev_end+end_pad+linewidth final_end = start+start_pad+linewidth #temp = color - color = color2 + #color = color2 #color2 = temp else: start = prev_end+start_pad+linewidth From e0ded1f9e14bfbef39406890bfa7d7692357221f Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Thu, 7 May 2020 11:46:44 -0700 Subject: [PATCH 34/43] circular flag in renderDNA --- dnaplotlib/dnaplotlib.py | 23 +- gallery/notebooks/interactiveplot.ipynb | 533 ++++++++++++++++++++++++ 2 files changed, 551 insertions(+), 5 deletions(-) create mode 100644 gallery/notebooks/interactiveplot.ipynb diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 0caac0c..bf140c7 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -52,7 +52,7 @@ import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt -from matplotlib.patches import Polygon, Ellipse, Wedge, Circle, PathPatch +from matplotlib.patches import Polygon, Ellipse, Wedge, Circle, PathPatch, FancyBboxPatch from matplotlib.path import Path from matplotlib.lines import Line2D from matplotlib.patheffects import Stroke @@ -2969,7 +2969,7 @@ def std_reg_renderers (self): 'Activation' :induce, 'Connection' :connect} - def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True): + def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True,circular=False): """ Render the parts on the DNA and regulation. Parameters @@ -3222,9 +3222,22 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p reg_num += 1 # Plot the backbone (z=1) if plot_backbone == True: - l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], - linewidth=self.linewidth, color=self.linecolor, zorder=10) - ax.add_line(l1) + if(circular): + circ_start = first_start-self.backbone_pad_left + circ_end = prev_end+self.backbone_pad_right + vheight = 5 #this is the height of the oval. + curves = (circ_end-circ_start)*.1 #curves are 5% of the length, lengthwise + plasmid = FancyBboxPatch((circ_start-curves, -curves*2), \ + (circ_end-circ_start)+curves*2, curves*2,\ + fc="none",ec=self.linecolor, linewidth=self.linewidth, \ + boxstyle='round,pad=0,rounding_size={}'.format(curves), \ + joinstyle="round", capstyle='round',mutation_aspect=1, zorder=5) + ax.add_patch(plasmid) + else: + l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], + linewidth=self.linewidth, color=self.linecolor, zorder=5) + + ax.add_line(l1) return first_start, prev_end def annotate (self, ax, part_renderers, part, annotate_zorder=1000): diff --git a/gallery/notebooks/interactiveplot.ipynb b/gallery/notebooks/interactiveplot.ipynb new file mode 100644 index 0000000..9260295 --- /dev/null +++ b/gallery/notebooks/interactiveplot.ipynb @@ -0,0 +1,533 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "

", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAMHCAYAAAD1oPL6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3hc1bX38e+S3HvHBvcKmM6Y3gKhQyB0QuikQUi7XNJzfEhC6g3JSwghNNNNCwEMBAgtEJrHBhwD7hVwkYtcZdmS1vvHPiOPZMmWZUljjX6f59GD5rRZMiPNrLPXXtvcHRERERERkXxQkOsAREREREREGooSHBERERERyRtKcEREREREJG8owRERERERkbyhBEdERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhIcERERERHJG0pwREREREQkbyjBERERERGRvKEER0RERERE8oYSHBERERERyRtKcEREREREJG8owRERERERkbyhBEdERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhKcOojjVN84To3JdRwiIiIiIrJ1rXIdQDPRH3g3jlMTgb8AD0dRuiTHMYmIiIiISDUawdk+Y4C7gU/iOPW7OE4NzXVAIiIiIiKymbl7rmPY6cVxKgVMrGGXA/8EbgH+GUXp8iYNTHZqcZzqABwP7AqsAf4VRenFuY1KROorjlNN/oYZRWlr6ucUEWnuVKK2Yww4OfmaG8epvwJ3RVF6WW7DklyK41QB8FPgOqBT1q6KOE49AVwVReninAQnIiIikudUotZwhgC/IZSv3RPHqYPjOKU7by3TncBYqiY3EH7fzgbeiuNU56YOSkRERKQlaBElarkoK0hMIjQlGB9F6fU5ikGaUBynDgbezjzu3n03Bg8ew/Ll81iw4P3sQ38cRekbmzxAEWlS2e8/KjcTEWkaGsFpXAcS7uZPjuPUiFwHI40rjlNHkJXcDBt2KN/85uN84Qs/4fLL7+C4476ZffiXmzxAERERkRZAc3Aa11uEBgSPRVG6NNfBSN3Fcao3cC5wENAFKANWAM8RGkqUJscZoZHAj4Gjsq8xbNjBFBRs/hUbMGCf7N0dGjF8ERERkRarxSU49SkR2EoXtZqsBx4A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UfRhTgMTkZ1OLuZlKikSqbtk7u95hFbyXwOuA25KmlFVP7YXoQvfMYT5xRVAV+AYd38tU6Lm7lojqQaag7MTShZcfAp4KhXHI4BvENqAdstpYNLk0lE0mZDUiIiISDOWdFodZ2bXEtY2mkeYe1OTX5EsIZHME8yM4GTfVFDzkFpoDs5OLh1FM9NR9D1C142rgPdyHFKz5e7WnEZvREREpPkys+5m9isz28vMWptZKzM7m1Cq9jpwC/B1Mzs52dfFzA5PTu9CaDu/0sw6Ab/JzU/RPGkEp5lIR9F64M5UHN9F6BR2ZY5DEhGRnYjKxYxQsYsAACAASURBVER2OhuBPoTmRv2AMsKozbXu/iiAmV0F3EhoKLKO0PDoP4S5tncTGocsAX5GWPZC6kBzcEREREREJG+oRE1ERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhIcERERERHJG0pwREREREQkbyjBERERERGRvKEER0RERERE8oYSHBERERERyRtKcEREREREJG8owRERERERkbyhBEdERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhIcERERERHJG0pwREREREQkbyjBERERERGRvKEER0RERERE8oYSHBERERERyRtKcEREREREJG8owRERERERkbyhBEdERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhIcERERERHJG0pwREREREQkbyjBERERERGRvKEER0RERERE8karXAcgItJcxHHKgAuBy4DjqNtNoiLgUeBPUZSe0XjRiUguJH8X3gQOydr8B+CHUZTeuAPXvQi4DeiYbFoNjIqi9OL6XlOkpTB3z3UMIiI7vThO9QTuBM6o5yXWA9cCd0dRWn94RfJIHKcOA8YDA7I2vwOcH0Xp+dt5rQ7A/wOuzNpcSvj7cYf+fohsmxIcEZFtiOPUCOB5YEj29oED92evvU5kxIjD6dChG4WFrdm4cT3Ll89n6tQX+PDDF1m7dln1y/0FuDaK0hVNFL6INIHkJsg9wKlZm4uBy6Io/WQdr7E7YcR3r6zNM4Dzoij9QUPFKpLvlOCIiGxFHKe6AxOBYZltY8acxxFHXEqXLrts9dyKinLmz5/Ms8/+lmXL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PDlxIm9+9FFxciuBb+WjSH2yMmDBsmW89+mnjZLWxwsWNEo60vLmLVnSaOXi07W1vrKem714caOVizmff94o6Yg0NgU4rVQ+ihYlF7MXAiNJmhMuXrGCf44fzz/Hjy8lmenAyfkoernJMirNKh9Fc3JxPAy4HPhxYfn8pUt5YNw4Hhg3rpRkJgEn5qPorVq3lPXCkxMn8uTEiS2dDWllHnz9dR58/fWWzoa0Mre/+CK3v6iBMyXb1AenFctH0Zp8FF0CDAWuIAQstXFgDKE501AFN9mTj6JV+Sj6CZADrqO0uY3WAE8AZwA5BTciIiKSVVbXTsoiIiIiIiKtlWpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZ0b6lMyAiIiIi0tbFcc4Lz6Moby2Zl6rk4rgyf/koanX5S1MNjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhnqgyPSQuI4NwC4Ejge6BVF+bktnKV15OJ4R+BvwE5Ax3wUrW7hLImIiIjUSgGOSDOK41xX4BjgDOArqVVz4jjXOYryK1okY4lcHG8MnAScBXwpter1XBx/KR9Fa1omZyIiIiKlUYCTEse5bkAO2AHYEegFdABWA58AE4F3gHxLXIgmF5+5JG9DgI0In+FK4KMkfxOB8fkoKm/u/GVVHOd6sPa87wBsQjjvq4CZhDIxEXg9ivJV1nLE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IiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMqN9S2egJcRxzkvZLory1hj71VUujks6Tj6K1jlOffcTEREREckK1eCIiIiIiEhmKMAREREREZHMaJNN1GpqQtZczdBqUlMTMjVDExERERGpnmpwREREREQkMxTgiIiIiIhIZijAEWlkcZw7LI5zp7Z0PkRERETaojbZB0ekCbQD9nz//ZdOMSs73b2iSxzndgQujKJ8RUtnTuqksp9bHOcqF0ZRvrmOX1v/ucr85eK4cmE+ipoqP2ltuW9fSf0fG6qaMlfKeW/y/NVQ3tpyuRCRVkg1OCL1NwA4BxgFzAVeyudHnede0SVZ/zPgH3Gc695SGRQRERFpaxTgiJSuC3AocC0wCZgO3AwcC/QEOOaYS9h22/3S+xwJvBTHuS2bN6siIiIibZOaqInUbGfgf5LH/sAGNW28wQbdOPHEq3jqqT8xduxd6TTGxXHu6CjKv9SkuRURkWZR6rQSTammKStKnVaiKbXFKStULmrXHOVCAY60eXGc+wPQHaBDh04bbLRRv77duvXq16VLz77t23foUsvu1erevReffz6n8LIX8Ewc586NovydDc+1iIiIiFRFAY60eWZlJ7tXbAKwevUKZs/+kNmzP2yKQ3UE7kgGH/hFFOXXNMVBRERERNoyBTjS5rlXNPcoZ/8HDInj3MlRlP+8mY8tIiKNrBlHWVxnpL1SNdMoi8C6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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ], + "source": [ + "#import sys\n", + "import dnaplotlib as dpl\n", + "import matplotlib.pyplot as plt\n", + "#import matplotlib.transforms as mtransforms\n", + "#import matplotlib.patches as mpatch\n", + "#from matplotlib.patches import FancyBboxPatch\n", + "import numpy as np\n", + "from bokeh.models import (Plot , Range1d)\n", + "#bokeh.io.output_notebook()\n", + "\n", + "%matplotlib inline\n", + "dnaline = 3\n", + "dr = dpl.DNARenderer(scale = 5,linewidth=dnaline)\n", + "part_renderers = dr.SBOL_part_renderers()\n", + "parts = list(part_renderers.keys())+[['EmptySpace','circular test']]+['EmptySpace']*5\n", + "dontrender = ['StemTop']\n", + "fig1 = plt.figure(figsize=(14,14))\n", + "faxes = fig1.subplots(ncols=6,nrows=7)\n", + "raxes = np.ravel(faxes)\n", + "#print(raxes)\n", + "raxind = 0\n", + "\n", + "for part in parts:\n", + " if(part in dontrender):\n", + " continue\n", + " if(type(part)==list):\n", + " circMake = True\n", + " part = part[0]\n", + " partlabel = \"circular=True\"\n", + " else:\n", + " circMake = False\n", + " partlabel=part\n", + " ax = raxes[raxind]\n", + " raxind+=1\n", + " #plt.Figure(figsize=(.1,.1))\n", + " #ax = plt.gca()\n", + " design = [{'type':part, 'name':'test', 'fwd':True,\\\n", + " 'opts':{'label':partlabel,'label_size':13,'label_y_offset':-8,'color':(.5,.5,.2)}},\n", + " {'type':part, 'name':'testr', 'fwd':False,'opts':{'color':(.2,.5,.5)}}]\n", + " start,end = dr.renderDNA(ax,design,part_renderers,circular=circMake)\n", + " ax.axis('off')\n", + " xdist = end-start\n", + " delta = xdist*.2\n", + " start-=delta\n", + " end+=delta\n", + " newxdist = end-start\n", + " ax.set_xlim([start,end])\n", + " ax.set_ylim([-newxdist/len(design),newxdist/len(design)])\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "\n", + "(function(root) {\n", + " function now() {\n", + " return new Date();\n", + " }\n", + "\n", + " var force = true;\n", + "\n", + " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", + " root._bokeh_onload_callbacks = [];\n", + " root._bokeh_is_loading = undefined;\n", + " }\n", + "\n", + " var JS_MIME_TYPE = 'application/javascript';\n", + " var HTML_MIME_TYPE = 'text/html';\n", + " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", + " var CLASS_NAME = 'output_bokeh rendered_html';\n", + "\n", + " /**\n", + " * Render data to the DOM node\n", + " */\n", + " function render(props, node) {\n", + " var script = document.createElement(\"script\");\n", + " node.appendChild(script);\n", + " }\n", + "\n", + " /**\n", + " * Handle when an output is cleared or removed\n", + " */\n", + " function handleClearOutput(event, handle) {\n", + " var cell = handle.cell;\n", + "\n", + " var id = cell.output_area._bokeh_element_id;\n", + " var server_id = cell.output_area._bokeh_server_id;\n", + " // Clean up Bokeh references\n", + " if (id != null && id in Bokeh.index) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + "\n", + " if (server_id !== undefined) {\n", + " // Clean up Bokeh references\n", + " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", + " cell.notebook.kernel.execute(cmd, {\n", + " iopub: {\n", + " output: function(msg) {\n", + " var id = msg.content.text.trim();\n", + " if (id in Bokeh.index) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + " }\n", + " }\n", + " });\n", + " // Destroy server and session\n", + " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", + " cell.notebook.kernel.execute(cmd);\n", + " }\n", + " }\n", + "\n", + " /**\n", + " * Handle when a new output is added\n", + " */\n", + " function handleAddOutput(event, handle) {\n", + " var output_area = handle.output_area;\n", + " var output = handle.output;\n", + "\n", + " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", + " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", + " return\n", + " }\n", + "\n", + " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", + "\n", + " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", + " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", + " // store reference to embed id on output_area\n", + " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", + " }\n", + " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", + " var bk_div = document.createElement(\"div\");\n", + " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var script_attrs = bk_div.children[0].attributes;\n", + " for (var i = 0; i < script_attrs.length; i++) {\n", + " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", + " }\n", + " // store reference to server id on output_area\n", + " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", + " }\n", + " }\n", + "\n", + " function register_renderer(events, OutputArea) {\n", + "\n", + " function append_mime(data, metadata, element) {\n", + " // create a DOM node to render to\n", + " var toinsert = this.create_output_subarea(\n", + " metadata,\n", + " CLASS_NAME,\n", + " EXEC_MIME_TYPE\n", + " );\n", + " this.keyboard_manager.register_events(toinsert);\n", + " // Render to node\n", + " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", + " render(props, toinsert[toinsert.length - 1]);\n", + " element.append(toinsert);\n", + " return toinsert\n", + " }\n", + "\n", + " /* Handle when an output is cleared or removed */\n", + " events.on('clear_output.CodeCell', handleClearOutput);\n", + " events.on('delete.Cell', handleClearOutput);\n", + "\n", + " /* Handle when a new output is added */\n", + " events.on('output_added.OutputArea', handleAddOutput);\n", + "\n", + " /**\n", + " * Register the mime type and append_mime function with output_area\n", + " */\n", + " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", + " /* Is output safe? */\n", + " safe: true,\n", + " /* Index of renderer in `output_area.display_order` */\n", + " index: 0\n", + " });\n", + " }\n", + "\n", + " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", + " if (root.Jupyter !== undefined) {\n", + " var events = require('base/js/events');\n", + " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", + "\n", + " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", + " register_renderer(events, OutputArea);\n", + " }\n", + " }\n", + "\n", + " \n", + " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", + " root._bokeh_timeout = Date.now() + 5000;\n", + " root._bokeh_failed_load = false;\n", + " }\n", + "\n", + " var NB_LOAD_WARNING = {'data': {'text/html':\n", + " \"
\\n\"+\n", + " \"

\\n\"+\n", + " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", + " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", + " \"

\\n\"+\n", + " \"
    \\n\"+\n", + " \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n", + " \"
  • use INLINE resources instead, as so:
  • \\n\"+\n", + " \"
\\n\"+\n", + " \"\\n\"+\n", + " \"from bokeh.resources import INLINE\\n\"+\n", + " \"output_notebook(resources=INLINE)\\n\"+\n", + " \"\\n\"+\n", + " \"
\"}};\n", + "\n", + " function display_loaded() {\n", + " var el = document.getElementById(\"5563\");\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS is loading...\";\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", + " }\n", + " } else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(display_loaded, 100)\n", + " }\n", + " }\n", + "\n", + "\n", + " function run_callbacks() {\n", + " try {\n", + " root._bokeh_onload_callbacks.forEach(function(callback) {\n", + " if (callback != null)\n", + " callback();\n", + " });\n", + " } finally {\n", + " delete root._bokeh_onload_callbacks\n", + " }\n", + " console.debug(\"Bokeh: all callbacks have finished\");\n", + " }\n", + "\n", + " function load_libs(css_urls, js_urls, callback) {\n", + " if (css_urls == null) css_urls = [];\n", + " if (js_urls == null) js_urls = [];\n", + "\n", + " root._bokeh_onload_callbacks.push(callback);\n", + " if (root._bokeh_is_loading > 0) {\n", + " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", + " return null;\n", + " }\n", + " if (js_urls == null || js_urls.length === 0) {\n", + " run_callbacks();\n", + " return null;\n", + " }\n", + " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", + " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", + "\n", + " function on_load() {\n", + " root._bokeh_is_loading--;\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", + " run_callbacks()\n", + " }\n", + " }\n", + "\n", + " function on_error() {\n", + " console.error(\"failed to load \" + url);\n", + " }\n", + "\n", + " for (var i = 0; i < css_urls.length; i++) {\n", + " var url = css_urls[i];\n", + " const element = document.createElement(\"link\");\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.rel = \"stylesheet\";\n", + " element.type = \"text/css\";\n", + " element.href = url;\n", + " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", + " document.body.appendChild(element);\n", + " }\n", + "\n", + " for (var i = 0; i < js_urls.length; i++) {\n", + " var url = js_urls[i];\n", + " var element = document.createElement('script');\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.async = false;\n", + " element.src = url;\n", + " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.head.appendChild(element);\n", + " }\n", + " };var element = document.getElementById(\"5563\");\n", + " if (element == null) {\n", + " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '5563' but no matching script tag was found. \")\n", + " return false;\n", + " }\n", + "\n", + " function inject_raw_css(css) {\n", + " const element = document.createElement(\"style\");\n", + " element.appendChild(document.createTextNode(css));\n", + " document.body.appendChild(element);\n", + " }\n", + "\n", + " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.3.4.min.js\"];\n", + " var css_urls = [];\n", + "\n", + " var inline_js = [\n", + " function(Bokeh) {\n", + " Bokeh.set_log_level(\"info\");\n", + " },\n", + " \n", + " function(Bokeh) {\n", + " \n", + " },\n", + " function(Bokeh) {} // ensure no trailing comma for IE\n", + " ];\n", + "\n", + " function run_inline_js() {\n", + " \n", + " if ((root.Bokeh !== undefined) || (force === true)) {\n", + " for (var i = 0; i < inline_js.length; i++) {\n", + " inline_js[i].call(root, root.Bokeh);\n", + " }if (force === true) {\n", + " display_loaded();\n", + " }} else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(run_inline_js, 100);\n", + " } else if (!root._bokeh_failed_load) {\n", + " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", + " root._bokeh_failed_load = true;\n", + " } else if (force !== true) {\n", + " var cell = $(document.getElementById(\"5563\")).parents('.cell').data().cell;\n", + " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", + " }\n", + "\n", + " }\n", + "\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", + " run_inline_js();\n", + " } else {\n", + " load_libs(css_urls, js_urls, function() {\n", + " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", + " run_inline_js();\n", + " });\n", + " }\n", + "}(window));" + ], + "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"5563\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };var element = document.getElementById(\"5563\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '5563' but no matching script tag was found. \")\n return false;\n }\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.3.4.min.js\"];\n var css_urls = [];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"5563\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'xs': [[[[1, 1, 2, 2]]], [[[1, 1, 3], [1.5, 1.5, 2]]], [[[2, 2, 4, 4], [2.5, 2.5, 3], [3.5, 3, 3]], [[3.5, 3.5, 4]]]], 'ys': [[[[4, 3, 3, 4]]], [[[1, 3, 1], [1.5, 2, 1.5]]], [[[2, 4, 4, 2], [3, 3.5, 3.5], [2.5, 2.5, 3]], [[1, 1.5, 1.5]]]]}\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"771b0d00-1823-44b1-8ed9-a8f167ce7a2f\":{\"roots\":{\"references\":[{\"attributes\":{\"min_border\":0,\"plot_height\":300,\"plot_width\":300,\"renderers\":[{\"id\":\"5569\",\"type\":\"GlyphRenderer\"}],\"title\":null,\"toolbar\":{\"id\":\"5572\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"5764\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5765\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5768\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5766\",\"type\":\"LinearScale\"}},\"id\":\"5565\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"5764\",\"type\":\"DataRange1d\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5571\",\"type\":\"HoverTool\"}]},\"id\":\"5572\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null,\"data\":{\"name\":[\"ooga\",\"booga\",\"dooga\"],\"xs\":[[[[1,1,2,2]]],[[[1,1,3],[1.5,1.5,2]]],[[[2,2,4,4],[2.5,2.5,3],[3.5,3,3]],[[3.5,3.5,4]]]],\"ys\":[[[[4,3,3,4]]],[[[1,3,1],[1.5,2,1.5]]],[[[2,4,4,2],[3,3.5,3.5],[2.5,2.5,3]],[[1,1.5,1.5]]]]},\"selected\":{\"id\":\"5770\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"5769\",\"type\":\"UnionRenderers\"}},\"id\":\"5564\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"5569\",\"type\":\"GlyphRenderer\"}],\"tooltips\":[[\"name\",\"@name\"]]},\"id\":\"5571\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"5769\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"5770\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"5564\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5567\",\"type\":\"MultiPolygons\"},\"hover_glyph\":{\"id\":\"5568\",\"type\":\"MultiPolygons\"},\"muted_glyph\":null,\"view\":{\"id\":\"5570\",\"type\":\"CDSView\"}},\"id\":\"5569\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"5765\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"5766\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"5564\",\"type\":\"ColumnDataSource\"}},\"id\":\"5570\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"grey\"},\"line_width\":{\"value\":2},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"5567\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":2},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"5568\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"callback\":null},\"id\":\"5768\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"5565\"]},\"title\":\"Bokeh Application\",\"version\":\"1.3.4\"}};\n", + " var render_items = [{\"docid\":\"771b0d00-1823-44b1-8ed9-a8f167ce7a2f\",\"roots\":{\"5565\":\"c6a473c8-1b3f-4813-b7a2-abb545279d05\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " clearInterval(timer);\n", + " }\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", + " clearInterval(timer);\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "5565" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "from bokeh.io import curdoc, show\n", + "import bokeh.io\n", + "from bokeh.models import ColumnDataSource, Grid, LinearAxis, MultiPolygons, Plot, GlyphRenderer, HoverTool\n", + "bokeh.io.output_notebook()\n", + "xs_dict = [\n", + " [ {'exterior': [1, 1, 2, 2], 'holes': [ ]} ],\n", + " [ {'exterior': [1, 1, 3], 'holes': [ [1.5, 1.5, 2] ]} ],\n", + " [ {'exterior': [2, 2, 4, 4], 'holes': [ [2.5, 2.5, 3], [3.5, 3, 3] ]},\n", + " {'exterior': [3.5, 3.5, 4], 'holes': [ ]} ]\n", + "]\n", + "\n", + "ys_dict = [\n", + " [ {'exterior': [4, 3, 3, 4], 'holes': [ ]} ],\n", + " [ {'exterior': [1, 3, 1], 'holes': [ [1.5, 2, 1.5] ]} ],\n", + " [ {'exterior': [2, 4, 4, 2], 'holes': [ [3, 3.5, 3.5], [2.5, 2.5, 3] ]},\n", + " {'exterior': [1, 1.5, 1.5], 'holes': [ ]} ]\n", + "]\n", + "ys_dict2 = [\n", + " [ {'exterior': [4, 3, 3, 4], 'holes': [ ]} ],\n", + " [ {'exterior': [1, 3, 1], 'holes': [ [1.5, 2, 1.5] ]} ],\n", + " [ {'exterior': [2, 9, 4, 2], 'holes': [ [3, 3.5, 3.5], [2.5, 2.5, 3] ]},\n", + " {'exterior': [1, 1.5, 1.5], 'holes': [ ]} ]\n", + "]\n", + "xs = [[[p['exterior'], *p['holes']] for p in mp] for mp in xs_dict]\n", + "ys = [[[p['exterior'], *p['holes']] for p in mp] for mp in ys_dict]\n", + "print(dict(xs=xs, ys=ys))\n", + "source = ColumnDataSource(dict(xs=xs, ys=ys,name=[\"ooga\",\"booga\",\"dooga\"]))\n", + "\n", + "plot = Plot(\n", + " title=None, plot_width=300, plot_height=300,\n", + " min_border=0, toolbar_location=None)\n", + "\n", + "glyph = MultiPolygons(xs=\"xs\", ys=\"ys\", line_width=2,fill_color=\"grey\")\n", + "selglyph = MultiPolygons(xs=\"xs\", ys=\"ys\", line_width=2,fill_color=\"blue\")\n", + "g1 = plot.add_glyph(source, glyph)\n", + "g1.hover_glyph = selglyph\n", + "\n", + "hover1 = HoverTool(tooltips=[(\"name\",\"@name\")],renderers=[g1])\n", + "\n", + "plot.add_tools(hover1)\n", + "#help(plot)\n", + "xaxis = LinearAxis()\n", + "#plot.add_layout(xaxis, 'below')\n", + "\n", + "yaxis = LinearAxis()\n", + "#plot.add_layout(yaxis, 'left')\n", + "\n", + "#plot.add_layout(Grid(dimension=0, ticker=xaxis.ticker))\n", + "#plot.add_layout(Grid(dimension=1, ticker=yaxis.ticker))\n", + "\n", + "show(plot)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.7.4 64-bit ('base': conda)", + "language": "python", + "name": "python37464bitbaseconda4bf18afa65be4bc0b1df4a316a30f53b" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.4-final" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file From 0a0a20c1143a48257362d297fc4f0d55aa2c36f6 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Thu, 7 May 2020 16:10:14 -0700 Subject: [PATCH 35/43] plasmids are a constant height --- dnaplotlib/dnaplotlib.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index bf140c7..549f473 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2969,7 +2969,7 @@ def std_reg_renderers (self): 'Activation' :induce, 'Connection' :connect} - def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True,circular=False): + def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True,circular=False,circle_vheight=12): """ Render the parts on the DNA and regulation. Parameters @@ -3225,14 +3225,16 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p if(circular): circ_start = first_start-self.backbone_pad_left circ_end = prev_end+self.backbone_pad_right - vheight = 5 #this is the height of the oval. + circle_vheight #this is the height of the oval. curves = (circ_end-circ_start)*.1 #curves are 5% of the length, lengthwise - plasmid = FancyBboxPatch((circ_start-curves, -curves*2), \ - (circ_end-circ_start)+curves*2, curves*2,\ + plasmid = FancyBboxPatch((circ_start-circle_vheight/2, -circle_vheight), \ + (circ_end-circ_start)+circle_vheight, circle_vheight,\ fc="none",ec=self.linecolor, linewidth=self.linewidth, \ - boxstyle='round,pad=0,rounding_size={}'.format(curves), \ + boxstyle='round,pad=0,rounding_size={}'.format(circle_vheight/2), \ joinstyle="round", capstyle='round',mutation_aspect=1, zorder=5) ax.add_patch(plasmid) + first_start = first_start-circle_vheight/2 + prev_end = prev_end+circle_vheight/2 else: l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], linewidth=self.linewidth, color=self.linecolor, zorder=5) From c688bb477fbfb42d6f5276274057a0d44f1e870b Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Fri, 8 May 2020 11:55:59 -0700 Subject: [PATCH 36/43] edge color --- dnaplotlib/dnaplotlib.py | 36 ++++++++++++++++--------- gallery/notebooks/interactiveplot.ipynb | 12 +++++---- 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 549f473..a686898 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -217,8 +217,8 @@ def sbol_cds (ax, type, num, start, end, prev_end, scale, linewidth, opts): linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - if 'edge_color' in list(opts.keys()): - edgecolor = opts['edge_color'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] # Check direction add start padding dir_fac = 1.0 @@ -448,8 +448,8 @@ def sbol_rbs (ax, type, num, start, end, prev_end, scale, linewidth, opts): linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] - if 'edge_color' in list(opts.keys()): - edgecolor = opts['edge_color'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] # Check direction add start padding dir_fac = 1.0 final_end = end @@ -499,8 +499,8 @@ def stick_figure (ax, type, num, start, end, prev_end, scale, linewidth, opts): x_extent = 5.0 y_extent = 10.0 linestyle = '-' - linetype = ""; - shapetype = ""; + linetype = "" + shapetype = "" if(type == "Ribozyme"): linetype = 'dash' headgroup = 'O' @@ -1648,6 +1648,7 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op x_extent = 12.0 y_extent = 12.0 linestyle = '-' + edgecolor = (0,0,0) # Update default parameters if provided if opts != None: if 'start_pad' in list(opts.keys()): @@ -1668,6 +1669,8 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op color = opts['color'] if 'color2' in list(opts.keys()): color2 = opts['color2'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] # Check direction add start padding final_end = end final_start = prev_end @@ -1690,7 +1693,7 @@ def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, op p1 = Polygon([(start, y_lower), (start, y_upper), (end,0)], - edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, + edgecolor=edgecolor, facecolor=color, linewidth=linewidth, zorder=11, path_effects=[Stroke(joinstyle="miter")]) ax.add_patch(p1) # Add a label if needed @@ -1715,6 +1718,7 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): x_extent = 30.0 y_extent = 6.0 linestyle = '-' + edgecolor = (0,0,0) # Update default parameters if provided if opts != None: if 'start_pad' in list(opts.keys()): @@ -1733,6 +1737,8 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): scale = opts['scale'] if 'color' in list(opts.keys()): color = opts['color'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] # Check direction add start padding final_end = end @@ -1782,7 +1788,7 @@ def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): [wave_end,0] ], codes=[1, 2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79]) - wavy_rna = PathPatch(wavy_rna_path, linewidth=linewidth, edgecolor=(0,0,0), + wavy_rna = PathPatch(wavy_rna_path, linewidth=linewidth, edgecolor=edgecolor, facecolor=color, zorder=12, linestyle='-') ax.add_patch(wavy_rna) @@ -1810,6 +1816,7 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op x_extent = 12.0 y_extent = 12.0 linestyle = '-' + edgecolor = (0,0,0) # Update default parameters if provided if opts != None: if 'start_pad' in list(opts.keys()): @@ -1836,6 +1843,8 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op g2 = float(color[1]) / 2 b2 = float(color[2]) / 2 color2 = (r2,g2,b2) + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] # Check direction add start padding final_end = end final_start = prev_end @@ -1858,7 +1867,7 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op p1 = Polygon([(start, y_lower), (start, y_upper), (end,0)], - edgecolor=(0,0,0), facecolor=color, linewidth=linewidth, zorder=11, + edgecolor=edgecolor, facecolor=color, linewidth=linewidth, zorder=11, path_effects=[Stroke(joinstyle="miter")]) midpoint = (end + start) / 2 hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) @@ -1869,7 +1878,7 @@ def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, op p2 = Polygon([(midpoint, -1*f), (midpoint, f), (end,0)], - edgecolor=(0,0,0), facecolor=color2, linewidth=linewidth, zorder=12, + edgecolor=edgecolor, facecolor=color2, linewidth=linewidth, zorder=12, path_effects=[Stroke(joinstyle="miter")]) ax.add_patch(p1) ax.add_patch(p2) @@ -2220,6 +2229,7 @@ def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts) x_extent = 8.0 y_extent = 4.0 linestyle = '-' + edgecolor = (0,0,0) # Reset defaults if provided if opts != None: if 'zorder_add' in list(opts.keys()): @@ -2240,6 +2250,8 @@ def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts) linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] # Check direction add start padding final_end = end @@ -2253,7 +2265,7 @@ def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts) (start, -y_extent), (start+x_extent, -y_extent), (start+x_extent, y_extent)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + edgecolor=edgecolor, facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) bits = 5.0 @@ -2266,7 +2278,7 @@ def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts) (x_inset_start, -y_extent+gap_size), (x_inset_end, -y_extent+gap_size), (x_inset_end, y_extent-gap_size)], - edgecolor=(0,0,0), facecolor=(1,1,1), linewidth=linewidth, zorder=12+zorder_add, + edgecolor=edgecolor, facecolor=(1,1,1), linewidth=linewidth, zorder=12+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) ax.add_patch(p1) diff --git a/gallery/notebooks/interactiveplot.ipynb b/gallery/notebooks/interactiveplot.ipynb index 9260295..a8e4d3f 100644 --- a/gallery/notebooks/interactiveplot.ipynb +++ b/gallery/notebooks/interactiveplot.ipynb @@ -2,15 +2,15 @@ "cells": [ { "cell_type": "code", - "execution_count": 11, + "execution_count": 1, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAMHCAYAAAD1oPL6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3hc1bX38e+S3HvHBvcKmM6Y3gKhQyB0QuikQUi7XNJzfEhC6g3JSwghNNNNCwEMBAgtEJrHBhwD7hVwkYtcZdmS1vvHPiOPZMmWZUljjX6f59GD5rRZMiPNrLPXXtvcHRERERERkXxQkOsAREREREREGooSHBERERERyRtKcEREREREJG8owRERERERkbyhBEdERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhIcERERERHJG0pwREREREQkbyjBERERERGRvKEER0RERERE8oYSHBERERERyRtKcEREREREJG8owRERERERkbyhBEdERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhKcOojjVN84To3JdRwiIiIiIrJ1rXIdQDPRH3g3jlMTgb8AD0dRuiTHMYmIiIiISDUawdk+Y4C7gU/iOPW7OE4NzXVAIiIiIiKymbl7rmPY6cVxKgVMrGGXA/8EbgH+GUXp8iYNTHZqcZzqABwP7AqsAf4VRenFuY1KROorjlNN/oYZRWlr6ucUEWnuVKK2Yww4OfmaG8epvwJ3RVF6WW7DklyK41QB8FPgOqBT1q6KOE49AVwVReninAQnIiIikudUotZwhgC/IZSv3RPHqYPjOKU7by3TncBYqiY3EH7fzgbeiuNU56YOSkRERKQlaBElarkoK0hMIjQlGB9F6fU5ikGaUBynDgbezjzu3n03Bg8ew/Ll81iw4P3sQ38cRekbmzxAEWlS2e8/KjcTEWkaGsFpXAcS7uZPjuPUiFwHI40rjlNHkJXcDBt2KN/85uN84Qs/4fLL7+C4476ZffiXmzxAERERkRZAc3Aa11uEBgSPRVG6NNfBSN3Fcao3cC5wENAFKANWAM8RGkqUJscZoZHAj4Gjsq8xbNjBFBRs/hUbMGCf7N0dGjF8ERERkRarxSU49SkR2EoXtZqsBx4A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UfRhTgMTkZ1OLuZlKikSqbtk7u95hFbyXwOuA25KmlFVP7YXoQvfMYT5xRVAV+AYd38tU6Lm7lojqQaag7MTShZcfAp4KhXHI4BvENqAdstpYNLk0lE0mZDUiIiISDOWdFodZ2bXEtY2mkeYe1OTX5EsIZHME8yM4GTfVFDzkFpoDs5OLh1FM9NR9D1C142rgPdyHFKz5e7WnEZvREREpPkys+5m9isz28vMWptZKzM7m1Cq9jpwC/B1Mzs52dfFzA5PTu9CaDu/0sw6Ab/JzU/RPGkEp5lIR9F64M5UHN9F6BR2ZY5DEhGRnYjKxYxQsYsAACAASURBVER2OhuBPoTmRv2AMsKozbXu/iiAmV0F3EhoKLKO0PDoP4S5tncTGocsAX5GWPZC6kBzcEREREREJG+oRE1ERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhIcERERERHJG0pwREREREQkbyjBERERERGRvKEER0RERERE8oYSHBERERERyRtKcEREREREJG8owRERERERkbyhBEdERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhIcERERERHJG0pwREREREQkbyjBERERERGRvKEER0RERERE8oYSHBERERERyRtKcEREREREJG8owRERERERkbyhBEdERERERPKGEhwREREREckbSnBERERERCRvKMEREREREZG8oQRHRERERETyhhIcERERERHJG0pwREREREQkbyjBERERERGRvKEER0RERERE8karXAcgItJcxHHKgAuBy4DjqNtNoiLgUeBPUZSe0XjRiUguJH8X3gQOydr8B+CHUZTeuAPXvQi4DeiYbFoNjIqi9OL6XlOkpTB3z3UMIiI7vThO9QTuBM6o5yXWA9cCd0dRWn94RfJIHKcOA8YDA7I2vwOcH0Xp+dt5rQ7A/wOuzNpcSvj7cYf+fohsmxIcEZFtiOPUCOB5YEj29oED92evvU5kxIjD6dChG4WFrdm4cT3Ll89n6tQX+PDDF1m7dln1y/0FuDaK0hVNFL6INIHkJsg9wKlZm4uBy6Io/WQdr7E7YcR3r6zNM4Dzoij9QUPFKpLvlOCIiGxFHKe6AxOBYZltY8acxxFHXEqXLrts9dyKinLmz5/Ms8/+lmXL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PDlxIm9+9FFxciuBb+WjSH2yMmDBsmW89+mnjZLWxwsWNEo60vLmLVnSaOXi07W1vrKem714caOVizmff94o6Yg0NgU4rVQ+ihYlF7MXAiNJmhMuXrGCf44fzz/Hjy8lmenAyfkoernJMirNKh9Fc3JxPAy4HPhxYfn8pUt5YNw4Hhg3rpRkJgEn5qPorVq3lPXCkxMn8uTEiS2dDWllHnz9dR58/fWWzoa0Mre/+CK3v6iBMyXb1AenFctH0Zp8FF0CDAWuIAQstXFgDKE501AFN9mTj6JV+Sj6CZADrqO0uY3WAE8AZwA5BTciIiKSVVbXTsoiIiIiIiKtlWpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZ0b6lMyAiIiIi0tbFcc4Lz6Moby2Zl6rk4rgyf/koanX5S1MNjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhnqgyPSQuI4NwC4Ejge6BVF+bktnKV15OJ4R+BvwE5Ax3wUrW7hLImIiIjUSgGOSDOK41xX4BjgDOArqVVz4jjXOYryK1okY4lcHG8MnAScBXwpter1XBx/KR9Fa1omZyIiIiKlUYCTEse5bkAO2AHYEegFdABWA58AE4F3gHxLXIgmF5+5JG9DgI0In+FK4KMkfxOB8fkoKm/u/GVVHOd6sPa87wBsQjjvq4CZhDIxEXg9ivJV1nLE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IiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMqN9S2egJcRxzkvZLory1hj71VUujks6Tj6K1jlOffcTEREREckK1eCIiIiIiEhmKMAREREREZHMaJNN1GpqQtZczdBqUlMTMjVDExERERGpnmpwREREREQkMxTgiIiIiIhIZijAEWlkcZw7LI5zp7Z0PkRERETaojbZB0ekCbQD9nz//ZdOMSs73b2iSxzndgQujKJ8RUtnTuqksp9bHOcqF0ZRvrmOX1v/ucr85eK4cmE+ipoqP2ltuW9fSf0fG6qaMlfKeW/y/NVQ3tpyuRCRVkg1OCL1NwA4BxgFzAVeyudHnede0SVZ/zPgH3Gc695SGRQRERFpaxTgiJSuC3AocC0wCZgO3AwcC/QEOOaYS9h22/3S+xwJvBTHuS2bN6siIiIibZOaqInUbGfgf5LH/sAGNW28wQbdOPHEq3jqqT8xduxd6TTGxXHu6CjKv9SkuRURkWZR6rQSTammKStKnVaiKbXFKStULmrXHOVCAY60eXGc+wPQHaBDh04bbLRRv77duvXq16VLz77t23foUsvu1erevReffz6n8LIX8Ewc586NovydDc+1iIiIiFRFAY60eWZlJ7tXbAKwevUKZs/+kNmzP2yKQ3UE7kgGH/hFFOXXNMVBRERERNoyBTjS5rlXNPcoZ/8HDInj3MlRlP+8mY8tIiKNrBlHWVxnpL1SNdMoi8C6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\n" + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAMHCAYAAAD1oPL6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3yV9fn/8deVAIFA2KDICENAQcVxg7tardbdVq2ttW67tHZaO2x7e9u6+u38WbXWhbPuqqh1780NTpRNANlDRhgh4/P743Of5CScQAhJTjh5Px+PPMy517mCyTnnuj/X5/qYcw4REREREZFckJftAERERERERJqKEhwREREREckZSnBERERERCRnKMEREREREZGcoQRHRERERERyhhIcERERERHJGUpwREREREQkZyjBERERERGRnKEER0REREREcoYSHBERERERyRlKcEREREREJGcowRERERERkZyhBEdERERERHKGEhwREREREckZSnBERERERCRnKMEREREREZGcoQRHRERERERyhhIcERERERHJGUpwREREREQkZyjBERERERGRnKEER0REREREcoYSnAaIomDnKArGZjsOERERERHZsnbZDmAHMQB4N4qCicANwP1hGG/IckwiIiIiIlKHRnC2zVjgduCzKAr+L4qCodkOSEREREREaphzLtsxtHpRFATAxAy7HPA0cD3wdBjGlS0amLRqURQUAkcBuwBrgefDMF6c3ahEpLGiKGjxN8wwjK2ln1NEZEenErXtY8CxydecKAr+BdwWhvHy7IYl2RRFQR7wO+ASoEvarqooCv4LXBCG8aqsBCciIiKS41Si1nSGANfiy9fuiKJg/ygKdOetbboVuJzayQ34v7dTgLeiKChq6aBERERE2oI2UaKWjbKCxCR8U4L7wjBen6UYpAVFUbA/8HbqcY8e/Rk8eCwrVpQwb9776YdeFobxVS0eoIi0qPT3H5WbiYi0DI3gNK/98HfzJ0dRMDzbwUjziqLgENKSm2HDDuSHP3yYk076LeeeewtHHvnD9MO/3eIBioiIiLQBmoPTvN7CNyB4KAzjsmwHIw0XRUEf4OvAOKArUAGsBP6HbyhRlhxn+EYClwFfSL/GsGH7k5dX8yc2cOBe6bsLmzF8ERERkTarzSU4jSkR2EIXtUzWA/cA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YuCyesuoiIiISBPTKGrN06+AXYADAG5/5RXemTqV0/fZhz222qrSEdbmLlnCqA8+4LaXX+arr79OrzovH0X/bdBcS0M7DxgEfKPEnetHjeLtyZMZvtde7LrllrSuZFbyWYsW8fR773HHq6/y9apVhcUOnJIE1SIiIiKZoACnGcpH0apcHB8DjAQOBhg3fTrjpk9no3btOHDgQPbddlu6dOhAm1atWL5yJdPmzeP5Dz/knalTy/bbWQ38MB9FdzfBW5F6lI+i5bk4/iahH9UeEGadf+OTT9hkww05aPvt2XvrrenUrh1tWrVi2cqVfDp7Ns9NmMC7n31WNrkVwHfzUaQ+WRmwYNkyPp41q17S+nzBgnpJR5revCVL6q1czFpT6yvrudmLF9dbuZjz1Vf1ko5IfVOA00zlo2hRcjF7CTCCpDnh4q+/5rFx43hs3LjqJDMNODkfRW80WEalUeWjaE4ujocAVwE/LSyfv3QpD48dy8Njx1YnmYnAsHwUvVfllrJeeG7CBJ6bMKGpsyHNzCPvvMMj77zT1NmQZubO117jztc0cKZkm/rgNGP5KFqdj6IrgMHA1YSApSoOjCY0Zxqs4CZ78lG0Mh9FPwNywA1Ub26j1cCzwBlATsGNiIiIZJXVtJOyiIiIiIhIc6UaHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZrRu6gyI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1IgU0uxuZhtVsv9dwHlmtruFyWbPIAyaUK1aEzM72sy+a8nEsUlzsx8RzsekCnZb6726+2wqOXfVyUdjUYAjIiKSMe7+obvvkHQO7u7ux5fpBC8tUAsvFzcQaq9OA84BPiLU0nxFCPZOINRYFBGG356arLsRON3dpybp/BY4xcwWmNnTVN9NwO8IzeUWEWpMCgHOi4SanSkWhhXfv+zOSRO5mDCS3jzgAuDwVL6qMi95j+OS/mcfEIYOP6SCPkMQJqi9PHmvtyTLKjt3zYb64IiIiIiISGaoBkdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZrZs6A00hjnNene2iKG/1sV9N5eK4WsfJR9Fax6ntfiIiIiIiWaEaHBERERERyQwFOCIiIiIikhktsolaZU3IGqsZWmUqa0KmZmgiIiIiIhVTDY6IiIiIiGSGAhwREREREckMBTgi9SyOc4fHce7Ups6HiIiISEvUIvvgiDSAVsAe//vf66eYFZ3uXtIhjnODgEuiKF/S1JmTGint5xbHudKFUZRvrONX1X+uNH+5OC5dmI+ihspPWkvu21et/o91VUGZq855b/D8VVLeWnK5EJFm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\n" }, "metadata": { "needs_background": "light" @@ -30,7 +30,9 @@ "\n", "%matplotlib inline\n", "dnaline = 3\n", - "dr = dpl.DNARenderer(scale = 5,linewidth=dnaline)\n", + "edgecolor = (1,.2,.2)\n", + "\n", + "dr = dpl.DNARenderer(scale = 5,linewidth=dnaline,linecolor=edgecolor)\n", "part_renderers = dr.SBOL_part_renderers()\n", "parts = list(part_renderers.keys())+[['EmptySpace','circular test']]+['EmptySpace']*5\n", "dontrender = ['StemTop']\n", @@ -56,7 +58,7 @@ " #ax = plt.gca()\n", " design = [{'type':part, 'name':'test', 'fwd':True,\\\n", " 'opts':{'label':partlabel,'label_size':13,'label_y_offset':-8,'color':(.5,.5,.2)}},\n", - " {'type':part, 'name':'testr', 'fwd':False,'opts':{'color':(.2,.5,.5)}}]\n", + " {'type':part, 'name':'testr', 'fwd':False,'opts':{'color':(.2,.5,.5),'edgecolor':edgecolor}}]\n", " start,end = dr.renderDNA(ax,design,part_renderers,circular=circMake)\n", " ax.axis('off')\n", " xdist = end-start\n", From df214183fdf75d352f28061b32fdb7ab93061536 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Thu, 28 May 2020 10:48:16 -0700 Subject: [PATCH 37/43] add vscode to gitignore --- .gitignore | 1 + .vscode/settings.json | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index fd93017..3fe8076 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ docs/_build/ # PyBuilder target/ +.vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 079583a..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "python.pythonPath": "C:\\Users\\andrey\\Anaconda3\\python.exe" -} \ No newline at end of file From e75e10fe1b2a136be168cd106cbc865f63266bf2 Mon Sep 17 00:00:00 2001 From: dr3y Date: Thu, 25 Jun 2020 12:09:12 -0700 Subject: [PATCH 38/43] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 95c0073..7b4b688 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ The DNAplotlib library is contained within the `dnaplotlib.py` file in the `lib` We provide an extensive gallery of use cases for DNAplotlib in the `gallery` directory. Click on a thumbnail below to go directly to the example code: ### Genetic Designs and Annotation - + From 55ea7b07081db9d0644f5a30861fd8b82edc71f1 Mon Sep 17 00:00:00 2001 From: dr3y Date: Thu, 25 Jun 2020 12:11:44 -0700 Subject: [PATCH 39/43] gallery view front and center --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b4b688..47c94d7 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,10 @@ The DNAplotlib library is contained within the `dnaplotlib.py` file in the `lib` ## Getting Started We provide an extensive gallery of use cases for DNAplotlib in the `gallery` directory. Click on a thumbnail below to go directly to the example code: +### Gallery of all part glyphs + + ### Genetic Designs and Annotation - From b3233f95b99d4726ce87a73a48703595bb62b970 Mon Sep 17 00:00:00 2001 From: dr3y Date: Wed, 29 Jul 2020 01:12:52 -0700 Subject: [PATCH 40/43] typo --- gallery/all_parts/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gallery/all_parts/README.md b/gallery/all_parts/README.md index bcb9f1b..6c721a8 100644 --- a/gallery/all_parts/README.md +++ b/gallery/all_parts/README.md @@ -2,5 +2,5 @@ -Illustration of all SBOL Visual parts in forward and reverse direction. Each part can have its apperance customised to convay further information. +Illustration of all SBOL Visual parts in forward and reverse direction. Each part can have its apperance customised to convey further information. From 60214896f7c9e527d2b941d3919a0762e35cd3c2 Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Tue, 5 Jan 2021 14:41:11 -0800 Subject: [PATCH 41/43] Working on making a "bound protein" representation --- dnaplotlib/dnaplotlib.py | 54 ++- gallery/notebooks/interactiveplot.ipynb | 523 +++++------------------- 2 files changed, 152 insertions(+), 425 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index a686898..0cd3eda 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -117,6 +117,7 @@ def sbol_promoter (ax, type, num, start, end, prev_end, scale, linewidth, opts): x_extent = 10 arrowhead_height = 2 arrowhead_length = 4 + y_offset = 0 # Reset defaults if provided if opts != None: if 'zorder_add' in list(opts.keys()): @@ -139,6 +140,9 @@ def sbol_promoter (ax, type, num, start, end, prev_end, scale, linewidth, opts): linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + print(y_offset) # Check direction add start padding dir_fac = 1.0 final_end = end @@ -153,18 +157,19 @@ def sbol_promoter (ax, type, num, start, end, prev_end, scale, linewidth, opts): end = start+x_extent final_end = end+end_pad # Draw the promoter symbol - l1 = Line2D([start,start],[0,dir_fac*y_extent], linewidth=linewidth, + l1 = Line2D([start,start],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=9+zorder_add) l2 = Line2D([start,start+dir_fac*x_extent-dir_fac*(arrowhead_length*0.5)], - [dir_fac*y_extent,dir_fac*y_extent], linewidth=linewidth, + [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=10+zorder_add) ax.add_line(l1) ax.add_line(l2) p1 = Polygon([(start+dir_fac*x_extent-dir_fac*arrowhead_length, - dir_fac*y_extent+(arrowhead_height)), - (start+dir_fac*x_extent, dir_fac*y_extent), + dir_fac*y_extent+(arrowhead_height)+y_offset), + (start+dir_fac*x_extent, + dir_fac*y_extent+y_offset), (start+dir_fac*x_extent-dir_fac*arrowhead_length, - dir_fac*y_extent-(arrowhead_height))], + dir_fac*y_extent+y_offset-(arrowhead_height))], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=1+zorder_add, path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 ax.add_patch(p1) @@ -2028,6 +2033,8 @@ def sbol_origin (ax, type, num, start, end, prev_end, scale, linewidth, opts): x_extent = 10.0 y_extent = 10.0 linestyle = '-' + y_offset = 0 + face_color = (1,1,1) # Reset defaults if provided if opts != None: if 'zorder_add' in list(opts.keys()): @@ -2048,6 +2055,10 @@ def sbol_origin (ax, type, num, start, end, prev_end, scale, linewidth, opts): linewidth = opts['linewidth'] if 'scale' in list(opts.keys()): scale = opts['scale'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'face_color' in list(opts.keys()): + face_color = tuple(opts['face_color']) # Check direction add start padding final_end = end final_start = prev_end @@ -2055,10 +2066,10 @@ def sbol_origin (ax, type, num, start, end, prev_end, scale, linewidth, opts): start = prev_end+start_pad end = start+x_extent final_end = end+end_pad - ori_center = (start+((end-start)/2.0),0) + ori_center = (start+((end-start)/2.0),y_offset) c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) + facecolor=face_color, zorder=12+zorder_add) ax.add_patch(c1) @@ -2382,6 +2393,19 @@ def connect (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ind """ regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) +def bound(ax,type,num,from_part,to_part, scale, linewidth, arc_height_index, opts): + """renders a circle above a part to indicate that it is bound""" + color = (0.0,0.0,0.0) + circle_offset = 5 + part_midpt = ((from_part['start'] + from_part['end']) / 2) + start = part_midpt- circle_offset + end = part_midpt + circle_offset + if('y_offset' not in opts): + opts['y_offset']=3 + opts['y_offset'] = opts['y_offset']*arc_height_index + opts['x_extent']=circle_offset*2 + opts['start_pad']=0 + sbol_origin(ax,"Origin",0,start,end,start, 1.0,linewidth,opts) def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): """ General function for drawing regulation arcs. @@ -2894,7 +2918,8 @@ class DNARenderer: # Standard regulatory types STD_REG_TYPES = ['Repression', 'Activation', - 'Connection'] + 'Connection', + 'Binding'] def __init__(self, scale=1.0, linewidth=1.0, linecolor=(0,0,0), backbone_pad_left=0.0, backbone_pad_right=0.0): @@ -2979,7 +3004,8 @@ def std_reg_renderers (self): return { 'Repression' :repress, 'Activation' :induce, - 'Connection' :connect} + 'Connection' :connect, + 'Binding':bound} def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True,circular=False,circle_vheight=12): """ Render the parts on the DNA and regulation. @@ -3120,7 +3146,10 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p ############################################################################## arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 - arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 + if(reg['from_part']==reg['to_part']): + arcend = arcstart+.1 + else: + arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 arcrange = [arcstart,arcend] reg['arclength'] = math.fabs(arcstart-arcend) reg['arc_height_index'] = 1 @@ -3152,7 +3181,10 @@ def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, p # arc height algorithm: greedy from left-to-right on DNA design arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 - arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 + if(reg['from_part']==reg['to_part']): + arcend = arcstart+.1 + else: + arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 arcmin = min(arcstart,arcend) arcmax = max(arcstart,arcend) diff --git a/gallery/notebooks/interactiveplot.ipynb b/gallery/notebooks/interactiveplot.ipynb index a8e4d3f..5242881 100644 --- a/gallery/notebooks/interactiveplot.ipynb +++ b/gallery/notebooks/interactiveplot.ipynb @@ -9,8 +9,8 @@ "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzgAAAMHCAYAAAD1oPL6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3yV9fn/8deVAIFA2KDICENAQcVxg7tardbdVq2ttW67tHZaO2x7e9u6+u38WbXWhbPuqqh1780NTpRNANlDRhgh4/P743Of5CScQAhJTjh5Px+PPMy517mCyTnnuj/X5/qYcw4REREREZFckJftAERERERERJqKEhwREREREckZSnBERERERCRnKMEREREREZGcoQRHRERERERyhhIcERERERHJGUpwREREREQkZyjBERERERGRnKEER0REREREcoYSHBERERERyRlKcEREREREJGcowRERERERkZyhBEdERERERHKGEhwREREREckZSnBERERERCRnKMEREREREZGcoQRHRERERERyhhIcERERERHJGUpwREREREQkZyjBERERERGRnKEER0REREREcoYSnAaIomDnKArGZjsOERERERHZsnbZDmAHMQB4N4qCicANwP1hGG/IckwiIiIiIlKHRnC2zVjgduCzKAr+L4qCodkOSEREREREaphzLtsxtHpRFATAxAy7HPA0cD3wdBjGlS0amLRqURQUAkcBuwBrgefDMF6c3ahEpLGiKGjxN8wwjK2ln1NEZEenErXtY8CxydecKAr+BdwWhvHy7IYl2RRFQR7wO+ASoEvarqooCv4LXBCG8aqsBCciIiKS41Si1nSGANfiy9fuiKJg/ygKdOetbboVuJzayQ34v7dTgLeiKChq6aBERERE2oI2UaKWjbKCxCR8U4L7wjBen6UYpAVFUbA/8HbqcY8e/Rk8eCwrVpQwb9776YdeFobxVS0eoIi0qPT3H5WbiYi0DI3gNK/98HfzJ0dRMDzbwUjziqLgENKSm2HDDuSHP3yYk076LeeeewtHHvnD9MO/3eIBioiIiLQBmoPTvN7CNyB4KAzjsmwHIw0XRUEf4OvAOKArUAGsBP6HbyhRlhxn+EYClwFfSL/GsGH7k5dX8yc2cOBe6bsLmzF8ERERkTarzSU4jSkR2EIXtUzWA/cA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YuCyesuoiIiISBPTKGrN06+AXYADAG5/5RXemTqV0/fZhz222qrSEdbmLlnCqA8+4LaXX+arr79OrzovH0X/bdBcS0M7DxgEfKPEnetHjeLtyZMZvtde7LrllrSuZFbyWYsW8fR773HHq6/y9apVhcUOnJIE1SIiIiKZoACnGcpH0apcHB8DjAQOBhg3fTrjpk9no3btOHDgQPbddlu6dOhAm1atWL5yJdPmzeP5Dz/knalTy/bbWQ38MB9FdzfBW5F6lI+i5bk4/iahH9UeEGadf+OTT9hkww05aPvt2XvrrenUrh1tWrVi2cqVfDp7Ns9NmMC7n31WNrkVwHfzUaQ+WRmwYNkyPp41q17S+nzBgnpJR5revCVL6q1czFpT6yvrudmLF9dbuZjz1Vf1ko5IfVOA00zlo2hRcjF7CTCCpDnh4q+/5rFx43hs3LjqJDMNODkfRW80WEalUeWjaE4ujocAVwE/LSyfv3QpD48dy8Njx1YnmYnAsHwUvVfllrJeeG7CBJ6bMKGpsyHNzCPvvMMj77zT1NmQZubO117jztc0cKZkm/rgNGP5KFqdj6IrgMHA1YSApSoOjCY0Zxqs4CZ78lG0Mh9FPwNywA1Ub26j1cCzwBlATsGNiIiIZJXVtJOyiIiIiIhIc6UaHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZrRu6gyI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1IgU0uxuZhtVsv9dwHlmtruFyWbPIAyaUK1aEzM72sy+a8nEsUlzsx8RzsekCnZb6726+2wqOXfVyUdjUYAjIiKSMe7+obvvkHQO7u7ux5fpBC8tUAsvFzcQaq9OA84BPiLU0nxFCPZOINRYFBGG356arLsRON3dpybp/BY4xcwWmNnTVN9NwO8IzeUWEWpMCgHOi4SanSkWhhXfv+zOSRO5mDCS3jzgAuDwVL6qMi95j+OS/mcfEIYOP6SCPkMQJqi9PHmvtyTLKjt3zYb64IiIiIiISGaoBkdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZCnBERERERCQzFOCIiIiIiEhmKMAREREREZHMUIAjIiIiIiKZoQBHREREREQyQwGOiIiIiIhkhgIcERERERHJDAU4IiIiIiKSGQpwREREREQkMxTgiIiIiIhIZijAERERERGRzFCAIyIiIiIimaEAR0REREREMkMBjoiIiIiIZIYCHBERERERyQwFOCIiIiIikhkKcEREREREJDMU4IiIiIiISGYowBERERERkcxQgCMiIiIiIpmhAEdERERERDJDAY6IiIiIiGSGAhwREREREckMBTgiIiIiIpIZrZs6A00hjnNene2iKG/1sV9N5eK4WsfJR9Fax6ntfiIiIiIiWaEaHBERERERyQwFOCIiIiIikhktsolaZU3IGqsZWmUqa0KmZmgiIiIiIhVTDY6IiIiIiGSGAhwREREREckMBTgi9SyOc4fHce7Ups6HiIiISEvUIvvgiDSAVsAe//vf66eYFZ3uXtIhjnODgEuiKF/S1JmTGint5xbHudKFUZRvrONX1X+uNH+5OC5dmI+ihspPWkvu21et/o91VUGZq855b/D8VVLeWnK5EJFm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\n" + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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+HCufeYZPpkxg6oWZnV3Pp4+nWuefpqz77uPhUuX5nZ9DRyajaKllZ4sJS0bRV8T6sUSgDmLFnH6nXdy88iRTJk9u8pz3Z3/TpvGpU88wUWPPcayNWO7viQs2LeqitNFRERE1imaJroEZaNoYiaO9wOeBnoCPJLN8kg2S9/u3RkyaBDbbbopHdu2xQlP9Md+8QUjP/yQz+bOLUxuOjA0G0UaY7GOy0bR+5k4PgB4Eui6yp1733qLe996iwEbbcSQbbbhO5tsQoc2bVjtzqJly3hn6lReHDeOr+bPL0xuEnBANopmNvobkaKbNm8eXWfMKEpa8xcvLko60vQq+HtQZ4uW6vlYWkyaNYt5RZo2fPHy5UVJR6TYFOCUqGwUvZOJ4+2Bu4Ef5rZPnTOH20aNqmkyzwInZaOo6kf8ss7IRtGopF7cB+yR2z5h5kwmzKxxrPIA8ItsFC1ogCJKE7j66aebughSgn736KNNXQQpQWcNH97URRBpcOqiVsKyUTQLOBA4mHBDW5NHLouA4cBBwEEKbtInG0WfA/sAhwOPAjV5tDofuAP4AXCsghsRERFJK6tqTIeIiIiIiMi6RC04IiIiIiKSGgpwREREREQkNRTgiIiIiIhIaijAERERERGR1FCAIyIiIiIiqaEAR0REREREUkMBjoiIiIiIpIYCHBERERERSQ0FOCIiIiIikhoKcEREREREJDUU4IiIiIiISGoowBERERERkdRQgCMiIiIiIqmhAEdERERERFJDAY6IiIiIiKSGAhwREREREUkNBTgiIiIiIpIaCnBERERERCQ1FOCIiIiIiEhqKMAREREREZHUUIAjIiIiIiKpoQBHRERERERSQwGOiIiIiIikhgIcERERERFJDQU4IiIiIiKSGgpwREREREQkNRTgiIiIiIhIaijAERERERGR1FCAIyIiIiIiqaEAR0REREREUkMBjoiIiIiIpIYCHBERERERSQ0FOCIiIiIikhoKcEREREREJDUU4IiIiIiISGoowBERERERkdRQgCMiIiIiIqmhAEdERERERFJDAY6IiIiIiKSGAhwREREREUkNBTgiIiIiIpIaCnBERERERCQ1FOCIiIiIiEhqKMAREREREZHUaNXUBRARERERae7iOOO5/0dR1pqyLBXJxHF5+bJRVHLly6cWHBERERERSQ0FOCIiIiIikhoKcEREREREJDU0BkekCcRxxoBdgTeA6VGU3aSJi7SWTBy3BP4HeAZ4NBtFP23iIomIiIjUiAIckUYUx5k+wPHAWUDPZPPGcZy5Crg4irJe6cmNIBPH3wFOBC4EcgMID8/E8eHZKHq06UomIiIiUjMKcPLEcaYX8F1gELAV0InQjW8JMBn4CPgvMK4pbkQzcbwlsH1Svv5A+2RXGfBpUr73s1E0qbHLlmZxnOkL7ABsDQwAOhJu/hcDE4FxwAfAhMrqRRxnBgB/AX7AmsAh30XArcAXtSlbJo4NGAhsl5RvC0K9cGAR8ElSvveyUfR5FensDtwIfK+SQx7JxHH7bBQtqU35RERERBpbsw9w4jizAXAMcBSwWw1PmxzHmQeBe6Mo+3GDFQ7IxPGmwHHA0cC2NTxnLPAgMDwbRdMasHipFceZnoTrfhSwYw1PG59XL6YU7JsN7EPFwQ3A8CjK1ji4ycTxFoSWoKMIwXhNznmbUC/uy0bRrILdC6k8uAG4UMGNiIiIrAvMvUl7xDSZOM60A84mPDnvUsdkVgN3ApdGUfarYpUNIBPHXQllOwdoU8dklgE3Addko2hBscqWZnGc6QhcAPyaNS1ktbUS+CtwRRRl5wBMmZK95J57fn55JccvAraMouzM6hLOxPGGQAScAbSsY/nKgGuBG7NRVAbYq598ctd5Dz54QiXHTwUGZqNoWR3zW+eYWaN/Mbp7zdcUyGQa/4s7W3prMoiIpInWwSmeZhngxHFmJ+AhYPP87WYt6dNnezbccEt69NicDh26Acby5YuZM2cqs2dP5rPP3mXZsrLCJBcD50RR9vZilC8TxwcBdwEb5G9v26oVO2y2GVv06MHmPXrQsV07ABYuWcKUOXOYNGsW7332GctXrSpMcg5wQjaKnitG+dIqjjP7APcBG+dvb9myNX36DC6vF+ut1xkwli1bxOzZU5k9exKfffYuK1YsLUxygVmL0/ba69Tj/vOf+39UQb3JuSyKsnF15cvE8TGEbmyd8re3b9OGHTbbjH49etC3e3c6tm2LAwsWL2bK7NlMnDWL9z//nJWrVxcmOa1b+/Yn/HDbbW94ZMyYHSrYn3NcNoruq658aaIApwIKcEREGpQCnOJpdl3U4jhzJHAPea0iG2zQh112OYatt96P9u27Vnn+ypXLmDjxLbLZx5g06a3c5vbAsDjObA+cG0XZb0UYNZGMp/g1cF3+9kG9enHU977HXlttRYe2batMY9GyZbz6ySc8OHo0H31V3qjUHXgmE8e/zkbRjXUpW9rFceYMQqtL+dTpG200gJ13PorvfGcf2rXrVPnJwPLlS5gw4TXGjHmYzz9/HwCzFl169drm4VGjhuUfugp4BNgT6AXMIox9qVQmjlsAVwG/zd++Y9++/HSnndijf3/atW5dZfkWLFnCv8eP54HRo5k0K/ROW691694bdu78rwdGj84/tAz4J2EGtfWB94AHqkxcREREpIQ0qwAnjjOHEMYgANC2bUf23fdMdtzxJ7RsWbNL0apVWwYO3JuBA/dm0qT/8MILNzJ79uTc7rMIYyzOqmMR/5e84Gajzp05d8gQ9tt6a8xqFih3bNuWodttxw+33ZYXx43jppEjmb1wIUm5bsjE8epsFN1Ux/KlUhxnTiG0jADQocP67Lff2Wy33QG0aFGzXmBt2qzHNtsMYdCg/fnkk1G88MIfWbFiKdOmfZB/2GTgmCjKjk66SP4SmBtF2YXVJL9WcLPp+utz/v/8D7v371/jetFlvfU45Lvf5eDBg3nq/fcZNmoUZcuW8cmMGfmHZYFjslH0adJF8jfAS9koqrRppzloyFbumn5+Vcpm659GZTKZhktbRESkgTSbLmpxnNkaGE2YAYvu3fty9NE3sf76veuV7ooVSxkxImbcuBfzN58aRdl/1CadTBzvB7xA0oLw3c0247ojjqBr+7oOAwnmlZVxwcMP8/7n5RNorQL2z0bRv+uVcErEcWYXYBRJi94mm2zNUUfdQKdOPeqU3urVK3n11Tt49dU7cP9WXHBUFGUfqk16mTg+gtCdEoA9Bwzgip/8hI7VtORVZsny5dz4wgs88e67hbtWArtno+jtOiWcMvld1HLfkUUJRqpIs85d1HIBTjGDkYrSVBc1EZEGpS5qxdOi+kPWfXGcaUHoZtMRoGvXXpx88u31Dm4AWrdux2GHXcXWW++Xv/lvcZzZvLJzCmXiuHNSvhYA2/XuzZ+PO67ewQ1Atw4duOW449imV6/cppbAg5k47ljvxNdxcZxpSwge2gBstFF/Tjzx1joHN/Pmfcmdd57OqFHDyoObghag2+I4072m6WXiuCdQHijvtuWW/OHII+sc3Iz/6iuOve22tYKbli3KvwJaAfdl4rjqvm4iIiIiJa5ZBDjAYYR1QmjVqi1HHvmHasfa1IZZC37840vZcMMtcpvaEGZAq6mzCONk2KBjR6474gjatipe78F2rVtz3RFHsEGHDrlNGwJnFi2DddepQB+Adu06c+SRf6BNm7oFlR988Cy33nrMWl3SNtvsu5x22j106VI+Z0Fn4LxaJHsh0AFCt7SrDjuMVi1q/yu72p2733iDk++4g8/nzi3fvv+gQfzjlFPyx3VtSZgaW0RERGSd1VzG4FyS+88uuxxDz54Dip5BmzbtOeCAC7j77p/nNp0Ux5nLq1vbJBPH7YHzc69/ue++dO9U9YD2utiwc2d+se++XPnUU7lNF2Ti+M/NdW2TOM60An6Xe73XXqfSrVvtW/SWLl3Is89ey3//+3z5thYtWrL33mew++4n0qJFS4YMOYdHHikfQvOrOM5cF0XZ+VWlm4njHsAvcq//d8gQOiWz5tXGzG++IXriCbJTp5Zva9+mDRcecAAHbr89ZsZJu+/OX/71r9zuizNxfHdzH3dTnbp07S1mF7dq1WVcjsbbAGt3EWkqxeiakt+VpD6yUVSf00u6C0tDKJH6U6vjM3G1k3jWSKl3WZLmJfUtOHGc2YxkgcxWrdqy667HNlhefftm6NNncO5lK8JMVNXZjTBbFRt36cLQ7bZroNLBgdtvz0adO+dedgd2brDMSt9goDdA+/ZdyWQOq3UCn3/+Prfeesxawc3662/KKafcwZ57nlLePe0739mX7t3Leyx2BPauQfI/ANoBDOjZkz0H1D4of/mjjzj6b39bK7gZ1KsX951xBgcNHlx+w33E976XHzz1A75T68xERERESkTqAxzCdLwA9OkzuKhd0yoyYMBeFeZdhfJjdu/fn1Yt67p2Y/Vat2zJbltuWWHezVD5e+/Xb2dat65568iqVSv517/+xl13nc6CBdPLtw8e/CPOOOM+evXaZq3jzVowYMBal7pW9eL7AwbU6un/4uXLuXzECH7zyCN8szSszdPCjFP33JM7Tj6ZTddff63jO7RtS6Zv39qWT0RERKQkNYcuauVNKptuun2DZ9anz1p57FCDU8rLt/2mmxa9PIW279Mnf5B5TcqXVnWuFyNH/pG3314zGVq7dp046KDfM2jQfpWe06fP9rz5ZvnL2tWLPn1qVb7fPvIIb06cWP66Z5cuXHHooeyw2WaVnrP9ppvy748/rk35RFKptt17SlU9u5ZJHa2L9Ud1RdIoXQFOBat777gtvNM3/L9Dh24NXoQOHdY8He9WxrbVrTj+vV124e0eYdaubmsmAWgw3fJmZttl1qxDKy1fmqaEreA9fmdHGL9J+H9t68Vuux3P2LHPsGzZIvr23ZFDDonp0qVnlee0b78mj17z2Ke6ejFgr72Y0KULQK1n0zv9+99n9KRJrHJnyDbb8LsDD6x2/E5+3Ttg2rTTyWROr/DAlNeLJlVq5SlUVfnSVC9KQTHqQkOuj9Qc1fQzac7XvebXKD3fF8X+3j64AdMuhoPzCljs8hW5XqQrwKlAy7yh0itWLG3w/PLzaFmDYdqtVq85aOmKFQ1RpLXk59F6dfMdR16fetGlS08OPvj3zJv3JbvtdnyNFgNtzHqxTe/e/Gr//enWvj1Dt9uuRt3b8vNo1YzrhYiIiKz7Uj8Gp9viNf+fPn18g+f31VcfVZh3ZXotXnPQ+K++aogireXj6WvGjPReXIMCplT+Z/PVV7WvF4MG7c8ee5xUo+AG1q57ta0X+Z9ZTR23667ls6TVRH7da871QkRERNZ96WrBqaB564U4swPwLsDUqe+wevVKWrRouLc9ZcqY8v9/uhG/IZu9rqrjH8lbqX7MlClr5gVuIG9PmVL+/wf69Tvs/LvvfryBs2x6FdSL1+LMEOAFCJ+ZuzfoNL759WLsppx6yO3Zf1RxOC/G8ZnAXwBGT57MUTs33IR3q90ZkzfT2t8GDtzr1AceeK3BMiwVVTWHmzV+14DaNM83RdeFNHUrKXXFudal171lXVbzz6T5Xvfm+B1R7PecP814KV7P/OnnS7F8edIV4FTsA2AusMGiRXP54IPnGTz4oAbJaP786Ywb92L+pn/X4LRXgdVAiw+mTeP9zz9ncC0HldfUu599xrgvv8y9XAWk/ya2cm8By4C2c+ZMYeLEN+jff48GyWjGjAlMmvSf/E2v1OC08oVpXp8wgSmzZ7N5Mlar2F75+GO+nDcv97IMGFPF4SJSiTguzlpCxRioXqy1TeqjOQ5eb6o6oM9bZG2p76IWRdlVwE2516NG3cayZYuKno+78/LLt7B69arcpteAar+hslE0Axiee/3nl15iZQOMgVi5ahW3vPRS/qa7s1E0u+gZrZQnCY4AACAASURBVCOiKLsQ+Hvu9csv/5WVK5cVPR/31bz00p/yNz0eRdnJ1Z2XjaKPgWchPA7800sv1WlxyeosXbGCW/+9Vhx+SzaKGn6wmoiIiEgDSX2Ak/gzMA9g/vyveOKJS3EvbhAxZszDfPjhC/mbLouibE3vSK8ktOIw9osv+POLL1ZzeO3dNHIkH0yblnu5Criq6Jmse64ltOIwc+YEnnnm2qIHEa+8Mqyw9ebyWpxe/kjutQkTuOv114tWLghB+ZVPPcXk2eVxbhlwQ1EzSSkzq/VPo8pkav8jIiKSEtYQT4VLURxnjgHuy73eYYcfc+CBv6Nly/r30hs79mlGjLgC9/LWm7uBk2sR4JCJ4wi4LPf6F/vswyl77lnvGyN3545XX+XWV17J33xxNooU4ABxnDmHvBa+3XY7nv32+xVm9Yv93Z3Rox/khRfWiheuj6LsBbVJJxPHfwbOAjDgN0OHcvhOO9WrbACrVq/mppEjeWD06PzNZ2Sj6LZ6J54CljcGJ/cdWcwgpaI03b1uY3By09IWM0ipKM0S728tIrKui/PG4ERR6X3nZvLG4GSjqOTKl6+5tOAQRdn7gRtzr997bwT33nsmX3/9RZ3TXLZsEc899weefPKy/OBmDPDz2gQ3iSuAEbkXf/v3v7nosceYu6ju3enmLFrEbx99tDC4eRy4us6Jps+fgHtyL958814eeOA8vvlmZp0TXLx4PiNGxIXBzUvA7+qQ3HmEcVo48H/PPsuV//wn3yxZUufyTZ8/n3Puv78wuLlNwY2IiIikQbNpwQGI40wr4B/A8bltLVq0Yqedfspuux1H584b1SidZcvKGDv2GUaNGsbixfPyd/0X+GEUZes033MmjjsBTwL75ra1b9OGE3bfncMzmRov+Dh/8WIeGTOGe954gyVrr6HyEnBoNoqKPwhpHRbHmXaEmex+lNvWqlVbdtnlGHbe+Sg6dtygRuksWfIN7777BK+9dmfhOK83gYOjKPt1XcqXiePuhPE45U03ndu149S99uLHO+xAx2oW8cyZs3Ah9//nPzw4ejTLV63K3/UocFw2ioo/CGkdVVELTgPlU/7/erfgNAS14IiINBq14BRPswpwAOI4Y4Qn6VdQ0ILVp89gBgzYi4026k+PHpsnK9wby5cvZs6cqcyePZnJk0czYcLrFQ1IHwGcGEXZBfUpXyaO2wA3Az/P396yRQt27teP3bbcki033JC+PXrQuV07HFi4dClTZs9m0qxZvPHpp7w9eTKrvv25/gU4LxtFy+tTvrRKgt+rgbW6kJm1oG/fDAMG7MGGG25Bjx79WG+9zoCxbNkiZs+ewuzZk5k48U0mTnyL1atXFiZ9D6FFr+5NLkAmjjsAw4Cj87e3btmS3fv3Z5d+/ei34YZs3r07Hdq2xYEFixczefZsJs6axWsTJvDu1KkVzV96NXBpNopWfXtX86UApzyfNf9XgCMi0qAU4BRPswtwcuI4sxOhy1p95wb+HLgIuL8O3dIqlYnjA4Drga3rmdSHwK+zUfRCtUcKcZz5PqFefLeeSX0KXAiMKFa9yMSxAYcRJkfoV8/k3gbOz0ZRcWcuSAlrgnVw6hzgNBYFOCIiDUoBTvE0mzE4haIoOwbYCzgUGEmYWaw2PgDOBwZGUfa+YgY3ANkoeg7YHvgZYc2W2noTOAUYrOCm5qIoO4rQFew4YBS1X7RtDHAmMCiKsk8Ws15ko8izUfQoIej9FckCtrXghLWZjgJ2UXAjIiIiadRsW3AKxXFmQ+AQIAMMAgYCHQlB4FJgEjCOMM7mn1GU/agxy5eJ475J+QYn5esPdCDctC4GJiTlex94IhtFnzdm+dIqjjO9CEHwDoTrvhXhuhvhuk8kXPexwJNRlJ3UmOXLxHF/Qr3YLinflsB6hHqxCPgkKd+7hHoxvTHLt65SC04F1IIjItKg1IJTPApwCphZH+AjYIC7VztZQG2Pl9oppc/DzPoRFmXdBnjZ3Q8tZvr1UcplExERkeopwCmeVHdRM7Ndzex5M1tgZovM7B0zO7Gqc9z9c3fvWNOb49oe35yV6udhZi3M7DwzG2dmi81srpk9ZmaF459+C3wBdAHGJO9hkZmVmZkn/+a2XVTT/IukvGwKbkRERKQ5S22AY2ZDCOMN3iIMyN6QMDj7JjOLKzmndeOVsHkp8c/jTsJ6M/8LdCW0gswERpvZdnnH9QP+68HVSSDVkdBtDWBQbpu7l6811Ejvo7xsdTlZdV9ERETSIrUBDmFa5AfcPXb3ue6+2N0fJtzE/t7M+prZXWZ2n5ndaWZfA39KtruZ9Qaw4CIzm2ZmX5vZH83sZTO7LNlfePxlyf6rzWxW8lPhDXwzU5Kfh5ntAZwAHOvuI919ubtPd/czgSzJ4rBmNhbYB7gkaaE5tbI3amZ7m9lKMzvezCYDXyfbzzGzj81soZl9bmbXmFnLvPPczM40szHJMf8xs4F5+48ys/HJvplmdldVZTOzPc3s9eQ6TTKz883CvMSVlVHqzsxeMbOLm7ocIiIizV0qAxwzG0AYbD28gt33EwaI75+8/inwPNCDMCtaoeOBc4CDgY2A6YTZ16qyF2H66E2S8y4ys91r9y7So8Q/j6HANHcfVcF5w4G9zWw9d98eeA24ImmhuaOaPFsCBxAmJ8itIDst2dYZ+DFhlrufFZx3EmEq6O6ELmd/BjCz9sC9wC/dvROhxeYOgIrKZmaDCIuD/oFwLQ8EziJvkdtKypg6pRh4FAbiIiIiUjypDHAIN3QAXxbucPflwBxCFymA1939IXdf5e6LK0jrBODv7v6eu68g3DBWN75jgrvf6u4r3X00YWazTDXnpFkpfx49KipX4itCELB+NelX5rfuviD3Ptz9MXefknRxe48QsPyg4Jw/JOOIlgF3sXa9WQEMNLP13b3M3V+rIu9fAI+4+4jkWn4M3EK4fpWWUdYdSWtmq6Yuh4iISKlJa4AzO/m3V+EOM2tDeDqeO2ZqNWn1Aj7LvUjGOHxRzTmFU/GWAZ2qOSfNSvnzmF1RuRKbENZHqkv3rdWF5TKzo5PuZ3PNbAHwS9YEfxWVtbycSQAyFPghMMnCBA3HVJH/5sDRZjY/9wNEwMZVlTHN8lpNjjezj5KufiPNbOO8Y842synJvi/N7OqCc3vnHXuSmU2sIr87zeyLJK2PCj6vscm/nyTdCi9JztnMzEaY2Zzk3JvMbL28ND3p6pglTFPenB+ciIiIVCitAc6nwGSgohvAowhrhLyYvF5dTVpfApvlXiRjGDYtQhmbk1L+PJ4HepvZnhXsOwYY5e5L6pCu5w/4N7NNCV3ergQ2dvcuhHFJNZ5m0d1fcfcfEQLCK4HhZrZFJYd/BvzD3bvm/XR290GVlbEZOZLQbbEXYU2jy6G8K+X/AQcl3QAHAf+sRz6vE9at6prkcZetmZlv++TfrZJuhVckrTHPADMIdXwXYHfg+oJ0T03eQ0fgvXqUT0REJJVS2b3B3d3MzgKeNLMpwF+BJYRxCDcB17r7lGS8dXXuBa41s8cI66ucTXiyLzVUyp+Hu79qZvcD95nZKcCrhC5pvwd2BioKfOoit2jsbGCFme1CGA8zviYnm9lGwB7AS+6+IGmRgdDCVJG/AqPM7HlCEOfAAKBHJeONmpPY3ecAJJ99bhzUSkLAOcjMPnP3+cB/6ppJwTitB83s18DehHpbke8RFvDd2d3LgLJk7NCTZnZWXjB6vbvnFpSt7PMXEZF1TCmufZOv1Ne+yZfWFhzc/TnC+Ia9CN2e5hBuWn/t7r+vRVL3EJ60P0eYOrg34aZnWTHLm3Yl/nmcAPwp+ZlPuAHtDeySjJWpN3cfT+giNiLJ47fAA7VIogWhS9tUM1tIuAYnuvvUSvL7EDgIOJfQ7W0WYUxPYZe45qiyboCTgWOB04CvkhnohtQlAwtrK11uZp9YWPdpPqHVpqrrvykwKwluciYB7QrOm1qXMomIiDQX1jx7qNSdmbUgzMh1obvf39Tlae70eUh1zOwV4CVCF8EpwKbuPi3ZdxJwsbtvWXBOG+DnhLWaNgDaE1rfBrr7J8kxFwGn5M7N5ePuV5rZsYQJMIYAH7n76mTczNPufpmZ9SF0I8wvy26EtaK65SZ9SAKsEUCHJA0H9nT31xvgUomIiKRCaltwisnMjjSzdslUvTGh3/5zTVysZkufhzQEM9vKzH6Y1KsVwAJC177VSZe2z4BTzKylmW1LaOmpTGdCl7fZQIuk++P2eftnE8ab9c/b9jYwEbjBzNqb2SbAFcCd7l7d2DQRERFJKMCpmV8RukNNB/YFhrr7vKYtUrOmz0MaQhtCN8LphG6EZwOHufvSZP+JhG5/CwgLwFa1FtLdwGhCwPIlsDVhrSIAkokrLgEeSGa5+727r0zS701olXw7SePXxXqDIiIizYG6qImIiIiISGqoBUdERKQRVbeGkjRPqhcixaMAR0REUsfM7jKzFclCqrmfMwuO6Z0syDrDzJaY2UQzu9LM2jVVuaXhmdlVyYK+35jZLDN7NJn4I7df9UJkHacAR0RE0uruZCHV3M9fczvMrBdhnFNXYFfCdOHHAocCz5hZy4YokJm1boh0pVbuBQa7e2egL2HM24OgeiGSFgpwRESkOYqBRcBP3X2Ku69099HAIYQFfo82s1ZmNt3Mfpx/opndbWb/yHt9mpl9mKx59F7++klmdpmZ/cvMrjezmcA/8/adbWbTzGyemf09/+Y5aUH4wswWmtlHZnZM3r69zWxlMqPkpCTfh82sU94xA8xsVNJKMdbMzkmmGW/23P1jd1+QvDTCjIZbJa9VL0RSQAGOiIik1WFm9rWZTTCzP5hZx7x9Q4GHktnryrn7p4TZ6w5I9t0LnJzbn6RxGHBn8vp04DeEp/zdCAsYP25m+Wsr7UWYnW/T5FyAzYCNgC2AnYCfAkflnfM6MJjQknA5cJeZbZ23vyVhnaXtgQHADoSZ/zCzVsBTwNgkj0OpelrzZsfMjjGzBYRg5hzgsmSX6oUUhZmNM7Mj63H+c2Z2YTHLVE1+x5rZ2MbKr6EpwBERkTT6MzAQ6E64kfs+MCxvfw/CFN4V+QrYMPn/ncBQM8u9PgL4yt1z036fDVzu7mPdfbW7P0tYsDX/pvRzd7/B3ZfnFnEFlgCXuvsyd58IvAxkcie4+x3uPtfdV7n7g8AHwN4F5fytuy9y95nAk3nn70LoevUbd1/i7pOBP1byXpsld7/f3bsAGxOCm/8mu1QvUsDMXjGzZRbG3i0ws/fN7KdFSPcyM3upJse6+yB3f6iG6bqZ7VFw/gHufl1dyllJHv3M7JFkbNmipCXwCQsLW+Pu97n79nnH32Vmtxcr/8amAEdERFLH3d9x95nJzeU44H+Bw82sbXLIbKBXJadvkuzH3ccD7wLHJftOJnlKn9gc+IuF9Yzmm9l8YJ+CtKdWkMcsd1+V97qMMN4DM2thZpeb2SfJzdl8whP5HnnHr3L32RWdn+Q9K1lvKeezSt5rs+buMwiB79Nmtj6qF2lyhbt3BDYA7gLuL2hBaxBWuuOpniW0GG5FqBO7Ai8QummmjgIcERFpDlYn/+b+mD8PHJF02ylnZlsAOwPP5W2+EzgpuTnaBbgnb99nwCnu3jXvp6O7/6KCvGvqaOBnhG5L3dy9K6FbUU1vRL4EepjZennb+lR2sNAK6EAIYFQvUibpUjiM8DkPBjCzQ8zsnST4HG9mx+aON7O+ZvZCsm9ectxWSXezi4C9bc3MjP0smd7bzC4ws2nA+0k6U83suLx0tzOz581sdtJ19sVke65b2MgkzduT7a+Y2cUF5/8rKdNkM7s4Nz4rKbOb2fHJ2KyFZjbSzDZO9m9ACGxudfcFHkxz91vdfVlyTPk05UnXuGOBE/Peay6vSq9dKVGAIyIiqWNmR5lZ1+T//YEbgH+6+9LkkAjoAjyY3By0NLOdCF163gIeyEvuQWBL4E/Ai+6e34Xpj8BlZjbYgvXMbA8zG1iP4ncGVhJaC1qY2SmEJ/U19R/CzGDXmFk7M9scOLce5UmNpBXkrFzXMjPrDfyF0JryMaoXqZN0wcoFlhPMbH/gDsJ7Xx84EbjFzPZKjrmacJ02InRxPRmYn3Q3uxp4JW9mxsnJOX0JAXJ/wtipwjJsDIxKfvoCPYFrAfK6hQ1J0vxZBed3AV4kdHPsCRwInAKcV3DokYSxXb0IQfvlSR5zgXHA7WZ2gpltbWaVBsZJ17j7WHsmylU1uHYlQwGOiIik0c+ByWZWBowk3NyVDwp39y+A7wGLCYPHy4CHCIOwf5g/yDyZcesJ4ACgfJasZN8w4DrC0/x5hBujS4D6dFO5OynTRMJT962B16o8Y+0yrQR+BHyXcDP8JGFQ/PJ6lClNhgIfJnVjNKEO7JfMmKZ6kR6/T7rxLQGuBH7m7h8QJpW42d1fS7qwvg0MB05IzltOCCL6JWOdPkjGM1VlBWHs05K88VT5jgcmuvs17l6WjLuq0ViexIFJua5MxmeNJwRIhcFQ7O5z3P0b4H7yxm8Rxmq9QghO3gdmmtklVQU6Faju2pUMc9fsgCIiImlmZmcA57v7gKYui5SOtNYLM3sFeMndrzSzboRWhyXufqyZjSO0oqzIO6Ul8Jq7DzWzHoRgdCihFeRR4HfuvsjMLgP2cPf98vI6iTAxRL+CMkwFLnb34Wb2V6CLu1fYncvCVN17uvvrlbyH3wAHufueefv3I7RKtzezvsAUYFN3n5ZXrovd/VvjjsysPWFijGHAGe7+j8LjzewuYGV+i1J1166i99ZU1IIjIiKSMma2u5ltkXSP2g64kLW7V0kz1BzrhbvPI7R0DLWwdtFnwGUF46M65W7Q3X22u5+d3OjvTmj5yE3XXNm4qerGU00ldF+rtJjVnP8FsFlBa0u/ZHutuftid7+LMAvf4EoOq+g9VXntSokCHBERkfTpQ+ivX0boXvUEcE2TlkhKQbOsF+7+NXAjYQzNTcC5ZrZnMsaqjZntaGYZAAsLpW6eBBMLCF3Dcl0TZwB9knE9tTEc2MrMfmNm7c2stZn9IG//DKoOgJ4B2gEXJeXdirDO0h01ydzMupnZNWa2TZJ3KzM7DNiGyrs5zgD6mVl+rFDltSslCnBERERSxt0fcPc+7t7e3Tdz91/nTbAgzVQzrxc3E9Y92gQ4HfgDMIcwdfIfgdxCwDsQJgNYRBiY/y5wfbLvEUKryYxkFrHNa5Kxu39FaAnaH5gGzCQEKDm/By63MEPa3ys4fwFhAdf9knNfIMzad2NN8icEaRsCjwNfE8ZgXQz8yt0fqeSc2wld9OYm77Wlu4+k6mtXMjQGR0REREREUkMtOCIiIiIikhoKcEREREREJDUU4IiIiIiISGoowBERERERkdRQgCMiIiIiIqmhAEdERERERFJDAY6IiIiIiKSGAhwREREREUkNBTgiIiIiIpIaCnBERERERCQ1FOCIiIiIiEhqKMAREREREZHUUIAjIiIiIiKpoQBHRERERERSQwGOiIiIiIikhgIcERERERFJDQU4IiIiIiKSGgpwREREREQkNRTgiIiIiIhIaijAERERERGR1FCAIyIiIiIiqaEAR0REREREUkMBjoiIiIiIpIYCHBERERERSQ0FOCIiIiIikhoKcEREREREJDUU4IiIiIiISGoowBERERERkdRQgCMiIiIiIqmhAEdERERERFJDAY6IiIiIiKSGAhwREREREUkNBTgiIiIiIpIaCnBERERERCQ1FOCIiIiIiEhqKMAREREREZHUUIAjIiIiIiKpoQBHRERERERSQwGOiIiIiIikhgIcERERERFJDQU4IiIiIiKSGgpwREREREQkNRTgiIiIiIhIaijAERERERGR1FCAIyIiIiIiqaEAR0REREREUkMBjoiIiIiIpIYCHBERERERSQ0FOCIiIiIikhoKcEREREREJDUU4IiIiIiISGoowBERERERkdRo1dQFaApxnPGaHBdFWSvGebWRieMa5ZGNom/lUZ9zRURERETSQC04IiIiIiKSGgpwREREREQkNZplF7WqupA1Rje0qlTVfaymXdCqS0dEREREJK3UgiMiIiIiIqmhAEdERERERFKjWXZRE2kocZwx4BLgkSjKjm/q8oiIiIg0NwpwRIqjM7DvTjsd8csxYx7eDzg/jjNHRlH2+aYumNRa+Vi3OM6Ub4yibGPkXZOxcw6QiePyDdkoaqjyFGrOY/tqPAayrqqobzWuFw2pijrXnOuFiJQgBTgidWPAjsD/JD+7LlmyoNUHHzyT298ZeCaOM+cDN0dRtsFvPkREREREY3BEamNj4ETgfmAWMAa4EtgTaLXeel046aTb6Nx5o9zxLYA/ArfFcaZNE5RXREREpNlRC45I5doCe7CmlWa76k7o2XMrTjvtHh566AKmTfsgt/lnQP84zhweRdk5DVZaERFpNDVd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\n" }, "metadata": { "needs_background": "light" @@ -21,12 +21,7 @@ "#import sys\n", "import dnaplotlib as dpl\n", "import matplotlib.pyplot as plt\n", - "#import matplotlib.transforms as mtransforms\n", - "#import matplotlib.patches as mpatch\n", - "#from matplotlib.patches import FancyBboxPatch\n", "import numpy as np\n", - "from bokeh.models import (Plot , Range1d)\n", - "#bokeh.io.output_notebook()\n", "\n", "%matplotlib inline\n", "dnaline = 3\n", @@ -42,6 +37,10 @@ "#print(raxes)\n", "raxind = 0\n", "\n", + "\n", + "\n", + "\n", + "\n", "for part in parts:\n", " if(part in dontrender):\n", " continue\n", @@ -73,434 +72,130 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 1, "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " Loading BokehJS ...\n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "\n", - "(function(root) {\n", - " function now() {\n", - " return new Date();\n", - " }\n", - "\n", - " var force = true;\n", - "\n", - " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", - " root._bokeh_onload_callbacks = [];\n", - " root._bokeh_is_loading = undefined;\n", - " }\n", - "\n", - " var JS_MIME_TYPE = 'application/javascript';\n", - " var HTML_MIME_TYPE = 'text/html';\n", - " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", - " var CLASS_NAME = 'output_bokeh rendered_html';\n", - "\n", - " /**\n", - " * Render data to the DOM node\n", - " */\n", - " function render(props, node) {\n", - " var script = document.createElement(\"script\");\n", - " node.appendChild(script);\n", - " }\n", - "\n", - " /**\n", - " * Handle when an output is cleared or removed\n", - " */\n", - " function handleClearOutput(event, handle) {\n", - " var cell = handle.cell;\n", - "\n", - " var id = cell.output_area._bokeh_element_id;\n", - " var server_id = cell.output_area._bokeh_server_id;\n", - " // Clean up Bokeh references\n", - " if (id != null && id in Bokeh.index) {\n", - " Bokeh.index[id].model.document.clear();\n", - " delete Bokeh.index[id];\n", - " }\n", - "\n", - " if (server_id !== undefined) {\n", - " // Clean up Bokeh references\n", - " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", - " cell.notebook.kernel.execute(cmd, {\n", - " iopub: {\n", - " output: function(msg) {\n", - " var id = msg.content.text.trim();\n", - " if (id in Bokeh.index) {\n", - " Bokeh.index[id].model.document.clear();\n", - " delete Bokeh.index[id];\n", - " }\n", - " }\n", - " }\n", - " });\n", - " // Destroy server and session\n", - " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", - " cell.notebook.kernel.execute(cmd);\n", - " }\n", - " }\n", - "\n", - " /**\n", - " * Handle when a new output is added\n", - " */\n", - " function handleAddOutput(event, handle) {\n", - " var output_area = handle.output_area;\n", - " var output = handle.output;\n", - "\n", - " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", - " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", - " return\n", - " }\n", - "\n", - " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", - "\n", - " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", - " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", - " // store reference to embed id on output_area\n", - " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", - " }\n", - " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", - " var bk_div = document.createElement(\"div\");\n", - " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", - " var script_attrs = bk_div.children[0].attributes;\n", - " for (var i = 0; i < script_attrs.length; i++) {\n", - " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", - " }\n", - " // store reference to server id on output_area\n", - " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", - " }\n", - " }\n", - "\n", - " function register_renderer(events, OutputArea) {\n", - "\n", - " function append_mime(data, metadata, element) {\n", - " // create a DOM node to render to\n", - " var toinsert = this.create_output_subarea(\n", - " metadata,\n", - " CLASS_NAME,\n", - " EXEC_MIME_TYPE\n", - " );\n", - " this.keyboard_manager.register_events(toinsert);\n", - " // Render to node\n", - " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", - " render(props, toinsert[toinsert.length - 1]);\n", - " element.append(toinsert);\n", - " return toinsert\n", - " }\n", - "\n", - " /* Handle when an output is cleared or removed */\n", - " events.on('clear_output.CodeCell', handleClearOutput);\n", - " events.on('delete.Cell', handleClearOutput);\n", - "\n", - " /* Handle when a new output is added */\n", - " events.on('output_added.OutputArea', handleAddOutput);\n", - "\n", - " /**\n", - " * Register the mime type and append_mime function with output_area\n", - " */\n", - " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", - " /* Is output safe? */\n", - " safe: true,\n", - " /* Index of renderer in `output_area.display_order` */\n", - " index: 0\n", - " });\n", - " }\n", - "\n", - " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", - " if (root.Jupyter !== undefined) {\n", - " var events = require('base/js/events');\n", - " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", - "\n", - " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", - " register_renderer(events, OutputArea);\n", - " }\n", - " }\n", - "\n", - " \n", - " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", - " root._bokeh_timeout = Date.now() + 5000;\n", - " root._bokeh_failed_load = false;\n", - " }\n", - "\n", - " var NB_LOAD_WARNING = {'data': {'text/html':\n", - " \"
\\n\"+\n", - " \"

\\n\"+\n", - " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", - " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", - " \"

\\n\"+\n", - " \"
    \\n\"+\n", - " \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n", - " \"
  • use INLINE resources instead, as so:
  • \\n\"+\n", - " \"
\\n\"+\n", - " \"\\n\"+\n", - " \"from bokeh.resources import INLINE\\n\"+\n", - " \"output_notebook(resources=INLINE)\\n\"+\n", - " \"\\n\"+\n", - " \"
\"}};\n", - "\n", - " function display_loaded() {\n", - " var el = document.getElementById(\"5563\");\n", - " if (el != null) {\n", - " el.textContent = \"BokehJS is loading...\";\n", - " }\n", - " if (root.Bokeh !== undefined) {\n", - " if (el != null) {\n", - " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", - " }\n", - " } else if (Date.now() < root._bokeh_timeout) {\n", - " setTimeout(display_loaded, 100)\n", - " }\n", - " }\n", - "\n", - "\n", - " function run_callbacks() {\n", - " try {\n", - " root._bokeh_onload_callbacks.forEach(function(callback) {\n", - " if (callback != null)\n", - " callback();\n", - " });\n", - " } finally {\n", - " delete root._bokeh_onload_callbacks\n", - " }\n", - " console.debug(\"Bokeh: all callbacks have finished\");\n", - " }\n", - "\n", - " function load_libs(css_urls, js_urls, callback) {\n", - " if (css_urls == null) css_urls = [];\n", - " if (js_urls == null) js_urls = [];\n", - "\n", - " root._bokeh_onload_callbacks.push(callback);\n", - " if (root._bokeh_is_loading > 0) {\n", - " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", - " return null;\n", - " }\n", - " if (js_urls == null || js_urls.length === 0) {\n", - " run_callbacks();\n", - " return null;\n", - " }\n", - " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", - " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", - "\n", - " function on_load() {\n", - " root._bokeh_is_loading--;\n", - " if (root._bokeh_is_loading === 0) {\n", - " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", - " run_callbacks()\n", - " }\n", - " }\n", - "\n", - " function on_error() {\n", - " console.error(\"failed to load \" + url);\n", - " }\n", - "\n", - " for (var i = 0; i < css_urls.length; i++) {\n", - " var url = css_urls[i];\n", - " const element = document.createElement(\"link\");\n", - " element.onload = on_load;\n", - " element.onerror = on_error;\n", - " element.rel = \"stylesheet\";\n", - " element.type = \"text/css\";\n", - " element.href = url;\n", - " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", - " document.body.appendChild(element);\n", - " }\n", - "\n", - " for (var i = 0; i < js_urls.length; i++) {\n", - " var url = js_urls[i];\n", - " var element = document.createElement('script');\n", - " element.onload = on_load;\n", - " element.onerror = on_error;\n", - " element.async = false;\n", - " element.src = url;\n", - " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", - " document.head.appendChild(element);\n", - " }\n", - " };var element = document.getElementById(\"5563\");\n", - " if (element == null) {\n", - " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '5563' but no matching script tag was found. \")\n", - " return false;\n", - " }\n", - "\n", - " function inject_raw_css(css) {\n", - " const element = document.createElement(\"style\");\n", - " element.appendChild(document.createTextNode(css));\n", - " document.body.appendChild(element);\n", - " }\n", - "\n", - " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.3.4.min.js\"];\n", - " var css_urls = [];\n", - "\n", - " var inline_js = [\n", - " function(Bokeh) {\n", - " Bokeh.set_log_level(\"info\");\n", - " },\n", - " \n", - " function(Bokeh) {\n", - " \n", - " },\n", - " function(Bokeh) {} // ensure no trailing comma for IE\n", - " ];\n", - "\n", - " function run_inline_js() {\n", - " \n", - " if ((root.Bokeh !== undefined) || (force === true)) {\n", - " for (var i = 0; i < inline_js.length; i++) {\n", - " inline_js[i].call(root, root.Bokeh);\n", - " }if (force === true) {\n", - " display_loaded();\n", - " }} else if (Date.now() < root._bokeh_timeout) {\n", - " setTimeout(run_inline_js, 100);\n", - " } else if (!root._bokeh_failed_load) {\n", - " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", - " root._bokeh_failed_load = true;\n", - " } else if (force !== true) {\n", - " var cell = $(document.getElementById(\"5563\")).parents('.cell').data().cell;\n", - " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", - " }\n", - "\n", - " }\n", - "\n", - " if (root._bokeh_is_loading === 0) {\n", - " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", - " run_inline_js();\n", - " } else {\n", - " load_libs(css_urls, js_urls, function() {\n", - " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", - " run_inline_js();\n", - " });\n", - " }\n", - "}(window));" - ], - "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"5563\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };var element = document.getElementById(\"5563\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '5563' but no matching script tag was found. \")\n return false;\n }\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.3.4.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.3.4.min.js\"];\n var css_urls = [];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"5563\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ - "{'xs': [[[[1, 1, 2, 2]]], [[[1, 1, 3], [1.5, 1.5, 2]]], [[[2, 2, 4, 4], [2.5, 2.5, 3], [3.5, 3, 3]], [[3.5, 3.5, 4]]]], 'ys': [[[[4, 3, 3, 4]]], [[[1, 3, 1], [1.5, 2, 1.5]]], [[[2, 4, 4, 2], [3, 3.5, 3.5], [2.5, 2.5, 3]], [[1, 1.5, 1.5]]]]}\n" + "0\nxlim are [-1, 132.0]\nylim are (-8, 27.46666666666667)\n" ] }, { + "output_type": "display_data", "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "(function(root) {\n", - " function embed_document(root) {\n", - " \n", - " var docs_json = {\"771b0d00-1823-44b1-8ed9-a8f167ce7a2f\":{\"roots\":{\"references\":[{\"attributes\":{\"min_border\":0,\"plot_height\":300,\"plot_width\":300,\"renderers\":[{\"id\":\"5569\",\"type\":\"GlyphRenderer\"}],\"title\":null,\"toolbar\":{\"id\":\"5572\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"5764\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5765\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5768\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5766\",\"type\":\"LinearScale\"}},\"id\":\"5565\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"5764\",\"type\":\"DataRange1d\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5571\",\"type\":\"HoverTool\"}]},\"id\":\"5572\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null,\"data\":{\"name\":[\"ooga\",\"booga\",\"dooga\"],\"xs\":[[[[1,1,2,2]]],[[[1,1,3],[1.5,1.5,2]]],[[[2,2,4,4],[2.5,2.5,3],[3.5,3,3]],[[3.5,3.5,4]]]],\"ys\":[[[[4,3,3,4]]],[[[1,3,1],[1.5,2,1.5]]],[[[2,4,4,2],[3,3.5,3.5],[2.5,2.5,3]],[[1,1.5,1.5]]]]},\"selected\":{\"id\":\"5770\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"5769\",\"type\":\"UnionRenderers\"}},\"id\":\"5564\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"5569\",\"type\":\"GlyphRenderer\"}],\"tooltips\":[[\"name\",\"@name\"]]},\"id\":\"5571\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"5769\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"5770\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"5564\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5567\",\"type\":\"MultiPolygons\"},\"hover_glyph\":{\"id\":\"5568\",\"type\":\"MultiPolygons\"},\"muted_glyph\":null,\"view\":{\"id\":\"5570\",\"type\":\"CDSView\"}},\"id\":\"5569\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"5765\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"5766\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"5564\",\"type\":\"ColumnDataSource\"}},\"id\":\"5570\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"grey\"},\"line_width\":{\"value\":2},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"5567\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"fill_color\":{\"value\":\"blue\"},\"line_width\":{\"value\":2},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"5568\",\"type\":\"MultiPolygons\"},{\"attributes\":{\"callback\":null},\"id\":\"5768\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"5565\"]},\"title\":\"Bokeh Application\",\"version\":\"1.3.4\"}};\n", - " var render_items = [{\"docid\":\"771b0d00-1823-44b1-8ed9-a8f167ce7a2f\",\"roots\":{\"5565\":\"c6a473c8-1b3f-4813-b7a2-abb545279d05\"}}];\n", - " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", - "\n", - " }\n", - " if (root.Bokeh !== undefined) {\n", - " embed_document(root);\n", - " } else {\n", - " var attempts = 0;\n", - " var timer = setInterval(function(root) {\n", - " if (root.Bokeh !== undefined) {\n", - " embed_document(root);\n", - " clearInterval(timer);\n", - " }\n", - " attempts++;\n", - " if (attempts > 100) {\n", - " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", - " clearInterval(timer);\n", - " }\n", - " }, 10, root)\n", - " }\n", - "})(window);" - ], - "application/vnd.bokehjs_exec.v0+json": "" + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" }, "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "5565" - } - }, - "output_type": "display_data" + "needs_background": "light" + } } ], "source": [ - "from bokeh.io import curdoc, show\n", - "import bokeh.io\n", - "from bokeh.models import ColumnDataSource, Grid, LinearAxis, MultiPolygons, Plot, GlyphRenderer, HoverTool\n", - "bokeh.io.output_notebook()\n", - "xs_dict = [\n", - " [ {'exterior': [1, 1, 2, 2], 'holes': [ ]} ],\n", - " [ {'exterior': [1, 1, 3], 'holes': [ [1.5, 1.5, 2] ]} ],\n", - " [ {'exterior': [2, 2, 4, 4], 'holes': [ [2.5, 2.5, 3], [3.5, 3, 3] ]},\n", - " {'exterior': [3.5, 3.5, 4], 'holes': [ ]} ]\n", - "]\n", + "import dnaplotlib as dpl\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from matplotlib import cm\n", + "from collections import OrderedDict\n", + "%matplotlib inline\n", + "\n", + "cmap = plt.get_cmap('Set3')\n", + "\n", + "class SimplePart:\n", + " def __init__(self,name,dpl_type,direction='forward',bound=False,added_opts=None):\n", + " self.name = name\n", + " self.dpl_type = dpl_type\n", + " self.direction=direction\n", + " self.bound = bound\n", + " self.added_opts = added_opts\n", + "\n", + "dnaline = 3\n", + "edgecolor = (1,.2,.2)\n", "\n", - "ys_dict = [\n", - " [ {'exterior': [4, 3, 3, 4], 'holes': [ ]} ],\n", - " [ {'exterior': [1, 3, 1], 'holes': [ [1.5, 2, 1.5] ]} ],\n", - " [ {'exterior': [2, 4, 4, 2], 'holes': [ [3, 3.5, 3.5], [2.5, 2.5, 3] ]},\n", - " {'exterior': [1, 1.5, 1.5], 'holes': [ ]} ]\n", - "]\n", - "ys_dict2 = [\n", - " [ {'exterior': [4, 3, 3, 4], 'holes': [ ]} ],\n", - " [ {'exterior': [1, 3, 1], 'holes': [ [1.5, 2, 1.5] ]} ],\n", - " [ {'exterior': [2, 9, 4, 2], 'holes': [ [3, 3.5, 3.5], [2.5, 2.5, 3] ]},\n", - " {'exterior': [1, 1.5, 1.5], 'holes': [ ]} ]\n", - "]\n", - "xs = [[[p['exterior'], *p['holes']] for p in mp] for mp in xs_dict]\n", - "ys = [[[p['exterior'], *p['holes']] for p in mp] for mp in ys_dict]\n", - "print(dict(xs=xs, ys=ys))\n", - "source = ColumnDataSource(dict(xs=xs, ys=ys,name=[\"ooga\",\"booga\",\"dooga\"]))\n", + "dr = dpl.DNARenderer(scale = 5,linewidth=dnaline,linecolor=edgecolor)\n", "\n", - "plot = Plot(\n", - " title=None, plot_width=300, plot_height=300,\n", - " min_border=0, toolbar_location=None)\n", + "def plot_design(simple_design,label_size = 13, label_y_offset = -8,cmap ='Set3',cmap2 = 'Set2',ax=None,\\\n", + " part_renderers=None,circular=False,ylift=-10,simplereg = None,regs=None,reg_renderers=None,\\\n", + " linewidth=3,edgecolor = (1,.2,.2)):\n", + " cmap_obj = plt.get_cmap(cmap).colors\n", + " cmap2_obj = plt.get_cmap(cmap2).colors\n", + " color_count = 0\n", + " design_list = []\n", + " annotate_list = []\n", + " for part in simple_design:\n", + " part_dict = {'type':part.dpl_type, 'name':'test', 'fwd':'forward'==part.direction,\\\n", + " 'opts':{'label':part.name,'label_size':label_size,'label_y_offset':label_y_offset,\\\n", + " 'color':cmap_obj[color_count],'color2':cmap2_obj[color_count]}}\n", + " if(part.added_opts is not None):\n", + " part_dict['opts'].update(part.added_opts)\n", + " color_count += 1\n", + " if(color_count >= len(cmap_obj)):\n", + " color_count = 0\n", + " design_list += [part_dict]\n", + " if(part_renderers is None):\n", + " dr = dpl.DNARenderer(scale = 5,linewidth=linewidth,linecolor=edgecolor)\n", + " part_renderers = dr.SBOL_part_renderers()\n", + " if(ax is None):\n", + " figsize = (len(design_list)*.75,1.6)\n", + " \n", + " fig = plt.figure(figsize=figsize)\n", + " \n", + " ax = fig.add_axes([0,0,1,1])\n", + " if(simplereg is not None):\n", + " regs = []\n", + " reg_labels = {}\n", + " protein_color = 0\n", + " for reg in simplereg:\n", + " from_part = design_list[reg[0]]\n", + " binding_label = reg[1]\n", + " if(binding_label in reg_labels):\n", + " fill_color = reg_labels[binding_label]\n", + " else:\n", + " fill_color = cmap2_obj[protein_color]\n", + " reg_labels[binding_label] = fill_color\n", + " protein_color += 1\n", + " if(protein_color >= len(cmap2_obj)):\n", + " protein_color = 0\n", + " arc = {'type':'Binding', 'from_part':from_part, 'to_part':from_part, 'opts':{'label':binding_label,'label_size':label_size*.7,\\\n", + " 'label_x_offset':-1,'color':'blue', 'linewidth':linewidth,'y_offset':10, 'arc_height_start':10, \\\n", + " 'arc_height_end':10,'face_color':fill_color}}\n", + " regs += [arc]\n", + " if(reg_renderers is None):\n", + " reg_renderers = dr.std_reg_renderers()\n", + " start,end = dr.renderDNA(ax,design_list,part_renderers,circular=circular,regs=regs, reg_renderers=reg_renderers)\n", + " ax.axis('off')\n", + " addedsize = 1\n", + " axis_xlim = [start-addedsize,end+addedsize]\n", + " fig = ax.get_figure()\n", + " size = fig.get_size_inches()*fig.dpi\n", + " figaspect = size[1]/size[0]\n", + " yheight = (axis_xlim[1]-axis_xlim[0])*figaspect\n", + " ylimits = (ylift,yheight+ylift)\n", + " print(f\"xlim are {axis_xlim}\")\n", + " print(f\"ylim are {ylimits}\")\n", + " ax.set_xlim(axis_xlim)\n", + " ax.set_ylim(ylimits)\n", + " return ax\n", "\n", - "glyph = MultiPolygons(xs=\"xs\", ys=\"ys\", line_width=2,fill_color=\"grey\")\n", - "selglyph = MultiPolygons(xs=\"xs\", ys=\"ys\", line_width=2,fill_color=\"blue\")\n", - "g1 = plot.add_glyph(source, glyph)\n", - "g1.hover_glyph = selglyph\n", "\n", - "hover1 = HoverTool(tooltips=[(\"name\",\"@name\")],renderers=[g1])\n", "\n", - "plot.add_tools(hover1)\n", - "#help(plot)\n", - "xaxis = LinearAxis()\n", - "#plot.add_layout(xaxis, 'below')\n", + "prom = SimplePart('ptet','Promoter')\n", + "utr = SimplePart('utr1','RBS')\n", + "cds = SimplePart('gfp','CDS')\n", + "term = SimplePart('t16','Terminator')\n", + "aB = SimplePart('attB','RecombinaseSite')\n", + "aL = SimplePart('attL','RecombinaseSite2')\n", + "pL = SimplePart('RNAP','ProteinLocation')\n", + "ori = SimplePart('','Origin',added_opts={'face_color':(0.5,0.5,.2)})\n", "\n", - "yaxis = LinearAxis()\n", - "#plot.add_layout(yaxis, 'left')\n", "\n", - "#plot.add_layout(Grid(dimension=0, ticker=xaxis.ticker))\n", - "#plot.add_layout(Grid(dimension=1, ticker=yaxis.ticker))\n", + "simple_arc = [[1,\"RNAP\"],[2,\"A\"],[2,\"B\"],[4,\"Bxb1\"],[4,\"Bxb1\"]]\n", "\n", - "show(plot)" + "a = plot_design([prom,utr,cds,term,aB,aL,pL,ori],simplereg = simple_arc,ylift=-8)\n", + "\n" ] }, { @@ -527,7 +222,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4-final" + "version": "3.7.7-final" } }, "nbformat": 4, From a5a99658e8d259e43a270a3ac50e9318ce3f47fc Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Wed, 6 Jan 2021 14:41:45 -0800 Subject: [PATCH 42/43] "simple_plot_design" and Binding as a regulation type --- dnaplotlib/dnaplotlib.py | 98 +++++++++++++++++++++++++ gallery/notebooks/interactiveplot.ipynb | 87 ++++------------------ 2 files changed, 112 insertions(+), 73 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 0cd3eda..9c8e7f5 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -3473,6 +3473,104 @@ def convert_attrib (attrib): 'terminator': 'Terminator', 'rbs': 'RBS'} +def simple_plot_design(simple_design,label_size = 13, label_y_offset = -8,cmap ='Set3',cmap2 = 'Set2',ax=None,\ + part_renderers=None,circular=False,ylift=-12,simplereg = None,regs=None,reg_renderers=None,\ + linewidth=3,edgecolor = (1,.2,.2)): + """a simpler way to plot a construct. + simple_design: list of "SimplePart" objects, containing + name: string name that is displayed below the object + dpl_type: string representing dnaplotlib type to display it as + direction: direction "forward" or "reverse" + added_opts: dictionary of "opts" as seen in other dna plot lib objects + label + simplereg: dictionary of lists which determines how to display regulation + {: [[from_item_index,to_item_index,name], + [from_item_index,to_item_index,name], ...]} + regs: normal dictionary of regulation elements like in dnaplotlib + + other options self explanatory + """ + + cmap_obj = plt.get_cmap(cmap).colors + cmap2_obj = plt.get_cmap(cmap2).colors + color_count = 0 + design_list = [] + annotate_list = [] + for part in simple_design: + part_dict = {'type':part.dpl_type, 'name':'test', 'fwd':'forward'==part.direction,\ + 'opts':{'label':part.name,'label_size':label_size,'label_y_offset':label_y_offset,\ + 'color':cmap_obj[color_count],'color2':cmap2_obj[color_count]}} + if(part.added_opts is not None): + part_dict['opts'].update(part.added_opts) + color_count += 1 + if(color_count >= len(cmap_obj) or color_count >= len(cmap2_obj)): + color_count = 0 + design_list += [part_dict] + if(part_renderers is None): + dr = DNARenderer(scale = 5,linewidth=linewidth,linecolor=edgecolor) + part_renderers = dr.SBOL_part_renderers() + if(ax is None): + figsize = (len(design_list)*.75,1.6) + + fig = plt.figure(figsize=figsize) + + ax = fig.add_axes([0,0,1,1]) + plt.tight_layout(pad=0.01) + if(simplereg is not None): + regs = [] + + protein_color = 0 + for regtype,reg_list in simplereg.items(): + reg_labels = {} + for reg in reg_list: + from_part = design_list[reg[0]] + if(len(reg)==3): + to_part = design_list[reg[1]] + else: + to_part = from_part + binding_label = reg[-1] + if(binding_label in reg_labels): + fill_color = reg_labels[binding_label] + else: + fill_color = cmap2_obj[protein_color] + reg_labels[binding_label] = fill_color + protein_color += 1 + if(protein_color >= len(cmap2_obj)): + protein_color = 0 + arc = {'type':regtype, 'from_part':from_part, 'to_part':to_part, 'opts':{'label':binding_label,'label_size':label_size*.7,\ + 'label_x_offset':-1,'color':'blue', 'linewidth':linewidth,'y_offset':10,'face_color':fill_color}} + regs += [arc] + if(reg_renderers is None): + reg_renderers = dr.std_reg_renderers() + start,end = dr.renderDNA(ax,design_list,part_renderers,circular=circular,regs=regs, reg_renderers=reg_renderers) + + fig = ax.get_figure() + + ylimits = [0,0] + xlimits = [0,0] + for patch in ax.patches: + bbox = patch.get_window_extent() + if(bbox.y1 > ylimits[1]): + ylimits[1] = bbox.y1 + if(bbox.y0 < ylimits[0]): + ylimits[0] = bbox.y0 + + if(bbox.x1 > xlimits[1]): + xlimits[1] = bbox.x1 + if(bbox.x0 < xlimits[0]): + xlimits[0] = bbox.x0 + ylimits = [a/fig.dpi for a in ylimits] + xlimits = [a/fig.dpi for a in xlimits] + yheight = ylimits[1]-ylimits[0] + xheight = xlimits[1]-xlimits[0] + + addedsize = 1 + axis_xlim = [start-addedsize,end+addedsize] + fig.set_size_inches((axis_xlim[1]-axis_xlim[0])/yheight*1.5,1.5) + ax.axis('off') + ax.set_xlim(axis_xlim) + ax.set_ylim(ylimits) + return ax def load_design_from_gff (filename, chrom, type_map=dpl_default_type_map, region=None): # Load the GFF data diff --git a/gallery/notebooks/interactiveplot.ipynb b/gallery/notebooks/interactiveplot.ipynb index 5242881..277de2a 100644 --- a/gallery/notebooks/interactiveplot.ipynb +++ b/gallery/notebooks/interactiveplot.ipynb @@ -79,15 +79,15 @@ "output_type": "stream", "name": "stdout", "text": [ - "0\nxlim are [-1, 132.0]\nylim are (-8, 27.46666666666667)\n" + "0\n" ] }, { "output_type": "display_data", "data": { - "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "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\n" + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6gAAAB6CAYAAACyX36RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3de5zM9f4H8Nd71461bGXlsuQuESV2dBGHhMQSynFyi3ShIqTYCqtIIg5JYes4HVEo90ul8tucbqZc4pRyWVnWLbnGLruf3x/fmdnvrpm9zuc7l309H499mHnP9zvz2deM2XnP9/IRpRSIiIiIiIiI/C3M3wMgIiIiIiIiAtigEhERERERUYBgg0pEREREREQBgQ0qERERERERBQQ2qERERERERBQQ2KASERERERFRQGCDSkRERERERAGBDSoREREREREFBDaoREREREREFBDYoBIREREREVFAYINKREREREREAYENKhEREREREQUENqhEREREREQUENigEhERERERUUBgg0pEREREREQBgQ0qERERERERBQQ2qERERERERBQQ2KASERERERFRQGCDSkRERERERAGBDSoREREREREFBDaoREREREREFBDYoBIREREREVFAYINKREREREREAYENasBYUxtYE+HvURAREREREfkLG9TA0RfAbmDNw2xUiYiIiIioJGKDGlhqA3gHbFSJiIiIiKgEYoMamNioEhERERFRicMGNbCxUSUiIiIiohKDDWpwYKNKREREREQhjw1qcGGjSkREREREIYsNanBioxqERKSKv8dA1uHzbQ3mbA3mbA3mbA3mbA3mbI1QzFmUUv4eQ4hY488g9wO4H4jf6scxUD5EZCqA/yqlVvjj8Ses2qn9NTq+a2PR/RjBQkTWAxiqlNrj77GEMuZsDeZsDeZsDeZsDeZsjVDMmVtQg99GAP3ZnAaFMACLRaSFvwdClqgEYIOIVPL3QEIcc7YGc7YGc7YGc7YGc7ZGyOXMBjV4bQTQCohvD8Rv9vdgqMAiAawWkRv8PRCyRF0Aa0SkrL8HEuKYszWYszWYszWYszWYszVCKudS/h5AaIovwm6Oa8YCeKkAC24EMIFNaVCLgfFNVwulVJpVD1qY3W/NuwNzt91iaw7gQxHpppS67O/BhDDmbA3mbA3mbA3mbA3m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\n" }, "metadata": { "needs_background": "light" @@ -104,6 +104,12 @@ "\n", "cmap = plt.get_cmap('Set3')\n", "\n", + "dnaline = 3\n", + "edgecolor = (1,.2,.2)\n", + "\n", + "dr = dpl.DNARenderer(scale = 5,linewidth=dnaline,linecolor=edgecolor)\n", + "\n", + "\n", "class SimplePart:\n", " def __init__(self,name,dpl_type,direction='forward',bound=False,added_opts=None):\n", " self.name = name\n", @@ -112,73 +118,9 @@ " self.bound = bound\n", " self.added_opts = added_opts\n", "\n", - "dnaline = 3\n", - "edgecolor = (1,.2,.2)\n", "\n", - "dr = dpl.DNARenderer(scale = 5,linewidth=dnaline,linecolor=edgecolor)\n", "\n", - "def plot_design(simple_design,label_size = 13, label_y_offset = -8,cmap ='Set3',cmap2 = 'Set2',ax=None,\\\n", - " part_renderers=None,circular=False,ylift=-10,simplereg = None,regs=None,reg_renderers=None,\\\n", - " linewidth=3,edgecolor = (1,.2,.2)):\n", - " cmap_obj = plt.get_cmap(cmap).colors\n", - " cmap2_obj = plt.get_cmap(cmap2).colors\n", - " color_count = 0\n", - " design_list = []\n", - " annotate_list = []\n", - " for part in simple_design:\n", - " part_dict = {'type':part.dpl_type, 'name':'test', 'fwd':'forward'==part.direction,\\\n", - " 'opts':{'label':part.name,'label_size':label_size,'label_y_offset':label_y_offset,\\\n", - " 'color':cmap_obj[color_count],'color2':cmap2_obj[color_count]}}\n", - " if(part.added_opts is not None):\n", - " part_dict['opts'].update(part.added_opts)\n", - " color_count += 1\n", - " if(color_count >= len(cmap_obj)):\n", - " color_count = 0\n", - " design_list += [part_dict]\n", - " if(part_renderers is None):\n", - " dr = dpl.DNARenderer(scale = 5,linewidth=linewidth,linecolor=edgecolor)\n", - " part_renderers = dr.SBOL_part_renderers()\n", - " if(ax is None):\n", - " figsize = (len(design_list)*.75,1.6)\n", - " \n", - " fig = plt.figure(figsize=figsize)\n", - " \n", - " ax = fig.add_axes([0,0,1,1])\n", - " if(simplereg is not None):\n", - " regs = []\n", - " reg_labels = {}\n", - " protein_color = 0\n", - " for reg in simplereg:\n", - " from_part = design_list[reg[0]]\n", - " binding_label = reg[1]\n", - " if(binding_label in reg_labels):\n", - " fill_color = reg_labels[binding_label]\n", - " else:\n", - " fill_color = cmap2_obj[protein_color]\n", - " reg_labels[binding_label] = fill_color\n", - " protein_color += 1\n", - " if(protein_color >= len(cmap2_obj)):\n", - " protein_color = 0\n", - " arc = {'type':'Binding', 'from_part':from_part, 'to_part':from_part, 'opts':{'label':binding_label,'label_size':label_size*.7,\\\n", - " 'label_x_offset':-1,'color':'blue', 'linewidth':linewidth,'y_offset':10, 'arc_height_start':10, \\\n", - " 'arc_height_end':10,'face_color':fill_color}}\n", - " regs += [arc]\n", - " if(reg_renderers is None):\n", - " reg_renderers = dr.std_reg_renderers()\n", - " start,end = dr.renderDNA(ax,design_list,part_renderers,circular=circular,regs=regs, reg_renderers=reg_renderers)\n", - " ax.axis('off')\n", - " addedsize = 1\n", - " axis_xlim = [start-addedsize,end+addedsize]\n", - " fig = ax.get_figure()\n", - " size = fig.get_size_inches()*fig.dpi\n", - " figaspect = size[1]/size[0]\n", - " yheight = (axis_xlim[1]-axis_xlim[0])*figaspect\n", - " ylimits = (ylift,yheight+ylift)\n", - " print(f\"xlim are {axis_xlim}\")\n", - " print(f\"ylim are {ylimits}\")\n", - " ax.set_xlim(axis_xlim)\n", - " ax.set_ylim(ylimits)\n", - " return ax\n", + "\n", "\n", "\n", "\n", @@ -187,14 +129,13 @@ "cds = SimplePart('gfp','CDS')\n", "term = SimplePart('t16','Terminator')\n", "aB = SimplePart('attB','RecombinaseSite')\n", - "aL = SimplePart('attL','RecombinaseSite2')\n", - "pL = SimplePart('RNAP','ProteinLocation')\n", + "aL = SimplePart('attL','RecombinaseSite2',direction=\"reverse\")\n", "ori = SimplePart('','Origin',added_opts={'face_color':(0.5,0.5,.2)})\n", "\n", "\n", - "simple_arc = [[1,\"RNAP\"],[2,\"A\"],[2,\"B\"],[4,\"Bxb1\"],[4,\"Bxb1\"]]\n", + "simple_arc = {'Binding':[[1,\"RNAP\"],[2,\"A\"],[2,\"B\"],[7,\"Bxb1\"],[5,\"Bxb1\"]]}\n", "\n", - "a = plot_design([prom,utr,cds,term,aB,aL,pL,ori],simplereg = simple_arc,ylift=-8)\n", + "a = simple_plot_design([aL,prom,utr,cds,term,cds,cds,cds,cds,cds,cds,cds],simplereg = {},circular=True)\n", "\n" ] }, From a0800ebfe7feff2bb0f4260bed1dd3b2b02aeadd Mon Sep 17 00:00:00 2001 From: Andrey Shur Date: Thu, 17 Jun 2021 14:10:35 -0700 Subject: [PATCH 43/43] remove print statement and default dna renderer --- dnaplotlib/dnaplotlib.py | 6611 ++++++++++++----------- gallery/notebooks/interactiveplot.ipynb | 4 +- 2 files changed, 3308 insertions(+), 3307 deletions(-) diff --git a/dnaplotlib/dnaplotlib.py b/dnaplotlib/dnaplotlib.py index 9c8e7f5..ec2edd1 100755 --- a/dnaplotlib/dnaplotlib.py +++ b/dnaplotlib/dnaplotlib.py @@ -2,46 +2,46 @@ """ DNAplotlib ========== - This module is designed to allow for highly customisable visualisation of DNA - fragments. Diagrams can be in the form of conceptual SBOL compliant icons or - make use of icons whose width is scaled to allow for easier comparison of part - locations to trace information, such as for corresponding RNA-seq read depth - data. All plotting is performed using matplotlib and to an axis object. This - enables the export of publication quality, vector-based figures. Furthermore, - all standard renderers can be replaced with user defined versions to allow - for full customisation of the plot. - - To make use of this module it is necessary to create the rendering object - after importing the module: - - > import dnaplotlib as dpl - > dr = dpl.DNARenderer() - - This object performs all rendering using the renderDNA() method. To describe - what should be plotted, dnaplotlib requires the DNA design in a specific - format. For standard SBOL diagrams a design is a list of dictionaries where - each dictionary relates to a specific part and as a minimum contains the - keys: - - - name: A name that can be potentially used in regulation. - - type: The type of part (decides which renderer to use). - - fwd: Boolean defining if the part is in a forward orientation. - - start: Start position (optional) - - end: End position (optional) - - Once this list is defined and an axis object is created the design can be - draw using standard renders and to a user created matplotlib axes by running: - - > reg_renderers = dr.std_reg_renderers() - > part_renderers = dr.SBOL_part_renderers() - > regs = None - > design = ... Design is created here ... - > ax = ... matplotlib axes created here ... - > start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) - - The function returns the start and end point of the design which can then - be used for resizing the axes and figure. For more advanced use cases we - advise looking at the gallery distributed with this module. + This module is designed to allow for highly customisable visualisation of DNA + fragments. Diagrams can be in the form of conceptual SBOL compliant icons or + make use of icons whose width is scaled to allow for easier comparison of part + locations to trace information, such as for corresponding RNA-seq read depth + data. All plotting is performed using matplotlib and to an axis object. This + enables the export of publication quality, vector-based figures. Furthermore, + all standard renderers can be replaced with user defined versions to allow + for full customisation of the plot. + + To make use of this module it is necessary to create the rendering object + after importing the module: + + > import dnaplotlib as dpl + > dr = dpl.DNARenderer() + + This object performs all rendering using the renderDNA() method. To describe + what should be plotted, dnaplotlib requires the DNA design in a specific + format. For standard SBOL diagrams a design is a list of dictionaries where + each dictionary relates to a specific part and as a minimum contains the + keys: + + - name: A name that can be potentially used in regulation. + - type: The type of part (decides which renderer to use). + - fwd: Boolean defining if the part is in a forward orientation. + - start: Start position (optional) + - end: End position (optional) + + Once this list is defined and an axis object is created the design can be + draw using standard renders and to a user created matplotlib axes by running: + + > reg_renderers = dr.std_reg_renderers() + > part_renderers = dr.SBOL_part_renderers() + > regs = None + > design = ... Design is created here ... + > ax = ... matplotlib axes created here ... + > start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) + + The function returns the start and end point of the design which can then + be used for resizing the axes and figure. For more advanced use cases we + advise looking at the gallery distributed with this module. """ @@ -61,8 +61,8 @@ __author__ = 'Thomas E. Gorochowski \n\ - Bryan Der \n\ - Emerson Glassey ' + Bryan Der \n\ + Emerson Glassey ' __license__ = 'MIT' __version__ = '1.0' @@ -73,296 +73,295 @@ def write_label (ax, label_text, x_pos, opts=None): - """ Renders labels on parts. - """ - zorder_add = 0.0 - y_offset = 0.0 - label_style = 'normal' - label_size = 7 - label_y_offset = 0 - label_x_offset = 0 - label_color = (0,0,0) - label_rotation = 0 - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'label_style' in list(opts.keys()): - label_style = opts['label_style'] - if 'label_size' in list(opts.keys()): - label_size = opts['label_size'] - if 'label_y_offset' in list(opts.keys()): - label_y_offset = opts['label_y_offset'] - if 'label_x_offset' in list(opts.keys()): - label_x_offset = opts['label_x_offset'] - if 'label_color' in list(opts.keys()): - label_color = opts['label_color'] - if 'label_rotation' in list(opts.keys()): - label_rotation = opts['label_rotation'] - ax.text(x_pos+label_x_offset, label_y_offset+y_offset, label_text, horizontalalignment='center', - verticalalignment='center', fontsize=label_size, fontstyle=label_style, - color=label_color, rotation=label_rotation, zorder=30+zorder_add) + """ Renders labels on parts. + """ + zorder_add = 0.0 + y_offset = 0.0 + label_style = 'normal' + label_size = 7 + label_y_offset = 0 + label_x_offset = 0 + label_color = (0,0,0) + label_rotation = 0 + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'label_style' in list(opts.keys()): + label_style = opts['label_style'] + if 'label_size' in list(opts.keys()): + label_size = opts['label_size'] + if 'label_y_offset' in list(opts.keys()): + label_y_offset = opts['label_y_offset'] + if 'label_x_offset' in list(opts.keys()): + label_x_offset = opts['label_x_offset'] + if 'label_color' in list(opts.keys()): + label_color = opts['label_color'] + if 'label_rotation' in list(opts.keys()): + label_rotation = opts['label_rotation'] + ax.text(x_pos+label_x_offset, label_y_offset+y_offset, label_text, horizontalalignment='center', + verticalalignment='center', fontsize=label_size, fontstyle=label_style, + color=label_color, rotation=label_rotation, zorder=30+zorder_add) def sbol_promoter (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL promoter renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.0,0.0,0.0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 10 - x_extent = 10 - arrowhead_height = 2 - arrowhead_length = 4 - y_offset = 0 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - print(y_offset) - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Draw the promoter symbol - l1 = Line2D([start,start],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=9+zorder_add) - l2 = Line2D([start,start+dir_fac*x_extent-dir_fac*(arrowhead_length*0.5)], - [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=10+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - p1 = Polygon([(start+dir_fac*x_extent-dir_fac*arrowhead_length, - dir_fac*y_extent+(arrowhead_height)+y_offset), - (start+dir_fac*x_extent, - dir_fac*y_extent+y_offset), - (start+dir_fac*x_extent-dir_fac*arrowhead_length, - dir_fac*y_extent+y_offset-(arrowhead_height))], - facecolor=color, edgecolor=color, linewidth=linewidth, zorder=1+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 - ax.add_patch(p1) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL promoter renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.0,0.0,0.0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 10 + x_extent = 10 + arrowhead_height = 2 + arrowhead_length = 4 + y_offset = 0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Draw the promoter symbol + l1 = Line2D([start,start],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=9+zorder_add) + l2 = Line2D([start,start+dir_fac*x_extent-dir_fac*(arrowhead_length*0.5)], + [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=10+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + p1 = Polygon([(start+dir_fac*x_extent-dir_fac*arrowhead_length, + dir_fac*y_extent+(arrowhead_height)+y_offset), + (start+dir_fac*x_extent, + dir_fac*y_extent+y_offset), + (start+dir_fac*x_extent-dir_fac*arrowhead_length, + dir_fac*y_extent+y_offset-(arrowhead_height))], + facecolor=color, edgecolor=color, linewidth=linewidth, zorder=1+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 + ax.add_patch(p1) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_cds (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL coding sequence renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - hatch = '' - start_pad = 1.0 - end_pad = 1.0 - y_extent = 5 - x_extent = 30 - arrowhead_height = 4 - arrowhead_length = 8 - edgecolor = (0,0,0) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'hatch' in list(opts.keys()): - hatch = opts['hatch'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'edgecolor' in list(opts.keys()): - edgecolor = opts['edgecolor'] - - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Draw the CDS symbol - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (end-dir_fac*arrowhead_length, -y_extent), - (end-dir_fac*arrowhead_length, -y_extent-arrowhead_height), - (end, 0), - (end-dir_fac*arrowhead_length, y_extent+arrowhead_height), - (end-dir_fac*arrowhead_length, y_extent)], - edgecolor=edgecolor, facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 - ax.add_patch(p1) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL coding sequence renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + hatch = '' + start_pad = 1.0 + end_pad = 1.0 + y_extent = 5 + x_extent = 30 + arrowhead_height = 4 + arrowhead_length = 8 + edgecolor = (0,0,0) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'hatch' in list(opts.keys()): + hatch = opts['hatch'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] + + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Draw the CDS symbol + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (end-dir_fac*arrowhead_length, -y_extent), + (end-dir_fac*arrowhead_length, -y_extent-arrowhead_height), + (end, 0), + (end-dir_fac*arrowhead_length, y_extent+arrowhead_height), + (end-dir_fac*arrowhead_length, y_extent)], + edgecolor=edgecolor, facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0 + ax.add_patch(p1) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_terminator (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL terminator renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 10.0 - x_extent = 8.0 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Draw the terminator symbol - l1 = Line2D([start+dir_fac*(x_extent/2.0),start+dir_fac*(x_extent/2.0)],[0,dir_fac*y_extent], linewidth=linewidth, - color=color, zorder=8+zorder_add) - l2 = Line2D([start,start+(dir_fac*x_extent)],[dir_fac*y_extent,dir_fac*y_extent], - linewidth=linewidth, color=color, zorder=9+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL terminator renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 10.0 + x_extent = 8.0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Draw the terminator symbol + l1 = Line2D([start+dir_fac*(x_extent/2.0),start+dir_fac*(x_extent/2.0)],[0,dir_fac*y_extent], linewidth=linewidth, + color=color, zorder=8+zorder_add) + l2 = Line2D([start,start+(dir_fac*x_extent)],[dir_fac*y_extent,dir_fac*y_extent], + linewidth=linewidth, color=color, zorder=9+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_aptamer (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL terminator renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 0 - end_pad = 0 - y_extent = 12.0 - x_extent = 12.0 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad - end = start+x_extent - final_end = end+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Draw the aptamer symbol - aptavertex = np.array([[ 0.43387125, -0.01575775], + """ Built-in SBOL terminator renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 0 + end_pad = 0 + y_extent = 12.0 + x_extent = 12.0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad + end = start+x_extent + final_end = end+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Draw the aptamer symbol + aptavertex = np.array([[ 0.43387125, -0.01575775], [ 0.43387125, 0.27341225], [ 0.51520025, 0.29435275], [ 0.57536225, 0.3680035 ], @@ -397,1978 +396,1978 @@ def sbol_aptamer (ax, type, num, start, end, prev_end, scale, linewidth, opts): [ 0.25817825, 0.294353 ], [ 0.33950725, 0.2734125 ], [ 0.33950725, -0.0157575 ]]) - aptacodes = [1, 2, 4, 4, 4, 4,\ - 4, 4, 2, 4, 4, 4,\ - 4, 4, 4, 4, 4, 4,\ - 4, 4, 4, 4, 4, 4,\ - 2, 4, 4, 4, 4, 4,\ - 4, 4, 4, 4, 2] - aptavertexFlip = np.dot(aptavertex,np.array([[-1,0],[0,-1]]))+(1,0) - aptavertexScaled = aptavertex*(x_extent,y_extent)+(start,0) - aptavertexFlipScaled = aptavertexFlip*(x_extent,y_extent)+(start,0) - #aptapath = Path(aptavertex,aptacodes) - #aptapathFlip = Path(aptavertexFlip,aptacodes) - - if(dir_fac==-1): - aptapath = Path(aptavertexFlipScaled,aptacodes) - else: - aptapath = Path(aptavertexScaled,aptacodes) - aptapatch = PathPatch(aptapath, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=8+zorder_add, linestyle='-') - - ax.add_patch(aptapatch) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + aptacodes = [1, 2, 4, 4, 4, 4,\ + 4, 4, 2, 4, 4, 4,\ + 4, 4, 4, 4, 4, 4,\ + 4, 4, 4, 4, 4, 4,\ + 2, 4, 4, 4, 4, 4,\ + 4, 4, 4, 4, 2] + aptavertexFlip = np.dot(aptavertex,np.array([[-1,0],[0,-1]]))+(1,0) + aptavertexScaled = aptavertex*(x_extent,y_extent)+(start,0) + aptavertexFlipScaled = aptavertexFlip*(x_extent,y_extent)+(start,0) + #aptapath = Path(aptavertex,aptacodes) + #aptapathFlip = Path(aptavertexFlip,aptacodes) + + if(dir_fac==-1): + aptapath = Path(aptavertexFlipScaled,aptacodes) + else: + aptapath = Path(aptavertexScaled,aptacodes) + aptapatch = PathPatch(aptapath, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=8+zorder_add, linestyle='-') + + ax.add_patch(aptapatch) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_rbs (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL ribosome binding site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 10.0 - edgecolor = (0,0,0) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'edgecolor' in list(opts.keys()): - edgecolor = opts['edgecolor'] - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - rbs_center = (0,0) - if start > end: - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - rbs_center = (end+((start-end)/2.0),0) - w1 = Wedge(rbs_center, x_extent/2.0, 180, 360, linewidth=linewidth, - facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) - ax.add_patch(w1) - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - rbs_center = (start+((end-start)/2.0),0) - w1 = Wedge(rbs_center, x_extent/2.0, 0, 180, linewidth=linewidth, - facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) - ax.add_patch(w1) - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL ribosome binding site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 10.0 + edgecolor = (0,0,0) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + rbs_center = (0,0) + if start > end: + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + rbs_center = (end+((start-end)/2.0),0) + w1 = Wedge(rbs_center, x_extent/2.0, 180, 360, linewidth=linewidth, + facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) + ax.add_patch(w1) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + rbs_center = (start+((end-start)/2.0),0) + w1 = Wedge(rbs_center, x_extent/2.0, 0, 180, linewidth=linewidth, + facecolor=color, edgecolor=edgecolor, zorder=8+zorder_add) + ax.add_patch(w1) + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_ribozyme (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL ribozyme renderer. - """ - return stick_figure(ax,type,num,start,end,prev_end,scale,linewidth,opts) + """ Built-in SBOL ribozyme renderer. + """ + return stick_figure(ax,type,num,start,end,prev_end,scale,linewidth,opts) def stick_figure (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ General function for drawing stick based parts (e.g., ribozyme and protease sites). - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 5.0 - y_extent = 10.0 - linestyle = '-' - linetype = "" - shapetype = "" - if(type == "Ribozyme"): - linetype = 'dash' - headgroup = 'O' - elif(type == "Protease"): - linetype = 'dash' - headgroup = 'X' - elif(type == "ProteinStability"): - linetype = 'solid' - headgroup = 'O' - elif(type == "Ribonuclease"): - linetype = 'solid' - headgroup = 'X' - - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - if start > end: - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - rbs_center = (end+((start-end)/2.0),-y_extent) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=8+zorder_add) - x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.5], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[-y_extent/1.5,-y_extent*1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - - dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent/4], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[-y_extent/2,-y_extent+(x_extent/2.0)], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent+(x_extent/2.0)], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - - if(headgroup == "O" and linetype == "dash"): - ax.add_patch(c1) - ax.add_line(dash1) - ax.add_line(dash2) - elif(headgroup == "X" and linetype == "dash"): - ax.add_line(x1) - ax.add_line(x2) - ax.add_line(dash1) - ax.add_line(dash2) - elif(headgroup == "O" and linetype == "solid"): - ax.add_patch(c1) - ax.add_line(solidO) - elif(headgroup == "X" and linetype == "solid"): - ax.add_line(x1) - ax.add_line(x2) - ax.add_line(solidX) - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - rbs_center = (start+((end-start)/2.0),y_extent) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=8+zorder_add) - x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.5], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[y_extent/1.5,y_extent*1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - - dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent/4], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[y_extent/2,y_extent-(x_extent/2.0)], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent-(x_extent/2.0)], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - - if(headgroup == 'O' and linetype == 'dash'): - ax.add_patch(c1) - ax.add_line(dash1) - ax.add_line(dash2) - elif(headgroup == "X" and linetype == "dash"): - ax.add_line(x1) - ax.add_line(x2) - ax.add_line(dash1) - ax.add_line(dash2) - elif(headgroup == "O" and linetype == "solid"): - ax.add_patch(c1) - ax.add_line(solidO) - elif(headgroup == "X" and linetype == "solid"): - ax.add_line(x1) - ax.add_line(x2) - ax.add_line(solidX) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ General function for drawing stick based parts (e.g., ribozyme and protease sites). + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 5.0 + y_extent = 10.0 + linestyle = '-' + linetype = "" + shapetype = "" + if(type == "Ribozyme"): + linetype = 'dash' + headgroup = 'O' + elif(type == "Protease"): + linetype = 'dash' + headgroup = 'X' + elif(type == "ProteinStability"): + linetype = 'solid' + headgroup = 'O' + elif(type == "Ribonuclease"): + linetype = 'solid' + headgroup = 'X' + + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + if start > end: + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + rbs_center = (end+((start-end)/2.0),-y_extent) + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=8+zorder_add) + x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.5], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + x2 = Line2D([start,end],[-y_extent/1.5,-y_extent*1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + + dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent/4], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[-y_extent/2,-y_extent+(x_extent/2.0)], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent+(x_extent/2.0)], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,-y_extent], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + + if(headgroup == "O" and linetype == "dash"): + ax.add_patch(c1) + ax.add_line(dash1) + ax.add_line(dash2) + elif(headgroup == "X" and linetype == "dash"): + ax.add_line(x1) + ax.add_line(x2) + ax.add_line(dash1) + ax.add_line(dash2) + elif(headgroup == "O" and linetype == "solid"): + ax.add_patch(c1) + ax.add_line(solidO) + elif(headgroup == "X" and linetype == "solid"): + ax.add_line(x1) + ax.add_line(x2) + ax.add_line(solidX) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + rbs_center = (start+((end-start)/2.0),y_extent) + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=8+zorder_add) + x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.5], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + x2 = Line2D([start,end],[y_extent/1.5,y_extent*1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + + dash1 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent/4], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + dash2 = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[y_extent/2,y_extent-(x_extent/2.0)], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + solidO = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent-(x_extent/2.0)], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + solidX = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + + if(headgroup == 'O' and linetype == 'dash'): + ax.add_patch(c1) + ax.add_line(dash1) + ax.add_line(dash2) + elif(headgroup == "X" and linetype == "dash"): + ax.add_line(x1) + ax.add_line(x2) + ax.add_line(dash1) + ax.add_line(dash2) + elif(headgroup == "O" and linetype == "solid"): + ax.add_patch(c1) + ax.add_line(solidO) + elif(headgroup == "X" and linetype == "solid"): + ax.add_line(x1) + ax.add_line(x2) + ax.add_line(solidX) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_stem_top (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ General function for drawing stem-top parts (e.g., ribozyme and protease sites). - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 5.0 - y_extent = 10.0 - linestyle = '-' - shapetype = ""; - if type in ["DNACleavageSite"]: - stemtype = 'straight' - toptype = 'X' - elif type in ["RNACleavageSite", "Ribonuclease"]: - stemtype = 'wavy' - toptype = 'X' - elif type in ["ProteinCleavageSite", "Protease"]: - stemtype = 'loopy' - toptype = 'X' - elif type in ["DNALocation"]: - stemtype = 'straight' - toptype = 'O' - elif type in ["RNALocation"]: - stemtype = 'wavy' - toptype = 'O' - elif type in ["ProteinLocation"]: - stemtype = 'loopy' - toptype = 'O' - elif type in ["DNAStability"]: - stemtype = 'straight' - toptype = 'P' - elif type in ["RNAStability"]: - stemtype = 'wavy' - toptype = 'P' - elif type in ["ProteinStability"]: - stemtype = 'loopy' - toptype = 'P' - elif type in ["StemTop"]: - stemtype = opts['stem'] - toptype = opts['top'] - - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - if start > end: - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - # Patches and lines for top glyph - # toptype=="X" - x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[-y_extent/1.25,-y_extent*1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - # toptype=="O" - center = (end+((start-end)/2.0),-y_extent) - c1 = Circle(center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - # toptype=='P' - pentagon_xy = [[end, -y_extent*1.25], - [end, -y_extent*0.87], - [(start + end)/2, -y_extent*0.68], - [start, -y_extent*0.87], - [start, -y_extent*1.25], - ] - p1 = Polygon(pentagon_xy, closed=True, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - - # Lines for stem glyph - # stemtype=='straight' - straight_stem = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0, -y_extent], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - # stemtype=='wavy' - wave_height = y_extent/6 - wave_start = (start + end)/2 - wave_bezier_amp = x_extent*0.2 - wave_bezier_dx = wave_bezier_amp*math.cos(math.pi/4) - wave_bezier_dy = wave_bezier_amp*math.sin(math.pi/4) - wavy_stem_path = Path(vertices=[[wave_start, 0], - [wave_start - wave_bezier_dx, -wave_bezier_dy], - [wave_start - wave_bezier_dx, -(wave_height - wave_bezier_dy)], - [wave_start, -wave_height], - [wave_start + wave_bezier_dx, -(wave_height + wave_bezier_dy)], - [wave_start + wave_bezier_dx, -(2*wave_height - wave_bezier_dy)], - [wave_start, -2*wave_height], - [wave_start - wave_bezier_dx, -(2*wave_height + wave_bezier_dy)], - [wave_start - wave_bezier_dx, -(3*wave_height - wave_bezier_dy)], - [wave_start, -3*wave_height], - [wave_start + wave_bezier_dx, -(3*wave_height + wave_bezier_dy)], - [wave_start + wave_bezier_dx, -(4*wave_height - wave_bezier_dy)], - [wave_start, -4*wave_height], - [wave_start - wave_bezier_dx, -(4*wave_height + wave_bezier_dy)], - [wave_start - wave_bezier_dx, -(5*wave_height - wave_bezier_dy)], - [wave_start, -5*wave_height], - [wave_start + wave_bezier_dx, -(5*wave_height + wave_bezier_dy)], - [wave_start + wave_bezier_dx, -(6*wave_height - wave_bezier_dy)], - [wave_start, -6*wave_height]], - codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) - wavy_stem = PathPatch(wavy_stem_path, linewidth=linewidth, edgecolor=color, - facecolor='none', zorder=8+zorder_add, linestyle=linestyle) - # stemtype=='loopy' - loop_offset_y = y_extent*0.015 - loop_height = (y_extent - 2*loop_offset_y)/4 - loop_start = (start + end)/2 + x_extent*0.05 - loop_end = end + x_extent*0.15 - loop_bezier_amp = y_extent*0.03 - loop_stem_path = Path(vertices=[[loop_start, -loop_offset_y], - [loop_start, -(loop_offset_y - loop_bezier_amp)], - [loop_end, -(loop_offset_y - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*0.5)], - [loop_end, -(loop_offset_y + loop_height + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height)], - [loop_start, -(loop_offset_y + loop_height - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*1.5)], - [loop_end, -(loop_offset_y + loop_height*2 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*2 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*2)], - [loop_start, -(loop_offset_y + loop_height*2 - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*2 - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*2.5)], - [loop_end, -(loop_offset_y + loop_height*3 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*3 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*3)], - [loop_start, -(loop_offset_y + loop_height*3 - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*3 - loop_bezier_amp)], - [loop_end, -(loop_offset_y + loop_height*3.5)], - [loop_end, -(loop_offset_y + loop_height*4 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*4 + loop_bezier_amp)], - [loop_start, -(loop_offset_y + loop_height*4)], - ], - codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) - loop_stem = PathPatch(loop_stem_path, linewidth=linewidth, edgecolor=color, - facecolor='none', zorder=8+zorder_add, linestyle=linestyle) - - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - # Patches and lines for top glyph - # toptype=="X" - x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - x2 = Line2D([start,end],[y_extent/1.25,y_extent*1.25], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') - - # toptype=="O" - center = (start+((end-start)/2.0),y_extent) - c1 = Circle(center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - # toptype=='P' - pentagon_xy = [[start, y_extent*1.25], - [start, y_extent*0.87], - [(start + end)/2, y_extent*0.68], - [end, y_extent*0.87], - [end, y_extent*1.25], - ] - p1 = Polygon(pentagon_xy, closed=True, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - - # Lines for stem glyph - # stemtype=='straight' - straight_stem = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], - linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) - # stemtype=='wavy' - wave_height = y_extent/6 - wave_start = (start + end)/2 - wave_bezier_amp = x_extent*0.2 - wave_bezier_dx = wave_bezier_amp*math.cos(math.pi/4) - wave_bezier_dy = wave_bezier_amp*math.sin(math.pi/4) - wavy_stem_path = Path(vertices=[[wave_start, 0], - [wave_start + wave_bezier_dx, wave_bezier_dy], - [wave_start + wave_bezier_dx, wave_height - wave_bezier_dy], - [wave_start, wave_height], - [wave_start - wave_bezier_dx, wave_height + wave_bezier_dy], - [wave_start - wave_bezier_dx, 2*wave_height - wave_bezier_dy], - [wave_start, 2*wave_height], - [wave_start + wave_bezier_dx, 2*wave_height + wave_bezier_dy], - [wave_start + wave_bezier_dx, 3*wave_height - wave_bezier_dy], - [wave_start, 3*wave_height], - [wave_start - wave_bezier_dx, 3*wave_height + wave_bezier_dy], - [wave_start - wave_bezier_dx, 4*wave_height - wave_bezier_dy], - [wave_start, 4*wave_height], - [wave_start + wave_bezier_dx, 4*wave_height + wave_bezier_dy], - [wave_start + wave_bezier_dx, 5*wave_height - wave_bezier_dy], - [wave_start, 5*wave_height], - [wave_start - wave_bezier_dx, 5*wave_height + wave_bezier_dy], - [wave_start - wave_bezier_dx, 6*wave_height - wave_bezier_dy], - [wave_start, 6*wave_height]], - codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) - wavy_stem = PathPatch(wavy_stem_path, linewidth=linewidth, edgecolor=color, - facecolor='none', zorder=8+zorder_add, linestyle=linestyle) - # stemtype=='loopy' - loop_offset_y = y_extent*0.015 - loop_height = (y_extent - 2*loop_offset_y)/4 - loop_start = (start + end)/2 - x_extent*0.05 - loop_end = end - x_extent*0.15 - loop_bezier_amp = y_extent*0.03 - loop_stem_path = Path(vertices=[[loop_start, loop_offset_y], - [loop_start, loop_offset_y - loop_bezier_amp], - [loop_end, loop_offset_y - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*0.5], - [loop_end, loop_offset_y + loop_height + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height], - [loop_start, loop_offset_y + loop_height - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*1.5], - [loop_end, loop_offset_y + loop_height*2 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*2 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*2], - [loop_start, loop_offset_y + loop_height*2 - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*2 - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*2.5], - [loop_end, loop_offset_y + loop_height*3 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*3 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*3], - [loop_start, loop_offset_y + loop_height*3 - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*3 - loop_bezier_amp], - [loop_end, loop_offset_y + loop_height*3.5], - [loop_end, loop_offset_y + loop_height*4 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*4 + loop_bezier_amp], - [loop_start, loop_offset_y + loop_height*4], - ], - codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) - loop_stem = PathPatch(loop_stem_path, linewidth=linewidth, edgecolor=color, - facecolor='none', zorder=8+zorder_add, linestyle=linestyle) - - # Add stem patches and/or lines - if stemtype == 'straight': - ax.add_line(straight_stem) - elif stemtype == 'wavy': - ax.add_line(wavy_stem) - elif stemtype == 'loopy': - ax.add_line(loop_stem) - - # Add top patches and/or lines - if toptype == 'O': - ax.add_patch(c1) - elif toptype == 'X': - ax.add_line(x1) - ax.add_line(x2) - elif toptype == 'P': - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ General function for drawing stem-top parts (e.g., ribozyme and protease sites). + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 5.0 + y_extent = 10.0 + linestyle = '-' + shapetype = ""; + if type in ["DNACleavageSite"]: + stemtype = 'straight' + toptype = 'X' + elif type in ["RNACleavageSite", "Ribonuclease"]: + stemtype = 'wavy' + toptype = 'X' + elif type in ["ProteinCleavageSite", "Protease"]: + stemtype = 'loopy' + toptype = 'X' + elif type in ["DNALocation"]: + stemtype = 'straight' + toptype = 'O' + elif type in ["RNALocation"]: + stemtype = 'wavy' + toptype = 'O' + elif type in ["ProteinLocation"]: + stemtype = 'loopy' + toptype = 'O' + elif type in ["DNAStability"]: + stemtype = 'straight' + toptype = 'P' + elif type in ["RNAStability"]: + stemtype = 'wavy' + toptype = 'P' + elif type in ["ProteinStability"]: + stemtype = 'loopy' + toptype = 'P' + elif type in ["StemTop"]: + stemtype = opts['stem'] + toptype = opts['top'] + + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + if start > end: + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + # Patches and lines for top glyph + # toptype=="X" + x1 = Line2D([start,end],[-y_extent*1.25,-y_extent/1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + x2 = Line2D([start,end],[-y_extent/1.25,-y_extent*1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + # toptype=="O" + center = (end+((start-end)/2.0),-y_extent) + c1 = Circle(center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + # toptype=='P' + pentagon_xy = [[end, -y_extent*1.25], + [end, -y_extent*0.87], + [(start + end)/2, -y_extent*0.68], + [start, -y_extent*0.87], + [start, -y_extent*1.25], + ] + p1 = Polygon(pentagon_xy, closed=True, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + + # Lines for stem glyph + # stemtype=='straight' + straight_stem = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0, -y_extent], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + # stemtype=='wavy' + wave_height = y_extent/6 + wave_start = (start + end)/2 + wave_bezier_amp = x_extent*0.2 + wave_bezier_dx = wave_bezier_amp*math.cos(math.pi/4) + wave_bezier_dy = wave_bezier_amp*math.sin(math.pi/4) + wavy_stem_path = Path(vertices=[[wave_start, 0], + [wave_start - wave_bezier_dx, -wave_bezier_dy], + [wave_start - wave_bezier_dx, -(wave_height - wave_bezier_dy)], + [wave_start, -wave_height], + [wave_start + wave_bezier_dx, -(wave_height + wave_bezier_dy)], + [wave_start + wave_bezier_dx, -(2*wave_height - wave_bezier_dy)], + [wave_start, -2*wave_height], + [wave_start - wave_bezier_dx, -(2*wave_height + wave_bezier_dy)], + [wave_start - wave_bezier_dx, -(3*wave_height - wave_bezier_dy)], + [wave_start, -3*wave_height], + [wave_start + wave_bezier_dx, -(3*wave_height + wave_bezier_dy)], + [wave_start + wave_bezier_dx, -(4*wave_height - wave_bezier_dy)], + [wave_start, -4*wave_height], + [wave_start - wave_bezier_dx, -(4*wave_height + wave_bezier_dy)], + [wave_start - wave_bezier_dx, -(5*wave_height - wave_bezier_dy)], + [wave_start, -5*wave_height], + [wave_start + wave_bezier_dx, -(5*wave_height + wave_bezier_dy)], + [wave_start + wave_bezier_dx, -(6*wave_height - wave_bezier_dy)], + [wave_start, -6*wave_height]], + codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) + wavy_stem = PathPatch(wavy_stem_path, linewidth=linewidth, edgecolor=color, + facecolor='none', zorder=8+zorder_add, linestyle=linestyle) + # stemtype=='loopy' + loop_offset_y = y_extent*0.015 + loop_height = (y_extent - 2*loop_offset_y)/4 + loop_start = (start + end)/2 + x_extent*0.05 + loop_end = end + x_extent*0.15 + loop_bezier_amp = y_extent*0.03 + loop_stem_path = Path(vertices=[[loop_start, -loop_offset_y], + [loop_start, -(loop_offset_y - loop_bezier_amp)], + [loop_end, -(loop_offset_y - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*0.5)], + [loop_end, -(loop_offset_y + loop_height + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height)], + [loop_start, -(loop_offset_y + loop_height - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*1.5)], + [loop_end, -(loop_offset_y + loop_height*2 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*2 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*2)], + [loop_start, -(loop_offset_y + loop_height*2 - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*2 - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*2.5)], + [loop_end, -(loop_offset_y + loop_height*3 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*3 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*3)], + [loop_start, -(loop_offset_y + loop_height*3 - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*3 - loop_bezier_amp)], + [loop_end, -(loop_offset_y + loop_height*3.5)], + [loop_end, -(loop_offset_y + loop_height*4 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*4 + loop_bezier_amp)], + [loop_start, -(loop_offset_y + loop_height*4)], + ], + codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) + loop_stem = PathPatch(loop_stem_path, linewidth=linewidth, edgecolor=color, + facecolor='none', zorder=8+zorder_add, linestyle=linestyle) + + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + # Patches and lines for top glyph + # toptype=="X" + x1 = Line2D([start,end],[y_extent*1.25,y_extent/1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + x2 = Line2D([start,end],[y_extent/1.25,y_extent*1.25], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle='-') + + # toptype=="O" + center = (start+((end-start)/2.0),y_extent) + c1 = Circle(center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + # toptype=='P' + pentagon_xy = [[start, y_extent*1.25], + [start, y_extent*0.87], + [(start + end)/2, y_extent*0.68], + [end, y_extent*0.87], + [end, y_extent*1.25], + ] + p1 = Polygon(pentagon_xy, closed=True, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + + # Lines for stem glyph + # stemtype=='straight' + straight_stem = Line2D([end+((start-end)/2.0),end+((start-end)/2.0)],[0,y_extent], + linewidth=linewidth, color=color, zorder=8+zorder_add, linestyle=linestyle) + # stemtype=='wavy' + wave_height = y_extent/6 + wave_start = (start + end)/2 + wave_bezier_amp = x_extent*0.2 + wave_bezier_dx = wave_bezier_amp*math.cos(math.pi/4) + wave_bezier_dy = wave_bezier_amp*math.sin(math.pi/4) + wavy_stem_path = Path(vertices=[[wave_start, 0], + [wave_start + wave_bezier_dx, wave_bezier_dy], + [wave_start + wave_bezier_dx, wave_height - wave_bezier_dy], + [wave_start, wave_height], + [wave_start - wave_bezier_dx, wave_height + wave_bezier_dy], + [wave_start - wave_bezier_dx, 2*wave_height - wave_bezier_dy], + [wave_start, 2*wave_height], + [wave_start + wave_bezier_dx, 2*wave_height + wave_bezier_dy], + [wave_start + wave_bezier_dx, 3*wave_height - wave_bezier_dy], + [wave_start, 3*wave_height], + [wave_start - wave_bezier_dx, 3*wave_height + wave_bezier_dy], + [wave_start - wave_bezier_dx, 4*wave_height - wave_bezier_dy], + [wave_start, 4*wave_height], + [wave_start + wave_bezier_dx, 4*wave_height + wave_bezier_dy], + [wave_start + wave_bezier_dx, 5*wave_height - wave_bezier_dy], + [wave_start, 5*wave_height], + [wave_start - wave_bezier_dx, 5*wave_height + wave_bezier_dy], + [wave_start - wave_bezier_dx, 6*wave_height - wave_bezier_dy], + [wave_start, 6*wave_height]], + codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) + wavy_stem = PathPatch(wavy_stem_path, linewidth=linewidth, edgecolor=color, + facecolor='none', zorder=8+zorder_add, linestyle=linestyle) + # stemtype=='loopy' + loop_offset_y = y_extent*0.015 + loop_height = (y_extent - 2*loop_offset_y)/4 + loop_start = (start + end)/2 - x_extent*0.05 + loop_end = end - x_extent*0.15 + loop_bezier_amp = y_extent*0.03 + loop_stem_path = Path(vertices=[[loop_start, loop_offset_y], + [loop_start, loop_offset_y - loop_bezier_amp], + [loop_end, loop_offset_y - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*0.5], + [loop_end, loop_offset_y + loop_height + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height], + [loop_start, loop_offset_y + loop_height - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*1.5], + [loop_end, loop_offset_y + loop_height*2 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*2 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*2], + [loop_start, loop_offset_y + loop_height*2 - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*2 - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*2.5], + [loop_end, loop_offset_y + loop_height*3 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*3 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*3], + [loop_start, loop_offset_y + loop_height*3 - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*3 - loop_bezier_amp], + [loop_end, loop_offset_y + loop_height*3.5], + [loop_end, loop_offset_y + loop_height*4 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*4 + loop_bezier_amp], + [loop_start, loop_offset_y + loop_height*4], + ], + codes=[1, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4, 4,4,4]) + loop_stem = PathPatch(loop_stem_path, linewidth=linewidth, edgecolor=color, + facecolor='none', zorder=8+zorder_add, linestyle=linestyle) + + # Add stem patches and/or lines + if stemtype == 'straight': + ax.add_line(straight_stem) + elif stemtype == 'wavy': + ax.add_line(wavy_stem) + elif stemtype == 'loopy': + ax.add_line(loop_stem) + + # Add top patches and/or lines + if toptype == 'O': + ax.add_patch(c1) + elif toptype == 'X': + ax.add_line(x1) + ax.add_line(x2) + elif toptype == 'P': + ax.add_patch(p1) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_scar (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL scar renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 6.0 - y_extent = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start,start+x_extent],[-1*y_extent,-1*y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - ax.add_line(l_top) - ax.add_line(l_bottom) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL scar renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 6.0 + y_extent = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + l_top = Line2D([start,start+x_extent],[y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l_bottom = Line2D([start,start+x_extent],[-1*y_extent,-1*y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + ax.add_line(l_top) + ax.add_line(l_bottom) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_empty_space (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in empty space renderer. - """ - # Default options - zorder_add = 0.0 - x_extent = 12.0 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - # Check direction add start padding - final_start = prev_end - final_end = final_start+x_extent - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in empty space renderer. + """ + # Default options + zorder_add = 0.0 + x_extent = 12.0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + # Check direction add start padding + final_start = prev_end + final_end = final_start+x_extent + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_5_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL 5' overhang renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 0.0 - end_pad = 2.0 - x_extent = 6.0 - y_extent = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - fliptopbottom = 1 - final_start = prev_end - spmod = 0 - if(start > end): - start = prev_end+end_pad - end = start+x_extent - fliptopbottom = -1 - final_end = end+start_pad - spmod = (x_extent/2.0) - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent*fliptopbottom,y_extent*fliptopbottom], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start+(x_extent/2.0)-spmod,start+x_extent-spmod],[-1*y_extent*fliptopbottom,-1*y_extent*fliptopbottom], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - ax.add_line(l_top) - ax.add_line(l_bottom) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL 5' overhang renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 0.0 + end_pad = 2.0 + x_extent = 6.0 + y_extent = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + fliptopbottom = 1 + final_start = prev_end + spmod = 0 + if(start > end): + start = prev_end+end_pad + end = start+x_extent + fliptopbottom = -1 + final_end = end+start_pad + spmod = (x_extent/2.0) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + l_top = Line2D([start,start+x_extent],[y_extent*fliptopbottom,y_extent*fliptopbottom], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l_bottom = Line2D([start+(x_extent/2.0)-spmod,start+x_extent-spmod],[-1*y_extent*fliptopbottom,-1*y_extent*fliptopbottom], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + ax.add_line(l_top) + ax.add_line(l_bottom) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_3_overhang (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL 3' overhang renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 0.0 - x_extent = 6.0 - y_extent = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - fliptopbottom = 1 - final_start = prev_end - spmod = 0 - if(start > end): - start = prev_end+end_pad - end = start+x_extent - fliptopbottom = -1 - final_end = end+start_pad - spmod = (x_extent/2.0) - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - l_top = Line2D([start,start+x_extent],[y_extent*fliptopbottom,y_extent*fliptopbottom], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l_bottom = Line2D([start+spmod,start+(x_extent/2.0)+spmod],[-1*y_extent*fliptopbottom,-1*y_extent*fliptopbottom], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - ax.add_line(l_top) - ax.add_line(l_bottom) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL 3' overhang renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 0.0 + x_extent = 6.0 + y_extent = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + fliptopbottom = 1 + final_start = prev_end + spmod = 0 + if(start > end): + start = prev_end+end_pad + end = start+x_extent + fliptopbottom = -1 + final_end = end+start_pad + spmod = (x_extent/2.0) + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + l_top = Line2D([start,start+x_extent],[y_extent*fliptopbottom,y_extent*fliptopbottom], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l_bottom = Line2D([start+spmod,start+(x_extent/2.0)+spmod],[-1*y_extent*fliptopbottom,-1*y_extent*fliptopbottom], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + ax.add_line(l_top) + ax.add_line(l_bottom) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_blunt_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL blunt-end restriction site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 4.0 - x_extent = 1.5 - site_space = 1.5 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'site_space' in list(opts.keys()): - site_space = opts['site_space'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - # Direction is meaningless for this part => start is always < end - if start > end: - temp_end = end - end = start - start = temp_end - - # Check direction add start padding - final_end = end - final_start = prev_end - start = prev_end+start_pad - end = start+x_extent+site_space+x_extent - final_end = end+end_pad - - l1 = Line2D([start+x_extent,start+x_extent],[-y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start,start+x_extent],[y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start,start+x_extent],[-y_extent,-y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - - l2 = Line2D([end-x_extent,end-x_extent],[-y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l2_top = Line2D([end,end-x_extent],[y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l2_bottom = Line2D([end,end-x_extent],[-y_extent,-y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - - ax.add_line(l1) - ax.add_line(l1_top) - ax.add_line(l1_bottom) - ax.add_line(l2) - ax.add_line(l2_top) - ax.add_line(l2_bottom) - - if opts != None and 'label' in list(opts.keys()): - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - return final_start, final_end + """ Built-in SBOL blunt-end restriction site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 4.0 + x_extent = 1.5 + site_space = 1.5 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'site_space' in list(opts.keys()): + site_space = opts['site_space'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + # Direction is meaningless for this part => start is always < end + if start > end: + temp_end = end + end = start + start = temp_end + + # Check direction add start padding + final_end = end + final_start = prev_end + start = prev_end+start_pad + end = start+x_extent+site_space+x_extent + final_end = end+end_pad + + l1 = Line2D([start+x_extent,start+x_extent],[-y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_top = Line2D([start,start+x_extent],[y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_bottom = Line2D([start,start+x_extent],[-y_extent,-y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + + l2 = Line2D([end-x_extent,end-x_extent],[-y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l2_top = Line2D([end,end-x_extent],[y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l2_bottom = Line2D([end,end-x_extent],[-y_extent,-y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + + ax.add_line(l1) + ax.add_line(l1_top) + ax.add_line(l1_bottom) + ax.add_line(l2) + ax.add_line(l2_top) + ax.add_line(l2_bottom) + + if opts != None and 'label' in list(opts.keys()): + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + return final_start, final_end def sbol_primer_binding_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL primer binding site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 2.0 - y_offset = 1.5 - x_extent = 8.0 - arrowhead_length = 2.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - direction = 'F' - if start > end: - direction = 'R' - temp_end = end - end = start - start = temp_end - - final_end = prev_end - final_start = prev_end - - if direction == 'F': - final_start = prev_end - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - else: - final_start = prev_end - end = prev_end+end_pad - start = end+x_extent - final_start = start+start_pad - - if direction == 'F': - verts = [(start, y_offset), (end, y_offset), (end-arrowhead_length, y_offset+y_extent)] - codes = [Path.MOVETO, Path.LINETO, Path.LINETO] - path = Path(verts, codes) - patch = PathPatch(path, lw=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=1+zorder_add) - ax.add_patch(patch) - else: - verts = [(start, -y_offset), (end, -y_offset), (end+arrowhead_length, -y_offset-y_extent)] - codes = [Path.MOVETO, Path.LINETO, Path.LINETO] - path = Path(verts, codes) - patch = PathPatch(path, lw=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=1+zorder_add) - ax.add_patch(patch) - - if opts != None and 'label' in list(opts.keys()): - if start > end: - write_label(ax, opts['label'], end+((start-end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start+((end-start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL primer binding site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 2.0 + y_offset = 1.5 + x_extent = 8.0 + arrowhead_length = 2.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + direction = 'F' + if start > end: + direction = 'R' + temp_end = end + end = start + start = temp_end + + final_end = prev_end + final_start = prev_end + + if direction == 'F': + final_start = prev_end + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + else: + final_start = prev_end + end = prev_end+end_pad + start = end+x_extent + final_start = start+start_pad + + if direction == 'F': + verts = [(start, y_offset), (end, y_offset), (end-arrowhead_length, y_offset+y_extent)] + codes = [Path.MOVETO, Path.LINETO, Path.LINETO] + path = Path(verts, codes) + patch = PathPatch(path, lw=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=1+zorder_add) + ax.add_patch(patch) + else: + verts = [(start, -y_offset), (end, -y_offset), (end+arrowhead_length, -y_offset-y_extent)] + codes = [Path.MOVETO, Path.LINETO, Path.LINETO] + path = Path(verts, codes) + patch = PathPatch(path, lw=linewidth, edgecolor=color, facecolor=(1,1,1), zorder=1+zorder_add) + ax.add_patch(patch) + + if opts != None and 'label' in list(opts.keys()): + if start > end: + write_label(ax, opts['label'], end+((start-end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start+((end-start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_5_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL 5' sticky-end restriction site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 4.0 - x_extent = 8.0 - end_space = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'end_space' in list(opts.keys()): - end_space = opts['end_space'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - # Direction is meaningless for this part => start is always < end - if start > end: - temp_end = end - end = start - start = temp_end - - # Check direction add start padding - final_end = end - final_start = prev_end - start = prev_end+start_pad - end = start+end_space+x_extent+end_space - final_end = end+end_pad - - l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start+end_space,start+end_space],[0,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,-y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(l1) - ax.add_line(l1_top) - ax.add_line(l1_bottom) - - # White rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (end, -y_extent), - (end, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - return final_start, final_end + """ Built-in SBOL 5' sticky-end restriction site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 4.0 + x_extent = 8.0 + end_space = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'end_space' in list(opts.keys()): + end_space = opts['end_space'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + # Direction is meaningless for this part => start is always < end + if start > end: + temp_end = end + end = start + start = temp_end + + # Check direction add start padding + final_end = end + final_start = prev_end + start = prev_end+start_pad + end = start+end_space+x_extent+end_space + final_end = end+end_pad + + l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_top = Line2D([start+end_space,start+end_space],[0,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_bottom = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,-y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(l1) + ax.add_line(l1_top) + ax.add_line(l1_bottom) + + # White rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (end, -y_extent), + (end, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + + if opts != None and 'label' in list(opts.keys()): + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + return final_start, final_end def sbol_3_sticky_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL 3' sticky-end restriction site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 4.0 - x_extent = 8.0 - end_space = 1.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'end_space' in list(opts.keys()): - end_space = opts['end_space'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - # Direction is meaningless for this part => start is always < end - if start > end: - temp_end = end - end = start - start = temp_end - - # Check direction add start padding - final_end = end - final_start = prev_end - start = prev_end+start_pad - end = start+end_space+x_extent+end_space - final_end = end+end_pad - - l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_top = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - l1_bottom = Line2D([start+end_space,start+end_space],[0,-y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(l1) - ax.add_line(l1_top) - ax.add_line(l1_bottom) - - # White rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (end, -y_extent), - (end, y_extent)], - edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - return final_start, final_end + """ Built-in SBOL 3' sticky-end restriction site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 4.0 + x_extent = 8.0 + end_space = 1.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'end_space' in list(opts.keys()): + end_space = opts['end_space'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + # Direction is meaningless for this part => start is always < end + if start > end: + temp_end = end + end = start + start = temp_end + + # Check direction add start padding + final_end = end + final_start = prev_end + start = prev_end+start_pad + end = start+end_space+x_extent+end_space + final_end = end+end_pad + + l1 = Line2D([start+end_space,start+end_space+x_extent],[0,0], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_top = Line2D([start+end_space+x_extent,start+end_space+x_extent],[0,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + l1_bottom = Line2D([start+end_space,start+end_space],[0,-y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(l1) + ax.add_line(l1_top) + ax.add_line(l1_bottom) + + # White rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (end, -y_extent), + (end, y_extent)], + edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + + if opts != None and 'label' in list(opts.keys()): + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + return final_start, final_end def sbol_user_defined (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL user-defined element renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 12.0 - y_extent = 3.0 - linestyle = '-' - fill_color = (1,1,1) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'fill_color' in list(opts.keys()): - fill_color = opts['fill_color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL user-defined element renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 12.0 + y_extent = 3.0 + linestyle = '-' + fill_color = (1,1,1) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'fill_color' in list(opts.keys()): + fill_color = opts['fill_color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_signature (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL signature renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 12.0 - y_extent = 3.0 - linestyle = '-' - fill_color = (1,1,1) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'fill_color' in list(opts.keys()): - fill_color = opts['fill_color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - - direction = 'F' - if start > end: - direction = 'R' - temp_end = end - end = start - start = temp_end - - final_end = prev_end - final_start = prev_end - - if direction == 'F': - final_start = prev_end - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - else: - final_start = prev_end - end = prev_end+end_pad - start = end+x_extent - final_start = start+start_pad - - indent_fac = (y_extent*2.0)*0.3 - cross_width = (y_extent*2.0)*0.7 - - if direction == 'F': - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - top1x = start + indent_fac - top1y = y_extent - indent_fac - top2x = start + cross_width - top2y = y_extent - indent_fac - bot1x = start + indent_fac - bot1y = -y_extent + indent_fac - bot2x = start + cross_width - bot2y = -y_extent + indent_fac - lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(lcross1) - ax.add_line(lcross2) - lsign = Line2D([bot2x+indent_fac,end-indent_fac],[-y_extent+indent_fac,-y_extent+indent_fac], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(lsign) - else: - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start-x_extent, -y_extent), - (start-x_extent, y_extent)], - edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - top1x = start - indent_fac - top1y = y_extent - indent_fac - top2x = start - cross_width - top2y = y_extent - indent_fac - bot1x = start - indent_fac - bot1y = -y_extent + indent_fac - bot2x = start - cross_width - bot2y = -y_extent + indent_fac - lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(lcross1) - ax.add_line(lcross2) - lsign = Line2D([bot2x-indent_fac,end+indent_fac],[y_extent-indent_fac,y_extent-indent_fac], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(lsign) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL signature renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 12.0 + y_extent = 3.0 + linestyle = '-' + fill_color = (1,1,1) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'fill_color' in list(opts.keys()): + fill_color = opts['fill_color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + + direction = 'F' + if start > end: + direction = 'R' + temp_end = end + end = start + start = temp_end + + final_end = prev_end + final_start = prev_end + + if direction == 'F': + final_start = prev_end + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + else: + final_start = prev_end + end = prev_end+end_pad + start = end+x_extent + final_start = start+start_pad + + indent_fac = (y_extent*2.0)*0.3 + cross_width = (y_extent*2.0)*0.7 + + if direction == 'F': + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + top1x = start + indent_fac + top1y = y_extent - indent_fac + top2x = start + cross_width + top2y = y_extent - indent_fac + bot1x = start + indent_fac + bot1y = -y_extent + indent_fac + bot2x = start + cross_width + bot2y = -y_extent + indent_fac + lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(lcross1) + ax.add_line(lcross2) + lsign = Line2D([bot2x+indent_fac,end-indent_fac],[-y_extent+indent_fac,-y_extent+indent_fac], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(lsign) + else: + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start-x_extent, -y_extent), + (start-x_extent, y_extent)], + edgecolor=color, facecolor=fill_color, linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + top1x = start - indent_fac + top1y = y_extent - indent_fac + top2x = start - cross_width + top2y = y_extent - indent_fac + bot1x = start - indent_fac + bot1y = -y_extent + indent_fac + bot2x = start - cross_width + bot2y = -y_extent + indent_fac + lcross1 = Line2D([top1x,bot2x],[top1y,bot2y], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + lcross2 = Line2D([top2x,bot1x],[top2y,bot1y], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(lcross1) + ax.add_line(lcross2) + lsign = Line2D([bot2x-indent_fac,end+indent_fac],[y_extent-indent_fac,y_extent-indent_fac], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(lsign) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_recombinase1 (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ SBOL recombinase site renderer - forward direction - """ - # Default parameters - color = (0,0,0) - color2 = (0,0,0) - start_pad = 0.0 - end_pad = 0.0 - x_extent = 12.0 - y_extent = 12.0 - linestyle = '-' - edgecolor = (0,0,0) - # Update default parameters if provided - if opts != None: - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'color2' in list(opts.keys()): - color2 = opts['color2'] - if 'edgecolor' in list(opts.keys()): - edgecolor = opts['edgecolor'] - # Check direction add start padding - final_end = end - final_start = prev_end - y_lower = -1 * y_extent/2 - y_upper = y_extent/2 - - - if start > end: - start = prev_end+end_pad+x_extent+linewidth - end = prev_end+end_pad+linewidth - final_end = start+start_pad+linewidth - #temp = color - #color = color2 - #color2 = temp - else: - start = prev_end+start_pad+linewidth - end = start+x_extent - final_end = end+end_pad+linewidth - # Draw the site - p1 = Polygon([(start, y_lower), - (start, y_upper), - (end,0)], - edgecolor=edgecolor, facecolor=color, linewidth=linewidth, zorder=11, - path_effects=[Stroke(joinstyle="miter")]) - ax.add_patch(p1) - # Add a label if needed - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - # Return the final start and end positions to the DNA renderer - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ SBOL recombinase site renderer - forward direction + """ + # Default parameters + color = (0,0,0) + color2 = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 12.0 + y_extent = 12.0 + linestyle = '-' + edgecolor = (0,0,0) + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'color2' in list(opts.keys()): + color2 = opts['color2'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] + # Check direction add start padding + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 + + + if start > end: + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad+linewidth + final_end = start+start_pad+linewidth + #temp = color + #color = color2 + #color2 = temp + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad+linewidth + # Draw the site + p1 = Polygon([(start, y_lower), + (start, y_upper), + (end,0)], + edgecolor=edgecolor, facecolor=color, linewidth=linewidth, zorder=11, + path_effects=[Stroke(joinstyle="miter")]) + ax.add_patch(p1) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_ncrna (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ SBOL recombinase site renderer - reverse direction - """ - # Default parameters - color = (0,0,0) - start_pad = 0.0 - end_pad = 0.0 - x_extent = 30.0 - y_extent = 6.0 - linestyle = '-' - edgecolor = (0,0,0) - # Update default parameters if provided - if opts != None: - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'edgecolor' in list(opts.keys()): - edgecolor = opts['edgecolor'] - # Check direction add start padding - - final_end = end - final_start = prev_end - y_lower = -1 * y_extent/2 - y_upper = y_extent/2 - wavemult = 1 - #print("oogabooga") - if start > end: - start = prev_end+end_pad+x_extent+linewidth - end = prev_end+end_pad+linewidth - final_end = start+start_pad+linewidth - wavemult = -1 - else: - start = prev_end+start_pad+linewidth - end = start+x_extent - final_end = end+end_pad+linewidth - midpoint = (end + start) / 2 - - - wave_height = wavemult*y_extent - #wave_height = -y_extent - wave_start = start - wave_end = end - wave_length = end-start - wave_bezier_amp = y_extent*0.2 - wave_bezier_dx = wave_length/15.0#wave_bezier_amp*math.cos(math.pi/4) - wave_bezier_dy = wavemult*wave_bezier_amp*math.sin(math.pi/4) - wavy_rna_path = Path(vertices=[[wave_start,0], - [wave_start, wave_height], - [wave_start + wave_bezier_dx, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*2, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*3, wave_height], - [wave_start + wave_bezier_dx*4, wave_height-wave_bezier_dy], - [wave_start + wave_bezier_dx*5, wave_height-wave_bezier_dy], - [wave_start + wave_bezier_dx*6, wave_height], - [wave_start + wave_bezier_dx*7, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*8, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*9, wave_height], - [wave_start + wave_bezier_dx*10, wave_height-wave_bezier_dy], - [wave_start + wave_bezier_dx*11, wave_height-wave_bezier_dy], - [wave_start + wave_bezier_dx*12, wave_height], - [wave_start + wave_bezier_dx*13, wave_height+wave_bezier_dy], - [wave_start + wave_bezier_dx*14, wave_height+wave_bezier_dy], - [wave_end,wave_height], - [wave_end,0], - [wave_end,0] - ], - codes=[1, 2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79]) - wavy_rna = PathPatch(wavy_rna_path, linewidth=linewidth, edgecolor=edgecolor, - facecolor=color, zorder=12, linestyle='-') - - ax.add_patch(wavy_rna) - # Add a label if needed - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - # Return the final start and end positions to the DNA renderer - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ SBOL recombinase site renderer - reverse direction + """ + # Default parameters + color = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 30.0 + y_extent = 6.0 + linestyle = '-' + edgecolor = (0,0,0) + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] + # Check direction add start padding + + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 + wavemult = 1 + #print("oogabooga") + if start > end: + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad+linewidth + final_end = start+start_pad+linewidth + wavemult = -1 + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad+linewidth + midpoint = (end + start) / 2 + + + wave_height = wavemult*y_extent + #wave_height = -y_extent + wave_start = start + wave_end = end + wave_length = end-start + wave_bezier_amp = y_extent*0.2 + wave_bezier_dx = wave_length/15.0#wave_bezier_amp*math.cos(math.pi/4) + wave_bezier_dy = wavemult*wave_bezier_amp*math.sin(math.pi/4) + wavy_rna_path = Path(vertices=[[wave_start,0], + [wave_start, wave_height], + [wave_start + wave_bezier_dx, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*2, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*3, wave_height], + [wave_start + wave_bezier_dx*4, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*5, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*6, wave_height], + [wave_start + wave_bezier_dx*7, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*8, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*9, wave_height], + [wave_start + wave_bezier_dx*10, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*11, wave_height-wave_bezier_dy], + [wave_start + wave_bezier_dx*12, wave_height], + [wave_start + wave_bezier_dx*13, wave_height+wave_bezier_dy], + [wave_start + wave_bezier_dx*14, wave_height+wave_bezier_dy], + [wave_end,wave_height], + [wave_end,0], + [wave_end,0] + ], + codes=[1, 2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,79]) + wavy_rna = PathPatch(wavy_rna_path, linewidth=linewidth, edgecolor=edgecolor, + facecolor=color, zorder=12, linestyle='-') + + ax.add_patch(wavy_rna) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_recombinase2 (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ SBOL recombinase site renderer - reverse direction - """ - # Default parameters - color = (0,0,0) - color2 = (0,0,0) - start_pad = 0.0 - end_pad = 0.0 - x_extent = 12.0 - y_extent = 12.0 - linestyle = '-' - edgecolor = (0,0,0) - # Update default parameters if provided - if opts != None: - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'color2' in list(opts.keys()): - color2 = opts['color2'] - else: - if 'color' in list(opts.keys()): - r2 = float(color[0]) / 2 - g2 = float(color[1]) / 2 - b2 = float(color[2]) / 2 - color2 = (r2,g2,b2) - if 'edgecolor' in list(opts.keys()): - edgecolor = opts['edgecolor'] - # Check direction add start padding - final_end = end - final_start = prev_end - y_lower = -1 * y_extent/2 - y_upper = y_extent/2 - if start > end: - #this is reverse - start = prev_end+end_pad+x_extent+linewidth - end = prev_end+end_pad+linewidth - final_end = start+start_pad+linewidth - #temp = color - #color = color2 - #color2 = temp - else: - start = prev_end+start_pad+linewidth - end = start+x_extent - final_end = end+end_pad+linewidth - # Draw the site - #big triangle (the whole thing) - p1 = Polygon([(start, y_lower), - (start, y_upper), - (end,0)], - edgecolor=edgecolor, facecolor=color, linewidth=linewidth, zorder=11, - path_effects=[Stroke(joinstyle="miter")]) - midpoint = (end + start) / 2 - hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) - hypotenuse2 = hypotenuse / 2 - cosineA = (y_extent/2) / hypotenuse - f = hypotenuse2 * cosineA - #small triangle - p2 = Polygon([(midpoint, -1*f), - (midpoint, f), - (end,0)], - edgecolor=edgecolor, facecolor=color2, linewidth=linewidth, zorder=12, - path_effects=[Stroke(joinstyle="miter")]) - ax.add_patch(p1) - ax.add_patch(p2) - # Add a label if needed - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - # Return the final start and end positions to the DNA renderer - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ SBOL recombinase site renderer - reverse direction + """ + # Default parameters + color = (0,0,0) + color2 = (0,0,0) + start_pad = 0.0 + end_pad = 0.0 + x_extent = 12.0 + y_extent = 12.0 + linestyle = '-' + edgecolor = (0,0,0) + # Update default parameters if provided + if opts != None: + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'color2' in list(opts.keys()): + color2 = opts['color2'] + else: + if 'color' in list(opts.keys()): + r2 = float(color[0]) / 2 + g2 = float(color[1]) / 2 + b2 = float(color[2]) / 2 + color2 = (r2,g2,b2) + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] + # Check direction add start padding + final_end = end + final_start = prev_end + y_lower = -1 * y_extent/2 + y_upper = y_extent/2 + if start > end: + #this is reverse + start = prev_end+end_pad+x_extent+linewidth + end = prev_end+end_pad+linewidth + final_end = start+start_pad+linewidth + #temp = color + #color = color2 + #color2 = temp + else: + start = prev_end+start_pad+linewidth + end = start+x_extent + final_end = end+end_pad+linewidth + # Draw the site + #big triangle (the whole thing) + p1 = Polygon([(start, y_lower), + (start, y_upper), + (end,0)], + edgecolor=edgecolor, facecolor=color, linewidth=linewidth, zorder=11, + path_effects=[Stroke(joinstyle="miter")]) + midpoint = (end + start) / 2 + hypotenuse = math.sqrt( (y_extent/2)**2 + (x_extent)**2 ) + hypotenuse2 = hypotenuse / 2 + cosineA = (y_extent/2) / hypotenuse + f = hypotenuse2 * cosineA + #small triangle + p2 = Polygon([(midpoint, -1*f), + (midpoint, f), + (end,0)], + edgecolor=edgecolor, facecolor=color2, linewidth=linewidth, zorder=12, + path_effects=[Stroke(joinstyle="miter")]) + ax.add_patch(p1) + ax.add_patch(p2) + # Add a label if needed + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + # Return the final start and end positions to the DNA renderer + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_restriction_site (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL restriction site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 4.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad+linewidth/2 - end = start + linewidth/2 - final_end = end+end_pad - - l1 = Line2D([start,start],[-y_extent,y_extent], - linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) - ax.add_line(l1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL restriction site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 4.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad+linewidth/2 + end = start + linewidth/2 + final_end = end+end_pad + + l1 = Line2D([start,start],[-y_extent,y_extent], + linewidth=linewidth, color=color, zorder=12+zorder_add, linestyle=linestyle) + ax.add_line(l1) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_spacer (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL spacer renderer. - """ - # Default options - zorder_add = 0.0 - color = (1,1,1) - edgecolor = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 6.0 - y_extent = 6.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'edgecolor' in list(opts.keys()): - edgecolor = opts['edgecolor'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - rbs_center = (start+((end-start)/2.0),0) - center_x = start+(end-start)/2.0 - radius = x_extent/2 - - delta = radius - 0.5 * radius * math.sqrt(2) - - l1 = Line2D([start+delta,end-delta],[radius-delta,-1*radius+delta], - linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) - l2 = Line2D([start+delta,end-delta],[-1*radius+delta,radius-delta], - linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) - c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=edgecolor, - facecolor=color, zorder=12+zorder_add) - - ax.add_patch(c1) - ax.add_line(l1) - ax.add_line(l2) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL spacer renderer. + """ + # Default options + zorder_add = 0.0 + color = (1,1,1) + edgecolor = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 6.0 + y_extent = 6.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + rbs_center = (start+((end-start)/2.0),0) + center_x = start+(end-start)/2.0 + radius = x_extent/2 + + delta = radius - 0.5 * radius * math.sqrt(2) + + l1 = Line2D([start+delta,end-delta],[radius-delta,-1*radius+delta], + linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) + l2 = Line2D([start+delta,end-delta],[-1*radius+delta,radius-delta], + linewidth=linewidth, color=edgecolor, zorder=12+zorder_add, linestyle=linestyle) + c1 = Circle(rbs_center, x_extent/2.0, linewidth=linewidth, edgecolor=edgecolor, + facecolor=color, zorder=12+zorder_add) + + ax.add_patch(c1) + ax.add_line(l1) + ax.add_line(l2) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_origin (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL origin renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 10.0 - y_extent = 10.0 - linestyle = '-' - y_offset = 0 - face_color = (1,1,1) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'face_color' in list(opts.keys()): - face_color = tuple(opts['face_color']) - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - ori_center = (start+((end-start)/2.0),y_offset) - - c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=face_color, zorder=12+zorder_add) - - ax.add_patch(c1) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL origin renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 10.0 + y_extent = 10.0 + linestyle = '-' + y_offset = 0 + face_color = (1,1,1) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'face_color' in list(opts.keys()): + face_color = tuple(opts['face_color']) + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + ori_center = (start+((end-start)/2.0),y_offset) + + c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=face_color, zorder=12+zorder_add) + + ax.add_patch(c1) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_origin_of_transfer (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL origin of transfer renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 10.0 - y_extent = 10.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - ori_center = (start+((end-start)/2.0),0) - extend = 1.2 - arrowlongedge = x_extent*extend*.20 - arrowshortedge = x_extent*extend*.09 - arrowdest = (start+x_extent*extend,y_extent*extend/2) - - c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add) - #arrow = FancyArrow(ori_center[0],ori_center[1],\ - # x_extent/2*extend,y_extent/2*extend,width=linewidth) - arrowpath =Path(vertices=[ori_center, - arrowdest, - (arrowdest[0]-arrowlongedge,arrowdest[1]-arrowshortedge), - (arrowdest[0]-arrowshortedge,arrowdest[1]-arrowlongedge), - arrowdest, - arrowdest,], - codes=[1, 2,2,1,2,79]) - p2 = PathPatch(arrowpath, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=12+zorder_add, linestyle='-') - - - ax.add_patch(c1) - ax.add_patch(p2) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL origin of transfer renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 10.0 + y_extent = 10.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + ori_center = (start+((end-start)/2.0),0) + extend = 1.2 + arrowlongedge = x_extent*extend*.20 + arrowshortedge = x_extent*extend*.09 + arrowdest = (start+x_extent*extend,y_extent*extend/2) + + c1 = Circle(ori_center, x_extent/2.0, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add) + #arrow = FancyArrow(ori_center[0],ori_center[1],\ + # x_extent/2*extend,y_extent/2*extend,width=linewidth) + arrowpath =Path(vertices=[ori_center, + arrowdest, + (arrowdest[0]-arrowlongedge,arrowdest[1]-arrowshortedge), + (arrowdest[0]-arrowshortedge,arrowdest[1]-arrowlongedge), + arrowdest, + arrowdest,], + codes=[1, 2,2,1,2,79]) + p2 = PathPatch(arrowpath, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=12+zorder_add, linestyle='-') + + + ax.add_patch(c1) + ax.add_patch(p2) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_operator (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL operator renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 6.0 - y_extent = 3.0 - linestyle = '-' - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - final_end = end - final_start = prev_end - - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - #white rectangle overlays backbone line - - #p1 = Polygon([(start, y_extent), - # (start, -y_extent), - # (start+x_extent, -y_extent), - # (start+x_extent, y_extent)], - # edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=None, zorder=11+zorder_add, - # path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - operatorpath = Path(vertices=[(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent), - (start, y_extent), - (start, y_extent)], - codes=[1, 2,2,2,1,79]) - p2 = PathPatch(operatorpath, linewidth=linewidth, edgecolor=color, - facecolor=(1,1,1), zorder=11+zorder_add, linestyle='-') - #ax.add_patch(p1) - ax.add_patch(p2) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL operator renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 6.0 + y_extent = 3.0 + linestyle = '-' + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + final_end = end + final_start = prev_end + + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + #white rectangle overlays backbone line + + #p1 = Polygon([(start, y_extent), + # (start, -y_extent), + # (start+x_extent, -y_extent), + # (start+x_extent, y_extent)], + # edgecolor=(1,1,1), facecolor=(1,1,1), linewidth=None, zorder=11+zorder_add, + # path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + operatorpath = Path(vertices=[(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent), + (start, y_extent), + (start, y_extent)], + codes=[1, 2,2,2,1,79]) + p2 = PathPatch(operatorpath, linewidth=linewidth, edgecolor=color, + facecolor=(1,1,1), zorder=11+zorder_add, linestyle='-') + #ax.add_patch(p1) + ax.add_patch(p2) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end def sbol_insulator (ax, type, num, start, end, prev_end, scale, linewidth, opts): - """ Built-in SBOL insulator renderer. - """ - # Default options - zorder_add = 0.0 - color = (0,0,0) - start_pad = 2.0 - end_pad = 2.0 - x_extent = 8.0 - y_extent = 4.0 - linestyle = '-' - edgecolor = (0,0,0) - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - if 'edgecolor' in list(opts.keys()): - edgecolor = opts['edgecolor'] - - # Check direction add start padding - final_end = end - final_start = prev_end - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - #white rectangle overlays backbone line - p1 = Polygon([(start, y_extent), - (start, -y_extent), - (start+x_extent, -y_extent), - (start+x_extent, y_extent)], - edgecolor=edgecolor, facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - bits = 5.0 - gap_size = ((end-start)/bits) - x_inset_start = start + gap_size - x_inset_end = start + ((bits-1.0)*gap_size) - - # Inside rectangle - p2 = Polygon([(x_inset_start, y_extent-gap_size), - (x_inset_start, -y_extent+gap_size), - (x_inset_end, -y_extent+gap_size), - (x_inset_end, y_extent-gap_size)], - edgecolor=edgecolor, facecolor=(1,1,1), linewidth=linewidth, zorder=12+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - - ax.add_patch(p1) - ax.add_patch(p2) - - if opts != None and 'label' in list(opts.keys()): - if final_start > final_end: - write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) - else: - write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + """ Built-in SBOL insulator renderer. + """ + # Default options + zorder_add = 0.0 + color = (0,0,0) + start_pad = 2.0 + end_pad = 2.0 + x_extent = 8.0 + y_extent = 4.0 + linestyle = '-' + edgecolor = (0,0,0) + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + if 'edgecolor' in list(opts.keys()): + edgecolor = opts['edgecolor'] + + # Check direction add start padding + final_end = end + final_start = prev_end + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + #white rectangle overlays backbone line + p1 = Polygon([(start, y_extent), + (start, -y_extent), + (start+x_extent, -y_extent), + (start+x_extent, y_extent)], + edgecolor=edgecolor, facecolor=(1,1,1), linewidth=linewidth, zorder=11+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + bits = 5.0 + gap_size = ((end-start)/bits) + x_inset_start = start + gap_size + x_inset_end = start + ((bits-1.0)*gap_size) + + # Inside rectangle + p2 = Polygon([(x_inset_start, y_extent-gap_size), + (x_inset_start, -y_extent+gap_size), + (x_inset_end, -y_extent+gap_size), + (x_inset_end, y_extent-gap_size)], + edgecolor=edgecolor, facecolor=(1,1,1), linewidth=linewidth, zorder=12+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + + ax.add_patch(p1) + ax.add_patch(p2) + + if opts != None and 'label' in list(opts.keys()): + if final_start > final_end: + write_label(ax, opts['label'], final_end+((final_start-final_end)/2.0), opts=opts) + else: + write_label(ax, opts['label'], final_start+((final_end-final_start)/2.0), opts=opts) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end # Not used at present def temporary_repressor (ax, type, num, start, end, prev_end, scale, linewidth, opts): - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - start_pad = 2.0 - end_pad = 2.0 - y_extent = 10 - x_extent = 10 - arrowhead_height = 2 - arrowhead_length = 4 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'start_pad' in list(opts.keys()): - start_pad = opts['start_pad'] - if 'end_pad' in list(opts.keys()): - end_pad = opts['end_pad'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - final_end = end - final_start = prev_end - if start > end: - dir_fac = -1.0 - start = prev_end+end_pad+x_extent - end = prev_end+end_pad - final_end = start+start_pad - else: - start = prev_end+start_pad - end = start+x_extent - final_end = end+end_pad - - e1center = (start+((end-start)/2.0),0) - e2center = (start+((end-start)/2.0)+x_extent/3.75,0) - - e1 = Ellipse(e1center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, - linewidth=linewidth, fill=True, zorder=12+zorder_add) - e2 = Ellipse(e2center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, - linewidth=linewidth, fill=True, zorder=11+zorder_add) - - ax.add_patch(e1) - ax.add_patch(e2) - - if final_start > final_end: - return prev_end, final_start - else: - return prev_end, final_end + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + start_pad = 2.0 + end_pad = 2.0 + y_extent = 10 + x_extent = 10 + arrowhead_height = 2 + arrowhead_length = 4 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'start_pad' in list(opts.keys()): + start_pad = opts['start_pad'] + if 'end_pad' in list(opts.keys()): + end_pad = opts['end_pad'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + final_end = end + final_start = prev_end + if start > end: + dir_fac = -1.0 + start = prev_end+end_pad+x_extent + end = prev_end+end_pad + final_end = start+start_pad + else: + start = prev_end+start_pad + end = start+x_extent + final_end = end+end_pad + + e1center = (start+((end-start)/2.0),0) + e2center = (start+((end-start)/2.0)+x_extent/3.75,0) + + e1 = Ellipse(e1center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, + linewidth=linewidth, fill=True, zorder=12+zorder_add) + e2 = Ellipse(e2center, y_extent/2, y_extent, edgecolor=(0,0,0), facecolor=color, + linewidth=linewidth, fill=True, zorder=11+zorder_add) + + ax.add_patch(e1) + ax.add_patch(e2) + + if final_start > final_end: + return prev_end, final_start + else: + return prev_end, final_end ############################################################################### @@ -2377,128 +2376,128 @@ def temporary_repressor (ax, type, num, start, end, prev_end, scale, linewidth, def repress (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): - """ Standard repression regulation renderer. - """ - regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) + """ Standard repression regulation renderer. + """ + regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) def induce (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): - """ Standard induction regulation renderer. - """ - regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) + """ Standard induction regulation renderer. + """ + regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) def connect (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): - """ Standard induction regulation renderer. - """ - regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) + """ Standard induction regulation renderer. + """ + regulation(ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts) def bound(ax,type,num,from_part,to_part, scale, linewidth, arc_height_index, opts): - """renders a circle above a part to indicate that it is bound""" - color = (0.0,0.0,0.0) - circle_offset = 5 - part_midpt = ((from_part['start'] + from_part['end']) / 2) - start = part_midpt- circle_offset - end = part_midpt + circle_offset - if('y_offset' not in opts): - opts['y_offset']=3 - opts['y_offset'] = opts['y_offset']*arc_height_index - opts['x_extent']=circle_offset*2 - opts['start_pad']=0 - sbol_origin(ax,"Origin",0,start,end,start, 1.0,linewidth,opts) + """renders a circle above a part to indicate that it is bound""" + color = (0.0,0.0,0.0) + circle_offset = 5 + part_midpt = ((from_part['start'] + from_part['end']) / 2) + start = part_midpt- circle_offset + end = part_midpt + circle_offset + if('y_offset' not in opts): + opts['y_offset']=3 + opts['y_offset'] = opts['y_offset']*arc_height_index + opts['x_extent']=circle_offset*2 + opts['start_pad']=0 + sbol_origin(ax,"Origin",0,start,end,start, 1.0,linewidth,opts) def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_index, opts): - """ General function for drawing regulation arcs. - """ - - color = (0.0,0.0,0.0) - arrowhead_length = 3 - linestyle = '-' - arcHeightConst = 15 - arcHeightSpacing = 5 - arcHeightStart = 10 - arcHeight = arcHeightConst + arc_height_index*arcHeightSpacing - arcHeightEnd = arcHeightStart*1.5 - arc_start_x_offset = 0.0 - arc_end_x_offset = 0.0 - - # Reset defaults if provided - if opts != None: - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linestyle' in list(opts.keys()): - linestyle = opts['linestyle'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'arc_height' in list(opts.keys()): - arcHeight = opts['arc_height'] - if 'arc_height_const' in list(opts.keys()): - arcHeightConst = opts['arc_height_const'] - if 'arc_height_spacing' in list(opts.keys()): - arcHeightSpacing = opts['arc_height_spacing'] - if 'arc_height_start' in list(opts.keys()): - arcHeightStart = opts['arc_height_start'] - if 'arc_height_end' in list(opts.keys()): - arcHeightEnd = opts['arc_height_end'] - if 'arc_start_x_offset' in list(opts.keys()): - arc_start_x_offset = opts['arc_start_x_offset'] - if 'arc_end_x_offset' in list(opts.keys()): - arc_end_x_offset = opts['arc_end_x_offset'] - - if opts == None or 'arc_height' not in list(opts.keys()): - arcHeight = arcHeightConst + arc_height_index*arcHeightSpacing - startHeight = arcHeightStart - - start = ((from_part['start'] + from_part['end']) / 2) + arc_start_x_offset - end = ((to_part['start'] + to_part['end']) / 2) + arc_end_x_offset - - top = arcHeight; - base = startHeight; - indHeight = arrowhead_length - corr = .4*linewidth - - - if to_part['fwd'] == False: - base = -1*startHeight - arcHeightEnd = -arcHeightEnd - top = -1*arcHeight - indHeight = -1*arrowhead_length - corr *= -1.0 - - - line_away = Line2D([start,start],[base,top], - linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_across = Line2D([start,end],[top,top], - linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_toward = Line2D([end,end],[top,arcHeightEnd+corr], - linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) - line_rep = Line2D([end-arrowhead_length,end+arrowhead_length],[arcHeightEnd,arcHeightEnd], - linewidth=linewidth, color=color, zorder=12, linestyle='-') - line_ind1 = Line2D([end-arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], - linewidth=linewidth, color=color, zorder=12, linestyle='-') - line_ind2 = Line2D([end+arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], - linewidth=linewidth, color=color, zorder=12, linestyle='-') - - if(type == 'Repression'): - ax.add_line(line_rep) - ax.add_line(line_away) - ax.add_line(line_across) - ax.add_line(line_toward) - if(type == 'Activation'): - ax.add_line(line_ind1) - ax.add_line(line_ind2) - ax.add_line(line_away) - ax.add_line(line_across) - ax.add_line(line_toward) - - if(type == 'Connection'): - verts = [ (start, base), (start, top), (end, top), (end, base) ] - codes = [Path.MOVETO, Path.CURVE4, Path.CURVE4, Path.CURVE4] - path1 = Path(verts, codes) - patch = patches.PathPatch(path1, facecolor='none', lw=linewidth, edgecolor=color) - ax.add_patch(patch) + """ General function for drawing regulation arcs. + """ + + color = (0.0,0.0,0.0) + arrowhead_length = 3 + linestyle = '-' + arcHeightConst = 15 + arcHeightSpacing = 5 + arcHeightStart = 10 + arcHeight = arcHeightConst + arc_height_index*arcHeightSpacing + arcHeightEnd = arcHeightStart*1.5 + arc_start_x_offset = 0.0 + arc_end_x_offset = 0.0 + + # Reset defaults if provided + if opts != None: + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linestyle' in list(opts.keys()): + linestyle = opts['linestyle'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'arc_height' in list(opts.keys()): + arcHeight = opts['arc_height'] + if 'arc_height_const' in list(opts.keys()): + arcHeightConst = opts['arc_height_const'] + if 'arc_height_spacing' in list(opts.keys()): + arcHeightSpacing = opts['arc_height_spacing'] + if 'arc_height_start' in list(opts.keys()): + arcHeightStart = opts['arc_height_start'] + if 'arc_height_end' in list(opts.keys()): + arcHeightEnd = opts['arc_height_end'] + if 'arc_start_x_offset' in list(opts.keys()): + arc_start_x_offset = opts['arc_start_x_offset'] + if 'arc_end_x_offset' in list(opts.keys()): + arc_end_x_offset = opts['arc_end_x_offset'] + + if opts == None or 'arc_height' not in list(opts.keys()): + arcHeight = arcHeightConst + arc_height_index*arcHeightSpacing + startHeight = arcHeightStart + + start = ((from_part['start'] + from_part['end']) / 2) + arc_start_x_offset + end = ((to_part['start'] + to_part['end']) / 2) + arc_end_x_offset + + top = arcHeight; + base = startHeight; + indHeight = arrowhead_length + corr = .4*linewidth + + + if to_part['fwd'] == False: + base = -1*startHeight + arcHeightEnd = -arcHeightEnd + top = -1*arcHeight + indHeight = -1*arrowhead_length + corr *= -1.0 + + + line_away = Line2D([start,start],[base,top], + linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) + line_across = Line2D([start,end],[top,top], + linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) + line_toward = Line2D([end,end],[top,arcHeightEnd+corr], + linewidth=linewidth, color=color, zorder=12, linestyle=linestyle) + line_rep = Line2D([end-arrowhead_length,end+arrowhead_length],[arcHeightEnd,arcHeightEnd], + linewidth=linewidth, color=color, zorder=12, linestyle='-') + line_ind1 = Line2D([end-arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], + linewidth=linewidth, color=color, zorder=12, linestyle='-') + line_ind2 = Line2D([end+arrowhead_length,end],[arcHeightEnd+indHeight,arcHeightEnd], + linewidth=linewidth, color=color, zorder=12, linestyle='-') + + if(type == 'Repression'): + ax.add_line(line_rep) + ax.add_line(line_away) + ax.add_line(line_across) + ax.add_line(line_toward) + if(type == 'Activation'): + ax.add_line(line_ind1) + ax.add_line(line_ind2) + ax.add_line(line_away) + ax.add_line(line_across) + ax.add_line(line_toward) + + if(type == 'Connection'): + verts = [ (start, base), (start, top), (end, top), (end, base) ] + codes = [Path.MOVETO, Path.CURVE4, Path.CURVE4, Path.CURVE4] + path1 = Path(verts, codes) + patch = patches.PathPatch(path1, facecolor='none', lw=linewidth, edgecolor=color) + ax.add_patch(patch) ############################################################################### @@ -2507,365 +2506,365 @@ def regulation (ax, type, num, from_part, to_part, scale, linewidth, arc_height_ def trace_promoter_start (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based promoter renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.0,0.0,1.0) - y_offset = 0.0 - y_extent = 6.0 - x_extent = 30.0 - arrowhead_height = 0.5 - arrowhead_length = 15.0 - highlight_y_extent = 0.8 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'highlight_y_extent' in list(opts.keys()): - highlight_y_extent = opts['highlight_y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - y_offset = -y_offset - # Draw the promoter symbol - l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=14+zorder_add) - l2 = Line2D([start_bp,start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], - [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=14+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - p1 = Polygon([(start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent+(arrowhead_height)+y_offset), - (start_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), - (start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent-(arrowhead_height)+y_offset)], - facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), - (start_bp, highlight_y_extent+y_offset), - (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p2) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based promoter renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.0,0.0,1.0) + y_offset = 0.0 + y_extent = 6.0 + x_extent = 30.0 + arrowhead_height = 0.5 + arrowhead_length = 15.0 + highlight_y_extent = 0.8 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'highlight_y_extent' in list(opts.keys()): + highlight_y_extent = opts['highlight_y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + y_offset = -y_offset + # Draw the promoter symbol + l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=14+zorder_add) + l2 = Line2D([start_bp,start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], + [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=14+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + p1 = Polygon([(start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent+(arrowhead_height)+y_offset), + (start_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), + (start_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent-(arrowhead_height)+y_offset)], + facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + # Shade the promoter area (normally smaller than symbol extent) + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + (start_bp, highlight_y_extent+y_offset), + (end_bp, highlight_y_extent+y_offset), + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p2) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_promoter (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based promoter renderer with arrow at TSS. - """ - # Default options - zorder_add = 0.0 - color = (0.0,0.0,1.0) - y_offset = 0.0 - y_extent = 6.0 - x_extent = 30.0 - arrowhead_height = 0.5 - arrowhead_length = 15.0 - highlight_y_extent = 0.8 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'highlight_y_extent' in list(opts.keys()): - highlight_y_extent = opts['highlight_y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - y_offset = -y_offset - # Draw the promoter symbol - l1 = Line2D([end_bp,end_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=14+zorder_add) - l2 = Line2D([end_bp,end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], - [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, - color=color, zorder=14+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - p1 = Polygon([(end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent+(arrowhead_height)+y_offset), - (end_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), - (end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, - dir_fac*y_extent-(arrowhead_height)+y_offset)], - facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), - (start_bp, highlight_y_extent+y_offset), - (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p2) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based promoter renderer with arrow at TSS. + """ + # Default options + zorder_add = 0.0 + color = (0.0,0.0,1.0) + y_offset = 0.0 + y_extent = 6.0 + x_extent = 30.0 + arrowhead_height = 0.5 + arrowhead_length = 15.0 + highlight_y_extent = 0.8 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'highlight_y_extent' in list(opts.keys()): + highlight_y_extent = opts['highlight_y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + y_offset = -y_offset + # Draw the promoter symbol + l1 = Line2D([end_bp,end_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=14+zorder_add) + l2 = Line2D([end_bp,end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*0.5*scale], + [dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, + color=color, zorder=14+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + p1 = Polygon([(end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent+(arrowhead_height)+y_offset), + (end_bp+dir_fac*(x_extent*scale), dir_fac*y_extent+y_offset), + (end_bp+dir_fac*x_extent*scale-dir_fac*arrowhead_length*scale, + dir_fac*y_extent-(arrowhead_height)+y_offset)], + facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + # Shade the promoter area (normally smaller than symbol extent) + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + (start_bp, highlight_y_extent+y_offset), + (end_bp, highlight_y_extent+y_offset), + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p2) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_rbs (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based ribosome binding site renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.16,0.68,0.15) - y_offset = 0.0 - y_extent = 3.5 - x_extent = 10.0 - highlight_y_extent = 0.8 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'highlight_y_extent' in list(opts.keys()): - highlight_y_extent = opts['highlight_y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - # Draw the RBS symbol - l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) - ax.add_line(l1) - c1 = Ellipse((start_bp,dir_fac*y_extent+y_offset),width=(x_extent*scale),height=y_extent*0.4,color=color, zorder=14+zorder_add) - ax.add_artist(c1) - # Shade the promoter area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), - (start_bp, highlight_y_extent+y_offset), - (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p2) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based ribosome binding site renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.16,0.68,0.15) + y_offset = 0.0 + y_extent = 3.5 + x_extent = 10.0 + highlight_y_extent = 0.8 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'highlight_y_extent' in list(opts.keys()): + highlight_y_extent = opts['highlight_y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + # Draw the RBS symbol + l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) + ax.add_line(l1) + c1 = Ellipse((start_bp,dir_fac*y_extent+y_offset),width=(x_extent*scale),height=y_extent*0.4,color=color, zorder=14+zorder_add) + ax.add_artist(c1) + # Shade the promoter area (normally smaller than symbol extent) + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + (start_bp, highlight_y_extent+y_offset), + (end_bp, highlight_y_extent+y_offset), + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=14+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p2) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_user_defined (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based user defined region renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - hatch = '' - y_offset = 0.0 - y_extent = 1.5 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'hatch' in list(opts.keys()): - hatch = opts['hatch'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - # Draw the CDS symbol - p1 = Polygon([(start_bp, y_extent+y_offset), - (start_bp, -y_extent+y_offset), - (end_bp-dir_fac*scale, -y_extent+y_offset), - (end_bp-dir_fac*scale, y_extent+y_offset)], - edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=15+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based user defined region renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + hatch = '' + y_offset = 0.0 + y_extent = 1.5 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'hatch' in list(opts.keys()): + hatch = opts['hatch'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + # Draw the CDS symbol + p1 = Polygon([(start_bp, y_extent+y_offset), + (start_bp, -y_extent+y_offset), + (end_bp-dir_fac*scale, -y_extent+y_offset), + (end_bp-dir_fac*scale, y_extent+y_offset)], + edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=15+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_cds (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based coding sequence renderer. - """ - # Default options - zorder_add = 0.0 - color = (0.7,0.7,0.7) - hatch = '' - y_offset = 0.0 - y_extent = 1.5 - arrowhead_height = 1.0 - arrowhead_length = 30.0 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'hatch' in list(opts.keys()): - hatch = opts['hatch'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'arrowhead_height' in list(opts.keys()): - arrowhead_height = opts['arrowhead_height'] - if 'arrowhead_length' in list(opts.keys()): - arrowhead_length = opts['arrowhead_length'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - # Draw the CDS symbol - p1 = Polygon([(start_bp, y_extent+y_offset), - (start_bp, -y_extent+y_offset), - (end_bp-dir_fac*arrowhead_length*scale, -y_extent+y_offset), - (end_bp-dir_fac*arrowhead_length*scale, -y_extent-arrowhead_height+y_offset), - (end_bp, 0+y_offset), - (end_bp-dir_fac*arrowhead_length*scale, y_extent+arrowhead_height+y_offset), - (end_bp-dir_fac*arrowhead_length*scale, y_extent+y_offset)], - edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, - hatch=hatch, zorder=15+zorder_add, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p1) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based coding sequence renderer. + """ + # Default options + zorder_add = 0.0 + color = (0.7,0.7,0.7) + hatch = '' + y_offset = 0.0 + y_extent = 1.5 + arrowhead_height = 1.0 + arrowhead_length = 30.0 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'hatch' in list(opts.keys()): + hatch = opts['hatch'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'arrowhead_height' in list(opts.keys()): + arrowhead_height = opts['arrowhead_height'] + if 'arrowhead_length' in list(opts.keys()): + arrowhead_length = opts['arrowhead_length'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + # Draw the CDS symbol + p1 = Polygon([(start_bp, y_extent+y_offset), + (start_bp, -y_extent+y_offset), + (end_bp-dir_fac*arrowhead_length*scale, -y_extent+y_offset), + (end_bp-dir_fac*arrowhead_length*scale, -y_extent-arrowhead_height+y_offset), + (end_bp, 0+y_offset), + (end_bp-dir_fac*arrowhead_length*scale, y_extent+arrowhead_height+y_offset), + (end_bp-dir_fac*arrowhead_length*scale, y_extent+y_offset)], + edgecolor=(0.0,0.0,0.0), facecolor=color, linewidth=linewidth, + hatch=hatch, zorder=15+zorder_add, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p1) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp def trace_terminator (ax, type, num, start_bp, end_bp, prev_end, scale, linewidth, opts): - """ Built-in trace-based terminator renderer. - """ - # Default options - zorder_add = 0.0 - color = (1.0,0.0,0.0) - y_offset = 0.0 - y_extent = 3.5 - x_extent = 10.0 - highlight_y_extent = 0.8 - # Reset defaults if provided - if opts != None: - if 'zorder_add' in list(opts.keys()): - zorder_add = opts['zorder_add'] - if 'color' in list(opts.keys()): - color = opts['color'] - if 'y_offset' in list(opts.keys()): - y_offset = opts['y_offset'] - if 'y_extent' in list(opts.keys()): - y_extent = opts['y_extent'] - if 'x_extent' in list(opts.keys()): - x_extent = opts['x_extent'] - if 'highlight_y_extent' in list(opts.keys()): - highlight_y_extent = opts['highlight_y_extent'] - if 'linewidth' in list(opts.keys()): - linewidth = opts['linewidth'] - if 'scale' in list(opts.keys()): - scale = opts['scale'] - # Check direction add start padding - dir_fac = 1.0 - if start_bp > end_bp: - dir_fac = -1.0 - # Draw the terminator symbol - l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=8+zorder_add) - l2 = Line2D([start_bp-(x_extent*scale),start_bp+(x_extent*scale)],[dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) - ax.add_line(l1) - ax.add_line(l2) - # Shade the terminator area (normally smaller than symbol extent) - p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), - (start_bp, highlight_y_extent+y_offset), - (end_bp, highlight_y_extent+y_offset), - (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=13, - path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) - ax.add_patch(p2) - if opts != None and 'label' in list(opts.keys()): - if start_bp > end_bp: - write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) - else: - write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) - if start_bp > end_bp: - return end_bp, start_bp - else: - return start_bp, end_bp + """ Built-in trace-based terminator renderer. + """ + # Default options + zorder_add = 0.0 + color = (1.0,0.0,0.0) + y_offset = 0.0 + y_extent = 3.5 + x_extent = 10.0 + highlight_y_extent = 0.8 + # Reset defaults if provided + if opts != None: + if 'zorder_add' in list(opts.keys()): + zorder_add = opts['zorder_add'] + if 'color' in list(opts.keys()): + color = opts['color'] + if 'y_offset' in list(opts.keys()): + y_offset = opts['y_offset'] + if 'y_extent' in list(opts.keys()): + y_extent = opts['y_extent'] + if 'x_extent' in list(opts.keys()): + x_extent = opts['x_extent'] + if 'highlight_y_extent' in list(opts.keys()): + highlight_y_extent = opts['highlight_y_extent'] + if 'linewidth' in list(opts.keys()): + linewidth = opts['linewidth'] + if 'scale' in list(opts.keys()): + scale = opts['scale'] + # Check direction add start padding + dir_fac = 1.0 + if start_bp > end_bp: + dir_fac = -1.0 + # Draw the terminator symbol + l1 = Line2D([start_bp,start_bp],[0+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=8+zorder_add) + l2 = Line2D([start_bp-(x_extent*scale),start_bp+(x_extent*scale)],[dir_fac*y_extent+y_offset,dir_fac*y_extent+y_offset], linewidth=linewidth, color=color, zorder=14+zorder_add) + ax.add_line(l1) + ax.add_line(l2) + # Shade the terminator area (normally smaller than symbol extent) + p2 = Polygon([(start_bp, -highlight_y_extent+y_offset), + (start_bp, highlight_y_extent+y_offset), + (end_bp, highlight_y_extent+y_offset), + (end_bp, -highlight_y_extent+y_offset)], facecolor=color, edgecolor=color, linewidth=linewidth, zorder=13, + path_effects=[Stroke(joinstyle="miter")]) # This is a work around for matplotlib < 1.4.0) + ax.add_patch(p2) + if opts != None and 'label' in list(opts.keys()): + if start_bp > end_bp: + write_label(ax, opts['label'], end_bp+((start_bp-end_bp)/2.0), opts=opts) + else: + write_label(ax, opts['label'], start_bp+((end_bp-start_bp)/2.0), opts=opts) + if start_bp > end_bp: + return end_bp, start_bp + else: + return start_bp, end_bp ############################################################################### # The DNA renderer @@ -2873,433 +2872,433 @@ def trace_terminator (ax, type, num, start_bp, end_bp, prev_end, scale, linewidt class DNARenderer: - """ Class defining the DNA rendering funtionality. - """ - - # Standard part types - STD_PART_TYPES = ['Promoter', - 'Aptamer', - 'CDS', - 'Terminator', - 'RBS', - 'Scar', - 'Spacer', - 'EmptySpace', - 'RecombinaseSite', - 'RecombinaseSite2', - 'NCRNA', - 'Ribozyme', - 'Ribonuclease', - 'Protease', - 'DNACleavageSite', - 'RNACleavageSite', - 'ProteinCleavageSite', - 'DNALocation', - 'RNALocation', - 'ProteinLocation', - 'DNAStability', - 'RNAStability', - 'ProteinStability', - 'StemTop', - 'Operator', - 'Origin', - 'OriginOfTransfer', - 'Insulator', - '5Overhang', - '3Overhang', - 'RestrictionSite', - 'BluntRestrictionSite', - 'PrimerBindingSite', - '5StickyRestrictionSite', - '3StickyRestrictionSite', - 'UserDefined', - 'Signature'] - - # Standard regulatory types - STD_REG_TYPES = ['Repression', - 'Activation', - 'Connection', - 'Binding'] - - def __init__(self, scale=1.0, linewidth=1.0, linecolor=(0,0,0), - backbone_pad_left=0.0, backbone_pad_right=0.0): - """ Constructor to generate an empty DNARenderer. - - Parameters - ---------- - scale : float (default=1.0) - A scaling factor for the plot. Only used if rendering traces. - - linewidth : float (default=1.0) - The default linewidth for all part drawing. - - backbone_pad_left : float (default=0.0) - Padding to add to the left side of the backbone. - - backbone_pad_right : float (default=0.0) - Padding to add to the left side of the backbone. - """ - self.scale = scale - self.linewidth = linewidth - self.linecolor = linecolor - self.backbone_pad_left = backbone_pad_left - self.backbone_pad_right = backbone_pad_right - self.reg_height = 15 - - def SBOL_part_renderers (self): - """ Return dictionary of all standard built-in SBOL part renderers. - """ - return { - 'Promoter' :sbol_promoter, - 'Aptamer' :sbol_aptamer, - 'CDS' :sbol_cds, - 'Terminator' :sbol_terminator, - 'RBS' :sbol_rbs, - 'Scar' :sbol_scar, - 'Spacer' :sbol_spacer, - 'EmptySpace' :sbol_empty_space, - 'Ribozyme' :sbol_ribozyme, - 'NCRNA' :sbol_ncrna, - 'Ribonuclease' :sbol_stem_top, - 'RecombinaseSite' :sbol_recombinase1, - 'RecombinaseSite2' :sbol_recombinase2, - 'Protease' :sbol_stem_top, - 'DNACleavageSite' :sbol_stem_top, - 'RNACleavageSite' :sbol_stem_top, - 'ProteinCleavageSite':sbol_stem_top, - 'DNALocation' :sbol_stem_top, - 'RNALocation' :sbol_stem_top, - 'ProteinLocation' :sbol_stem_top, - 'DNAStability' :sbol_stem_top, - 'RNAStability' :sbol_stem_top, - 'ProteinStability' :sbol_stem_top, - 'StemTop' :sbol_stem_top, - 'Operator' :sbol_operator, - 'Origin' :sbol_origin, - 'OriginOfTransfer' :sbol_origin_of_transfer, - 'Insulator' :sbol_insulator, - '5Overhang' :sbol_5_overhang, - '3Overhang' :sbol_3_overhang, - 'RestrictionSite' :sbol_restriction_site, - 'BluntRestrictionSite' :sbol_blunt_restriction_site, - 'PrimerBindingSite' :sbol_primer_binding_site, - '5StickyRestrictionSite' :sbol_5_sticky_restriction_site, - '3StickyRestrictionSite' :sbol_3_sticky_restriction_site, - 'UserDefined' :sbol_user_defined, - 'Signature' :sbol_signature} - - def trace_part_renderers (self): - """ Return dictionary of all standard built-in trace part renderers. - """ - return { - 'Promoter' :trace_promoter, - 'CDS' :trace_cds, - 'Terminator' :trace_terminator, - 'RBS' :trace_rbs, - 'UserDefined' :trace_user_defined} - - def std_reg_renderers (self): - """ Return dictionary of all standard built-in regulation renderers. - """ - return { - 'Repression' :repress, - 'Activation' :induce, - 'Connection' :connect, - 'Binding':bound} - - def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True,circular=False,circle_vheight=12): - """ Render the parts on the DNA and regulation. - - Parameters - ---------- - ax : matplotlib.axes - Axes to draw the design to. - - parts : list(dict) - The design to draw. This is a list of dicts, where each dict relates to - a part and must contain the following keys: - - name (string) - - type (string) - - fwd (bool) - - start (float, optional) - - end (float, optional) - These will then be drawn in accordance with the renders selected - - part_renderers : dict(functions) - Dict of functions where the key in the part type and the dictionary returns - the function to be used to draw that part type. - - regs : list(dict) (default=None) - Regulation present in the design. This is a list of dicts, where each dict - relates to a single regulation arc and must contain the following keys: - - type (string) - - from_part (part object dict) - - to_part (part object dict) - These will then be drawn in accordance with the renders selected. - - reg_renderers : dict(functions) (default=None) - Dict of functions where the key in the regulation type and the dictionary - returns the function to be used to draw that regulation type. - - Returns - ------- - start : float - The x-point in the axis space that drawing begins. - - end : float - The x-point in the axis space that drawing ends. - """ - # Update the matplotlib rendering default for drawing the parts (we want mitered edges) - matplotlib.rcParams['lines.dash_joinstyle'] = 'miter' - matplotlib.rcParams['lines.dash_capstyle'] = 'butt' - matplotlib.rcParams['lines.solid_joinstyle'] = 'miter' - matplotlib.rcParams['lines.solid_capstyle'] = 'projecting' - # Make text editable in Adobe Illustrator - matplotlib.rcParams['pdf.fonttype'] = 42 - # Plot the parts to the axis - part_num = 0 - prev_end = 0 - first_start = 0 - first_part = True - - for part in parts: - keys = list(part.keys()) - - # Check the part has minimal details required - if 'type' in keys: - if 'fwd' not in keys: - part['fwd'] = True - else: - pass - #if part['fwd'] == False: - #if('start' in keys): - # start = part['start'] - # end = part['end'] - # part['end'] = start - # part['start'] = end - if 'start' not in keys: - if part['fwd'] == True: - part['start'] = part_num - else: - part['start'] = part_num+1 - if 'end' not in keys: - if part['fwd'] == True: - part['end'] = part_num+1 - else: - part['end'] = part_num - # Extract custom part options (if available) - part_opts = None - if 'opts' in list(part.keys()): - part_opts = part['opts'] - # Use the correct renderer - if 'renderer' in list(part.keys()): - # Use custom renderer - prev_start, prev_end = part['renderer'](ax, part['type'], part_num, - part['start'], part['end'], prev_end, - self.scale, self.linewidth, - opts=part_opts) - - #update start,end for regulation - #part['start'] = prev_start - #part['end'] = prev_end - - if first_part == True: - first_start = prev_start - first_part = False - else: - # Use standard renderer, if one exists - if part['type'] in list(part_renderers.keys()): - prev_start, prev_end = part_renderers[part['type']](ax, - part['type'], part_num, - part['start'], part['end'], - prev_end, self.scale, - self.linewidth, opts=part_opts) - - #update start,end for regulation [TEG] - if part['fwd'] == True: - part['start'] = prev_start - part['end'] = prev_end - else: - part['start'] = prev_end - part['end'] = prev_start - - if first_part == True: - first_start = prev_start - first_part = False - part_num += 1 - - # first pass to get all of the arcranges - if regs != None: - - for reg in regs: - keys = list(reg.keys()) - - # Check the part has minimal details required - if 'type' in keys and 'from_part' in keys and 'to_part' in keys: - # Extract custom part options (if available) - - reg_opts = None - if 'opts' in list(reg.keys()): - reg_opts = reg['opts'] - - if reg['type'] in list(reg_renderers.keys()): - - ############################################################################## - arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 - if(reg['from_part']==reg['to_part']): - arcend = arcstart+.1 - else: - arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 - arcrange = [arcstart,arcend] - reg['arclength'] = math.fabs(arcstart-arcend) - reg['arc_height_index'] = 1 - ############################################################################## - - #sort regs by arc ranges from shortest to longest - regs.sort(key=lambda x: x['arclength'], reverse=False) - - reg_num = 0 - pos_arc_ranges = [] # arc above DNA backbone if to_part is fwd - neg_arc_ranges = [] # arc below DNA backbone if to_part is reverse - current_max = 1 - - # second pass to render all the arcs - for reg in regs: - keys = list(reg.keys()) - - # Check the part has minimal details required - if 'type' in keys and 'from_part' in keys and 'to_part' in keys: - # Extract custom part options (if available) - - reg_opts = None - if 'opts' in list(reg.keys()): - reg_opts = reg['opts'] - - if reg['type'] in list(reg_renderers.keys()): - - ############################################################################## - # arc height algorithm: greedy from left-to-right on DNA design - - arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 - if(reg['from_part']==reg['to_part']): - arcend = arcstart+.1 - else: - arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 - - arcmin = min(arcstart,arcend) - arcmax = max(arcstart,arcend) - arcrange = [arcmin,arcmax,reg['arc_height_index']] - arc_height_index = 1 - - # arc above if to_part is fwd - if(reg['to_part']['fwd'] == True): - # find max arc height index of ONLY the prior arcs that clash with the current arc - current_max = 1 - for r in pos_arc_ranges: - if (arcrange[0] > r[0] and arcrange[0] < r[1]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[0] > r[1] and arcrange[0] < r[0]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[1] > r[0] and arcrange[0] < r[1]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[1] > r[1] and arcrange[0] < r[0]): - if(r[2] > current_max): - current_max = r[2] - - # if arcs cross over, increment the arc height index - for r in pos_arc_ranges: - if (arcrange[0] > r[0] and arcrange[0] < r[1]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[0] > r[1] and arcrange[0] < r[0]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[1] > r[0] and arcrange[0] < r[1]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[1] > r[1] and arcrange[0] < r[0]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - pos_arc_ranges.append(arcrange) - - # arc below if to_part is reverse - else: - # find max arc height index - current_max = 1 - for r in neg_arc_ranges: - if (arcrange[0] > r[0] and arcrange[0] < r[1]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[0] > r[1] and arcrange[0] < r[0]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[1] > r[0] and arcrange[0] < r[1]): - if(r[2] > current_max): - current_max = r[2] - elif(arcrange[1] > r[1] and arcrange[0] < r[0]): - if(r[2] > current_max): - current_max = r[2] - - # if arcs cross over, increment the arc height index - for r in neg_arc_ranges: - if (arcrange[0] > r[0] and arcrange[0] < r[1]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[0] > r[1] and arcrange[0] < r[0]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[1] > r[0] and arcrange[0] < r[1]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - elif(arcrange[1] > r[1] and arcrange[0] < r[0]): - reg['arc_height_index'] = current_max + 1 - arcrange[2] = reg['arc_height_index'] - neg_arc_ranges.append(arcrange) - ############################################################################## - reg_renderers[reg['type']](ax, reg['type'], - reg_num, reg['from_part'], - reg['to_part'], self.scale, - self.linewidth, reg['arc_height_index'], opts=reg_opts) - reg_num += 1 - # Plot the backbone (z=1) - if plot_backbone == True: - if(circular): - circ_start = first_start-self.backbone_pad_left - circ_end = prev_end+self.backbone_pad_right - circle_vheight #this is the height of the oval. - curves = (circ_end-circ_start)*.1 #curves are 5% of the length, lengthwise - plasmid = FancyBboxPatch((circ_start-circle_vheight/2, -circle_vheight), \ - (circ_end-circ_start)+circle_vheight, circle_vheight,\ - fc="none",ec=self.linecolor, linewidth=self.linewidth, \ - boxstyle='round,pad=0,rounding_size={}'.format(circle_vheight/2), \ - joinstyle="round", capstyle='round',mutation_aspect=1, zorder=5) - ax.add_patch(plasmid) - first_start = first_start-circle_vheight/2 - prev_end = prev_end+circle_vheight/2 - else: - l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], - linewidth=self.linewidth, color=self.linecolor, zorder=5) - - ax.add_line(l1) - return first_start, prev_end - - def annotate (self, ax, part_renderers, part, annotate_zorder=1000): - """ Annotate a plot at a user specified location and offset. - """ - # Annotations show be placed on top of existing design - if 'opts' not in list(part.keys()): - part['opts'] = {'zorder_add': annotate_zorder} - else: - part['opts']['zorder_add'] = annotate_zorder - # Draw the part - part_renderers[part['type']](ax, - part['type'], 1, - part['start'], part['end'], - part['start'], self.scale, - self.linewidth, opts=part['opts']) + """ Class defining the DNA rendering funtionality. + """ + + # Standard part types + STD_PART_TYPES = ['Promoter', + 'Aptamer', + 'CDS', + 'Terminator', + 'RBS', + 'Scar', + 'Spacer', + 'EmptySpace', + 'RecombinaseSite', + 'RecombinaseSite2', + 'NCRNA', + 'Ribozyme', + 'Ribonuclease', + 'Protease', + 'DNACleavageSite', + 'RNACleavageSite', + 'ProteinCleavageSite', + 'DNALocation', + 'RNALocation', + 'ProteinLocation', + 'DNAStability', + 'RNAStability', + 'ProteinStability', + 'StemTop', + 'Operator', + 'Origin', + 'OriginOfTransfer', + 'Insulator', + '5Overhang', + '3Overhang', + 'RestrictionSite', + 'BluntRestrictionSite', + 'PrimerBindingSite', + '5StickyRestrictionSite', + '3StickyRestrictionSite', + 'UserDefined', + 'Signature'] + + # Standard regulatory types + STD_REG_TYPES = ['Repression', + 'Activation', + 'Connection', + 'Binding'] + + def __init__(self, scale=1.0, linewidth=1.0, linecolor=(0,0,0), + backbone_pad_left=0.0, backbone_pad_right=0.0): + """ Constructor to generate an empty DNARenderer. + + Parameters + ---------- + scale : float (default=1.0) + A scaling factor for the plot. Only used if rendering traces. + + linewidth : float (default=1.0) + The default linewidth for all part drawing. + + backbone_pad_left : float (default=0.0) + Padding to add to the left side of the backbone. + + backbone_pad_right : float (default=0.0) + Padding to add to the left side of the backbone. + """ + self.scale = scale + self.linewidth = linewidth + self.linecolor = linecolor + self.backbone_pad_left = backbone_pad_left + self.backbone_pad_right = backbone_pad_right + self.reg_height = 15 + + def SBOL_part_renderers (self): + """ Return dictionary of all standard built-in SBOL part renderers. + """ + return { + 'Promoter' :sbol_promoter, + 'Aptamer' :sbol_aptamer, + 'CDS' :sbol_cds, + 'Terminator' :sbol_terminator, + 'RBS' :sbol_rbs, + 'Scar' :sbol_scar, + 'Spacer' :sbol_spacer, + 'EmptySpace' :sbol_empty_space, + 'Ribozyme' :sbol_ribozyme, + 'NCRNA' :sbol_ncrna, + 'Ribonuclease' :sbol_stem_top, + 'RecombinaseSite' :sbol_recombinase1, + 'RecombinaseSite2' :sbol_recombinase2, + 'Protease' :sbol_stem_top, + 'DNACleavageSite' :sbol_stem_top, + 'RNACleavageSite' :sbol_stem_top, + 'ProteinCleavageSite':sbol_stem_top, + 'DNALocation' :sbol_stem_top, + 'RNALocation' :sbol_stem_top, + 'ProteinLocation' :sbol_stem_top, + 'DNAStability' :sbol_stem_top, + 'RNAStability' :sbol_stem_top, + 'ProteinStability' :sbol_stem_top, + 'StemTop' :sbol_stem_top, + 'Operator' :sbol_operator, + 'Origin' :sbol_origin, + 'OriginOfTransfer' :sbol_origin_of_transfer, + 'Insulator' :sbol_insulator, + '5Overhang' :sbol_5_overhang, + '3Overhang' :sbol_3_overhang, + 'RestrictionSite' :sbol_restriction_site, + 'BluntRestrictionSite' :sbol_blunt_restriction_site, + 'PrimerBindingSite' :sbol_primer_binding_site, + '5StickyRestrictionSite' :sbol_5_sticky_restriction_site, + '3StickyRestrictionSite' :sbol_3_sticky_restriction_site, + 'UserDefined' :sbol_user_defined, + 'Signature' :sbol_signature} + + def trace_part_renderers (self): + """ Return dictionary of all standard built-in trace part renderers. + """ + return { + 'Promoter' :trace_promoter, + 'CDS' :trace_cds, + 'Terminator' :trace_terminator, + 'RBS' :trace_rbs, + 'UserDefined' :trace_user_defined} + + def std_reg_renderers (self): + """ Return dictionary of all standard built-in regulation renderers. + """ + return { + 'Repression' :repress, + 'Activation' :induce, + 'Connection' :connect, + 'Binding':bound} + + def renderDNA (self, ax, parts, part_renderers, regs=None, reg_renderers=None, plot_backbone=True,circular=False,circle_vheight=12): + """ Render the parts on the DNA and regulation. + + Parameters + ---------- + ax : matplotlib.axes + Axes to draw the design to. + + parts : list(dict) + The design to draw. This is a list of dicts, where each dict relates to + a part and must contain the following keys: + - name (string) + - type (string) + - fwd (bool) + - start (float, optional) + - end (float, optional) + These will then be drawn in accordance with the renders selected + + part_renderers : dict(functions) + Dict of functions where the key in the part type and the dictionary returns + the function to be used to draw that part type. + + regs : list(dict) (default=None) + Regulation present in the design. This is a list of dicts, where each dict + relates to a single regulation arc and must contain the following keys: + - type (string) + - from_part (part object dict) + - to_part (part object dict) + These will then be drawn in accordance with the renders selected. + + reg_renderers : dict(functions) (default=None) + Dict of functions where the key in the regulation type and the dictionary + returns the function to be used to draw that regulation type. + + Returns + ------- + start : float + The x-point in the axis space that drawing begins. + + end : float + The x-point in the axis space that drawing ends. + """ + # Update the matplotlib rendering default for drawing the parts (we want mitered edges) + matplotlib.rcParams['lines.dash_joinstyle'] = 'miter' + matplotlib.rcParams['lines.dash_capstyle'] = 'butt' + matplotlib.rcParams['lines.solid_joinstyle'] = 'miter' + matplotlib.rcParams['lines.solid_capstyle'] = 'projecting' + # Make text editable in Adobe Illustrator + matplotlib.rcParams['pdf.fonttype'] = 42 + # Plot the parts to the axis + part_num = 0 + prev_end = 0 + first_start = 0 + first_part = True + + for part in parts: + keys = list(part.keys()) + + # Check the part has minimal details required + if 'type' in keys: + if 'fwd' not in keys: + part['fwd'] = True + else: + pass + #if part['fwd'] == False: + #if('start' in keys): + # start = part['start'] + # end = part['end'] + # part['end'] = start + # part['start'] = end + if 'start' not in keys: + if part['fwd'] == True: + part['start'] = part_num + else: + part['start'] = part_num+1 + if 'end' not in keys: + if part['fwd'] == True: + part['end'] = part_num+1 + else: + part['end'] = part_num + # Extract custom part options (if available) + part_opts = None + if 'opts' in list(part.keys()): + part_opts = part['opts'] + # Use the correct renderer + if 'renderer' in list(part.keys()): + # Use custom renderer + prev_start, prev_end = part['renderer'](ax, part['type'], part_num, + part['start'], part['end'], prev_end, + self.scale, self.linewidth, + opts=part_opts) + + #update start,end for regulation + #part['start'] = prev_start + #part['end'] = prev_end + + if first_part == True: + first_start = prev_start + first_part = False + else: + # Use standard renderer, if one exists + if part['type'] in list(part_renderers.keys()): + prev_start, prev_end = part_renderers[part['type']](ax, + part['type'], part_num, + part['start'], part['end'], + prev_end, self.scale, + self.linewidth, opts=part_opts) + + #update start,end for regulation [TEG] + if part['fwd'] == True: + part['start'] = prev_start + part['end'] = prev_end + else: + part['start'] = prev_end + part['end'] = prev_start + + if first_part == True: + first_start = prev_start + first_part = False + part_num += 1 + + # first pass to get all of the arcranges + if regs != None: + + for reg in regs: + keys = list(reg.keys()) + + # Check the part has minimal details required + if 'type' in keys and 'from_part' in keys and 'to_part' in keys: + # Extract custom part options (if available) + + reg_opts = None + if 'opts' in list(reg.keys()): + reg_opts = reg['opts'] + + if reg['type'] in list(reg_renderers.keys()): + + ############################################################################## + arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 + if(reg['from_part']==reg['to_part']): + arcend = arcstart+.1 + else: + arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 + arcrange = [arcstart,arcend] + reg['arclength'] = math.fabs(arcstart-arcend) + reg['arc_height_index'] = 1 + ############################################################################## + + #sort regs by arc ranges from shortest to longest + regs.sort(key=lambda x: x['arclength'], reverse=False) + + reg_num = 0 + pos_arc_ranges = [] # arc above DNA backbone if to_part is fwd + neg_arc_ranges = [] # arc below DNA backbone if to_part is reverse + current_max = 1 + + # second pass to render all the arcs + for reg in regs: + keys = list(reg.keys()) + + # Check the part has minimal details required + if 'type' in keys and 'from_part' in keys and 'to_part' in keys: + # Extract custom part options (if available) + + reg_opts = None + if 'opts' in list(reg.keys()): + reg_opts = reg['opts'] + + if reg['type'] in list(reg_renderers.keys()): + + ############################################################################## + # arc height algorithm: greedy from left-to-right on DNA design + + arcstart = (reg['from_part']['start'] + reg['from_part']['end']) / 2 + if(reg['from_part']==reg['to_part']): + arcend = arcstart+.1 + else: + arcend = (reg['to_part']['start'] + reg['to_part']['end']) / 2 + + arcmin = min(arcstart,arcend) + arcmax = max(arcstart,arcend) + arcrange = [arcmin,arcmax,reg['arc_height_index']] + arc_height_index = 1 + + # arc above if to_part is fwd + if(reg['to_part']['fwd'] == True): + # find max arc height index of ONLY the prior arcs that clash with the current arc + current_max = 1 + for r in pos_arc_ranges: + if (arcrange[0] > r[0] and arcrange[0] < r[1]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[0] > r[1] and arcrange[0] < r[0]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[1] > r[0] and arcrange[0] < r[1]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[1] > r[1] and arcrange[0] < r[0]): + if(r[2] > current_max): + current_max = r[2] + + # if arcs cross over, increment the arc height index + for r in pos_arc_ranges: + if (arcrange[0] > r[0] and arcrange[0] < r[1]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[0] > r[1] and arcrange[0] < r[0]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[1] > r[0] and arcrange[0] < r[1]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[1] > r[1] and arcrange[0] < r[0]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + pos_arc_ranges.append(arcrange) + + # arc below if to_part is reverse + else: + # find max arc height index + current_max = 1 + for r in neg_arc_ranges: + if (arcrange[0] > r[0] and arcrange[0] < r[1]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[0] > r[1] and arcrange[0] < r[0]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[1] > r[0] and arcrange[0] < r[1]): + if(r[2] > current_max): + current_max = r[2] + elif(arcrange[1] > r[1] and arcrange[0] < r[0]): + if(r[2] > current_max): + current_max = r[2] + + # if arcs cross over, increment the arc height index + for r in neg_arc_ranges: + if (arcrange[0] > r[0] and arcrange[0] < r[1]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[0] > r[1] and arcrange[0] < r[0]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[1] > r[0] and arcrange[0] < r[1]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + elif(arcrange[1] > r[1] and arcrange[0] < r[0]): + reg['arc_height_index'] = current_max + 1 + arcrange[2] = reg['arc_height_index'] + neg_arc_ranges.append(arcrange) + ############################################################################## + reg_renderers[reg['type']](ax, reg['type'], + reg_num, reg['from_part'], + reg['to_part'], self.scale, + self.linewidth, reg['arc_height_index'], opts=reg_opts) + reg_num += 1 + # Plot the backbone (z=1) + if plot_backbone == True: + if(circular): + circ_start = first_start-self.backbone_pad_left + circ_end = prev_end+self.backbone_pad_right + circle_vheight #this is the height of the oval. + curves = (circ_end-circ_start)*.1 #curves are 5% of the length, lengthwise + plasmid = FancyBboxPatch((circ_start-circle_vheight/2, -circle_vheight), \ + (circ_end-circ_start)+circle_vheight, circle_vheight,\ + fc="none",ec=self.linecolor, linewidth=self.linewidth, \ + boxstyle='round,pad=0,rounding_size={}'.format(circle_vheight/2), \ + joinstyle="round", capstyle='round',mutation_aspect=1, zorder=5) + ax.add_patch(plasmid) + first_start = first_start-circle_vheight/2 + prev_end = prev_end+circle_vheight/2 + else: + l1 = Line2D([first_start-self.backbone_pad_left,prev_end+self.backbone_pad_right],[0,0], + linewidth=self.linewidth, color=self.linecolor, zorder=5) + + ax.add_line(l1) + return first_start, prev_end + + def annotate (self, ax, part_renderers, part, annotate_zorder=1000): + """ Annotate a plot at a user specified location and offset. + """ + # Annotations show be placed on top of existing design + if 'opts' not in list(part.keys()): + part['opts'] = {'zorder_add': annotate_zorder} + else: + part['opts']['zorder_add'] = annotate_zorder + # Draw the part + part_renderers[part['type']](ax, + part['type'], 1, + part['start'], part['end'], + part['start'], self.scale, + self.linewidth, opts=part['opts']) ############################################################################### @@ -3308,142 +3307,142 @@ def annotate (self, ax, part_renderers, part, annotate_zorder=1000): def plot_sbol_designs (axes, dna_designs, regulations=None, plot_params={}, plot_names=None): - """ Plot SBOL designs to axes. - - Parameters - ---------- - axes : list(matplotlib.axis) - List of axis objects to plot the designs to. - - dna_designs : list(dict(design_information)) - List of designs to plot. - - regulations : list(dict(regulation_information)) (default=None) - List of regulations to use for each design. - - plot_params : dict (default={}) - General plotting parameters to use. - - plot_names : list(string) (default=None) - List of names to use on each plot. If None provided then no titles displayed. - - Returns - ------- - xlims : [float, float] - The x-axis range for each axis. - - ylims : [float, float] - The y-axis range for each axis. - """ - # Standard plotting parameters - if 'axis_y' not in list(plot_params.keys()): - plot_params['axis_y'] = 35 - left_pad = 0.0 - right_pad = 0.0 - scale = 1.0 - linewidth = 1.0 - fig_y = 5.0 - fig_x = 5.0 - if 'backbone_pad_left' in list(plot_params.keys()): - left_pad = plot_params['backbone_pad_left'] - if 'backbone_pad_right' in list(plot_params.keys()): - right_pad = plot_params['backbone_pad_right'] - if 'scale' in list(plot_params.keys()): - scale = plot_params['scale'] - if 'linewidth' in list(plot_params.keys()): - linewidth = plot_params['linewidth'] - dr = DNARenderer(scale=scale, linewidth=linewidth, - backbone_pad_left=left_pad, - backbone_pad_right=right_pad) - - # We default to the standard regulation renderers - reg_renderers = dr.std_reg_renderers() - # We default to the SBOL part renderers - part_renderers = dr.SBOL_part_renderers() - - # Plot each design on the appropriate axis - num_of_designs = len(dna_designs) - max_dna_len = 0.0 - for i in range(num_of_designs): - - # Create axis for the design and plot - regs = None - if(regulations != None): - regs = regulations[i] - design = dna_designs[i] - ax = axes[i] - - if plot_names != None: - ax.set_title(plot_names[i], fontsize=8) - - start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) - - dna_len = end-start - if max_dna_len < dna_len: - max_dna_len = dna_len - - # Update formatting and resize all axis in similar way - for ax in axes: - ax.set_xticks([]) - ax.set_yticks([]) - # Set bounds - ax.set_xlim([(-0.01*max_dna_len)-left_pad, - max_dna_len+(0.01*max_dna_len)+right_pad]) - ax.set_ylim([-plot_params['axis_y'],plot_params['axis_y']]) - ax.set_aspect('equal') - ax.set_axis_off() - - # xlims, ylims are returned - return max_dna_len, [(-0.01*max_dna_len)-left_pad, max_dna_len+(0.01*max_dna_len)+right_pad], [-plot_params['axis_y'],plot_params['axis_y']] + """ Plot SBOL designs to axes. + + Parameters + ---------- + axes : list(matplotlib.axis) + List of axis objects to plot the designs to. + + dna_designs : list(dict(design_information)) + List of designs to plot. + + regulations : list(dict(regulation_information)) (default=None) + List of regulations to use for each design. + + plot_params : dict (default={}) + General plotting parameters to use. + + plot_names : list(string) (default=None) + List of names to use on each plot. If None provided then no titles displayed. + + Returns + ------- + xlims : [float, float] + The x-axis range for each axis. + + ylims : [float, float] + The y-axis range for each axis. + """ + # Standard plotting parameters + if 'axis_y' not in list(plot_params.keys()): + plot_params['axis_y'] = 35 + left_pad = 0.0 + right_pad = 0.0 + scale = 1.0 + linewidth = 1.0 + fig_y = 5.0 + fig_x = 5.0 + if 'backbone_pad_left' in list(plot_params.keys()): + left_pad = plot_params['backbone_pad_left'] + if 'backbone_pad_right' in list(plot_params.keys()): + right_pad = plot_params['backbone_pad_right'] + if 'scale' in list(plot_params.keys()): + scale = plot_params['scale'] + if 'linewidth' in list(plot_params.keys()): + linewidth = plot_params['linewidth'] + dr = DNARenderer(scale=scale, linewidth=linewidth, + backbone_pad_left=left_pad, + backbone_pad_right=right_pad) + + # We default to the standard regulation renderers + reg_renderers = dr.std_reg_renderers() + # We default to the SBOL part renderers + part_renderers = dr.SBOL_part_renderers() + + # Plot each design on the appropriate axis + num_of_designs = len(dna_designs) + max_dna_len = 0.0 + for i in range(num_of_designs): + + # Create axis for the design and plot + regs = None + if(regulations != None): + regs = regulations[i] + design = dna_designs[i] + ax = axes[i] + + if plot_names != None: + ax.set_title(plot_names[i], fontsize=8) + + start, end = dr.renderDNA(ax, design, part_renderers, regs, reg_renderers) + + dna_len = end-start + if max_dna_len < dna_len: + max_dna_len = dna_len + + # Update formatting and resize all axis in similar way + for ax in axes: + ax.set_xticks([]) + ax.set_yticks([]) + # Set bounds + ax.set_xlim([(-0.01*max_dna_len)-left_pad, + max_dna_len+(0.01*max_dna_len)+right_pad]) + ax.set_ylim([-plot_params['axis_y'],plot_params['axis_y']]) + ax.set_aspect('equal') + ax.set_axis_off() + + # xlims, ylims are returned + return max_dna_len, [(-0.01*max_dna_len)-left_pad, max_dna_len+(0.01*max_dna_len)+right_pad], [-plot_params['axis_y'],plot_params['axis_y']] def save_sbol_designs (filename, dna_designs, regulations=None, plot_params={}, plot_names=None): - """ Plot SBOL designs to axes. + """ Plot SBOL designs to axes. - Parameters - ---------- - filename : string - Image filename to save designs to. Extention provided will determine format - and must be supported by matplotlib. + Parameters + ---------- + filename : string + Image filename to save designs to. Extention provided will determine format + and must be supported by matplotlib. - dna_designs : list(dict(design_information)) - List of designs to plot. + dna_designs : list(dict(design_information)) + List of designs to plot. - regulations : list(dict(regulation_information)) (default=None) - List of regulations to use for each design. + regulations : list(dict(regulation_information)) (default=None) + List of regulations to use for each design. - plot_params : dict (default={}) - General plotting parameters to use. + plot_params : dict (default={}) + General plotting parameters to use. - plot_names : list(string) (default=None) - List of names to use on each plot. If None provided then no titles displayed. - """ + plot_names : list(string) (default=None) + List of names to use on each plot. If None provided then no titles displayed. + """ - # Create the figure - fig = plt.figure(figsize=(10,10)) - fig.patch.set_facecolor('white') + # Create the figure + fig = plt.figure(figsize=(10,10)) + fig.patch.set_facecolor('white') - # Create all the axes required - axes = [] - for i in range(len(dna_designs)): - ax = fig.add_subplot(len(dna_designs),1,i+1, axisbg='white') - axes.append(ax) + # Create all the axes required + axes = [] + for i in range(len(dna_designs)): + ax = fig.add_subplot(len(dna_designs),1,i+1, axisbg='white') + axes.append(ax) - # Plot design to the axes - max_dna_len, lims, params = plot_sbol_designs (axes, dna_designs, regulations=regulations, plot_params=plot_params, plot_names=plot_names) + # Plot design to the axes + max_dna_len, lims, params = plot_sbol_designs (axes, dna_designs, regulations=regulations, plot_params=plot_params, plot_names=plot_names) - # Update the size of the figure to fit the constructs drawn - fig_x_dim = max_dna_len/70.0 - if fig_x_dim < 1.0: - fig_x_dim = 1.0 - fig_y_dim = 1.2*len(axes) - plt.gcf().set_size_inches( (fig_x_dim, fig_y_dim) ) + # Update the size of the figure to fit the constructs drawn + fig_x_dim = max_dna_len/70.0 + if fig_x_dim < 1.0: + fig_x_dim = 1.0 + fig_y_dim = 1.2*len(axes) + plt.gcf().set_size_inches( (fig_x_dim, fig_y_dim) ) - # Save the figure - plt.tight_layout() - fig.savefig(filename, transparent=True, dpi=300) - # Clear the plotting cache - plt.close('all') + # Save the figure + plt.tight_layout() + fig.savefig(filename, transparent=True, dpi=300) + # Clear the plotting cache + plt.close('all') ############################################################################### @@ -3452,29 +3451,29 @@ def save_sbol_designs (filename, dna_designs, regulations=None, plot_params={}, def convert_attrib (attrib): - if attrib[0] == '(' and attrib[-1] == ')' and len(attrib.split(',')) == 3: - col_parts = attrib[1:-1].split(',') - new_col = (float(col_parts[0]), float(col_parts[1]), float(col_parts[2])) - return new_col - if attrib[0] == '(' and attrib[-1] == ')' and len(attrib.split(',')) == 4: - col_parts = attrib[1:-1].split(',') - new_col = (float(col_parts[0]), float(col_parts[1]), float(col_parts[2]), float(col_parts[3])) - return new_col - try: - # See if a number - return float(attrib) - except ValueError: - # Must be a string - return attrib + if attrib[0] == '(' and attrib[-1] == ')' and len(attrib.split(',')) == 3: + col_parts = attrib[1:-1].split(',') + new_col = (float(col_parts[0]), float(col_parts[1]), float(col_parts[2])) + return new_col + if attrib[0] == '(' and attrib[-1] == ')' and len(attrib.split(',')) == 4: + col_parts = attrib[1:-1].split(',') + new_col = (float(col_parts[0]), float(col_parts[1]), float(col_parts[2]), float(col_parts[3])) + return new_col + try: + # See if a number + return float(attrib) + except ValueError: + # Must be a string + return attrib dpl_default_type_map = {'gene': 'CDS', - 'promoter': 'Promoter', - 'terminator': 'Terminator', - 'rbs': 'RBS'} + 'promoter': 'Promoter', + 'terminator': 'Terminator', + 'rbs': 'RBS'} def simple_plot_design(simple_design,label_size = 13, label_y_offset = -8,cmap ='Set3',cmap2 = 'Set2',ax=None,\ - part_renderers=None,circular=False,ylift=-12,simplereg = None,regs=None,reg_renderers=None,\ + dna_renderer=None,circular=False,ylift=-12,simplereg = None,regs=None,reg_renderers=None,\ linewidth=3,edgecolor = (1,.2,.2)): """a simpler way to plot a construct. simple_design: list of "SimplePart" objects, containing @@ -3496,6 +3495,10 @@ def simple_plot_design(simple_design,label_size = 13, label_y_offset = -8,cmap = color_count = 0 design_list = [] annotate_list = [] + if(dna_renderer is None): + dr = DNARenderer(scale = 5,linewidth=linewidth,linecolor=edgecolor) + else: + dr = dna_renderer for part in simple_design: part_dict = {'type':part.dpl_type, 'name':'test', 'fwd':'forward'==part.direction,\ 'opts':{'label':part.name,'label_size':label_size,'label_y_offset':label_y_offset,\ @@ -3506,9 +3509,7 @@ def simple_plot_design(simple_design,label_size = 13, label_y_offset = -8,cmap = if(color_count >= len(cmap_obj) or color_count >= len(cmap2_obj)): color_count = 0 design_list += [part_dict] - if(part_renderers is None): - dr = DNARenderer(scale = 5,linewidth=linewidth,linecolor=edgecolor) - part_renderers = dr.SBOL_part_renderers() + part_renderers = dr.SBOL_part_renderers() if(ax is None): figsize = (len(design_list)*.75,1.6) @@ -3573,57 +3574,57 @@ def simple_plot_design(simple_design,label_size = 13, label_y_offset = -8,cmap = return ax def load_design_from_gff (filename, chrom, type_map=dpl_default_type_map, region=None): - # Load the GFF data - gff = [] - data_reader = csv.reader(open(filename, 'rU'), delimiter='\t') - for row in data_reader: - if len(row) == 9: - cur_chrom = row[0] - part_type = row[2] - start_bp = int(row[3]) - end_bp = int(row[4]) - part_dir = row[6] - part_attribs = {} - split_attribs = row[8].split(';') - part_name = None - for attrib in split_attribs: - key_value = attrib.split('=') - if len(key_value) == 2: - if key_value[0] == 'Name': - part_name = key_value[1] - else: - part_attribs[key_value[0]] = convert_attrib(key_value[1]) - if part_name != None and cur_chrom == chrom and part_type in list(type_map.keys()): - # Check feature start falls in region - if region != None and (start_bp > region[0] and start_bp < region[1]): - gff.append([part_name, type_map[part_type], part_dir, start_bp, end_bp, part_attribs]) - # Convert to DNAplotlib design (sort on start position first) - design = [] - for gff_el in sorted(gff, key=itemgetter(3)): - new_part = {} - new_part['name'] = gff_el[0] - new_part['type'] = gff_el[1] - if gff_el[2] == '+': - new_part['fwd'] = True - else: - new_part['fwd'] = False - new_part['start'] = gff_el[3] - new_part['end'] = gff_el[4] - new_part['opts'] = gff_el[5] - design.append(new_part) - # Return the sorted design - return design + # Load the GFF data + gff = [] + data_reader = csv.reader(open(filename, 'rU'), delimiter='\t') + for row in data_reader: + if len(row) == 9: + cur_chrom = row[0] + part_type = row[2] + start_bp = int(row[3]) + end_bp = int(row[4]) + part_dir = row[6] + part_attribs = {} + split_attribs = row[8].split(';') + part_name = None + for attrib in split_attribs: + key_value = attrib.split('=') + if len(key_value) == 2: + if key_value[0] == 'Name': + part_name = key_value[1] + else: + part_attribs[key_value[0]] = convert_attrib(key_value[1]) + if part_name != None and cur_chrom == chrom and part_type in list(type_map.keys()): + # Check feature start falls in region + if region != None and (start_bp > region[0] and start_bp < region[1]): + gff.append([part_name, type_map[part_type], part_dir, start_bp, end_bp, part_attribs]) + # Convert to DNAplotlib design (sort on start position first) + design = [] + for gff_el in sorted(gff, key=itemgetter(3)): + new_part = {} + new_part['name'] = gff_el[0] + new_part['type'] = gff_el[1] + if gff_el[2] == '+': + new_part['fwd'] = True + else: + new_part['fwd'] = False + new_part['start'] = gff_el[3] + new_part['end'] = gff_el[4] + new_part['opts'] = gff_el[5] + design.append(new_part) + # Return the sorted design + return design def load_profile_from_bed (filename, chrom, region): - region_len = region[1]-region[0] - profile = [0]*region_len - data_reader = csv.reader(open(filename, 'rU'), delimiter='\t') - for row in data_reader: - if len(row) == 5: - cur_chrom = row[0] - cur_start_bp = int(row[1]) - cur_end_bp = int(row[2]) - if cur_start_bp == region[0] and cur_end_bp == region[1]: - profile[int(row[3])-1] = float(row[4]) - return profile + region_len = region[1]-region[0] + profile = [0]*region_len + data_reader = csv.reader(open(filename, 'rU'), delimiter='\t') + for row in data_reader: + if len(row) == 5: + cur_chrom = row[0] + cur_start_bp = int(row[1]) + cur_end_bp = int(row[2]) + if cur_start_bp == region[0] and cur_end_bp == region[1]: + profile[int(row[3])-1] = float(row[4]) + return profile diff --git a/gallery/notebooks/interactiveplot.ipynb b/gallery/notebooks/interactiveplot.ipynb index 277de2a..bb97371 100644 --- a/gallery/notebooks/interactiveplot.ipynb +++ b/gallery/notebooks/interactiveplot.ipynb @@ -86,7 +86,7 @@ "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6gAAAB6CAYAAACyX36RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3de5zM9f4H8Nd71461bGXlsuQuESV2dBGHhMQSynFyi3ShIqTYCqtIIg5JYes4HVEo90ul8tucbqZc4pRyWVnWLbnGLruf3x/fmdnvrpm9zuc7l309H499mHnP9zvz2deM2XnP9/IRpRSIiIiIiIiI/C3M3wMgIiIiIiIiAtigEhERERERUYBgg0pEREREREQBgQ0qERERERERBQQ2qERERERERBQQ2KASERERERFRQGCDSkRERERERAGBDSoREREREREFBDaoREREREREFBDYoBIREREREVFAYINKREREREREAYENKhEREREREQUENqhEREREREQUENigEhERERERUUBgg0pEREREREQBgQ0qERERERERBQQ2qERERERERBQQ2KASERERERFRQGCDSkRERERERAGBDSoREREREREFBDaoREREREREFBDYoBIREREREVFAYINKREREREREAYENasBYUxtYE+HvURAREREREfkLG9TA0RfAbmDNw2xUiYiIiIioJGKDGlhqA3gHbFSJiIiIiKgEYoMamNioEhERERFRicMGNbCxUSUiIiIiohKDDWpwYKNKREREREQhjw1qcGGjSkREREREIYsNanBioxqERKSKv8dA1uHzbQ3mbA3mbA3mbA3mbA3mbI1QzFmUUv4eQ4hY488g9wO4H4jf6scxUD5EZCqA/yqlVvjj8Ses2qn9NTq+a2PR/RjBQkTWAxiqlNrj77GEMuZsDeZsDeZsDeZsDeZsjVDMmVtQg99GAP3ZnAaFMACLRaSFvwdClqgEYIOIVPL3QEIcc7YGc7YGc7YGc7YGc7ZGyOXMBjV4bQTQCohvD8Rv9vdgqMAiAawWkRv8PRCyRF0Aa0SkrL8HEuKYszWYszWYszWYszWYszVCKudS/h5AaIovwm6Oa8YCeKkAC24EMIFNaVCLgfFNVwulVJpVD1qY3W/NuwNzt91iaw7gQxHpppS67O/BhDDmbA3mbA3mbA3mbA3m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\n" }, "metadata": { @@ -135,7 +135,7 @@ "\n", "simple_arc = {'Binding':[[1,\"RNAP\"],[2,\"A\"],[2,\"B\"],[7,\"Bxb1\"],[5,\"Bxb1\"]]}\n", "\n", - "a = simple_plot_design([aL,prom,utr,cds,term,cds,cds,cds,cds,cds,cds,cds],simplereg = {},circular=True)\n", + "a = dpl.simple_plot_design([aL,prom,utr,cds,term,cds,cds,cds,cds,cds,cds,cds],simplereg = {},circular=True)\n", "\n" ] },