Repository 'circos'
hg clone https://toolshed.g2.bx.psu.edu/repos/iuc/circos

Changeset 0:ef5f8bbf7730 (2017-08-09)
Next changeset 1:ae9994cf526f (2018-10-04)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/circos commit a41493893bdcbe330434db9c5851719012b62fa8
added:
README.rst
circgraph.xml
fasta-to-karyotype.py
macros.xml
macros_conffiles.xml
static/images/circos-sample-panel.png
static/images/example.png
test-data/1/0-0.wig
test-data/1/1.gff3
test-data/1/2.wig
test-data/1/input.fa
test-data/1/links.txt
test-data/1/links2.txt
test-data/1/output.png
test-data/1/output.svg
tool-data/all_fasta.loc.sample
tool_data_table_conf.xml.sample
unified-histogram.py
unified-tiles.py
wiggle.py
b
diff -r 000000000000 -r ef5f8bbf7730 README.rst
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/README.rst Wed Aug 09 09:52:52 2017 -0400
[
@@ -0,0 +1,43 @@
+Galaxy Circos Tool
+==================
+
+.. figure:: ./static/images/example.png
+   :alt: An image showing a circos plot made with the tool.
+
+Features
+--------
+
+-  [x] Ideograms
+
+   -  [x] Can configure most aspects of these. More features on demand
+
+-  [x] 2d Data sources
+
+   -  [x] Histograms
+
+      -  [x] Stacked histograms
+      -  [x] gff3 scores
+      -  [x] wig files
+      -  [x] bed
+      -  [x] Rules
+
+         -  [x] Complex colouring rules
+
+   -  [ ] Heatmaps
+
+      -  [ ] Bugs here.
+
+   -  [x] Tiles
+   -  [x] Scatter Plots
+   -  [x] Line Plots
+
+-  [x] Links
+-  [x] Axes
+-  [x] Backgrounds
+-  [ ] Highlights
+
+   -  [ ] Wedge
+
+-  [x] Test cases
+-  [ ] Grids?
+-  [ ] Fine grained Z-depth control
b
diff -r 000000000000 -r ef5f8bbf7730 circgraph.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/circgraph.xml Wed Aug 09 09:52:52 2017 -0400
[
b'@@ -0,0 +1,409 @@\n+<?xml version="1.0"?>\n+<tool id="circgraph" name="Circos Builder" version="@WRAPPER_VERSION@">\n+    <description>creates circos plots from standard bioinformatics datatypes.</description>\n+    <macros>\n+        <import>macros.xml</import>\n+        <import>macros_conffiles.xml</import>\n+    </macros>\n+    <expand macro="requirements"/>\n+    <version_command>circos --version</version_command>\n+    <command detect_errors="aggressive"><![CDATA[\n+## Directory structure\n+mkdir -p circos/conf/ circos/data/ &&\n+\n+#if $reference_genome.reference_genome_source == \'history\':\n+    ln -s \'$reference_genome.genome_fasta\' genomeref.fa &&\n+#end if\n+\n+#if $reference_genome.reference_genome_source != \'karyotype\':\n+    ## Process the karyotype.txt file\n+    python \'$__tool_directory__/fasta-to-karyotype.py\'\n+\n+        #if str($reference_genome.reference_genome_source) == \'cached\':\n+            \'${reference_genome.fasta_indexes.fields.path}\'\n+        #else if str($reference_genome.reference_genome_source) == \'history\':\n+            genomeref.fa\n+        #end if\n+\n+        #if $reference_genome.bands:\n+            \'${reference_genome.bands}\'\n+        #end if\n+    > circos/conf/karyotype.txt &&\n+#else\n+    cp $reference_genome.input_karyotype circos/conf/karyotype.txt &&\n+#end if\n+\n+mv \'$circos_conf\' circos/conf/circos.conf &&\n+mv \'$ticks_conf\' circos/conf/ticks.conf &&\n+mv \'$ideogram_conf\' circos/conf/ideogram.conf &&\n+mv \'$data_conf\'  circos/conf/2d.conf &&\n+mv \'$links_conf\'  circos/conf/links.conf &&\n+mv \'$test_case_conf\' circos/conf/galaxy_test_case.xml &&\n+\n+## 2D Data Plots\n+#for $hi, $data in enumerate($sec_tdd.data):\n+    #if str($data.plot_format.plot_format_select) == \'tile\':\n+        python \'$__tool_directory__/unified-tiles.py\'\n+            \'${data.plot_format.data_source}\' \'${data.plot_format.data_source.ext}\'\n+            > circos/data/data-${hi}.txt &&\n+    #else:\n+        python $__tool_directory__/unified-histogram.py\n+            $data.plot_format.plot_format_select\n+            #if str($data.plot_format.plot_format_select) in (\'histogram\', \'heatmap\'):\n+                #for $fi, $file in enumerate($data.plot_format.data_source):\n+                    \'${file}\' \'${file.ext}\'\n+                #end for\n+            #else:\n+                \'${data.plot_format.data_source}\' \'${data.plot_format.data_source.ext}\'\n+            #end if\n+        > circos/data/data-${hi}.txt &&\n+    #end if\n+#end for\n+\n+## Link Tracks\n+#for $hi, $data in enumerate($sec_links.data):\n+    cp \'${data.data_source}\' circos/data/links-${hi}.txt &&\n+#end for\n+\n+tar cvfz circos.tar.gz circos &&\n+\n+circos -conf circos/conf/circos.conf\n+    ]]></command>\n+    <configfiles>\n+        <expand macro="configfile_circos_conf" />\n+        <expand macro="configfile_ticks_conf" />\n+        <expand macro="configfile_ideogram_conf" />\n+        <expand macro="configfile_data_conf" />\n+        <expand macro="configfile_links_conf" />\n+        <expand macro="test_case" />\n+    </configfiles>\n+    <inputs>\n+        <conditional name="reference_genome">\n+            <param name="reference_genome_source" type="select" label="Reference Genome">\n+                <option value="history" selected="True">From History</option>\n+                <option value="cached">Locally Cached</option>\n+                <option value="karyotype">Karyotype</option>\n+            </param>\n+            <when value="cached">\n+                <param name="fasta_indexes" type="select" label="Source FASTA Sequence">\n+                    <options from_data_table="all_fasta"/>\n+                </param>\n+                <!-- TODO: multiple band files? -->\n+                <param name="bands" type="data" format="bed6,bed12" optional="true" label="Cytogenetic Bands"\n+                    help="If defined, will display cytogenetic bands as part of the karyotype configuration"/>\n+            </when>\n+            <when value="history">\n+                <param name="genome_fasta" type="data" format="fas'..b't_specific|layers" value="15" />\n+            <param name="sec_tdd|data_1|plot_format|format_specific|thickness" value="15.0" />\n+            <param name="sec_tdd|data_1|plot_format|format_specific|padding" value="8.0" />\n+            <param name="sec_tdd|data_1|plot_format|format_specific|overflow|overflow_behavior" value="grow" />\n+            <param name="sec_tdd|data_1|plot_format|format_specific|overflow|layer_overflow_color" value="#ffc000" />\n+\n+            <param name="sec_tdd|data_2|r0" value="0.6" />\n+            <param name="sec_tdd|data_2|r1" value="0.69" />\n+            <param name="sec_tdd|data_2|orientation" value="out" />\n+            <param name="sec_tdd|data_2|plot_format|plot_format_select" value="scatter" />\n+            <param name="sec_tdd|data_2|plot_format|data_source" value="1/2.wig" />\n+            <param name="sec_tdd|data_2|plot_format|format_specific|glyph" value="triangle" />\n+            <param name="sec_tdd|data_2|plot_format|format_specific|glyph_size" value="8" />\n+            <param name="sec_tdd|data_2|plot_format|format_specific|data_min" value="0.0" />\n+            <param name="sec_tdd|data_2|plot_format|format_specific|data_max" value="1.0" />\n+            <param name="sec_tdd|data_2|plot_format|format_specific|color" value="#555555" />\n+            <param name="sec_tdd|data_2|plot_format|format_specific|stroke_color" value="#000000" />\n+            <param name="sec_tdd|data_2|plot_format|format_specific|stroke_thickness" value="0" />\n+            <!-- Links -->\n+            <param name="sec_links|data_0|radius" value="0.59" />\n+            <param name="sec_links|data_0|data_source" value="1/links.txt" />\n+            <param name="sec_links|data_0|linktype|ribbon" value="yes" />\n+            <param name="sec_links|data_0|color" value="#9966ff" />\n+            <param name="sec_links|data_0|bezier_radius" value="0.3" />\n+            <param name="sec_links|data_0|sec_link_rule|rules_0|conditions_0|application|application_select" value="pos1" />\n+            <param name="sec_links|data_0|sec_link_rule|rules_0|conditions_0|application|comparison|compare" value="lt" />\n+            <param name="sec_links|data_0|sec_link_rule|rules_0|conditions_0|application|comparison|compval" value="25000" />\n+            <param name="sec_links|data_0|sec_link_rule|rules_0|actions_0|action|action_select" value="color" />\n+            <param name="sec_links|data_0|sec_link_rule|rules_0|actions_0|action|action_value" value="#ffcc00" />\n+\n+            <param name="sec_links|data_1|radius" value="0.45" />\n+            <param name="sec_links|data_1|data_source" value="1/links2.txt" />\n+            <param name="sec_links|data_1|linktype|ribbon" value="yes" />\n+            <param name="sec_links|data_1|color" value="#42aa42" />\n+            <param name="sec_links|data_1|bezier_radius" value="0" />\n+\n+            <!-- Outputs -->\n+            <output name="output_png" file="1/output.png" compare="sim_size" delta="15000" ftype="png" />\n+            <output name="output_svg" file="1/output.svg" compare="sim_size" ftype="svg" />\n+        </test>\n+    </tests>\n+    <help><![CDATA[\n+Circos\n+======\n+\n+Circos is a software package for visualizing data and information. It visualizes data in a circular layout \xe2\x80\x94 this makes Circos ideal for exploring relationships between objects or positions. There are other reasons why a circular layout is advantageous, not the least being the fact that it is attractive.\n+\n+Circos is ideal for creating publication-quality infographics and illustrations with a high data-to-ink ratio, richly layered data and pleasant symmetries. You have fine control each element in the figure to tailor its focus points and detail to your audience.\n+\n+.. image:: $PATH_TO_IMAGES/circos-sample-panel.png\n+   :alt: several example circos plots\n+\n+For more information see the Circos documentation_.\n+\n+.. _documentation: http://circos.ca/documentation/\n+\n+\n+    ]]></help>\n+    <expand macro="citations" />\n+</tool>\n'
b
diff -r 000000000000 -r ef5f8bbf7730 fasta-to-karyotype.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fasta-to-karyotype.py Wed Aug 09 09:52:52 2017 -0400
[
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+import sys
+
+from Bio import SeqIO
+
+
+for idx, seq in enumerate(SeqIO.parse(sys.argv[1], 'fasta')):
+    sys.stdout.write("chr - {seq_id} {idx} 0 {length} set3-12-qual-{color}\n".format(
+        seq_id=seq.id, idx=idx, length=len(seq), color=((idx + 1) % 12)
+    ))
+
+if len(sys.argv) > 2:
+    # band hs1 p36.32 p36.32 2200000 5100000 gpos25
+    # band hs1 p36.31 p36.31 5100000 6900000 gneg
+    # band hs1 p36.23 p36.23 6900000 8800000 gpos25
+    COLS = ('chrom', 'chromStart', 'chromEnd', 'name', 'score', 'strand',
+            'thickStart', 'thickEnd', 'itemRgb')
+    with open(sys.argv[2], 'r') as handle:
+        for line in handle:
+            lineData = dict(zip(COLS, line.split()))
+            sys.stdout.write("band {chrom} {name} {name} {chromStart} {chromEnd} {color}\n".format(
+                # Can access name because requiring >bed3
+                name=lineData['name'],
+                chrom=lineData['chrom'],
+                chromStart=lineData['chromStart'],
+                chromEnd=lineData['chromEnd'],
+                # ????
+                color=lineData.get('itemRgb', 'gpos50'),
+            ))
+    # band
+    # ID
+    # parentChr
+    # parentChr
+    # START
+    # END COLOR
+
+# chrom - The name of the chromosome (e.g. chr3, chrY, chr2_random) or scaffold (e.g. scaffold10671).
+# chromStart - The starting position of the feature in the chromosome or scaffold. The first base in a chromosome is numbered 0.
+# chromEnd - The ending position of the feature in the chromosome or scaffold. The chromEnd base is not included in the display of the feature. For example, the first 100 bases of a chromosome are defined as chromStart=0, chromEnd=100, and span the bases numbered 0-99.
+# name - Defines the name of the BED line. This label is displayed to the left of the BED line in the Genome Browser window when the track is open to full display mode or directly to the left of the item in pack mode.
+# score - A score between 0 and 1000. If the track line useScore attribute is set to 1 for this annotation data set, the score value will determine the level of gray in which this feature is displayed (higher numbers = darker gray). This table shows the Genome Browser's translation of BED score values into shades of gray:
+# strand - Defines the strand - either '+' or '-'.
+# thickStart - The starting position at which the feature is drawn thickly (for example, the start codon in gene displays). When there is no thick part, thickStart and thickEnd are usually set to the chromStart position.
+# thickEnd - The ending position at which the feature is drawn thickly (for example, the stop codon in gene displays).
+# itemRgb - An RGB value of the form R,G,B (e.g. 255,0,0). If the track line itemRgb attribute is set to "On", this RBG value will determine the display color of the data contained in this BED line. NOTE: It is recommended that a simple color scheme (eight colors or less) be used with this attribute to avoid overwhelming the color resources of the Genome Browser and your Internet browser.
+# blockCount - The number of blocks (exons) in the BED line.
+# blockSizes - A comma-separated list of the block sizes. The number of items in this list should correspond to blockCount.
+# blockStarts - A comma-separated list of block starts. All of the blockStart positions should be calculated relative to chromStart. The number of items in this list should correspond to blockCount.
b
diff -r 000000000000 -r ef5f8bbf7730 macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml Wed Aug 09 09:52:52 2017 -0400
b
b'@@ -0,0 +1,362 @@\n+<?xml version="1.0"?>\n+<macros>\n+  <token name="@WRAPPER_VERSION@">0.9-RC2</token>\n+  <xml name="requirements">\n+      <requirements>\n+        <requirement type="package" version="2.2.3">libgd</requirement>\n+        <requirement type="package" version="0.69.5">circos</requirement>\n+        <requirement type="package" version="2.7">python</requirement>\n+        <requirement type="package" version="0.6.4">bcbiogff</requirement>\n+        <requirement type="package" version="1.70">biopython</requirement>\n+      </requirements>\n+  </xml>\n+\n+  <xml name="citations">\n+    <citations>\n+        <citation type="doi">10.1101/gr.092759.109</citation>\n+    </citations>\n+  </xml>\n+\n+  <xml name="circos_color"\n+      token_label="Color"\n+      token_name="color"\n+      token_value="#000000"\n+      token_help=""\n+      >\n+    <param label="@LABEL@" type="color" name="@NAME@" value="@VALUE@" help="@HELP@">\n+      <sanitizer>\n+        <valid initial="string.letters,string.digits">\n+          <add value="#" />\n+        </valid>\n+      </sanitizer>\n+    </param>\n+  </xml>\n+\n+  <xml name="auto_color"\n+      token_name="color"\n+      token_label="Color">\n+    <conditional name="@NAME@" label="@LABEL@">\n+      <param name="@NAME@_select" type="select" label="@LABEL@">\n+        <option value="automatic" selected="true">Automatic Selection</option>\n+        <option value="manual">Manual Specification</option>\n+      </param>\n+      <when value="automatic">\n+      </when>\n+      <when value="manual">\n+        <param name="@NAME@" label="@LABEL@" type="color" value="#000000">\n+          <sanitizer>\n+            <valid initial="string.letters,string.digits">\n+              <add value="#" />\n+            </valid>\n+          </sanitizer>\n+        </param>\n+      </when>\n+    </conditional>\n+  </xml>\n+\n+  <xml name="brewer_scale"\n+      token_name="color"\n+      token_label="Color">\n+    <param name="@NAME@" type="select" label="@LABEL@">\n+      <option value="purples-13-seq">Sequential: Purples</option>\n+      <option value="reds-13-seq">Sequential: Reds</option>\n+      <option value="oranges-13-seq">Sequential: Oranges</option>\n+      <option value="greens-13-seq">Sequential: Greens</option>\n+      <option value="blues-13-seq">Sequential: Blues</option>\n+      <option value="greys-13-seq">Sequential: Greys</option>\n+\n+      <option value="bugn-13-seq">Sequential: Blue - Green</option>\n+      <option value="bupu-13-seq">Sequential: Blue - Purple</option>\n+      <option value="gnbu-13-seq">Sequential: Green - Blue</option>\n+      <option value="orrd-13-seq">Sequential: Orange - Red</option>\n+      <option value="pubu-13-seq">Sequential: Purple - Blue</option>\n+      <option value="pubugn-13-seq">Sequential: Purple - Blue - Green</option>\n+      <option value="purd-13-seq">Sequential: Purple - Red</option>\n+      <option value="rdpu-13-seq">Sequential: Red - Purple</option>\n+      <option value="ylgn-13-seq">Sequential: Yellow - Green</option>\n+      <option value="ylgnbu-13-seq">Sequential: Yellow - Green - Blue</option>\n+      <option value="ylorbr-13-seq">Sequential: Yellow - Orange - Brown</option>\n+      <option value="ylorrd-13-seq">Sequential: Yellow - Orange - Red</option>\n+\n+      <option value="brbg-15-div">Diverging: Brown - Blue Green</option>\n+      <option value="piyg-15-div">Diverging: Pink - Yellow Green</option>\n+      <option value="prgn-15-div">Diverging: Purple - Green</option>\n+      <option value="puor-15-div">Diverging: Purple - Orange</option>\n+      <option value="rdbu-15-div">Diverging: Red - Blue</option>\n+      <option value="rdgy-15-div">Diverging: Red - Grey</option>\n+      <option value="rdylbu-15-div">Diverging: Red - Yellow - Blue</option>\n+      <option value="rdylgn-15-div">Diverging: Red - Yellow - Green</option>\n+      <option value="spectral-15-div">Diverging: Spectral</option>\n+\n+      <option value="accent-8-qual">Qualitative: Accent</option>\n+      <option value="dark2-8-qual">Qualitative: Dark2</o'..b'me="invert" type="boolean" truevalue="True" falsevalue="False" label="Invert Color Scale" />\n+                            </when>\n+                        </conditional>\n+                    </when>\n+                    <when value="thickness">\n+                        <param name="action_value" type="integer" value="1" label="Thickness"/>\n+                    </when>\n+                    <when value="z">\n+                        <conditional name="dynamic">\n+                            <param name="dynamic_select" type="select" label="Static or Dynamic Z-Depth">\n+                                <option value="static">Static</option>\n+                                <option value="dynamic">Dynamic (based on value)</option>\n+                            </param>\n+                            <when value="static">\n+                                <param name="action_value" type="float" value="1" label="Z-depth" help="Datasets with a higher z-depth value are drawn on top of datasets with lower z value"/>\n+                            </when>\n+                            <when value="dynamic">\n+                                <param name="min_value" type="float" value="-1" label="Expected minimum value of dataset"/>\n+                                <param name="max_value" type="float" value="1" label="Expected maximum value of dataset"/>\n+                                <param name="invert" type="boolean" truevalue="True" falsevalue="False" label="Invert Z-Depth Mapping" />\n+                            </when>\n+                        </conditional>\n+                    </when>\n+                </conditional>\n+            </repeat>\n+\n+            <param name="continue_flow" type="boolean" label="Continue flow" truevalue="flow = continue" falsevalue="" help="Allow rules after this one to be applied in addition to this rule. E.g. if one rule modifies font size, and another font colour, with continued flow they could both be applied rather than whichever was encountered first." />\n+        </repeat>\n+    </section>\n+  </xml>\n+\n+  <xml name="integer_comparison">\n+    <conditional name="comparison" >\n+        <param name="compare" type="select" label="Comparison">\n+            <option value="lt">less than</option>\n+            <option value="gt">greater than</option>\n+        </param>\n+        <when value="lt">\n+            <param name="compval" value="0" type="integer" label="value"/>\n+        </when>\n+        <when value="gt">\n+            <param name="compval" value="0" type="integer" label="value"/>\n+        </when>\n+    </conditional>\n+  </xml>\n+\n+  <xml name="chromosome_comparison">\n+    <conditional name="comparison" >\n+        <param name="compare" type="select" label="Comparison">\n+            <option value="on">on chromosome (either side)</option>\n+            <option value="from">from chromosome</option>\n+            <option value="to">to chromosome</option>\n+            <option value="fromto">from-to chromosome</option>\n+            <option value="between">between chromosomes</option>\n+        </param>\n+        <!-- TODO select chromosome from metadata/file column instead of text fields -->\n+        <when value="on">\n+            <param name="compval" value="chr1" type="text" label="Chromosome"/>\n+        </when>\n+        <when value="from">\n+            <param name="compval" value="chr1" type="text" label="Chromosome"/>\n+        </when>\n+        <when value="to">\n+            <param name="compval" value="chr1" type="text" label="Chromosome"/>\n+        </when>\n+        <when value="fromto">\n+            <param name="compval" value="chr1" type="text" label="From Chromosome"/>\n+            <param name="compval2" value="chr1" type="text" label="To Chromosome"/>\n+        </when>\n+        <when value="between">\n+            <param name="compval" value="chr1" type="text" label="Chromosome"/>\n+            <param name="compval2" value="chr1" type="text" label="Chromosome"/>\n+        </when>\n+    </conditional>\n+  </xml>\n+\n+</macros>\n'
b
diff -r 000000000000 -r ef5f8bbf7730 macros_conffiles.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/macros_conffiles.xml Wed Aug 09 09:52:52 2017 -0400
[
b'@@ -0,0 +1,424 @@\n+<?xml version="1.0"?>\n+<macros>\n+  <xml name="configfile_circos_conf">\n+    <configfile name="circos_conf"><![CDATA[\n+<<include colors_fonts_patterns.conf>>\n+<<include housekeeping.conf>>\n+karyotype = karyotype.txt\n+\n+<image>\n+  <<include etc/image.conf>>\n+</image>\n+\n+<<include ticks.conf>>\n+<<include ideogram.conf>>\n+<plots>\n+    <<include 2d.conf>>\n+</plots>\n+<links>\n+    <<include links.conf>>\n+</links>\n+\n+    ]]></configfile>\n+  </xml>\n+  <xml name="configfile_ticks_conf">\n+    <configfile name="ticks_conf"><![CDATA[\n+show_ticks          = ${ticks.show_ticks}\n+show_tick_labels    = yes\n+\n+#def circosColor($value)\n+    #set $value = str($value)\n+    #set $r = int($value[1:3], 16)\n+    #set $g = int($value[3:5], 16)\n+    #set $b = int($value[5:], 16)\n+    $r, $g, $b\n+#end def\n+\n+\n+<ticks>\n+    radius           = ${ticks.radius}r\n+    color            = $circosColor($ticks.color)\n+    thickness        = 2p\n+    multiplier       = ${ticks.multiplier}\n+\n+    #for $tick_group in $ticks.tick_group:\n+    <tick>\n+        spacing        = ${tick_group.spacing}\n+        size           = ${tick_group.size}p\n+        show_label     = ${tick_group.show_tick_labels}\n+        label_size     = ${tick_group.label_size}p\n+        label_offset   = ${tick_group.label_offset}p\n+        format         = ${tick_group.format} kb\n+        ## TODO: figure out automated tick labels\n+        ##if ${ticks.multiplier} * ${tick_group.spacing}\n+    </tick>\n+    #end for\n+</ticks>\n+]]>\n+    </configfile>\n+  </xml>\n+  <xml name="configfile_ideogram_conf">\n+    <configfile name="ideogram_conf"><![CDATA[\n+\n+<ideogram>\n+\n+    <spacing>\n+        ## spacing between ideograms\n+        default = ${ideogram.spacing}r\n+    </spacing>\n+\n+    # ideogram position, thickness and fill\n+    radius           = ${ideogram.radius}r\n+    thickness        = ${ideogram.thickness}p\n+    fill             = yes\n+\n+    show_label       = ${ideogram.ideogram_labels.show_label}\n+    label_radius     = dims(ideogram,radius) + 0.075r\n+    label_size       = 24\n+    label_parallel   = ${ideogram.ideogram_labels.parallel}\n+\n+    show_bands            = yes\n+    fill_bands            = yes\n+    band_transparency     = 4\n+\n+</ideogram>\n+]]></configfile>\n+  </xml>\n+  <xml name="configfile_data_conf">\n+    <configfile name="data_conf"><![CDATA[\n+#for $hi, $data in enumerate($sec_tdd.data):\n+<plot>\n+    #set plot_type = str($data.plot_format.plot_format_select)\n+    #def circosColor($value)\n+        #set $value = str($value)\n+        #set $r = int($value[1:3], 16)\n+        #set $g = int($value[3:5], 16)\n+        #set $b = int($value[5:], 16)\n+        $r, $g, $b\n+    #end def\n+\n+    type = ${plot_type}\n+    file = data/data-${hi}.txt\n+\n+    r1   = ${data.r1}r\n+    r0   = ${data.r0}r\n+    orientation = ${data.orientation}\n+\n+#if str($plot_type) == \'histogram\':\n+    extend_bin = ${data.plot_format.format_specific.extend_bins}\n+    fill_color = ${data.plot_format.format_specific.fill_color}\n+#else if str($plot_type) == \'heatmap\':\n+    color = $circosColor($data.plot_format.format_specific.fill_color)\n+    scale_log_base = ${data.plot_format.format_specific.scale_log_base}\n+#else if str($plot_type) == \'line\':\n+    color     = $circosColor($data.plot_format.format_specific.color)\n+    thickness = ${data.plot_format.format_specific.thickness}\n+#else if str($plot_type) == \'scatter\':\n+    glyph                = ${data.plot_format.format_specific.glyph}\n+    glyph_size           = ${data.plot_format.format_specific.glyph_size}\n+    color                = $circosColor($data.plot_format.format_specific.color)\n+    stroke_color         = $circosColor($data.plot_format.format_specific.stroke_color)\n+    stroke_thickness     = ${data.plot_format.format_specific.stroke_thickness}\n+#else if str($plot_type) == \'tile\':\n+    color                = ${data.plot_format.format_specific.color}\n+    stroke_color         = $circosColor($data.plot_format.format_specific.color)\n+    stroke_thickness  '..b' ($idx, $j, $file.ext) for ($j, $file) in enumerate($data_group.plot_format.data_source)])\n+        <param name="sec_tdd|data_${idx}|plot_format|data_source" value="${my_files}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|fill_color" value="${data_group.plot_format.format_specific.fill_color}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|scale_log_base" value="${data_group.plot_format.format_specific.scale_log_base}" />\n+    #else if str($data_group.plot_format.plot_format_select) == \'line\':\n+        <param name="sec_tdd|data_${idx}|plot_format|data_source" value="my-test-case/${idx}.${data.plot_format.data_source.ext}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|color" value="${data_group.plot_format.format_specific.color}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|stroke" value="${data_group.plot_format.format_specific.stroke}" />\n+    #else if str($data_group.plot_format.plot_format_select) == \'scatter\':\n+        <param name="sec_tdd|data_${idx}|plot_format|data_source" value="my-test-case/${idx}.${data.plot_format.data_source.ext}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|glyph" value="${data_group.plot_format.format_specific.glyph}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|glyph_size" value="${data_group.plot_format.format_specific.glyph_size}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|data_min" value="${data_group.plot_format.format_specific.data_min}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|data_max" value="${data_group.plot_format.format_specific.data_max}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|color" value="${data_group.plot_format.format_specific.color}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|stroke_color" value="${data_group.plot_format.format_specific.stroke_color}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|stroke_thickness" value="${data_group.plot_format.format_specific.stroke_thickness}" />\n+    #else if str($data_group.plot_format.plot_format_select) == \'tile\':\n+        <param name="sec_tdd|data_${idx}|plot_format|data_source" value="my-test-case/${idx}.${data.plot_format.data_source.ext}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|fill_color" value="${data_group.plot_format.format_specific.fill_color}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|color" value="${data_group.plot_format.format_specific.color}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|stroke_thickness" value="${data_group.plot_format.format_specific.stroke_thickness}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|layers" value="${data_group.plot_format.format_specific.layers}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|thickness" value="${data_group.plot_format.format_specific.thickness}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|padding" value="${data_group.plot_format.format_specific.padding}" />\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|overflow|overflow_behavior" value="${data_group.plot_format.format_specific.overflow.overflow_behavior}" />\n+        #if str($data_group.plot_format.format_specific.overflow.overflow_behavior) != \'hide\':\n+        <param name="sec_tdd|data_${idx}|plot_format|format_specific|overflow|layer_overflow_color" value="${data_group.plot_format.format_specific.overflow.layer_overflow_color}" />\n+        #end if\n+    #end if\n+    ## Next line intentionally blank\n+\n+    #end for\n+\n+    <!-- Outputs -->\n+    <output name="output_png" file="my-test-case/output.png" />\n+    <output name="output_svg" file="my-test-case/output.svg" />\n+</test>\n+    ]]></configfile>\n+  </xml>\n+</macros>\n'
b
diff -r 000000000000 -r ef5f8bbf7730 static/images/circos-sample-panel.png
b
Binary file static/images/circos-sample-panel.png has changed
b
diff -r 000000000000 -r ef5f8bbf7730 static/images/example.png
b
Binary file static/images/example.png has changed
b
diff -r 000000000000 -r ef5f8bbf7730 test-data/1/0-0.wig
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/1/0-0.wig Wed Aug 09 09:52:52 2017 -0400
b
b'@@ -0,0 +1,503 @@\n+track type=wiggle_0 name="example" description="discontinuous sine wave"\n+fixedStep chrom=ctgA start=1 step=100 span=20\n+0\n+-0.506365641109759\n+-0.873297297213995\n+-0.999755839901149\n+-0.850919359639177\n+-0.467771805322476\n+0.0441824483318732\n+0.543970523363376\n+0.893969648197021\n+0.99780327442197\n+0.826879540532003\n+0.428264391396659\n+-0.0882786064717262\n+-0.580513008156313\n+-0.91289603861164\n+-0.993901956906654\n+-0.801224790676895\n+-0.387920558984219\n+0.132202352755937\n+0.615921726468774\n+0.930039504416137\n+0.988059506793465\n+0.774005214886395\n+0.34681910129778\n+-0.175867902248536\n+-0.650127523574896\n+-0.945366563696042\n+-0.980287334634812\n+-0.745273974144339\n+-0.305040291224202\n+0.219189974282818\n+0.683063594104854\n+0.958847282055722\n+0.970600619811948\n+0.71508718178021\n+0.262665724548229\n+-0.262083959018097\n+-0.714665612518583\n+-0.970455331081526\n+-0.959018280889002\n+-0.683503793877429\n+-0.219778160592474\n+0.304466082686301\n+0.744871858736274\n+0.980168039762288\n+0.945562938664219\n+0.650585494129627\n+0.176461360584952\n+-0.346253571205695\n+-0.773623338680308\n+-0.987966438766777\n+-0.930260871990585\n+-0.61639657336978\n+-0.132799924069858\n+0.38736481184216\n+0.800863899493182\n+0.993835297491596\n+0.913141966452114\n+0.581003804007494\n+0.0888791236810795\n+-0.427719512602322\n+-0.826540339206424\n+-0.997763153807204\n+-0.894239655996039\n+-0.544476309619657\n+-0.044784738601126\n+0.467238859047214\n+0.850602510646281\n+0.999742336443933\n+0.873590857634893\n+0.50688542994917\n+0.000602887030758908\n+-0.505845668220208\n+-0.873003419373278\n+-0.999768979974307\n+-0.851235899346026\n+-0.468304581575409\n+0.043580142003502\n+0.543464539388603\n+0.893699315464349\n+0.997843032362382\n+0.827218441309355\n+0.428809114528536\n+-0.0876780571755001\n+-0.580022001304441\n+-0.912649778958282\n+-0.993968255065378\n+-0.801585390637186\n+-0.388476165127704\n+0.131604733390055\n+0.615446655696971\n+0.929817798797622\n+0.988152215687393\n+0.774386809762636\n+0.347384505330554\n+-0.17527437998892\n+-0.64966931671649\n+-0.945169845112828\n+-0.980406273199548\n+-0.745675818665582\n+-0.305614388888252\n+0.218601708303567\n+0.682623146057239\n+0.958675934707531\n+0.97074555575544\n+0.715508491127093\n+0.263247394606515\n+-0.261502098227572\n+-0.714243783495441\n+-0.970309689616982\n+-0.959188931145217\n+-0.683943745214962\n+-0.220366267018746\n+0.303891763483259\n+0.744469472587545\n+0.980048388625338\n+0.945758969945982\n+0.651043228214223\n+0.177054754782462\n+-0.345687915259853\n+-0.773241181283175\n+-0.987873011641156\n+-0.930481901440504\n+-0.616871196227395\n+-0.133397447114619\n+0.386808923903526\n+0.800502717217221\n+0.993768276844436\n+0.913387562390317\n+0.581494388679593\n+0.0894796085852885\n+-0.427174478343574\n+-0.82620083745591\n+-0.997722670532666\n+-0.89450933876326\n+-0.544981897973607\n+-0.0453870125923442\n+0.466705742943332\n+0.850285352482504\n+0.999728469607566\n+0.873884100529272\n+0.507405034549512\n+0.00120577384238478\n+-0.505325511469513\n+-0.87270922421956\n+-0.999781756658628\n+-0.851552129651776\n+-0.468837187612361\n+0.0429778198349343\n+0.542958357879249\n+0.893428657896279\n+0.997882427613987\n+0.827557041415301\n+0.429353681799962\n+-0.0870774760106846\n+-0.579530783630345\n+-0.912403187581549\n+-0.994034191943674\n+-0.801945699242987\n+-0.389031630070668\n+0.131007066189432\n+0.614971361227045\n+0.929595755215624\n+0.988244565414863\n+0.774768123170331\n+0.347949783098507\n+-0.174680794021833\n+-0.649210873720956\n+-0.94497278298608\n+-0.980524855413266\n+-0.746077392153944\n+-0.306188375469783\n+0.21801336286854\n+0.682182449894674\n+0.958504238906709\n+0.970890138859323\n+0.715929540406099\n+0.263828968981531\n+-0.260920142388146\n+-0.713821694864108\n+-0.970163695471254\n+-0.959359232762341\n+-0.684383447957544\n+-0.220954293347872\n+0.303317333823826\n+0.744066815844409\n+0.979928381267452\n+0.94595465747008\n+0.651500725662311\n+0.177648084625384\n+-0.345122133665854\n+-0.772858742833902\n+-0.987779225450561\n+-0.930702592685557\n+-0.617345594869105\n+-0.133994921673036\n+0.386252895370368\n+0.800141243980293\n+0.993700894989533'..b'20793\n+0.430442347969774\n+-0.0858762189484769\n+-0.578547716529735\n+-0.911909010016595\n+-0.994164981763242\n+-0.802665441867374\n+-0.390142135547497\n+0.129811589152921\n+0.614020101883935\n+0.929150654484127\n+0.988428187236296\n+0.775529905025798\n+0.349079959018146\n+-0.173493431828281\n+-0.648293279985113\n+-0.944577628388612\n+-0.980760950615372\n+-0.746879725448277\n+-0.307336014550815\n+0.216836434486577\n+0.68130031386551\n+0.958159802196927\n+0.971178246338178\n+0.716770858148409\n+0.264991829836246\n+-0.259755946408727\n+-0.712976739390632\n+-0.969870649348633\n+-0.959698789831842\n+-0.685262107018665\n+-0.222130104859792\n+0.302168143970983\n+0.743260691160433\n+0.979687298063475\n+0.946345000960895\n+0.652415009983898\n+0.17883455038485\n+-0.34399019435602\n+-0.772093023335059\n+-0.987590576010932\n+-0.931142960240324\n+-0.618293718815172\n+-0.13518972446219\n+0.385140417328934\n+0.79941742514918\n+0.993565047754595\n+0.914122357899222\n+0.582964873838637\n+0.091280867284509\n+-0.425538444762198\n+-0.825180530889296\n+-0.997599044898223\n+-0.895316435894515\n+-0.546497473784151\n+-0.0471937347087195\n+0.465105377598017\n+0.849332024119238\n+0.999684688874618\n+0.874761922988011\n+0.508962741027838\n+0.00301443077113541\n+-0.503763939941528\n+-0.871824735950293\n+-0.999817906332802\n+-0.852498963013576\n+-0.470433982491772\n+0.0411707604773582\n+0.541438629983896\n+0.892614737164045\n+0.997998437093437\n+0.828571036474523\n+0.430986446472459\n+-0.0852755434877088\n+-0.57805586746054\n+-0.911661424007995\n+-0.994229834656976\n+-0.803024875624353\n+-0.390697175677724\n+0.129213779751557\n+0.613544137356508\n+0.92892759749641\n+0.988519459263516\n+0.775910373196683\n+0.349644856759043\n+-0.17289965603339\n+-0.647834129578325\n+-0.944379536061519\n+-0.980878463517946\n+-0.747280484962623\n+-0.30790966663318\n+0.216247851967423\n+0.680858874319544\n+0.957987061413159\n+0.971321770608431\n+0.717191126305919\n+0.265573115893276\n+-0.259173706691886\n+-0.712553872855609\n+-0.969723597478254\n+-0.959868045160799\n+-0.685701063017834\n+-0.22271788961521\n+0.301593384195272\n+0.742857223512596\n+0.979566222305013\n+0.946539656785734\n+0.652871796525078\n+0.179427685870145\n+-0.343424037051613\n+-0.771709742563807\n+-0.987495712830468\n+-0.931362636389977\n+-0.618767443774911\n+-0.13578705225865\n+0.384583968225014\n+0.799055079818084\n+0.993496582423937\n+0.91436662533687\n+0.583454612012034\n+0.0918812207856598\n+-0.424992790627422\n+-0.824839828674128\n+-0.997557111133059\n+-0.895584817555511\n+-0.547002268691819\n+-0.0477959413987577\n+0.464571584118009\n+0.849013630425847\n+0.999669368573369\n+0.87505389471161\n+0.509481606783953\n+0.0036173145149015\n+-0.503243049637554\n+-0.871529272615042\n+-0.999829229416663\n+-0.85281395456664\n+-0.470965905729547\n+0.0405683771373384\n+0.540931660176769\n+0.892342781239334\n+0.998036381447947\n+0.828908432665215\n+0.431530388323292\n+-0.0846748370315997\n+-0.577563808283757\n+-0.911413506635259\n+-0.994294326175203\n+-0.803384017503629\n+-0.391252073800153\n+0.128615923384498\n+0.613067949822471\n+0.928704202868774\n+0.988610371990796\n+0.776290559345248\n+0.350209627413543\n+-0.172305817394175\n+-0.647374743701449\n+-0.944181100478148\n+-0.980995619897873\n+-0.747680972860835\n+-0.308483206798754\n+0.215659190848055\n+0.680417187299892\n+0.957813972427147\n+0.971464941829636\n+0.717611133783957\n+0.266154305421701\n+-0.258591372772452\n+-0.71213074732663\n+-0.969576193139719\n+-0.960036951603826\n+-0.686139769783315\n+-0.223305593418733\n+0.301018514798568\n+0.742453485856362\n+0.979444790500868\n+0.946733968569148\n+0.653328345765115\n+0.180020756138357\n+-0.342857754921908\n+-0.77132618129705\n+-0.987400490722168\n+-0.931581974014641\n+-0.619240943829511\n+-0.13638433070021\n+0.38402737933528\n+0.798692444052197\n+0.993427755984289\n+0.914610560427116\n+0.583944138115545\n+0.0924815408904855\n+-0.424446982019324\n+-0.824498826652114\n+-0.997514814783015\n+-0.895852873695781\n+-0.547506864779039\n+-0.048398130716271\n+0.464037621778865\n+0.848694928139091\n+0.99965368491949\n+0.875345548376914\n+0.51000028735736\n+0.00422019694387214\n+-0.502721976418416\n+-0.871233492502601\n+\n'
b
diff -r 000000000000 -r ef5f8bbf7730 test-data/1/1.gff3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/1/1.gff3 Wed Aug 09 09:52:52 2017 -0400
b
b'@@ -0,0 +1,268 @@\n+##gff-version 3\n+# Note: See http://song.sourceforge.net\n+ctgA\texample\tcontig\t1\t50001\t.\t.\t.\tName=ctgA\n+ctgA\texample\tremark\t1659\t1984\t1110\t+\t.\tName=f07;Note=This is an example\n+ctgA\texample\tremark\t3014\t6130\t999\t+\t.\tName=f06;Note=This is another example\n+ctgA\texample\tremark\t4715\t5968\t444\t-\t.\tName=f05;Note=Ok! Ok! I get the message.\n+ctgA\texample\tremark\t13280\t16394\t203\t+\t.\tName=f08\n+ctgA\texample\tremark\t15329\t15533\t1000\t+\t.\tName=f10\n+ctgA\texample\tremark\t19157\t22915\t100\t-\t.\tName=f13\n+ctgA\texample\tremark\t22132\t24633\t320\t+\t.\tName=f15\n+ctgA\texample\tremark\t23072\t23185\t850\t+\t.\tName=f14\n+ctgA\texample\tremark\t24562\t28338\t208\t+\t.\tName=f02\n+ctgA\texample\tremark\t36034\t38167\t100\t+\t.\tName=f09\n+ctgA\texample\tremark\t36649\t40440\t300\t-\t.\tName=f03\n+ctgA\texample\tremark\t37242\t38653\t10\t+\t.\tName=f04\n+ctgA\texample\tremark\t44705\t47713\t400\t-\t.\tName=f01\n+ctgA\texample\tremark\t46990\t48410\t100\t-\t.\tName=f11\n+ctgA\texample\tremark\t49758\t50000\t3040\t-\t.\tName=f12\n+\n+ctgA\texample\tSNP\t1000\t1000\t0.987\t.\t.\tID=FakeSNP1;Name=FakeSNP;Note=This is a fake SNP that should appear at 1000 with length 1\t\n+\n+ctgA\texample\tremark\t1000\t2000\t.\t.\t.\tName=Remark:hga;Alias=hga\n+ctgA\texample\tprotein_coding_primary_transcript\t1100\t2000\t.\t+\t.\tName=Gene:hga;Alias=hga\n+ctgA\texample\tpolypeptide\t1200\t1900\t.\t+\t.\tName=Protein:HGA;Alias=hga\n+ctgA\texample\tprotein_coding_primary_transcript\t1600\t3000\t.\t-\t.\tName=Gene:hgb;Alias=hgb\n+ctgA\texample\tpolypeptide\t1800\t2900\t.\t-\t.\tName=Protein:HGB;Alias=hgb\n+\n+ctgA\texample\tpolypeptide_domain\t11911\t15561\t.\t+\t502\tName=m11;Note=kinase\n+ctgA\texample\tpolypeptide_domain\t13801\t14007\t.\t-\t415\tName=m05;Note=helix loop helix\n+ctgA\texample\tpolypeptide_domain\t14731\t17239\t.\t-\t746\tName=m14;Note=kinase\n+ctgA\texample\tpolypeptide_domain\t15396\t16159\t.\t+\t40 \tName=m03;Note=zinc finger\n+ctgA\texample\tpolypeptide_domain\t17023\t17675\t.\t+\t830\tName=m08;Note=7-transmembrane\n+ctgA\texample\tpolypeptide_domain\t17667\t17690\t.\t+\t943\tName=m13;Note=DEAD box\n+ctgA\texample\tpolypeptide_domain\t18048\t18552\t.\t-\t658\tName=m07;Note=7-transmembrane\n+ctgA\texample\tpolypeptide_domain\t21748\t25612\t.\t+\t467\tName=m12;Note=kinase\n+ctgA\texample\tpolypeptide_domain\t28332\t30033\t.\t-\t711\tName=m02;Note=HOX\n+ctgA\texample\tpolypeptide_domain\t28342\t28447\t.\t-\t533\tName=m10;Note=DEAD box\n+ctgA\texample\tpolypeptide_domain\t30578\t31748\t.\t+\t646\tName=m06;Note=SUSHI repeat\n+ctgA\texample\tpolypeptide_domain\t33325\t35791\t.\t+\t479\tName=m04;Note=Ig-like\n+ctgA\texample\tpolypeptide_domain\t37497\t40559\t.\t-\t711\tName=m15;Note=7-transmembrane\n+ctgA\texample\tpolypeptide_domain\t46012\t48851\t.\t+\t533\tName=m09;Note=kinase\n+ctgA\texample\tpolypeptide_domain\t48253\t48366\t.\t+\t646\tName=m01;Note=WD40\n+\n+ctgA\texample\tmatch\t32329\t32359\t.\t+\t825\tName=seg01\n+ctgA\texample\tmatch\t26122\t26126\t.\t+\t185\tName=seg02\n+ctgA\texample\tmatch\t26497\t26869\t.\t+\t502\tName=seg02\n+ctgA\texample\tmatch\t27201\t27325\t.\t+\t442\tName=seg02\n+ctgA\texample\tmatch\t27372\t27433\t.\t+\t970\tName=seg02\n+ctgA\texample\tmatch\t27565\t27565\t.\t+\t519\tName=seg02\n+ctgA\texample\tmatch\t27813\t28091\t.\t+\t592\tName=seg02\n+ctgA\texample\tmatch\t28093\t28201\t.\t+\t475\tName=seg02\n+ctgA\texample\tmatch\t28329\t28377\t.\t+\t17 \tName=seg02\n+ctgA\texample\tmatch\t28829\t29194\t.\t+\t276\tName=seg02\n+ctgA\texample\tmatch\t29517\t29702\t.\t+\t492\tName=seg02\n+ctgA\texample\tmatch\t29713\t30061\t.\t+\t465\tName=seg02\n+ctgA\texample\tmatch\t30329\t30774\t.\t+\t525\tName=seg02\n+ctgA\texample\tmatch\t30808\t31306\t.\t+\t619\tName=seg02\n+ctgA\texample\tmatch\t31516\t31729\t.\t+\t248\tName=seg02\n+ctgA\texample\tmatch\t31753\t32154\t.\t+\t613\tName=seg02\n+ctgA\texample\tmatch\t32595\t32696\t.\t+\t701\tName=seg02\n+ctgA\texample\tmatch\t32892\t32901\t.\t+\t724\tName=seg02\n+ctgA\texample\tmatch\t33127\t33388\t.\t+\t977\tName=seg02\n+ctgA\texample\tmatch\t33439\t33443\t.\t+\t502\tName=seg02\n+ctgA\texample\tmatch\t33759\t34209\t.\t+\t415\tName=seg02\n+ctgA\texample\tmatch\t34401\t34466\t.\t+\t746\tName=seg02\n+ctgA\texample\tmatch\t6885\t7241\t.\t-\t40 \tName=seg03\n+ctgA\texample\tmatch\t7410\t7737\t.\t-\t830\tName=seg03\n+ctgA\texample\tmatch\t8055\t8080\t.\t-\t943\tName=seg03\n+ctgA\texample\tmatch\t8306\t8999\t.\t-\t658\tName=seg03\n+ctgA\texample\tmatch\t5233\t5302\t.\t-\t467\tName=seg04\n+ctgA\tex'..b'tgA\tbare_predicted\tCDS\t10000\t11500\t.\t+\t0\tName=Apple1;Note=CDS with no parent\n+\n+# multi-exon gene - several linked CDSs\n+ctgA\tpredicted\tmRNA\t13000\t17200\t.\t+\t0\tID=cds-Apple2;Name=Apple2;Note=mRNA with CDSs but no UTRs\n+ctgA\tpredicted\tCDS\t13500\t13800\t.\t+\t0\tParent=cds-Apple2\n+ctgA\tpredicted\tCDS\t15000\t15500\t.\t+\t1\tParent=cds-Apple2\n+ctgA\tpredicted\tCDS\t16500\t17000\t.\t+\t2\tParent=cds-Apple2\n+\n+ctgA\texonerate\tmRNA\t17400\t23000\t.\t+\t.\tID=rna-Apple3;Name=Apple3;Note=mRNA with both CDSs and UTRs\n+ctgA\texonerate\tUTR\t17400\t17999\t.\t+\t.\tParent=rna-Apple3\n+ctgA\texonerate\tCDS\t18000\t18800\t.\t+\t0\tParent=rna-Apple3\n+ctgA\texonerate\tCDS\t19000\t19500\t.\t+\t1\tParent=rna-Apple3\n+ctgA\texonerate\tCDS\t21000\t21200\t.\t+\t2\tParent=rna-Apple3\n+ctgA\texonerate\tUTR\t21201\t23000\t.\t+\t.\tParent=rna-Apple3\n+\n+ctgA\texample\tgene\t1050\t9000\t.\t+\t.\tID=EDEN;Name=EDEN;Note=protein kinase\n+ctgA\texample\tmRNA\t1050\t9000\t.\t+\t.\tID=EDEN.1;Parent=EDEN;Name=EDEN.1;Note=Eden splice form 1;Index=1\n+ctgA\texample\tfive_prime_UTR\t1050\t1200\t.\t+\t.\tParent=EDEN.1\n+ctgA\texample\tCDS\t1201\t1500\t.\t+\t0\tParent=EDEN.1\n+ctgA\texample\tCDS\t3000\t3902\t.\t+\t0\tParent=EDEN.1\n+ctgA\texample\tCDS\t5000\t5500\t.\t+\t0\tParent=EDEN.1\n+ctgA\texample\tCDS\t7000\t7608\t.\t+\t0\tParent=EDEN.1\n+ctgA\texample\tthree_prime_UTR\t7609\t9000\t.\t+\t.\tParent=EDEN.1\n+\n+ctgA\texample\tmRNA\t1050\t9000\t.\t+\t.\tID=EDEN.2;Parent=EDEN;Name=EDEN.2;Note=Eden splice form 2;Index=1\n+ctgA\texample\tfive_prime_UTR\t1050\t1200\t.\t+\t.\tParent=EDEN.2\n+ctgA\texample\tCDS\t1201\t1500\t.\t+\t0\tParent=EDEN.2\n+ctgA\texample\tCDS\t5000\t5500\t.\t+\t0\tParent=EDEN.2\n+ctgA\texample\tCDS\t7000\t7608\t.\t+\t0\tParent=EDEN.2\n+ctgA\texample\tthree_prime_UTR\t7609\t9000\t.\t+\t.\tParent=EDEN.2\n+\n+ctgA\texample\tmRNA\t1300\t9000\t.\t+\t.\tID=EDEN.3;Parent=EDEN;Name=EDEN.3;Note=Eden splice form 3;Index=1\n+ctgA\texample\tfive_prime_UTR\t1300\t1500\t.\t+\t.\tParent=EDEN.3\n+ctgA\texample\tfive_prime_UTR\t3000\t3300\t.\t+\t.\tParent=EDEN.3\n+ctgA\texample\tCDS\t3301\t3902\t.\t+\t0\tParent=EDEN.3\n+ctgA\texample\tCDS\t5000\t5500\t.\t+\t1\tParent=EDEN.3\n+ctgA\texample\tCDS\t7000\t7600\t.\t+\t1\tParent=EDEN.3\n+ctgA\texample\tthree_prime_UTR\t7601\t9000\t.\t+\t.\tParent=EDEN.3\n+\n+ctgA\texample\tBAC\t1000\t20000\t.\t.\t.\tID=b101.2;Name=b101.2;Note=Fingerprinted BAC with end reads\n+ctgA\texample\tclone_start\t1000\t1500\t.\t+\t.\tParent=b101.2\n+ctgA\texample\tclone_end\t19500\t20000\t.\t-\t.\tParent=b101.2\n+\n+ctgA\test\tEST_match\t1050\t3202\t.\t+\t.\tID=Match1;Name=agt830.5;Target=agt830.5 1 654\n+ctgA\test\tmatch_part\t1050\t1500\t.\t+\t.\tParent=Match1;Name=agt830.5;Target=agt830.5 1 451\n+ctgA\test\tmatch_part\t3000\t3202\t.\t+\t.\tParent=Match1;Name=agt830.5;Target=agt830.5 452 654\n+\n+ctgA\test\tEST_match\t5410\t7503\t.\t-\t.\tID=Match2;Name=agt830.3;Target=agt830.3 1 595\n+ctgA\test\tmatch_part\t5410\t5500\t.\t-\t.\tParent=Match2;Name=agt830.3;Target=agt830.3 505 595\n+ctgA\test\tmatch_part\t7000\t7503\t.\t-\t.\tParent=Match2;Name=agt830.3;Target=agt830.3 1 504\n+\n+ctgA\test\tEST_match\t1050\t7300\t.\t+\t.\tID=Match3;Name=agt221.5;Target=agt221.5 1 1253\n+ctgA\test\tmatch_part\t1050\t1500\t.\t+\t.\tParent=Match3;Name=agt221.5;Target=agt221.5 1 451\n+ctgA\test\tmatch_part\t5000\t5500\t.\t+\t.\tParent=Match3;Name=agt221.5;Target=agt221.5 452 952\n+ctgA\test\tmatch_part\t7000\t7300\t.\t+\t.\tParent=Match3;Name=agt221.5;Target=agt221.5 953 1253\n+\n+ctgA\test\tEST_match\t7500\t8000\t.\t-\t.\tID=Match4;Name=agt221.3;Target=agt221.3 1 501\n+\n+ctgA\test\tEST_match\t1150\t7200\t.\t+\t.\tID=Match5;Name=agt767.5;Target=agt767.5 1 1153\n+ctgA\test\tmatch_part\t1150\t1500\t.\t+\t.\tParent=Match5;Name=agt767.5;Target=agt767.5 1 351\n+ctgA\test\tmatch_part\t5000\t5500\t.\t+\t.\tParent=Match5;Name=agt767.5;Target=agt767.5 352 852\n+ctgA\test\tmatch_part\t7000\t7200\t.\t+\t.\tParent=Match5;Name=agt767.5;Target=agt767.5 853 1153\n+\n+ctgA\test\tEST_match\t8000\t9000\t.\t-\t.\tID=Match6;Name=agt767.3;Target=agt767.3 1 1001\n+\n+\n+\n+ctgB\texample\tcontig\t1\t6079\t.\t.\t.\tName=ctgB\n+ctgB\texample\tremark\t1659\t1984\t.\t+\t.\tName=f07;Note=This is an example\n+ctgB\texample\tremark\t3014\t6130\t.\t+\t.\tName=f06;Note=This is another example\n+ctgB\texample\tremark\t4715\t5968\t.\t-\t.\tName=f05;Note=\xe3\x81\x82\xe3\x81\x82\xe3\x80\x81\xe3\x81\x93\xe3\x81\xae\xe6\xa9\x9f\xe8\x83\xbd\xe3\x81\xaf\xe3\x80\x81\xe4\xb8\x96\xe7\x95\x8c\xe4\xb8\xad\xe3\x82\x92\xe6\x97\x85\xe3\x81\x97\xe3\x81\xa6\xe3\x81\x84\xe3\x81\xbe\xe3\x81\x99\xef\xbc\x81\n+##FASTA\n+>foobar\n+ACTGATGATCGCTAGATGCTCGACTAGC\n'
b
diff -r 000000000000 -r ef5f8bbf7730 test-data/1/2.wig
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/1/2.wig Wed Aug 09 09:52:52 2017 -0400
b
b'@@ -0,0 +1,503 @@\n+track type=wiggle_0 name="example" description="discontinuous sine wave"\n+fixedStep chrom=ctgA start=1 step=100 span=20\n+0\n+-0.506365641109759\n+-0.873297297213995\n+-0.999755839901149\n+-0.850919359639177\n+-0.467771805322476\n+0.0441824483318732\n+0.543970523363376\n+0.893969648197021\n+0.99780327442197\n+0.826879540532003\n+0.428264391396659\n+-0.0882786064717262\n+-0.580513008156313\n+-0.91289603861164\n+-0.993901956906654\n+-0.801224790676895\n+-0.387920558984219\n+0.132202352755937\n+0.615921726468774\n+0.930039504416137\n+0.988059506793465\n+0.774005214886395\n+0.34681910129778\n+-0.175867902248536\n+-0.650127523574896\n+-0.945366563696042\n+-0.980287334634812\n+-0.745273974144339\n+-0.305040291224202\n+0.219189974282818\n+0.683063594104854\n+0.958847282055722\n+0.970600619811948\n+0.71508718178021\n+0.262665724548229\n+-0.262083959018097\n+-0.714665612518583\n+-0.970455331081526\n+-0.959018280889002\n+-0.683503793877429\n+-0.219778160592474\n+0.304466082686301\n+0.744871858736274\n+0.980168039762288\n+0.945562938664219\n+0.650585494129627\n+0.176461360584952\n+-0.346253571205695\n+-0.773623338680308\n+-0.987966438766777\n+-0.930260871990585\n+-0.61639657336978\n+-0.132799924069858\n+0.38736481184216\n+0.800863899493182\n+0.993835297491596\n+0.913141966452114\n+0.581003804007494\n+0.0888791236810795\n+-0.427719512602322\n+-0.826540339206424\n+-0.997763153807204\n+-0.894239655996039\n+-0.544476309619657\n+-0.044784738601126\n+0.467238859047214\n+0.850602510646281\n+0.999742336443933\n+0.873590857634893\n+0.50688542994917\n+0.000602887030758908\n+-0.505845668220208\n+-0.873003419373278\n+-0.999768979974307\n+-0.851235899346026\n+-0.468304581575409\n+0.043580142003502\n+0.543464539388603\n+0.893699315464349\n+0.997843032362382\n+0.827218441309355\n+0.428809114528536\n+-0.0876780571755001\n+-0.580022001304441\n+-0.912649778958282\n+-0.993968255065378\n+-0.801585390637186\n+-0.388476165127704\n+0.131604733390055\n+0.615446655696971\n+0.929817798797622\n+0.988152215687393\n+0.774386809762636\n+0.347384505330554\n+-0.17527437998892\n+-0.64966931671649\n+-0.945169845112828\n+-0.980406273199548\n+-0.745675818665582\n+-0.305614388888252\n+0.218601708303567\n+0.682623146057239\n+0.958675934707531\n+0.97074555575544\n+0.715508491127093\n+0.263247394606515\n+-0.261502098227572\n+-0.714243783495441\n+-0.970309689616982\n+-0.959188931145217\n+-0.683943745214962\n+-0.220366267018746\n+0.303891763483259\n+0.744469472587545\n+0.980048388625338\n+0.945758969945982\n+0.651043228214223\n+0.177054754782462\n+-0.345687915259853\n+-0.773241181283175\n+-0.987873011641156\n+-0.930481901440504\n+-0.616871196227395\n+-0.133397447114619\n+0.386808923903526\n+0.800502717217221\n+0.993768276844436\n+0.913387562390317\n+0.581494388679593\n+0.0894796085852885\n+-0.427174478343574\n+-0.82620083745591\n+-0.997722670532666\n+-0.89450933876326\n+-0.544981897973607\n+-0.0453870125923442\n+0.466705742943332\n+0.850285352482504\n+0.999728469607566\n+0.873884100529272\n+0.507405034549512\n+0.00120577384238478\n+-0.505325511469513\n+-0.87270922421956\n+-0.999781756658628\n+-0.851552129651776\n+-0.468837187612361\n+0.0429778198349343\n+0.542958357879249\n+0.893428657896279\n+0.997882427613987\n+0.827557041415301\n+0.429353681799962\n+-0.0870774760106846\n+-0.579530783630345\n+-0.912403187581549\n+-0.994034191943674\n+-0.801945699242987\n+-0.389031630070668\n+0.131007066189432\n+0.614971361227045\n+0.929595755215624\n+0.988244565414863\n+0.774768123170331\n+0.347949783098507\n+-0.174680794021833\n+-0.649210873720956\n+-0.94497278298608\n+-0.980524855413266\n+-0.746077392153944\n+-0.306188375469783\n+0.21801336286854\n+0.682182449894674\n+0.958504238906709\n+0.970890138859323\n+0.715929540406099\n+0.263828968981531\n+-0.260920142388146\n+-0.713821694864108\n+-0.970163695471254\n+-0.959359232762341\n+-0.684383447957544\n+-0.220954293347872\n+0.303317333823826\n+0.744066815844409\n+0.979928381267452\n+0.94595465747008\n+0.651500725662311\n+0.177648084625384\n+-0.345122133665854\n+-0.772858742833902\n+-0.987779225450561\n+-0.930702592685557\n+-0.617345594869105\n+-0.133994921673036\n+0.386252895370368\n+0.800141243980293\n+0.993700894989533'..b'20793\n+0.430442347969774\n+-0.0858762189484769\n+-0.578547716529735\n+-0.911909010016595\n+-0.994164981763242\n+-0.802665441867374\n+-0.390142135547497\n+0.129811589152921\n+0.614020101883935\n+0.929150654484127\n+0.988428187236296\n+0.775529905025798\n+0.349079959018146\n+-0.173493431828281\n+-0.648293279985113\n+-0.944577628388612\n+-0.980760950615372\n+-0.746879725448277\n+-0.307336014550815\n+0.216836434486577\n+0.68130031386551\n+0.958159802196927\n+0.971178246338178\n+0.716770858148409\n+0.264991829836246\n+-0.259755946408727\n+-0.712976739390632\n+-0.969870649348633\n+-0.959698789831842\n+-0.685262107018665\n+-0.222130104859792\n+0.302168143970983\n+0.743260691160433\n+0.979687298063475\n+0.946345000960895\n+0.652415009983898\n+0.17883455038485\n+-0.34399019435602\n+-0.772093023335059\n+-0.987590576010932\n+-0.931142960240324\n+-0.618293718815172\n+-0.13518972446219\n+0.385140417328934\n+0.79941742514918\n+0.993565047754595\n+0.914122357899222\n+0.582964873838637\n+0.091280867284509\n+-0.425538444762198\n+-0.825180530889296\n+-0.997599044898223\n+-0.895316435894515\n+-0.546497473784151\n+-0.0471937347087195\n+0.465105377598017\n+0.849332024119238\n+0.999684688874618\n+0.874761922988011\n+0.508962741027838\n+0.00301443077113541\n+-0.503763939941528\n+-0.871824735950293\n+-0.999817906332802\n+-0.852498963013576\n+-0.470433982491772\n+0.0411707604773582\n+0.541438629983896\n+0.892614737164045\n+0.997998437093437\n+0.828571036474523\n+0.430986446472459\n+-0.0852755434877088\n+-0.57805586746054\n+-0.911661424007995\n+-0.994229834656976\n+-0.803024875624353\n+-0.390697175677724\n+0.129213779751557\n+0.613544137356508\n+0.92892759749641\n+0.988519459263516\n+0.775910373196683\n+0.349644856759043\n+-0.17289965603339\n+-0.647834129578325\n+-0.944379536061519\n+-0.980878463517946\n+-0.747280484962623\n+-0.30790966663318\n+0.216247851967423\n+0.680858874319544\n+0.957987061413159\n+0.971321770608431\n+0.717191126305919\n+0.265573115893276\n+-0.259173706691886\n+-0.712553872855609\n+-0.969723597478254\n+-0.959868045160799\n+-0.685701063017834\n+-0.22271788961521\n+0.301593384195272\n+0.742857223512596\n+0.979566222305013\n+0.946539656785734\n+0.652871796525078\n+0.179427685870145\n+-0.343424037051613\n+-0.771709742563807\n+-0.987495712830468\n+-0.931362636389977\n+-0.618767443774911\n+-0.13578705225865\n+0.384583968225014\n+0.799055079818084\n+0.993496582423937\n+0.91436662533687\n+0.583454612012034\n+0.0918812207856598\n+-0.424992790627422\n+-0.824839828674128\n+-0.997557111133059\n+-0.895584817555511\n+-0.547002268691819\n+-0.0477959413987577\n+0.464571584118009\n+0.849013630425847\n+0.999669368573369\n+0.87505389471161\n+0.509481606783953\n+0.0036173145149015\n+-0.503243049637554\n+-0.871529272615042\n+-0.999829229416663\n+-0.85281395456664\n+-0.470965905729547\n+0.0405683771373384\n+0.540931660176769\n+0.892342781239334\n+0.998036381447947\n+0.828908432665215\n+0.431530388323292\n+-0.0846748370315997\n+-0.577563808283757\n+-0.911413506635259\n+-0.994294326175203\n+-0.803384017503629\n+-0.391252073800153\n+0.128615923384498\n+0.613067949822471\n+0.928704202868774\n+0.988610371990796\n+0.776290559345248\n+0.350209627413543\n+-0.172305817394175\n+-0.647374743701449\n+-0.944181100478148\n+-0.980995619897873\n+-0.747680972860835\n+-0.308483206798754\n+0.215659190848055\n+0.680417187299892\n+0.957813972427147\n+0.971464941829636\n+0.717611133783957\n+0.266154305421701\n+-0.258591372772452\n+-0.71213074732663\n+-0.969576193139719\n+-0.960036951603826\n+-0.686139769783315\n+-0.223305593418733\n+0.301018514798568\n+0.742453485856362\n+0.979444790500868\n+0.946733968569148\n+0.653328345765115\n+0.180020756138357\n+-0.342857754921908\n+-0.77132618129705\n+-0.987400490722168\n+-0.931581974014641\n+-0.619240943829511\n+-0.13638433070021\n+0.38402737933528\n+0.798692444052197\n+0.993427755984289\n+0.914610560427116\n+0.583944138115545\n+0.0924815408904855\n+-0.424446982019324\n+-0.824498826652114\n+-0.997514814783015\n+-0.895852873695781\n+-0.547506864779039\n+-0.048398130716271\n+0.464037621778865\n+0.848694928139091\n+0.99965368491949\n+0.875345548376914\n+0.51000028735736\n+0.00422019694387214\n+-0.502721976418416\n+-0.871233492502601\n+\n'
b
diff -r 000000000000 -r ef5f8bbf7730 test-data/1/input.fa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/1/input.fa Wed Aug 09 09:52:52 2017 -0400
b
b'@@ -0,0 +1,897 @@\n+>ctgA\n+cattgttgcggagttgaacaACGGCATTAGGAACACTTCCGTCTCtcacttttatacgat\n+tatgattggttctttagccttggtttagattggtagtagtagcggcgctaatgctacctg\n+aattgagaactcgagcgggggctaggcaaattctgattcagcctgacttctcttggaacc\n+ctgcccataaatcaaagggttagtgcggccaaaacgttggacaacggtattagaagacca\n+acctgaccaccaaaccgtcaattaaccggtatcttctcggaaacggcggttctctcctag\n+atagcgatctgtggtctcaccatgcaatttaaacaggtgagtaaagattgctacaaatac\n+gagactagctgtcaccagatgctgttcatctgttggctccttggtcgctccgttgtaccc\n+aggctactttgaaagagcgcagaatacttagacggtatcgatcatggtagcatagcattc\n+tgataacatgtatggagttcgaacatccgtctggggccggacggtccgtttgaggttggt\n+tgatctgggtgatagtcagcaagatagacgttagataacaaattaaaggattttacctta\n+gattgcgactagtacaacggtacatcggtgattcgcgctctactagatcacgctatgggt\n+accataaacaaacggtggaccttctcaagctggttgacgcctcagcaacataggcttcct\n+cctccacgcatctcagcataaaaggcttataaactgcttctttgtgccagagcaactcaa\n+ttaagcccttggtaccgtgggcacgcattctgtcacggtgaccaactgttcatcctgaat\n+cgccgaatgggactatttggtacaggaatcaagcggatggcactactgcagcttatttac\n+gacggtattcttaaagtttttaagacaatgtatttcatgggtagttcggtttgttttatt\n+gctacacaggctcttgtagacgacctacttagcactacggccgagcgcaataacccccgg\n+aaagcacttgctactgggaggcgggtttatccatcggcaataggggttatcagtactacc\n+aagaagattgtgaagatattaacagcattgaaaaaagttcggactgggcatgaaacgtgt\n+gtcagagttagagtccttgagggactgaatgggtttgtcccaggcccaagcttgaggtgg\n+atgtcacctcgggtactgcctctattacagaggtatcttaatggcgcatccagccttgtg\n+gctgggtctacgtacgcgtgggcaccatacgtatgttggcaggaaaggtcaatcatgctt\n+gtttcctcgtcgcagaaacgttcacactattggctcgcgggatcgaacgggcctgattat\n+ttttccagctcctgcgttcctatcacgccaactgtcgctaataaaatgttatatagagat\n+aacccattgctatgcaaggatggagaaaccgcttcacaacaccctagaattacttcagca\n+ctaacatctaagataccgggaaaaccgtaggtgccacttggttttgagggcaatgcctct\n+tgcactggcgattcgtggagtaaccttgctaccgatttccaccttttctaggtatgatta\n+catgcgatcgccattgtcagtcgtcgtacgaaatccaggaaggaattcgaatacatgacc\n+gaaagctatggcatcataagcgtggctctttactaaggacacgtgtagtcggctgatttc\n+gcgcagaacttcgctcaccggacagtgactgctgtccgaacttgggggcagcgtagattc\n+tagctagagaccgcagcgaaaatgccactcgctaggtggctatggacgtccagctatagg\n+cccccacattcgtatgtatactccggtaattgagtctacctttcgaaagatcaaagttca\n+caaaccttctctcacgttaacatagatgctcgcacatagctagtccggtgataaagcggc\n+cgtgcatgcgagtatttagcgcacggaacagatattaggctgcgaaataccctcatatgc\n+tacagcgcaggtaacagacggttgatctccccgtagaattccctcaaggccggatcgttc\n+tcatgagtagcctttgtctgacatttcctctcaatagattgcagactcctgtgtcgtggg\n+aaaacttcgcggaatcgctgtcgttacataaatctaaacagtgcagtccaagctatttac\n+taccacgtatcataatgaacatctctttgtgaaatacgccggtacgccgagagatcgccc\n+acattgcgtgtcaccaagacccagtgtctattgggcgcgctggttatagtatgcggaggc\n+acccgatgtgctgctaatcactacaaactcgacaccaagaggcgaccgcgtgcgggaggg\n+ctagaacgcgagagccacgtcaacgtggtggtaccgctcctgatgatacgagcactgtgc\n+tggcaccgctgccctatgtccagctaacaggtgtcacataatatcgcatctatagttgag\n+tatcttatcgctagcgttacttgtgagttctcgggtagaatcgtcgtagcattctagtcc\n+ttagcgtaagcaacgatatcgccgatattataggggcaataggtctcacccaccacgggt\n+gtatatttaacgccctaagtagttaacggagactattaaacaattatgcacgtgaaagat\n+tagggtactgcacacgtgtcacgttgacgatgtaaacaccataaaggttgttctgtgatg\n+cgatgcccatacctgcggtgcaacgtcctaaacttatgcggatcaccttctaattcagcc\n+gacgttgagaacgccagctatactctgtgagtacaaggtgaaagccccagatcaaaatat\n+tggagtcttgtccgtagctcttgggtggagagtgtgaccacgtttatcccttaatactga\n+gactcttctcgttccacgccccggacattcgcgatacagcctagtttgataggtggctac\n+aagggctctatccgaatagcacaaaactcagtcctagtgcgtataggtcgtgctctgcgg\n+ttatacgctccacagaagaaagtacccactgcagtttgtcggtgggacttagcaaaacct\n+gtaaccaaaaccgcacatggactctgttttggtggcgtggagtgtgcccgccgcctttat\n+gctgggtcaaaatactatatgatttgttgtggtcgggcgcgacattggctcttatggttt\n+ataactattattcggtgcacagaaccgacttatgccccgattttgcacctcccgagagaa\n+atggtactagtcattgtctcggggttttacaactcaaggataatctgccagcggtacccc\n+gaaaaatcccatcccgaacggctggtacctatgctggagaccgaaatggagccagtgcta\n+tgcaaaccctcgctctttctatttggcccgaccagctgcgagagtcattcgacatacatt\n+gcgatggctggttcatctctctgcttcggattccgatcctgctgcctatggccacaacac\n+gaaagagatcttggatacgtcctcaccatagtccaacggacaaatatggaggtgtacgcg\n+cacggatacgagtacgacgggccgcccaatgctggtccttcgtgttatactgtttacttg\n+cctccggtaagagtgtacagcttgtacccacgcggtggaggaccttacgcgtcgtccgca\n+ggtgtggagatttcgctacctgttgcattggggcctcgccttacgtttttttcgacggag\n+gcccgacccgccaggccagaccctcatcattgggatttttactgccttggacggcagatt\n+ctgat'..b'CTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGAT\n+ACATGCTAGCTACGTGCATGCTCGACATGCATCATCAGCCTGATGCTGATACATGCTAGCTACGTGCATGCTCGACATG\n'
b
diff -r 000000000000 -r ef5f8bbf7730 test-data/1/links.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/1/links.txt Wed Aug 09 09:52:52 2017 -0400
b
@@ -0,0 +1,21 @@
+ctgA 0 500 ctgA 1000 1500
+ctgA 2500 3000 ctgA 3500 4000
+ctgA 5000 5500 ctgA 6000 6500
+ctgA 7500 8000 ctgA 8500 9000
+ctgA 10000 10500 ctgA 11000 11500
+ctgA 12500 13000 ctgA 13500 14000
+ctgA 15000 15500 ctgA 16000 16500
+ctgA 17500 18000 ctgA 18500 19000
+ctgA 20000 20500 ctgA 21000 21500
+ctgA 22500 23000 ctgA 23500 24000
+ctgA 25000 25500 ctgA 26000 26500
+ctgA 27500 28000 ctgA 28500 29000
+ctgA 30000 30500 ctgA 31000 31500
+ctgA 32500 33000 ctgA 33500 34000
+ctgA 35000 35500 ctgA 36000 36500
+ctgA 37500 38000 ctgA 38500 39000
+ctgA 40000 40500 ctgA 41000 41500
+ctgA 42500 43000 ctgA 43500 44000
+ctgA 45000 45500 ctgA 46000 46500
+ctgA 47500 48000 ctgA 48500 49000
+ctgA 50000 50500 ctgA 51000 51500
b
diff -r 000000000000 -r ef5f8bbf7730 test-data/1/links2.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/1/links2.txt Wed Aug 09 09:52:52 2017 -0400
b
@@ -0,0 +1,21 @@
+ctgB 2000 2000 ctgA 500 1000
+ctgB 2000 2000 ctgA 3000 3500
+ctgB 2000 2000 ctgA 5500 6000
+ctgB 2000 2000 ctgA 8000 8500
+ctgB 2000 2000 ctgA 10500 11000
+ctgB 2000 2000 ctgA 13000 13500
+ctgB 2000 2000 ctgA 15500 16000
+ctgB 2000 2000 ctgA 18000 18500
+ctgB 2000 2000 ctgA 20500 21000
+ctgB 2000 2000 ctgA 23000 23500
+ctgB 2000 2000 ctgA 25500 26000
+ctgB 2000 2000 ctgA 28000 28500
+ctgB 2000 2000 ctgA 30500 31000
+ctgB 2000 2000 ctgA 33000 33500
+ctgB 2000 2000 ctgA 35500 36000
+ctgB 2000 2000 ctgA 38000 38500
+ctgB 2000 2000 ctgA 40500 41000
+ctgB 2000 2000 ctgA 43000 43500
+ctgB 2000 2000 ctgA 45500 46000
+ctgB 2000 2000 ctgA 48000 48500
+ctgB 2000 2000 ctgA 50500 51000
b
diff -r 000000000000 -r ef5f8bbf7730 test-data/1/output.png
b
Binary file test-data/1/output.png has changed
b
diff -r 000000000000 -r ef5f8bbf7730 test-data/1/output.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/1/output.svg Wed Aug 09 09:52:52 2017 -0400
b
b'@@ -0,0 +1,2784 @@\n+<?xml version="1.0" encoding="utf-8" standalone="no"?>\n+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n+<svg width="3000px" height="3000px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n+<g id="bg">\n+<rect x="0" y="0" width="3000px" height="3000px" style="fill:rgb(255,255,255);"/>\n+</g>\n+<g id="ideograms">\n+<path d="M1500.000,160.000 A1340.000,1340.000 40.000 1,1 599.868,507.346 L593.151,499.938 A1350.000,1350.000 0.000 1,0 1500.000,150.000 Z" style="stroke-linecap:round;fill:rgb(141,211,199);" />\n+<text x="2011.0" y="2857.5" font-size="31.2px" font-family="CMUBright-Roman" style="text-anchor:start;fill:rgb(0,0,0);" transform="rotate(68.9,2011.0,2857.5)" >0</text>\n+<line x1=\'1500.0\' y1=\'150.0\' x2=\'1500.0\' y2=\'130.0\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="1509.5" y="120.0" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:start;fill:rgb(23,54,93);" transform="rotate(270.0,1509.5,120.0)" >0 kb</text>\n+<line x1=\'2211.0\' y1=\'352.4\' x2=\'2221.5\' y2=\'335.4\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="2234.8" y="331.9" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:start;fill:rgb(23,54,93);" transform="rotate(301.8,2234.8,331.9)" >5 kb</text>\n+<line x1=\'2708.8\' y1=\'898.9\' x2=\'2726.7\' y2=\'890.0\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="2739.8" y="894.0" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:start;fill:rgb(23,54,93);" transform="rotate(333.6,2739.8,894.0)" >10 kb</text>\n+<line x1=\'2844.1\' y1=\'1625.6\' x2=\'2864.1\' y2=\'1627.4\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="2873.1" y="1637.8" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:start;fill:rgb(23,54,93);" transform="rotate(5.3,2873.1,1637.8)" >15 kb</text>\n+<line x1=\'2576.5\' y1=\'2314.6\' x2=\'2592.4\' y2=\'2326.7\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="2594.7" y="2340.3" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:start;fill:rgb(23,54,93);" transform="rotate(37.1,2594.7,2340.3)" >20 kb</text>\n+<line x1=\'1986.1\' y1=\'2759.5\' x2=\'1993.3\' y2=\'2778.1\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="1988.0" y="2790.8" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:start;fill:rgb(23,54,93);" transform="rotate(68.9,1988.0,2790.8)" >25 kb</text>\n+<line x1=\'1249.9\' y1=\'2826.6\' x2=\'1246.2\' y2=\'2846.3\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="1253.7" y="2857.8" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:end;fill:rgb(23,54,93);" transform="rotate(-79.3,1253.7,2857.8)" >30 kb</text>\n+<line x1=\'588.7\' y1=\'2496.0\' x2=\'575.2\' y2=\'2510.8\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="575.5" y="2524.6" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:end;fill:rgb(23,54,93);" transform="rotate(-47.5,575.5,2524.6)" >35 kb</text>\n+<line x1=\'200.8\' y1=\'1866.8\' x2=\'181.5\' y2=\'1872.2\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="174.5" y="1884.1" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:end;fill:rgb(23,54,93);" transform="rotate(-15.8,174.5,1884.1)" >40 kb</text>\n+<line x1=\'202.4\' y1=\'1127.6\' x2=\'183.2\' y2=\'1122.1\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-linecap:round;fill:none;" />\n+<text x="171.0" y="1128.5" font-size="26.0px" font-family="CMUBright-Roman" style="text-anchor:end;fill:rgb(23,54,93);" transform="rotate(16.0,171.0,1128.5)" >45 kb</text>\n+<line x1=\'593.0\' y1=\'500.0\' x2=\'579.6\' y2=\'485.2\' style="stroke-width:2.0;stroke:rgb(23,54,93);stroke-lin'..b':rgb(85,85,85);" />\n+<polygon points="766,1158 774,1157 770,1165" style="fill:rgb(85,85,85);" />\n+<polygon points="755,1143 763,1142 759,1149" style="fill:rgb(85,85,85);" />\n+<polygon points="734,1122 742,1122 738,1129" style="fill:rgb(85,85,85);" />\n+<polygon points="710,1099 718,1099 714,1106" style="fill:rgb(85,85,85);" />\n+<polygon points="691,1078 699,1078 695,1085" style="fill:rgb(85,85,85);" />\n+<polygon points="683,1063 691,1062 687,1069" style="fill:rgb(85,85,85);" />\n+<polygon points="689,1055 697,1054 694,1061" style="fill:rgb(85,85,85);" />\n+<polygon points="710,1054 718,1054 714,1061" style="fill:rgb(85,85,85);" />\n+<polygon points="740,1060 748,1060 744,1067" style="fill:rgb(85,85,85);" />\n+<polygon points="772,1068 780,1068 776,1075" style="fill:rgb(85,85,85);" />\n+<polygon points="799,1073 807,1073 802,1080" style="fill:rgb(85,85,85);" />\n+<polygon points="814,1072 822,1072 818,1079" style="fill:rgb(85,85,85);" />\n+<polygon points="816,1063 824,1063 820,1070" style="fill:rgb(85,85,85);" />\n+<polygon points="805,1045 813,1045 809,1052" style="fill:rgb(85,85,85);" />\n+<polygon points="786,1021 794,1021 790,1028" style="fill:rgb(85,85,85);" />\n+<polygon points="766,995 774,996 769,1002" style="fill:rgb(85,85,85);" />\n+<polygon points="751,973 759,973 754,980" style="fill:rgb(85,85,85);" />\n+<polygon points="747,958 755,958 751,965" style="fill:rgb(85,85,85);" />\n+<polygon points="757,952 765,953 760,959" style="fill:rgb(85,85,85);" />\n+<polygon points="779,956 787,957 782,963" style="fill:rgb(85,85,85);" />\n+<polygon points="809,966 817,967 812,973" style="fill:rgb(85,85,85);" />\n+<polygon points="839,978 847,979 842,985" style="fill:rgb(85,85,85);" />\n+<polygon points="864,986 872,987 867,993" style="fill:rgb(85,85,85);" />\n+<polygon points="878,985 886,987 880,993" style="fill:rgb(85,85,85);" />\n+<polygon points="879,974 887,976 881,982" style="fill:rgb(85,85,85);" />\n+<polygon points="869,954 877,955 871,961" style="fill:rgb(85,85,85);" />\n+<polygon points="852,927 860,929 855,935" style="fill:rgb(85,85,85);" />\n+<polygon points="836,899 844,901 838,907" style="fill:rgb(85,85,85);" />\n+<polygon points="825,876 833,878 828,884" style="fill:rgb(85,85,85);" />\n+<polygon points="826,862 834,864 828,870" style="fill:rgb(85,85,85);" />\n+<polygon points="838,860 846,862 840,868" style="fill:rgb(85,85,85);" />\n+<polygon points="861,868 869,870 863,876" style="fill:rgb(85,85,85);" />\n+<polygon points="890,883 897,885 892,891" style="fill:rgb(85,85,85);" />\n+<polygon points="918,898 925,900 920,906" style="fill:rgb(85,85,85);" />\n+<polygon points="940,908 947,910 942,916" style="fill:rgb(85,85,85);" />\n+</g>\n+<defs>\n+<pattern id="hline" width="10" height="10" patternTransform="rotate(0 0 0)" patternUnits="userSpaceOnUse"><line x1="0" y1="0" x2="10" y2="0" style="stroke:black;stroke-width:5" /></pattern>\n+<pattern id="checker" width="10" height="10" patternTransform="rotate(45 0 0)" patternUnits="userSpaceOnUse"><line x1="0" y1="0" x2="10" y2="0" style="stroke:black;stroke-width:5" /><line x1="0" y1="0" x2="0" y2="10" style="stroke:black;stroke-width:4" /></pattern>\n+<pattern id="hline-sparse" width="10" height="10" patternTransform="rotate(0 0 0)" patternUnits="userSpaceOnUse"><line x1="0" y1="0" x2="10" y2="0" style="stroke:black;stroke-width:2" /></pattern>\n+<pattern id="checker" width="10" height="10" patternTransform="rotate(45 0 0)" patternUnits="userSpaceOnUse"><line x1="0" y1="0" x2="10" y2="0" style="stroke:black;stroke-width:2" /><line x1="0" y1="0" x2="0" y2="10" style="stroke:black;stroke-width:2" /></pattern>\n+<pattern id="vline-sparse" width="10" height="10" patternTransform="rotate(0 0 0)" patternUnits="userSpaceOnUse"><line x1="0" y1="0" x2="0" y2="10" style="stroke:black;stroke-width:2" /></pattern>\n+<pattern id="vline" width="10" height="10" patternTransform="rotate(0 0 0)" patternUnits="userSpaceOnUse"><line x1="0" y1="0" x2="0" y2="10" style="stroke:black;stroke-width:5" /></pattern>\n+</defs>\n+</svg>\n'
b
diff -r 000000000000 -r ef5f8bbf7730 tool-data/all_fasta.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool-data/all_fasta.loc.sample Wed Aug 09 09:52:52 2017 -0400
b
@@ -0,0 +1,18 @@
+#This file lists the locations and dbkeys of all the fasta files
+#under the "genome" directory (a directory that contains a directory
+#for each build). The script extract_fasta.py will generate the file
+#all_fasta.loc. This file has the format (white space characters are
+#TAB characters):
+#
+#<unique_build_id> <dbkey> <display_name> <file_path>
+#
+#So, all_fasta.loc could look something like this:
+#
+#apiMel3 apiMel3 Honeybee (Apis mellifera): apiMel3 /path/to/genome/apiMel3/apiMel3.fa
+#hg19canon hg19 Human (Homo sapiens): hg19 Canonical /path/to/genome/hg19/hg19canon.fa
+#hg19full hg19 Human (Homo sapiens): hg19 Full /path/to/genome/hg19/hg19full.fa
+#
+#Your all_fasta.loc file should contain an entry for each individual
+#fasta file. So there will be multiple fasta files for each build,
+#such as with hg19 above.
+#
b
diff -r 000000000000 -r ef5f8bbf7730 tool_data_table_conf.xml.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tool_data_table_conf.xml.sample Wed Aug 09 09:52:52 2017 -0400
b
@@ -0,0 +1,9 @@
+<!-- Use the file tool_data_table_conf.xml.oldlocstyle if you don't want to update your loc files as changed in revision 4550:535d276c92bc-->
+<tables>
+    <!-- Locations of all fasta files under genome directory -->
+    <table name="all_fasta" comment_char="#">
+        <columns>value, dbkey, name, path</columns>
+        <file path="tool-data/all_fasta.loc" />
+    </table>
+</tables>
+
b
diff -r 000000000000 -r ef5f8bbf7730 unified-histogram.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/unified-histogram.py Wed Aug 09 09:52:52 2017 -0400
[
@@ -0,0 +1,155 @@
+#!/usr/bin/env python
+import logging
+import sys
+
+import wiggle
+from BCBio import GFF
+
+logging.basicConfig(level=logging.INFO)
+log = logging.getLogger()
+
+
+MODE = sys.argv[1]
+
+# Pair up (file, extension) pairs from sys.argv
+files = zip(sys.argv[2:][0::2], sys.argv[2:][1::2])
+
+# Our output data structure. This could be much more efficient.
+data = {}
+
+
+def bed(idx, path):
+    # chrom - The name of the chromosome (e.g. chr3, chrY, chr2_random) or scaffold (e.g. scaffold10671).
+    # chromStart - The starting position of the feature in the chromosome or scaffold. The first base in a chromosome is numbered 0.
+    # chromEnd - The ending position of the feature in the chromosome or scaffold. The chromEnd base is not included in the display of the feature. For example, the first 100 bases of a chromosome are defined as chromStart=0, chromEnd=100, and span the bases numbered 0-99.
+    # name - Defines the name of the BED line. This label is displayed to the left of the BED line in the Genome Browser window when the track is open to full display mode or directly to the left of the item in pack mode.
+    # score - A score between 0 and 1000. If the track line useScore attribute is set to 1 for this annotation data set, the score value will determine the level of gray in which this feature is displayed (higher numbers = darker gray). This table shows the Genome Browser's translation of BED score values into shades of gray:
+    # strand - Defines the strand - either '+' or '-'.
+    # thickStart - The starting position at which the feature is drawn thickly (for example, the start codon in gene displays). When there is no thick part, thickStart and thickEnd are usually set to the chromStart position.
+    # thickEnd - The ending position at which the feature is drawn thickly (for example, the stop codon in gene displays).
+    # itemRgb - An RGB value of the form R,G,B (e.g. 255,0,0). If the track line itemRgb attribute is set to "On", this RBG value will determine the display color of the data contained in this BED line. NOTE: It is recommended that a simple color scheme (eight colors or less) be used with this attribute to avoid overwhelming the color resources of the Genome Browser and your Internet browser.
+
+    with open(path, 'r') as handle:
+        for line in handle:
+            lineData = line.strip().split()
+            chrom = lineData[0]
+            chromStart = lineData[1]
+            chromEnd = lineData[2]
+
+            if chrom not in data:
+                data[chrom] = {}
+
+            for i in range(chromStart, chromEnd):
+                if i not in data[chrom]:
+                    data[chrom][i] = {}
+
+                data[chrom][i][idx] = lineData[5]
+
+
+# Handlers
+def gff3(idx, path):
+    for record in GFF.parse(path):
+        if len(record.features) == 0:
+            continue
+
+        if record.id not in data:
+            data[record.id] = {}
+
+        for feature in record.features:
+            if 'score' in feature.qualifiers:
+                for i in range(feature.location.start, feature.location.end):
+                    if i not in data[record.id]:
+                        data[record.id][i] = {}
+
+                    data[record.id][i][idx] = feature.qualifiers['score'][0]
+
+
+def wig(idx, path):
+    walker = wiggle.Wiggle()
+    with open(path, 'r') as handle:
+        for region, position, value in walker.walk(handle):
+            if region not in data:
+                data[region] = {}
+
+            if position not in data[region]:
+                data[region][position] = {}
+
+            data[region][position][idx] = value
+
+
+if __name__ == '__main__':
+    mode_tiles_possible = True
+
+    for idx, (file_path, file_type) in enumerate(files):
+        log.info("Processing %s.%s", file_path, file_type)
+
+        if file_type in globals():
+            func = globals()[file_type]
+            func(idx, file_path)
+
+        if file_type == 'wig':
+            mode_tiles_possible = False
+
+    if MODE == 'tile' and not mode_tiles_possible:
+        raise Exception("You requested a 'tile' plot with wig data, which is impossible")
+
+    # Max number of files
+    max_idx = range(len(files))
+
+    serialized_values = None
+    region_start, region_end = (None, None)
+
+    for genome in data:
+        for position in sorted(data[genome]):
+            values = [
+                '' if x not in data[genome][position] else data[genome][position][x]
+                for x in max_idx
+            ]
+            if serialized_values is None:
+                serialized_values = values
+            if region_start is None:
+                region_start = position
+                region_end = position
+
+            if values == serialized_values:
+                region_end = position
+            else:
+                if MODE == 'histogram':
+                    # histogram
+                    # hs4 0 1999999 5.0000,3.0000,1.0000,19.0000
+                    sys.stdout.write(' '.join(
+                        (genome, str(region_start), str(region_end), ','.join(map(str, values)))
+                    ) + '\n')
+                elif MODE == 'heatmap':
+                    # heatmap
+                    # hs1 2000000 3999999 0.0000 id=hs4
+                    # hs1 4000000 5999999 2.0000 id=hs1
+                    # hs1 4000000 5999999 0.0000 id=hs2
+                    # hs1 4000000 5999999 0.0000 id=hs3
+                    # hs1 4000000 5999999 0.0000 id=hs4
+                    # hs1 6000000 7999999 4.0000 id=hs2
+                    for x in max_idx:
+                        if x in data[genome][position]:
+                            sys.stdout.write(' '.join(
+                                (genome, str(region_start), str(region_end), data[genome][position][x], 'id=hm%s' % x)
+                            ) + '\n')
+                        else:
+                            sys.stdout.write(' '.join(
+                                (genome, str(region_start), str(region_end), 0.0, 'id=hm%s' % x)
+                            ) + '\n')
+                elif MODE == 'line':
+                    # multiple=False
+                    sys.stdout.write(' '.join(
+                        (genome, str(region_start), str(region_end), data[genome][position][0])
+                    ) + '\n')
+                elif MODE == 'scatter':
+                    # multiple=False
+                    sys.stdout.write(' '.join(
+                        (genome, str(region_start), str(region_end), data[genome][position][0])
+                    ) + '\n')
+
+                # Update start of next array
+                region_start = position
+                region_end = position
+                # And update with new array
+                serialized_values = values
b
diff -r 000000000000 -r ef5f8bbf7730 unified-tiles.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/unified-tiles.py Wed Aug 09 09:52:52 2017 -0400
[
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+import logging
+import sys
+
+from BCBio import GFF
+
+logging.basicConfig(level=logging.INFO)
+log = logging.getLogger()
+
+
+# Pair up (file, extension) pairs from sys.argv
+files = zip(sys.argv[1:][0::2], sys.argv[1:][1::2])
+
+
+# Handlers
+def bed(idx, path):
+    # chrom - The name of the chromosome (e.g. chr3, chrY, chr2_random) or scaffold (e.g. scaffold10671).
+    # chromStart - The starting position of the feature in the chromosome or scaffold. The first base in a chromosome is numbered 0.
+    # chromEnd - The ending position of the feature in the chromosome or scaffold. The chromEnd base is not included in the display of the feature. For example, the first 100 bases of a chromosome are defined as chromStart=0, chromEnd=100, and span the bases numbered 0-99.
+    # name - Defines the name of the BED line. This label is displayed to the left of the BED line in the Genome Browser window when the track is open to full display mode or directly to the left of the item in pack mode.
+    # score - A score between 0 and 1000. If the track line useScore attribute is set to 1 for this annotation data set, the score value will determine the level of gray in which this feature is displayed (higher numbers = darker gray). This table shows the Genome Browser's translation of BED score values into shades of gray:
+    # strand - Defines the strand - either '+' or '-'.
+    # thickStart - The starting position at which the feature is drawn thickly (for example, the start codon in gene displays). When there is no thick part, thickStart and thickEnd are usually set to the chromStart position.
+    # thickEnd - The ending position at which the feature is drawn thickly (for example, the stop codon in gene displays).
+    # itemRgb - An RGB value of the form R,G,B (e.g. 255,0,0). If the track line itemRgb attribute is set to "On", this RBG value will determine the display color of the data contained in this BED line. NOTE: It is recommended that a simple color scheme (eight colors or less) be used with this attribute to avoid overwhelming the color resources of the Genome Browser and your Internet browser.
+
+    with open(path, 'r') as handle:
+        for line in handle:
+            lineData = line.strip().split()
+            chrom = lineData[0]
+            chromStart = lineData[1]
+            chromEnd = lineData[2]
+
+            yield (chrom, chromStart, chromEnd, lineData[4], lineData[6], lineData[5], lineData[9])
+
+
+def gff3(idx, path):
+    for record in GFF.parse(path):
+        if len(record.features) == 0:
+            continue
+
+        for feature in sorted(record.features, key=lambda x: x.location.start):
+            yield (
+                record.id,
+                feature.location.start,
+                feature.location.end,
+                feature.id or feature.qualifiers.get('Name', [None])[0],
+                feature.location.strand,
+                feature.qualifiers.get('score', [0.0])[0],
+                feature.qualifiers.get('color', [None])[0]
+            )
+
+
+if __name__ == '__main__':
+    for idx, (file_path, file_type) in enumerate(files):
+        log.info("Processing %s.%s", file_path, file_type)
+
+        if file_type in globals():
+            func = globals()[file_type]
+            for item in func(idx, file_path):
+                # multiple=False
+                # hs1 10292899 10301003 id=Conrad_993
+                # hs1 10297766 10301003 id=Conrad_994
+                lineExtra = [
+                    'strand=%s' % item[4],
+                    'score=%s' % item[5],
+                    'value=%s' % item[5],
+                ]
+                if item[3] is not None:
+                    lineExtra.append('id=%s' % item[3])
+                if item[6] is not None:
+                    lineExtra.append('color=%s' % item[6])
+
+                sys.stdout.write(' '.join((str(item[0]), str(item[1]), str(item[2]), ','.join(lineExtra))) + '\n')
b
diff -r 000000000000 -r ef5f8bbf7730 wiggle.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wiggle.py Wed Aug 09 09:52:52 2017 -0400
[
@@ -0,0 +1,55 @@
+class Wiggle:
+
+    def fixedStepParser(self, line):
+        value = line.strip()
+        start_position = self.stepIdx * self.parserConfig['step'] + self.parserConfig['start']
+        stop_position = start_position + self.parserConfig['span'] - 1
+        self.stepIdx += 1
+
+        for position in range(start_position, stop_position):
+            yield (self.parserConfig['chrom'], position, value)
+
+    def variableStepParser(self, line):
+        (start, value) = line.strip().split()
+        start = int(start)
+        start_position = start
+        stop_position = start + self.parserConfig['span']
+
+        for position in range(start_position, stop_position):
+            yield (self.parserConfig['chrom'], position, value)
+
+    def walk(self, handle):
+
+        parser = None
+        for line in handle:
+            if line.startswith('track'):
+                continue
+            elif line.startswith('fixedStep'):
+                parser = self.fixedStepParser
+                lineData = line.split()
+                fields = {x.split('=')[0]: x.split('=')[1] for x in lineData[1:]}
+                self.parserConfig = fields
+
+                for numField in ('step', 'start', 'span'):
+                    if numField in self.parserConfig:
+                        self.parserConfig[numField] = int(self.parserConfig[numField])
+                self.stepIdx = 0
+            elif line.startswith('variableStep'):
+                parser = self.variableStepParser
+                lineData = line.split()
+                fields = {x.split('=')[0]: x.split('=')[1] for x in lineData[1:]}
+                # Default value
+                if 'span' not in fields:
+                    fields['span'] = 1
+                self.parserConfig = fields
+
+                for numField in ('span',):
+                    if numField in self.parserConfig:
+                        self.parserConfig[numField] = int(self.parserConfig[numField])
+
+                self.stepIdx = 0
+            elif len(line.strip()) == 0:
+                continue
+            else:
+                for data in parser(line):
+                    yield data