changeset 42:a5108e5010b4 draft

planemo upload for repository https://github.com/Yating-L/jbrowse_hub commit 149c5cbda82f49f260767b5710f0c2160eebc881-dirty
author yating-l
date Mon, 20 Mar 2017 12:35:33 -0400
parents 6a5f78bc0bed
children b32f9f4793f8
files TrackHub.py jbrowse_hub.py jbrowse_hub.xml trackObject.py
diffstat 4 files changed, 87 insertions(+), 62 deletions(-) [+]
line wrap: on
line diff
--- a/TrackHub.py	Fri Mar 17 19:06:49 2017 -0400
+++ b/TrackHub.py	Mon Mar 20 12:35:33 2017 -0400
@@ -7,13 +7,14 @@
 
 
 class TrackHub:
-    def __init__(self, inputFiles, reference, outputDirect, tool_dir, genome, extra_files_path):
+    def __init__(self, inputFiles, reference, outputDirect, tool_dir, genome, extra_files_path, metaData):
         self.input_files = inputFiles.tracks
         self.outfile = outputDirect
         self.outfolder = extra_files_path
         self.out_path = os.path.join(extra_files_path, genome)
         self.reference = reference
         self.tool_dir = tool_dir
+        self.metaData = metaData
         self.raw = os.path.join(self.out_path, 'raw')
         self.json = os.path.join(self.out_path, 'json')
         try: 
@@ -44,44 +45,25 @@
             print "Cannot prepare reference error({0}): {1}".format(e.errno, e.strerror)
     #TODO: hard coded the bam and bigwig tracks. Need to allow users to customize the settings
     def addTrack(self, track):
-        track_label = track['label']
-        track_color = track['track_color']
-        if track['dataType'] == 'blastxml':
-            track_type = "G-OnRamp_plugin/BlastAlignment"
-        elif track['dataType'] == 'gff3_transcript' or track['dataType'] == 'gff3_mrna':
-            track_type = "G-OnRamp_plugin/GenePred"
+        print "false_path" , track['false_path']
+        if track['false_path'] in self.metaData.keys():
+            metadata = self.metaData[track['false_path']]
         else:
-            track_type = "CanvasFeatures"
+            metadata = {}
+        self.SetMetadata(track, metadata)
         if track['dataType'] == 'bam':
-            self.createTrackList()
-            json_file = os.path.join(self.json, "trackList.json")
-            bam_track = dict()
-            bam_track['type'] = 'JBrowse/View/Track/Alignments2'
-            bam_track['storeClass'] = 'JBrowse/Store/SeqFeature/BAM'
-            bam_track['label'] = track_label
-            bam_track['urlTemplate'] = os.path.join('../raw', track['fileName'])
-            bam_track['baiUrlTemplate'] = os.path.join('../raw', track['index'])
-            utils.add_tracks_to_json(json_file, bam_track, 'add_tracks')
+            self.Bam(track, metadata)
            # print "add bam track\n"
         elif track['dataType'] == 'bigwig':
-            self.createTrackList()
-            json_file = os.path.join(self.json, "trackList.json")
-            bigwig_track = dict()
-            bigwig_track['label'] = track_label
-            #color_setting = {"pos_color" : track['pos_color'], "neg_color" : track['neg_color']} 
-            bigwig_track['style'] = {"pos_color" : track['pos_color'], "neg_color" : track['neg_color']} 
-            bigwig_track['urlTemplate'] = os.path.join('../raw', track['fileName'])
-            bigwig_track['type'] = 'JBrowse/View/Track/Wiggle/XYPlot'
-            bigwig_track['storeClass'] = 'JBrowse/Store/SeqFeature/BigWig'
-            utils.add_tracks_to_json(json_file, bigwig_track, 'add_tracks')
+            self.BigWig(track, metadata)
         else: 
             gff3_file = os.path.join(self.raw, track['fileName'])
             if track['dataType'] == 'bedSpliceJunctions' or track['dataType'] == 'gtf':
-                p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', track_type, '--trackLabel', track_label, '--Config', '{"glyph": "JBrowse/View/FeatureGlyph/Segments"}', '--clientConfig', '{"color" : "%s"}' % track_color, '--out', self.json])
+                p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', metadata['type'], '--trackLabel', metadata['label'], '--Config', '{"glyph": "JBrowse/View/FeatureGlyph/Segments", "category" : "%s"}' % metadata['category'], '--clientConfig', '{"color" : "%s"}' % metadata['color'], '--out', self.json])
             elif track['dataType'] == 'gff3_transcript':
-                p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', track_type, '--trackLabel', track_label, '--Config', '{"transcriptType": "transcript"}', '--clientConfig', '{"color" : "%s"}' % track_color, '--out', self.json])
+                p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', metadata['type'], '--trackLabel', metadata['label'], '--Config', '{"transcriptType": "transcript", "category" : "%s"}' % metadata['category'], '--clientConfig', '{"color" : "%s"}' % metadata['color'], '--out', self.json])
             else:
-                p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', track_type, '--trackLabel', track_label, '--clientConfig', '{"color" : "%s"}' % track_color, '--out', self.json])
+                p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', metadata['type'], '--trackLabel', metadata['label'], '--Config', '{"category" : "%s"}' % metadata['category'], '--clientConfig', '{"color" : "%s"}' % metadata['color'], '--out', self.json])
             p.communicate()
             
     def indexName(self):
@@ -115,6 +97,56 @@
         trackList = os.path.join(self.json, "trackList.json")
         if not os.path.exists(trackList):
             os.mknod(trackList)
+    
+    def Bam(self, track, metadata):
+        #create trackList.json if not exist
+        self.createTrackList()
+        json_file = os.path.join(self.json, "trackList.json")
+        bam_track = dict()
+        bam_track['type'] = 'JBrowse/View/Track/Alignments2'
+        bam_track['storeClass'] = 'JBrowse/Store/SeqFeature/BAM'
+        bam_track['urlTemplate'] = os.path.join('../raw', track['fileName'])
+        bam_track['baiUrlTemplate'] = os.path.join('../raw', track['index'])
+        bam_track.update(metadata)
+        utils.add_tracks_to_json(json_file, bam_track, 'add_tracks')
+
+    def BigWig(self, track, metadata):
+        #create trackList.json if not exist
+        self.createTrackList()
+        json_file = os.path.join(self.json, "trackList.json")
+        bigwig_track = dict()
+        #color_setting = {"pos_color" : track['pos_color'], "neg_color" : track['neg_color']} 
+        #bigwig_track['style'] = {"pos_color" : track['pos_color'], "neg_color" : track['neg_color']} 
+        bigwig_track['urlTemplate'] = os.path.join('../raw', track['fileName'])
+        bigwig_track['type'] = 'JBrowse/View/Track/Wiggle/XYPlot'
+        bigwig_track['storeClass'] = 'JBrowse/Store/SeqFeature/BigWig'
+        bigwig_track.update(metadata)
+        utils.add_tracks_to_json(json_file, bigwig_track, 'add_tracks')
+
+    #If the metadata is not set, use the default value
+    def SetMetadata(self, track, metadata):
+        print metadata
+        #track.update(metadata)
+        if 'label' not in metadata.keys() or metadata['label'] == '':
+            metadata['label'] = track['fileName']
+        if 'color' not in metadata.keys() or metadata['color'] == '':
+            metadata['color'] = "#daa520"
+        if track['dataType'] == 'bigwig':
+            if 'style' not in metadata.keys():
+                metadata['style'] = {}
+            if 'pos_color' not in metadata['style'] or metadata['style']['pos_color'] == '':
+                metadata['pos_color'] = "#FFA600"
+            if 'neg_color' not in metadata['style'] or metadata['style']['neg_color'] == '':
+                metadata['neg_color'] = "#005EFF"
+        if 'category' not in metadata.keys() or metadata['category'] == '':
+            metadata['category'] = "Default group"
+        if track['dataType'] == 'blastxml':
+            metadata['type'] = "G-OnRamp_plugin/BlastAlignment"
+        elif track['dataType'] == 'gff3_transcript' or track['dataType'] == 'gff3_mrna':
+            metadata['type'] = "G-OnRamp_plugin/GenePred"
+        else:
+            metadata['type'] = "CanvasFeatures"
+
 
 
    
--- a/jbrowse_hub.py	Fri Mar 17 19:06:49 2017 -0400
+++ b/jbrowse_hub.py	Mon Mar 20 12:35:33 2017 -0400
@@ -128,15 +128,15 @@
             print 'Cannot open', datatype
         else:
             for f in inputfiles:
-                metadata = {}
+                #metadata = {}
                 #print f
-                if f in inputs_data.keys():
-                    metadata = inputs_data[f]
-                    print metadata
+                #if f in inputs_data.keys():
+                   # metadata = inputs_data[f]
+                    #print metadata
                 #Convert tracks into gff3 format
-                all_tracks.addToRaw(f, datatype, metadata)
+                all_tracks.addToRaw(f, datatype)
 
-    jbrowseHub = TrackHub.TrackHub(all_tracks, reference, out_path, tool_directory, genome, extra_files_path)
+    jbrowseHub = TrackHub.TrackHub(all_tracks, reference, out_path, tool_directory, genome, extra_files_path, inputs_data)
     jbrowseHub.createHub()
 
 """        
--- a/jbrowse_hub.xml	Fri Mar 17 19:06:49 2017 -0400
+++ b/jbrowse_hub.xml	Mon Mar 20 12:35:33 2017 -0400
@@ -35,13 +35,14 @@
 
         #end def
 
-
+        #for $g in $group
         #for $f in $format
             #set track_label =  str($f.formatChoice.label)
-            #set extra_data_dict = {"label" : $track_label} 
+            #set group_name = str($g.group_name)
+            #set extra_data_dict = {"label" : $track_label, "category" : $group_name} 
             #if $f.formatChoice.format_select == 'bed'
                 #set track_color = str($f.formatChoice.track_color)
-                #silent extra_data_dict.update({"track_color" : $track_color})
+                #silent extra_data_dict.update({"color" : $track_color})
                 #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, extra_data_dict)
@@ -56,7 +57,7 @@
             #end if
             #if $f.formatChoice.format_select == 'gff3'
                 #set track_color = str($f.formatChoice.track_color)
-                #silent extra_data_dict.update({"track_color" : $track_color})
+                #silent extra_data_dict.update({"color" : $track_color})
                 #if $f.formatChoice.gff3Choice.gff3_select == 'gff3_transcript'
                     --gff3_transcript $f.formatChoice.gff3Choice.GFF3_transcript
                     #silent $prepare_json($f.formatChoice.gff3Choice.GFF3_transcript, extra_data_dict)
@@ -68,23 +69,24 @@
             #if $f.formatChoice.format_select == 'blastxml'
                 --blastxml $f.formatChoice.BlastXML
                 #set track_color = str($f.formatChoice.track_color)
-                #silent extra_data_dict.update({"track_color" : $track_color})
+                #silent extra_data_dict.update({"color" : $track_color})
                 #silent $prepare_json($f.formatChoice.BlastXML, extra_data_dict)
             #end if
             #if $f.formatChoice.format_select == 'gtf'
                 --gtf $f.formatChoice.GTF
                 #set track_color = str($f.formatChoice.track_color)
-                #silent extra_data_dict.update({"track_color" : $track_color})
+                #silent extra_data_dict.update({"color" : $track_color})
                 #silent $prepare_json($f.formatChoice.GTF, extra_data_dict)
             #end if
             #if $f.formatChoice.format_select == 'bigwig'
                 --bigwig $f.formatChoice.BIGWIG
                 #set pos_color = str($f.formatChoice.pos_color)
                 #set neg_color = str($f.formatChoice.neg_color)
-                #silent $extra_data_dict.update({"pos_color" : $pos_color, "neg_color" : $neg_color})
+                #silent $extra_data_dict.update({"style" : {"pos_color" : $pos_color, "neg_color" : $neg_color}})
                 #silent $prepare_json($f.formatChoice.BIGWIG, extra_data_dict)
             #end if
        #end for
+       #end for
 
        #set all_data_json = json.dumps($data_parameter_dict)
        -j '$all_data_json'
@@ -96,6 +98,8 @@
     <inputs>
         <param name="reference" type="data" format="fasta" label="Reference Genome" />
         <param name="genome_name" type="text" size="30" value="unknown" label="Genome name" />
+        <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">
@@ -235,7 +239,8 @@
                             </sanitizer>
                         </param>
                     </when>  
-            </conditional>
+                </conditional>
+            </repeat>
         </repeat>
     </inputs>
 
--- a/trackObject.py	Fri Mar 17 19:06:49 2017 -0400
+++ b/trackObject.py	Mon Mar 20 12:35:33 2017 -0400
@@ -24,19 +24,19 @@
         except OSError as oserror:
             print "Cannot create raw folder error({0}): {1}".format(oserror.errno, oserror.strerror)
 
-    def addToRaw(self, dataFile, dataType, metaData):
+    def addToRaw(self, dataFile, dataType):
         """
         Convert gff3, BED, blastxml and gtf files into gff3 files 
         and store converted files in folder 'raw'
         """
-        
+        false_path = os.path.abspath(dataFile)
         fileName = os.path.basename(dataFile)
         des_path = os.path.join(self.raw_folder, fileName)
         track = {}
         if dataType == 'gff3_mrna' or dataType == 'gff3_transcript' or dataType == 'fasta' or dataType == 'bam' or dataType == 'bigwig' or dataType == 'bai':
             if dataType == 'bam':
                 # JBrowse will raise error: not a BAM file if the filename hasn't .bam extension
-                fileName = os.path.basename(dataFile) + '.bam'
+                fileName = fileName + '.bam'
                 des_path = os.path.join(self.raw_folder, fileName)
                 bam_index = utils.createBamIndex(dataFile)
                 indexname = os.path.basename(bam_index)
@@ -60,20 +60,8 @@
             utils.gtfToGff3(dataFile, des_path, self.chrom_size)
         track['fileName'] = fileName
         track['dataType'] = dataType
-        self.SetMetadata(track, metaData)
+        track['false_path'] = false_path
+        #self.SetMetadata(track, metaData)
         self.tracks.append(track)
 
-    #If the metadata is not set, use the default value
-    def SetMetadata(self, track, metaData):
-        track.update(metaData)
-        if 'name' not in metaData.keys() or track['name'] == '':
-            track['name'] = track['fileName']
-        if 'label' not in metaData.keys() or track['label'] == '':
-            track['label'] = track['name']
-        if 'track_color' not in metaData.keys() or track['track_color'] == '':
-            track['track_color'] = "#daa520"
-        if track['dataType'] == 'bigwig':
-            if 'pos_color' not in metaData.keys() or track['pos_color'] == '':
-                track['pos_color'] = "#FFA600"
-            if 'neg_color' not in metaData.keys() or track['neg_color'] == '':
-                track['neg_color'] = "#005EFF"
+    
\ No newline at end of file