changeset 97:74074746ccd8 draft

planemo upload for repository https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 commit 1c04ea76330d0148a7682b3c26846e5a5df21f99
author fubar
date Sat, 01 Jun 2024 05:37:13 +0000
parents 5ef1ba2031f2
children b1260bca5fdc
files README.md Screenshot at 2024-04-30 16-11-29.png autogenJB2.py dm4_in_jb2.png jb210demotracks.png jb2_samplerMay5.png jbrowse2.py jbrowse2.xml jbrowse8.png macros.xml readme.rst
diffstat 10 files changed, 620 insertions(+), 792 deletions(-) [+]
line wrap: on
line diff
Binary file Screenshot at 2024-04-30 16-11-29.png has changed
--- a/autogenJB2.py	Thu Apr 25 07:25:52 2024 +0000
+++ b/autogenJB2.py	Sat Jun 01 05:37:13 2024 +0000
@@ -77,7 +77,7 @@
                     for i, x in enumerate(genome_paths)
                 ],
             )
-            logging.debug("@@@ paths=%s, genomes=%s" % (genome_paths, genomes))
+            logging.debug("@@@autogenJB2 paths=%s, genomes=%s" % (genome_paths, genomes))
             assref_name = jc.process_genomes(genomes[0])
             if not default_session_data.get(assref_name, None):
                 default_session_data[assref_name] = {
@@ -90,7 +90,6 @@
                     },
                 }
             listtracks = trackList
-            # foo.paf must have a foo_paf.fasta or fasta.gz to match
             tnames = [x[2] for x in listtracks]
             texts = [x[1] for x in listtracks]
             for i, track in enumerate(listtracks):
@@ -105,22 +104,20 @@
                 if tpath.startswith("http://") or tpath.startswith("https://"):
                     useuri = "yes"
                 if trext == "paf":
-                    refname = trackname + "_paf.fasta"
-                    refdat = [x[2] for x in listtracks if x[2] == refname]
-                    if not refdat:
+                    refdat = ["%s ~ %s" % (x[0],x[2]) for x in listtracks if x[1] in ["fasta", "fasta.gz"]]
+                    if len(refdat) == 0:
                         jc.logging.warn(
-                            "!! No reference file %s corresponding to paf file %s found. Not building - there must be a corresponding fasta for each paf"
-                            % (refname, trackname)
+                            "!! No reference file for %s found. Using main reference"
+                            % (refname)
                         )
-                        sys.exit(3)
+                        refdat = ["%s ~ %s" % (genomes[0].path, assref_name),]
                     else:
                         track_conf.update(
                             {
                                 "conf": {
                                     "options": {
                                         "paf": {
-                                            "genome": refdat,
-                                            "genome_label": trackname,
+                                            "genome": ",".join(refdat)
                                         }
                                     }
                                 }
Binary file dm4_in_jb2.png has changed
Binary file jb210demotracks.png has changed
Binary file jb2_samplerMay5.png has changed
--- a/jbrowse2.py	Thu Apr 25 07:25:52 2024 +0000
+++ b/jbrowse2.py	Sat Jun 01 05:37:13 2024 +0000
@@ -22,7 +22,7 @@
 JB2VER = "v2.11.0"
 # version pinned if cloning - but not cloning now
 logCommands = True
-# useful for seeing what's being written but not for production setups
+# useful for seeing what's being written but NOT for production setups
 TODAY = datetime.datetime.now().strftime("%Y-%m-%d")
 SELF_LOCATION = os.path.dirname(os.path.realpath(__file__))
 GALAXY_INFRASTRUCTURE_URL = None
@@ -41,32 +41,6 @@
 }
 
 
-INDEX_TEMPLATE = """<!doctype html>
-<html lang="en" style="height:100%">
-<head>
-<meta charset="utf-8"/>
-<link rel="shortcut icon" href="./favicon.ico"/>
-<meta name="viewport" content="width=device-width,initial-scale=1"/>
-<meta name="theme-color" content="#000000"/>
-<meta name="description" content="A fast and flexible genome browser"/>
-<link rel="manifest" href="./manifest.json"/>
-<title>JBrowse</title>
-</script>
-</head>
-<body style="overscroll-behavior:none; height:100%; margin: 0;">
-<iframe
-  id="jbframe"
-  title="JBrowse2"
-  frameborder="0"
-  width="100%"
-  height="100%"
-  src='index_noview.html?config=config.json__SESSION_SPEC__'>
-</iframe>
-</body>
-</html>
-"""
-
-
 class ColorScaling(object):
 
     COLOR_FUNCTION_TEMPLATE = """
@@ -491,7 +465,8 @@
             nrow = len(fl)
         else:
             try:
-                scontext = ssl.SSLContext(ssl.PROTOCOL_TLS)
+                scontext = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
+                scontext.check_hostname = False
                 scontext.verify_mode = ssl.VerifyMode.CERT_NONE
                 with urllib.request.urlopen(url, context=scontext) as f:
                     fl = f.readlines()
@@ -544,7 +519,8 @@
         """
         if useuri:
             faname = fapath
-            scontext = ssl.SSLContext(ssl.PROTOCOL_TLS)
+            scontext = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
+            scontext.check_hostname = False
             scontext.verify_mode = ssl.VerifyMode.CERT_NONE
             with urllib.request.urlopen(url=faname + ".fai", context=scontext) as f:
                 fl = f.readline()
@@ -897,7 +873,7 @@
             genseqad = gsa[0]["genome_sequence_adapter"]
         else:
             genseqad = "Not found"
-            logging.warn("No adapter found for cram %s in gsa=%s" % (tId, gsa))
+            logging.warning("No adapter found for cram %s in gsa=%s" % (tId, gsa))
         if useuri:
             url = data
         else:
@@ -965,7 +941,7 @@
             url = data
         else:
             url = tId
-            dest = "%s/%s" % (self.outdir, url)
+            dest = os.path.join(self.outdir, url)
             cmd = "bgzip -c %s  > %s" % (data, dest)
             self.subprocess_popen(cmd)
             cmd = ["tabix", "-f", "-p", "vcf", dest]
@@ -1032,7 +1008,7 @@
             url = trackData["path"]
         else:
             url = tId + ".gz"
-            dest = "%s/%s" % (self.outdir, url)
+            dest = os.path.join(self.outdir, url)
             self._sort_gff(data, dest)
         categ = trackData["category"]
         trackDict = {
@@ -1078,7 +1054,7 @@
             url = data
         else:
             url = tId + ".gz"
-            dest = "%s/%s" % (self.outdir, url)
+            dest = os.path.join(self.outdir, url)
             self._sort_bed(data, dest)
         trackDict = {
             "type": "FeatureTrack",
@@ -1125,7 +1101,7 @@
         url = tId
         useuri = data.startswith("http://") or data.startswith("https://")
         if not useuri:
-            dest = "%s/%s" % (self.outdir, url)
+            dest = os.path.join(self.outdir, url)
             self.symlink_or_copy(os.path.realpath(data), dest)
             nrow = self.getNrow(dest)
         else:
@@ -1327,6 +1303,7 @@
          https://github.com/abretaud/tools-iuc/blob/jbrowse2/tools/jbrowse2/jbrowse2.py
         """
         # TODO using the default session for now, but check out session specs in the future https://github.com/GMOD/jbrowse-components/issues/2708
+        bpPerPx = 50 # this is tricky since browser window width is unknown - this seems a compromise that sort of works....
         track_types = {}
         with open(self.config_json_file, "r") as config_file:
             config_json = json.load(config_file)
@@ -1365,24 +1342,17 @@
                             "displays": [style_data],
                         }
                     )
-            view_json = {
-                "type": "LinearGenomeView",
-                "offsetPx": 0,
-                "minimized": False,
-                "tracks": tracks_data,
-            }
             first = [x for x in self.ass_first_contigs if x[0] == gnome]
-            if len(first) > 0:
-                [gnome, refName, end] = first[0]
-                start = 0
-                end = int(end)
-                drdict = {
-                    "refName": refName,
-                    "start": start,
-                    "end": end,
+            drdict = {
                     "reversed": False,
                     "assemblyName": gnome,
                 }
+            if len(first) > 0:
+                [gnome, refName, end] = first[0]
+                drdict["refName"] = refName
+                drdict["start"] = 0
+                end = int(end)
+                drdict["end"] = end        
             else:
                 ddl = default_data.get("defaultLocation", None)
                 if ddl:
@@ -1400,6 +1370,13 @@
                             "@@@ regexp could not match contig:start..end in the supplied location %s - please fix"
                             % ddl
                         )
+            view_json = {
+                "type": "LinearGenomeView",
+                "offsetPx": 0,
+                "bpPerPx" : bpPerPx,
+                "minimized": False,
+                "tracks": tracks_data
+            }
             if drdict.get("refName", None):
                 # TODO displayedRegions is not just zooming to the region, it hides the rest of the chromosome
                 view_json["displayedRegions"] = [
@@ -1415,7 +1392,6 @@
         for key, value in mapped_chars.items():
             session_name = session_name.replace(value, key)
         session_json["name"] = session_name
-
         if "views" not in session_json:
             session_json["views"] = session_views
         else:
@@ -1429,14 +1405,7 @@
 
     def add_defsess_to_index(self, data):
         """
-        PROBABLY NOW BROKEN by changes since this was deprecated temporarily as at April 18
-
-        Included on request of the new codeowner, from Anthony's IUC PR.
-        Had to be fixed to keep each assembly with the associated tracks for a default view.
-        Originally used only the first assembly, putting all tracks there and so breaking some
-        when tested with 2 or more.
-
-         ----------------------------------------------------------
+        ----------------------------------------------------------
         Add some default session settings: set some assemblies/tracks on/off
 
         This allows to select a default view:
@@ -1461,6 +1430,33 @@
         https://github.com/GMOD/jbrowse-components/discussions/3568
         https://github.com/GMOD/jbrowse-components/pull/4148
         """
+
+
+        INDEX_TEMPLATE = """<!doctype html>
+        <html lang="en" style="height:100%">
+        <head>
+        <meta charset="utf-8"/>
+        <link rel="shortcut icon" href="./favicon.ico"/>
+        <meta name="viewport" content="width=device-width,initial-scale=1"/>
+        <meta name="theme-color" content="#000000"/>
+        <meta name="description" content="A fast and flexible genome browser"/>
+        <link rel="manifest" href="./manifest.json"/>
+        <title>JBrowse</title>
+        </script>
+        </head>
+        <body style="overscroll-behavior:none; height:100%; margin: 0;">
+        <iframe
+        id="jbframe"
+        title="JBrowse2"
+        frameborder="0"
+        width="100%"
+        height="100%"
+        src='index_noview.html?config=config.json__SESSION_SPEC__'>
+        </iframe>
+        </body>
+        </html>
+        """
+
         new_index = "Nothing written"
         session_spec = {"views": []}
         logging.debug("def ass_first=%s\ndata=%s" % (self.ass_first_contigs, data))
@@ -1544,10 +1540,15 @@
             "version.txt",
             "test_data",
         ]:
-            cmd = ["rm", "-rf", os.path.join(dest, fn)]
-            self.subprocess_check_call(cmd)
-        cmd = ["cp", os.path.join(INSTALLED_TO, "jb2_webserver.py"), dest]
-        self.subprocess_check_call(cmd)
+            try:
+                path = os.path.join(dest, fn)
+                if os.path.isdir(path):
+                    shutil.rmtree(path)
+                else:
+                    os.remove(path)
+            except OSError as e:
+                log.error("Error: %s - %s." % (e.filename, e.strerror))
+        shutil.copyfile(os.path.join(INSTALLED_TO, "jb2_webserver.py"), os.path.join(dest, "jb2_webserver.py"))
 
 
 def parse_style_conf(item):
@@ -1561,7 +1562,7 @@
     parser = argparse.ArgumentParser(description="", epilog="")
     parser.add_argument("--xml", help="Track Configuration")
     parser.add_argument(
-        "--jbrowse2path", help="Path to JBrowse2 directory in biocontainer or Conda"
+        "--jbrowse2path", help="Path to JBrowse2 directory in BioContainer or Conda"
     )
     parser.add_argument("--outdir", help="Output directory", default="out")
     parser.add_argument("--version", "-V", action="version", version=JB2VER)
--- a/jbrowse2.xml	Thu Apr 25 07:25:52 2024 +0000
+++ b/jbrowse2.xml	Sat Jun 01 05:37:13 2024 +0000
@@ -3,12 +3,23 @@
     <macros>
         <import>macros.xml</import>
     </macros>
-    <expand macro="edamInc" />
+    <expand macro="edamInc"/>
     <xrefs>
         <xref type="bio.tools">jbrowse2</xref>
     </xrefs>
     <expand macro="requirements" />
+    <expand macro="creators"/>
     <version_command>python '${__tool_directory__}/jbrowse2.py' --version</version_command>
+    <required_files>
+        <include path="autogenJB2.py" />
+        <include path="blastxml_to_gapped_gff3.py" />
+        <include path="convertMAF.sh" />
+        <include path="gff3_rebase.py" />
+        <include path="jb2_urlconf.py" />
+        <include path="jb2_webserver.py" />
+        <include path="jbrowse2.py" />
+        <include path="maf2bed.py" />
+    </required_files>
     <command detect_errors="aggressive"><![CDATA[
 mkdir -p '$output.files_path' &&
 cp '$trackxml' '$output.files_path/galaxy.xml' &&
@@ -19,9 +30,9 @@
         #if $autoCollection[$key].is_collection:
             #set subCol=$autoCollection[$key]
             #set pafs=[($subCol[x],$subcol[x].ext,x) for x in $subCol.keys() if $subCol[x].ext == 'paf']
+            #set refs=[($subCol[x],$subcol[x].ext,x) for x in $subCol.keys() if $subCol[x].ext in ['fasta.gz','fasta']]
             #if len($pafs) > 0:
                  --pafmeta '$pafs[0]'
-                #set refs = [($pafs[0][2],$subCol[x],x) for x in $subCol.keys() if $subCol[x].ext == 'fasta']
                 #for $ref in $refs:
                  --pafreferencemeta '$ref'
                 #end for
@@ -310,67 +321,39 @@
 ]]></configfile>
     </configfiles>
     <inputs>
-        <repeat name="assemblies" min="1"
-            title="Genome reference to provide display coordinates for this set of tracks"
-            help="JBrowse2 can show a set of tracks for each of multiple genome reference fasta files">
+        <repeat name="assemblies" min="1" title="Genome reference to provide display coordinates for this set of tracks" help="JBrowse2 can show a set of tracks for each of multiple genome reference fasta files">
             <conditional name="reference_genome">
-                <param help="Select a built in, history or remote tabix URI for the reference track"
-                    label="Reference genome source" name="genome_type_select" type="select">
+                <param name="genome_type_select" type="select" label="Reference genome source" help="Select a built in, history or remote tabix URI for the reference track">
                     <option selected="True" value="indexed">Use a Galaxy server built-in genome</option>
                     <option value="history">Use a genome fasta file from the current history</option>
                     <option value="uri">Provide a URI (e.g. "https://..." for a genome reference as
                         tabix bgzip with predictable index file URI</option>
                 </param>
                 <when value="indexed">
-                    <param
-                        help="If not listed, add a custom genome, use a history genome or a remote URI tabix genome"
-                        label="Select a built in reference genome or custom genome"
-                        name="genome"
-                        type="select"
-                        optional="true">
+                    <param name="genome" type="select" optional="true" label="Select a built in reference genome or custom genome" help="If not listed, add a custom genome, use a history genome or a remote URI tabix genome">
                         <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">
+                            <filter column="2" type="sort_by"/>
+                            <validator message="No genomes are available for the selected input dataset" type="no_options">
                             </validator>
                         </options>
                     </param>
                 </when>
                 <when value="history">
-                    <param
-                        format="fasta"
-                        label="Select the reference genome"
-                        name="genome"
-                        type="data"
-                        optional="true">
+                    <param name="genome" type="data" format="fasta" optional="true" label="Select the reference genome">
                     </param>
                 </when>
                 <when value="uri">
-                    <param
-                        label="URI pointing to tabix compressed fasta"
-                        name="uri"
-                        type="text">
+                    <param name="uri" type="text" label="URI pointing to tabix compressed fasta">
                     </param>
-                    <param
-                        label="Reference dbkey for tracks with this genome, such as hg38 or SacCer4"
-                        name="refname"
-                        type="text">
+                    <param name="refname" type="text" label="Reference dbkey for tracks with this genome, such as hg38 or SacCer4">
                     </param>
                 </when>
             </conditional>
-
             <repeat name="track_groups" title="Track Group">
-                <param label="Track Category"
-                    name="category"
-                    type="text"
-                    value="Default"
-                    help="Organise your tracks into Categories for a nicer end-user experience. You can use #date# and it will be replaced with the current date in 'yyyy-mm-dd' format,
-                which is very useful for repeatedly updating a JBrowse instance when member databases / underlying tool versions are updated."
-                    optional="False" />
+                <param name="category" type="text" value="Default" optional="False" label="Track Category" help="Organise your tracks into Categories for a nicer end-user experience. You can use #date# and it will be replaced with the current date in 'yyyy-mm-dd' format,                 which is very useful for repeatedly updating a JBrowse instance when member databases / underlying tool versions are updated."/>
                 <repeat name="data_tracks" title="Annotation Track">
                     <conditional name="data_format" label="Track Data Selection Options">
-                        <param type="select" label="Track Type" name="data_format_select">
+                        <param name="data_format_select" type="select" label="Track Type">
                             <option value="bam">BAM track. Recommend convert to faster BED unless
                                 mapping annotation needed</option>
                             <option value="bed">BED track</option>
@@ -389,114 +372,79 @@
                             <option value="vcf">VCF SNP track</option>
                         </param>
                         <when value="blastxml">
-                            <expand macro="input_conditional" label="BlastXML Track Data"
-                                format="blastxml" />
-                            <param label="Features used in Blast Search"
-                                help="in GFF3. This is used  so we know where to map features. E.g. where results of which CDS Protein32 match up to. The query IDs in your blast results should MATCH some feature
-                            IDs in your GFF3 file. This is an optional field and is most useful if using JBrowse to display protein blast results on a DNA genome. blastn results don't need this,
-                            blastp results on a protein sequence don't need this."
-                                format="gff3"
-                                name="blast_parent"
-                                optional="true"
-                                type="data" />
-                            <param label="Minimum Gap Size"
-                                help="before a new match_part feature is created"
-                                name="min_gap"
-                                type="integer"
-                                value="10"
-                                min="2" />
-                            <param label="Is this a protein blast search?"
-                                type="boolean"
-                                name="is_protein"
-                                truevalue="true"
-                                falsevalue="false" />
-                            <expand macro="track_styling_vgp" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="BlastXML Track Data" format="blastxml"/>
+                            <param name="blast_parent" type="data" format="gff3" optional="true" label="Features used in Blast Search" help="in GFF3. This is used  so we know where to map features. E.g. where results of which CDS Protein32 match up to. The query IDs in your blast results should MATCH some feature                             IDs in your GFF3 file. This is an optional field and is most useful if using JBrowse to display protein blast results on a DNA genome. blastn results don't need this,                             blastp results on a protein sequence don't need this."/>
+                            <param name="min_gap" type="integer" min="2" value="10" label="Minimum Gap Size" help="before a new match_part feature is created"/>
+                            <param name="is_protein" type="boolean" truevalue="true" falsevalue="false" label="Is this a protein blast search?"/>
+                            <expand macro="track_styling_vgp"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="vcf">
-                            <expand macro="input_conditional" label="SNP Track Data"
-                                format="vcf,vcf_bgzip" />
-                            <expand macro="track_styling_vcf" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="SNP Track Data" format="vcf,vcf_bgzip"/>
+                            <expand macro="track_styling_vcf"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="gff">
-                            <expand macro="input_conditional" label="GFF/GFF3 Track Data"
-                                format="gff,gff3" />
+                            <expand macro="input_conditional" label="GFF/GFF3 Track Data" format="gff,gff3"/>
                             <conditional name="match_part" label="match/match_part data">
-                                <param help="Match part data selection "
-                                    label="This is match/match_part data" name="match_part_select"
-                                    type="select">
+                                <param name="match_part_select" type="select" label="This is match/match_part data" help="Match part data selection ">
                                     <option selected="True" value="false">Not match/match part data</option>
                                     <option value="true">Match/match part data</option>
                                 </param>
                                 <when value="true">
-                                    <param label="Match Part Feature Type"
-                                        name="name"
-                                        type="text"
-                                        value="match"
-                                        help="Match_parts have options for the parent feature type, such as cDNA_match, match, translated_nucleotide_match, etc.
-                                    Please select the appropriate one here. You can leave empty to try autodetection (only works with CanvasFeatures track type)."
-                                        optional="True" />
+                                    <param name="name" type="text" value="match" optional="True" label="Match Part Feature Type" help="Match_parts have options for the parent feature type, such as cDNA_match, match, translated_nucleotide_match, etc.                                     Please select the appropriate one here. You can leave empty to try autodetection (only works with CanvasFeatures track type)."/>
                                 </when>
-                                <when value="false" />
+                                <when value="false"/>
                             </conditional>
-                            <expand macro="track_styling_vgp" />
-                            <expand macro="track_visibility" />
+                            <expand macro="track_styling_vgp"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="bam">
-                            <expand macro="input_conditional" label="BAM Track Data" format="bam" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="BAM Track Data" format="bam"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="bed">
-                            <expand macro="input_conditional" label="BED Track Data" format="bed" />
-                            <expand macro="track_styling_vgp" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="BED Track Data" format="bed"/>
+                            <expand macro="track_styling_vgp"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="cram">
-                            <expand macro="input_conditional" label="CRAM Track Data" format="cram" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="CRAM Track Data" format="cram"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="maf">
-                            <expand macro="input_conditional" label="MAF Track Data" format="maf" />
-                            <expand macro="track_styling_vgp" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="MAF Track Data" format="maf"/>
+                            <expand macro="track_styling_vgp"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="bigwig">
-                            <expand macro="input_conditional" label="BigWig Track Data"
-                                format="bigwig" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="BigWig Track Data" format="bigwig"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="paf">
-                            <expand macro="input_conditional"
-                                label="PAF format synteny mapping data" format="paf"
-                                help="PAF made with mashmap or minimap2 mapping the real reference as a query on the comparison genomes as references" />
-                            <expand macro="pafref_conditional" label="Comparison genome sequence(s)"
-                                format="fasta"
-                                help="Paf from these as the reference(s), using the common reference as the reads to map" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="PAF format synteny mapping data" format="paf" help="PAF made with mashmap or minimap2 mapping the real reference as a query on the comparison genomes as references"/>
+                            <expand macro="pafref_conditional" label="Comparison genome sequence(s)" format="fasta" help="Paf from these as the reference(s), using the common reference as the reads to map"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="hic">
-                            <expand macro="input_conditional" label="Binary Juicebox HiC data"
-                                format="hic,juicebox_hic" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="Binary Juicebox HiC data" format="hic,juicebox_hic"/>
+                            <expand macro="track_visibility"/>
                         </when>
                         <when value="cool">
-                            <expand macro="input_conditional"
-                                label="HiC data in cool/mcool/scool format"
-                                format="cool,mcool,scool" />
-                            <expand macro="track_visibility" />
+                            <expand macro="input_conditional" label="HiC data in cool/mcool/scool format" format="cool,mcool,scool"/>
+                            <expand macro="track_visibility"/>
                         </when>
                     </conditional>
                 </repeat>
             </repeat>
         </repeat>
-        <expand macro="general_options" />
-        <param type="hidden" name="uglyTestingHack" value="" />
+        <expand macro="general_options"/>
+        <param name="uglyTestingHack" type="hidden" value=""/>
     </inputs>
     <outputs>
         <data format="html" name="output" label="JBrowse2: ${jbgen.session_name}">
             <change_format>
-                <when input="zipOut" value="true" format="zip" />
+                <when input="zipOut" value="true" format="zip"/>
             </change_format>
         </data>
     </outputs>
@@ -504,99 +452,90 @@
         <test>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="history" />
-                    <param name="genome"
-                        location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/Merlin" />
-                    <param name="genome.ext" value="fasta" />
+                    <param name="genome_type_select" value="history"/>
+                    <param name="genome" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/Merlin"/>
+                    <param name="genome.ext" value="fasta"/>
                 </conditional>
                 <repeat name="track_groups">
-                    <param name="category" value="Assembly properties" />
+                    <param name="category" value="Assembly properties"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/merlin.gff3" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/merlin.gff3"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="bigwig" />
+                            <param name="data_format_select" value="bigwig"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/merlin.bw" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/merlin.bw"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="bed" />
+                            <param name="data_format_select" value="bed"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/test-6.bed" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/test-6.bed"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="vcf" />
+                            <param name="data_format_select" value="vcf"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/merlin.vcf" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/merlin.vcf"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="cram" />
+                            <param name="data_format_select" value="cram"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/merlin.cram" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/merlin.cram"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="bam" />
+                            <param name="data_format_select" value="bam"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/merlin-sample.bam" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/merlin-sample.bam"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="maf" />
+                            <param name="data_format_select" value="maf"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/merlinlastz.maf" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/merlinlastz.maf"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="blastxml" />
+                            <param name="data_format_select" value="blastxml"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/merlin.blastxml" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/merlin.blastxml"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="bam" />
+                            <param name="data_format_select" value="bam"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation" value="" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" value=""/>
                             </conditional>
                         </conditional>
                     </repeat>
@@ -604,20 +543,18 @@
             </repeat>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="history" />
-                    <param name="genome"
-                        location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/dm3.fa" />
-                    <param name="genome.ext" value="fasta" />
+                    <param name="genome_type_select" value="history"/>
+                    <param name="genome" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/dm3.fa"/>
+                    <param name="genome.ext" value="fasta"/>
                 </conditional>
                 <repeat name="track_groups">
-                    <param name="category" value="Assembly properties" />
+                    <param name="category" value="Assembly properties"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="cool" />
+                            <param name="data_format_select" value="cool"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/dm3test.cool" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/dm3test.cool"/>
                             </conditional>
                         </conditional>
                     </repeat>
@@ -625,65 +562,56 @@
             </repeat>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="history" />
-                    <param name="genome"
-                        location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/Ppersica1.fa" />
-                    <param name="genome.ext" value="fasta" />
+                    <param name="genome_type_select" value="history"/>
+                    <param name="genome" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/Ppersica1.fa"/>
+                    <param name="genome.ext" value="fasta"/>
                 </conditional>
                 <repeat name="track_groups">
-                    <param name="category" value="Assembly properties" />
+                    <param name="category" value="Assembly properties"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="paf" />
+                            <param name="data_format_select" value="paf"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/peach-grape-map.paf" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/peach-grape-map.paf"/>
                             </conditional>
                             <conditional name="pafuseuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/Vvinifera1.fa" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/Vvinifera1.fa"/>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="paf" />
+                            <param name="data_format_select" value="paf"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/arabgrapepeach.paf" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/arabgrapepeach.paf"/>
                             </conditional>
                             <conditional name="pafuseuri">
-                                <param name="insource" value="uri" />
+                                <param name="insource" value="uri"/>
                                 <repeat name="refuri">
-                                    <param name="annotation"
-                                        value="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/arabidopsis.fa.gz" />
-                                    <param name="annoname" value="arabidopsis.URI" />
+                                    <param name="annotation" value="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/arabidopsis.fa.gz"/>
+                                    <param name="annoname" value="arabidopsis.URI"/>
                                 </repeat>
                                 <repeat name="refuri">
-                                    <param name="annotation"
-                                        value="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/Vvinifera1.fa.gz" />
-                                    <param name="annoname" value="Vvinifera1.URI" />
+                                    <param name="annotation" value="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/Vvinifera1.fa.gz"/>
+                                    <param name="annoname" value="Vvinifera1.URI"/>
                                 </repeat>
                             </conditional>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="paf" />
+                            <param name="data_format_select" value="paf"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/arabgrapepeach.paf" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/arabgrapepeach.paf"/>
                             </conditional>
                             <conditional name="pafuseuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/arabidopsis.fa" />
-                                <param name="annotation"
-                                    location="https://galaxy.genomicsvl-students.cloud.edu.au/jbrowse/merlin/Vvinifera1.fa" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/arabidopsis.fa"/>
+                                <param name="annotation" location="https://usegalaxy.eu/static/share/ebp/jbrowse2/test-data/Vvinifera1.fa"/>
                             </conditional>
                         </conditional>
                     </repeat>
@@ -691,72 +619,69 @@
             </repeat>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="uri" />
-                    <param name="uri"
-                        value="https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/fasta/GRCh38.fa.gz" />
-                    <param name="refname" value="hg38" />
+                    <param name="genome_type_select" value="uri"/>
+                    <param name="uri" value="https://s3.amazonaws.com/jbrowse.org/genomes/GRCh38/fasta/GRCh38.fa.gz"/>
+                    <param name="refname" value="hg38"/>
                 </conditional>
                 <repeat name="track_groups">
-                    <param name="category" value="Assembly properties" />
+                    <param name="category" value="Assembly properties"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="hic" />
+                            <param name="data_format_select" value="hic"/>
                             <conditional name="useuri">
-                                <param name="insource" value="uri" />
-                                <param name="annouri"
-                                    value="https://s3.amazonaws.com/igv.broadinstitute.org/data/hic/intra_nofrag_30.hic" />
-                                <param name="annoname" value="humanhic" />
+                                <param name="insource" value="uri"/>
+                                <param name="annouri" value="https://s3.amazonaws.com/igv.broadinstitute.org/data/hic/intra_nofrag_30.hic"/>
+                                <param name="annoname" value="humanhic"/>
                             </conditional>
                         </conditional>
                     </repeat>
                 </repeat>
             </repeat>
             <section name="jbgen">
-                <param name="zipOut" value="true" />
-                <param name="session_name" value="New test session" />
+                <param name="zipOut" value="true"/>
+                <param name="session_name" value="New test session"/>
             </section>
-            <output name="output" file="jbrowse2_result02.zip" ftype="zip" compare="sim_size">
+            <!-- use the following line to generate a ZIP file to inspect it -->
+            <!--output name="output" file="jbrowse2_result02.zip" ftype="zip" compare="sim_size"-->
+            <output name="output" ftype="zip">
                 <assert_contents>
-                    <has_archive_member path=".*" n="637" delta="10" />
-                    <has_archive_member path="index.html" />
-                    <has_archive_member
-                        path="static/media/roboto-latin-400-normal.3f2b9a42f643e62a49b7.woff" />
+                    <has_archive_member path=".*" n="637" delta="10"/>
+                    <has_archive_member path="index.html"/>
+                    <has_archive_member path="static/media/roboto-latin-400-normal.3f2b9a42f643e62a49b7.woff"/>
                     <has_archive_member path="manifest.json">
-                        <has_text text="favicon.ico" />
-                        <has_text text="background_color" />
+                        <has_text text="favicon.ico"/>
+                        <has_text text="background_color"/>
                     </has_archive_member>
                     <has_archive_member path="galaxy.xml">
-                        <is_valid_xml />
-                        <xml_element path="./metadata/general/session_name" n="1">
-                            <has_text_matching expression="New test session" />
-                            <not_has_text text="Newton" />
-                        </xml_element>
+                        <is_valid_xml/>
+                        <has_n_elements_with_path path="./metadata/general/session_name" n="1"/>
+                        <element_text_is path="./metadata/general/session_name" text="New test session"/>
                     </has_archive_member>
-                    <has_archive_member path="merlin.gff3_0.gz" />
-                    <has_archive_member path="merlin.gff3_0.gz.tbi" />
-                    <has_archive_member path="merlin.bw_1" />
-                    <has_archive_member path="test-6.bed_2.gz" />
-                    <has_archive_member path="merlin.vcf_3" />
-                    <has_archive_member path="merlin.vcf_3.tbi" />
-                    <has_archive_member path="merlin.cram_4" />
-                    <has_archive_member path="merlin.cram_4.crai" />
-                    <has_archive_member path="merlin-sample.bam_5" />
-                    <has_archive_member path="merlin-sample.bam_5.bai" />
-                    <has_archive_member path="merlinlastz.maf_6.sorted.bed.gz.tbi" />
-                    <has_archive_member path="merlin.blastxml_7.gz" />
-                    <has_archive_member path="dm3test.cool_9.hic" />
-                    <has_archive_member path="peach-grape-map.paf_10" />
-                    <has_archive_member path="arabgrapepeach.paf_11" />
-                    <has_archive_member path="Merlin.fa.gz.fai" />
-                    <has_archive_member path="dm3.fa.fa.gz.fai" />
-                    <has_archive_member path="Ppersica1.fa.fa.gz" />
-                    <has_archive_member path="Ppersica1.fa.fa.gz.fai" />
-                    <has_archive_member path="Ppersica1.fa.fa.gz.gzi" />
-                    <has_archive_member path="Vvinifera1.fa.fa.gz.fai" />
-                    <has_archive_member path="Vvinifera1.fa.fa.gz" />
-                    <has_archive_member path="Vvinifera1.fa.fa.gz.gzi" />
+                    <has_archive_member path="merlin.gff3_0.gz"/>
+                    <has_archive_member path="merlin.gff3_0.gz.tbi"/>
+                    <has_archive_member path="merlin.bw_1"/>
+                    <has_archive_member path="test-6.bed_2.gz"/>
+                    <has_archive_member path="merlin.vcf_3"/>
+                    <has_archive_member path="merlin.vcf_3.tbi"/>
+                    <has_archive_member path="merlin.cram_4"/>
+                    <has_archive_member path="merlin.cram_4.crai"/>
+                    <has_archive_member path="merlin-sample.bam_5"/>
+                    <has_archive_member path="merlin-sample.bam_5.bai"/>
+                    <has_archive_member path="merlinlastz.maf_6.sorted.bed.gz.tbi"/>
+                    <has_archive_member path="merlin.blastxml_7.gz"/>
+                    <has_archive_member path="dm3test.cool_9.hic"/>
+                    <has_archive_member path="peach-grape-map.paf_10"/>
+                    <has_archive_member path="arabgrapepeach.paf_11"/>
+                    <has_archive_member path="Merlin.fa.gz.fai"/>
+                    <has_archive_member path="dm3.fa.fa.gz.fai"/>
+                    <has_archive_member path="Ppersica1.fa.fa.gz"/>
+                    <has_archive_member path="Ppersica1.fa.fa.gz.fai"/>
+                    <has_archive_member path="Ppersica1.fa.fa.gz.gzi"/>
+                    <has_archive_member path="Vvinifera1.fa.fa.gz.fai"/>
+                    <has_archive_member path="Vvinifera1.fa.fa.gz"/>
+                    <has_archive_member path="Vvinifera1.fa.fa.gz.gzi"/>
                     <has_archive_member path="config.json">
-                        <has_json_property_with_text property="name" text="Merlin" />
+                        <has_json_property_with_text property="name" text="Merlin"/>
                     </has_archive_member>
                 </assert_contents>
             </output>
@@ -764,39 +689,38 @@
         <test>
             <param name="autoCollection">
                 <collection type="list" name="merlintest">
-                    <element name="merlin.fa" value="merlin.fa" />
-                    <element name="merlin.bw" value="bw/merlin.bw" />
-                    <element name="test-6.bed" value="bed/test-6.bed" />
+                    <element name="merlin.fa" value="merlin.fa"/>
+                    <element name="merlin.bw" value="bw/merlin.bw"/>
+                    <element name="test-6.bed" value="bed/test-6.bed"/>
                 </collection>
             </param>
             <section name="jbgen">
-                <param name="zipOut" value="true" />
-                <param name="session_name" value="Collection test" />
-                <param name="ucol|formcoll" value="collect" />
+                <param name="zipOut" value="true"/>
+                <param name="session_name" value="Collection test"/>
+                <param name="ucol|formcoll" value="collect"/>
             </section>
-            <output name="output" file="jbrowse2_result01.zip" ftype="zip" compare="sim_size">
+            <!-- use the following line to generate a ZIP file to inspect it -->
+            <!--output name="output" file="jbrowse2_result01.zip" ftype="zip" compare="sim_size"-->
+            <output name="output" ftype="zip">
                 <assert_contents>
-                    <has_archive_member path=".*" n="611" delta="10" />
-                    <has_archive_member path="index.html" />
-                    <has_archive_member
-                        path="static/media/roboto-latin-400-normal.3f2b9a42f643e62a49b7.woff" />
+                    <has_archive_member path=".*" n="611" delta="10"/>
+                    <has_archive_member path="index.html"/>
+                    <has_archive_member path="static/media/roboto-latin-400-normal.3f2b9a42f643e62a49b7.woff"/>
                     <has_archive_member path="manifest.json">
-                        <has_text text="favicon.ico" />
-                        <has_text text="background_color" />
+                        <has_text text="favicon.ico"/>
+                        <has_text text="background_color"/>
                     </has_archive_member>
                     <has_archive_member path="galaxy.xml">
-                        <is_valid_xml />
-                        <xml_element path="./metadata/general/session_name" n="1">
-                            <has_text_matching expression="Collection test" />
-                            <not_has_text text="Newton" />
-                        </xml_element>
+                        <is_valid_xml/>
+                        <has_n_elements_with_path path="./metadata/general/session_name" n="1"/>
+                        <element_text_is path="./metadata/general/session_name" text="Collection test"/>
                     </has_archive_member>
-                    <has_archive_member path="jb2_webserver.py" />
+                    <has_archive_member path="jb2_webserver.py"/>
                     <has_archive_member path="merlin.fa.fa.gz.gzi"/>
                     <has_archive_member path="merlin.fa.fa.gz"/>
                     <has_archive_member path="merlin.fa.fa.gz.fai"/>
-                    <has_archive_member path="merlin.bw" />
-                    <has_archive_member path="index.html" />
+                    <has_archive_member path="merlin.bw"/>
+                    <has_archive_member path="index.html"/>
                     <has_archive_member path="test-6.bed.gz"/>
                     <has_archive_member path="test-6.bed.gz.tbi"/>
                 </assert_contents>
@@ -805,174 +729,174 @@
         <test>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="history" />
-                    <param name="genome" value="merlin.fa" />
-                    <param name="genome.ext" value="fasta" />
-                    <param name="genome.name" value="Merlin" />
+                    <param name="genome_type_select" value="history"/>
+                    <param name="genome" value="merlin.fa"/>
+                    <param name="genome.ext" value="fasta"/>
+                    <param name="genome.name" value="Merlin"/>
                 </conditional>
                 <repeat name="track_groups">
-                    <param name="category" value="Default" />
+                    <param name="category" value="Default"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="bigwig" />
+                            <param name="data_format_select" value="bigwig"/>
                             <conditional name="useuri">
-                                <param name="annotation" value="bw/merlin.bw" />
-                                <param name="insource" value="history" />
+                                <param name="annotation" value="bw/merlin.bw"/>
+                                <param name="insource" value="history"/>
                             </conditional>
                         </conditional>
                     </repeat>
                 </repeat>
             </repeat>
-            <param name="uglyTestingHack" value="enabled" />
+            <param name="uglyTestingHack" value="enabled"/>
             <output name="output">
                 <assert_contents>
-                    <has_text text="genome path="></has_text>
-                    <has_text text="label="></has_text>
-                    <has_text text="format="></has_text>
-                    <has_text text="metadata"></has_text>
-                    <has_text text="useuri="></has_text>
-                    <has_text text="trackFile path="></has_text>
-                    <has_text text="ext=&quot;bigwig&quot;"></has_text>
-                    <has_text text="format=&quot;bigwig&quot;"></has_text>
+                    <has_text text="genome path="/>
+                    <has_text text="label="/>
+                    <has_text text="format="/>
+                    <has_text text="metadata"/>
+                    <has_text text="useuri="/>
+                    <has_text text="trackFile path="/>
+                    <has_text text="ext=&quot;bigwig&quot;"/>
+                    <has_text text="format=&quot;bigwig&quot;"/>
                 </assert_contents>
             </output>
         </test>
         <test>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="history" />
-                    <param name="genome" value="merlin.fa" />
-                    <param name="genome.ext" value="fasta" />
-                    <param name="genome.name" value="Merlin" />
+                    <param name="genome_type_select" value="history"/>
+                    <param name="genome" value="merlin.fa"/>
+                    <param name="genome.ext" value="fasta"/>
+                    <param name="genome.name" value="Merlin"/>
                 </conditional>
                 <repeat name="track_groups">
-                    <param name="category" value="Default" />
+                    <param name="category" value="Default"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="vcf" />
+                            <param name="data_format_select" value="vcf"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation" value="vcf/merlin.vcf" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" value="vcf/merlin.vcf"/>
                             </conditional>
                         </conditional>
                     </repeat>
                 </repeat>
             </repeat>
-            <param name="uglyTestingHack" value="enabled" />
+            <param name="uglyTestingHack" value="enabled"/>
             <output name="output">
                 <assert_contents>
-                    <has_text text="genome path="></has_text>
-                    <has_text text="label="></has_text>
-                    <has_text text="format="></has_text>
-                    <has_text text="metadata"></has_text>
-                    <has_text text="useuri="></has_text>
-                    <has_text text="trackFile path="></has_text>
-                    <has_text text="ext=&quot;vcf&quot; label=&quot;merlin.vcf&quot;"></has_text>
+                    <has_text text="genome path="/>
+                    <has_text text="label="/>
+                    <has_text text="format="/>
+                    <has_text text="metadata"/>
+                    <has_text text="useuri="/>
+                    <has_text text="trackFile path="/>
+                    <has_text text="ext=&quot;vcf&quot; label=&quot;merlin.vcf&quot;"/>
                 </assert_contents>
             </output>
         </test>
         <test>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="history" />
-                    <param name="genome" value="merlin.fa" />
-                    <param name="genome.ext" value="fasta" />
-                    <param name="genome.name" value="Merlin" />
+                    <param name="genome_type_select" value="history"/>
+                    <param name="genome" value="merlin.fa"/>
+                    <param name="genome.ext" value="fasta"/>
+                    <param name="genome.name" value="Merlin"/>
                 </conditional>
             </repeat>
-            <param name="uglyTestingHack" value="enabled" />
+            <param name="uglyTestingHack" value="enabled"/>
             <output name="output">
                 <assert_contents>
-                    <has_text text="genome path="></has_text>
-                    <has_text text="label="></has_text>
-                    <has_text text="useuri="></has_text>
-                    <has_text text="metadata"></has_text>
+                    <has_text text="genome path="/>
+                    <has_text text="label="/>
+                    <has_text text="useuri="/>
+                    <has_text text="metadata"/>
                 </assert_contents>
             </output>
         </test>
         <test>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="history" />
-                    <param name="genome" value="merlin.fa" />
-                    <param name="genome.ext" value="fasta" />
-                    <param name="genome.name" value="Merlin" />
+                    <param name="genome_type_select" value="history"/>
+                    <param name="genome" value="merlin.fa"/>
+                    <param name="genome.ext" value="fasta"/>
+                    <param name="genome.name" value="Merlin"/>
                 </conditional>
                 <repeat name="track_groups">
-                    <param name="category" value="Default" />
+                    <param name="category" value="Default"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="vcf" />
+                            <param name="data_format_select" value="vcf"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation" value="vcf/merlin.vcf" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" value="vcf/merlin.vcf"/>
                             </conditional>
                         </conditional>
                     </repeat>
                 </repeat>
             </repeat>
-            <param name="uglyTestingHack" value="enabled" />
+            <param name="uglyTestingHack" value="enabled"/>
             <output name="output">
                 <assert_contents>
-                    <has_text text="genome path="></has_text>
-                    <has_text text="label="></has_text>
-                    <has_text text="format="></has_text>
-                    <has_text text="metadata"></has_text>
-                    <has_text text="useuri="></has_text>
-                    <has_text text="trackFile path="></has_text>
-                    <has_text text="ext=&quot;vcf&quot; label=&quot;merlin.vcf&quot;"></has_text>
+                    <has_text text="genome path="/>
+                    <has_text text="label="/>
+                    <has_text text="format="/>
+                    <has_text text="metadata"/>
+                    <has_text text="useuri="/>
+                    <has_text text="trackFile path="/>
+                    <has_text text="ext=&quot;vcf&quot; label=&quot;merlin.vcf&quot;"/>
                 </assert_contents>
             </output>
         </test>
         <test>
             <repeat name="assemblies">
                 <conditional name="reference_genome">
-                    <param name="genome_type_select" value="history" />
-                    <param name="genome" value="merlin.fa" />
-                    <param name="genome.ext" value="fasta" />
-                    <param name="genome.name" value="Merlin" />
+                    <param name="genome_type_select" value="history"/>
+                    <param name="genome" value="merlin.fa"/>
+                    <param name="genome.ext" value="fasta"/>
+                    <param name="genome.name" value="Merlin"/>
                 </conditional>
                 <repeat name="track_groups">
-                    <param name="category" value="Default" />
+                    <param name="category" value="Default"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation" value="gff3/A.gff" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" value="gff3/A.gff"/>
                             </conditional>
                         </conditional>
                         <conditional name="match_part">
-                            <param name="match_part_select" value="false" />
+                            <param name="match_part_select" value="false"/>
                         </conditional>
                         <section name="jbcolor_scale">
                             <conditional name="color_score">
-                                <param name="color_score_select" value="none" />
+                                <param name="color_score_select" value="none"/>
                             </conditional>
                             <conditional name="color">
-                                <param name="color_select" value="automatic" />
+                                <param name="color_select" value="automatic"/>
                             </conditional>
                         </section>
                     </repeat>
                 </repeat>
                 <repeat name="track_groups">
-                    <param name="category" value="Ignore Scale" />
+                    <param name="category" value="Ignore Scale"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation" value="gff3/1.gff" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" value="gff3/1.gff"/>
                             </conditional>
                             <conditional name="match_part">
-                                <param name="match_part_select" value="false" />
+                                <param name="match_part_select" value="false"/>
                             </conditional>
                             <section name="jbcolor_scale">
                                 <conditional name="color_score">
-                                    <param name="color_score_select" value="none" />
+                                    <param name="color_score_select" value="none"/>
                                     <conditional name="color">
-                                        <param name="color_select" value="manual" />
-                                        <param name="style_color" value="#ff00ff" />
+                                        <param name="color_select" value="manual"/>
+                                        <param name="style_color" value="#ff00ff"/>
                                     </conditional>
                                 </conditional>
                             </section>
@@ -980,28 +904,28 @@
                     </repeat>
                 </repeat>
                 <repeat name="track_groups">
-                    <param name="category" value="Scaled Colour" />
+                    <param name="category" value="Scaled Colour"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="insource" value="history" />
-                                <param name="annotation" value="gff3/C.gff" />
+                                <param name="insource" value="history"/>
+                                <param name="annotation" value="gff3/C.gff"/>
                             </conditional>
                             <conditional name="match_part">
-                                <param name="match_part_select" value="false" />
+                                <param name="match_part_select" value="false"/>
                             </conditional>
                             <section name="jbcolor_scale">
                                 <conditional name="color_score">
-                                    <param name="color_score_select" value="score" />
-                                    <param name="score_scaling" value="linear" />
+                                    <param name="color_score_select" value="score"/>
+                                    <param name="score_scaling" value="linear"/>
                                     <conditional name="score_scales">
-                                        <param name="scale_select" value="automatic" />
+                                        <param name="scale_select" value="automatic"/>
                                     </conditional>
                                     <conditional name="color_scheme">
-                                        <param name="score_scheme" value="opacity" />
+                                        <param name="score_scheme" value="opacity"/>
                                         <conditional name="color">
-                                            <param name="color_select" value="automatic" />
+                                            <param name="color_select" value="automatic"/>
                                         </conditional>
                                     </conditional>
                                 </conditional>
@@ -1010,26 +934,26 @@
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="annotation" value="gff3/B.gff" />
-                                <param name="insource" value="history" />
+                                <param name="annotation" value="gff3/B.gff"/>
+                                <param name="insource" value="history"/>
                             </conditional>
                             <conditional name="match_part">
-                                <param name="match_part_select" value="false" />
+                                <param name="match_part_select" value="false"/>
                             </conditional>
                             <section name="jbcolor_scale">
                                 <conditional name="color_score">
-                                    <param name="color_score_select" value="score" />
-                                    <param name="score_scaling" value="linear" />
+                                    <param name="color_score_select" value="score"/>
+                                    <param name="score_scaling" value="linear"/>
                                     <conditional name="score_scales">
-                                        <param name="scale_select" value="automatic" />
+                                        <param name="scale_select" value="automatic"/>
                                     </conditional>
                                     <conditional name="color_scheme">
-                                        <param name="score_scheme" value="opacity" />
+                                        <param name="score_scheme" value="opacity"/>
                                         <conditional name="color">
-                                            <param name="color_select" value="manual" />
-                                            <param name="style_color" value="#0000ff" />
+                                            <param name="color_select" value="manual"/>
+                                            <param name="style_color" value="#0000ff"/>
                                         </conditional>
                                     </conditional>
                                 </conditional>
@@ -1038,27 +962,27 @@
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="annotation" value="gff3/A.gff" />
-                                <param name="insource" value="history" />
+                                <param name="annotation" value="gff3/A.gff"/>
+                                <param name="insource" value="history"/>
                             </conditional>
                             <conditional name="match_part">
-                                <param name="match_part_select" value="false" />
+                                <param name="match_part_select" value="false"/>
                             </conditional>
                             <section name="jbcolor_scale">
                                 <conditional name="color_score">
-                                    <param name="color_score_select" value="score" />
-                                    <param name="score_scaling" value="linear" />
+                                    <param name="color_score_select" value="score"/>
+                                    <param name="score_scaling" value="linear"/>
                                     <conditional name="score_scales">
-                                        <param name="scale_select" value="manual" />
-                                        <param name="minimum" value="0" />
-                                        <param name="maximum" value="1000" />
+                                        <param name="scale_select" value="manual"/>
+                                        <param name="minimum" value="0"/>
+                                        <param name="maximum" value="1000"/>
                                     </conditional>
                                     <conditional name="color_scheme">
-                                        <param name="score_scheme" value="opacity" />
+                                        <param name="score_scheme" value="opacity"/>
                                         <conditional name="color">
-                                            <param name="color_select" value="automatic" />
+                                            <param name="color_select" value="automatic"/>
                                         </conditional>
                                     </conditional>
                                 </conditional>
@@ -1067,28 +991,28 @@
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="annotation" value="gff3/1.gff" />
-                                <param name="insource" value="history" />
+                                <param name="annotation" value="gff3/1.gff"/>
+                                <param name="insource" value="history"/>
                             </conditional>
                             <conditional name="match_part">
-                                <param name="match_part_select" value="false" />
+                                <param name="match_part_select" value="false"/>
                             </conditional>
                             <section name="jbcolor_scale">
                                 <conditional name="color_score">
-                                    <param name="color_score_select" value="score" />
-                                    <param name="score_scaling" value="linear" />
+                                    <param name="color_score_select" value="score"/>
+                                    <param name="score_scaling" value="linear"/>
                                     <conditional name="score_scales">
-                                        <param name="scale_select" value="manual" />
-                                        <param name="minimum" value="0" />
-                                        <param name="maximum" value="1000" />
+                                        <param name="scale_select" value="manual"/>
+                                        <param name="minimum" value="0"/>
+                                        <param name="maximum" value="1000"/>
                                     </conditional>
                                     <conditional name="color_scheme">
-                                        <param name="score_scheme" value="opacity" />
+                                        <param name="score_scheme" value="opacity"/>
                                         <conditional name="color">
-                                            <param name="color_select" value="manual" />
-                                            <param name="style_color" value="#ff0000" />
+                                            <param name="color_select" value="manual"/>
+                                            <param name="style_color" value="#ff0000"/>
                                         </conditional>
                                     </conditional>
                                 </conditional>
@@ -1097,66 +1021,64 @@
                     </repeat>
                 </repeat>
                 <repeat name="track_groups">
-                    <param name="category" value="Realistic" />
+                    <param name="category" value="Realistic"/>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="annotation" value="gff3/interpro.gff" />
-                                <param name="insource" value="history" />
+                                <param name="annotation" value="gff3/interpro.gff"/>
+                                <param name="insource" value="history"/>
                             </conditional>
                             <conditional name="match_part">
-                                <param name="match_part_select" value="false" />
+                                <param name="match_part_select" value="false"/>
                             </conditional>
                             <section name="jbcolor_scale">
                                 <conditional name="color_score">
-                                    <param name="color_score_select" value="none" />
+                                    <param name="color_score_select" value="none"/>
                                 </conditional>
                                 <conditional name="color">
-                                    <param name="color_select" value="automatic" />
+                                    <param name="color_select" value="automatic"/>
                                 </conditional>
                             </section>
                         </conditional>
                     </repeat>
                     <repeat name="data_tracks">
                         <conditional name="data_format">
-                            <param name="data_format_select" value="gff" />
+                            <param name="data_format_select" value="gff"/>
                             <conditional name="useuri">
-                                <param name="annotation" value="gff3/2.gff" />
-                                <param name="insource" value="history" />
+                                <param name="annotation" value="gff3/2.gff"/>
+                                <param name="insource" value="history"/>
                             </conditional>
                             <conditional name="match_part">
-                                <param name="match_part_select" value="true" />
-                                <param name="name" value="cDNA_match" />
+                                <param name="match_part_select" value="true"/>
+                                <param name="name" value="cDNA_match"/>
                             </conditional>
                             <section name="jbcolor_scale">
                                 <conditional name="color_score">
-                                    <param name="color_score_select" value="none" />
+                                    <param name="color_score_select" value="none"/>
                                 </conditional>
                                 <conditional name="color">
-                                    <param name="color_select" value="automatic" />
+                                    <param name="color_select" value="automatic"/>
                                 </conditional>
                             </section>
                         </conditional>
                     </repeat>
                 </repeat>
             </repeat>
-
-            <param name="uglyTestingHack" value="enabled" />
+            <param name="uglyTestingHack" value="enabled"/>
             <output name="output">
                 <assert_contents>
-                    <has_text text="Ignore Scale" />
-                    <has_text text="A.gff" />
-                    <has_text text="B.gff" />
-                    <has_text text="C.gff" />
-                    <has_text text="interpro.gff" />
-                    <has_text text="Scaled Colour" />
-                    <has_text text="1.gff" />
-                    <has_text text="2.gff" />
+                    <has_text text="Ignore Scale"/>
+                    <has_text text="A.gff"/>
+                    <has_text text="B.gff"/>
+                    <has_text text="C.gff"/>
+                    <has_text text="interpro.gff"/>
+                    <has_text text="Scaled Colour"/>
+                    <has_text text="1.gff"/>
+                    <has_text text="2.gff"/>
                 </assert_contents>
             </output>
         </test>
-
         <!-- TODO add a synteny test -->
         <!-- TODO add a bam and a cram test -->
         <!-- TODO add an hic test -->
@@ -1275,7 +1197,7 @@
 they should adjust feature locations by 3x.
 
 
-@ATTRIBUTION@
 ]]></help>
-    <expand macro="citations" />
-</tool>
\ No newline at end of file
+    <expand macro="citations"/>
+    <expand macro="creators"/>
+</tool>
Binary file jbrowse8.png has changed
--- a/macros.xml	Thu Apr 25 07:25:52 2024 +0000
+++ b/macros.xml	Sat Jun 01 05:37:13 2024 +0000
@@ -1,7 +1,6 @@
-<?xml version="1.0"?>
 <macros>
     <token name="@TOOL_VERSION@">2.11.0</token>
-    <xml name = "edamInc">
+    <xml name="edamInc">
         <edam_topics>
             <edam_topic>topic_3307</edam_topic>
             <edam_topic>topic_0092</edam_topic>
@@ -33,100 +32,65 @@
 maintained by Ross Lazarus and Bjoern Gruening until the IUC complete their own.
 ]]>
     </token>
+    <xml name="creators">
+        <creator>
+            <person givenName="Helena" familyName="Rasche" url="https://github.com/hexylena" />
+            <person givenName="Anthony" familyName="Bretaudeau" url="https://github.com/abretaud" />
+            <person givenName="Ross" familyName="Lazarus" url="https://github.com/fubar2/" />
+        </creator>
+    </xml>
     <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">
+            <param name="genome_type_select" type="select" label="Reference genome to display" help="Built-in references">
                 <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@"
-                >
+                <param name="genomes" type="select" optional="@OPTIONAL@" label="@LABEL@" help="@HELP@">
                     <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" />
+                        <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" />
+                <param name="genomes" type="data" format="fasta" optional="@OPTIONAL@" label="@LABEL@" help="@HELP@" multiple="True"/>
             </when>
         </conditional>
     </xml>
-
-    <xml name="auto_manual_tk"
-        token_cond_label="Color"
-        token_cond_name="color"
-        token_select_label="Color Specification"
-        token_select_name="color_select"
-        token_automatic_label="Automatically selected"
-        token_manual_label="Manual Color Selection">
+    <xml name="auto_manual_tk" token_cond_label="Color" token_cond_name="color" token_select_label="Color Specification" token_select_name="color_select" token_automatic_label="Automatically selected" token_manual_label="Manual Color Selection">
         <conditional name="@COND_NAME@" label="@COND_LABEL@">
-            <param type="select" label="@SELECT_LABEL@" name="@SELECT_NAME@">
+            <param name="@SELECT_NAME@" type="select" label="@SELECT_LABEL@">
                 <option value="automatic" selected="true">@AUTOMATIC_LABEL@</option>
                 <option value="manual">@MANUAL_LABEL@</option>
             </param>
             <when value="automatic">
             </when>
             <when value="manual">
-                <yield />
+                <yield/>
             </when>
         </conditional>
     </xml>
-
-    <xml name="jb_color"
-        token_label="JBrowse style.color"
-        token_name="style_color"
-        token_value="goldenrod"
-        token_help="Basic color of features. Most glyphs interpret this as the fill color of the rectangle they draw. Color syntax is the same as that used for CSS"
-        >
-        <param label="@LABEL@" type="color" name="@NAME@" value="@VALUE@" help="@HELP@">
+    <xml name="jb_color" token_label="JBrowse style.color" token_name="style_color" token_value="goldenrod" token_help="Basic color of features. Most glyphs interpret this as the fill color of the rectangle they draw. Color syntax is the same as that used for CSS">
+        <param name="@NAME@" type="color" value="@VALUE@" label="@LABEL@" help="@HELP@">
             <sanitizer>
                 <valid initial="string.letters,string.digits">
-                    <add value="#" />
+                    <add value="#"/>
                 </valid>
             </sanitizer>
         </param>
     </xml>
-
-    <xml name="auto_color"
-        token_cond_label="Color"
-        token_cond_name="color"
-        token_select_label="Color Selection"
-        token_select_name="color_select"
-        token_automatic_label="Automatically selected"
-        token_manual_label="Manual Color Selection">
-        <expand macro="auto_manual_tk"
-                cond_label="@COND_LABEL@"
-                cond_name="@COND_NAME@"
-                select_label="@SELECT_LABEL@"
-                select_name="@SELECT_NAME@"
-                automatic_label="@AUTOMATIC_LABEL@"
-                manual_label="@MANUAL_LABEL@">
-            <expand macro="jb_color" />
-            <yield />
+    <xml name="auto_color" token_cond_label="Color" token_cond_name="color" token_select_label="Color Selection" token_select_name="color_select" token_automatic_label="Automatically selected" token_manual_label="Manual Color Selection">
+        <expand macro="auto_manual_tk" cond_label="@COND_LABEL@" cond_name="@COND_NAME@" select_label="@SELECT_LABEL@" select_name="@SELECT_NAME@" automatic_label="@AUTOMATIC_LABEL@" manual_label="@MANUAL_LABEL@">
+            <expand macro="jb_color"/>
+            <yield/>
         </expand>
     </xml>
-
-
-
     <xml name="brewer_scheme">
-        <param type="select" label="Brewer color Scheme" name="brewer_scheme">
+        <param name="brewer_scheme" type="select" label="Brewer color Scheme">
             <option value="BrBg">BrBg: Brown - Blue Green</option>
             <option value="PiYg">PiYg: Pink - Yellow Green</option>
             <option value="PRGn">PRGn: Purple Red - Green</option>
@@ -138,247 +102,203 @@
             <option value="Spectral">Spectral</option>
         </param>
     </xml>
-
-
     <xml name="general_options">
         <section name="jbgen" title="General JBrowse Options [Advanced]" expanded="false">
             <conditional name="ucol">
-                <param name="formcoll" type="select" label="Convert a collection of track files rather than filling in the tool form"
-                    help="A collection of bam/vcf and other track types will be converted into a JBrowse2 automatically">
+                <param name="formcoll" type="select" label="Convert a collection of track files rather than filling in the tool form" help="A collection of bam/vcf and other track types will be converted into a JBrowse2 automatically">
                     <option value="form" selected="true">Fill in the tool form to specify tracks for the output JBrowse2</option>
                     <option value="collect">Convert a collection of suitable track files</option>
                 </param>
                 <when value="collect">
-                       <param label="Collection of bed, bam and other track files" name="autoCollection" type="data_collection" />
+                    <param name="autoCollection" type="data_collection" label="Collection of bed, bam and other track files"/>
                 </when>
                 <when value="form">
                 </when>
             </conditional>
-
-            <param label="Create a zip archive for downloading rather than viewing " name="zipOut" help="Default is to make an interactive browser appear when the 'eye' icon is activated"
-            type="boolean" checked="false" truevalue="true" falsevalue="false" />
-            <param label="Subset to display to new users" type="text" name="defaultLocation" value="" help="Initial subset to be shown for users who have never visited the browser before. Example: 'ctgA:1234..5678'"/>
-            <param label="Session name" type="text" name="session_name" value="New JB2 session" help="Displayed at the top of the window"/>
-            <param label="Enable analytics" help="Will send usage data to Google Analytics, see https://github.com/GMOD/jbrowse-components/issues/1166" name="enableAnalytics" type="boolean" checked="false" truevalue="true" falsevalue="false" />
-
-            <param name="primary_color" type="color" label="Primary color" value="#0D233F">
+            <param name="zipOut" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Create a zip archive for downloading rather than viewing " help="Default is to make an interactive browser appear when the 'eye' icon is activated"/>
+            <param name="defaultLocation" type="text" value="" label="Subset to display to new users" help="Initial subset to be shown for users who have never visited the browser before. Example: 'ctgA:1234..5678"/>
+            <param name="session_name" type="text" value="New JB2 session" label="Session name" help="Displayed at the top of the window"/>
+            <param name="enableAnalytics" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Enable analytics" help="Will send usage data to Google Analytics, see https://github.com/GMOD/jbrowse-components/issues/1166"/>
+            <param name="primary_color" type="color" value="#0D233F" label="Primary color">
                 <sanitizer>
                     <valid initial="string.ascii_letters,string.digits">
-                        <add value="#" />
+                        <add value="#"/>
                     </valid>
                 </sanitizer>
             </param>
-            <param name="secondary_color" type="color" label="Secondary color" value="#721E63">
-                <sanitizer>
-                <valid initial="string.ascii_letters,string.digits">
-                    <add value="#" />
-                </valid>
-                </sanitizer>
-            </param>
-            <param name="tertiary_color" type="color" label="Tertiary color" value="#135560">
+            <param name="secondary_color" type="color" value="#721E63" label="Secondary color">
                 <sanitizer>
                     <valid initial="string.ascii_letters,string.digits">
-                        <add value="#" />
+                        <add value="#"/>
                     </valid>
                 </sanitizer>
             </param>
-            <param name="quaternary_color" type="color" label="Quaternary color" value="#FFB11D">
+            <param name="tertiary_color" type="color" value="#135560" label="Tertiary color">
                 <sanitizer>
                     <valid initial="string.ascii_letters,string.digits">
-                        <add value="#" />
+                        <add value="#"/>
+                    </valid>
+                </sanitizer>
+            </param>
+            <param name="quaternary_color" type="color" value="#FFB11D" label="Quaternary color">
+                <sanitizer>
+                    <valid initial="string.ascii_letters,string.digits">
+                        <add value="#"/>
                     </valid>
                 </sanitizer>
             </param>
-
-            <param label="Font size" name="font_size" type="integer" value="10" />
+            <param name="font_size" type="integer" value="10" label="Font size"/>
         </section>
     </xml>
-
     <xml name="color_selection_minmax">
         <section name="jbcolor" title="JBrowse Color Options [Advanced]" expanded="false">
-        <!-- Abuse auto/manual for bicolor pivot. Means we'll have to handle the
+            <!-- Abuse auto/manual for bicolor pivot. Means we'll have to handle the
             auto case as well, but may be safe to just say "brewer colors? Pff,
             red/blue" -->
-        <expand macro="auto_manual_tk"
-                token_cond_label="Color"
-                token_cond_name="color"
-                token_select_label="Color Selection"
-                token_select_name="color_select"
-                token_automatic_label="Automatically selected"
-                token_manual_label="Manual Color Selection">
-            <expand macro="jb_color"
-                    label="JBrowse style.pos_color"
-                    name="style_pos_color"
-                    value="blue"
-                    help="CSS color, default 'blue'. When drawing bicolor plots, the fill color to use for values that are above the pivot point." />
-            <expand macro="jb_color"
-                    label="JBrowse style.neg_color"
-                    name="style_neg_color"
-                    value="red"
-                    help=" CSS color, default 'red'. When drawing bicolor plots, the fill color to use for values that are below the pivot point." />
-        </expand>
-
-        <conditional name="bicolor_pivot" label="Bicolor Pivot">
-            <param type="select" label="Bicolor Pivot" name="bicolor_pivot_select">
-                <option value="zero" selected="true">Zero</option>
-                <option value="mean">Mean</option>
-                <option value="custom">Custom Value</option>
-            </param>
-            <when value="zero" />
-            <when value="mean" />
-            <when value="custom">
-                <param label="JBrowse style.bicolor_pivot" type="float" name="pivot_point" value="0.0" help="Where to change from pos_color to neg_color when drawing bicolor plots." />
-            </when>
-        </conditional>
+            <expand macro="auto_manual_tk" token_cond_label="Color" token_cond_name="color" token_select_label="Color Selection" token_select_name="color_select" token_automatic_label="Automatically selected" token_manual_label="Manual Color Selection">
+                <expand macro="jb_color" label="JBrowse style.pos_color" name="style_pos_color" value="blue" help="CSS color, default 'blue'. When drawing bicolor plots, the fill color to use for values that are above the pivot point."/>
+                <expand macro="jb_color" label="JBrowse style.neg_color" name="style_neg_color" value="red" help=" CSS color, default 'red'. When drawing bicolor plots, the fill color to use for values that are below the pivot point."/>
+            </expand>
+            <conditional name="bicolor_pivot" label="Bicolor Pivot">
+                <param name="bicolor_pivot_select" type="select" label="Bicolor Pivot">
+                    <option value="zero" selected="true">Zero</option>
+                    <option value="mean">Mean</option>
+                    <option value="custom">Custom Value</option>
+                </param>
+                <when value="zero"/>
+                <when value="mean"/>
+                <when value="custom">
+                    <param name="pivot_point" type="float" value="0.0" label="JBrowse style.bicolor_pivot" help="Where to change from pos_color to neg_color when drawing bicolor plots."/>
+                </when>
+            </conditional>
         </section>
     </xml>
-
-    <xml name="color_selection"
-        token_scaling_lin_select="true"
-        token_scaling_log_select="false"
-        >
+    <xml name="color_selection" token_scaling_lin_select="true" token_scaling_log_select="false">
         <section name="jbcolor_scale" title="JBrowse Feature Score Scaling &amp; Coloring Options [Advanced]" expanded="false">
-        <conditional name="color_score" label="JBrowse style.color &amp; Score relationship">
-            <param type="select" label="Color Score Algorithm" name="color_score_select" help="How to color the features. If it is based on score, then features with a score attribute anywhere in their hierachy will have their color affected by the score. If you choose to ignore the score, then you'll be able to select a single solid color for every feature in the track">
-                <option value="score">Based on score</option>
-                <option value="none" selected="true">Ignore score</option>
-            </param>
-            <when value="none">
-                <!-- When no scaling is done, no scores available, then just let the
-                    user choose a base color for the track -->
-                <expand macro="auto_color" />
-            </when>
-            <when value="score">
-                <!-- 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" selected="false">Logarithmic scaling</option>
-                    <option value="blast" selected="@SCALING_LOG_SELECT@">Blast scaling</option>
+            <conditional name="color_score" label="JBrowse style.color &amp; Score relationship">
+                <param name="color_score_select" type="select" label="Color Score Algorithm" help="How to color the features. If it is based on score, then features with a score attribute anywhere in their hierachy will have their color affected by the score. If you choose to ignore the score, then you'll be able to select a single solid color for every feature in the track">
+                    <option value="score">Based on score</option>
+                    <option value="none" selected="true">Ignore score</option>
                 </param>
-
-                <!-- Scaling Bounds -->
-                <conditional name="score_scales" label="Minimum/Maximum values for track scores">
-                    <param type="select" label="How should minimum and maximum values be determined for the scores of the features" name="scale_select">
-                        <option value="automatic" selected="true">Automatically determined</option>
-                        <option value="manual">Manually specify minimum and maximum expected scores for the feature track</option>
+                <when value="none">
+                    <!-- When no scaling is done, no scores available, then just let the
+                    user choose a base color for the track -->
+                    <expand macro="auto_color"/>
+                </when>
+                <when value="score">
+                    <!-- Scaling -->
+                    <param name="score_scaling" type="select" label="JBrowse style.color function's 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" selected="false">Logarithmic scaling</option>
+                        <option value="blast" selected="@SCALING_LOG_SELECT@">Blast scaling</option>
                     </param>
-                    <when value="automatic" />
-                    <when value="manual">
-                        <param label="Minimum expected score" name="minimum" type="integer" value="0" />
-                        <param label="Maximum expected score" name="maximum" type="integer" value="100" />
-                    </when>
-                </conditional>
-
-                <!-- Scale color -->
-                <conditional name="color_scheme" label="Color Scheme for scored features">
-                    <param type="select" label="JBrowse style.color function's color scheme for scored values" name="score_scheme">
-                        <option value="opacity">Opacity (high scores = 1.0 opacity)</option>
-                        <!--<option value="brewer">Brewer Color Schemes</option>-->
-                    </param>
-                    <when value="opacity">
-                        <!-- Single color selection mode -->
-                        <expand macro="auto_color" />
-                    </when>
-                    <!--<when value="brewer">-->
+                    <!-- Scaling Bounds -->
+                    <conditional name="score_scales" label="Minimum/Maximum values for track scores">
+                        <param name="scale_select" type="select" label="How should minimum and maximum values be determined for the scores of the features">
+                            <option value="automatic" selected="true">Automatically determined</option>
+                            <option value="manual">Manually specify minimum and maximum expected scores for the feature track</option>
+                        </param>
+                        <when value="automatic"/>
+                        <when value="manual">
+                            <param name="minimum" type="integer" value="0" label="Minimum expected score"/>
+                            <param name="maximum" type="integer" value="100" label="Maximum expected score"/>
+                        </when>
+                    </conditional>
+                    <!-- Scale color -->
+                    <conditional name="color_scheme" label="Color Scheme for scored features">
+                        <param name="score_scheme" type="select" label="JBrowse style.color function's color scheme for scored values">
+                            <option value="opacity">Opacity (high scores = 1.0 opacity)</option>
+                            <!--<option value="brewer">Brewer Color Schemes</option>-->
+                        </param>
+                        <when value="opacity">
+                            <!-- Single color selection mode -->
+                            <expand macro="auto_color"/>
+                        </when>
+                        <!--<when value="brewer">-->
                         <!--[> Brewer continuum selection <]-->
                         <!--<expand macro="brewer_scheme" />-->
-                    <!--</when>-->
-                </conditional>
-            </when>
-        </conditional>
+                        <!--</when>-->
+                    </conditional>
+                </when>
+            </conditional>
         </section>
     </xml>
-
     <xml name="track_visibility">
-        <param type="select" label="Track Visibility" name="track_visibility">
+        <param name="track_visibility" type="select" label="Track Visibility">
             <option value="default_off">Off when browser opens</option>
             <option value="default_on" selected="true">On when browser opens</option>
         </param>
     </xml>
-
     <xml name="track_styling_linear">
-        <param label="Show labels" name="show_labels" type="boolean" checked="false" truevalue="true" falsevalue="false" />
-        <param label="Show descriptions" name="show_descriptions" type="boolean" checked="false" truevalue="true" falsevalue="false" />
+        <param name="show_labels" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Show labels"/>
+        <param name="show_descriptions" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Show descriptions"/>
         <param name="display_mode" type="select" label="Display mode">
             <option value="normal" selected="true">normal</option>
             <option value="compact">compact</option>
             <option value="reducedRepresentation">reducedRepresentation</option>
             <option value="collapse">collapse</option>
         </param>
-        <param label="Max height" name="max_height" type="integer" value="600" help="Maximum height that the track is permitted to reach in pixels."/>
+        <param name="max_height" type="integer" value="600" label="Max height" help="Maximum height that the track is permitted to reach in pixels."/>
     </xml>
-
     <xml name="track_styling_vgp">
-         <section name="jbstyle" title="JBrowse Styling Options [Advanced]" expanded="false">
-        <param label="Show labels" name="show_labels" type="boolean" checked="false" truevalue="true" falsevalue="false" />
-        <param label="Show descriptions" name="show_descriptions" type="boolean" checked="false" truevalue="true" falsevalue="false" />
-        <param name="display" type="select" label="Display style" help="How the track will be displayed by default">
-            <option value="LinearBasicDisplay" selected="true">LinearBasicDisplay</option>
-            <option value="LinearPileupDisplay">LinearPileupDisplay - good for dense tracks at scale</option>
-            <option value="LinearArcDisplay">LinearArcDisplay</option>
-        </param>
-        </section>
-    </xml>
-
-    <xml name="track_styling_feature">
         <section name="jbstyle" title="JBrowse Styling Options [Advanced]" expanded="false">
-        <conditional name="track_style">
+            <param name="show_labels" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Show labels"/>
+            <param name="show_descriptions" type="boolean" truevalue="true" falsevalue="false" checked="false" label="Show descriptions"/>
             <param name="display" type="select" label="Display style" help="How the track will be displayed by default">
                 <option value="LinearBasicDisplay" selected="true">LinearBasicDisplay</option>
                 <option value="LinearPileupDisplay">LinearPileupDisplay - good for dense tracks at scale</option>
                 <option value="LinearArcDisplay">LinearArcDisplay</option>
             </param>
-            <when value="LinearPileupDisplay">
-                <expand macro="track_styling_linear"/>
-            </when>
-            <when value="LinearBasicDisplay">
-                <expand macro="track_styling_linear"/>
-
-                <!-- examples: https://github.com/GMOD/jbrowse-components/discussions/2729
-                        and https://github.com/GMOD/jbrowse-components/blob/main/plugins/svg/src/SvgFeatureRenderer/configSchema.ts#L41  -->
-                <param label="Features label"
-                        type="text"
-                        name="label"
-                        value="jexl:get(feature,'name') || get(feature,'id')"
-                        help="See https://jbrowse.org/jb2/docs/config_guide/#configuration-callbacks for syntax">
-                    <sanitizer>
-                        <valid initial="default">
-                            <add value="|" />
-                            <add value="{"/>
-                            <add value="}"/>
-                            <add value="!"/>
-                            <add value="?"/>
-                            <add value="+"/>
-                            <add value="="/>
-                            <add value="'"/>
-                        </valid>
-                    </sanitizer>
-                </param>
-                <param label="Features description"
-                        type="text"
-                        name="description"
-                        value="jexl:get(feature,'note') || get(feature,'description')"
-                        help="See https://jbrowse.org/jb2/docs/config_guide/#configuration-callbacks for syntax">
-                    <sanitizer>
-                        <valid initial="default">
-                            <add value="|" />
-                            <add value="{"/>
-                            <add value="}"/>
-                            <add value="!"/>
-                            <add value="?"/>
-                            <add value="+"/>
-                            <add value="="/>
-                            <add value="'"/>
-                        </valid>
-                    </sanitizer>
-                </param>
-            </when>
-            <when value="LinearArcDisplay"/>
-        </conditional>
         </section>
     </xml>
-
+    <xml name="track_styling_feature">
+        <section name="jbstyle" title="JBrowse Styling Options [Advanced]" expanded="false">
+            <conditional name="track_style">
+                <param name="display" type="select" label="Display style" help="How the track will be displayed by default">
+                    <option value="LinearBasicDisplay" selected="true">LinearBasicDisplay</option>
+                    <option value="LinearPileupDisplay">LinearPileupDisplay - good for dense tracks at scale</option>
+                    <option value="LinearArcDisplay">LinearArcDisplay</option>
+                </param>
+                <when value="LinearPileupDisplay">
+                    <expand macro="track_styling_linear"/>
+                </when>
+                <when value="LinearBasicDisplay">
+                    <expand macro="track_styling_linear"/>
+                    <!-- examples: https://github.com/GMOD/jbrowse-components/discussions/2729
+                        and https://github.com/GMOD/jbrowse-components/blob/main/plugins/svg/src/SvgFeatureRenderer/configSchema.ts#L41  -->
+                    <param name="label" type="text" value="jexl:get(feature,'name') || get(feature,'id')" label="Features label" help="See https://jbrowse.org/jb2/docs/config_guide/#configuration-callbacks for syntax">
+                        <sanitizer>
+                            <valid initial="default">
+                                <add value="|"/>
+                                <add value="{"/>
+                                <add value="}"/>
+                                <add value="!"/>
+                                <add value="?"/>
+                                <add value="+"/>
+                                <add value="="/>
+                                <add value="'"/>
+                            </valid>
+                        </sanitizer>
+                    </param>
+                    <param name="description" type="text" value="jexl:get(feature,'note') || get(feature,'description')" label="Features description" help="See https://jbrowse.org/jb2/docs/config_guide/#configuration-callbacks for syntax">
+                        <sanitizer>
+                            <valid initial="default">
+                                <add value="|"/>
+                                <add value="{"/>
+                                <add value="}"/>
+                                <add value="!"/>
+                                <add value="?"/>
+                                <add value="+"/>
+                                <add value="="/>
+                                <add value="'"/>
+                            </valid>
+                        </sanitizer>
+                    </param>
+                </when>
+                <when value="LinearArcDisplay"/>
+            </conditional>
+        </section>
+    </xml>
     <xml name="track_styling_xam">
         <section name="jbstyle" title="JBrowse Styling Options [Advanced]" expanded="false">
             <conditional name="track_style">
@@ -393,16 +313,15 @@
                 <when value="LinearAlignmentsDisplay"/>
                 <when value="LinearPileupDisplay"/>
                 <when value="LinearSNPCoverageDisplay">
-                    <param name="displayCrossHatches" label="Draw cross hatches" type="boolean" checked="true" truevalue="true" falsevalue="false" />
-                    <param name="minScore" label="Min score" type="integer" value="" optional="true"/>
-                    <param name="maxScore" label="Max score" type="integer" value="" optional="true"/>
+                    <param name="displayCrossHatches" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Draw cross hatches"/>
+                    <param name="minScore" type="integer" value="" optional="true" label="Min score"/>
+                    <param name="maxScore" type="integer" value="" optional="true" label="Max score"/>
                 </when>
                 <when value="LinearReadArcsDisplay"/>
                 <when value="LinearReadCloudDisplay"/>
             </conditional>
         </section>
     </xml>
-
     <xml name="track_styling_vcf">
         <section name="jbstyle" title="JBrowse Styling Options [Advanced]" expanded="false">
             <conditional name="track_style">
@@ -417,7 +336,6 @@
             </conditional>
         </section>
     </xml>
-
     <xml name="track_styling_bigwig">
         <section name="jbstyle" title="JBrowse Styling Options [Advanced]" expanded="false">
             <conditional name="track_style">
@@ -431,59 +349,43 @@
                         <option value="globalsd">Global ± 3σ</option>
                         <option value="localsd">Local ± 3σ</option>
                     </param>
-                    <param name="resolution" label="Resolution" type="integer" value="1"/>
+                    <param name="resolution" type="integer" value="1" label="Resolution"/>
                     <param name="summaryScoreMode" type="select" label="Autoscale type">
                         <option value="max">Max</option>
                         <option value="min">Min</option>
                         <option value="avg">Avg</option>
                         <option value="whiskers" selected="true">Whiskers (combines all three)</option>
                     </param>
-                    <param name="filled" label="Fill in histogram" type="boolean" checked="true" truevalue="true" falsevalue="false" />
+                    <param name="filled" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Fill in histogram"/>
                     <param name="scaleType" type="select" label="Autoscale type">
                         <option value="linear" selected="true">Linear</option>
                         <option value="log">Log</option>
                     </param>
-                    <param name="displayCrossHatches" label="Draw cross hatches" type="boolean" checked="true" truevalue="true" falsevalue="false" />
-                    <param name="minScore" label="Min score" type="integer" value="" optional="true"/>
-                    <param name="maxScore" label="Max score" type="integer" value="" optional="true"/>
+                    <param name="displayCrossHatches" type="boolean" truevalue="true" falsevalue="false" checked="true" label="Draw cross hatches"/>
+                    <param name="minScore" type="integer" value="" optional="true" label="Min score"/>
+                    <param name="maxScore" type="integer" value="" optional="true" label="Max score"/>
                 </when>
             </conditional>
         </section>
     </xml>
-
     <xml name="track_menu">
         <section name="jbmenu" title="JBrowse Contextual Menu options [Advanced]" expanded="false">
             <repeat name="track_menu" title="Track Menu">
-                <param label="Menu action"
-                        type="select"
-                        name="menu_action"
-                        help="Action performed when user clicks on the menu">
+                <param name="menu_action" type="select" label="Menu action" help="Action performed when user clicks on the menu">
                     <option value="iframeDialog" selected="true">iframeDialog: causes the given url to be opened in a popup dialog box within JBrowse, in an iframe element.</option>
                     <option value="newWindow">newWindow: causes the given url to be opened in a new browser window.</option>
                     <option value="navigateTo">navigateTo: opens the given url in the same browser window, navigating the user away from JBrowse.</option>
                 </param>
-                <param label="Menu label"
-                        type="text"
-                        name="menu_label"
-                        help="Will be displayed in the contextual menu on each feature ({name}, {id}, {type}, {start}, {end}, {strand} variables will be interpreted)">
-                    <expand macro="menu_sanitize" />
+                <param name="menu_label" type="text" label="Menu label" help="Will be displayed in the contextual menu on each feature ({name}, {id}, {type}, {start}, {end}, {strand} variables will be interpreted)">
+                    <expand macro="menu_sanitize"/>
                 </param>
-                <param label="Menu title"
-                        type="text"
-                        name="menu_title"
-                        help="Will be displayed in the popup title bar if displayed ({id}, {type}, {start}, {end}, {strand} variables will be interpreted)">
-                    <expand macro="menu_sanitize" />
+                <param name="menu_title" type="text" label="Menu title" help="Will be displayed in the popup title bar if displayed ({id}, {type}, {start}, {end}, {strand} variables will be interpreted)">
+                    <expand macro="menu_sanitize"/>
                 </param>
-                <param label="Menu url"
-                        type="text"
-                        name="menu_url"
-                        help="Destination URL ({name}, {id}, {type}, {start}, {end}, {strand} variables will be interpreted)">
-                    <expand macro="menu_sanitize" />
+                <param name="menu_url" type="text" label="Menu url" help="Destination URL ({name}, {id}, {type}, {start}, {end}, {strand} variables will be interpreted)">
+                    <expand macro="menu_sanitize"/>
                 </param>
-                <param label="Menu icon"
-                        type="select"
-                        name="menu_icon"
-                        help="Icon to display next to menu label">
+                <param name="menu_icon" type="select" label="Menu icon" help="Icon to display next to menu label">
                     <option value="dijitIconBookmark" selected="true">Bookmark</option>
                     <option value="dijitIconSave">Save</option>
                     <option value="dijitIconPrint">Print</option>
@@ -521,7 +423,6 @@
             </repeat>
         </section>
     </xml>
-
     <xml name="menu_sanitize">
         <sanitizer>
             <valid>
@@ -533,28 +434,26 @@
                 <add value="+"/>
                 <add value="="/>
                 <add value="'"/>
-                <add value='"'/>
+                <add value="&quot;"/>
             </valid>
         </sanitizer>
     </xml>
-
     <xml name="input_conditional" token_label="Track Data" token_format="data">
         <conditional name="useuri">
-            <param name="insource" type="select" label="Define track data as a history file or an internet URI"
-                help="A public URI implies that all the associated tabix files are also in place. They are created for history files">
+            <param name="insource" type="select" label="Define track data as a history file or an internet URI" help="A public URI implies that all the associated tabix files are also in place. They are created for history files">
                 <option value="history" selected="true">Track data from a history file</option>
-                <option value="uri" >Tabix data URI - index files must be available at corresponding URI</option>
+                <option value="uri">Tabix data URI - index files must be available at corresponding URI</option>
             </param>
             <when value="history">
-                <param label="@LABEL@" format="@FORMAT@" name="annotation" multiple="True" optional="true" type="data" />
+                <param name="annotation" type="data" format="@FORMAT@" optional="true" label="@LABEL@" multiple="True"/>
             </when>
             <when value="uri">
-                <param label="@LABEL@" name="annouri"  type="text" />
-                <param label="Short name for track display" name="annoname" type="text" >
+                <param name="annouri" type="text" label="@LABEL@"/>
+                <param name="annoname" type="text" label="Short name for track display">
                     <sanitizer invalid_char="_">
-                    <valid initial="string.printable" >
-                        <remove value="'" />
-                    </valid>
+                        <valid initial="string.printable">
+                            <remove value="'"/>
+                        </valid>
                     </sanitizer>
                 </param>
             </when>
@@ -562,24 +461,22 @@
     </xml>
     <xml name="pafref_conditional" token_label="Track Data" token_format="data">
         <conditional name="pafuseuri">
-            <param name="insource" type="select" label="PAF reference data from a history file or an internet URI?"
-                help="Multiple references can be used for mashmap PAF. A URI source requires all the associated tabix index files to be in place.">
+            <param name="insource" type="select" label="PAF reference data from a history file or an internet URI?" help="Multiple references can be used for mashmap PAF. A URI source requires all the associated tabix index files to be in place.">
                 <option value="history" selected="true">PAF reference comparison genome from a history file</option>
                 <option value="uri">PAF reference comparison genome tabix .gz URI with index files at the corresponding URIs</option>
             </param>
             <when value="history">
-                    <param label="@LABEL@" format="@FORMAT@" name="annotation"  type="data"
-                        help="Add all PAF reference comparison genomes used to make the PAF" multiple="true" />
+                <param name="annotation" type="data" format="@FORMAT@" label="@LABEL@" help="Add all PAF reference comparison genomes used to make the PAF" multiple="true"/>
             </when>
             <when value="uri">
                 <repeat name="refuri" title="PAF reference comparison genome URI" min="1">
-                    <param label="@LABEL@" name="annotation"  type="text" />
-                    <param label="Short name for this reference" name="annoname" type="text" help="Short names take less track space">
-                            <sanitizer invalid_char="_">
-                                <valid initial="string.printable" >
-                                    <remove value="'" />
-                                </valid>
-                            </sanitizer>
+                    <param name="annotation" type="text" label="@LABEL@"/>
+                    <param name="annoname" type="text" label="Short name for this reference" help="Short names take less track space">
+                        <sanitizer invalid_char="_">
+                            <valid initial="string.printable">
+                                <remove value="'"/>
+                            </valid>
+                        </sanitizer>
                     </param>
                 </repeat>
             </when>
@@ -587,8 +484,8 @@
     </xml>
     <xml name="citations">
         <citations>
-        <citation type="doi">10.1186/s13059-016-0924-1</citation>
-        <citation type="doi">10.1101/gr.094607.109</citation>
+            <citation type="doi">10.1186/s13059-016-0924-1</citation>
+            <citation type="doi">10.1101/gr.094607.109</citation>
         </citations>
     </xml>
 </macros>
--- a/readme.rst	Thu Apr 25 07:25:52 2024 +0000
+++ b/readme.rst	Sat Jun 01 05:37:13 2024 +0000
@@ -1,5 +1,16 @@
 JBrowse2 in Galaxy
 ==================
+
+
+Added April 2024:
+Multiple independent assembly/track sets in the same browser now working
+Tests are now far more convincing using the zip outputs to check for files
+Automated collection generation is really cool - TODO: need visibility for each track
+maf and blastxml are working for test files at least - not yet properly tested.
+cool/mcool are converted to hic 
+vcf, cram, bam, bed, gff, bigwig, hic, cool, blastxml, maf, paf tracks.
+
+
 Added Mar 26:
 Testing history added with tests of the 8 simple formats
 hic and paf need small tests but work with big ones...
@@ -29,9 +40,9 @@
 
 .. image:: dm4_in_jb2.png
 
-Other tracks
+Other samples
 
-.. image:: jbrowse8.png
+.. image:: jb2_samplerMay5.png
 
 JBrowse2 is a fast, embeddable genome browser built completely with
 JavaScript and HTML5
@@ -69,17 +80,17 @@
 
 - 2.10.0+galaxy2
 
-    - UPDATED existing JBrowse1.16.11 code to JBrowse 2.10.0
-    - was working well enough for VGP when previous PR discovered
-        - too late to backport all the fixes
-        - working default session and some other ideas copied instead.
-    - seems to work well with defaults.
-    - need to document and implement track settings by running the browser locally.
-    - works well enough to be useful in workflows such as TreeValGal.
-    - JB2 seems to set defaults wisely.
-    - not yet ideal for users who need fine grained track control.
-    - synteny (paf + reference) now working
-    - rehomed at https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 while IUC reviews are slowly sorted out.
+- UPDATED existing JBrowse1.16.11 code to JBrowse 2.10.0
+- was working well enough for VGP when previous PR discovered
+   - too late to backport all the fixes
+   - working default session and some other ideas copied instead.
+- seems to work well with defaults.
+- need to document and implement track settings by running the browser locally.
+- works well enough to be useful in workflows such as TreeValGal.
+- JB2 seems to set defaults wisely.
+- not yet ideal for users who need fine grained track control.
+- synteny (paf + reference) now working
+- rehomed at https://github.com/usegalaxy-eu/temporary-tools/tree/master/jbrowse2 while IUC reviews are slowly sorted out.
 
 
 Wrapper License (MIT/BSD Style)