annotate roi_details.py @ 12:4cf71b199381 draft default tip

Uploaded
author holtgrewe
date Mon, 12 Aug 2013 10:44:25 -0400
parents 170e48a55078
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
1 #!/usr/bin/env python
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
2 """Generation of detailed ROI reports with larger plots.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
3
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
4 This report generation works for hundred of ROIs.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
5 """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
6
5
170e48a55078 Uploaded
holtgrewe
parents: 1
diff changeset
7 try:
170e48a55078 Uploaded
holtgrewe
parents: 1
diff changeset
8 import argparse
170e48a55078 Uploaded
holtgrewe
parents: 1
diff changeset
9 except ImportError:
170e48a55078 Uploaded
holtgrewe
parents: 1
diff changeset
10 import argparse26 as argparse
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
11 import math
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
12 import os.path
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
13 import sys
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
14
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
15 import Cheetah.Template
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
16 import matplotlib.pyplot as plt
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
17
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
18 import ngs_roi.app
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
19 import ngs_roi.argparse
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
20 import ngs_roi.io
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
21
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
22 PAGE_TPL = """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
23 <html>
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
24 <head>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
25 <title>ROI Table</title>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
26 <style type="text/css">
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
27 div.plot
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
28 {
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
29 float: left;
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
30 padding: 4px;
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
31 margin: 2px;
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
32 width: 420px;
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
33 }
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
34
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
35 .plot h2 { margin-top: 3px; margin-bottom: 3px; text-align: center; }
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
36 .plot img { display: block; margin: 0 auto; }
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
37 </style>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
38 </head>
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
39 <body>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
40 <h1>Detailed ROI Report</h1>
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
41
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
42 #for i, roi in enumerate($records)
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
43 <div class="plot">
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
44 <h2>${roi.ref}:${roi.start_pos + 1}-${roi.end_pos+1}</h2>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
45 <a href="${href($roi)}" target="dead"><img src="plot_${i}.png" /></a>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
46 <p>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
47 <b>chr:start-end</b> <a href="${href($roi)}" target="dead">${roi.ref}:${roi.start_pos}-${roi.end_pos} ${roi.strand}</a>;
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
48 <b>region name</b> ${roi.region_name};
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
49 <b>region length</b> ${roi.region_length};
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
50 </p>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
51 #if $roi.data
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
52 <p>#for j, key in enumerate($data_keys)#<b>$key:</b> ${roi.data[$j]}; #end for#</p>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
53 #end if
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
54 </div>
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
55 #end for
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
56 <iframe name="dead" height="0" width="0"></iframe>
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
57 <div><code>$args</code></div>
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
58 </body>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
59 </html>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
60 """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
61
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
62 class DetailedRoiGenerator(ngs_roi.app.App):
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
63 """Generate detailed ROI report.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
64
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
65 :ivar args:Arguments from the comment line.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
66 """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
67
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
68 def __init__(self, args):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
69 self.args = args
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
70
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
71 def run(self):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
72 """Run report generation, return status code.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
73
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
74 :return: integer with the result.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
75 """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
76 print >>sys.stderr, 'Loading ROI'
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
77 records = ngs_roi.io.load(self.args.in_file, self.args.max_rois)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
78 keys = records[0].data_keys
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
79
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
80 self.writeHtml(keys, records)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
81 self.writePlots(records)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
82 return 0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
83
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
84 def writePlots(self, records):
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
85 COLOR = 'blue'
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
86 LINE_WIDTH = .5
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
87 LINE_STYLE = '-'
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
88 TICK_FONT_SIZE = 8
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
89 LABEL_FONT_SIZE = 10
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
90 for i, roi in enumerate(records):
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
91 file_name = 'plot_%d.png' % i
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
92 file_name = os.path.join(self.args.out_dir, file_name)
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
93 print >>sys.stderr, 'Writing plot %s' % file_name
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
94 plt.figure(figsize=(4, 2.5))
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
95 plt.gcf().subplots_adjust(bottom=0.16, left=0.15)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
96 plt.plot(roi.points, color=COLOR, linewidth=LINE_WIDTH, linestyle=LINE_STYLE)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
97 plt.ylim(ymin=0)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
98 if self.args.max_value:
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
99 plt.ylim(ymax=self.args.max_value)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
100 plt.tick_params(labelsize=TICK_FONT_SIZE)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
101 plt.ylabel('coverage', fontsize=LABEL_FONT_SIZE, weight='semibold')
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
102 plt.xlabel('ROI beginPos', fontsize=LABEL_FONT_SIZE, weight='semibold')
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
103 plt.savefig(file_name)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
104
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
105 def writeHtml(self, keys, records):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
106 file_name = self.args.out_file
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
107 print >>sys.stderr, 'Writing HTML file %s' % file_name
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
108
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
109 vals = {'args': self.args, 'records': records, 'data_keys': keys,
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
110 'href': lambda x: self.buildHref(x.ref, x.start_pos, x.end_pos)}
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
111 t = Cheetah.Template.Template(PAGE_TPL, searchList=vals)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
112
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
113 with open(file_name, 'wb') as f:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
114 f.write(str(t))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
115
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
116
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
117 def main():
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
118 parser = argparse.ArgumentParser(description='Plot ROI file.')
1
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
119 ngs_roi.argparse.addFileArguments(parser)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
120 ngs_roi.argparse.addPlotGridArguments(parser)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
121 ngs_roi.argparse.addLinkArguments(parser)
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
122 args = parser.parse_args()
0ac4f6f3d984 Uploaded
holtgrewe
parents: 0
diff changeset
123 ngs_roi.argparse.applyFileDefaults(args)
0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
124
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
125 app = DetailedRoiGenerator(args)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
126 return app.run()
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
127
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
128
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
129 if __name__ == '__main__':
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
130 sys.exit(main())