diff TrackHub.py @ 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 75edbc203532
children 37422f705e9b
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"
+