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

Changeset 17:ff11d442feed (2017-11-15)
Previous changeset 16:b5c5470d7c09 (2017-09-13) Next changeset 18:836d1aa3e89a (2017-11-16)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse commit 908f16ea4eb082227437dc93e06e8cb742f5a257
modified:
blastxml_to_gapped_gff3.py
gff3_rebase.py
jbrowse.py
jbrowse.xml
macros.xml
test-data/bam/test.xml
test-data/blastxml/test.xml
test-data/bw/data.bw
test-data/bw/test.xml
test-data/gencode/test-1.xml
test-data/gencode/test.xml
test-data/gff3/test.xml
test-data/menus/test.xml
test-data/track_config/test.xml
test-data/vcf/test.xml
added:
all_fasta.loc.sample
b
diff -r b5c5470d7c09 -r ff11d442feed all_fasta.loc.sample
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/all_fasta.loc.sample Wed Nov 15 15:15:27 2017 -0500
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 b5c5470d7c09 -r ff11d442feed blastxml_to_gapped_gff3.py
--- a/blastxml_to_gapped_gff3.py Wed Sep 13 13:07:20 2017 -0400
+++ b/blastxml_to_gapped_gff3.py Wed Nov 15 15:15:27 2017 -0500
[
@@ -6,47 +6,58 @@
 import sys
 
 from BCBio import GFF
-
 logging.basicConfig(level=logging.INFO)
 log = logging.getLogger(name='blastxml2gff3')
 
-__author__ = "Eric Rasche"
-__version__ = "0.4.0"
-__maintainer__ = "Eric Rasche"
-__email__ = "esr@tamu.edu"
-
 __doc__ = """
 BlastXML files, when transformed to GFF3, do not normally show gaps in the
 blast hits. This tool aims to fill that "gap".
 """
 
 
-def blastxml2gff3(blastxml, min_gap=3, trim=False, trim_end=False):
+def blastxml2gff3(blastxml, min_gap=3, trim=False, trim_end=False, include_seq=False):
     from Bio.Blast import NCBIXML
     from Bio.Seq import Seq
     from Bio.SeqRecord import SeqRecord
     from Bio.SeqFeature import SeqFeature, FeatureLocation
 
     blast_records = NCBIXML.parse(blastxml)
-    records = []
-    for record in blast_records:
+    for idx_record, record in enumerate(blast_records):
         # http://www.sequenceontology.org/browser/release_2.4/term/SO:0000343
         match_type = {  # Currently we can only handle BLASTN, BLASTP
             'BLASTN': 'nucleotide_match',
             'BLASTP': 'protein_match',
         }.get(record.application, 'match')
 
-        rec = SeqRecord(Seq("ACTG"), id=record.query)
-        for hit in record.alignments:
-            for hsp in hit.hsps:
+        recid = record.query
+        if ' ' in recid:
+            recid = recid[0:recid.index(' ')]
+
+        rec = SeqRecord(Seq("ACTG"), id=recid)
+        for idx_hit, hit in enumerate(record.alignments):
+            for idx_hsp, hsp in enumerate(hit.hsps):
                 qualifiers = {
+                    "ID": 'b2g.%s.%s.%s' % (idx_record, idx_hit, idx_hsp),
                     "source": "blast",
                     "score": hsp.expect,
                     "accession": hit.accession,
                     "hit_id": hit.hit_id,
                     "length": hit.length,
-                    "hit_titles": hit.title.split(' >')
+                    "hit_titles": hit.title.split(' >'),
                 }
+                if include_seq:
+                    qualifiers.update({
+                        'blast_qseq': hsp.query,
+                        'blast_sseq': hsp.sbjct,
+                        'blast_mseq': hsp.match,
+                    })
+
+                for prop in ('score', 'bits', 'identities', 'positives',
+                             'gaps', 'align_length', 'strand', 'frame',
+                             'query_start', 'query_end', 'sbjct_start',
+                             'sbjct_end'):
+                    qualifiers['blast_' + prop] = getattr(hsp, prop, None)
+
                 desc = hit.title.split(' >')[0]
                 qualifiers['description'] = desc[desc.index(' '):]
 
@@ -62,14 +73,11 @@
                 # protein.
                 parent_match_end = hsp.query_start + hit.length + hsp.query.count('-')
 
-                # However, if the user requests that we trim the feature, then
-                # we need to cut the ``match`` start to 0 to match the parent feature.
-                # We'll also need to cut the end to match the query's end. It (maybe)
-                # should be the feature end? But we don't have access to that data, so
-                # We settle for this.
+                # If we trim the left end, we need to trim without losing information.
+                used_parent_match_start = parent_match_start
                 if trim:
                     if parent_match_start < 1:
-                        parent_match_start = 0
+                        used_parent_match_start = 0
 
                 if trim or trim_end:
                     if parent_match_end > hsp.query_end:
@@ -77,7 +85,7 @@
 
                 # The ``match`` feature will hold one or more ``match_part``s
                 top_feature = SeqFeature(
-                    FeatureLocation(parent_match_start, parent_match_end),
+                    FeatureLocation(used_parent_match_start, parent_match_end),
                     type=match_type, strand=0,
                     qualifiers=qualifiers
                 )
@@ -87,19 +95,15 @@
                     "source": "blast",
                 }
                 top_feature.sub_features = []
-                for start, end, cigar in generate_parts(hsp.query, hsp.match,
-                                                        hsp.sbjct,
-                                                        ignore_under=min_gap):
+                for idx_part, (start, end, cigar) in \
+                        enumerate(generate_parts(hsp.query, hsp.match,
+                                                 hsp.sbjct,
+                                                 ignore_under=min_gap)):
                     part_qualifiers['Gap'] = cigar
-                    part_qualifiers['ID'] = hit.hit_id
+                    part_qualifiers['ID'] = qualifiers['ID'] + ('.%s' % idx_part)
 
-                    if trim:
-                        # If trimming, then we start relative to the
-                        # match's start
-                        match_part_start = parent_match_start + start
-                    else:
-                        # Otherwise, we have to account for the subject start's location
-                        match_part_start = parent_match_start + hsp.sbjct_start + start - 1
+                    # Otherwise, we have to account for the subject start's location
+                    match_part_start = parent_match_start + hsp.sbjct_start + start - 1
 
                     # We used to use hsp.align_length here, but that includes
                     # gaps in the parent sequence
@@ -117,8 +121,7 @@
 
                 rec.features.append(top_feature)
         rec.annotations = {}
-        records.append(rec)
-    return records
+        yield rec
 
 
 def __remove_query_gaps(query, match, subject):
@@ -253,11 +256,13 @@
 
 if __name__ == '__main__':
     parser = argparse.ArgumentParser(description='Convert Blast XML to gapped GFF3', epilog='')
-    parser.add_argument('blastxml', type=open, help='Blast XML Output')
+    parser.add_argument('blastxml', type=argparse.FileType("r"), help='Blast XML Output')
     parser.add_argument('--min_gap', type=int, help='Maximum gap size before generating a new match_part', default=3)
     parser.add_argument('--trim', action='store_true', help='Trim blast hits to be only as long as the parent feature')
     parser.add_argument('--trim_end', action='store_true', help='Cut blast results off at end of gene')
+    parser.add_argument('--include_seq', action='store_true', help='Include sequence')
     args = parser.parse_args()
 
-    result = blastxml2gff3(**vars(args))
-    GFF.write(result, sys.stdout)
+    for rec in blastxml2gff3(**vars(args)):
+        if len(rec.features):
+            GFF.write([rec], sys.stdout)
b
diff -r b5c5470d7c09 -r ff11d442feed gff3_rebase.py
--- a/gff3_rebase.py Wed Sep 13 13:07:20 2017 -0400
+++ b/gff3_rebase.py Wed Nov 15 15:15:27 2017 -0500
[
@@ -83,18 +83,25 @@
 def __get_features(child, interpro=False):
     child_features = {}
     for rec in GFF.parse(child):
+        # Only top level
         for feature in rec.features:
+            # Get the record id as parent_feature_id (since this is how it will be during remapping)
             parent_feature_id = rec.id
+            # If it's an interpro specific gff3 file
             if interpro:
+                # Then we ignore polypeptide features as they're useless
                 if feature.type == 'polypeptide':
                     continue
-                if '_' in parent_feature_id:
-                    parent_feature_id = parent_feature_id[parent_feature_id.index('_') + 1:]
+                # If there's an underscore, we strip up to that underscore?
+                # I do not know the rationale for this, removing.
+                # if '_' in parent_feature_id:
+                    # parent_feature_id = parent_feature_id[parent_feature_id.index('_') + 1:]
 
             try:
                 child_features[parent_feature_id].append(feature)
             except KeyError:
                 child_features[parent_feature_id] = [feature]
+            # Keep a list of feature objects keyed by parent record id
     return child_features
 
 
@@ -132,23 +139,29 @@
             __update_feature_location(subfeature, parent, protein2dna)
 
 
-def rebase(parent, child, interpro=False, protein2dna=False):
+def rebase(parent, child, interpro=False, protein2dna=False, map_by='ID'):
+    # get all of the features we will be re-mapping in a dictionary, keyed by parent feature ID
     child_features = __get_features(child, interpro=interpro)
 
     for rec in GFF.parse(parent):
         replacement_features = []
         for feature in feature_lambda(
                 rec.features,
+                # Filter features in the parent genome by those that are
+                # "interesting", i.e. have results in child_features array.
+                # Probably an unnecessary optimisation.
                 feature_test_qual_value,
                 {
-                    'qualifier': 'ID',
+                    'qualifier': map_by,
                     'attribute_list': child_features.keys(),
                 },
                 subfeatures=False):
 
-            new_subfeatures = child_features[feature.id]
-            fixed_subfeatures = []
-            for x in new_subfeatures:
+            # Features which will be re-mapped
+            to_remap = child_features[feature.id]
+            # TODO: update starts
+            fixed_features = []
+            for x in to_remap:
                 # Then update the location of the actual feature
                 __update_feature_location(x, feature, protein2dna)
 
@@ -156,11 +169,11 @@
                     for y in ('status', 'Target'):
                         try:
                             del x.qualifiers[y]
-                        except:
+                        except Exception:
                             pass
 
-                fixed_subfeatures.append(x)
-            replacement_features.extend(fixed_subfeatures)
+                fixed_features.append(x)
+            replacement_features.extend(fixed_features)
         # We do this so we don't include the original set of features that we
         # were rebasing against in our result.
         rec.features = replacement_features
@@ -176,5 +189,6 @@
                         help='Interpro specific modifications')
     parser.add_argument('--protein2dna', action='store_true',
                         help='Map protein translated results to original DNA data')
+    parser.add_argument('--map_by', help='Map by key', default='ID')
     args = parser.parse_args()
     rebase(**vars(args))
b
diff -r b5c5470d7c09 -r ff11d442feed jbrowse.py
--- a/jbrowse.py Wed Sep 13 13:07:20 2017 -0400
+++ b/jbrowse.py Wed Nov 15 15:15:27 2017 -0500
[
b'@@ -1,7 +1,8 @@\n #!/usr/bin/env python\n import argparse\n-import codecs\n+import binascii\n import copy\n+import datetime\n import hashlib\n import json\n import logging\n@@ -14,9 +15,10 @@\n from collections import defaultdict\n \n from Bio.Data import CodonTable\n-\n logging.basicConfig(level=logging.INFO)\n log = logging.getLogger(\'jbrowse\')\n+TODAY = datetime.datetime.now().strftime("%Y-%m-%d")\n+GALAXY_INFRASTRUCTURE_URL = None\n \n \n class ColorScaling(object):\n@@ -63,6 +65,7 @@\n         var color = ({user_spec_color} || search_up(feature, \'color\') || search_down(feature, \'color\') || {auto_gen_color});\n         var score = (search_up(feature, \'score\') || search_down(feature, \'score\'));\n         {opacity}\n+        if(score === undefined){{ opacity = 1; }}\n         var result = /^#?([a-f\\d]{{2}})([a-f\\d]{{2}})([a-f\\d]{{2}})$/i.exec(color);\n         var red = parseInt(result[1], 16);\n         var green = parseInt(result[2], 16);\n@@ -82,11 +85,11 @@\n         """,\n         \'blast\': """\n             var opacity = 0;\n-            if(score == 0.0) {\n+            if(score == 0.0) {{\n                 opacity = 1;\n-            } else{\n+            }} else {{\n                 opacity = (20 - Math.log10(score)) / 180;\n-            }\n+            }}\n         """\n     }\n \n@@ -128,7 +131,7 @@\n \n     def rgb_from_hex(self, hexstr):\n         # http://stackoverflow.com/questions/4296249/how-do-i-convert-a-hex-triplet-to-an-rgb-tuple-and-back\n-        return struct.unpack(\'BBB\', codecs.decode(hexstr, \'hex\'))\n+        return struct.unpack(\'BBB\', binascii.unhexlify(hexstr))\n \n     def min_max_gff(self, gff_file):\n         min_val = None\n@@ -285,6 +288,44 @@\n INSTALLED_TO = os.path.dirname(os.path.realpath(__file__))\n \n \n+def metadata_from_node(node):\n+    metadata = {}\n+    try:\n+        if len(node.findall(\'dataset\')) != 1:\n+            # exit early\n+            return metadata\n+    except Exception:\n+        return {}\n+\n+    for (key, value) in node.findall(\'dataset\')[0].attrib.items():\n+        metadata[\'dataset_%s\' % key] = value\n+\n+    for (key, value) in node.findall(\'history\')[0].attrib.items():\n+        metadata[\'history_%s\' % key] = value\n+\n+    for (key, value) in node.findall(\'metadata\')[0].attrib.items():\n+        metadata[\'metadata_%s\' % key] = value\n+\n+    for (key, value) in node.findall(\'tool\')[0].attrib.items():\n+        metadata[\'tool_%s\' % key] = value\n+\n+    # Additional Mappings applied:\n+    metadata[\'dataset_edam_format\'] = \'<a target="_blank" href="http://edamontology.org/{0}">{1}</a>\'.format(metadata[\'dataset_edam_format\'], metadata[\'dataset_file_ext\'])\n+    metadata[\'history_user_email\'] = \'<a href="mailto:{0}">{0}</a>\'.format(metadata[\'history_user_email\'])\n+    metadata[\'history_display_name\'] = \'<a target="_blank" href="{galaxy}/history/view/{encoded_hist_id}">{hist_name}</a>\'.format(\n+        galaxy=GALAXY_INFRASTRUCTURE_URL,\n+        encoded_hist_id=metadata[\'history_id\'],\n+        hist_name=metadata[\'history_display_name\']\n+    )\n+    metadata[\'tool_tool\'] = \'<a target="_blank" href="{galaxy}/datasets/{encoded_id}/show_params">{tool_id}</a>\'.format(\n+        galaxy=GALAXY_INFRASTRUCTURE_URL,\n+        encoded_id=metadata[\'dataset_id\'],\n+        tool_id=metadata[\'tool_tool_id\'],\n+        tool_version=metadata[\'tool_tool_version\'],\n+    )\n+    return metadata\n+\n+\n class JbrowseConnector(object):\n \n     def __init__(self, jbrowse, outdir, genomes, standalone=False, gencode=1):\n@@ -312,6 +353,12 @@\n                 # Ignore if the folder exists\n                 pass\n \n+            try:\n+                os.makedirs(os.path.join(self.outdir, \'data\', \'raw\'))\n+            except OSError:\n+                # Ignore if the folder exists\n+                pass\n+\n         self.process_genomes()\n         self.update_gencode()\n \n@@ -338,21 +385,20 @@\n         return os.path.realpath(os.path.join(self.jbrowse, \'bin\', command))\n \n     def process_genomes(self):\n-        for genome_path in self.genome_paths:\n+        for genome_node in self.genome'..b" os.path.realpath(x.attrib['path']),\n+                'meta': metadata_from_node(x.find('metadata'))\n+            }\n+            for x in root.findall('metadata/genomes/genome')\n+        ],\n         standalone=args.standalone,\n         gencode=root.find('metadata/gencode').text\n     )\n@@ -719,21 +868,74 @@\n             'show_overview': root.find('metadata/general/show_overview').text,\n             'show_menu': root.find('metadata/general/show_menu').text,\n             'hideGenomeOptions': root.find('metadata/general/hideGenomeOptions').text,\n-        }\n+        },\n+        'plugins': [{\n+            'location': 'https://cdn.rawgit.com/TAMU-CPT/blastview/97572a21b7f011c2b4d9a0b5af40e292d694cbef/',\n+            'name': 'BlastView'\n+        }],\n+        'plugins_python': ['BlastView'],\n     }\n+\n+    plugins = root.find('plugins').attrib\n+    if plugins['GCContent'] == 'True':\n+        extra_data['plugins_python'].append('GCContent')\n+        extra_data['plugins'].append({\n+            'location': 'https://cdn.rawgit.com/elsiklab/gccontent/5c8b0582ecebf9edf684c76af8075fb3d30ec3fa/',\n+            'name': 'GCContent'\n+        })\n+\n+    if plugins['Bookmarks'] == 'True':\n+        extra_data['plugins'].append({\n+            'location': 'https://cdn.rawgit.com/TAMU-CPT/bookmarks-jbrowse/5242694120274c86e1ccd5cb0e5e943e78f82393/',\n+            'name': 'Bookmarks'\n+        })\n+\n+    if plugins['ComboTrackSelector'] == 'True':\n+        extra_data['plugins_python'].append('ComboTrackSelector')\n+        extra_data['plugins'].append({\n+            'location': 'https://cdn.rawgit.com/Arabidopsis-Information-Portal/ComboTrackSelector/52403928d5ccbe2e3a86b0fa5eb8e61c0f2e2f57',\n+            'icon': 'https://galaxyproject.org/images/logos/galaxy-icon-square.png',\n+            'name': 'ComboTrackSelector'\n+        })\n+\n+    if plugins['theme'] == 'Minimalist':\n+        extra_data['plugins'].append({\n+            'location': 'https://cdn.rawgit.com/erasche/jbrowse-minimalist-theme/d698718442da306cf87f033c72ddb745f3077775/',\n+            'name': 'MinimalistTheme'\n+        })\n+    elif plugins['theme'] == 'Dark':\n+        extra_data['plugins'].append({\n+            'location': 'https://cdn.rawgit.com/erasche/jbrowse-dark-theme/689eceb7e33bbc1b9b15518d45a5a79b2e5d0a26/',\n+            'name': 'DarkTheme'\n+        })\n+\n+    GALAXY_INFRASTRUCTURE_URL = root.find('metadata/galaxyUrl').text\n+    # Sometimes this comes as `localhost` without a protocol\n+    if not GALAXY_INFRASTRUCTURE_URL.startswith('http'):\n+        # so we'll prepend `http://` and hope for the best. Requests *should*\n+        # be GET and not POST so it should redirect OK\n+        GALAXY_INFRASTRUCTURE_URL = 'http://' + GALAXY_INFRASTRUCTURE_URL\n+\n     for track in root.findall('tracks/track'):\n         track_conf = {}\n-        track_conf['trackfiles'] = [\n-            (os.path.realpath(x.attrib['path']), x.attrib['ext'], x.attrib['label'])\n-            for x in track.findall('files/trackFile')\n-        ]\n+        track_conf['trackfiles'] = []\n+\n+        for x in track.findall('files/trackFile'):\n+            metadata = metadata_from_node(x.find('metadata'))\n+\n+            track_conf['trackfiles'].append((\n+                os.path.realpath(x.attrib['path']),\n+                x.attrib['ext'],\n+                x.attrib['label'],\n+                metadata\n+            ))\n \n         track_conf['category'] = track.attrib['cat']\n         track_conf['format'] = track.attrib['format']\n         try:\n             # Only pertains to gff3 + blastxml. TODO?\n             track_conf['style'] = {t.tag: t.text for t in track.find('options/style')}\n-        except TypeError:\n+        except TypeError as te:\n             track_conf['style'] = {}\n             pass\n         track_conf['conf'] = etree_to_dict(track.find('options'))\n@@ -743,4 +945,3 @@\n             extra_data['visibility'][track.attrib.get('visibility', 'default_off')].append(key)\n \n     jc.add_final_data(extra_data)\n-    jc.generate_names()\n"
b
diff -r b5c5470d7c09 -r ff11d442feed jbrowse.xml
--- a/jbrowse.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/jbrowse.xml Wed Nov 15 15:15:27 2017 -0500
[
b'@@ -5,6 +5,7 @@\n   </macros>\n   <expand macro="requirements"/>\n   <expand macro="stdio"/>\n+  <version_command>python jbrowse.py --version</version_command>\n   <command><![CDATA[\n \n #if $action.action_select == "create":\n@@ -75,7 +76,29 @@\n               <genome>${reference_genome.genomes.fields.path}</genome>\n             #else\n               #for $genome in $reference_genome.genomes:\n-                  <genome>$genome</genome>\n+                  <genome path="$genome">\n+                    <metadata>\n+                      <dataset id="${__app__.security.encode_id($genome.id)}" hid="${genome.hid}"\n+                          size="${genome.get_size(nice_size=True)}"\n+                          edam_format="${genome.datatype.edam_format}"\n+                          file_ext="${genome.ext}" />\n+                      <history id="${__app__.security.encode_id($genome.history_id)}"\n+                          user_email="${genome.history.user.email}"\n+                          user_id="${genome.history.user_id}"\n+                          display_name="${genome.history.get_display_name()}"/>\n+                      <metadata\n+                          #for (key, value) in $genome.get_metadata().items():\n+                          #if "_types" not in $key:\n+                          ${key}="${value}"\n+                          #end if\n+                          #end for\n+                          />\n+                      <tool\n+                          tool_id="${genome.creating_job.tool_id}"\n+                          tool_version="${genome.creating_job.tool_version}"\n+                          />\n+                    </metadata>\n+                  </genome>\n               #end for\n             #end if\n         </genomes>\n@@ -91,24 +114,55 @@\n             <show_menu>${jbgen.show_menu}</show_menu>\n             <hideGenomeOptions>${jbgen.hideGenomeOptions}</hideGenomeOptions>\n         </general>\n+        <galaxyUrl>${__app__.config.galaxy_infrastructure_url}</galaxyUrl>\n     </metadata>\n     <tracks>\n         #for $tg in $track_groups:\n         #for $track in $tg.data_tracks:\n+        #if $track.data_format.data_format_select == "rest":\n+        <track cat="${tg.category}" format="${track.data_format.data_format_select}" visibility="${track.data_format.track_visibility}">\n+            <url>${track.data_format.url}</url>\n+        </track>\n+        #else:\n         <track cat="${tg.category}" format="${track.data_format.data_format_select}" visibility="${track.data_format.track_visibility}">\n             <files>\n               #for $dataset in $track.data_format.annotation:\n-              <trackFile path="${dataset}" ext="${dataset.ext}" label="${dataset.element_identifier}" />\n+              <trackFile path="${dataset}" ext="${dataset.ext}" label="${dataset.element_identifier}">\n+                <metadata>\n+                  <dataset id="${__app__.security.encode_id($dataset.id)}" hid="${dataset.hid}"\n+                      size="${dataset.get_size(nice_size=True)}"\n+                      edam_format="${dataset.datatype.edam_format}"\n+                      file_ext="${dataset.ext}" />\n+                  <history id="${__app__.security.encode_id($dataset.history_id)}"\n+                      user_email="${dataset.history.user.email}"\n+                      user_id="${dataset.history.user_id}"\n+                      display_name="${dataset.history.get_display_name()}"/>\n+                  <metadata\n+                    #for (key, value) in $dataset.get_metadata().items():\n+                    #if "_types" not in $key:\n+                      ${key}="${value}"\n+                    #end if\n+                    #end for\n+                      />\n+                  <tool\n+                      tool_id="${dataset.creating_job.tool_id}"\n+                      tool_version="${dataset.creating_job.tool_version}"\n+                      />\n+                </metadata>\n+              </trackFile>\n               #end for\n             </files>\n \n      '..b'ct" label="Visual Scaling" name="scale_select2">\n+                    <option value="linear" selected="true">Linear</option>\n+                    <option value="log">Logarithmic (Dynamically Calculated)</option>\n+                </param>\n                 <expand macro="color_selection_minmax" />\n                 <expand macro="track_display" />\n             </when>\n+            <when value="rest">\n+                <param type="text" label="REST Endpoint" name="url" />\n+            </when>\n             <!--\n             <when value="sparql">\n                 <param type="text" label="SPARQL Server URL" name="url" />\n@@ -497,6 +566,25 @@\n     </repeat>\n \n     <expand macro="general_options" />\n+    <section name="plugins" title="Plugins" expanded="false">\n+        <param\n+            label="Combo Track Selector" name="ComboTrackSelector" truevalue="True" falsevalue="" type="boolean"\n+            help="ComboTrackSelector is a plugin to allow the co-existence of the Hierarchical and Faceted Track selectors in JBrowse, built for/by the Arabidopsis Information Portal (Araport) project" />\n+        <param\n+            label="Bookmarks" name="Bookmarks" truevalue="True" falsevalue="" type="boolean"\n+            help="JBrowse plugin allowing users to manage a persistent list of bookmarks kept in localstorage" />\n+\n+        <param\n+            label="GC Content" name="GCContent" truevalue="True" falsevalue="" type="boolean"\n+            help="A JBrowse plugin for plotting GC Content and GC Skew. The plugin consists of a storeClass that automatically calculates the percentage of G/C bases in a region, a track type that derives from the Wiggle XY or density types, and a dialog box to adjust the sliding window size, window step size, and the calculation mode (content or skew)." />\n+\n+        <param type="select" label="JBrowse Theme" name="theme">\n+            <option value="" selected="True">Default</option>\n+            <option value="Minimalist">Minimalist</option>\n+            <option value="Dark">Dark</option>\n+        </param>\n+    </section>\n+\n     <param type="hidden" name="uglyTestingHack" value="" />\n   </inputs>\n   <outputs>\n@@ -518,7 +606,7 @@\n       <param name="gencode" value="11" />\n       <param name="standalone" value="Data Directory" />\n       <param name="uglyTestingHack" value="enabled" />\n-      <output name="output" file="gencode/test.xml" lines_diff="4"/>\n+      <output name="output" file="gencode/test.xml" lines_diff="14"/>\n     </test>\n     <test>\n       <param name="reference_genome|genome_type_select" value="history"/>\n@@ -714,7 +802,7 @@\n       </repeat>\n \n       <param name="uglyTestingHack" value="enabled" />\n-      <output name="output" file="gff3/test.xml" lines_diff="24" />\n+      <output name="output" file="gff3/test.xml" lines_diff="64" />\n     </test>\n     <test>\n         <param name="reference_genome|genome_type_select" value="history"/>\n@@ -777,7 +865,7 @@\n         </repeat>\n \n         <param name="uglyTestingHack" value="enabled" />\n-        <output name="output" file="menus/test.xml" lines_diff="6"/>\n+        <output name="output" file="menus/test.xml" lines_diff="24"/>\n     </test>\n     <test>\n         <param name="reference_genome|genome_type_select" value="history"/>\n@@ -814,7 +902,7 @@\n         </repeat>\n \n         <param name="uglyTestingHack" value="enabled" />\n-        <output name="output" file="track_config/test.xml" lines_diff="6"/>\n+        <output name="output" file="track_config/test.xml" lines_diff="26"/>\n     </test>\n   </tests>\n   <help><![CDATA[\n@@ -824,6 +912,12 @@\n JBrowse-in-Galaxy offers a highly configurable, workflow-compatible\n alternative to Trackster.\n \n+Overview\n+--------\n+\n+JBrowse is a fast, embeddable genome browser built completely with\n+JavaScript and HTML5.\n+\n The JBrowse-in-Galaxy (JiG) tool was written to help build complex\n JBrowse installations straight from Galaxy, taking advantage of the\n latest Galaxy features such as dataset collections, sections, and colour\n'
b
diff -r b5c5470d7c09 -r ff11d442feed macros.xml
--- a/macros.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/macros.xml Wed Nov 15 15:15:27 2017 -0500
[
@@ -12,7 +12,7 @@
     </requirements>
   </xml>
   <token name="@DATA_DIR@">\$GALAXY_JBROWSE_SHARED_DIR</token>
-  <token name="@WRAPPER_VERSION@">0.5.3</token>
+  <token name="@WRAPPER_VERSION@">0.7.0</token>
   <xml name="stdio">
     <stdio>
       <exit_code range="1:"/>
@@ -27,6 +27,43 @@
 This Galaxy tool relies on the JBrowse, maintained by the GMOD Community. The Galaxy wrapper is developed by Eric Rasche
 ]]>
   </token>
+
+  <xml name="genome_selector"
+    token_help=""
+    token_label="Fasta sequences"
+    token_optional="False" >
+    <conditional name="reference_genome">
+        <param help="Built-in references" label="Reference genome to display" name="genome_type_select" type="select">
+            <option selected="True" value="indexed">Use a built-in genome</option>
+            <option value="history">Use a genome from history</option>
+        </param>
+        <when value="indexed">
+            <param
+              help="@HELP@"
+              label="@LABEL@"
+              name="genomes"
+              type="select"
+              optional="@OPTIONAL@"
+              >
+                <options from_data_table="all_fasta">
+                    <filter column="2" type="sort_by" />
+                    <validator message="No genomes are available for the selected input dataset" type="no_options" />
+                </options>
+            </param>
+        </when>
+        <when value="history">
+            <param
+              format="fasta"
+              label="@LABEL@"
+              help="@HELP@"
+              name="genomes"
+              type="data"
+              optional="@OPTIONAL@"
+              multiple="True" />
+        </when>
+    </conditional>
+  </xml>
+
   <xml name="auto_manual_tk"
       token_cond_label="Color"
       token_cond_name="color"
@@ -54,6 +91,14 @@
       <option value="force">Force On</option>
       <option value="always">Always On (ignores URL parameters)</option>
     </param>
+    <param type="select" label="Override Apollo Plugins" name="override_apollo_plugins" help="Disable the apollo plugin for this track, this disables the ability to make an annotation from this feature.">
+      <option value="True">Yes - Override</option>
+      <option value="False" selected="True">No - Do not Override</option>
+    </param>
+    <param type="select" label="Override Apollo Draggability" name="override_apollo_drag" help="Disable apollo's drag-to-create feature functionality.">
+      <option value="True">Yes - Override</option>
+      <option value="False" selected="True">No - Do not Override</option>
+    </param>
   </xml>
 
   <xml name="jb_color"
@@ -179,9 +224,9 @@
             <!-- Scaling -->
             <param type="select" label="JBrowse style.color function's score scaling" name="score_scaling"
                    help="How should the colors be distributed across the values? For blast results which distributes scores on the scale of approximately [1e-500, 10], it makes sense to request a logarithmic scaling of the color values. Logarithmic is indeed the default for blast. However other analysis methods may produce scores on ranges such as [0, 100] where a linear scale would be more appropriate for color distribution.">
-              <option value="linear"      selected="@SCALING_LIN_SELECT@" >Linear scaling</option>
-              <option value="logarithmic">Logarithmic scaling</option>
-              <option value="blast"       selected="@SCALING_LOG_SELECT@" >Blast scaling</option>
+              <option value="linear" selected="@SCALING_LIN_SELECT@">Linear scaling</option>
+              <option value="logarithmic" selected="false">Logarithmic scaling</option>
+              <option value="blast" selected="@SCALING_LOG_SELECT@">Blast scaling</option>
             </param>
 
             <!-- Scaling Bounds -->
@@ -219,9 +264,10 @@
   </xml>
   <xml name="track_styling"
        token_classname="feature"
-       token_label="name,id"
+       token_label="product,name,id"
        token_description="note,description"
-       token_height="100px">
+       token_height="10px"
+       token_maxheight="600">
     <section name="jbstyle" title="JBrowse Styling Options [Advanced]" expanded="false">
         <param label="JBrowse style.className" type="text"
                name="style_classname"
@@ -242,6 +288,11 @@
                name="style_height"
                value="@HEIGHT@"
                help="Height in pixels of glyphs. Default value varies from glyph to glyph. Note that the 'compact' displayMode uses style->height * 0.35 so changing style height can adjust the compact visualization."/>
+        <param label="JBrowse maxHeight"
+               type="text"
+               name="max_height"
+               value="@MAXHEIGHT@"
+               help="Maximum height that the track is permitted to reach in pixels."/>
     </section>
   </xml>
 
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/bam/test.xml
--- a/test-data/bam/test.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/bam/test.xml Wed Nov 15 15:15:27 2017 -0500
b
@@ -5,6 +5,17 @@
         <genomes>
             <genome>test-data/merlin.fa</genome>
         </genomes>
+        <general>
+            <defaultLocation></defaultLocation>
+            <trackPadding>40</trackPadding>
+            <shareLink>true</shareLink>
+            <aboutDescription></aboutDescription>
+            <show_tracklist>true</show_tracklist>
+            <show_nav>true</show_nav>
+            <show_overview>false</show_overview>
+            <show_menu>true</show_menu>
+            <hideGenomeOptions>false</hideGenomeOptions>
+        </general>
     </metadata>
     <tracks>
         <track cat="Default" format="pileup">
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/blastxml/test.xml
--- a/test-data/blastxml/test.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/blastxml/test.xml Wed Nov 15 15:15:27 2017 -0500
b
@@ -5,6 +5,17 @@
         <genomes>
             <genome>test-data/merlin.fa</genome>
         </genomes>
+        <general>
+            <defaultLocation></defaultLocation>
+            <trackPadding>40</trackPadding>
+            <shareLink>true</shareLink>
+            <aboutDescription></aboutDescription>
+            <show_tracklist>true</show_tracklist>
+            <show_nav>true</show_nav>
+            <show_overview>false</show_overview>
+            <show_menu>true</show_menu>
+            <hideGenomeOptions>false</hideGenomeOptions>
+        </general>
     </metadata>
     <tracks>
         <track cat="Blah" format="blast">
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/bw/data.bw
b
Binary file test-data/bw/data.bw has changed
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/bw/test.xml
--- a/test-data/bw/test.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/bw/test.xml Wed Nov 15 15:15:27 2017 -0500
b
@@ -5,6 +5,17 @@
         <genomes>
             <genome>test-data/merlin.fa</genome>
         </genomes>
+        <general>
+            <defaultLocation></defaultLocation>
+            <trackPadding>40</trackPadding>
+            <shareLink>true</shareLink>
+            <aboutDescription></aboutDescription>
+            <show_tracklist>true</show_tracklist>
+            <show_nav>true</show_nav>
+            <show_overview>false</show_overview>
+            <show_menu>true</show_menu>
+            <hideGenomeOptions>false</hideGenomeOptions>
+        </general>
     </metadata>
     <tracks>
         <track cat="Scaling" format="wiggle">
@@ -20,6 +31,7 @@
                     <color_pos>__auto__</color_pos>
                     <color_neg>__auto__</color_neg>
                     <bicolor_pivot>zero</bicolor_pivot>
+                    <scale>linear</scale>
                 </wiggle>
             </options>
         </track>
@@ -36,6 +48,7 @@
                     <color_pos>__auto__</color_pos>
                     <color_neg>__auto__</color_neg>
                     <bicolor_pivot>zero</bicolor_pivot>
+                    <scale>linear</scale>
                 </wiggle>
             </options>
         </track>
@@ -54,6 +67,7 @@
                     <color_pos>__auto__</color_pos>
                     <color_neg>__auto__</color_neg>
                     <bicolor_pivot>zero</bicolor_pivot>
+                    <scale>linear</scale>
                 </wiggle>
             </options>
         </track>
@@ -74,6 +88,7 @@
                     <color_pos>__auto__</color_pos>
                     <color_neg>__auto__</color_neg>
                     <bicolor_pivot>mean</bicolor_pivot>
+                    <scale>linear</scale>
                 </wiggle>
             </options>
         </track>
@@ -91,6 +106,7 @@
                     <color_pos>#0000ff</color_pos>
                     <color_neg>#ff0000</color_neg>
                     <bicolor_pivot>mean</bicolor_pivot>
+                    <scale>linear</scale>
                 </wiggle>
             </options>
         </track>
@@ -108,6 +124,7 @@
                     <color_pos>#ff0000</color_pos>
                     <color_neg>#0000ff</color_neg>
                     <bicolor_pivot>mean</bicolor_pivot>
+                    <scale>log</scale>
                 </wiggle>
             </options>
         </track>
@@ -125,6 +142,7 @@
                     <color_pos>#0000ff</color_pos>
                     <color_neg>#ff0000</color_neg>
                     <bicolor_pivot>100</bicolor_pivot>
+                    <scale>linear</scale>
                 </wiggle>
             </options>
         </track>
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/gencode/test-1.xml
--- a/test-data/gencode/test-1.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/gencode/test-1.xml Wed Nov 15 15:15:27 2017 -0500
b
@@ -3,7 +3,27 @@
     <metadata>
         <gencode>1</gencode>
         <genomes>
-                  <genome>/tmp/tmpPJZIQf/files/000/dataset_1.dat</genome>
+                  <genome path="/tmp/tmpnh6QWY/files/000/dataset_1.dat">
+                    <metadata>
+                      <dataset id="2891970512fa2d5a" hid="1"
+                          size="171.6 KB"
+                          edam_format="format_1929"
+                          file_ext="fasta" />
+                      <history id="2891970512fa2d5a"
+                          user_email="test@bx.psu.edu"
+                          user_id="2"
+                          display_name="test_history"/>
+                      <metadata
+                          dbkey="hg17"
+                          data_lines="2881"
+                          sequences="1"
+                          />
+                      <tool
+                          tool_id="upload1"
+                          tool_version="1.1.4"
+                          />
+                    </metadata>
+                  </genome>
         </genomes>
         <general>
             <defaultLocation></defaultLocation>
@@ -17,7 +37,14 @@
             <show_menu>true</show_menu>
             <hideGenomeOptions>false</hideGenomeOptions>
         </general>
+        <galaxyUrl>http://localhost:8080</galaxyUrl>
     </metadata>
     <tracks>
     </tracks>
+    <plugins
+        ComboTrackSelector=""
+        Bookmarks=""
+        GCContent=""
+        theme=""
+        />
 </root>
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/gencode/test.xml
--- a/test-data/gencode/test.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/gencode/test.xml Wed Nov 15 15:15:27 2017 -0500
b
@@ -3,7 +3,27 @@
     <metadata>
         <gencode>11</gencode>
         <genomes>
-                  <genome>/tmp/tmps5cL_a/files/000/dataset_3.dat</genome>
+                  <genome path="/tmp/tmpnh6QWY/files/000/dataset_3.dat">
+                    <metadata>
+                      <dataset id="54f2a3a23292eb07" hid="1"
+                          size="171.6 KB"
+                          edam_format="format_1929"
+                          file_ext="fasta" />
+                      <history id="5729865256bc2525"
+                          user_email="test@bx.psu.edu"
+                          user_id="2"
+                          display_name="test_history"/>
+                      <metadata
+                          dbkey="hg17"
+                          data_lines="2881"
+                          sequences="1"
+                          />
+                      <tool
+                          tool_id="upload1"
+                          tool_version="1.1.4"
+                          />
+                    </metadata>
+                  </genome>
         </genomes>
         <general>
             <defaultLocation></defaultLocation>
@@ -17,7 +37,14 @@
             <show_menu>true</show_menu>
             <hideGenomeOptions>false</hideGenomeOptions>
         </general>
+        <galaxyUrl>http://localhost:8080</galaxyUrl>
     </metadata>
     <tracks>
     </tracks>
+    <plugins
+        ComboTrackSelector=""
+        Bookmarks=""
+        GCContent=""
+        theme=""
+        />
 </root>
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/gff3/test.xml
--- a/test-data/gff3/test.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/gff3/test.xml Wed Nov 15 15:15:27 2017 -0500
b
b'@@ -3,7 +3,27 @@\n     <metadata>\n         <gencode>11</gencode>\n         <genomes>\n-                  <genome>test-data/merlin.fa</genome>\n+                  <genome path="/tmp/tmpnh6QWY/files/000/dataset_5.dat">\n+                    <metadata>\n+                      <dataset id="7b55dbb89df8f4e5" hid="1"\n+                          size="171.6 KB"\n+                          edam_format="format_1929"\n+                          file_ext="fasta" />\n+                      <history id="54f2a3a23292eb07"\n+                          user_email="test@bx.psu.edu"\n+                          user_id="2"\n+                          display_name="test_history"/>\n+                      <metadata\n+                          dbkey="hg17"\n+                          data_lines="2881"\n+                          sequences="1"\n+                          />\n+                      <tool\n+                          tool_id="upload1"\n+                          tool_version="1.1.4"\n+                          />\n+                    </metadata>\n+                  </genome>\n         </genomes>\n         <general>\n             <defaultLocation></defaultLocation>\n@@ -17,22 +37,122 @@\n             <show_menu>true</show_menu>\n             <hideGenomeOptions>false</hideGenomeOptions>\n         </general>\n+        <galaxyUrl>http://localhost:8080</galaxyUrl>\n     </metadata>\n     <tracks>\n         <track cat="Auto Coloured" format="gene_calls" visibility="default_off">\n             <files>\n-              <trackFile path="test-data/gff3/1.gff" ext="gff3" label="A"/>\n-              <trackFile path="test-data/gff3/1.gff" ext="gff3" label="B"/>\n-              <trackFile path="test-data/gff3/1.gff" ext="gff3" label="C"/>\n-              <trackFile path="test-data/gff3/1.gff" ext="gff3" label="D"/>\n+              <trackFile path="/tmp/tmpnh6QWY/files/000/dataset_6.dat" ext="gff3" label="A.gff">\n+                <metadata>\n+                  <dataset id="fa6d20d0fb68383f" hid="2"\n+                      size="2.3 KB"\n+                      edam_format="format_1975"\n+                      file_ext="gff3" />\n+                  <history id="54f2a3a23292eb07"\n+                      user_email="test@bx.psu.edu"\n+                      user_id="2"\n+                      display_name="test_history"/>\n+                  <metadata\n+                      dbkey="hg17"\n+                      data_lines="27"\n+                      comment_lines="19"\n+                      columns="9"\n+                      column_names=""\n+                      delimiter="__tc__"\n+                      attributes="6"\n+                      />\n+                  <tool\n+                      tool_id="upload1"\n+                      tool_version="1.1.4"\n+                      />\n+                </metadata>\n+              </trackFile>\n+              <trackFile path="/tmp/tmpnh6QWY/files/000/dataset_7.dat" ext="gff3" label="B.gff">\n+                <metadata>\n+                  <dataset id="683bc220e21425bb" hid="3"\n+                      size="2.3 KB"\n+                      edam_format="format_1975"\n+                      file_ext="gff3" />\n+                  <history id="54f2a3a23292eb07"\n+                      user_email="test@bx.psu.edu"\n+                      user_id="2"\n+                      display_name="test_history"/>\n+                  <metadata\n+                      dbkey="hg17"\n+                      data_lines="27"\n+                      comment_lines="19"\n+                      columns="9"\n+                      column_names=""\n+                      delimiter="__tc__"\n+                      attributes="6"\n+                      />\n+                  <tool\n+                      tool_id="upload1"\n+                      tool_version="1.1.4"\n+                      />\n+                </metadata>\n+              </trackFile>\n+              <trackFile path="/tmp/tmpnh6QWY/files/000/dataset_8.dat" ext="gff3" label="C.gff">\n+                <metadata>\n+                  <dataset id="a90a30fafe298e1e'..b'   </track>\n         <track cat="Realistic" format="gene_calls" visibility="default_off">\n             <files>\n-              <trackFile path="test-data/gff3/interpro.gff" ext="gff3" label="Interpro data"/>\n+              <trackFile path="/tmp/tmpnh6QWY/files/000/dataset_11.dat" ext="gff3" label="interpro.gff">\n+                <metadata>\n+                  <dataset id="9ce08b2254e4d5ed" hid="7"\n+                      size="103.3 KB"\n+                      edam_format="format_1975"\n+                      file_ext="gff3" />\n+                  <history id="54f2a3a23292eb07"\n+                      user_email="test@bx.psu.edu"\n+                      user_id="2"\n+                      display_name="test_history"/>\n+                  <metadata\n+                      dbkey="hg17"\n+                      data_lines="556"\n+                      comment_lines="2"\n+                      columns="9"\n+                      column_names=""\n+                      delimiter="__tc__"\n+                      attributes="11"\n+                      />\n+                  <tool\n+                      tool_id="upload1"\n+                      tool_version="1.1.4"\n+                      />\n+                </metadata>\n+              </trackFile>\n             </files>\n \n             <options>\n                 <style>\n+                    <overridePlugins>False</overridePlugins>\n+                    <overrideDraggable>False</overrideDraggable>\n                     <className>feature</className>\n                     <description>note,description</description>\n-                    <label>name,id</label>\n-                    <height>100px</height>\n+                    <label>product,name,id</label>\n+                    <height>10px</height>\n+                    <maxHeight>600</maxHeight>\n                 </style>\n                 <scaling>\n                         <method>ignore</method>\n@@ -241,15 +523,42 @@\n         </track>\n         <track cat="Realistic" format="gene_calls" visibility="default_off">\n             <files>\n-              <trackFile path="test-data/gff3/2.gff" ext="gff3" label="Match/Match Part"/>\n+              <trackFile path="/tmp/tmpnh6QWY/files/000/dataset_12.dat" ext="gff3" label="2.gff">\n+                <metadata>\n+                  <dataset id="80b8022ff3f677b7" hid="8"\n+                      size="326 bytes"\n+                      edam_format="format_1975"\n+                      file_ext="gff3" />\n+                  <history id="54f2a3a23292eb07"\n+                      user_email="test@bx.psu.edu"\n+                      user_id="2"\n+                      display_name="test_history"/>\n+                  <metadata\n+                      dbkey="hg17"\n+                      data_lines="3"\n+                      comment_lines="3"\n+                      columns="9"\n+                      column_names=""\n+                      delimiter="__tc__"\n+                      attributes="4"\n+                      />\n+                  <tool\n+                      tool_id="upload1"\n+                      tool_version="1.1.4"\n+                      />\n+                </metadata>\n+              </trackFile>\n             </files>\n \n             <options>\n                 <style>\n+                    <overridePlugins>False</overridePlugins>\n+                    <overrideDraggable>False</overrideDraggable>\n                     <className>feature</className>\n                     <description>note,description</description>\n-                    <label>name,id</label>\n-                    <height>100px</height>\n+                    <label>product,name,id</label>\n+                    <height>10px</height>\n+                    <maxHeight>600</maxHeight>\n                 </style>\n                 <scaling>\n                         <method>ignore</method>\n@@ -268,4 +577,10 @@\n             </options>\n         </track>\n     </tracks>\n+    <plugins\n+        ComboTrackSelector=""\n+        Bookmarks=""\n+        GCContent=""\n+        theme=""\n+        />\n </root>\n'
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/menus/test.xml
--- a/test-data/menus/test.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/menus/test.xml Wed Nov 15 15:15:27 2017 -0500
b
@@ -3,7 +3,27 @@
     <metadata>
         <gencode>11</gencode>
         <genomes>
-                  <genome>/tmp/tmplFZ5li/files/000/dataset_14.dat</genome>
+                  <genome path="/tmp/tmpnh6QWY/files/000/dataset_14.dat">
+                    <metadata>
+                      <dataset id="1ae74d26531588b0" hid="1"
+                          size="171.6 KB"
+                          edam_format="format_1929"
+                          file_ext="fasta" />
+                      <history id="8155e4b4bf1581ff"
+                          user_email="test@bx.psu.edu"
+                          user_id="2"
+                          display_name="test_history"/>
+                      <metadata
+                          dbkey="hg17"
+                          data_lines="2881"
+                          sequences="1"
+                          />
+                      <tool
+                          tool_id="upload1"
+                          tool_version="1.1.4"
+                          />
+                    </metadata>
+                  </genome>
         </genomes>
         <general>
             <defaultLocation></defaultLocation>
@@ -17,19 +37,47 @@
             <show_menu>true</show_menu>
             <hideGenomeOptions>false</hideGenomeOptions>
         </general>
+        <galaxyUrl>http://localhost:8080</galaxyUrl>
     </metadata>
     <tracks>
         <track cat="With menu or index" format="gene_calls" visibility="default_off">
             <files>
-              <trackFile path="/tmp/tmplFZ5li/files/000/dataset_15.dat" ext="gff3" label="1.gff" />
+              <trackFile path="/tmp/tmpnh6QWY/files/000/dataset_15.dat" ext="gff3" label="1.gff">
+                <metadata>
+                  <dataset id="440a6c2b5d9efe20" hid="2"
+                      size="2.3 KB"
+                      edam_format="format_1975"
+                      file_ext="gff3" />
+                  <history id="8155e4b4bf1581ff"
+                      user_email="test@bx.psu.edu"
+                      user_id="2"
+                      display_name="test_history"/>
+                  <metadata
+                      dbkey="hg17"
+                      data_lines="27"
+                      comment_lines="19"
+                      columns="9"
+                      column_names=""
+                      delimiter="__tc__"
+                      attributes="6"
+                      />
+                  <tool
+                      tool_id="upload1"
+                      tool_version="1.1.4"
+                      />
+                </metadata>
+              </trackFile>
             </files>
 
             <options>
                 <style>
+                    <overridePlugins>False</overridePlugins>
+                    <overrideDraggable>False</overrideDraggable>
                     <className>feature</className>
                     <description>note,description</description>
-                    <label>name,id</label>
-                    <height>100px</height>
+                    <label>product,name,id</label>
+                    <height>10px</height>
+                    <maxHeight>600</maxHeight>
                 </style>
                 <scaling>
                         <method>ignore</method>
@@ -62,15 +110,42 @@
         </track>
         <track cat="With menu or index" format="gene_calls" visibility="default_off">
             <files>
-              <trackFile path="/tmp/tmplFZ5li/files/000/dataset_15.dat" ext="gff3" label="1.gff" />
+              <trackFile path="/tmp/tmpnh6QWY/files/000/dataset_15.dat" ext="gff3" label="1.gff">
+                <metadata>
+                  <dataset id="440a6c2b5d9efe20" hid="2"
+                      size="2.3 KB"
+                      edam_format="format_1975"
+                      file_ext="gff3" />
+                  <history id="8155e4b4bf1581ff"
+                      user_email="test@bx.psu.edu"
+                      user_id="2"
+                      display_name="test_history"/>
+                  <metadata
+                      dbkey="hg17"
+                      data_lines="27"
+                      comment_lines="19"
+                      columns="9"
+                      column_names=""
+                      delimiter="__tc__"
+                      attributes="6"
+                      />
+                  <tool
+                      tool_id="upload1"
+                      tool_version="1.1.4"
+                      />
+                </metadata>
+              </trackFile>
             </files>
 
             <options>
                 <style>
+                    <overridePlugins>False</overridePlugins>
+                    <overrideDraggable>False</overrideDraggable>
                     <className>feature</className>
                     <description>note,description</description>
-                    <label>name,id</label>
-                    <height>100px</height>
+                    <label>product,name,id</label>
+                    <height>10px</height>
+                    <maxHeight>600</maxHeight>
                 </style>
                 <scaling>
                         <method>ignore</method>
@@ -88,4 +163,10 @@
             </options>
         </track>
     </tracks>
+    <plugins
+        ComboTrackSelector=""
+        Bookmarks=""
+        GCContent=""
+        theme=""
+        />
 </root>
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/track_config/test.xml
--- a/test-data/track_config/test.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/track_config/test.xml Wed Nov 15 15:15:27 2017 -0500
b
@@ -3,7 +3,27 @@
     <metadata>
         <gencode>11</gencode>
         <genomes>
-                  <genome>/tmp/tmplFZ5li/files/000/dataset_14.dat</genome>
+                  <genome path="/tmp/tmpnh6QWY/files/000/dataset_17.dat">
+                    <metadata>
+                      <dataset id="27ee89e2e3d631e0" hid="1"
+                          size="171.6 KB"
+                          edam_format="format_1929"
+                          file_ext="fasta" />
+                      <history id="7b55dbb89df8f4e5"
+                          user_email="test@bx.psu.edu"
+                          user_id="2"
+                          display_name="test_history"/>
+                      <metadata
+                          dbkey="hg17"
+                          data_lines="2881"
+                          sequences="1"
+                          />
+                      <tool
+                          tool_id="upload1"
+                          tool_version="1.1.4"
+                          />
+                    </metadata>
+                  </genome>
         </genomes>
         <general>
             <defaultLocation></defaultLocation>
@@ -17,19 +37,47 @@
             <show_menu>true</show_menu>
             <hideGenomeOptions>false</hideGenomeOptions>
         </general>
+        <galaxyUrl>http://localhost:8080</galaxyUrl>
     </metadata>
     <tracks>
         <track cat="With canvas config" format="gene_calls" visibility="default_off">
             <files>
-              <trackFile path="/tmp/tmplFZ5li/files/000/dataset_15.dat" ext="gff3" label="1.gff" />
+              <trackFile path="/tmp/tmpnh6QWY/files/000/dataset_18.dat" ext="gff3" label="1.gff">
+                <metadata>
+                  <dataset id="61f03d5eef6f1538" hid="2"
+                      size="2.3 KB"
+                      edam_format="format_1975"
+                      file_ext="gff3" />
+                  <history id="7b55dbb89df8f4e5"
+                      user_email="test@bx.psu.edu"
+                      user_id="2"
+                      display_name="test_history"/>
+                  <metadata
+                      dbkey="hg17"
+                      data_lines="27"
+                      comment_lines="19"
+                      columns="9"
+                      column_names=""
+                      delimiter="__tc__"
+                      attributes="6"
+                      />
+                  <tool
+                      tool_id="upload1"
+                      tool_version="1.1.4"
+                      />
+                </metadata>
+              </trackFile>
             </files>
 
             <options>
                 <style>
+                    <overridePlugins>False</overridePlugins>
+                    <overrideDraggable>False</overrideDraggable>
                     <className>feature</className>
                     <description>note,description</description>
-                    <label>name,id</label>
-                    <height>100px</height>
+                    <label>product,name,id</label>
+                    <height>10px</height>
+                    <maxHeight>600</maxHeight>
                 </style>
                 <scaling>
                         <method>ignore</method>
@@ -47,4 +95,10 @@
             </options>
         </track>
     </tracks>
+    <plugins
+        ComboTrackSelector=""
+        Bookmarks=""
+        GCContent=""
+        theme=""
+        />
 </root>
b
diff -r b5c5470d7c09 -r ff11d442feed test-data/vcf/test.xml
--- a/test-data/vcf/test.xml Wed Sep 13 13:07:20 2017 -0400
+++ b/test-data/vcf/test.xml Wed Nov 15 15:15:27 2017 -0500
b
@@ -5,6 +5,17 @@
         <genomes>
             <genome>test-data/merlin.fa</genome>
         </genomes>
+        <general>
+            <defaultLocation></defaultLocation>
+            <trackPadding>40</trackPadding>
+            <shareLink>true</shareLink>
+            <aboutDescription></aboutDescription>
+            <show_tracklist>true</show_tracklist>
+            <show_nav>true</show_nav>
+            <show_overview>false</show_overview>
+            <show_menu>true</show_menu>
+            <hideGenomeOptions>false</hideGenomeOptions>
+        </general>
     </metadata>
     <tracks>
         <track cat="Default" format="vcf">