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

Changeset 31:2bb2e07a7a21 (2019-04-15)
Previous changeset 30:ca2def38369c (2019-04-11) Next changeset 32:6b774e9d6387 (2019-07-16)
Commit message:
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse commit 12dff0abf006f6c81f6462cdf4ea9c0c740d1e9c
modified:
jbrowse.py
jbrowse.xml
macros.xml
test-data/bam/test.xml
test-data/gencode/test.xml
test-data/gff3/test.xml
test-data/menus/test.xml
test-data/track_config/test.xml
added:
test-data/custom_config/test.xml
b
diff -r ca2def38369c -r 2bb2e07a7a21 jbrowse.py
--- a/jbrowse.py Thu Apr 11 09:35:00 2019 -0400
+++ b/jbrowse.py Mon Apr 15 10:31:26 2019 -0400
[
@@ -80,8 +80,7 @@
             var opacity = (score - ({min})) / (({max}) - ({min}));
         """,
         'logarithmic': """
-            var opacity = (score - ({min})) / (({max}) - ({min}));
-            opacity = Math.log10(opacity) + Math.log10({max});
+            var opacity = Math.log10(score - ({min})) / Math.log10(({max}) - ({min}));
         """,
         'blast': """
             var opacity = 0;
@@ -682,6 +681,36 @@
         }
         self._add_track_json(data)
 
+    def traverse_to_option_parent(self, splitKey, outputTrackConfig):
+        trackConfigSubDict = outputTrackConfig
+        for part in splitKey[:-1]:
+            if trackConfigSubDict.get(part) is None:
+                trackConfigSubDict[part] = dict()
+            trackConfigSubDict = trackConfigSubDict[part]
+        assert isinstance(trackConfigSubDict, dict), 'Config element {} is not a dict'.format(trackConfigSubDict)
+        return trackConfigSubDict
+
+    def get_formatted_option(self, valType2ValDict, mapped_chars):
+        assert isinstance(valType2ValDict, dict) and len(valType2ValDict.items()) == 1
+        for valType, value in valType2ValDict.items():
+            if valType == "text":
+                for char, mapped_char in mapped_chars.items():
+                    value = value.replace(mapped_char, char)
+            elif valType == "integer":
+                value = int(value)
+            elif valType == "float":
+                value = float(value)
+            else:  # boolean
+                value = {'true': True, 'false': False}[value]
+            return value
+
+    def set_custom_track_options(self, customTrackConfig, outputTrackConfig, mapped_chars):
+        for optKey, optType2ValDict in customTrackConfig.items():
+            splitKey = optKey.split('.')
+            trackConfigOptionParent = self.traverse_to_option_parent(splitKey, outputTrackConfig)
+            optVal = self.get_formatted_option(optType2ValDict, mapped_chars)
+            trackConfigOptionParent[splitKey[-1]] = optVal
+
     def process_annotations(self, track):
         category = track['category'].replace('__pd__date__pd__', TODAY)
         outputTrackConfig = {
@@ -747,6 +776,10 @@
                 menus = self.cs.parse_menus(track['conf']['options'])
                 outputTrackConfig.update(menus)
 
+            customTrackConfig = track['conf']['options'].get('custom_config', {})
+            if customTrackConfig:
+                self.set_custom_track_options(customTrackConfig, outputTrackConfig, mapped_chars)
+
             # import pprint; pprint.pprint(track)
             # import sys; sys.exit()
             if dataset_ext in ('gff', 'gff3', 'bed'):
b
diff -r ca2def38369c -r 2bb2e07a7a21 jbrowse.xml
--- a/jbrowse.xml Thu Apr 11 09:35:00 2019 -0400
+++ b/jbrowse.xml Mon Apr 15 10:31:26 2019 -0400
[
b'@@ -210,6 +210,15 @@\n                   #end for\n                 </menus>\n             #end if\n+            #if str($track.data_format.data_format_select) in ["gene_calls", "pileup", "blast", "wiggle", "vcf"]:\n+                <custom_config>\n+                #for $custom_option in $track.data_format.jb_custom_config.option:\n+                  <${custom_option.opt_key}>\n+                    <${custom_option.opt_value.val_type}>${$custom_option.opt_value.val}</${custom_option.opt_value.val_type}>\n+                  </${custom_option.opt_key}>\n+                #end for\n+                </custom_config>\n+            #end if\n \n             #if str($track.data_format.data_format_select) == "wiggle":\n                 <wiggle>\n@@ -318,7 +327,8 @@\n         BlastView="${plugins.BlastView}"\n         theme=""\n         />\n-</root>]]></configfile>\n+</root>\n+]]></configfile>\n   </configfiles>\n   <inputs>\n     <conditional name="reference_genome">\n@@ -431,11 +441,13 @@\n                 <expand macro="color_selection"\n                         token_scaling_lin_select="false"\n                         token_scaling_log_select="true" />\n+                <expand macro="track_custom_config" />\n                 <expand macro="track_menu" />\n                 <expand macro="track_display" />\n             </when>\n             <when value="vcf">\n                 <expand macro="input_conditional" label="SNP Track Data" format="vcf" />\n+                <expand macro="track_custom_config" />\n                 <expand macro="track_display" />\n             </when>\n             <when value="gene_calls">\n@@ -487,6 +499,7 @@\n                         description="note,description"\n                         height="10px"/>\n                 <expand macro="color_selection" />\n+                <expand macro="track_custom_config" />\n                 <expand macro="track_menu" />\n                 <expand macro="track_display" />\n             </when>\n@@ -503,6 +516,7 @@\n                        type="integer"\n                        help="Maximum size in bytes of BAM chunks that the browser will try to deal with. When this is exceeded, most tracks will display \'Too much data\' message."\n                        value="5000000" />\n+                <expand macro="track_custom_config" />\n                 <expand macro="track_display" />\n             </when>\n             <when value="wiggle">\n@@ -545,6 +559,7 @@\n                     help="MultiBigWig is a plugin to group multiple big-wig tracks in a more aesthetically pleasing format and to show data in a higher density display." />\n \n                 <expand macro="color_selection_minmax" />\n+                <expand macro="track_custom_config" />\n                 <expand macro="track_display" />\n             </when>\n             <when value="rest">\n@@ -642,7 +657,7 @@\n       <param name="gencode" value="1" />\n       <param name="standalone" value="Data Directory" />\n       <param name="uglyTestingHack" value="enabled" />\n-      <output name="output" file="gencode/test-1.xml" lines_diff="14"/>\n+      <output name="output" file="gencode/test-1.xml" lines_diff="16"/>\n     </test>\n     <test>\n       <param name="reference_genome|genome_type_select" value="history"/>\n@@ -650,7 +665,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="14"/>\n+      <output name="output" file="gencode/test.xml" lines_diff="16"/>\n     </test>\n     <test>\n       <param name="reference_genome|genome_type_select" value="history"/>\n@@ -846,7 +861,7 @@\n       </repeat>\n \n       <param name="uglyTestingHack" value="enabled" />\n-      <output name="output" file="gff3/test.xml" lines_diff="256" />\n+      <output name="output" file="gff3/test.xml" lines_diff="170" />\n     </test>\n     <test>\n         <param name="reference_genome|genome_type_select" value="history"/>\n@@ -909,7 +924,7 @@\n'..b'@ -946,7 +962,59 @@\n         </repeat>\n \n         <param name="uglyTestingHack" value="enabled" />\n-        <output name="output" file="track_config/test.xml" lines_diff="26"/>\n+        <output name="output" file="track_config/test.xml" lines_diff="30"/>\n+    </test>\n+    <test>\n+        <param name="reference_genome|genome_type_select" value="history"/>\n+        <param name="reference_genome|genome" value="merlin.fa"/>\n+        <param name="gencode" value="11" />\n+        <param name="standalone" value="Data Directory" />\n+\n+        <repeat name="track_groups">\n+            <param name="category" value="With custom track config" />\n+            <repeat name="data_tracks">\n+                <conditional name="data_format">\n+                    <param name="data_format_select" value="gene_calls"/>\n+                    <param name="annotation" value="gff3/1.gff"/>\n+                    <conditional name="match_part">\n+                        <param name="match_part_select" value="false"/>\n+                    </conditional>\n+                    <section name="jb_custom_config">\n+                        <repeat name="option">\n+                            <param name="opt_key" value="displayMode"/>\n+                            <conditional name="opt_value">\n+                                <param name="val_type" value="text"/>\n+                                <param name="val" value="collapsed"/>\n+                            </conditional>\n+                        </repeat>\n+                        <repeat name="option">\n+                            <param name="opt_key" value="histograms.height"/>\n+                            <conditional name="opt_value">\n+                                <param name="val_type" value="integer"/>\n+                                <param name="val" value="150"/>\n+                            </conditional>\n+                        </repeat>\n+                        <repeat name="option">\n+                            <param name="opt_key" value="maxFeatureScreenDensity"/>\n+                            <conditional name="opt_value">\n+                                <param name="val_type" value="float"/>\n+                                <param name="val" value="0.1"/>\n+                            </conditional>\n+                        </repeat>\n+                        <repeat name="option">\n+                            <param name="opt_key" value="style.strandArrow"/>\n+                            <conditional name="opt_value">\n+                                <param name="val_type" value="boolean"/>\n+                                <param name="val" value="false"/>\n+                            </conditional>\n+                        </repeat>\n+                    </section>\n+                </conditional>\n+            </repeat>\n+        </repeat>\n+\n+        <param name="uglyTestingHack" value="enabled" />\n+        <output name="output" file="custom_config/test.xml" lines_diff="30"/>\n     </test>\n     <test>\n         <param name="reference_genome|genome_type_select" value="history"/>\n@@ -965,7 +1033,7 @@\n         </repeat>\n \n         <param name="uglyTestingHack" value="enabled" />\n-        <output name="output" file="bam/test.xml" lines_diff="48"/>\n+        <output name="output" file="bam/test.xml" lines_diff="42"/>\n     </test>\n \n     <test>\n@@ -975,7 +1043,7 @@\n         <param name="gencode" value="1" />\n         <param name="standalone" value="Data Directory" />\n         <param name="uglyTestingHack" value="enabled" />\n-        <output name="output" file="gencode/test-data_table.xml" lines_diff="6" />\n+        <output name="output" file="gencode/test-data_table.xml" lines_diff="4" />\n     </test>\n \n     <test>\n@@ -1022,7 +1090,7 @@\n         </repeat>\n \n         <param name="uglyTestingHack" value="enabled" />\n-        <output name="output" file="endpoints/test.xml" lines_diff="48"/>\n+        <output name="output" file="endpoints/test.xml" lines_diff="16"/>\n     </test>\n   </tests>\n   <help><![CDATA[\n'
b
diff -r ca2def38369c -r 2bb2e07a7a21 macros.xml
--- a/macros.xml Thu Apr 11 09:35:00 2019 -0400
+++ b/macros.xml Mon Apr 15 10:31:26 2019 -0400
[
@@ -14,7 +14,7 @@
     </requirements>
   </xml>
   <token name="@DATA_DIR@">\$GALAXY_JBROWSE_SHARED_DIR</token>
-  <token name="@WRAPPER_VERSION@">galaxy2</token>
+  <token name="@WRAPPER_VERSION@">galaxy3</token>
   <token name="@ATTRIBUTION@"><![CDATA[
 **Attribution**
 
@@ -290,6 +290,44 @@
     </section>
   </xml>
 
+  <xml name="track_custom_config">
+    <section name="jb_custom_config" title="JBrowse Custom Track Config [Advanced]" expanded="false">
+      <repeat name="option" title="Custom Track Config Option">
+        <param name="opt_key" type="text" label="Key for JBrowse track config option"
+               help="Multilevel keys (e.g., 'style.label') are delimited by a period character ('.').">
+          <validator type="regex" message="Key must consist of alphanumeric characters only, possibly separated by the period character ('.')">^[\w]+(\.\w+)*$</validator>
+        </param>
+        <conditional name="opt_value">
+          <param name="val_type" type="select" label="Choose the type of value for the option">
+            <option value="text" selected="true">Text</option>
+            <option value="integer">Integer number</option>
+            <option value="float">Floating point number</option>
+            <option value="boolean">Boolean</option>
+          </param>
+          <when value="text">
+            <param name="val" type="text" label="Value for custom track option."
+                   help="Will override other track options set elsewhere.">
+              <validator type="empty_field" />
+            </param>
+          </when>
+          <when value="integer">
+            <param name="val" type="integer" value="0" label="Value for custom track option."
+                   help="Will override other track options set elsewhere." />
+          </when>
+          <when value="float">
+            <param name="val" type="float" value="0" label="Value for custom track option."
+                   help="Will override other track options set elsewhere." />
+          </when>
+          <when value="boolean">
+            <param name="val" type="boolean" truevalue="true" falsevalue="false"
+                   label="Value for custom track option."
+                   help="Will override other track options set elsewhere." />
+          </when>
+        </conditional>
+      </repeat>
+    </section>
+  </xml>
+
   <xml name="track_menu">
     <section name="jbmenu" title="JBrowse Contextual Menu options [Advanced]" expanded="false">
       <repeat name="track_menu" title="Track Menu">
b
diff -r ca2def38369c -r 2bb2e07a7a21 test-data/bam/test.xml
--- a/test-data/bam/test.xml Thu Apr 11 09:35:00 2019 -0400
+++ b/test-data/bam/test.xml Mon Apr 15 10:31:26 2019 -0400
[
b'@@ -54,15 +54,14 @@\n                       display_name="test_history"/>\n                   <metadata\n                       dbkey="?"\n-                      bam_index="__lt__galaxy.model.MetadataFile object at 0x7f6200f6d1d0__gt__"\n                       bam_version="1.3"\n                       sort_order="coordinate"\n-                      read_groups=""\n                       reference_names="[SafeStringWrapper(unicode:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f62008d8a70 on: u__sq__Merlin__sq__]"\n                       reference_lengths="[172788]"\n                       bam_header="{SafeStringWrapper(unicode:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f62006f0a10 on: u__sq__SQ__sq__: [{SafeStringWrapper(unicode:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f62006f0d70 on: u__sq__LN__sq__: 172788, SafeStringWrapper(unicode:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f62006f0f50 on: u__sq__SN__sq__: SafeStringWrapper(unicode:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200fe0470 on: u__sq__Merlin__sq__}], SafeStringWrapper(unicode:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200fe0b90 on: u__sq__PG__sq__: [{SafeStringWrapper(unicode:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200fe07d0 on: u__sq__PN__sq__: SafeStringWrapper(unicode:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__'..b'.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200e95730 on: __sq__CIGAR__sq__, SafeStringWrapper(str:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200e95d60 on: __sq__MRNM__sq__, SafeStringWrapper(str:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200e95d08 on: __sq__MPOS__sq__, SafeStringWrapper(str:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200e95c58 on: __sq__ISIZE__sq__, SafeStringWrapper(str:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200e952b8 on: __sq__SEQ__sq__, SafeStringWrapper(str:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200e95418 on: __sq__QUAL__sq__, SafeStringWrapper(str:__lt__class __sq__galaxy.tools.wrappers.ToolParameterValueWrapper__sq____gt__,__lt__class __sq__galaxy.util.object_wrapper.SafeStringWrapper__sq____gt__,__lt__class __sq__numbers.Number__sq____gt__,__lt__type __sq__NoneType__sq____gt__,__lt__type __sq__NotImplementedType__sq____gt__,__lt__type __sq__bool__sq____gt__,__lt__type __sq__bytearray__sq____gt__,__lt__type __sq__ellipsis__sq____gt__) object at 7f6200e95998 on: __sq__OPT__sq__]"\n+                      bam_index="__lt__galaxy.model.MetadataFile object at 0x7f6200f6d1d0__gt__"\n                       />\n                   <tool\n                       tool_id="upload1"\n@@ -73,12 +72,15 @@\n             </files>\n \n             <options>\n+                <custom_config>\n+                </custom_config>\n \n                 <pileup>\n                     <auto_snp>false</auto_snp>\n                     <bam_indices>\n                         <bam_index>/tmp/tmpWtvfKr/files/_metadata_files/000/metadata_1.dat</bam_index>\n                     </bam_indices>\n+                    <chunkSizeLimit>5000000</chunkSizeLimit>\n                 </pileup>\n             </options>\n         </track>\n@@ -87,6 +89,7 @@\n         ComboTrackSelector=""\n         Bookmarks=""\n         GCContent=""\n+        BlastView="True"\n         theme=""\n         />\n-</root>\n\\ No newline at end of file\n+</root>\n'
b
diff -r ca2def38369c -r 2bb2e07a7a21 test-data/custom_config/test.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/custom_config/test.xml Mon Apr 15 10:31:26 2019 -0400
b
@@ -0,0 +1,119 @@
+<?xml version="1.0"?>
+<root>
+    <metadata>
+        <gencode>11</gencode>
+        <genomes>
+              <genome path="/tmp/tmpWtvfKr/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="?"
+                      data_lines="2881"
+                      sequences="1"
+                      />
+                  <tool
+                      tool_id="upload1"
+                      tool_version="1.1.6"
+                      />
+                </metadata>
+              </genome>
+        </genomes>
+        <general>
+            <defaultLocation></defaultLocation>
+            <trackPadding>20</trackPadding>
+
+            <shareLink>true</shareLink>
+            <aboutDescription></aboutDescription>
+            <show_tracklist>true</show_tracklist>
+            <show_nav>true</show_nav>
+            <show_overview>true</show_overview>
+            <show_menu>true</show_menu>
+            <hideGenomeOptions>false</hideGenomeOptions>
+        </general>
+        <galaxyUrl>http://localhost</galaxyUrl>
+    </metadata>
+    <tracks>
+        <track cat="With custom track config" format="gene_calls" visibility="default_off">
+            <files>
+              <trackFile path="/tmp/tmpWtvfKr/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="?"
+                      data_lines="27"
+                      comment_lines="19"
+                      columns="9"
+                      delimiter="__tc__"
+                      attributes="6"
+                      />
+                  <tool
+                      tool_id="upload1"
+                      tool_version="1.1.6"
+                      />
+                </metadata>
+              </trackFile>
+            </files>
+
+            <options>
+                <style>
+                    <overridePlugins>False</overridePlugins>
+                    <overrideDraggable>False</overrideDraggable>
+                    <className>feature2</className>
+                    <description>note,description</description>
+                    <label>product,name,id</label>
+                    <height>10px</height>
+                    <maxHeight>600</maxHeight>
+                </style>
+                <scaling>
+                        <method>ignore</method>
+                        <scheme>
+                            <color>__auto__</color>
+                        </scheme>
+                </scaling>
+                <menus>
+                </menus>
+                <custom_config>
+                  <displayMode>
+                    <text>collapsed</text>
+                  </displayMode>
+                  <histograms.height>
+                    <integer>150</integer>
+                  </histograms.height>
+                  <maxFeatureScreenDensity>
+                    <float>0.1</float>
+                  </maxFeatureScreenDensity>
+                  <style.strandArrow>
+                    <boolean>false</boolean>
+                  </style.strandArrow>
+                </custom_config>
+
+                <gff>
+                    <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
+                    <topLevelFeatures>mRNA</topLevelFeatures>
+                    <index>false</index>
+                </gff>
+            </options>
+        </track>
+    </tracks>
+    <plugins
+        ComboTrackSelector=""
+        Bookmarks=""
+        GCContent=""
+        BlastView="True"
+        theme=""
+        />
+</root>
b
diff -r ca2def38369c -r 2bb2e07a7a21 test-data/gencode/test.xml
--- a/test-data/gencode/test.xml Thu Apr 11 09:35:00 2019 -0400
+++ b/test-data/gencode/test.xml Mon Apr 15 10:31:26 2019 -0400
b
@@ -45,6 +45,7 @@
         ComboTrackSelector=""
         Bookmarks=""
         GCContent=""
+        BlastView="True"
         theme=""
         />
 </root>
b
diff -r ca2def38369c -r 2bb2e07a7a21 test-data/gff3/test.xml
--- a/test-data/gff3/test.xml Thu Apr 11 09:35:00 2019 -0400
+++ b/test-data/gff3/test.xml Mon Apr 15 10:31:26 2019 -0400
b
@@ -158,6 +158,8 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
@@ -212,6 +214,8 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
@@ -272,6 +276,8 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
@@ -332,6 +338,8 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
@@ -394,6 +402,8 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
@@ -456,6 +466,8 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
@@ -510,6 +522,8 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
@@ -564,6 +578,8 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
b
diff -r ca2def38369c -r 2bb2e07a7a21 test-data/menus/test.xml
--- a/test-data/menus/test.xml Thu Apr 11 09:35:00 2019 -0400
+++ b/test-data/menus/test.xml Mon Apr 15 10:31:26 2019 -0400
b
@@ -57,7 +57,6 @@
                       data_lines="27"
                       comment_lines="19"
                       columns="9"
-                      column_names=""
                       delimiter="__tc__"
                       attributes="6"
                       />
@@ -73,7 +72,7 @@
                 <style>
                     <overridePlugins>False</overridePlugins>
                     <overrideDraggable>False</overrideDraggable>
-                    <className>feature</className>
+                    <className>feature2</className>
                     <description>note,description</description>
                     <label>product,name,id</label>
                     <height>10px</height>
@@ -101,9 +100,12 @@
                       <iconClass>dijitIconBookmark</iconClass>
                   </menu>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
-                    <trackType>JBrowse/View/Track/CanvasFeatures</trackType>
+                    <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
+                    <topLevelFeatures>mRNA</topLevelFeatures>
                     <index>false</index>
                 </gff>
             </options>
@@ -125,7 +127,6 @@
                       data_lines="27"
                       comment_lines="19"
                       columns="9"
-                      column_names=""
                       delimiter="__tc__"
                       attributes="6"
                       />
@@ -141,7 +142,7 @@
                 <style>
                     <overridePlugins>False</overridePlugins>
                     <overrideDraggable>False</overrideDraggable>
-                    <className>feature</className>
+                    <className>feature2</className>
                     <description>note,description</description>
                     <label>product,name,id</label>
                     <height>10px</height>
@@ -155,9 +156,12 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
-                    <trackType>JBrowse/View/Track/CanvasFeatures</trackType>
+                    <trackType>NeatHTMLFeatures/View/Track/NeatFeatures</trackType>
+                    <topLevelFeatures>mRNA</topLevelFeatures>
                     <index>true</index>
                 </gff>
             </options>
@@ -167,6 +171,7 @@
         ComboTrackSelector=""
         Bookmarks=""
         GCContent=""
+        BlastView="True"
         theme=""
         />
-</root>
\ No newline at end of file
+</root>
b
diff -r ca2def38369c -r 2bb2e07a7a21 test-data/track_config/test.xml
--- a/test-data/track_config/test.xml Thu Apr 11 09:35:00 2019 -0400
+++ b/test-data/track_config/test.xml Mon Apr 15 10:31:26 2019 -0400
b
@@ -57,7 +57,6 @@
                       data_lines="27"
                       comment_lines="19"
                       columns="9"
-                      column_names=""
                       delimiter="__tc__"
                       attributes="6"
                       />
@@ -73,7 +72,7 @@
                 <style>
                     <overridePlugins>False</overridePlugins>
                     <overrideDraggable>False</overrideDraggable>
-                    <className>feature</className>
+                    <className>feature2</className>
                     <description>note,description</description>
                     <label>product,name,id</label>
                     <height>10px</height>
@@ -87,9 +86,14 @@
                 </scaling>
                 <menus>
                 </menus>
+                <custom_config>
+                </custom_config>
 
                 <gff>
                     <trackType>JBrowse/View/Track/CanvasFeatures</trackType>
+                    <transcriptType>transcript</transcriptType>
+                    <subParts>exon</subParts>
+                    <impliedUTRs>true</impliedUTRs>
                     <index>false</index>
                 </gff>
             </options>
@@ -99,6 +103,7 @@
         ComboTrackSelector=""
         Bookmarks=""
         GCContent=""
+        BlastView="True"
         theme=""
         />
-</root>
\ No newline at end of file
+</root>