diff jbrowse.xml @ 3:7342f467507b draft

Uploaded v0.4 of JBrowse
author iuc
date Thu, 31 Dec 2015 13:58:43 -0500
parents 497c6bb3b717
children ae9382cfb6ac
line wrap: on
line diff
--- a/jbrowse.xml	Tue Jun 23 12:10:15 2015 -0400
+++ b/jbrowse.xml	Thu Dec 31 13:58:43 2015 -0500
@@ -1,4 +1,4 @@
-<tool id="jbrowse" name="JBrowse" version="0.3">
+<tool id="jbrowse" name="JBrowse" version="0.4">
   <description>genome browser</description>
   <macros>
     <import>macros.xml</import>
@@ -6,106 +6,317 @@
   <expand macro="requirements"/>
   <expand macro="stdio"/>
   <version_command>python jbrowse.py --version</version_command>
-  <command interpreter="python"><![CDATA[jbrowse.py
-$positional_1
-$trackYaml
+  <command><![CDATA[
+mkdir -p $output.files_path &&
+## Copy the XML file into the directory, mostly for debugging
+## but nice if users want to reproduce locally
+cp $trackxml $output.files_path/galaxy.xml &&
+
+## Once that's done, we run the python script to handle the real work
+python $__tool_directory__/jbrowse.py
+$trackxml
 
 --jbrowse \${JBROWSE_SOURCE_DIR}
---outdir $default.files_path
-> $default]]></command>
+#if str($standalone) == "Complete":
+    --standalone
+#end if
+--outdir $output.files_path;
+
+#if str($standalone) == "Complete":
+    mv $output.files_path/index.html $output;
+#else:
+    mv $dummyIndex $output;
+#end if
+
+
+## Ugly testing hack since I cannot get <extra_files> to test the files I want to test. Hmph.
+#if str($uglyTestingHack) == "enabled":
+    mv $trackxml $output
+#end if
+]]></command>
   <configfiles>
-      <configfile name="trackYaml">
----
-#for $track in $data_tracks:
-  -
-    file: ${track.data_format.annotation}
-    ext: ${track.data_format.annotation.ext}
-    label: "${track.annotation_label}"
-    category: "${track.category}"
-    options:
-        __unused__: "Not used...just to ensure options has at least one key"
-    #if str($track.data_format.data_format_select) == "wiggle":
-        type: ${track.data_format.xyplot}
-        variance_band: ${track.data_format.var_band}
-      #if str($track.data_format.scaling.scale_select) == "auto_local":
-        autoscale: local
-      #else if str($track.data_format.scaling.scale_select) == "auto_global":
-        autoscale: global
-      #else:
-        min: ${track.data_format.scaling.minimum}
-        max: ${track.data_format.scaling.maximum}
-      #end if
-    #else if str($track.data_format.data_format_select) == "pileup":
-        auto_snp: ${track.data_format.auto_snp}
-        bam_index: ${track.data_format.annotation.metadata.bam_index}
-    #else if str($track.data_format.data_format_select) == "blast":
-        parent: ${track.data_format.blast_parent}
-        protein: ${track.data_format.is_protein}
-        min_gap: ${track.data_format.min_gap}
-        match: true
-    #else if str($track.data_format.data_format_select) == "gene_calls":
-        match: ${track.data_format.match_part}
-    #end if
-#end for
+      <configfile name="dummyIndex">
+      <![CDATA[
+      <html>
+          <head>
+          </head>
+          <body>
+              <h1>JBrowse Data Directory</h1>
+              <p>
+                Hi! This is not a full JBrowse instance. JBrowse v0.4(+?)
+                started shipping with the ability to produce just the
+                "data" directory from a JBrowse instance, rather than a
+                complete, standalone instance. This was intended to be used
+                with the in-development Apollo integration, but may have other
+                uses as well.
+              </p>
+              <p>
+                <u>This is not usable on its own</u>. The output dataset may be
+                used with Apollo, or may be passed through the "JBrowse -
+                Convert to Standalone" tool in Galaxy to "upgrade" to a full
+                JBrowse instance.
+              </p>
+          </body>
+      </html>
+          ]]>
+      </configfile>
+      <configfile name="trackxml"><![CDATA[<?xml version="1.0"?>
+<root>
+    <metadata>
+        <gencode>$gencode</gencode>
+        <genomes>
+            #for $genome in $genomes:
+                <genome>$genome</genome>
+            #end for
+        </genomes>
+    </metadata>
+    <tracks>
+        #for $tg in $track_groups:
+        #for $track in $tg.data_tracks:
+        <track cat="${tg.category}" format="${track.data_format.data_format_select}">
+            <files>
+              #for $dataset in $track.data_format.annotation:
+              <trackFile path="${dataset}" ext="${dataset.ext}" label="${dataset.element_identifier}" />
+              #end for
+            </files>
+
+            <options>
+            #if str($track.data_format.data_format_select) == "gene_calls" or  str($track.data_format.data_format_select) == "blast":
+                <style>
+                    <className>${track.data_format.jbstyle.style_classname}</className>
+                    <description>${track.data_format.jbstyle.style_description}</description>
+                    <label>${track.data_format.jbstyle.style_label}</label>
+                    <height>${track.data_format.jbstyle.style_height}</height>
+                </style>
+                <scaling>
+                  #if str($track.data_format.jbcolor_scale.color_score.color_score_select) == "none":
+                        <method>ignore</method>
+                        <scheme>
+                          #if str($track.data_format.jbcolor_scale.color_score.color.color_select) == "automatic":
+                            <color>__auto__</color>
+                          #else
+                            <color>${track.data_format.jbcolor_scale.color_score.color.style_color}</color>
+                          #end if
+                        </scheme>
+                  #else
+                        <method>score</method>
+                        <algo>${track.data_format.jbcolor_scale.color_score.score_scaling}</algo>
+                        <scales>
+                            <type>${track.data_format.jbcolor_scale.color_score.score_scales.scale_select}</type>
+
+                          #if str($track.data_format.jbcolor_scale.color_score.score_scales.scale_select) == "manual":
+                            <min>${track.data_format.jbcolor_scale.color_score.score_scales.minimum}</min>
+                            <max>${track.data_format.jbcolor_scale.color_score.score_scales.maximum}</max>
+                          #end if
+                        </scales>
+                        <scheme>
+                            <type>${track.data_format.jbcolor_scale.color_score.color_scheme.score_scheme}</type>
+                        ## auto_color
+                        #if str($track.data_format.jbcolor_scale.color_score.color_scheme.score_scheme) == "opacity":
+                          #if str($track.data_format.jbcolor_scale.color_score.color_scheme.color.color_select) == "automatic":
+                            <color>__auto__</color>
+                          #else
+                            <color>${track.data_format.jbcolor_scale.color_score.color_scheme.color.style_color}</color>
+                          #end if
+                        #end if
+                        </scheme>
+                  #end if
+                </scaling>
+            #end if
+
+            #if str($track.data_format.data_format_select) == "wiggle":
+                <wiggle>
+                    <type>${track.data_format.xyplot}</type>
+                    <variance_band>${track.data_format.var_band}</variance_band>
+                  #if str($track.data_format.scaling.scale_select) == "auto_local":
+                    <autoscale>local</autoscale>
+                  #else if str($track.data_format.scaling.scale_select) == "auto_global":
+                    <autoscale>global</autoscale>
+                  #else:
+                    <min>${track.data_format.scaling.minimum}</min>
+                    <max>${track.data_format.scaling.maximum}</max>
+                  #end if
+
+                  ## Wiggle tracks need special color config
+                  #if str($track.data_format.jbcolor.color.color_select) != "automatic":
+                    <color_pos>${track.data_format.jbcolor.color.style_pos_color}</color_pos>
+                    <color_neg>${track.data_format.jbcolor.color.style_neg_color}</color_neg>
+                  #else:
+                    <color_pos>__auto__</color_pos>
+                    <color_neg>__auto__</color_neg>
+                  #end if
+
+                  ## Bicolor pivot config
+                  #if str($track.data_format.jbcolor.bicolor_pivot.bicolor_pivot_select) == "zero":
+                    <bicolor_pivot>zero</bicolor_pivot>
+                  #else if str($track.data_format.jbcolor.bicolor_pivot.bicolor_pivot_select) == "mean":
+                    <bicolor_pivot>mean</bicolor_pivot>
+                  #else:
+                    <bicolor_pivot>${track.data_format.jbcolor.bicolor_pivot.pivot_point}</bicolor_pivot>
+                  #end if
+                </wiggle>
+            #else if str($track.data_format.data_format_select) == "pileup":
+                <pileup>
+                    <auto_snp>${track.data_format.auto_snp}</auto_snp>
+                    <bam_indices>
+                        #for $dataset in $track.data_format.annotation:
+                        <bam_index>${dataset.metadata.bam_index}</bam_index>
+                        #end for
+                    </bam_indices>
+                </pileup>
+            #else if str($track.data_format.data_format_select) == "blast":
+                <blast>
+                  #if str($track.data_format.blast_parent) != "":
+                    <parent>${track.data_format.blast_parent}</parent>
+                  #end if
+                    <protein>${track.data_format.is_protein}</protein>
+                    <min_gap>${track.data_format.min_gap}</min_gap>
+                </blast>
+            #else if str($track.data_format.data_format_select) == "gene_calls":
+                <gff>
+                  #if $track.data_format.match_part.match_part_select:
+                    <match>${track.data_format.match_part.name}</match>
+                  #end if
+                </gff>
+            #end if
+            </options>
+        </track>
+        #end for
+        #end for
+    </tracks>
+</root>
+]]>
       </configfile>
   </configfiles>
   <inputs>
-    <param label="Genome" name="positional_1" type="data" format="fasta"/>
+    <param label="Fasta Sequence(s)"
+           name="genomes"
+           type="data"
+           format="fasta"
+           multiple="True"/>
+    <param name="standalone" label="Produce Standalone Instance" type="boolean" truevalue="Complete" falsevalue="Data Directory" help="Produce a full, working JBrowse instance or just the data directory. Data dir mode is experimental and intended to be used with Apollo" checked="True"/>
+
+    <param label="Genetic Code" name="gencode" type="select">
+      <option value="1">1. The Standard Code</option>
+      <option value="2">2. The Vertebrate Mitochondrial Code</option>
+      <option value="3">3. The Yeast Mitochondrial Code</option>
+      <option value="4">4. The Mold, Protozoan, and Coelenterate Mitochondrial Code and the Mycoplasma/Spiroplasma Code</option>
+      <option value="5">5. The Invertebrate Mitochondrial Code</option>
+      <option value="6">6. The Ciliate, Dasycladacean and Hexamita Nuclear Code</option>
+      <option value="9">9. The Echinoderm and Flatworm Mitochondrial Code</option>
+      <option value="10">10. The Euplotid Nuclear Code</option>
+      <option value="11">11. The Bacterial, Archaeal and Plant Plastid Code</option>
+      <option value="12">12. The Alternative Yeast Nuclear Code</option>
+      <option value="13">13. The Ascidian Mitochondrial Code</option>
+      <option value="14">14. The Alternative Flatworm Mitochondrial Code</option>
+      <option value="16">16. Chlorophycean Mitochondrial Code</option>
+      <option value="21">21. Trematode Mitochondrial Code</option>
+      <option value="22">22. Scenedesmus obliquus Mitochondrial Code</option>
+      <option value="23">23. Thraustochytrium Mitochondrial Code</option>
+      <option value="24">24. Pterobranchia Mitochondrial Code</option>
+      <option value="25">25. Candidate Division SR1 and Gracilibacteria Code</option>
+   </param>
+
+    <repeat name="track_groups" title="Track Group">
+        <param label="Track Category"
+               name="category"
+               type="text"
+               value="Default"
+               help="Organise your tracks into Categories for a nicer end-user experience" optional="False"/>
     <repeat name="data_tracks" title="Annotation Track">
-        <param label="Track Label" name="annotation_label" type="text"/>
-        <param label="Track Category" name="category" type="text" value="Default"
-            help="Organise your tracks into Categories for a nicer end-user experience"/>
         <conditional name="data_format" label="Track Options">
             <param type="select" label="Track Type" name="data_format_select">
-                <option value="gene_calls">GFF/GFF3/BED Featuers</option>
+                <option value="gene_calls">GFF/GFF3/BED/GBK Features</option>
                 <option value="pileup">BAM Pileups</option>
                 <option value="blast">Blast XML</option>
                 <option value="wiggle">BigWig XY</option>
                 <option value="vcf">VCF SNPs</option>
             </param>
             <when value="blast">
-                <param label="BlastXML Track Data" format="blastxml" name="annotation" type="data"/>
+                <expand macro="input_conditional" label="BlastXML Track Data" format="blastxml" />
 
-                <param label="Features used in Blast Search" help="in GFF3. This is required so we know where to map features. E.g. where results of which CDS Protein32 match up to. The query IDs in your blast results should MATCH some feature IDs in your GFF3 file."
-                    format="gff3" name="blast_parent" type="data"/>
+                <param label="Features used in Blast Search"
+                       help="in GFF3. This is used  so we know where to map features. E.g. where results of which CDS Protein32 match up to. The query IDs in your blast results should MATCH some feature IDs in your GFF3 file. This is an optional field and is most useful if using JBrowse to display protein blast results on a DNA genome. blastn results don't need this, blastp results on a protein sequence don't need this."
+                       format="gff3"
+                       name="blast_parent"
+                       optional="true"
+                       type="data"/>
 
-                <param label="Minimum Gap Size" help="before a new match_part feature is created" name="min_gap"
-                    type="integer" value="10" min="2" />
+                <param label="Minimum Gap Size"
+                       help="before a new match_part feature is created"
+                       name="min_gap"
+                       type="integer"
+                       value="10"
+                       min="2" />
                 <param label="Is this a protein blast search?"
-                    type="boolean" name="is_protein" truevalue="true" falsevalue="false" />
+                       type="boolean"
+                       name="is_protein"
+                       truevalue="true"
+                       falsevalue="false" />
+
+                <expand macro="track_styling"
+                        classname="feature"
+                        label="description"
+                        description="Hit_titles"
+                        height="600px"/>
+                <expand macro="color_selection"
+                        token_scaling_lin_select="false"
+                        token_scaling_log_select="true" />
             </when>
             <when value="vcf">
-                <param label="SNPs" help="in VCF"
-                    format="vcf" name="annotation" type="data"/>
+                <expand macro="input_conditional" label="SNP Track Data" format="vcf" />
             </when>
             <when value="gene_calls">
-                <param label="Track Data" help="in GFF, GFF3, BED"
-                    format="gff,gff3,bed" name="annotation" type="data"/>
-
-                <param label="This is match/match_part data"
-                    type="boolean" name="match_part" truevalue="true" falsevalue="false" />
+                <expand macro="input_conditional" label="GFF/GFF3/BED Track Data" format="gff,gff3,bed" />
+                <conditional name="match_part" label="match/match_part data">
+                    <param label="This is match/match_part data"
+                           type="boolean"
+                           name="match_part_select"
+                           truevalue="true"
+                           falsevalue="false" />
+                    <when value="true">
+                        <param label="Match Part Feature Type"
+                               name="name"
+                               type="text"
+                               value="match"
+                               help="Match_parts have several options for the parent feature type, such as cDNA_match, match, translated_nucleotide_match, etc. Please select the appropriate one here"
+                               optional="False"/>
+                    </when>
+                    <when value="false" />
+                </conditional>
+                <expand macro="track_styling" />
+                <expand macro="color_selection" />
             </when>
             <when value="pileup">
-                <param label="Track Data" help="in BAM"
-                    format="bam" name="annotation" type="data"/>
-                <param label="Autogenerate SNP Track" help="Not recommended for deep coverage BAM files"
-                    type="boolean" name="auto_snp" truevalue="true" falsevalue="false" />
+                <expand macro="input_conditional" label="BAM Track Data" format="bam" />
+                <param label="Autogenerate SNP Track"
+                       help="Not recommended for deep coverage BAM files"
+                       type="boolean"
+                       name="auto_snp"
+                       truevalue="true"
+                       falsevalue="false" />
             </when>
             <when value="wiggle">
-                <param label="Track Data" help="in BigWig"
-                    format="bigwig" name="annotation" type="data"/>
-                <param label="Use XYPlot" help="instead of continuous coloured band"
-                    type="boolean" name="xyplot" truevalue="JBrowse/View/Track/Wiggle/XYPlot"
-                    falsevalue="JBrowse/View/Track/Wiggle/Density" />
-                <param label="Show variance band" help="Only for XYPlots"
-                    type="boolean" name="var_band" truevalue="true"
-                    falsevalue="false" />
+                <expand macro="input_conditional" label="BigWig Track Data" format="bigwig" />
+
+                <param label="Use XYPlot"
+                       help="instead of continuous colored band"
+                       type="boolean"
+                       name="xyplot"
+                       truevalue="JBrowse/View/Track/Wiggle/XYPlot"
+                       falsevalue="JBrowse/View/Track/Wiggle/Density" />
+                <param label="Show variance band"
+                       help="Only for XYPlots"
+                       type="boolean"
+                       name="var_band"
+                       truevalue="true"
+                       falsevalue="false" />
 
                 <conditional name="scaling" label="Scaling">
                     <param type="select" label="Track Scaling" name="scale_select">
                         <option value="auto_local">Autoscale (local)</option>
-                        <option value="auto_global">Autoscale (global)</option>
-                        <option vlue="fixed">Specify Min/Max</option>
+                        <option value="auto_global" selected="true">Autoscale (global)</option>
+                        <option value="fixed">Specify Min/Max</option>
                     </param>
                     <when value="auto_local"></when>
                     <when value="auto_global"></when>
@@ -116,15 +327,360 @@
                             type="integer" value="100" />
                     </when>
                 </conditional>
+                <expand macro="color_selection_minmax" />
             </when>
         </conditional>
     </repeat>
+    </repeat>
+
+    <param type="hidden" name="uglyTestingHack" value="" />
   </inputs>
   <outputs>
-    <data format="html" name="default" label="JBrowse on $positional_1.name"/>
+      <data format="html" name="output" label="JBrowse on $on_string - $standalone"/>
   </outputs>
+  <tests>
+    <test>
+      <!-- gencode -->
+      <param name="genomes" value="merlin.fa"/>
+      <param name="gencode" value="1" />
+      <param name="standalone" value="Data Directory" />
+      <param name="uglyTestingHack" value="enabled" />
+      <output name="output" file="gencode/test-1.xml" lines_diff="4" />
+    </test>
+    <test>
+      <param name="genomes" value="merlin.fa"/>
+      <param name="gencode" value="11" />
+      <param name="standalone" value="Data Directory" />
+      <param name="uglyTestingHack" value="enabled" />
+      <output name="output" file="gencode/test.xml" lines_diff="4"/>
+    </test>
+    <!--
+    <test>
+      <param name="genomes" value="merlin.fa"/>
+      <param name="gencode" value="11" />
+      <param name="standalone" value="Data Directory" />
+      <param name="track_groups_0|category" value="Auto Coloured" />
+      <param name="track_groups_0|data_tracks_0|data_format" value="gene_calls"/>
+      <param name="track_groups_0|data_tracks_0|annotation" value="gff3/A.gff,gff3/B.gff,gff3/C.gff,gff3/D.gff"/>
+      <param name="track_groups_0|data_tracks_0|match_part|match_part_select" value="false"/>
+      <param name="track_groups_0|data_tracks_0|jbcolor_scale|color_score|color_score_select" value="none"/>
+      <param name="track_groups_0|data_tracks_0|jbcolor_scale|color|color_select" value="automatic"/>
+
+
+      <param name="track_groups_1|category" value="Ignore Scale" />
+      <param name="track_groups_1|data_tracks_0|data_format" value="gene_calls"/>
+      <param name="track_groups_1|data_tracks_0|annotation" value="gff3/1.gff"/>
+      <param name="track_groups_1|data_tracks_0|match_part|match_part_select" value="false"/>
+      <param name="track_groups_1|data_tracks_0|jbcolor_scale|color_score|color_score_select" value="none"/>
+      <param name="track_groups_1|data_tracks_0|jbcolor_scale|color_score|color|color_select" value="manual"/>
+      <param name="track_groups_1|data_tracks_0|jbcolor_scale|color_score|color|style_color" value="#ff00ff"/>
+
+      <param name="track_groups_2|category" value="Scaled Colour" />
+      <param name="track_groups_2|data_tracks_0|data_format" value="gene_calls"/>
+      <param name="track_groups_2|data_tracks_0|annotation" value="gff3/1.gff"/>
+      <param name="track_groups_2|data_tracks_0|match_part|match_part_select" value="false"/>
+      <param name="track_groups_2|data_tracks_0|jbcolor_scale|color_score|color_score_select" value="score"/>
+      <param name="track_groups_2|data_tracks_0|jbcolor_scale|color_score|score_scaling" value="linear"/>
+      <param name="track_groups_2|data_tracks_0|jbcolor_scale|color_score|score_scales|scale_select" value="automatic"/>
+      <param name="track_groups_2|data_tracks_0|jbcolor_scale|color_score|color_scheme|score_scheme" value="opacity"/>
+      <param name="track_groups_2|data_tracks_0|jbcolor_scale|color_score|color_scheme|color_select" value="automatic"/>
+      <param name="track_groups_2|data_tracks_1|data_format" value="gene_calls"/>
+      <param name="track_groups_2|data_tracks_1|annotation" value="gff3/1.gff"/>
+      <param name="track_groups_2|data_tracks_1|match_part|match_part_select" value="false"/>
+      <param name="track_groups_2|data_tracks_1|jbcolor_scale|color_score|color_score_select" value="score"/>
+      <param name="track_groups_2|data_tracks_1|jbcolor_scale|color_score|score_scaling" value="linear"/>
+      <param name="track_groups_2|data_tracks_1|jbcolor_scale|color_score|score_scales|scale_select" value="automatic"/>
+      <param name="track_groups_2|data_tracks_1|jbcolor_scale|color_score|color_scheme|score_scheme" value="opacity"/>
+      <param name="track_groups_2|data_tracks_1|jbcolor_scale|color_score|color_scheme|color_select" value="manual"/>
+      <param name="track_groups_2|data_tracks_1|jbcolor_scale|color_score|color_scheme|style_color" value="#0000ff"/>
+      <param name="track_groups_2|data_tracks_2|data_format" value="gene_calls"/>
+      <param name="track_groups_2|data_tracks_2|annotation" value="gff3/1.gff"/>
+      <param name="track_groups_2|data_tracks_2|match_part|match_part_select" value="false"/>
+      <param name="track_groups_2|data_tracks_2|jbcolor_scale|color_score|color_score_select" value="score"/>
+      <param name="track_groups_2|data_tracks_2|jbcolor_scale|color_score|score_scaling" value="linear"/>
+      <param name="track_groups_2|data_tracks_2|jbcolor_scale|color_score|score_scales|scale_select" value="automatic"/>
+      <param name="track_groups_2|data_tracks_2|jbcolor_scale|color_score|score_scales|minimum" value="0"/>
+      <param name="track_groups_2|data_tracks_2|jbcolor_scale|color_score|score_scales|maximum" value="1000"/>
+      <param name="track_groups_2|data_tracks_2|jbcolor_scale|color_score|color_scheme|score_scheme" value="opacity"/>
+      <param name="track_groups_2|data_tracks_2|jbcolor_scale|color_score|color_scheme|color_select" value="automatic"/>
+      <param name="track_groups_2|data_tracks_3|data_format" value="gene_calls"/>
+      <param name="track_groups_2|data_tracks_3|annotation" value="gff3/1.gff"/>
+      <param name="track_groups_2|data_tracks_3|match_part|match_part_select" value="false"/>
+      <param name="track_groups_2|data_tracks_3|jbcolor_scale|color_score|color_score_select" value="score"/>
+      <param name="track_groups_2|data_tracks_3|jbcolor_scale|color_score|score_scaling" value="linear"/>
+      <param name="track_groups_2|data_tracks_3|jbcolor_scale|color_score|score_scales|scale_select" value="automatic"/>
+      <param name="track_groups_2|data_tracks_3|jbcolor_scale|color_score|score_scales|minimum" value="0"/>
+      <param name="track_groups_2|data_tracks_3|jbcolor_scale|color_score|score_scales|maximum" value="1000"/>
+      <param name="track_groups_2|data_tracks_3|jbcolor_scale|color_score|color_scheme|score_scheme" value="opacity"/>
+      <param name="track_groups_2|data_tracks_3|jbcolor_scale|color_score|color_scheme|color_select" value="manual"/>
+      <param name="track_groups_2|data_tracks_3|jbcolor_scale|color_score|color_scheme|style_color" value="#ff0000"/>
+
+      <param name="track_groups_3|category" value="Realistic" />
+      <param name="track_groups_3|data_tracks_0|data_format" value="gene_calls"/>
+      <param name="track_groups_3|data_tracks_0|annotation" value="gff3/interpro.gff"/>
+      <param name="track_groups_3|data_tracks_0|match_part|match_part_select" value="false"/>
+      <param name="track_groups_3|data_tracks_0|jbcolor_scale|color_score|color_score_select" value="none"/>
+      <param name="track_groups_3|data_tracks_0|jbcolor_scale|color|color_select" value="automatic"/>
+      <param name="track_groups_3|data_tracks_1|data_format" value="gene_calls"/>
+      <param name="track_groups_3|data_tracks_1|annotation" value="gff3/2.gff"/>
+      <param name="track_groups_3|data_tracks_1|match_part|match_part_select" value="true"/>
+      <param name="track_groups_3|data_tracks_1|match_part|name" value="cDNA_match"/>
+      <param name="track_groups_3|data_tracks_1|jbcolor_scale|color_score|color_score_select" value="none"/>
+      <param name="track_groups_3|data_tracks_1|jbcolor_scale|color|color_select" value="automatic"/>
+
+      <param name="uglyTestingHack" value="enabled" />
+      <output name="output" file="gff3/test.xml" />
+    </test>
+    -->
+  </tests>
   <help><![CDATA[
-Deploy a static JBrowse visualization of a genome and some associated datasets
+JBrowse-in-Galaxy
+=================
+
+JBrowse-in-Galaxy offers a highly configurable, workflow-compatible
+alternative to Trackster.
+
+The JBrowse-in-Galaxy (JiG) tool was written to help build complex
+JBrowse installations straight from Galaxy, taking advantage of the
+latest Galaxy features such as dataset collections, sections, and colour
+pickers. It allows you to build up a JBrowse instance without worrying
+about how to run the command line tools to format your data, and which
+options need to be supplied and where. Additionally it comes with many
+javascript functions to handle colouring of features which would be
+nearly impossible to write without the assistance of this tool.
+
+The JBrowse-in-Galaxy tool is maintained by `Eric
+Rasche <mailto:esr+jig@tamu.edu>`__, who you can contact if you
+encounter missing features or bugs.
+
+Options
+-------
+
+The first option you encounter is the **Fasta Sequence(s)**. This option
+now accepts multiple fasta files, allowing you to build JBrowse
+instances that contain data for multiple genomes or chrosomomes
+(generally known as "landmark features" in gff3 terminology.) Up to 30
+will be shown from the dropdown selector within JBrowse, this is a known
+issue.
+
+**Standalone Instances** are a somewhat in-development feature.
+Currently Galaxy copies the entire JBrowse directory in order to have a
+complete, downloadable file that contains a ready-to-go JBrowse
+instance. This is obviously an anti-feature because users don't want a
+complete copy of JBrowse (6-20Mb) that's duplicated for every JBrowse
+dataset in their history, and admins don't want useless copies of
+JBrowse on disk. Unfortunately we have not come up with the perfect
+solution just yet, but we're working on it! In the meantime, users have
+been given the option to produce just the ``data/`` directory. For those
+unfamiliar with JBrowse, the ``data/`` directory contains processed data
+files, but no way to view them. This feature is additionally implemented
+for upcoming `Apollo <https://github.com/gmod/apollo>`__ integration.
+
+**Genetic Code** is a new feature in v0.4 of JiG / v1.12.0 of JBrowse,
+which allows users to specify a non standard genetic code, and have
+JBrowse highlight the correct start and stop codons. If you would like
+to use a coding table not provided by this list, please let
+`me <mailto:esr+jig@tamu.edu>`__ know so that I may add support for
+this.
+
+**Track Groups** represent a set of tracks in a single category. These
+can be used to let your users understand relationships between large
+groups of tracks.
+
+.. image:: sections.png
+
+Annotation Tracks
+-----------------
+
+Within Track Groups, you have one or more **Annotation Tracks**. Each
+Annotation Track is a groups of datasets which have similar styling.
+This allows you to rapidly build up JBrowse instances without having to
+configure tracks individually. A massive improvement over previous
+versions. For example, if you have five different GFF3 files from
+various gene callers that you wish to display, you can take advantage of
+this feature to style all of them similarly.
+
+There are a few different types of tracks supported, each with their own
+set of options:
+
+GFF3/BED/GBK
+~~~~~~~~~~~~
+
+These are your standard feature tracks. They usually highlight genes,
+mRNAs and other features of interest along a genomic region. The
+underlying tool and this help documentation focus primarily on GFF3
+data, and have not been tested extensively with other formats. Automatic
+min/max detection will likely fail under BED and GBK datasets.
+
+The data may be of a subclass we call **match/match part** data. This
+consists of top level ``match`` features, with a child ``match_part``
+feature, and is often used in displaying alignments. (See "Alignments"
+section on the `GFF3
+specification <http://www.sequenceontology.org/gff3.shtml>`__ for more
+information). If the data is match/match part, you will need to specify
+the top level match feature name, as it can be one of a few different SO
+terms, and JiG does not yet have the ability to understand SO terms.
+
+Next up is the **Styling Options** section, which lets you control a few
+properties on how the track is styled. Most of these you will not need
+to configure and can safely leave on defaults. Occasionally you will
+want to change what information is shown in the end product.
+
+.. image:: styling.png
+
+In the above image you can see some black text, and some blue text. The
+source of the black text is configured with the **style.label** option,
+and the source of the blue text is configured with the
+**style.description** option.
+
+Feature Score Scaling & Colouring Options
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+First, you need to choose between ignoring the score attribute of GFF3
+files, or using it. If you choose to ignore it, all features will be
+coloured with a solid colour. If you choose to use it, features will
+have slightly different colours based on their scores.
+
+.. image:: opacity.png
+
+If you choose **Ignore score**, you may choose between automatically
+choosing a colour, or manually specifying one. The automatically chosen
+colours vary along a brewer palette and generally look quite nice with
+no human intervention required. The manual colour choice is somewhat
+self explanatory. Clicking on the small coloured square will bring up a
+colour palette.
+
+If you choose **Base on score**, you're faced with a dizzying array of
+options. First is the function to map the colour choices to colour
+values. JiG comes with a few functions built in such as linear scaling,
+logarithmic scaling, and blast scaling.
+
+The **linear scaling** method says "take these values, and they map
+directly to a range of output values". **Logarithmic scaling** says
+"please take the log of the score before mapping", and **Blast scaling**
+is further specialised to handle blast data more nicely. These are
+convenience functions to help transform the wide array of possible
+values in the GFF3 score attribute to more meaningful numbers. If you
+need more comprehensive score scaling, it is recommended that you
+pre-process your GFF3 files somehow.
+
+Once you've selected a scaling method, you can choose to manually
+specify the minimum and maximum expected values, or you can let JiG
+determine them for you automatically.
+
+Finally, opacity is the only mapping we currently provide. Future
+iterations will attempt to improve upon this and provide more colour
+scales. The Opacity option maps the highest scoring features to full
+opacity, and everything else to lower ones.
+
+BAM Pileups
+~~~~~~~~~~~
+
+We support BAM files and can automatically generate SNP tracks based on
+that bam data.
+
+.. image:: bam.png
+
+This is *strongly discouraged* for high coverage density datasets.
+Unfortunately there are no other configuration options exposed for bam
+files. If you find JBrowse options you wish to see exposed, please let
+`me <mailto:esr+jig@tamu.edu>`__ know.
+
+BlastXML
+~~~~~~~~
+
+.. image:: blast.png
+
+JiG now supports both blastn and blastp datasets. JiG internally uses a
+blastXML to gapped GFF3 tool to convert your blastxml datasets into a
+format amenable to visualization in JBrowse. This tool is also
+available separately from the IUC on the toolshed.
+
+**Minimum Gap Size** reflects how long a gap must be before it becomes a
+real gap in the processed gff3 file. In the picture above, various sizes
+of gaps can be seen. If the minimum gap size was set much higher, say
+100nt, many of the smaller gaps would disappear, and the features on
+both sides would be merged into one, longer feature. This setting is
+inversely proportional to runtime and output file size. *Do not set this
+to a low value for large datasets*. By setting this number lower, you
+will have extremely large outputs and extremely long runtimes. The
+default was configured based off of the author's experience, but the
+author only works on small viruses. It is *strongly* recommended that
+you filter your blast results before display, e.g. picking out the top
+10 hits or so.
+
+**Protein blast search** option merely informs underlying tools that
+they should adjust feature locations by 3x.
+
+Styling Options
+^^^^^^^^^^^^^^^
+
+Please see the styling options for GFF3 datasets, they are identical.
+
+Feature Score Scaling & Coloring Options
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Please see the score scaling and colouring options for GFF3 datasets,
+they are identical. Remember to set your score scaling to "blast" method
+if you do use it.
+
+Bigwig XY
+~~~~~~~~~
+
+.. image:: bigwig.png
+
+**XYPlot**
+
+BigWig tracks can be displayed as a "density" plot which is continuous
+line which varies in colour, or as an "XYplot." XYplots are preferable
+for users to visually identify specific features in a bigwig track,
+however density tracks are more visually compact.
+
+**Variance Band** is an option available to XYPlots, and can be seen in
+the third and fourth tracks in the above picture. This overlays a mean
+line, and 1 and 2 standard deviation areas.
+
+**Track Scaling** is different from colour scaling, instead it
+configures how the track behaves inside of JBrowse. **Autoscaling
+globally** means that JBrowse will determine the minimum and maximum for
+the track, and fix the bounds of the viewport to that. E.g. if your
+track ranges from 1-1000, and the region you're currently zoomed to only
+goes from 0-50, then the viewport range will still show 1-1000. This is
+good for global genomic context. However you may wish to consider
+**autoscaling locally** instead. In the example of a region which varies
+from 0-50, autoscaling locally would cause the individual track's
+viewport to re-adjust and show just the 0-50 region. If neither of these
+options are palatable, you may manually hardcode the minimum and
+maximums for the track to scale to.
+
+Colour Options
+^^^^^^^^^^^^^^
+
+BigWig tracks have two colours in JBrowse, a positive and a negative
+colour.
+
+As always you may manually choose a colour, or let JiG choose for you.
+
+One of the more interesting options is the **Bicolor pivot**. This
+option allows you to control the point at which JBrowse switches from
+the positive colour to the negative. In the above graphic, you can see
+this has been configured to "mean" for the first two (orange and blue)
+tracks.
+
+VCFs/SNPs
+~~~~~~~~~
+
+These tracks do not support any special configuration.
+
+Known Issues
+------------
+
+-  More than 30 landmark features cannot be listed in the manual
+   selector.
+-  Non GFF3 likely has issue with automatically determined min/max
+   scores. Manually specify minimum and maximum score attributes, or do
+   not use varied colours based on scores to avoid this issue.
+
 
 @ATTRIBUTION@
 ]]></help>