Updated Sunset/Sunrise functions to latest PyEphem API
[debian/gnuradio] / gcell / src / apps / plot_speedup.py
1 #!/usr/bin/env python
2
3 from optparse import OptionParser
4 from pylab import *
5 from pprint import pprint
6 import os.path
7
8
9 def add_entry(d, nspes, speedup, work_incr):
10     if d.has_key(work_incr):
11         d[work_incr].append((nspes, speedup))
12     else:
13         d[work_incr] = [(nspes, speedup)]
14     
15 def parse_file(f):
16     d = {}
17     for line in f:
18         items = [float(x) for x in line.split()]
19         # print "items =", items
20         nspes = items[0]
21         work_incr = int(1e6 * items[1])
22         speedup = items[4]
23         add_entry(d, nspes, speedup, work_incr)
24     return d
25
26
27 class plot_data(object):
28     def __init__(self, filenames, output_filename):
29         self.fig = figure(1, figsize=(8, 6), facecolor='w')
30         self.sp = self.fig.add_subplot(1,1,1)
31         self.sp.set_xlabel("nspes", fontweight="bold")
32         self.sp.set_ylabel("speedup", fontweight="bold")
33         self.sp.grid(True)
34         # print 'rcParams["legend.fontsize"] =', rcParams["legend.fontsize"]
35         rcParams["legend.fontsize"] = 10
36
37
38         self.markers = {
39              10 : 'o',
40              50 : 's',
41             100 : '^',
42             200 : 'D',
43             300 : 'v',
44             400 : '>',
45             500 : 'h'
46             }
47         
48         if len(filenames) == 1:
49             f = filenames[0]
50             d = parse_file(open(f))
51             self.make_single_plot(d, f)
52             
53         else:
54             for f in filenames:
55                 d = parse_file(open(f))
56                 self.make_plot(d, f, f == filenames[0])
57
58         if output_filename:
59             savefig(output_filename)
60         else:
61             show()
62
63
64     def make_single_plot(self, d, filename):
65         def style(k):
66             return self.markers[k]
67
68         tag, ext = os.path.splitext(os.path.basename(filename))
69         title(tag)
70         keys = d.keys()
71         keys.sort()
72         keys.reverse()
73         for k in keys:
74             vlist = d[k]         # list of 2-tuples
75             xs = [v[0] for v in vlist]
76             ys = [v[1] for v in vlist]
77             plot(xs, ys, style(k), label="%d us" % (k,))
78
79         x = legend(loc=2)
80
81     def make_plot(self, d, filename, first):
82         def style(k):
83             if first:
84                 return self.markers[k]
85             else:
86                 return 'k' + self.markers[k]
87
88         tag, ext = os.path.splitext(os.path.basename(filename))
89         keys = d.keys()
90         keys.sort()
91         keys.reverse()
92         for k in keys:
93             vlist = d[k]         # list of 2-tuples
94             xs = [v[0] for v in vlist]
95             ys = [v[1] for v in vlist]
96             plot(xs, ys, style(k), label="%s %d us" % (tag, k))
97
98         x = legend(loc=2)
99
100 def main():
101     usage="%prog: [options] input_filename..."
102     description = "Plot R*.avg files from benchmark_nop.py"
103     parser = OptionParser(usage=usage, description=description)
104     parser.add_option('-o', '--output', default=None,  metavar="FILE",
105                       help="generate .png file")
106     (options, args) = parser.parse_args()
107     if len(args) < 1:
108         parser.print_help()
109         raise SystemExit, 1
110
111     filenames = args
112     dc = plot_data(filenames, options.output)
113
114
115         
116 if __name__ == '__main__':
117     try:
118         main()
119     except KeyboardInterrupt:
120         pass
121