annotate roi_report.py @ 2:08cb79ffac4c draft

Uploaded
author holtgrewe
date Mon, 06 May 2013 12:46:46 -0400
parents 61d9bdb6d519
children 170e48a55078
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 """Create ROI overview report.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
3
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
4 This report consists of plots of all metrics (y: metric, x: rank of value).
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
5 Each plot is written out as a PNG file and we also create one output HTML file
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
6 that shows all HTML files.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
7
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
8 Plotting is done using the fine matplotlib.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
9 """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
10
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
11 from __future__ import print_function
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
12
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
13 __author__ = 'Manuel Holtgrewe <manuel.holtgrewe@fu-berlin.de>'
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
14 __copyright__ = 'Copyring 2013, Freie Universitaet Berlin'
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
15 __license__ = 'BSD 3-clause'
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
16
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
17
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
18 import sys
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
19 import os
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
20 import os.path
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
21 import argparse
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
22
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
23 import Cheetah.Template
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
24 import matplotlib.pyplot as plt
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
25
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
26 import ngs_roi.io
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
27 import ngs_roi.app
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
28 import ngs_roi.argparse
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
29
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
30
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
31 # The HTML template to use for generating the HTML page.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
32 REPORT_TPL = """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
33 <html>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
34 <head>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
35 <title>ROI Report</title>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
36 </head>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
37 <body>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
38 <h1>ROI Report</h1>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
39 <h2>Table of Contents</h2>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
40 <ul>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
41 #for figure in $figures
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
42 <li><a href="#$figure.slug">$figure.title</a></li>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
43 #end for
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
44 </ul>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
45 <h2>Plots</h2>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
46 #for figure in $figures
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
47 <h3 id="$figure.slug">$figure.title</h3>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
48 <img src="$figure.file_name" title="$figure.title" />
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
49 #end for
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
50 </body>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
51 </html>
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
52 """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
53
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
54
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
55 class ReportBuilder(ngs_roi.app.App):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
56 """This class is used for building the report."""
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
57
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
58 def __init__(self, args):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
59 self.args = args
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
60 self.in_file = self.args.in_file
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
61 self.out_file = self.args.out_file
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
62 self.out_dir = self.args.out_dir
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
63 self.prepareOutDir()
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
64
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
65 def plotAndWrite(self, file_name, numbers, ylabel):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
66 """Create plot of numbers and write as PNG.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
67
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
68 :param file_name:path to write plot to as image
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
69 :param numbers:list of numbers to plot
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
70 :param ylabel:label for y axis
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
71 """
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
72 plt.figure()
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
73 plt.plot(numbers)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
74 plt.ylabel(ylabel)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
75 plt.savefig(file_name)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
76
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
77 def run(self):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
78 # Load ROI.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
79 print('Loading ROI...', file=sys.stderr)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
80 records = ngs_roi.io.load(self.in_file)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
81 keys = records[0].data_keys
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
82 # Create ROI plots.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
83 print('Creating plots...', file=sys.stderr)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
84 METRICS = [('start position', 'start_pos', lambda x: x.start_pos),
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
85 ('end position', 'end_pos', lambda x: x.end_pos),
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
86 ('region length', 'region_length', lambda x: x.region_length),
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
87 ('max count', 'max_count', lambda x: x.max_count)]
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
88 def getData(i):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
89 def func(x):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
90 try:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
91 res = float(x.data[i])
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
92 except ValueError:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
93 res = 0
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
94 return res
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
95 return func
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
96 for i, key in enumerate(keys):
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
97 slug = ''.join(x for x in key if x.isalnum())
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
98 METRICS.append((key, slug, getData(i)))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
99 figure_infos = []
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
100 for title, slug, func in METRICS:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
101 values = [func(x) for x in records]
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
102 file_name = 'report_%s.png' % slug
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
103 file_path = os.path.join(self.out_dir, file_name)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
104 self.plotAndWrite(file_path, sorted(values), title)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
105 figure_infos.append({'file_name': file_name, 'title': title, 'slug': slug})
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
106 # Create report HTML.
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
107 name_space = {'figures': figure_infos}
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
108 t = Cheetah.Template.Template(REPORT_TPL, searchList=name_space)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
109 with open(os.path.join(self.out_dir, 'index.html'), 'wb') as f:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
110 f.write(str(t))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
111 with open(os.path.join(self.out_file), 'wb') as f:
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
112 f.write(str(t))
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
113
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
114 def main():
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
115 """Program entry point."""
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
116
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
117 parser = argparse.ArgumentParser(description='Create ROI report.')
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
118
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
119 ngs_roi.argparse.addFileArguments(parser)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
120 args = parser.parse_args()
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
121 ngs_roi.argparse.applyFileDefaults(args)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
122
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
123 report_builder = ReportBuilder(args)
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
124 return report_builder.run()
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
125
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
126
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
127 if __name__ == '__main__':
61d9bdb6d519 Uploaded
holtgrewe
parents:
diff changeset
128 sys.exit(main())