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