0
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*-
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
2 import os
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
3 import sys
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
4 import argparse
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
5 import logging
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
6 import rpy2.robjects as robjects
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
7 import utils
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
8
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
9 rscript = ''
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
10 R = robjects.r
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
11
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
12
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
13 def run_rscript(command=None):
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
14 """Run R command, log it, append to rscript"""
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
15 global rscript
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
16 if not command:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
17 return
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
18 logging.debug(command)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
19 rscript += '{}\n'.format(command)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
20 output = R(command)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
21 return output
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
22
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
23
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
24 def get_counts(rdata_load='Metagene.rda', slice_lengths='27',
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
25 frames='', group1=None, group2=None, num_counts=10,
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
26 normalize='FALSE', html_file='Counts.html',
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
27 output_path='counts'):
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
28 options = {'slice_lengths': utils.process_args(
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
29 slice_lengths, ret_type='int', ret_mode='charvector')}
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
30
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
31 if not num_counts:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
32 num_counts = 10
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
33
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
34 options['frames'] = utils.process_args(
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
35 frames, ret_type='int', ret_mode='listvector')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
36
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
37 run_rscript('suppressMessages(library(riboSeqR))')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
38 run_rscript('load("{}")'.format(rdata_load))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
39
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
40 cmd_args = 'ffCs, lengths={slice_lengths}'.format(**options)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
41 if frames:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
42 cmd_args += ', frames={frames}'.format(**options)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
43
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
44 run_rscript("""riboCounts <- sliceCounts({})
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
45 annotation <- as.data.frame(ffCs@CDS)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
46 rownames(riboCounts) <- annotation$seqnames
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
47 colnames(riboCounts) <- names(riboDat@riboGR)""".format(cmd_args))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
48
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
49 run_rscript("""mrnaCounts <- rnaCounts(riboDat, ffCs@CDS)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
50 rownames(mrnaCounts) <- annotation$seqnames""")
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
51
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
52 if not os.path.exists(output_path):
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
53 os.mkdir(output_path)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
54
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
55 html = '<h2>Differential Translation Analysis</h2><hr>'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
56 for count_name, file_name, legend in (
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
57 ('riboCounts', 'RiboCounts.csv', 'Ribo-Seq counts'),
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
58 ('mrnaCounts', 'RNACounts.csv', 'RNA-Seq counts'),
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
59 ('tC', 'TopCounts.csv', 'baySeq topCounts')):
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
60 if count_name == 'tC' and R['riboCounts'] and R['mrnaCounts']:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
61 run_rscript('suppressMessages(library(baySeq))')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
62 cmd = """pD <- new("countData", replicates=ffCs@replicates, \
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
63 data=list(riboCounts, mrnaCounts), groups=list(NDT={0}, DT={1}), \
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
64 annotation=as.data.frame(ffCs@CDS), \
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
65 densityFunction=bbDensity)""".format(
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
66 utils.process_args(
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
67 group1, ret_type='int', ret_mode='charvector'),
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
68 utils.process_args(
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
69 group2, ret_type='str', ret_mode='charvector'))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
70 run_rscript(cmd)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
71
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
72 run_rscript('libsizes(pD) <- getLibsizes(pD)')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
73 run_rscript('pD <- getPriors(pD, cl=NULL)')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
74 run_rscript('pD <- getLikelihoods(pD, cl=NULL)')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
75 run_rscript('tC <- topCounts(pD, "DT", normaliseData={}, '
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
76 'number={})'.format(normalize, num_counts))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
77
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
78 if R[count_name]:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
79 html += '<h3>{}</h3>'.format(legend)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
80 output_file = os.path.join(output_path, file_name)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
81 run_rscript('write.csv({}, file="{}")'.format(
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
82 count_name, output_file))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
83 with open(output_file) as g:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
84 html += '<table cellpadding="4" border="1">'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
85 header = g.readline()
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
86 html += '<tr>'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
87 for item in header.strip().split(","):
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
88 html += '<th>{}</th>'.format(item.strip('"'))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
89 html += '</tr>'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
90 for line in g:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
91 html += '<tr>'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
92 data = line.strip().split(",")
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
93 # html += '<td>{}</td>'.format(data[0].strip('"'))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
94 for item in data:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
95 html += ('<td align="center"><code>{}</code>'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
96 '</td>'.format(item.strip('"')))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
97 html += '</tr>'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
98 html += ('</table><p>Download: <a href="{0}">'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
99 '{0}</a></p><hr>'.format(file_name))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
100
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
101 with open(os.path.join(output_path, 'counts.R'), 'w') as r:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
102 r.write(rscript)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
103
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
104 html += ('<h4>R script for this session</h4>'
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
105 '<p>Download: <a href="counts.R">counts.R</a></p>')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
106
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
107 with open(html_file, 'w') as f:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
108 f.write(html)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
109
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
110
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
111 if __name__ == '__main__':
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
112 parser = argparse.ArgumentParser(description='Get Ribo and RNA-Seq counts')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
113
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
114 # required arguments
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
115 flags = parser.add_argument_group('required arguments')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
116 flags.add_argument('--rdata_load', required=True,
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
117 help='Saved riboSeqR data from Step 2')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
118 flags.add_argument('--slice_lengths',
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
119 help='Lengths of ribosome footprints to inform count '
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
120 'data', default='27,28', required=True)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
121 flags.add_argument('--group1', help='Group model for baySeq', required=True)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
122 flags.add_argument('--group2', help='Group model for baySeq', required=True)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
123 flags.add_argument('--frames',
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
124 help='Frames of ribosome footprints (relative to '
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
125 'coding start site). If omitted, all frames '
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
126 'are used.', required=True)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
127
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
128 # optional arguments
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
129 parser.add_argument(
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
130 '--num_counts', help='How many results to return? (topCounts)')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
131 parser.add_argument('--normalize', help='Normalize data?',
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
132 choices=['TRUE', 'FALSE'], default='FALSE')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
133 parser.add_argument('--html_file', help='HTML file with reports')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
134 parser.add_argument('--output_path', help='Directory to save output files')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
135 parser.add_argument(
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
136 '--debug', help='Produce debug output', action='store_true')
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
137
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
138 args = parser.parse_args()
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
139 if args.debug:
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
140 logging.basicConfig(format='%(levelname)s - %(message)s',
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
141 level=logging.DEBUG, stream=sys.stdout)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
142 logging.debug('Supplied Arguments\n{}\n'.format(vars(args)))
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
143
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
144 if not os.path.exists(args.output_path):
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
145 os.mkdir(args.output_path)
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
146
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
147 get_counts(rdata_load=args.rdata_load, slice_lengths=args.slice_lengths,
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
148 frames=args.frames, group1=args.group1, group2=args.group2,
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
149 num_counts=args.num_counts, normalize=args.normalize,
|
Vimalkumar Velayudhan <vimal@biotechcoder.com>
parents:
diff
changeset
|
150 html_file=args.html_file, output_path=args.output_path)
|