diff TrackHub.py @ 50:3e5b6f6a9abe draft

planemo upload for repository https://github.com/Yating-L/jbrowse_hub commit 6391cdb975d14b5a7060fa1665a8a575797a0eaa-dirty
author yating-l
date Thu, 30 Mar 2017 16:03:16 -0400
parents 193e94a43f0f
children acedf82ea46c
line wrap: on
line diff
--- a/TrackHub.py	Wed Mar 29 14:46:23 2017 -0400
+++ b/TrackHub.py	Thu Mar 30 16:03:16 2017 -0400
@@ -3,6 +3,7 @@
 import os
 import subprocess
 import shutil
+import json
 import utils
 
 
@@ -38,9 +39,7 @@
     def prepareRefseq(self):
         try:
             #print os.path.join(self.tool_dir, 'prepare-refseqs.pl') + ", '--fasta', " + self.reference +", '--out', self.json])"
-            p = subprocess.Popen(['prepare-refseqs.pl', '--fasta', self.reference, '--out', self.json])
-            # Wait for process to terminate.
-            p.communicate()
+            subprocess.call(['prepare-refseqs.pl', '--fasta', self.reference, '--out', self.json])
         except OSError as e:
             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
@@ -57,18 +56,18 @@
         elif track['dataType'] == 'bigwig':
             self.BigWig(track, metadata)
         else: 
-            gff3_file = os.path.join(self.raw, track['fileName'])
-            if track['dataType'] == 'bedSpliceJunctions' or track['dataType'] == 'gtf' or track['dataType'] == 'blastxml':
-                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])
+            flat_file = os.path.join(self.raw, track['fileName'])
+            if track['dataType'] == 'bed':
+                subprocess.call(['flatfile-to-json.pl', '--bed', flat_file, '--trackType', metadata['type'], '--trackLabel', metadata['label'], '--Config', '{"category" : "%s"}' % metadata['category'], '--clientConfig', '{"color" : "%s"}' % metadata['color'], '--out', self.json])
+            elif track['dataType'] == 'bedSpliceJunctions' or track['dataType'] == 'gtf' or track['dataType'] == 'blastxml':
+                subprocess.call(['flatfile-to-json.pl', '--gff', flat_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', metadata['type'], '--trackLabel', metadata['label'], '--Config', '{"transcriptType": "transcript", "category" : "%s"}' % metadata['category'], '--clientConfig', '{"color" : "%s"}' % metadata['color'], '--out', self.json])
+                subprocess.call(['flatfile-to-json.pl', '--gff', flat_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', metadata['type'], '--trackLabel', metadata['label'], '--Config', '{"category" : "%s"}' % metadata['category'], '--clientConfig', '{"color" : "%s"}' % metadata['color'], '--out', self.json])
-            p.communicate()
+                subprocess.call(['flatfile-to-json.pl', '--gff', flat_file, '--trackType', metadata['type'], '--trackLabel', metadata['label'], '--Config', '{"category" : "%s"}' % metadata['category'], '--clientConfig', '{"color" : "%s"}' % metadata['color'], '--out', self.json])
             
     def indexName(self):
-        p = subprocess.Popen(['generate-names.pl', '-v', '--out', self.json])
-        p.communicate()
+        subprocess.call(['generate-names.pl', '-v', '--out', self.json])
         print "finished name index \n"
 
     def makeArchive(self):
@@ -83,8 +82,7 @@
         except OSError as oserror:
             print "Cannot create data folder({0}): {1}".format(oserror.errno, oserror.strerror)
         shutil.copytree(self.out_path, data_folder)
-        p = subprocess.Popen(['chmod', '-R', 'o+rx', '/var/www/html/JBrowse-1.12.1/jbrowse_hub'])
-        p.communicate()
+        subprocess.call(['chmod', '-R', 'o+rx', '/var/www/html/JBrowse-1.12.1/jbrowse_hub'])
         shutil.rmtree(self.out_path)
     
     #TODO: this will list all zip files in the filedir and sub-dirs. worked in Galaxy but all list zip files in test-data when
@@ -93,7 +91,7 @@
         with open(self.outfile, 'w') as htmlfile:
             htmlstr = 'The JBrowse Hub is created: <br>'
             zipfiles = '<li><a href = "%s">Download</a></li>'
-            jbrowse_hub = '<li><a href = "http://192.168.56.11/JBrowse-1.12.1/index.html?data=jbrowse_hub/json" target="_blank">View JBrowse Hub</a></li>'
+            jbrowse_hub = '<li><a href = "/static/JBrowse-1.12.1/index.html?data=jbrowse_hub/json" target="_blank">View JBrowse Hub</a></li>'
             filedir_abs = os.path.abspath(self.outfile)
             filedir = os.path.dirname(filedir_abs)
             filedir = os.path.join(filedir, self.outfolder)
@@ -122,8 +120,11 @@
         bam_track['baiUrlTemplate'] = os.path.join('../raw', track['index'])
         bam_track['label'] = metadata['label']
         bam_track['category'] = metadata['category']
-        utils.add_tracks_to_json(json_file, bam_track, 'add_tracks')
-
+        bam_track = json.dumps(bam_track)
+        #Use add-track-json.pl to add bam track to json file
+        new_track = subprocess.Popen(['echo', bam_track], stdout=subprocess.PIPE)
+        subprocess.call(['add-track-json.pl', json_file], stdin=new_track.stdout)
+    
     def BigWig(self, track, metadata):
         #create trackList.json if not exist
         self.createTrackList()
@@ -135,7 +136,11 @@
         bigwig_track['label'] = metadata['label']
         bigwig_track['style'] = metadata['style']
         bigwig_track['category'] = metadata['category']
-        utils.add_tracks_to_json(json_file, bigwig_track, 'add_tracks')
+        bigwig_track = json.dumps(bigwig_track)
+        #Use add-track-json.pl to add bigwig track to json file
+        new_track = subprocess.Popen(['echo', bigwig_track], stdout=subprocess.PIPE)
+        #output = new_track.communicate()[0]
+        subprocess.call(['add-track-json.pl', json_file], stdin=new_track.stdout)
 
     #If the metadata is not set, use the default value
     def SetMetadata(self, track, metadata):
@@ -147,9 +152,9 @@
             if 'style' not in metadata.keys():
                 metadata['style'] = {}
             if 'pos_color' not in metadata['style'] or metadata['style']['pos_color'] == '':
-                metadata['pos_color'] = "#FFA600"
+                metadata['style']['pos_color'] = "#FFA600"
             if 'neg_color' not in metadata['style'] or metadata['style']['neg_color'] == '':
-                metadata['neg_color'] = "#005EFF"
+                metadata['style']['neg_color'] = "#005EFF"
         if 'category' not in metadata.keys() or metadata['category'] == '':
             metadata['category'] = "Default group"
         if track['dataType'] == 'blastxml':