diff --git a/.github/workflows/github_tests.yml b/.github/workflows/github_tests.yml index 40ec533..f3257be 100644 --- a/.github/workflows/github_tests.yml +++ b/.github/workflows/github_tests.yml @@ -15,10 +15,20 @@ jobs: uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 - - name: Install dependencies - run: | - # $CONDA is an environment variable pointing to the root of the miniconda directory - $CONDA/bin/conda env update --file environment.yml --name base + - name: Setup conda + uses: conda-incubator/setup-miniconda@v2 + with: + channels: conda-forge, bioconda + channel-priority: strict + mamba-version: "*" + activate-environment: phylophiller + environment-file: environment.yml + auto-update-conda: false + + #- name: Install dependencies + # run: | + # # $CONDA is an environment variable pointing to the root of the miniconda directory + # $CONDA/bin/mamba env update --file environment.yml --name base - name: Lint with flake8 run: | $CONDA/bin/flake8 phylofiller/ diff --git a/phylofiller/rna.py b/phylofiller/rna.py new file mode 100644 index 0000000..ee3695f --- /dev/null +++ b/phylofiller/rna.py @@ -0,0 +1,238 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + + +def read_dotplot(fp_dotplot, omit_MEA=True): + """Read a dot postscript file from Vienna. + + Parameters + ---------- + fp_dotplot : str + Filepath to dot.ps file, procuded by e.g. RNAfold + omit_MEA : bool + If True, only report base pair probabilities, i.e. upper right + triangle but NO base pairs used in the Maximum Expected Accurracy + secondary structure, i.e. lower left triangle (= lbox) + + Returns + ------- + A tuple of a pandas.DataFrame and a nucleotide sequence as a str. + The dataframe has a two level index of type int to indicate start and + end positions of all read base pairs and one column calles "probabilities" + that holds the actual base pair probabilities, i.e. read data from the ps + file CONVERTED from sqrt(prob) to prob. + probability + start end + 1 17 0.177101 + 19 0.172224 + 21 0.277901 + 24 0.084927 + 38 0.212154 + ... ... + 38 46 0.194564 + 39 44 0.130276 + 40 45 0.347719 + 41 45 0.090910 + 42 46 0.103339 + If omit_MEA == False, the DataFrame holds an additional column "box" + flagging each probability as either ubox (uppler right triangle) or + lbox (lower left triangle = MEA). + """ + data = None + seq = [] + + recordseq = False + breakNext = False + peek = None + with open(fp_dotplot, 'r') as f: + for lnr, line in enumerate(f.readlines()): + if line.startswith(') } def'): + recordseq = False + if recordseq: + seq.append(line.strip().replace('\\', '')) + if line.startswith('/sequence { ('): + recordseq = True + if line.startswith('%start of base pair probability data'): + breakNext = True + continue + if breakNext: + peek = line + break + # rnafold and rnaalifold produce different data blocks: + # RNAfold: + # %start of base pair probability data + # 1 8 0.003375481 ubox + # 1 9 0.003326045 ubox + # + # RNAalifold: + # %start of base pair probability data + # 0.99 1.00 hsb 1 73 0.999728 ubox + # 0.60 1.00 hsb 1 73 0.399728 ubox + # + # we peek into the first data row and decide on the number of fields + # which program might be the source + fields = ['start', 'end', 'probability', 'box'] # default to RNAfold + if len(peek.strip().split()) > 4: + fields = ['field1', 'field2', 'hsb', 'start', 'end', 'probability', + 'box'] + + data = pd.read_csv(fp_dotplot, sep=" ", skiprows=lnr+1, header=None, + names=fields).iloc[:-3] + # convert sqrt(p(i,j)) back to p(i,j) + data['probability'] = data['probability'].apply(lambda x: np.sqrt(x)) + + for field in ['start', 'end']: + data[field] = data[field].astype(int) + for field in ['probability']: + data[field] = data[field].astype(float) + + if omit_MEA: + data = data[data['box'] != 'lbox'] + del data['box'] + + return data.set_index(['start', 'end']), ''.join(seq) + + +def dotPlot(bp_ref, seq_ref, bp_mut=None, seq_mut=None, plotsize=10, title="", + drawSequence=True, color_ref='darkgreen', color_mut='darkred', + color_both='yellow'): + """Produces an RNA 'dot-plot' to visualize base-pair probabilities. + + Parameters + ---------- + bp_ref : pandas.DataFrame + Base pair probabilities for a reference folding space. + The datatype is a pandas DataFrame with a two level index of type + int that address positions of the base pair and one column that + holds base pair probabilities, e.g. + + probability + start end + 1 17 0.177101 + 19 0.172224 + 21 0.277901 + 24 0.084927 + 38 0.212154 + ... ... + 38 46 0.194564 + 39 44 0.130276 + 40 45 0.347719 + 41 45 0.090910 + 42 46 0.103339 + seq_ref : str + The nucleotide sequence of the RNA molecule. + (It is used to determine the size of the dot-plot.) + bp_mut : pandas.DataFrame + Base pair probabilities of an alternative folding space, + e.g. a mutated RNA molecule. Datatype is the same as in + bp_ref. + seq_mut : str + The nucleotide sequence of a mutated RNA molecule. + plotsize : int + The relative size of the figure, which also depends on the + seq_ref length. + title : str + A title for the dot-plot. + drawSequence : bool + seq_ref and/or seq_mut won't we used as tick labels if set + to False. + color_ref : str + The color to plot base-pair probabilities for the reference + folding space. + color_mut : str + The color to plot base-pair probabilities for the mutated + folding space. + color_both : str + The color to plot base-pair probabilities that overlap between + the reference and the mutated folding space. + + Returns + ------- + plt.figure + """ + length = len(seq_ref) + plotsize = 0.15 * length + + fig, ax = plt.subplots(figsize=(plotsize, plotsize)) + + # grid at every 10th base + for pos in range(10, length, 10): + ax.axvline(x=pos, color='gray', linewidth=0.5, zorder=-5.0) + ax.axhline(y=pos, color='gray', linewidth=0.5, zorder=-5.0) + + # diagonal line + ax.plot([-0.5, length], [-0.5, length], color='black', linewidth=0.5) + + # plot overlay of two base pair probability sets + for ((start, end), probs) in pd.concat( + [bp_ref, bp_mut], axis=1).fillna(0).iterrows(): + bpprobA = probs.iloc[0] + bpprobB = 0 + if probs.shape[0] == 2: + bpprobB = probs.iloc[1] + + # scale basepair probability with square area -> take square root + # (same as in Vienna) + (sizeA, sizeB) = map(lambda x: x**2, (bpprobA, bpprobB)) + + def _getCoords(start, end, size): + return start - (size / 2) - 1, end - (size / 2) - 1 + size_larger, (x_larger, y_larger) = sizeA, _getCoords( + start, end, sizeA) + size_smaller, (x_smaller, y_smaller) = sizeB, _getCoords( + start, end, sizeB) + color = color_ref + if bpprobB > bpprobA: + size_larger, (x_larger, y_larger), \ + size_smaller, (x_smaller, y_smaller) = \ + size_smaller, (x_smaller, y_smaller), \ + size_larger, (x_larger, y_larger) + color = color_mut + ax.add_patch(plt.Rectangle((y_larger, x_larger), + size_larger, size_larger, color=color)) + if size_smaller > 0: + ax.add_patch(plt.Rectangle((y_smaller, x_smaller), + size_smaller, size_smaller, + color=color_both)) + + ax.set_xlim((-0.5, length - 0.5)) + ax.set_ylim((-0.5, length - 0.5)) + + if seq_mut is None: + seq_mut = seq_ref + top_x = list(map(lambda x: '\n'.join(x) if x[0] != x[1] else "\n" + x[0], + zip(seq_mut, seq_ref))) + bottom_x = list( + map(lambda x: '\n'.join(x) if x[0] != x[1] else x[0] + "\n", + zip(seq_ref, seq_mut))) + left_y = list(map(lambda x: ' '.join(x) if x[0] != x[1] else x[0], + zip(seq_mut, seq_ref))) + right_y = list(map(lambda x: ' '.join(x) if x[0] != x[1] else x[0], + zip(seq_ref, seq_mut))) + # sequence as tick labels at all four corners + if drawSequence: + ax.set_xticks(range(0, length), ) + ax.set_xticklabels(bottom_x, fontsize=6) + ax.tick_params(axis=u'both', which=u'both', length=0) + + ax.set_yticks(ax.get_xticks()) + ax.set_yticklabels(left_y, fontsize=6, ha="right") + + ax2 = ax.twiny() + ax2.set_xlim(ax.get_xlim()) + ax2.set_xticks(ax.get_xticks()) + ax2.set_xticklabels(top_x, fontsize=6) + ax2.tick_params(axis=u'both', which=u'both', length=0) + + ax3 = ax.twinx() + ax3.set_ylim(ax.get_ylim()) + ax3.set_yticks(ax.get_xticks()) + ax3.set_yticklabels(reversed(right_y), fontsize=6, ha='left') + ax3.tick_params(axis=u'both', which=u'both', length=0) + + ax.invert_yaxis() + + ax.set_title(title, fontsize=30) + + return fig diff --git a/phylofiller/test/data/alidot.eps b/phylofiller/test/data/alidot.eps new file mode 100644 index 0000000..83b19d8 --- /dev/null +++ b/phylofiller/test/data/alidot.eps @@ -0,0 +1,244 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: ViennaRNA-2.6.3 +%%CreationDate: Tue Sep 12 17:28:23 2023 +%%Title: RNA Dot Plot +%%BoundingBox: 66 211 518 662 +%%DocumentFonts: Helvetica +%%Pages: 1 +%%EndComments + +% Program options: --noLP + +% This file contains the square roots of probabilities in the form +% i j sqrt(p(i,j)) ubox + +/DPdict 100 dict def + +DPdict begin + +%%BeginProlog + +/logscale false def +/lpmin 1e-05 log def +/DataVisible [ true true true true] def +/DataTitles [ false false false false ] def +/min { 2 copy gt { exch } if pop } bind def +/max { 2 copy lt { exch } if pop } bind def +/box { %size x y box - draws box centered on x,y + 2 index 0.5 mul sub % x -= 0.5 + exch 2 index 0.5 mul sub exch % y -= 0.5 + 3 -1 roll dup rectfill +} bind def +/ubox { + logscale { + log dup add lpmin div 1 exch sub dup 0 lt { pop 0 } if + } if + 3 1 roll + exch len exch sub 1 add box +} bind def +/lbox { + 3 1 roll + len exch sub 1 add box +} bind def +/drawseq { % print sequence along all 4 sides +[ [0.7 -0.3 0 ] + [0.7 0.7 len add 0] + [-0.3 len sub -0.4 -90] + [-0.3 len sub 0.7 len add -90] +] { + gsave + aload pop rotate translate + 0 1 len 1 sub { + dup 0 moveto + sequence exch 1 getinterval + show + } for + grestore + } forall +} bind def +/drawgrid{ + gsave + 0.5 dup translate + 0.01 setlinewidth + len log 0.9 sub cvi 10 exch exp % grid spacing + dup 1 gt { + dup dup 20 div dup 2 array astore exch 40 div setdash + } { [0.3 0.7] 0.1 setdash } ifelse + 0 exch len { + dup dup + 0 moveto + len lineto + dup + len exch sub 0 exch moveto + len exch len exch sub lineto + stroke + } for + [] 0 setdash + 0.04 setlinewidth + % draw strand separators if required + currentdict /nicks known { + gsave + % draw lines in red color + 0 1 1 sethsbcolor + % draw with line thickness of 0.2 + 0.2 setlinewidth + nicks + { 1 sub + dup dup -1 moveto len 1 add lineto + len exch sub dup + -1 exch moveto len 1 add exch lineto + stroke + } forall + grestore + } if + % draw diagonal + 0 len moveto len 0 lineto stroke + grestore +} bind def +/drawTitle { + currentdict /DPtitle known { + % center title text + /Helvetica findfont 10 scalefont setfont + 360 705 moveto DPtitle dup stringwidth pop 2 div neg 0 rmoveto show + } if +} bind def +/prepareCoords { + 0 1 3 { + % check whether we want to display current data + dup DataVisible exch get + { + % check whether we've actually got some data + DataSource exch get dup currentdict exch known { + % data source s_j is present, so find length of array + currentdict exch get length + } { pop 0 } ifelse + } if + } for + exch dup 5 -1 roll add 4 -1 roll dup 5 1 roll 4 -1 roll add max + len add 3 add 700 exch div dup scale + exch 1 add exch 1 add translate +} bind def +/utri{ % i j prob utri + gsave + 0.5 dup translate + 1 min 2 div + 0.85 mul 0.15 add 0.95 0.33 + 3 1 roll % prepare hsb color + sethsbcolor + % now produce the coordinates for lines + exch 1 sub dup len exch sub dup 4 -1 roll dup 3 1 roll dup len exch sub + moveto lineto lineto closepath fill + grestore +} bind def + +%%EndProlog + +/DPtitle { + (alidot.ps) +} def + +/sequence { (\ +GGGCCCGUAGCACAGUGGA__AGAGCACAUGCCUUCCAACCA_GAUGUCCCGGGUUCGAAUCCAGCCGAGCCCA\ +) } def +/len { sequence length } bind def + +72 216 translate +72 6 mul len 1 add div dup scale +/Helvetica findfont 0.95 scalefont setfont + +drawseq +/hsb { +dup 0.3 mul 1 exch sub sethsbcolor +} bind def + + +%draw the grid +drawgrid + +%start of base pair probability data +0.99 1.00 hsb 1 73 0.999728 ubox +0.60 1.00 hsb 1 73 0.399728 ubox +0.32 1.00 hsb 1 73 0.9995 lbox +0.16 1.00 hsb 2 72 1.000000 ubox +0.16 1.00 hsb 2 72 1.0000 lbox +0.32 1.00 hsb 3 71 0.999999 ubox +0.32 1.00 hsb 3 71 1.0000 lbox +0.32 1.00 hsb 4 70 0.999999 ubox +0.32 1.00 hsb 4 70 1.0000 lbox +0.16 0.20 hsb 5 69 0.999625 ubox +0.16 0.20 hsb 5 69 0.9993 lbox +0.32 0.60 hsb 6 68 0.999951 ubox +0.32 0.60 hsb 6 68 0.9999 lbox +0.16 0.20 hsb 7 28 0.005574 ubox +0.16 1.00 hsb 7 67 0.999065 ubox +0.16 1.00 hsb 7 67 0.9981 lbox +0.00 1.00 hsb 8 14 0.003372 ubox +0.16 1.00 hsb 8 27 0.142834 ubox +0.16 0.20 hsb 8 45 0.003922 ubox +0.00 1.00 hsb 8 47 0.011281 ubox +0.16 0.20 hsb 8 66 0.064655 ubox +0.32 0.20 hsb 9 13 0.003015 ubox +0.16 0.60 hsb 9 16 0.001129 ubox +0.32 0.20 hsb 9 26 0.014167 ubox +0.16 0.20 hsb 9 46 0.007284 ubox +0.16 0.20 hsb 9 49 0.008486 ubox +0.00 0.60 hsb 10 16 0.002903 ubox +0.16 0.20 hsb 10 24 0.001556 ubox +0.16 1.00 hsb 10 26 0.999285 ubox +0.16 1.00 hsb 10 26 0.9986 lbox +0.00 0.20 hsb 10 28 0.011098 ubox +0.00 0.20 hsb 10 48 0.001017 ubox +0.16 1.00 hsb 10 49 0.001798 ubox +0.32 1.00 hsb 11 15 0.003132 ubox +0.32 1.00 hsb 11 23 0.001588 ubox +0.16 1.00 hsb 11 25 0.999858 ubox +0.16 1.00 hsb 11 25 0.9997 lbox +0.16 0.60 hsb 11 27 0.011981 ubox +0.16 1.00 hsb 11 47 0.001200 ubox +0.32 0.20 hsb 12 19 0.003318 ubox +0.32 0.60 hsb 12 24 0.999731 ubox +0.32 0.60 hsb 12 24 0.9995 lbox +0.16 0.20 hsb 12 26 0.011941 ubox +0.16 0.60 hsb 13 18 0.008608 ubox +0.32 1.00 hsb 13 23 0.999432 ubox +0.32 1.00 hsb 13 23 0.9989 lbox +0.16 1.00 hsb 13 25 0.011947 ubox +0.16 0.20 hsb 15 24 0.007699 ubox +0.32 1.00 hsb 15 26 0.006331 ubox +0.16 0.60 hsb 16 23 0.007765 ubox +0.16 0.60 hsb 16 25 0.006329 ubox +0.16 0.20 hsb 17 24 0.006435 ubox +0.16 1.00 hsb 23 49 0.009394 ubox +0.16 0.20 hsb 24 48 0.009126 ubox +0.00 0.20 hsb 25 48 0.002487 ubox +0.16 1.00 hsb 26 47 0.019164 ubox +0.16 0.20 hsb 27 46 0.067310 ubox +0.16 0.20 hsb 27 48 0.028508 ubox +0.00 0.20 hsb 28 44 0.975306 ubox +0.00 0.20 hsb 28 44 0.9512 lbox +0.32 0.20 hsb 28 45 0.024899 ubox +0.00 0.20 hsb 28 47 0.028905 ubox +0.16 0.20 hsb 29 43 0.997679 ubox +0.16 0.20 hsb 29 43 0.9954 lbox +0.32 1.00 hsb 30 42 0.999985 ubox +0.32 1.00 hsb 30 42 1.0000 lbox +0.32 1.00 hsb 31 41 0.999999 ubox +0.32 1.00 hsb 31 41 1.0000 lbox +0.32 1.00 hsb 32 40 0.999864 ubox +0.32 1.00 hsb 32 40 0.9997 lbox +0.16 0.20 hsb 49 66 0.004595 ubox +0.32 1.00 hsb 50 66 0.997558 ubox +0.32 1.00 hsb 50 66 0.9951 lbox +0.32 1.00 hsb 51 65 0.999993 ubox +0.32 1.00 hsb 51 65 1.0000 lbox +0.32 1.00 hsb 52 64 0.999997 ubox +0.32 1.00 hsb 52 64 1.0000 lbox +0.16 1.00 hsb 53 62 0.001558 ubox +0.00 1.00 hsb 53 63 0.999999 ubox +0.00 1.00 hsb 53 63 1.0000 lbox +0.16 0.20 hsb 54 61 0.003646 ubox +0.16 0.60 hsb 54 62 0.999342 ubox +0.16 0.60 hsb 54 62 0.9987 lbox +showpage +end +%%EOF diff --git a/phylofiller/test/data/dot_1.ps b/phylofiller/test/data/dot_1.ps new file mode 100644 index 0000000..00e0844 Binary files /dev/null and b/phylofiller/test/data/dot_1.ps differ diff --git a/phylofiller/test/data/dot_2.ps b/phylofiller/test/data/dot_2.ps new file mode 100644 index 0000000..66d1a7c Binary files /dev/null and b/phylofiller/test/data/dot_2.ps differ diff --git a/phylofiller/test/test_rna.py b/phylofiller/test/test_rna.py new file mode 100644 index 0000000..bfe3c12 --- /dev/null +++ b/phylofiller/test/test_rna.py @@ -0,0 +1,299 @@ +from unittest import TestCase, main +import matplotlib + +from skbio.util import get_data_path + +from phylofiller.rna import read_dotplot, dotPlot + + +def dpElements(fig): + xs_lines = [] + ys_lines = [] + + xs_rect = [] + ys_rect = [] + width_rect = [] + height_rect = [] + for c in fig.get_axes()[0]._children: + if type(c) == matplotlib.lines.Line2D: + xs_lines.extend(list(c._x)) + ys_lines.extend(list(c._y)) + elif type(c) == matplotlib.patches.Rectangle: + xs_rect.append(c._x0) + ys_rect.append(c._y0) + width_rect.append(c._width) + height_rect.append(c._height) + return {'lines': {'xs': sorted(xs_lines), + 'ys': sorted(ys_lines)}, + 'bp': {'xs': sorted(xs_rect), + 'ys': sorted(ys_rect), + 'widths': sorted(width_rect), + 'heights': sorted(height_rect)}} + + +class RNATests(TestCase): + def setUp(self): + self.fp_dot1 = get_data_path('dot_1.ps') + self.fp_dot2 = get_data_path('dot_2.ps') + self.fp_dot_ali = get_data_path('alidot.eps') + self.exp_bp1 = """1 17 0.177101 + 19 0.172224 + 21 0.277901 + 24 0.084927 + 38 0.212154 + 39 0.335306 + 42 0.146063 + 43 0.183989 + 45 0.086119 +2 7 0.090834 + 16 0.234677 + 18 0.147233 + 20 0.286643 + 22 0.181581 + 23 0.097526 + 36 0.358103 + 37 0.219659 + 40 0.369530 + 41 0.145431 + 44 0.094930 + 46 0.165652 +3 7 0.070187 + 18 0.660634 + 20 0.128035 + 23 0.076661 + 26 0.061927 + 34 0.062874 + 37 0.391222 + 41 0.201118 + 44 0.116896 +4 8 0.098714 + 12 0.078337 + 15 0.268364 + 17 0.669472 + 19 0.126335 + 24 0.145578 + 25 0.065613 + 35 0.464522 + 38 0.478223 + 42 0.222103 + 45 0.301511 +5 10 0.067797 + 11 0.071421 + 14 0.269197 + 16 0.670148 + 18 0.097672 + 22 0.201012 + 23 0.119377 + 34 0.464691 + 36 0.875529 + 37 0.298876 + 40 0.411340 + 41 0.117199 + 44 0.301182 + 46 0.114479 +6 12 0.057029 + 13 0.269289 + 15 0.669031 + 17 0.067501 + 21 0.199559 + 33 0.449982 + 35 0.872558 + 38 0.106114 + 39 0.411419 + 43 0.300942 + 45 0.114021 +7 12 0.262498 + 13 0.219142 + 15 0.100750 + 17 0.105982 + 21 0.098455 + 33 0.278044 + 35 0.233665 + 38 0.403978 + 39 0.059770 + 42 0.295047 +8 14 0.090182 + 16 0.122558 + 20 0.093186 + 22 0.106065 + 32 0.254244 + 34 0.249475 + 36 0.245589 + 37 0.369519 + 40 0.154264 + 41 0.269736 + 46 0.057983 +9 14 0.103257 + 18 0.203431 + 20 0.166735 + 32 0.934029 + 34 0.091468 + 37 0.069830 + 41 0.074599 +10 15 0.133128 + 17 0.204295 + 19 0.170185 + 24 0.056620 + 30 0.075108 + 31 0.941608 + 35 0.057395 + 42 0.086626 + 45 0.069715 +11 17 0.073490 + 30 0.941351 + 39 0.091674 + 42 0.058418 + 43 0.075645 +12 16 0.085523 + 29 0.941736 + 37 0.056821 + 40 0.112279 + 41 0.068929 +13 28 0.941638 + 37 0.100195 + 41 0.081501 +14 27 0.941386 + 38 0.067025 + 39 0.122518 +15 26 0.941621 + 36 0.133822 + 37 0.082874 + 40 0.099044 + 46 0.076861 +16 24 0.160141 + 25 0.941550 + 35 0.133779 + 38 0.135047 + 45 0.077702 +17 22 0.173833 + 23 0.169467 + 34 0.113522 + 36 0.261316 + 44 0.067706 +18 24 0.197586 + 33 0.099837 + 35 0.261558 + 43 0.066903 +19 23 0.164424 + 32 0.069553 + 34 0.287873 + 36 0.059160 + 46 0.077891 +20 24 0.080791 + 33 0.290667 + 45 0.077599 +21 32 0.291812 + 44 0.073636 +22 31 0.292197 +23 30 0.291965 + 38 0.060656 + 42 0.063485 +24 29 0.290591 + 37 0.076195 + 41 0.073063 + 46 0.145837 +25 36 0.077393 + 40 0.073402 + 46 0.668984 +26 35 0.077382 + 39 0.059566 + 45 0.672536 +27 34 0.076438 + 44 0.673296 +28 33 0.071989 + 39 0.071978 + 43 0.673590 +29 38 0.080048 + 42 0.673685 +30 37 0.081249 + 40 0.057601 + 41 0.673439 +31 36 0.081329 + 40 0.673666 + 46 0.115846 +32 38 0.175536 + 39 0.662617 + 45 0.137729 +33 37 0.190907 + 41 0.064749 + 44 0.184885 +34 38 0.160641 + 39 0.118387 + 43 0.188481 + 45 0.068432 +35 40 0.133956 + 41 0.063917 + 44 0.088328 + 46 0.474582 +36 42 0.213493 + 45 0.478778 +37 42 0.127091 + 43 0.210528 + 45 0.103949 +38 44 0.105295 + 46 0.194564 +39 44 0.130276 +40 45 0.347719 +41 45 0.090910 +42 46 0.103339""" + self.exp_bp2 = """1 9 0.057672 ubox + 11 0.120522 ubox + 17 0.345302 ubox + 19 0.249928 ubox + 21 0.402695 ubox + 24 0.123457 ubox + 43 0.061772 ubox +2 7 0.058786 ubox + 10 0.126893 ubox + 16 0.457571 ubox""" + self.exp_ali = """1 73 0.60 1.0 hsb 0.632240 +2 72 0.16 1.0 hsb 1.000000 +3 71 0.32 1.0 hsb 0.999999 +4 70 0.32 1.0 hsb 0.999999 +5 69 0.16 0.2 hsb 0.999812 +6 68 0.32 0.6 hsb 0.999975 +7 28 0.16 0.2 hsb 0.074659 + 67 0.16 1.0 hsb 0.999532 +8 14 0.00 1.0 hsb 0.058069 + 27 0.16 1.0 hsb 0.377934""" + + self.exp_plot_ref = {'lines': {'xs': [-0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 10.0, 10.0, 20.0, 20.0, 30.0, 30.0, 40.0, 40.0, 46.0], 'ys': [-0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 10.0, 10.0, 20.0, 20.0, 30.0, 30.0, 40.0, 40.0, 46.0]}, 'bp': {'xs': [5.9958745655, 5.997536881, 6.9951277835, 8.997701783, 9.997449493, 10.9655474825, 10.9969316935, 10.9983738275, 11.9637417295, 11.9759884055, 12.9637663675, 12.994669002, 12.995933572, 13.7761989795, 13.9639904815, 13.9911384855, 13.994924673, 14.775451063, 14.972463451, 14.992489729, 14.9963428865, 15.775903657499999, 15.9791318145, 15.984317670500001, 15.994383887000001, 15.997299606999999, 15.997721834499998, 16.7817813225, 16.9793079225, 16.989161178, 16.9952300525, 17.9851694295, 17.985518565, 17.992019777, 18.958917957, 18.9860996785, 18.99180347, 18.9956581495, 19.9613856315, 19.9800881435, 19.9951532845, 20.979797161, 20.9835141425, 20.984891066, 20.9943750745, 21.985640461, 21.9864823265, 21.99287457, 21.995244291, 21.9970615475, 22.9804798145, 22.987177461, 22.989403575, 22.996393665, 22.996736422, 22.9983970685, 23.556741499, 23.997847461, 24.5566747905, 24.9980825365, 25.5568958125, 26.5566592285, 27.5565664715, 27.957778386, 28.5569293085, 28.9573782485, 28.9971793855, 29.556687429, 29.957310428, 30.563795304, 30.957422875, 30.967679875, 30.9975812095, 31.8987579585, 31.957756490999998, 31.961345664, 31.9950162995, 31.997408764, 32.892031077, 32.9585646115, 32.9688810345, 32.9935563995, 32.995816802, 32.9970786005, 32.998023424, 33.6193210345, 33.8921095835, 33.965793644, 33.972700438, 33.991051581, 33.9970060445, 33.9983529225, 34.6167243335, 34.935881105, 34.96585695, 34.969843055, 34.9910458855, 34.996692802, 34.997005184, 34.99825006, 35.9234725955, 35.931727942, 35.9553366565, 35.9758748735, 35.9817773135, 35.994980477, 35.996565926, 35.9966993335, 35.9970971485, 35.9975618835, 35.9983856855, 36.8856511925, 36.918400992, 36.9774954395, 36.984593521, 36.9870971995, 36.9908812045, 36.994369943, 36.996796123, 36.99775385, 36.9981604135, 37.7804691085, 37.9153671625, 37.943784869, 37.992494662, 37.992992313, 37.995797966, 37.9974095605, 37.998213801, 37.9982259415, 38.773087287, 38.9153998735, 38.9317238465, 38.9881012665, 38.991027956, 38.9936967575, 38.9950951155, 38.997306041, 38.998341081, 39.7732399945, 39.963621202, 39.979775792, 39.989424925, 39.9931321645, 39.996678771, 39.997217498, 39.997330926, 39.997624426, 39.997903767, 39.997957289, 40.773074211, 40.956473632, 40.9753351915, 40.97721035, 40.9893327785, 40.991923897, 40.9962479535, 40.997984817, 40.9982936515, 41.7731381205, 41.954717089, 41.9778388835, 41.982237447, 41.983074033, 41.997138917, 41.997762018, 42.773336285, 42.954644608, 42.982908799, 42.991514119, 42.9931676585, 42.9944565205, 42.9954941525, 42.996099056, 42.9972888395, 42.9977079215, 43.773847515, 43.885385711, 43.9395457005, 43.9545456525, 43.9905153615, 43.9934995525, 43.994597304, 43.9958677305, 43.9962917665, 43.996981223, 43.996989204, 43.9975698845, 43.997658511, 44.7762301835, 44.8873861545, 44.981072461, 44.9862797295, 44.989365839, 44.993289818, 44.9934473095, 44.994660568, 44.9969664775, 44.9970461595, 44.998319006], 'ys': [-0.056215130999999974, -0.038614368499999996, -0.022504560500000048, -0.01692596700000004, -0.015682329500000036, -0.014830570500000029, -0.01066722149999999, -0.0037082335000000466, -0.0036063349999999605, 0.9317238465, 0.935881105, 0.9589179569999999, 0.9724634510000001, 0.9758748735, 0.9835141425, 0.9862797295000001, 0.989161178, 0.989424925, 0.9952442909999999, 0.9954941525000001, 0.9958745655000001, 1.7817813225, 1.9234725954999998, 1.9797757919999999, 1.9918034699999998, 1.9931676585, 1.9970615475, 1.9975368809999998, 1.9980234239999999, 1.9980825365000001, 2.7759036575, 2.8856511925, 2.8921095835, 2.9545456525, 2.9639904815, 2.9753351915, 2.989403575, 2.992019777, 2.9951277835, 2.9969316935, 2.997847461, 3.6167243334999997, 3.775451063, 3.8920310770000004, 3.9153998735, 3.9546446079999997, 3.9553366565, 3.9637663675, 3.9797971609999996, 3.9928745699999997, 3.9931321645000004, 3.9934473094999996, 3.9952300525, 3.9974494930000004, 3.997701783, 4.6193210344999995, 4.7761989795, 4.8987579585, 4.9153671625, 4.954717089, 4.9637417295, 4.9800881435, 4.9934995525, 4.994369943, 4.9977218345, 4.9983738275, 5.918400992, 5.956473632, 5.961345664, 5.9655474825, 5.972700438, 5.9759884055, 5.994383887, 5.994924673, 5.9951532845, 5.998213801, 6.931727942, 6.963621202, 6.967679875, 6.9688810345, 6.969843055, 6.9881012665, 6.992489729, 6.9943750745, 6.9956581495, 6.995933572, 6.998319006, 7.563795303999999, 7.9793079225, 7.9860996785000005, 7.994669002, 7.995816802, 7.9972174979999995, 7.9975618834999995, 8.556687429, 8.9791318145, 8.985518565, 8.9911384855, 8.9962479535, 8.9971793855, 8.9975698845, 8.9983529225, 8.9983970685, 9.5569293085, 9.995797966, 9.997138917, 9.997299607, 9.9982936515, 10.5565664715, 10.9936967575, 10.9963428865, 10.997624426, 10.9983856855, 11.5566592285, 11.994980477, 11.996678771, 12.5568958125, 12.992494662, 12.99775385, 13.5566747905, 13.9910458855, 13.9950951155, 13.996565926, 13.9970461595, 14.556741499, 14.987177461, 14.9908812045, 14.991051581, 14.996981223, 15.96585695, 15.984891066, 15.985640461, 15.993556399500001, 15.997707921500002, 16.965793644, 16.9804798145, 16.9950162995, 16.997762018, 17.9585646115, 17.9864823265, 17.9969664775, 17.9975812095, 17.99825006, 18.957756491, 18.996736422, 18.996989204, 19.957422875, 19.9972888395, 20.957310428, 21.9573782485, 21.997984817, 21.9981604135, 22.957778386, 22.989365839, 22.9970971485, 22.997330926, 23.7762301835, 23.997005184, 23.997306041, 24.773847515, 24.9970060445, 24.9982259415, 25.773336285, 25.9970786005, 26.7731381205, 26.997408764, 26.9974095605, 27.773074211, 27.996796123, 28.7732399945, 28.9966993335, 28.998341081, 29.773087287, 29.993289818, 29.996692802, 30.7804691085, 30.984593521, 30.9905153615, 31.981777313499997, 31.982908799, 31.997903766999997, 32.982237447, 32.9870971995, 32.992992313, 32.997658511, 33.8873861545, 33.991027956, 33.996099056, 33.997957289, 34.885385711, 34.97721035, 35.9778388835, 35.991923897, 35.994597304, 36.981072461, 36.9944565205, 37.991514119, 38.9395457005, 39.9958677305, 40.994660568], 'widths': [0.0032058629999999998, 0.003228629, 0.003252345, 0.003294155, 0.0033178380000000005, 0.0033619880000000006, 0.003412697, 0.0034998800000000004, 0.003548117, 0.003572398, 0.003679173, 0.0038349269999999997, 0.003953152, 0.004030366, 0.004085422, 0.004192465999999999, 0.004305078000000001, 0.004475963999999999, 0.004492299999999999, 0.004556331000000001, 0.004584157000000001, 0.004596434, 0.004682977999999999, 0.004751147999999999, 0.004837581, 0.004860231, 0.004876233, 0.004926238, 0.005101013999999999, 0.005180879, 0.005182472, 0.005338148, 0.005387918, 0.005400786000000001, 0.005422320999999999, 0.005565004, 0.005641229, 0.005722166000000001, 0.005805703000000001, 0.005842799, 0.005876905, 0.005907681, 0.005987911, 0.005989632, 0.006021591999999999, 0.006037554, 0.006067045, 0.006136613, 0.006407754000000001, 0.006527156000000001, 0.006601333000000001, 0.006614396000000001, 0.006642458000000001, 0.006868148000000001, 0.007212669999999999, 0.007314227, 0.007416467000000001, 0.007504093, 0.007801887999999999, 0.008132856000000003, 0.008250868999999997, 0.008264539, 0.008366396, 0.008404067999999999, 0.008683701, 0.009011695000000002, 0.009511418, 0.009539895, 0.009693431, 0.009744433, 0.009809769, 0.009967400999999999, 0.010039046, 0.010150654, 0.010661996000000002, 0.010678864, 0.010805392, 0.011086959000000002, 0.011232226, 0.011249851, 0.011260114, 0.012606485000000002, 0.012887200999999997, 0.013000895, 0.013105381000000001, 0.013420364, 0.013664683000000002, 0.013735670999999998, 0.014015374, 0.01425086, 0.015010675999999999, 0.015020541999999998, 0.015960445999999996, 0.016152205999999995, 0.016393059999999997, 0.016971762, 0.017723029000000005, 0.017896838, 0.017908229, 0.017944087999999997, 0.018237591000000004, 0.018969277, 0.021150150000000003, 0.02119285, 0.021268322000000003, 0.021334442999999998, 0.021677644000000003, 0.023797467000000003, 0.025645078000000005, 0.025805601000000004, 0.027035347000000005, 0.027440540999999995, 0.027800642999999996, 0.028719078, 0.02896287, 0.029661140999999995, 0.030217868, 0.030812958000000005, 0.031364658999999996, 0.032971715000000006, 0.033851934, 0.03418240200000001, 0.035525106, 0.036445373, 0.03785507800000001, 0.039040371, 0.039823713, 0.040405678, 0.040448416, 0.04138415499999999, 0.041736370999999994, 0.04432223300000001, 0.045009121000000006, 0.04557930000000001, 0.048023189, 0.048250253, 0.049329617000000006, 0.054599124000000006, 0.055073098, 0.06031389000000001, 0.062237931, 0.06464025, 0.0682861, 0.06841271200000001, 0.068905035, 0.072019037, 0.07246726500000002, 0.07251654099999999, 0.072757596, 0.077228737, 0.077308672, 0.082164086, 0.082870777, 0.08444322800000001, 0.08448701799999998, 0.08515424999999999, 0.085243503, 0.08537914399999999, 0.087052736, 0.089326687, 0.090565822, 0.09071078399999999, 0.090908695, 0.112430262, 0.12090859900000002, 0.12823778999999996, 0.136544116, 0.136552307, 0.153054809, 0.16319801600000003, 0.16920025300000002, 0.169265675, 0.202484083, 0.21578083300000003, 0.21593784599999996, 0.22522769100000004, 0.22869761499999997, 0.229228578, 0.436437355, 0.439061783, 0.44753963299999994, 0.44760204099999995, 0.44819268500000004, 0.44909787399999995, 0.45230497000000003, 0.4533274299999999, 0.45352001099999995, 0.45372375899999995, 0.45382542600000003, 0.4538515779999999, 0.7613579310000002, 0.7665513330000001, 0.8724093919999999, 0.8861413829999999, 0.886208375, 0.886517002, 0.8866251420000001, 0.8866504190000001, 0.886681543, 0.8868670569999999], 'heights': [0.0032058629999999998, 0.003228629, 0.003252345, 0.003294155, 0.0033178380000000005, 0.0033619880000000006, 0.003412697, 0.0034998800000000004, 0.003548117, 0.003572398, 0.003679173, 0.0038349269999999997, 0.003953152, 0.004030366, 0.004085422, 0.004192465999999999, 0.004305078000000001, 0.004475963999999999, 0.004492299999999999, 0.004556331000000001, 0.004584157000000001, 0.004596434, 0.004682977999999999, 0.004751147999999999, 0.004837581, 0.004860231, 0.004876233, 0.004926238, 0.005101013999999999, 0.005180879, 0.005182472, 0.005338148, 0.005387918, 0.005400786000000001, 0.005422320999999999, 0.005565004, 0.005641229, 0.005722166000000001, 0.005805703000000001, 0.005842799, 0.005876905, 0.005907681, 0.005987911, 0.005989632, 0.006021591999999999, 0.006037554, 0.006067045, 0.006136613, 0.006407754000000001, 0.006527156000000001, 0.006601333000000001, 0.006614396000000001, 0.006642458000000001, 0.006868148000000001, 0.007212669999999999, 0.007314227, 0.007416467000000001, 0.007504093, 0.007801887999999999, 0.008132856000000003, 0.008250868999999997, 0.008264539, 0.008366396, 0.008404067999999999, 0.008683701, 0.009011695000000002, 0.009511418, 0.009539895, 0.009693431, 0.009744433, 0.009809769, 0.009967400999999999, 0.010039046, 0.010150654, 0.010661996000000002, 0.010678864, 0.010805392, 0.011086959000000002, 0.011232226, 0.011249851, 0.011260114, 0.012606485000000002, 0.012887200999999997, 0.013000895, 0.013105381000000001, 0.013420364, 0.013664683000000002, 0.013735670999999998, 0.014015374, 0.01425086, 0.015010675999999999, 0.015020541999999998, 0.015960445999999996, 0.016152205999999995, 0.016393059999999997, 0.016971762, 0.017723029000000005, 0.017896838, 0.017908229, 0.017944087999999997, 0.018237591000000004, 0.018969277, 0.021150150000000003, 0.02119285, 0.021268322000000003, 0.021334442999999998, 0.021677644000000003, 0.023797467000000003, 0.025645078000000005, 0.025805601000000004, 0.027035347000000005, 0.027440540999999995, 0.027800642999999996, 0.028719078, 0.02896287, 0.029661140999999995, 0.030217868, 0.030812958000000005, 0.031364658999999996, 0.032971715000000006, 0.033851934, 0.03418240200000001, 0.035525106, 0.036445373, 0.03785507800000001, 0.039040371, 0.039823713, 0.040405678, 0.040448416, 0.04138415499999999, 0.041736370999999994, 0.04432223300000001, 0.045009121000000006, 0.04557930000000001, 0.048023189, 0.048250253, 0.049329617000000006, 0.054599124000000006, 0.055073098, 0.06031389000000001, 0.062237931, 0.06464025, 0.0682861, 0.06841271200000001, 0.068905035, 0.072019037, 0.07246726500000002, 0.07251654099999999, 0.072757596, 0.077228737, 0.077308672, 0.082164086, 0.082870777, 0.08444322800000001, 0.08448701799999998, 0.08515424999999999, 0.085243503, 0.08537914399999999, 0.087052736, 0.089326687, 0.090565822, 0.09071078399999999, 0.090908695, 0.112430262, 0.12090859900000002, 0.12823778999999996, 0.136544116, 0.136552307, 0.153054809, 0.16319801600000003, 0.16920025300000002, 0.169265675, 0.202484083, 0.21578083300000003, 0.21593784599999996, 0.22522769100000004, 0.22869761499999997, 0.229228578, 0.436437355, 0.439061783, 0.44753963299999994, 0.44760204099999995, 0.44819268500000004, 0.44909787399999995, 0.45230497000000003, 0.4533274299999999, 0.45352001099999995, 0.45372375899999995, 0.45382542600000003, 0.4538515779999999, 0.7613579310000002, 0.7665513330000001, 0.8724093919999999, 0.8861413829999999, 0.886208375, 0.886517002, 0.8866251420000001, 0.8866504190000001, 0.886681543, 0.8868670569999999]}} # noqa: E501 + + self.exp_plot_mut = {'lines': {'xs': [-0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 10.0, 10.0, 20.0, 20.0, 30.0, 30.0, 40.0, 40.0, 46.0], 'ys': [-0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 10.0, 10.0, 20.0, 20.0, 30.0, 30.0, 40.0, 40.0, 46.0]}, 'bp': {'xs': [5.9958745655, 5.997536881, 5.998272076, 6.9951277835, 6.9966793655, 7.998336977499999, 8.9919491325, 8.9953713305, 8.997701783, 9.992737195, 9.9934935365, 9.997449493, 10.8599836355, 10.9655474825, 10.9961197315, 10.9969316935, 10.9983738275, 11.861419473, 11.949708508, 11.9637417295, 11.9759884055, 12.861975394, 12.9637663675, 12.9888344005, 12.991483001, 12.994669002, 12.995933572, 13.5302876495, 13.7761989795, 13.86292203, 13.9639904815, 13.988592657, 13.9893698955, 13.9911384855, 13.994924673, 14.5285738565, 14.775451063, 14.8953144, 14.972463451, 14.988721638, 14.992489729, 14.9963428865, 15.529494552500001, 15.775903657499999, 15.940383425, 15.952916440500001, 15.9791318145, 15.984317670500001, 15.991558151500001, 15.994383887000001, 15.996029331999999, 15.997299606999999, 15.997721834499998, 16.541827819, 16.7817813225, 16.95334275, 16.9586643025, 16.9770763075, 16.9793079225, 16.989161178, 16.9912517825, 16.9952300525, 16.9982091195, 16.998246832, 17.954752866, 17.968768087, 17.9851694295, 17.985186346, 17.985518565, 17.992019777, 17.997040077, 17.997333393, 18.9137372785, 18.956572591, 18.958917957, 18.984511233, 18.9860996785, 18.9888682585, 18.99180347, 18.9956581495, 18.9972797, 19.918918258, 19.9535483915, 19.9613856315, 19.9800881435, 19.9870023165, 19.9951532845, 19.998404814, 20.952723903, 20.965573585, 20.979797161, 20.982500113, 20.9835141425, 20.984891066, 20.9922436035, 20.9943750745, 20.9969462065, 21.980469043, 21.985640461, 21.9864823265, 21.9899886545, 21.991541326, 21.99287457, 21.993150461, 21.9948396485, 21.9948411865, 21.995244291, 21.9970615475, 21.9983379915, 22.9725553425, 22.9804798145, 22.987177461, 22.989403575, 22.989835422, 22.992379232, 22.9945632345, 22.9949956955, 22.9962352005, 22.996393665, 22.996736422, 22.9972697815, 22.997733451, 22.9983970685, 23.556741499, 23.9934833215, 23.993853736, 23.997847461, 24.5566747905, 24.994198966, 24.9942464295, 24.9980825365, 24.9982001885, 25.5568958125, 25.994672157, 25.9980978235, 26.5566592285, 26.994930554, 26.9981931985, 27.5565664715, 27.882733233, 27.957778386, 27.997867338, 28.5569293085, 28.881621264, 28.9573782485, 28.9971793855, 29.556687429, 29.881431181, 29.957310428, 29.995189643, 29.998170068, 30.563795304, 30.8816394705, 30.957422875, 30.967679875, 30.994610032, 30.995265988, 30.9975812095, 30.9981603065, 31.8822277155, 31.8987579585, 31.957756490999998, 31.961345664, 31.988894391499997, 31.9943704625, 31.9950162995, 31.997408764, 31.998176452499997, 32.883760019, 32.892031077, 32.9585646115, 32.9688810345, 32.985641278, 32.9935563995, 32.9936531715, 32.995816802, 32.9970786005, 32.998023424, 32.9982608875, 32.998370599, 33.6193210345, 33.8921095835, 33.895021381, 33.965793644, 33.972700438, 33.9800610185, 33.991051581, 33.993495523, 33.9958394205, 33.9966439165, 33.9970060445, 33.9983529225, 34.6167243335, 34.8950829455, 34.935881105, 34.96585695, 34.969843055, 34.980060366, 34.9910458855, 34.9930110795, 34.9934936355, 34.9958104395, 34.9962276255, 34.996692802, 34.997005184, 34.99825006, 35.9234725955, 35.931727942, 35.9553366565, 35.961159558, 35.9758748735, 35.9817773135, 35.982607242, 35.992219079, 35.992783605, 35.9930009695, 35.993156906, 35.993692428, 35.9945052435, 35.994980477, 35.996565926, 35.9966993335, 35.9970971485, 35.9975618835, 35.9977055605, 35.9983844025, 35.9983856855, 36.8856511925, 36.918400992, 36.967091539, 36.9724609925, 36.974220767, 36.9774954395, 36.982459247, 36.984593521, 36.9870971995, 36.990633317, 36.9908812045, 36.993131033, 36.994369943, 36.995375311, 36.9959965695, 36.996796123, 36.99775385, 36.997861996, 36.9978983895, 36.9981604135, 37.5302671565, 37.7804691085, 37.9153671625, 37.943784869, 37.98670328, 37.989557845, 37.990251196, 37.992494662, 37.992992313, 37.994443511, 37.995797966, 37.99620148, 37.9969149825, 37.9974095605, 37.997422417, 37.998213801, 37.9982259415, 38.514470139, 38.773087287, 38.9153998735, 38.9317238465, 38.987050591, 38.9881012665, 38.9886360935, 38.9902520485, 38.991027956, 38.9936967575, 38.994231849, 38.9950951155, 38.9965259345, 38.9968419525, 38.997306041, 38.997360154, 38.997370944, 38.99748033, 38.998341081, 39.5147909145, 39.7732399945, 39.963621202, 39.979775792, 39.98426508, 39.9862379055, 39.989424925, 39.9931321645, 39.994285962, 39.994517951, 39.994767855, 39.996426137, 39.996678771, 39.997217498, 39.997330926, 39.997624426, 39.9977959315, 39.997903767, 39.997957289, 40.514419318, 40.773074211, 40.956473632, 40.9747570115, 40.9753351915, 40.97721035, 40.9859062755, 40.9893327785, 40.991923897, 40.994367464, 40.995691082, 40.9962479535, 40.9969631565, 40.9972153705, 40.9978188245, 40.997984817, 40.9982936515, 41.5145563715, 41.7731381205, 41.954717089, 41.973200008, 41.9778388835, 41.982237447, 41.983074033, 41.993589049, 41.9950344185, 41.997138917, 41.997762018, 41.9980420855, 41.998056345, 41.998092138, 41.998159489, 42.514982127, 42.773336285, 42.954644608, 42.973145988, 42.982908799, 42.9891892595, 42.991514119, 42.9931676585, 42.9942102095, 42.9944565205, 42.994914899, 42.9954941525, 42.996099056, 42.9969741965, 42.9972888395, 42.9977079215, 42.997758974, 42.998023601, 42.998078277, 42.9982149255, 43.516090278, 43.773847515, 43.885385711, 43.9395457005, 43.9545456525, 43.964116319, 43.9734205875, 43.9842728095, 43.988870502, 43.9905153615, 43.992790879, 43.9933100315, 43.9934995525, 43.9935704055, 43.994597304, 43.9958677305, 43.9962917665, 43.996981223, 43.996989204, 43.9973925105, 43.9975698845, 43.997658511, 43.998298086, 43.9983041495, 44.5211930675, 44.7762301835, 44.8873861545, 44.964541588, 44.977261263, 44.981072461, 44.9862797295, 44.989365839, 44.992159764, 44.9927250755, 44.993289818, 44.9934473095, 44.9935218815, 44.9935892135, 44.994660568, 44.9950023345, 44.996061256, 44.9969664775, 44.9970461595, 44.998319006, 44.998353045], 'ys': [-0.08108174200000007, -0.05961657499999995, -0.056215130999999974, -0.038614368499999996, -0.031231912999999945, -0.022504560500000048, -0.01692596700000004, -0.015682329500000036, -0.014830570500000029, -0.01066722149999999, -0.007620768, -0.007262804999999983, -0.0037082335000000466, -0.0036063349999999605, -0.001907862000000038, -0.0016630225000000554, 0.8953144, 0.9137372785, 0.9317238465, 0.935881105, 0.9589179569999999, 0.965573585, 0.9724634510000001, 0.9758748735, 0.9770763075, 0.9835141425, 0.9862797295000001, 0.989161178, 0.989424925, 0.9899886545000001, 0.9919491325, 0.9921597639999999, 0.9952442909999999, 0.9954941525000001, 0.9958745655000001, 0.997370944, 0.9982720759999999, 1.5418278189999999, 1.7817813225, 1.9234725954999998, 1.9797757919999999, 1.984511233, 1.9918034699999998, 1.993150461, 1.9931676585, 1.994198966, 1.9970615475, 1.9975368809999998, 1.9977959314999998, 1.9980234239999999, 1.9980825365000001, 2.5294945525, 2.7759036575, 2.86292203, 2.8856511925, 2.8921095835, 2.9545456525, 2.9639904815, 2.9725553425, 2.9734205875, 2.9753351915, 2.985186346, 2.989403575, 2.992019777, 2.9934833215, 2.9951277835, 2.9966793655, 2.9969316935, 2.9969631565, 2.997847461, 2.9978983895, 3.5285738564999996, 3.6167243334999997, 3.775451063, 3.861975394, 3.8920310770000004, 3.9153998735, 3.952723903, 3.9546446079999997, 3.9553366565, 3.9637663675, 3.9731459879999997, 3.9797971609999996, 3.9804690430000003, 3.9902520485000004, 3.9912517825, 3.9927250755, 3.9928745699999997, 3.9931321645000004, 3.9934473094999996, 3.9952300525, 3.9953713305000003, 3.9958104394999996, 3.9974494930000004, 3.997701783, 4.5302876495, 4.6193210344999995, 4.7761989795, 4.861419473, 4.8987579585, 4.9153671625, 4.9535483915, 4.954717089, 4.9637417295, 4.973200008, 4.9800881435, 4.990251196, 4.992790879, 4.9934995525, 4.994369943, 4.9958394205, 4.996029332, 4.9961197315, 4.9962352005, 4.9977218345, 4.9983738275, 5.8599836355, 5.918400992, 5.949708508, 5.956473632, 5.961345664, 5.9655474825, 5.972700438, 5.9747570115, 5.9759884055, 5.9870023165, 5.9893698955, 5.990633317, 5.9915581515, 5.9934935365, 5.994383887, 5.994924673, 5.9951532845, 5.997040077, 5.997733451, 5.998056345, 5.998213801, 5.998298086, 6.931727942, 6.963621202, 6.967679875, 6.9688810345, 6.969843055, 6.982500113, 6.98426508, 6.9881012665, 6.9886360935, 6.988721638, 6.9888682585, 6.991483001, 6.992219079, 6.992489729, 6.9943750745, 6.9956581495, 6.995933572, 6.996061256, 6.998078277, 6.9982091195, 6.998319006, 6.9983379915, 7.563795303999999, 7.953342749999999, 7.9565725910000005, 7.9793079225, 7.9860996785000005, 7.9888344005, 7.994669002, 7.995265988, 7.995816802, 7.996426137, 7.9969741965, 7.9972174979999995, 7.9975618834999995, 7.998384402499999, 8.556687429, 8.9529164405, 8.954752866, 8.9791318145, 8.982459247, 8.985518565, 8.9859062755, 8.988592657, 8.988870502, 8.9911384855, 8.9945632345, 8.995189643, 8.9962479535, 8.9971793855, 8.9975698845, 8.9983529225, 8.9983970685, 9.5569293085, 9.9586643025, 9.982607242, 9.9862379055, 9.9891892595, 9.9948396485, 9.995797966, 9.997138917, 9.997299607, 9.9982936515, 10.5565664715, 10.9936967575, 10.9945052435, 10.994767855, 10.9963428865, 10.997624426, 10.998246832, 10.9983856855, 11.5566592285, 11.993156906, 11.994517951, 11.994930554, 11.994980477, 11.996678771, 11.9972797, 11.998023601, 11.9982608875, 12.5568958125, 12.98670328, 12.992494662, 12.994672157, 12.995375311, 12.997333393, 12.99775385, 12.9980420855, 12.9981764525, 12.998404814, 13.5566747905, 13.980060366, 13.987050591, 13.9910458855, 13.992783605, 13.9935892135, 13.9942464295, 13.9950951155, 13.996565926, 13.9969462065, 13.9970461595, 13.9981603065, 14.556741499, 14.974220767, 14.9800610185, 14.987177461, 14.989835422, 14.9908812045, 14.991051581, 14.9933100315, 14.993853736, 14.996981223, 14.9972153705, 14.998170068, 15.8950829455, 15.96585695, 15.984891066, 15.985640461, 15.985641278, 15.991541326, 15.9922436035, 15.993556399500001, 15.994914899000001, 15.997360153999999, 15.997705560499998, 15.997707921500002, 16.895021381, 16.965793644, 16.9804798145, 16.9888943915, 16.9950162995, 16.9950344185, 16.9972697815, 16.997422417, 16.997762018, 17.883760019, 17.9585646115, 17.9864823265, 17.9935218815, 17.994610032, 17.9948411865, 17.9962276255, 17.9968419525, 17.9969664775, 17.9975812095, 17.9981931985, 17.99825006, 18.8822277155, 18.957756491, 18.9935704055, 18.9949956955, 18.9966439165, 18.996736422, 18.9969149825, 18.996989204, 18.9980978235, 19.8816394705, 19.957422875, 19.9942102095, 19.9972888395, 19.9982001885, 19.998370599, 20.881431181, 20.957310428, 20.9973925105, 20.997861996, 21.881621264, 21.9573782485, 21.995691082, 21.9959965695, 21.997984817, 21.9981604135, 22.882733233, 22.957778386, 22.977261263, 22.989365839, 22.993692428, 22.994285962, 22.9970971485, 22.997330926, 23.5211930675, 23.7762301835, 23.9934936355, 23.994231849, 23.997005184, 23.997306041, 23.997867338, 24.516090278, 24.773847515, 24.993495523, 24.99620148, 24.9970060445, 24.9982259415, 25.514982127, 25.773336285, 25.9936531715, 25.9970786005, 26.5145563715, 26.7731381205, 26.9943704625, 26.994443511, 26.997408764, 26.9974095605, 27.514419318, 27.773074211, 27.993131033, 27.996796123, 28.5147909145, 28.7732399945, 28.9930009695, 28.9965259345, 28.9966993335, 28.998341081, 29.514470139, 29.773087287, 29.9930110795, 29.993289818, 29.996692802, 29.998353045, 30.5302671565, 30.7804691085, 30.967091539, 30.984593521, 30.9905153615, 30.9983041495, 31.961159558, 31.981777313499997, 31.982908799, 31.997903766999997, 31.9982149255, 32.9724609925, 32.982237447, 32.9870971995, 32.989557845, 32.992992313, 32.997658511, 32.998159489, 33.8873861545, 33.964541588, 33.991027956, 33.996099056, 33.99748033, 33.997957289, 34.885385711, 34.964116319, 34.97721035, 34.994367464, 35.9778388835, 35.991923897, 35.993589049, 35.994597304, 35.9978188245, 36.981072461, 36.9944565205, 36.9950023345, 37.991514119, 37.997758974, 38.9395457005, 38.9842728095, 39.9958677305, 40.994660568], 'widths': [0.0031903720000000003, 0.0032058629999999998, 0.003228629, 0.003231195, 0.003252345, 0.0032588019999999994, 0.00329391, 0.003294155, 0.0033178380000000005, 0.003324017, 0.0033260449999999997, 0.0033619880000000006, 0.0033917010000000004, 0.0034038280000000002, 0.003412697, 0.0034558479999999996, 0.003478225, 0.0034998800000000004, 0.003506336, 0.003548117, 0.0035701489999999995, 0.003572398, 0.003581761, 0.003599623, 0.003613603, 0.0036470949999999995, 0.003659864, 0.003679173, 0.003679387, 0.0036810220000000004, 0.003804353, 0.0038157240000000004, 0.0038349269999999997, 0.0038434460000000004, 0.00388731, 0.003915829000000001, 0.003952798, 0.003953152, 0.004030366, 0.004085422, 0.004192465999999999, 0.004203221, 0.004265324000000001, 0.004276008, 0.004305078000000001, 0.004362351000000001, 0.0044081369999999995, 0.004475963999999999, 0.004482052000000001, 0.004492299999999999, 0.004533098, 0.004556331000000001, 0.004584157000000001, 0.004588878999999999, 0.004596434, 0.004682977999999999, 0.004751147999999999, 0.004837581, 0.004860231, 0.004876233, 0.004926238, 0.00503934, 0.005101013999999999, 0.005155165999999999, 0.005180879, 0.005182472, 0.005214978999999999, 0.0052581120000000005, 0.005279692000000001, 0.005333214000000001, 0.005338148, 0.005387918, 0.005400786000000001, 0.005422320999999999, 0.0054406, 0.005460437, 0.005565004, 0.005569259000000001, 0.005641229, 0.005722166000000001, 0.005805703000000001, 0.005842799, 0.005876905, 0.005907681, 0.005919846000000001, 0.005987911, 0.005989632, 0.006021591999999999, 0.006037554, 0.006051607, 0.006067045, 0.0060736869999999995, 0.006107587000000001, 0.006136613, 0.006170035, 0.006316095, 0.006407754000000001, 0.006527156000000001, 0.006601333000000001, 0.006614396000000001, 0.006641269000000001, 0.006642458000000001, 0.006712166999999999, 0.006868148000000001, 0.006948130999999999, 0.007147726000000001, 0.007212669999999999, 0.007314227, 0.007416467000000001, 0.007504093, 0.007529599, 0.007544749, 0.007597040000000001, 0.007760536999999999, 0.007801887999999999, 0.007877488, 0.007941336, 0.008006861, 0.008132856000000003, 0.008250868999999997, 0.008264539, 0.008321159, 0.008366396, 0.008379121, 0.008404067999999999, 0.008617836, 0.008683701, 0.009011695000000002, 0.009249378, 0.009257339, 0.009468024, 0.009511418, 0.009539895, 0.009620713999999999, 0.009693431, 0.009744433, 0.009809769, 0.009931163, 0.009967400999999999, 0.009995330999999998, 0.010008609, 0.010039046, 0.010138892, 0.010150654, 0.010170202000000001, 0.010317626999999998, 0.010320703000000002, 0.01046429, 0.010655685999999998, 0.010661996000000002, 0.010678864, 0.010779936000000002, 0.010805392, 0.010873530999999999, 0.010964098, 0.010989513, 0.011086959000000002, 0.011112977999999999, 0.011232226, 0.011249851, 0.011259075, 0.011260114, 0.011265072, 0.011428076, 0.011507141, 0.011536301999999998, 0.011579581, 0.011602068000000002, 0.012292528, 0.012606485000000002, 0.012615143999999998, 0.012693657000000002, 0.012821573000000001, 0.012821901999999998, 0.012859189, 0.012887200999999997, 0.012956236999999999, 0.013000895, 0.013008954, 0.013012728999999999, 0.013012927000000002, 0.013033357, 0.013105381000000001, 0.013379936999999998, 0.013420364, 0.013664683000000002, 0.013686188000000002, 0.013699078, 0.013735670999999998, 0.013737933999999999, 0.013977841, 0.013998060999999997, 0.014015374, 0.01425086, 0.014418242, 0.01443279, 0.01452561, 0.014549848999999998, 0.015010675999999999, 0.015020541999999998, 0.015241535999999998, 0.015512792999999999, 0.015561842000000001, 0.015680472, 0.015960445999999996, 0.016101734999999995, 0.016152205999999995, 0.016393059999999997, 0.016883697, 0.016917347999999995, 0.016971762, 0.017033998, 0.017496434999999998, 0.017723029000000005, 0.017896838, 0.017908229, 0.017944087999999997, 0.018237591000000004, 0.018733366, 0.018969277, 0.019495902999999995, 0.019497608, 0.020022691000000002, 0.020329155999999998, 0.020884309999999996, 0.021150150000000003, 0.02119285, 0.021260209000000002, 0.021268322000000003, 0.021334442999999998, 0.021621481, 0.021677644000000003, 0.022211217, 0.022258995999999996, 0.022263483000000004, 0.022331199000000003, 0.022556724, 0.022727813000000003, 0.022814685999999997, 0.023797467000000003, 0.025645078000000005, 0.025805601000000004, 0.025898818000000004, 0.025995366999999995, 0.026593440000000003, 0.027035347000000005, 0.027440540999999995, 0.027524188999999998, 0.027800642999999996, 0.028187449000000003, 0.028717444, 0.028719078, 0.02896287, 0.029627308000000005, 0.029661140999999995, 0.030217868, 0.030812958000000005, 0.030977534, 0.031364658999999996, 0.03145438099999999, 0.03146984, 0.032971715000000006, 0.033851934, 0.03418240200000001, 0.034785516, 0.034999774, 0.035081506, 0.035525106, 0.036445373, 0.03785507800000001, 0.039040371, 0.039061914, 0.039823713, 0.039877963, 0.039879267999999995, 0.040405678, 0.040448416, 0.04138415499999999, 0.041736370999999994, 0.04432223300000001, 0.045009121000000006, 0.045477474, 0.04557930000000001, 0.04584738499999999, 0.048023189, 0.048250253, 0.049329617000000006, 0.050485977, 0.051558466, 0.05315882500000001, 0.053599983999999996, 0.053708024, 0.054599124000000006, 0.054889315, 0.055073098, 0.05507801500000001, 0.06031389000000001, 0.062237931, 0.06246382599999999, 0.06464025, 0.065816922, 0.0682861, 0.06841271200000001, 0.06885283000000002, 0.068905035, 0.07091682400000002, 0.071767362, 0.072019037, 0.07246726500000002, 0.07251654099999999, 0.072757596, 0.077228737, 0.077308672, 0.07768088399999999, 0.082164086, 0.08267139500000001, 0.082870777, 0.08444322800000001, 0.08448701799999998, 0.08515424999999999, 0.085243503, 0.08537914399999999, 0.086854818, 0.087052736, 0.089326687, 0.090494268, 0.090565822, 0.09071078399999999, 0.090908695, 0.09290321700000001, 0.09331449999999998, 0.09416711900000001, 0.09455219400000002, 0.10058298399999999, 0.112430262, 0.11923315, 0.12090859900000002, 0.12823778999999996, 0.136544116, 0.136552307, 0.153054809, 0.16216348400000002, 0.16319801600000003, 0.16920025300000002, 0.169265675, 0.17252544299999997, 0.202484083, 0.2093712, 0.20983410899999996, 0.209957238, 0.21578083300000003, 0.21593784599999996, 0.22522769100000004, 0.22869761499999997, 0.229228578, 0.232479962, 0.234533534, 0.235544569, 0.23672105899999998, 0.236757472, 0.23713763799999998, 0.27415594000000004, 0.276049212, 0.277161054, 0.2800327289999999, 0.436437355, 0.439061783, 0.44753963299999994, 0.44760204099999995, 0.44819268500000004, 0.44909787399999995, 0.45230497000000003, 0.4533274299999999, 0.45352001099999995, 0.45372375899999995, 0.45382542600000003, 0.4538515779999999, 0.7613579310000002, 0.7665513330000001, 0.8724093919999999, 0.8861413829999999, 0.886208375, 0.886517002, 0.8866251420000001, 0.8866504190000001, 0.886681543, 0.8868670569999999, 0.916344362, 0.9394247010000001, 0.9394656869999999, 0.941010895, 0.942852287, 0.957613865, 0.9678194440000001, 0.970035746, 0.9704181710000002, 0.970887257, 0.9710597219999999, 0.971161364], 'heights': [0.0031903720000000003, 0.0032058629999999998, 0.003228629, 0.003231195, 0.003252345, 0.0032588019999999994, 0.00329391, 0.003294155, 0.0033178380000000005, 0.003324017, 0.0033260449999999997, 0.0033619880000000006, 0.0033917010000000004, 0.0034038280000000002, 0.003412697, 0.0034558479999999996, 0.003478225, 0.0034998800000000004, 0.003506336, 0.003548117, 0.0035701489999999995, 0.003572398, 0.003581761, 0.003599623, 0.003613603, 0.0036470949999999995, 0.003659864, 0.003679173, 0.003679387, 0.0036810220000000004, 0.003804353, 0.0038157240000000004, 0.0038349269999999997, 0.0038434460000000004, 0.00388731, 0.003915829000000001, 0.003952798, 0.003953152, 0.004030366, 0.004085422, 0.004192465999999999, 0.004203221, 0.004265324000000001, 0.004276008, 0.004305078000000001, 0.004362351000000001, 0.0044081369999999995, 0.004475963999999999, 0.004482052000000001, 0.004492299999999999, 0.004533098, 0.004556331000000001, 0.004584157000000001, 0.004588878999999999, 0.004596434, 0.004682977999999999, 0.004751147999999999, 0.004837581, 0.004860231, 0.004876233, 0.004926238, 0.00503934, 0.005101013999999999, 0.005155165999999999, 0.005180879, 0.005182472, 0.005214978999999999, 0.0052581120000000005, 0.005279692000000001, 0.005333214000000001, 0.005338148, 0.005387918, 0.005400786000000001, 0.005422320999999999, 0.0054406, 0.005460437, 0.005565004, 0.005569259000000001, 0.005641229, 0.005722166000000001, 0.005805703000000001, 0.005842799, 0.005876905, 0.005907681, 0.005919846000000001, 0.005987911, 0.005989632, 0.006021591999999999, 0.006037554, 0.006051607, 0.006067045, 0.0060736869999999995, 0.006107587000000001, 0.006136613, 0.006170035, 0.006316095, 0.006407754000000001, 0.006527156000000001, 0.006601333000000001, 0.006614396000000001, 0.006641269000000001, 0.006642458000000001, 0.006712166999999999, 0.006868148000000001, 0.006948130999999999, 0.007147726000000001, 0.007212669999999999, 0.007314227, 0.007416467000000001, 0.007504093, 0.007529599, 0.007544749, 0.007597040000000001, 0.007760536999999999, 0.007801887999999999, 0.007877488, 0.007941336, 0.008006861, 0.008132856000000003, 0.008250868999999997, 0.008264539, 0.008321159, 0.008366396, 0.008379121, 0.008404067999999999, 0.008617836, 0.008683701, 0.009011695000000002, 0.009249378, 0.009257339, 0.009468024, 0.009511418, 0.009539895, 0.009620713999999999, 0.009693431, 0.009744433, 0.009809769, 0.009931163, 0.009967400999999999, 0.009995330999999998, 0.010008609, 0.010039046, 0.010138892, 0.010150654, 0.010170202000000001, 0.010317626999999998, 0.010320703000000002, 0.01046429, 0.010655685999999998, 0.010661996000000002, 0.010678864, 0.010779936000000002, 0.010805392, 0.010873530999999999, 0.010964098, 0.010989513, 0.011086959000000002, 0.011112977999999999, 0.011232226, 0.011249851, 0.011259075, 0.011260114, 0.011265072, 0.011428076, 0.011507141, 0.011536301999999998, 0.011579581, 0.011602068000000002, 0.012292528, 0.012606485000000002, 0.012615143999999998, 0.012693657000000002, 0.012821573000000001, 0.012821901999999998, 0.012859189, 0.012887200999999997, 0.012956236999999999, 0.013000895, 0.013008954, 0.013012728999999999, 0.013012927000000002, 0.013033357, 0.013105381000000001, 0.013379936999999998, 0.013420364, 0.013664683000000002, 0.013686188000000002, 0.013699078, 0.013735670999999998, 0.013737933999999999, 0.013977841, 0.013998060999999997, 0.014015374, 0.01425086, 0.014418242, 0.01443279, 0.01452561, 0.014549848999999998, 0.015010675999999999, 0.015020541999999998, 0.015241535999999998, 0.015512792999999999, 0.015561842000000001, 0.015680472, 0.015960445999999996, 0.016101734999999995, 0.016152205999999995, 0.016393059999999997, 0.016883697, 0.016917347999999995, 0.016971762, 0.017033998, 0.017496434999999998, 0.017723029000000005, 0.017896838, 0.017908229, 0.017944087999999997, 0.018237591000000004, 0.018733366, 0.018969277, 0.019495902999999995, 0.019497608, 0.020022691000000002, 0.020329155999999998, 0.020884309999999996, 0.021150150000000003, 0.02119285, 0.021260209000000002, 0.021268322000000003, 0.021334442999999998, 0.021621481, 0.021677644000000003, 0.022211217, 0.022258995999999996, 0.022263483000000004, 0.022331199000000003, 0.022556724, 0.022727813000000003, 0.022814685999999997, 0.023797467000000003, 0.025645078000000005, 0.025805601000000004, 0.025898818000000004, 0.025995366999999995, 0.026593440000000003, 0.027035347000000005, 0.027440540999999995, 0.027524188999999998, 0.027800642999999996, 0.028187449000000003, 0.028717444, 0.028719078, 0.02896287, 0.029627308000000005, 0.029661140999999995, 0.030217868, 0.030812958000000005, 0.030977534, 0.031364658999999996, 0.03145438099999999, 0.03146984, 0.032971715000000006, 0.033851934, 0.03418240200000001, 0.034785516, 0.034999774, 0.035081506, 0.035525106, 0.036445373, 0.03785507800000001, 0.039040371, 0.039061914, 0.039823713, 0.039877963, 0.039879267999999995, 0.040405678, 0.040448416, 0.04138415499999999, 0.041736370999999994, 0.04432223300000001, 0.045009121000000006, 0.045477474, 0.04557930000000001, 0.04584738499999999, 0.048023189, 0.048250253, 0.049329617000000006, 0.050485977, 0.051558466, 0.05315882500000001, 0.053599983999999996, 0.053708024, 0.054599124000000006, 0.054889315, 0.055073098, 0.05507801500000001, 0.06031389000000001, 0.062237931, 0.06246382599999999, 0.06464025, 0.065816922, 0.0682861, 0.06841271200000001, 0.06885283000000002, 0.068905035, 0.07091682400000002, 0.071767362, 0.072019037, 0.07246726500000002, 0.07251654099999999, 0.072757596, 0.077228737, 0.077308672, 0.07768088399999999, 0.082164086, 0.08267139500000001, 0.082870777, 0.08444322800000001, 0.08448701799999998, 0.08515424999999999, 0.085243503, 0.08537914399999999, 0.086854818, 0.087052736, 0.089326687, 0.090494268, 0.090565822, 0.09071078399999999, 0.090908695, 0.09290321700000001, 0.09331449999999998, 0.09416711900000001, 0.09455219400000002, 0.10058298399999999, 0.112430262, 0.11923315, 0.12090859900000002, 0.12823778999999996, 0.136544116, 0.136552307, 0.153054809, 0.16216348400000002, 0.16319801600000003, 0.16920025300000002, 0.169265675, 0.17252544299999997, 0.202484083, 0.2093712, 0.20983410899999996, 0.209957238, 0.21578083300000003, 0.21593784599999996, 0.22522769100000004, 0.22869761499999997, 0.229228578, 0.232479962, 0.234533534, 0.235544569, 0.23672105899999998, 0.236757472, 0.23713763799999998, 0.27415594000000004, 0.276049212, 0.277161054, 0.2800327289999999, 0.436437355, 0.439061783, 0.44753963299999994, 0.44760204099999995, 0.44819268500000004, 0.44909787399999995, 0.45230497000000003, 0.4533274299999999, 0.45352001099999995, 0.45372375899999995, 0.45382542600000003, 0.4538515779999999, 0.7613579310000002, 0.7665513330000001, 0.8724093919999999, 0.8861413829999999, 0.886208375, 0.886517002, 0.8866251420000001, 0.8866504190000001, 0.886681543, 0.8868670569999999, 0.916344362, 0.9394247010000001, 0.9394656869999999, 0.941010895, 0.942852287, 0.957613865, 0.9678194440000001, 0.970035746, 0.9704181710000002, 0.970887257, 0.9710597219999999, 0.971161364]}} # noqa: E501 + + def tearDown(self): + pass + + def test_read_dotplot(self): + exp_seq = 'UGACGUUGACUGAUGCGUGUACUGGUAUCGGUAUGCUGACUGAUGC' + obs_bp, obs_seq = read_dotplot(self.fp_dot1) + self.assertEqual(exp_seq, obs_seq) + self.assertEqual(self.exp_bp1, + obs_bp.to_string(index_names=False, header=False)) + + exp_seq = 'UGACGUUGACaaaUGCGUGUACUGGUAUCGGUAUGCUGACUGAUGC' + obs_bp, obs_seq = read_dotplot(self.fp_dot2, omit_MEA=False) + self.assertEqual(exp_seq, obs_seq) + self.assertEqual(self.exp_bp2, obs_bp.iloc[:10, :].to_string( + index_names=False, header=False)) + + exp_seq = ("GGGCCCGUAGCACAGUGGA__AGAGCACAUGCCUUCCAACCA_GAUGUCCCG" + "GGUUCGAAUCCAGCCGAGCCCA") + obs_bp, obs_seq = read_dotplot(self.fp_dot_ali) + self.assertEqual(exp_seq, obs_seq) + self.assertEqual(self.exp_ali, obs_bp.iloc[:10, :].to_string( + index_names=False, header=False)) + + def test_dotPlot(self): + bp_ref, seq_ref = read_dotplot(self.fp_dot1) + bp_mut, seq_mut = read_dotplot(self.fp_dot2) + + obs = dotPlot(bp_ref, seq_ref) + self.assertEqual(self.exp_plot_ref, dpElements(obs)) + + obs = dotPlot(bp_ref, seq_ref, bp_mut, seq_mut) + self.assertEqual(self.exp_plot_mut, dpElements(obs)) + + +if __name__ == '__main__': + main()