changeset 17:c02720d1afee draft

planemo upload for repository https://github.com/goeckslab/hub-archive-creator commit 1adbf397de1fc7af4d91e026093d7fff983e21cf
author rmarenco
date Fri, 30 Sep 2016 15:14:24 -0400
parents 3233451a3bd6
children d786bca6a75d
files Bam.py Bam.pyc Bed.py Bed.pyc BedSimpleRepeats.py BedSimpleRepeats.pyc BigWig.py BigWig.pyc Datatype.py Datatype.pyc Gff3.py Gff3.pyc Gtf.py Gtf.pyc Psl.py Psl.pyc Track.py Track.pyc TrackDb.py TrackDb.pyc TrackHub.py TrackHub.pyc hubArchiveCreator.py hubArchiveCreator.xml templates/groupsTxt/layout.txt templates/trackDb/layout.txt tool_dependencies.xml
diffstat 27 files changed, 283 insertions(+), 182 deletions(-) [+]
line wrap: on
line diff
--- a/Bam.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/Bam.py	Fri Sep 30 15:14:24 2016 -0400
@@ -32,12 +32,11 @@
 
         self.priority = self.data_bam["order_index"]
         self.index_bam = self.data_bam["index"]
-        # TODO: Think about how to avoir repetition of the color treatment
+        # TODO: Think about how to avoid repetition of the color treatment
         self.track_color = self.data_bam["track_color"]
 
-        logging.debug("Color of bam: {0}".format(self.track_color))
-
-        #print "Creating TrackHub BAM from (falsePath: %s; name: %s)" % ( self.input_bam_false_path, self.name_bam)
+        # TODO: Think about how to avoid repetition of the group_name everywhere
+        self.group_name = self.data_bam["group_name"]
 
         # First: Add the bam file
         # Second: Add the bam index file, in the same folder (https://genome.ucsc.edu/goldenpath/help/bam.html)
@@ -55,7 +54,9 @@
                          track_name=self.name_bam,
                          long_label=self.name_bam, track_type='bam', visibility='pack', priority=self.priority,
                          track_file=bam_index_file_path,
-                         track_color=self.track_color)
+                         track_color=self.track_color,
+                         group_name=self.group_name
+                         )
         #
         # dataURL = "tracks/%s" % self.name_bam
         #
Binary file Bam.pyc has changed
--- a/Bed.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/Bed.py	Fri Sep 30 15:14:24 2016 -0400
@@ -24,6 +24,9 @@
         self.name_bed_generic = self.data_bed_generic["name"]
         self.priority = self.data_bed_generic["order_index"]
         self.track_color = self.data_bed_generic["track_color"]
+        # TODO: Think about how to avoid repetition of the group_name everywhere
+        self.group_name = self.data_bed_generic["group_name"]
+
 
         # Sort processing
         subtools.sort(self.inputBedGeneric, self.sortedBedFile.name)
@@ -44,7 +47,8 @@
                          long_label=self.name_bed_generic, track_type='bigBed', visibility='dense',
                          priority=self.priority,
                          track_file=myBigBedFilePath,
-                         track_color=self.track_color)
+                         track_color=self.track_color,
+                         group_name=self.group_name)
 
         # dataURL = "tracks/%s" % trackName
         #
Binary file Bed.pyc has changed
--- a/BedSimpleRepeats.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/BedSimpleRepeats.py	Fri Sep 30 15:14:24 2016 -0400
@@ -18,6 +18,8 @@
         self.name_bed_simple_repeats = data_bed_simple_repeats["name"]
         self.priority = data_bed_simple_repeats["order_index"]
         self.track_color = data_bed_simple_repeats["track_color"]
+        # TODO: Think about how to avoid repetition of the group_name everywhere
+        self.group_name = data_bed_simple_repeats["group_name"]
 
         sortedBedFile = tempfile.NamedTemporaryFile(suffix=".sortedBed")
 
@@ -44,7 +46,8 @@
                          long_label=self.name_bed_simple_repeats, track_type='bigBed 4 +', visibility='dense',
                          priority=self.priority,
                          track_file=myBigBedFilePath,
-                         track_color=self.track_color)
+                         track_color=self.track_color,
+                         group_name=self.group_name)
 
         # dataURL = "tracks/%s" % trackName
         #
Binary file BedSimpleRepeats.pyc has changed
--- a/BigWig.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/BigWig.py	Fri Sep 30 15:14:24 2016 -0400
@@ -19,6 +19,8 @@
         self.name_bigwig = data_bigwig["name"]
         self.priority = data_bigwig["order_index"]
         self.track_color = data_bigwig["track_color"]
+        # TODO: Think about how to avoid repetition of the group_name everywhere
+        self.group_name = data_bigwig["group_name"]
 
         #print "Creating TrackHub BigWig from (falsePath: %s; name: %s)" % ( self.input_bigwig_path, self.name_bigwig )
 
@@ -34,7 +36,8 @@
                          track_type='bigWig', visibility='full',
                          priority=self.priority,
                          track_file=myBigWigFilePath,
-                         track_color=self.track_color)
+                         track_color=self.track_color,
+                         group_name=self.group_name)
 
         # dataURL = "tracks/%s" % trackName
         #
Binary file BigWig.pyc has changed
--- a/Datatype.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/Datatype.py	Fri Sep 30 15:14:24 2016 -0400
@@ -76,7 +76,7 @@
                     file_path=None,
                     track_name=None, long_label=None, thick_draw_item='off',
                     short_label=None, track_type=None, visibility=None, priority=None,
-                    track_file=None, track_color='#000000'):
+                    track_file=None, track_color='#000000', group_name="Default"):
 
         # TODO: Remove the hardcoded "tracks" by the value used as variable from myTrackFolderPath
         data_url = "tracks/%s" % file_path
@@ -104,7 +104,8 @@
                 visibility=visibility,
                 thickDrawItem=thick_draw_item,
                 priority=priority,
-                track_color=rgb_ucsc
+                track_color=rgb_ucsc,
+                group_name=group_name
         )
 
         # Return the Bam Track Object
Binary file Datatype.pyc has changed
--- a/Gff3.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/Gff3.py	Fri Sep 30 15:14:24 2016 -0400
@@ -20,6 +20,8 @@
         self.name_gff3 = data_gff3["name"]
         self.priority = data_gff3["order_index"]
         self.track_color = data_gff3["track_color"]
+        # TODO: Think about how to avoid repetition of the group_name everywhere
+        self.group_name = data_gff3["group_name"]
 
         # TODO: See if we need these temporary files as part of the generated files
         unsorted_genePred_file = tempfile.NamedTemporaryFile(bufsize=0, suffix=".genePred")
@@ -59,6 +61,7 @@
                          track_type='bigGenePred', visibility='dense',
                          priority=self.priority,
                          track_file=myBigBedFilePath,
-                         track_color=self.track_color)
+                         track_color=self.track_color,
+                         group_name=self.group_name)
 
         print("- Gff3 %s created" % self.name_gff3)
Binary file Gff3.pyc has changed
--- a/Gtf.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/Gtf.py	Fri Sep 30 15:14:24 2016 -0400
@@ -21,6 +21,8 @@
         self.name_gtf = data_gtf["name"]
         self.priority = data_gtf["order_index"]
         self.track_color = data_gtf["track_color"]
+        # TODO: Think about how to avoid repetition of the group_name everywhere
+        self.group_name = data_gtf["group_name"]
 
         #print "Creating TrackHub GTF from (falsePath: %s; name: %s)" % ( self.input_gtf_false_path, self.name_gtf)
 
@@ -61,6 +63,7 @@
                          long_label=self.name_gtf, track_type='bigGenePred',
                          visibility='dense', priority=self.priority,
                          track_file=myBigBedFilePath,
-                         track_color=self.track_color)
+                         track_color=self.track_color,
+                         group_name=self.group_name)
 
         print("- Gtf %s created" % self.name_gtf)
Binary file Gtf.pyc has changed
--- a/Psl.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/Psl.py	Fri Sep 30 15:14:24 2016 -0400
@@ -17,6 +17,8 @@
         self.name_psl = data_psl["name"]
         self.priority = data_psl["order_index"]
         self.track_color = data_psl["track_color"]
+        # TODO: Think about how to avoid repetition of the group_name everywhere
+        self.group_name = data_psl["group_name"]
 
         # Temporary files
         unsorted_bed_formatted_psl_file = tempfile.NamedTemporaryFile(suffix='.psl')
@@ -52,6 +54,7 @@
                          track_type='bigPsl', visibility='dense',
                          priority=self.priority,
                          track_file=my_big_psl_file_path,
-                         track_color=self.track_color)
+                         track_color=self.track_color,
+                         group_name=self.group_name)
 
         print("- BigPsl %s created" % self.name_psl)
\ No newline at end of file
Binary file Psl.pyc has changed
--- a/Track.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/Track.py	Fri Sep 30 15:14:24 2016 -0400
@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-
+# TODO: Is this still useful?
 class Track(object):
     """Class to manage the track informations needed for Track Hub, in the TrackDb text file"""
 
Binary file Track.pyc has changed
--- a/TrackDb.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/TrackDb.py	Fri Sep 30 15:14:24 2016 -0400
@@ -4,7 +4,7 @@
     """docstring for TrackDb"""
 
     def __init__(self, trackName="", longLabel="", shortLabel="", trackDataURL="", trackType="", visibility="",
-                 thickDrawItem='off', priority="0", track_color="#000000"):
+                 thickDrawItem='off', priority="0", track_color="#000000", group_name="Default"):
         super(TrackDb, self).__init__()
 
         self.trackName = trackName
@@ -16,3 +16,4 @@
         self.thickDrawItem = thickDrawItem
         self.priority = priority
         self.track_color = track_color
+        self.group_name = group_name
Binary file TrackDb.pyc has changed
--- a/TrackHub.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/TrackHub.py	Fri Sep 30 15:14:24 2016 -0400
@@ -33,11 +33,23 @@
         self.default_pos = None
         self.user_email = user_email
 
+        # Set containing the groups already added. Updated by addGroup()
+        self.groups = set()
+
         # TODO: Modify according to the files passed in parameter
+        # ---- Templates ----
+        # Template trackDb
         mylookup = TemplateLookup(directories=[os.path.join(tool_directory, 'templates/trackDb')],
                                   output_encoding='utf-8', encoding_errors='replace')
         self.trackDbTemplate = mylookup.get_template("layout.txt")
 
+        # Template groups
+        mylookup = TemplateLookup(directories=[os.path.join(self.tool_directory, 'templates/groupsTxt')],
+                                  output_encoding='utf-8', encoding_errors='replace')
+        self.groupsTemplate = mylookup.get_template("layout.txt")
+
+        # ---- End Templates ----
+
         self.extra_files_path = extra_files_path
         self.outputFile = outputFile
 
@@ -68,16 +80,43 @@
     def addTrack(self, trackDbObject=None):
         # Create the trackDb.txt file in the specie folder, if not exists
         # Else append the new track
+        # TODO: Get this out of the function
         trackDbTxtFilePath = os.path.join(self.mySpecieFolderPath, 'trackDb.txt')
 
         # Append to trackDbTxtFilePath the trackDbTemplate populate with the newTrack object
         with open(trackDbTxtFilePath, 'a+') as trackDbFile:
             trackDbs = [trackDbObject]
+
+            # TODO: The addGroup does not belong here. Move it when the group becomes more than just a label
+            # Add the group as well, if exists in trackDbObject
+            self.addGroup(trackDbObject.group_name)
+
             htmlMakoRendered = self.trackDbTemplate.render(
                 trackDbs=trackDbs
             )
             trackDbFile.write(htmlMakoRendered)
 
+    def addGroup(self, group_name="Default"):
+        # If not already present in self.groups, add to groups.txt
+        # Create the trackDb.txt file in the specie folder, if not exists
+        # Else append the new track
+        # TODO: Get this out of the function
+        groupsTxtFilePath = os.path.join(self.mySpecieFolderPath, 'groups.txt')
+
+        # If the group is already present, we don't need to add it
+        if group_name in self.groups:
+            return
+
+        # Append to trackDbTxtFilePath the trackDbTemplate populate with the newTrack object
+        with open(groupsTxtFilePath, 'a+') as groupFile:
+            # Add the group as well, if exists in trackDbObject
+
+            htmlMakoRendered = self.groupsTemplate.render(
+                    label=group_name
+            )
+            groupFile.write(htmlMakoRendered)
+        self.groups.add(group_name)
+
     def terminate(self):
         # Just a test to output a simple HTML
         # TODO: Create a class to handle the file object
@@ -182,8 +221,8 @@
 
         # Create the file groups.txt
         # TODO: If not inputs for this, do no create the file
-        groupsTxtFilePath = os.path.join(mySpecieFolderPath, 'groups.txt')
-        self.__fillGroupsTxtFile__(groupsTxtFilePath)
+        # groupsTxtFilePath = os.path.join(mySpecieFolderPath, 'groups.txt')
+        # self.__fillGroupsTxtFile__(groupsTxtFilePath)
 
         # Create the folder tracks into the specie folder
         tracksFolderPath = os.path.join(mySpecieFolderPath, "tracks")
Binary file TrackHub.pyc has changed
--- a/hubArchiveCreator.py	Sun Sep 25 11:25:38 2016 -0400
+++ b/hubArchiveCreator.py	Fri Sep 30 15:14:24 2016 -0400
@@ -126,7 +126,6 @@
     # We remove the spaces in ["name"] of inputs_data
     sanitize_name_inputs(inputs_data)
 
-
     # TODO: Check here all the binaries / tools we need. Exception if missing
 
     # Create the Track Hub folder
--- a/hubArchiveCreator.xml	Sun Sep 25 11:25:38 2016 -0400
+++ b/hubArchiveCreator.xml	Fri Sep 30 15:14:24 2016 -0400
@@ -12,7 +12,8 @@
         <requirement type="package" version="332">ucsc-genepredtobiggenepred</requirement>
         <requirement type="package" version="332">ucsc-gff3togenepred</requirement>
         <requirement type="package" version="332">ucsc-gtftogenepred</requirement>
-        <requirement type="package" version="332">ucsc-psltobigpsl</requirement>
+        <!-- TODO: Change the conda ucsc-psltobigpsl and take one > v337 because of bugs before -->
+        <!-- <requirement type="package" version="332">ucsc-psltobigpsl</requirement> -->
         <requirement type="package" version="332">ucsc-twobitinfo</requirement>
         <requirement type="package" version="1.3">samtools</requirement>
         <!-- ToolShed dependencies -->
@@ -21,6 +22,7 @@
         <requirement type="package" version="0.0.1">gtfToGenePred</requirement>
         <requirement type="package" version="0.0.1">genePredToBed</requirement>
         <requirement type="package" version="0.0.1">genePredToBigGenePred</requirement>
+        <requirement type="package" version="0.0.1">pslToBigPsl</requirement>
         <requirement type="package" version="1.2">samtools</requirement>
     </requirements>
 
@@ -60,48 +62,59 @@
 
         #end def
 
-        #for $i, $f in enumerate( $format )
-            #set track_color = str($f.formatChoice.track_color)
+        #for $i_g, $g in enumerate( $group )
+            #for $i, $f in enumerate( $g.format )
+
+                ## For each format, we have a few mandatory fields we store in a dict
+                #set track_color = str($f.formatChoice.track_color)
+                #set group_name = str($g.group_name)
 
-            #if $f.formatChoice.format_select == "bam"
-                --bam $f.formatChoice.BAM
-                #set bam_index = $f.formatChoice.BAM.metadata.bam_index
-                #silent $prepare_json($f.formatChoice.BAM, $i, {"index": $bam_index,
-                                                                "track_color": $track_color})
-            #end if
-            #if $f.formatChoice.format_select == "bed"
-                #if $f.formatChoice.bedChoice.bed_select == "bed"
-                    --bed $f.formatChoice.bedChoice.BED
-                    #silent $prepare_json($f.formatChoice.bedChoice.BED, $i,
-                                            {"track_color": $track_color})
-                #end if
-                #if $f.formatChoice.bedChoice.bed_select == "bed_simple_repeats_option"
-                    --bedSimpleRepeats $f.formatChoice.bedChoice.BED_simple_repeats
-                    #silent $prepare_json($f.formatChoice.bedChoice.BED_simple_repeats, $i,
-                                            {"track_color": $track_color})
+                #set extra_data_dict = {"track_color": $track_color,
+                                        "group_name": $group_name}
+
+                #if $f.formatChoice.format_select == "bam"
+                    --bam $f.formatChoice.BAM
+                    #set bam_index = $f.formatChoice.BAM.metadata.bam_index
+
+                    ## Add Bam format specific fields
+                    #silent extra_data_dict.update({"index": $bam_index})
+
+                    #silent $prepare_json($f.formatChoice.BAM, $i, extra_data_dict)
                 #end if
-            #end if
-            #if $f.formatChoice.format_select == "psl"
-                --psl $f.formatChoice.PSL
-                #silent $prepare_json($f.formatChoice.PSL, $i,
-                                        {"track_color": $track_color})
-            #end if
-            #if $f.formatChoice.format_select == "bigwig"
-                --bigwig $f.formatChoice.BIGWIG
-                #silent $prepare_json($f.formatChoice.BIGWIG, $i,
-                                        {"track_color": $track_color})
-            #end if
-            #if $f.formatChoice.format_select == "gff3"
-                --gff3 $f.formatChoice.GFF3
-                #silent $prepare_json($f.formatChoice.GFF3, $i,
-                                        {"track_color": $track_color})
-            #end if
-            #if $f.formatChoice.format_select == "gtf"
-                ## Add also GTF from Agustus? See https://github.com/ENCODE-DCC/kentUtils/issues/8
-                --gtf $f.formatChoice.GTF
-                #silent $prepare_json($f.formatChoice.GTF, $i,
-                                         {"track_color": $track_color})
-            #end if
+                #if $f.formatChoice.format_select == "bed"
+                    #if $f.formatChoice.bedChoice.bed_select == "bed"
+                        --bed $f.formatChoice.bedChoice.BED
+                        #silent $prepare_json($f.formatChoice.bedChoice.BED, $i,
+                                                extra_data_dict)
+                    #end if
+                    #if $f.formatChoice.bedChoice.bed_select == "bed_simple_repeats_option"
+                        --bedSimpleRepeats $f.formatChoice.bedChoice.BED_simple_repeats
+                        #silent $prepare_json($f.formatChoice.bedChoice.BED_simple_repeats, $i,
+                                                extra_data_dict)
+                    #end if
+                #end if
+                #if $f.formatChoice.format_select == "psl"
+                    --psl $f.formatChoice.PSL
+                    #silent $prepare_json($f.formatChoice.PSL, $i,
+                                           extra_data_dict)
+                #end if
+                #if $f.formatChoice.format_select == "bigwig"
+                    --bigwig $f.formatChoice.BIGWIG
+                    #silent $prepare_json($f.formatChoice.BIGWIG, $i,
+                                            extra_data_dict)
+                #end if
+                #if $f.formatChoice.format_select == "gff3"
+                    --gff3 $f.formatChoice.GFF3
+                    #silent $prepare_json($f.formatChoice.GFF3, $i,
+                                            extra_data_dict)
+                #end if
+                #if $f.formatChoice.format_select == "gtf"
+                    ## Add also GTF from Agustus? See https://github.com/ENCODE-DCC/kentUtils/issues/8
+                    --gtf $f.formatChoice.GTF
+                    #silent $prepare_json($f.formatChoice.GTF, $i,
+                                             extra_data_dict)
+                #end if
+            #end for
         #end for
 
         ## We combine the fasta file dataset name with his false path in a JSON object
@@ -139,126 +152,129 @@
                 type="data"
                 label="Reference genome"
         />
-        <repeat name="format" title="Formats">
-            <conditional name="formatChoice">
-                <param name="format_select" type="select" label="Format">
-                    <option value="bam" selected="true">BAM</option>
-                    <option value="bed">BED</option>
-                    <option value="psl">PSL</option>
-                    <option value="bigwig">BIGWIG</option>
-                    <option value="gff3">GFF3</option>
-                    <option value="gtf">GTF</option>
-                </param>
-
-                <when value="bam">
-                    <param
-                            format="bam"
-                            name="BAM"
-                            type="data"
-                            label="BAM File"
-                    />
-                    <!-- TODO: Find a solution to avoid repetition and to generate a new color depending on the others -->
-                    <param name="track_color" type="color" label="Track color" value="#000000">
-                        <sanitizer>
-                            <valid initial="string.letters,string.digits">
-                                <add value="#"/>
-                            </valid>
-                        </sanitizer>
-                    </param>
-                </when>
-                <when value="bed">
-                    <conditional name="bedChoice">
-                        <param name="bed_select" type="select" label="Bed Choice">
-                            <option value="bed" selected="true">BED Generic (bed3+)</option>
-                            <option value="bed_simple_repeats_option">BED Simple repeat (bed4+12 / simpleRepeat.as)</option>
-                        </param>
-                        <when value="bed">
-                            <param
-                                    format="bed"
-                                    name="BED"
-                                    type="data"
-                                    label="Generic Bed File Choice"
-                            />
-
-                        </when>
-                        <when value="bed_simple_repeats_option">
-                            <param
-                                    format="bed"
-                                    name="BED_simple_repeats"
-                                    type="data"
-                                    label="Bed Simple Repeats (Bed4+12) File"
-                            />
-                        </when>
-                    </conditional>
-                    <param name="track_color" type="color" label="Track color" value="#000000">
-                        <sanitizer>
-                            <valid initial="string.letters,string.digits">
-                                <add value="#"/>
-                            </valid>
-                        </sanitizer>
+        <repeat name="group" title="New group">
+            <param type="text" name="group_name" label="Group name" value="Default group"/>
+            <repeat name="format" title="New track">
+                <conditional name="formatChoice">
+                    <param name="format_select" type="select" label="Format">
+                        <option value="bam" selected="true">BAM</option>
+                        <option value="bed">BED</option>
+                        <option value="psl">PSL</option>
+                        <option value="bigwig">BIGWIG</option>
+                        <option value="gff3">GFF3</option>
+                        <option value="gtf">GTF</option>
                     </param>
-                </when>
-                <when value="psl">
-                    <param
-                            format="psl"
-                            name="PSL"
-                            type="data"
-                            label="PSL File"
-                    />
-                    <param name="track_color" type="color" label="Track color" value="#000000">
-                        <sanitizer>
-                            <valid initial="string.letters,string.digits">
-                                <add value="#"/>
-                            </valid>
-                        </sanitizer>
-                    </param>
-                </when>
-                <when value="bigwig">
-                    <param
-                            format="bigwig"
-                            name="BIGWIG"
-                            type="data"
-                            label="BIGWIG File"
-                    />
-                    <param name="track_color" type="color" label="Track color" value="#000000">
-                        <sanitizer>
-                            <valid initial="string.letters,string.digits">
-                                <add value="#"/>
-                            </valid>
-                        </sanitizer>
-                    </param>
-                </when>
-                <when value="gff3">
-                    <param
-                            format="gff3"
-                            name="GFF3"
-                            type="data"
-                            label="GFF3 File"
-                    />
-                    <param name="track_color" type="color" label="Track color" value="#000000">
-                        <sanitizer>
-                            <valid initial="string.letters,string.digits">
-                                <add value="#"/>
-                            </valid>
-                        </sanitizer>
-                    </param>
-                </when>
-                <when value="gtf">
-                    <param
-                            format="gtf"
-                            name="GTF"
-                            type="data"
-                            label="GTF File"
-                    />
-                    <param name="track_color" type="color" label="Track color" value="#000000">
-                        <sanitizer>
-                            <valid initial="string.letters,string.digits">
-                                <add value="#"/>
-                            </valid>
-                        </sanitizer>
-                    </param>
-                </when>
-            </conditional>
+
+                    <when value="bam">
+                        <param
+                                format="bam"
+                                name="BAM"
+                                type="data"
+                                label="BAM File"
+                        />
+                        <!-- TODO: Find a solution to avoid repetition and to generate a new color depending on the others -->
+                        <param name="track_color" type="color" label="Track color" value="#000000">
+                            <sanitizer>
+                                <valid initial="string.letters,string.digits">
+                                    <add value="#"/>
+                                </valid>
+                            </sanitizer>
+                        </param>
+                    </when>
+                    <when value="bed">
+                        <conditional name="bedChoice">
+                            <param name="bed_select" type="select" label="Bed Choice">
+                                <option value="bed" selected="true">BED Generic (bed3+)</option>
+                                <option value="bed_simple_repeats_option">BED Simple repeat (bed4+12 / simpleRepeat.as)</option>
+                            </param>
+                            <when value="bed">
+                                <param
+                                        format="bed"
+                                        name="BED"
+                                        type="data"
+                                        label="Generic Bed File Choice"
+                                />
+
+                            </when>
+                            <when value="bed_simple_repeats_option">
+                                <param
+                                        format="bed"
+                                        name="BED_simple_repeats"
+                                        type="data"
+                                        label="Bed Simple Repeats (Bed4+12) File"
+                                />
+                            </when>
+                        </conditional>
+                        <param name="track_color" type="color" label="Track color" value="#000000">
+                            <sanitizer>
+                                <valid initial="string.letters,string.digits">
+                                    <add value="#"/>
+                                </valid>
+                            </sanitizer>
+                        </param>
+                    </when>
+                    <when value="psl">
+                        <param
+                                format="psl"
+                                name="PSL"
+                                type="data"
+                                label="PSL File"
+                        />
+                        <param name="track_color" type="color" label="Track color" value="#000000">
+                            <sanitizer>
+                                <valid initial="string.letters,string.digits">
+                                    <add value="#"/>
+                                </valid>
+                            </sanitizer>
+                        </param>
+                    </when>
+                    <when value="bigwig">
+                        <param
+                                format="bigwig"
+                                name="BIGWIG"
+                                type="data"
+                                label="BIGWIG File"
+                        />
+                        <param name="track_color" type="color" label="Track color" value="#000000">
+                            <sanitizer>
+                                <valid initial="string.letters,string.digits">
+                                    <add value="#"/>
+                                </valid>
+                            </sanitizer>
+                        </param>
+                    </when>
+                    <when value="gff3">
+                        <param
+                                format="gff3"
+                                name="GFF3"
+                                type="data"
+                                label="GFF3 File"
+                        />
+                        <param name="track_color" type="color" label="Track color" value="#000000">
+                            <sanitizer>
+                                <valid initial="string.letters,string.digits">
+                                    <add value="#"/>
+                                </valid>
+                            </sanitizer>
+                        </param>
+                    </when>
+                    <when value="gtf">
+                        <param
+                                format="gtf"
+                                name="GTF"
+                                type="data"
+                                label="GTF File"
+                        />
+                        <param name="track_color" type="color" label="Track color" value="#000000">
+                            <sanitizer>
+                                <valid initial="string.letters,string.digits">
+                                    <add value="#"/>
+                                </valid>
+                            </sanitizer>
+                        </param>
+                    </when>
+                </conditional>
+            </repeat>
         </repeat>
         <conditional name="advanced_options">
             <param name="advanced_options_selector" type="select" label="Advanced options">
--- a/templates/groupsTxt/layout.txt	Sun Sep 25 11:25:38 2016 -0400
+++ b/templates/groupsTxt/layout.txt	Fri Sep 30 15:14:24 2016 -0400
@@ -1,4 +1,5 @@
-name ${mapName}
-label ${labelMapping}
-priority ${prioriy}
-defaultIsClosed ${isClosed}
+name ${label.lower().replace(' ', '_')}
+label ${label}
+priority 2
+defaultIsClosed 0
+
--- a/templates/trackDb/layout.txt	Sun Sep 25 11:25:38 2016 -0400
+++ b/templates/trackDb/layout.txt	Fri Sep 30 15:14:24 2016 -0400
@@ -9,5 +9,6 @@
     thickDrawItem ${trackDb.thickDrawItem}
     priority ${trackDb.priority}
     color ${trackDb.track_color}
+    group ${trackDb.group_name.lower().replace(' ', '_')}
 
 % endfor
--- a/tool_dependencies.xml	Sun Sep 25 11:25:38 2016 -0400
+++ b/tool_dependencies.xml	Fri Sep 30 15:14:24 2016 -0400
@@ -105,4 +105,27 @@
         </install>
         <readme>The tools downloaded by this dependency definition are free for academic use.</readme>
     </package>
+
+    <!-- Package pslToBigPsl -->
+    <package name="pslToBigPsl" version="0.0.1">
+        <install version="1.0">
+            <actions>
+                <action target_directory="bin" type="download_binary">
+                    <url_template os="darwin">
+                        http://hgdownload.cse.ucsc.edu/admin/exe/macOSX.${architecture}/pslToBigPsl
+                    </url_template>
+                    <url_template os="linux">
+                        http://hgdownload.cse.ucsc.edu/admin/exe/linux.${architecture}/pslToBigPsl
+                    </url_template>
+                </action>
+                <action type="chmod">
+                    <file mode="750">$INSTALL_DIR/bin/pslToBigPsl</file>
+                </action>
+                <action type="set_environment">
+                    <environment_variable action="prepend_to" name="PATH">$INSTALL_DIR/bin</environment_variable>
+                </action>
+            </actions>
+        </install>
+        <readme>The tools downloaded by this dependency definition are free for academic use.</readme>
+    </package>
 </tool_dependency>