Mercurial > repos > yating-l > jbrowse_hub
comparison TrackHub.py @ 31:d8049deb0c97 draft
planemo upload for repository https://github.com/Yating-L/jbrowse_hub commit faeedda55e23f1197bc454d3db2d52af29d786e8-dirty
| author | yating-l |
|---|---|
| date | Fri, 17 Mar 2017 12:28:32 -0400 |
| parents | a4a54b925c73 |
| children | 046c5bfc0413 |
comparison
equal
deleted
inserted
replaced
| 30:daf6a1122200 | 31:d8049deb0c97 |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 | 2 |
| 3 import os | 3 import os |
| 4 import trackObject | 4 import subprocess |
| 5 import shutil | |
| 5 import utils | 6 import utils |
| 6 import subprocess | |
| 7 import string | |
| 8 import shutil | |
| 9 import tempfile | |
| 10 | 7 |
| 11 #TODO: package JBrowse file conversion .pl files | |
| 12 | 8 |
| 13 class TrackHub: | 9 class TrackHub: |
| 14 def __init__(self, inputFiles, reference, outputDirect, tool_dir, genome, extra_files_path): | 10 def __init__(self, inputFiles, reference, outputDirect, tool_dir, genome, extra_files_path): |
| 15 self.input_files = inputFiles.tracks | 11 self.input_files = inputFiles.tracks |
| 16 self.outfile = outputDirect | 12 self.outfile = outputDirect |
| 19 self.reference = reference | 15 self.reference = reference |
| 20 self.tool_dir = tool_dir | 16 self.tool_dir = tool_dir |
| 21 self.raw = os.path.join(self.out_path, 'raw') | 17 self.raw = os.path.join(self.out_path, 'raw') |
| 22 self.json = os.path.join(self.out_path, 'json') | 18 self.json = os.path.join(self.out_path, 'json') |
| 23 try: | 19 try: |
| 24 if not self.out_path: | |
| 25 raise ValueError('empty output path\n') | |
| 26 if not os.path.exists(self.out_path): | |
| 27 raise ValueError('the output folder has not been created') | |
| 28 if os.path.exists(self.json): | 20 if os.path.exists(self.json): |
| 29 shutil.rmtree(self.json) | 21 shutil.rmtree(self.json) |
| 30 os.makedirs(self.json) | 22 os.makedirs(self.json) |
| 31 except OSError as e: | 23 except OSError as e: |
| 32 print "Cannot create json folder error({0}): {1}".format(e.errno, e.strerror) | 24 print "Cannot create json folder error({0}): {1}".format(e.errno, e.strerror) |
| 37 self.prepareRefseq() | 29 self.prepareRefseq() |
| 38 for input_file in self.input_files: | 30 for input_file in self.input_files: |
| 39 self.addTrack(input_file) | 31 self.addTrack(input_file) |
| 40 self.indexName() | 32 self.indexName() |
| 41 self.makeArchive() | 33 self.makeArchive() |
| 42 #shutil.rmtree(self.out_path) | |
| 43 self.outHtml() | 34 self.outHtml() |
| 44 print "Success!\n" | 35 print "Success!\n" |
| 45 | 36 |
| 46 def prepareRefseq(self): | 37 def prepareRefseq(self): |
| 47 try: | 38 try: |
| 57 self.createTrackList() | 48 self.createTrackList() |
| 58 json_file = os.path.join(self.json, "trackList.json") | 49 json_file = os.path.join(self.json, "trackList.json") |
| 59 bam_track = dict() | 50 bam_track = dict() |
| 60 bam_track['type'] = 'JBrowse/View/Track/Alignments2' | 51 bam_track['type'] = 'JBrowse/View/Track/Alignments2' |
| 61 bam_track['storeClass'] = 'JBrowse/Store/SeqFeature/BAM' | 52 bam_track['storeClass'] = 'JBrowse/Store/SeqFeature/BAM' |
| 62 bam_track['label'] = track['fileName'] | 53 bam_track['label'] = track['label'] |
| 63 bam_track['urlTemplate'] = os.path.join('../raw', track['fileName']) | 54 bam_track['urlTemplate'] = os.path.join('../raw', track['fileName']) |
| 64 bam_track['baiUrlTemplate'] = os.path.join('../raw', track['index']) | 55 bam_track['baiUrlTemplate'] = os.path.join('../raw', track['index']) |
| 65 utils.add_tracks_to_json(json_file, bam_track, 'add_tracks') | 56 utils.add_tracks_to_json(json_file, bam_track, 'add_tracks') |
| 66 print "add bam track\n" | 57 print "add bam track\n" |
| 67 elif track['dataType'] == 'bigwig': | 58 elif track['dataType'] == 'bigwig': |
| 68 self.createTrackList() | 59 self.createTrackList() |
| 69 json_file = os.path.join(self.json, "trackList.json") | 60 json_file = os.path.join(self.json, "trackList.json") |
| 70 bigwig_track = dict() | 61 bigwig_track = dict() |
| 71 bigwig_track['label'] = track['fileName'] | 62 bigwig_track['label'] = track['label'] |
| 72 bigwig_track['urlTemplate'] = os.path.join('../raw', track['fileName']) | 63 bigwig_track['urlTemplate'] = os.path.join('../raw', track['fileName']) |
| 73 bigwig_track['type'] = 'JBrowse/View/Track/Wiggle/XYPlot' | 64 bigwig_track['type'] = 'JBrowse/View/Track/Wiggle/XYPlot' |
| 74 bigwig_track['storeClass'] = 'JBrowse/Store/SeqFeature/BigWig' | 65 bigwig_track['storeClass'] = 'JBrowse/Store/SeqFeature/BigWig' |
| 75 utils.add_tracks_to_json(json_file, bigwig_track, 'add_tracks') | 66 utils.add_tracks_to_json(json_file, bigwig_track, 'add_tracks') |
| 76 else: | 67 else: |
| 77 gff3_file = os.path.join(self.raw, track['fileName']) | 68 gff3_file = os.path.join(self.raw, track['fileName']) |
| 78 label = track['fileName'] | 69 label = track['label'] |
| 79 if track['dataType'] == 'bedSpliceJunctions' or track['dataType'] == 'gtf': | 70 if track['dataType'] == 'bedSpliceJunctions' or track['dataType'] == 'gtf': |
| 80 p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', 'CanvasFeatures', '--trackLabel', label, '--config', '{"glyph": "JBrowse/View/FeatureGlyph/Segments"}', '--out', self.json]) | 71 p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', 'CanvasFeatures', '--trackLabel', label, '--config', '{"glyph": "JBrowse/View/FeatureGlyph/Segments"}', '--out', self.json]) |
| 81 elif track['dataType'] == 'gff3_transcript': | 72 elif track['dataType'] == 'gff3_transcript': |
| 82 p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', 'MyPlugin/GenePred', '--trackLabel', label, '--config', '{"transcriptType": "transcript"}', '--out', self.json]) | 73 p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', 'MyPlugin/GenePred', '--trackLabel', label, '--config', '{"transcriptType": "transcript"}', '--out', self.json]) |
| 83 elif track['dataType'] == 'gff3_mrna': | 74 elif track['dataType'] == 'gff3_mrna': |
| 96 shutil.rmtree(self.out_path) | 87 shutil.rmtree(self.out_path) |
| 97 | 88 |
| 98 #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 | 89 #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 |
| 99 #run it locally. May need modify | 90 #run it locally. May need modify |
| 100 def outHtml(self): | 91 def outHtml(self): |
| 101 #htmloutput = tempfile.NamedTemporaryFile(self.outfile, suffix = '.html', bufsize=0, delete=False) | |
| 102 with open(self.outfile, 'w') as htmlfile: | 92 with open(self.outfile, 'w') as htmlfile: |
| 103 htmlstr = 'The JBrowse Hub is created: <br>' | 93 htmlstr = 'The JBrowse Hub is created: <br>' |
| 104 zipfiles = '<li><a href = "%s">Download</a></li>' | 94 zipfiles = '<li><a href = "%s">Download</a></li>' |
| 105 filedir_abs = os.path.abspath(self.outfile) | 95 filedir_abs = os.path.abspath(self.outfile) |
| 106 filedir = os.path.dirname(filedir_abs) | 96 filedir = os.path.dirname(filedir_abs) |
| 110 if file.endswith('.zip'): | 100 if file.endswith('.zip'): |
| 111 relative_directory = os.path.relpath(root, filedir) | 101 relative_directory = os.path.relpath(root, filedir) |
| 112 relative_file_path = os.path.join(relative_directory, file) | 102 relative_file_path = os.path.join(relative_directory, file) |
| 113 htmlstr += zipfiles % relative_file_path | 103 htmlstr += zipfiles % relative_file_path |
| 114 | 104 |
| 115 #htmlstr = htmlstr % zipfile | |
| 116 htmlfile.write(htmlstr) | 105 htmlfile.write(htmlstr) |
| 117 | 106 |
| 118 def createTrackList(self): | 107 def createTrackList(self): |
| 119 trackList = os.path.join(self.json, "trackList.json") | 108 trackList = os.path.join(self.json, "trackList.json") |
| 120 if not os.path.exists(trackList): | 109 if not os.path.exists(trackList): |
| 121 os.mknod(trackList) | 110 os.mknod(trackList) |
| 122 #open(trackList,'w').close() | 111 |
| 123 | |
| 124 | 112 |
| 125 | 113 |
| 126 | 114 |
| 127 | 115 |
| 128 | 116 |
