comparison TrackHub.py @ 0:e4f3f2ed4fa5 draft

planemo upload for repository https://github.com/Yating-L/jbrowse_hub commit f18ea51d27ec7addfa6413716391cfefebc8acbc-dirty
author yating-l
date Fri, 10 Mar 2017 13:48:19 -0500
parents
children e7c80e9b70ae
comparison
equal deleted inserted replaced
-1:000000000000 0:e4f3f2ed4fa5
1 #!/usr/bin/env python
2
3 import os
4 import trackObject
5 import utils
6 import subprocess
7 import string
8 import shutil
9 from mako.lookup import TemplateLookup
10
11 class TrackHub:
12 def __init__(self, inputFiles, reference, outputDirect, tool_dir):
13 self.input_files = inputFiles
14 self.out_path = outputDirect
15 self.reference = reference
16 self.tool_dir = tool_dir
17 try:
18 if not self.out_path:
19 raise ValueError('empty output path\n')
20 if os.path.exists(self.out_path):
21 shutil.rmtree(self.out_path)
22 os.mkdir(self.out_path)
23 self.json = os.path.join(self.out_path, 'json')
24 if os.path.exists(self.json):
25 shutil.rmtree(self.json)
26 os.mkdir(self.json)
27 self.raw = os.path.join(self.out_path, 'raw')
28 if os.path.exists(self.raw):
29 shutil.rmtree(self.raw)
30 shutil.move('raw', self.out_path)
31 except OSError as e:
32 print "Cannot create json folder error({0}): {1}".format(e.errno, e.strerror)
33 else:
34 print "Create jbrowse folder {}".format(self.out_path)
35
36 def createHub(self):
37 self.prepareRefseq()
38 for input_file in self.input_files:
39 self.addTrack(input_file)
40 self.indexName()
41 self.makeArchive()
42 shutil.rmtree(self.out_path)
43 print "Success!\n"
44
45 def prepareRefseq(self):
46 try:
47 p = subprocess.Popen([os.path.join(self.tool_dir, 'prepare-refseqs.pl'), '--fasta', self.reference, '--out', self.json])
48 # Wait for process to terminate.
49 p.communicate()
50 except OSError as e:
51 print "Cannot prepare reference error({0}): {1}".format(e.errno, e.strerror)
52
53 def addTrack(self, track):
54 if track.dataType == 'bam':
55 json_file = os.path.join(self.json, "trackList.json")
56 bam_track = dict()
57 bam_track['type'] = 'JBrowse/View/Track/Alignments2'
58 bam_track['label'] = track.fileName
59 bam_track['urlTemplate'] = os.path.join('../raw', track.fileName)
60 utils.add_tracks_to_json(json_file, bam_track, 'add_tracks')
61 print "add bam track\n"
62 elif track.dataType == 'bigwig':
63 json_file = os.path.join(self.json, "trackList.json")
64 bigwig_track = dict()
65 bigwig_track['label'] = 'rnaseq'
66 bigwig_track['key'] = 'RNA-Seq Coverage'
67 bigwig_track['urlTemplate'] = os.path.join('../raw', track.fileName)
68 bigwig_track['type'] = 'JBrowse/View/Track/Wiggle/XYPlot'
69 bigwig_track['variance_band'] = True
70 bigwig_track['style'] = dict()
71 bigwig_track['style']['pos_color'] = '#FFA600'
72 bigwig_track['style']['neg_color'] = '#005EFF'
73 bigwig_track['style']['clip_marker_color'] = 'red'
74 bigwig_track['style']['height'] = 100
75 utils.add_tracks_to_json(json_file, bigwig_track, 'add_tracks')
76 else:
77 gff3_file = os.path.join(self.raw, track.fileName)
78 label = track.fileName
79 if track.dataType == 'bedSpliceJunctions' or track.dataType == 'gtf':
80 p = subprocess.Popen([os.path.join(self.tool_dir, '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':
82 p = subprocess.Popen([os.path.join(self.tool_dir, 'flatfile-to-json.pl'), '--gff', gff3_file, '--trackType', 'MyPlugin/GenePred', '--trackLabel', label, '--config', '{"transcriptType": "transcript"}', '--out', self.json])
83 elif track.dataType == 'gff3':
84 p = subprocess.Popen([os.path.join(self.tool_dir, 'flatfile-to-json.pl'), '--gff', gff3_file, '--trackType', 'MyPlugin/GenePred', '--trackLabel', label, '--out', self.json])
85 else:
86 p = subprocess.Popen([os.path.join(self.tool_dir, 'flatfile-to-json.pl'), '--gff', gff3_file, '--trackType', 'CanvasFeatures', '--trackLabel', label, '--out', self.json])
87 p.communicate()
88
89 def indexName(self):
90 p = subprocess.Popen([os.path.join(self.tool_dir, 'generate-names.pl'), '-v', '--out', self.json])
91 p.communicate()
92 print "finished name index \n"
93
94 def makeArchive(self):
95 filename = os.path.basename(self.out_path)
96 shutil.make_archive(filename, 'tar', self.out_path)
97
98
99
100
101