Mercurial > repos > yating-l > jbrowse_hub
changeset 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 | 6a5f78bc0bed |
children | b32f9f4793f8 |
files | TrackHub.py jbrowse_hub.py jbrowse_hub.xml trackObject.py |
diffstat | 4 files changed, 87 insertions(+), 62 deletions(-) [+] |
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" +
--- a/jbrowse_hub.py Fri Mar 17 19:06:49 2017 -0400 +++ b/jbrowse_hub.py Mon Mar 20 12:35:33 2017 -0400 @@ -128,15 +128,15 @@ print 'Cannot open', datatype else: for f in inputfiles: - metadata = {} + #metadata = {} #print f - if f in inputs_data.keys(): - metadata = inputs_data[f] - print metadata + #if f in inputs_data.keys(): + # metadata = inputs_data[f] + #print metadata #Convert tracks into gff3 format - all_tracks.addToRaw(f, datatype, metadata) + all_tracks.addToRaw(f, datatype) - jbrowseHub = TrackHub.TrackHub(all_tracks, reference, out_path, tool_directory, genome, extra_files_path) + jbrowseHub = TrackHub.TrackHub(all_tracks, reference, out_path, tool_directory, genome, extra_files_path, inputs_data) jbrowseHub.createHub() """
--- a/jbrowse_hub.xml Fri Mar 17 19:06:49 2017 -0400 +++ b/jbrowse_hub.xml Mon Mar 20 12:35:33 2017 -0400 @@ -35,13 +35,14 @@ #end def - + #for $g in $group #for $f in $format #set track_label = str($f.formatChoice.label) - #set extra_data_dict = {"label" : $track_label} + #set group_name = str($g.group_name) + #set extra_data_dict = {"label" : $track_label, "category" : $group_name} #if $f.formatChoice.format_select == 'bed' #set track_color = str($f.formatChoice.track_color) - #silent extra_data_dict.update({"track_color" : $track_color}) + #silent extra_data_dict.update({"color" : $track_color}) #if $f.formatChoice.bedChoice.bed_select == 'bed_simple_repeats_option' --bedSimpleRepeats $f.formatChoice.bedChoice.BED_simple_repeats #silent $prepare_json($f.formatChoice.bedChoice.BED_simple_repeats, extra_data_dict) @@ -56,7 +57,7 @@ #end if #if $f.formatChoice.format_select == 'gff3' #set track_color = str($f.formatChoice.track_color) - #silent extra_data_dict.update({"track_color" : $track_color}) + #silent extra_data_dict.update({"color" : $track_color}) #if $f.formatChoice.gff3Choice.gff3_select == 'gff3_transcript' --gff3_transcript $f.formatChoice.gff3Choice.GFF3_transcript #silent $prepare_json($f.formatChoice.gff3Choice.GFF3_transcript, extra_data_dict) @@ -68,23 +69,24 @@ #if $f.formatChoice.format_select == 'blastxml' --blastxml $f.formatChoice.BlastXML #set track_color = str($f.formatChoice.track_color) - #silent extra_data_dict.update({"track_color" : $track_color}) + #silent extra_data_dict.update({"color" : $track_color}) #silent $prepare_json($f.formatChoice.BlastXML, extra_data_dict) #end if #if $f.formatChoice.format_select == 'gtf' --gtf $f.formatChoice.GTF #set track_color = str($f.formatChoice.track_color) - #silent extra_data_dict.update({"track_color" : $track_color}) + #silent extra_data_dict.update({"color" : $track_color}) #silent $prepare_json($f.formatChoice.GTF, extra_data_dict) #end if #if $f.formatChoice.format_select == 'bigwig' --bigwig $f.formatChoice.BIGWIG #set pos_color = str($f.formatChoice.pos_color) #set neg_color = str($f.formatChoice.neg_color) - #silent $extra_data_dict.update({"pos_color" : $pos_color, "neg_color" : $neg_color}) + #silent $extra_data_dict.update({"style" : {"pos_color" : $pos_color, "neg_color" : $neg_color}}) #silent $prepare_json($f.formatChoice.BIGWIG, extra_data_dict) #end if #end for + #end for #set all_data_json = json.dumps($data_parameter_dict) -j '$all_data_json' @@ -96,6 +98,8 @@ <inputs> <param name="reference" type="data" format="fasta" label="Reference Genome" /> <param name="genome_name" type="text" size="30" value="unknown" label="Genome name" /> + <repeat name="group" title="New group"> + <param type="text" name="group_name" label="Group name" value="Default group"/> <repeat name="format" title="New track"> <conditional name="formatChoice"> <param name="format_select" type="select" label="Format"> @@ -235,7 +239,8 @@ </sanitizer> </param> </when> - </conditional> + </conditional> + </repeat> </repeat> </inputs>
--- a/trackObject.py Fri Mar 17 19:06:49 2017 -0400 +++ b/trackObject.py Mon Mar 20 12:35:33 2017 -0400 @@ -24,19 +24,19 @@ except OSError as oserror: print "Cannot create raw folder error({0}): {1}".format(oserror.errno, oserror.strerror) - def addToRaw(self, dataFile, dataType, metaData): + def addToRaw(self, dataFile, dataType): """ Convert gff3, BED, blastxml and gtf files into gff3 files and store converted files in folder 'raw' """ - + false_path = os.path.abspath(dataFile) fileName = os.path.basename(dataFile) des_path = os.path.join(self.raw_folder, fileName) track = {} if dataType == 'gff3_mrna' or dataType == 'gff3_transcript' or dataType == 'fasta' or dataType == 'bam' or dataType == 'bigwig' or dataType == 'bai': if dataType == 'bam': # JBrowse will raise error: not a BAM file if the filename hasn't .bam extension - fileName = os.path.basename(dataFile) + '.bam' + fileName = fileName + '.bam' des_path = os.path.join(self.raw_folder, fileName) bam_index = utils.createBamIndex(dataFile) indexname = os.path.basename(bam_index) @@ -60,20 +60,8 @@ utils.gtfToGff3(dataFile, des_path, self.chrom_size) track['fileName'] = fileName track['dataType'] = dataType - self.SetMetadata(track, metaData) + track['false_path'] = false_path + #self.SetMetadata(track, metaData) self.tracks.append(track) - #If the metadata is not set, use the default value - def SetMetadata(self, track, metaData): - track.update(metaData) - if 'name' not in metaData.keys() or track['name'] == '': - track['name'] = track['fileName'] - if 'label' not in metaData.keys() or track['label'] == '': - track['label'] = track['name'] - if 'track_color' not in metaData.keys() or track['track_color'] == '': - track['track_color'] = "#daa520" - if track['dataType'] == 'bigwig': - if 'pos_color' not in metaData.keys() or track['pos_color'] == '': - track['pos_color'] = "#FFA600" - if 'neg_color' not in metaData.keys() or track['neg_color'] == '': - track['neg_color'] = "#005EFF" + \ No newline at end of file