Mercurial > repos > yating-l > jbrowse_hub
comparison 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 |
comparison
equal
deleted
inserted
replaced
41:6a5f78bc0bed | 42:a5108e5010b4 |
---|---|
5 import shutil | 5 import shutil |
6 import utils | 6 import utils |
7 | 7 |
8 | 8 |
9 class TrackHub: | 9 class TrackHub: |
10 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, metaData): |
11 self.input_files = inputFiles.tracks | 11 self.input_files = inputFiles.tracks |
12 self.outfile = outputDirect | 12 self.outfile = outputDirect |
13 self.outfolder = extra_files_path | 13 self.outfolder = extra_files_path |
14 self.out_path = os.path.join(extra_files_path, genome) | 14 self.out_path = os.path.join(extra_files_path, genome) |
15 self.reference = reference | 15 self.reference = reference |
16 self.tool_dir = tool_dir | 16 self.tool_dir = tool_dir |
17 self.metaData = metaData | |
17 self.raw = os.path.join(self.out_path, 'raw') | 18 self.raw = os.path.join(self.out_path, 'raw') |
18 self.json = os.path.join(self.out_path, 'json') | 19 self.json = os.path.join(self.out_path, 'json') |
19 try: | 20 try: |
20 if os.path.exists(self.json): | 21 if os.path.exists(self.json): |
21 shutil.rmtree(self.json) | 22 shutil.rmtree(self.json) |
42 p.communicate() | 43 p.communicate() |
43 except OSError as e: | 44 except OSError as e: |
44 print "Cannot prepare reference error({0}): {1}".format(e.errno, e.strerror) | 45 print "Cannot prepare reference error({0}): {1}".format(e.errno, e.strerror) |
45 #TODO: hard coded the bam and bigwig tracks. Need to allow users to customize the settings | 46 #TODO: hard coded the bam and bigwig tracks. Need to allow users to customize the settings |
46 def addTrack(self, track): | 47 def addTrack(self, track): |
47 track_label = track['label'] | 48 print "false_path" , track['false_path'] |
48 track_color = track['track_color'] | 49 if track['false_path'] in self.metaData.keys(): |
49 if track['dataType'] == 'blastxml': | 50 metadata = self.metaData[track['false_path']] |
50 track_type = "G-OnRamp_plugin/BlastAlignment" | |
51 elif track['dataType'] == 'gff3_transcript' or track['dataType'] == 'gff3_mrna': | |
52 track_type = "G-OnRamp_plugin/GenePred" | |
53 else: | 51 else: |
54 track_type = "CanvasFeatures" | 52 metadata = {} |
53 self.SetMetadata(track, metadata) | |
55 if track['dataType'] == 'bam': | 54 if track['dataType'] == 'bam': |
56 self.createTrackList() | 55 self.Bam(track, metadata) |
57 json_file = os.path.join(self.json, "trackList.json") | |
58 bam_track = dict() | |
59 bam_track['type'] = 'JBrowse/View/Track/Alignments2' | |
60 bam_track['storeClass'] = 'JBrowse/Store/SeqFeature/BAM' | |
61 bam_track['label'] = track_label | |
62 bam_track['urlTemplate'] = os.path.join('../raw', track['fileName']) | |
63 bam_track['baiUrlTemplate'] = os.path.join('../raw', track['index']) | |
64 utils.add_tracks_to_json(json_file, bam_track, 'add_tracks') | |
65 # print "add bam track\n" | 56 # print "add bam track\n" |
66 elif track['dataType'] == 'bigwig': | 57 elif track['dataType'] == 'bigwig': |
67 self.createTrackList() | 58 self.BigWig(track, metadata) |
68 json_file = os.path.join(self.json, "trackList.json") | |
69 bigwig_track = dict() | |
70 bigwig_track['label'] = track_label | |
71 #color_setting = {"pos_color" : track['pos_color'], "neg_color" : track['neg_color']} | |
72 bigwig_track['style'] = {"pos_color" : track['pos_color'], "neg_color" : track['neg_color']} | |
73 bigwig_track['urlTemplate'] = os.path.join('../raw', track['fileName']) | |
74 bigwig_track['type'] = 'JBrowse/View/Track/Wiggle/XYPlot' | |
75 bigwig_track['storeClass'] = 'JBrowse/Store/SeqFeature/BigWig' | |
76 utils.add_tracks_to_json(json_file, bigwig_track, 'add_tracks') | |
77 else: | 59 else: |
78 gff3_file = os.path.join(self.raw, track['fileName']) | 60 gff3_file = os.path.join(self.raw, track['fileName']) |
79 if track['dataType'] == 'bedSpliceJunctions' or track['dataType'] == 'gtf': | 61 if track['dataType'] == 'bedSpliceJunctions' or track['dataType'] == 'gtf': |
80 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]) | 62 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]) |
81 elif track['dataType'] == 'gff3_transcript': | 63 elif track['dataType'] == 'gff3_transcript': |
82 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]) | 64 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]) |
83 else: | 65 else: |
84 p = subprocess.Popen(['flatfile-to-json.pl', '--gff', gff3_file, '--trackType', track_type, '--trackLabel', track_label, '--clientConfig', '{"color" : "%s"}' % track_color, '--out', self.json]) | 66 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]) |
85 p.communicate() | 67 p.communicate() |
86 | 68 |
87 def indexName(self): | 69 def indexName(self): |
88 p = subprocess.Popen(['generate-names.pl', '-v', '--out', self.json]) | 70 p = subprocess.Popen(['generate-names.pl', '-v', '--out', self.json]) |
89 p.communicate() | 71 p.communicate() |
113 | 95 |
114 def createTrackList(self): | 96 def createTrackList(self): |
115 trackList = os.path.join(self.json, "trackList.json") | 97 trackList = os.path.join(self.json, "trackList.json") |
116 if not os.path.exists(trackList): | 98 if not os.path.exists(trackList): |
117 os.mknod(trackList) | 99 os.mknod(trackList) |
100 | |
101 def Bam(self, track, metadata): | |
102 #create trackList.json if not exist | |
103 self.createTrackList() | |
104 json_file = os.path.join(self.json, "trackList.json") | |
105 bam_track = dict() | |
106 bam_track['type'] = 'JBrowse/View/Track/Alignments2' | |
107 bam_track['storeClass'] = 'JBrowse/Store/SeqFeature/BAM' | |
108 bam_track['urlTemplate'] = os.path.join('../raw', track['fileName']) | |
109 bam_track['baiUrlTemplate'] = os.path.join('../raw', track['index']) | |
110 bam_track.update(metadata) | |
111 utils.add_tracks_to_json(json_file, bam_track, 'add_tracks') | |
112 | |
113 def BigWig(self, track, metadata): | |
114 #create trackList.json if not exist | |
115 self.createTrackList() | |
116 json_file = os.path.join(self.json, "trackList.json") | |
117 bigwig_track = dict() | |
118 #color_setting = {"pos_color" : track['pos_color'], "neg_color" : track['neg_color']} | |
119 #bigwig_track['style'] = {"pos_color" : track['pos_color'], "neg_color" : track['neg_color']} | |
120 bigwig_track['urlTemplate'] = os.path.join('../raw', track['fileName']) | |
121 bigwig_track['type'] = 'JBrowse/View/Track/Wiggle/XYPlot' | |
122 bigwig_track['storeClass'] = 'JBrowse/Store/SeqFeature/BigWig' | |
123 bigwig_track.update(metadata) | |
124 utils.add_tracks_to_json(json_file, bigwig_track, 'add_tracks') | |
125 | |
126 #If the metadata is not set, use the default value | |
127 def SetMetadata(self, track, metadata): | |
128 print metadata | |
129 #track.update(metadata) | |
130 if 'label' not in metadata.keys() or metadata['label'] == '': | |
131 metadata['label'] = track['fileName'] | |
132 if 'color' not in metadata.keys() or metadata['color'] == '': | |
133 metadata['color'] = "#daa520" | |
134 if track['dataType'] == 'bigwig': | |
135 if 'style' not in metadata.keys(): | |
136 metadata['style'] = {} | |
137 if 'pos_color' not in metadata['style'] or metadata['style']['pos_color'] == '': | |
138 metadata['pos_color'] = "#FFA600" | |
139 if 'neg_color' not in metadata['style'] or metadata['style']['neg_color'] == '': | |
140 metadata['neg_color'] = "#005EFF" | |
141 if 'category' not in metadata.keys() or metadata['category'] == '': | |
142 metadata['category'] = "Default group" | |
143 if track['dataType'] == 'blastxml': | |
144 metadata['type'] = "G-OnRamp_plugin/BlastAlignment" | |
145 elif track['dataType'] == 'gff3_transcript' or track['dataType'] == 'gff3_mrna': | |
146 metadata['type'] = "G-OnRamp_plugin/GenePred" | |
147 else: | |
148 metadata['type'] = "CanvasFeatures" | |
149 | |
118 | 150 |
119 | 151 |
120 | 152 |
121 | 153 |
122 | 154 |