forked from schrodinger/pymol-testing
-
Notifications
You must be signed in to change notification settings - Fork 0
/
plot_timings.py
93 lines (79 loc) · 2.44 KB
/
plot_timings.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"""
Create plots for timings
Will create a temporary directory and put plots in PNG format there,
together with an index.html file.
"""
import os, sys, tempfile, re, socket, time
import datetime
from optparse import OptionParser
from collections import defaultdict
from matplotlib import pyplot, rcParams, dates
# plot setup
rcParams['figure.figsize'] = 5.0, 2.5
rcParams['font.size'] = 9
# command line options
parser = OptionParser()
parser.add_option("-b", "--browse", action="store_true", dest="browse")
parser.add_option("-q", "--quiet", action="store_true", dest="quiet")
options = parser.parse_args()[0]
# file with timing results
tabname = os.getenv("PYMOLTESTTIMINGS", "timings.tab")
# read file
db = defaultdict(lambda: defaultdict(list))
for line in open(tabname):
a = line.rstrip('\n').split("\t")
timestamp = float(a[0])
try:
mac = a[9] + a[5]
except:
mac = a[1]
mac = ':'.join(mac[i:i+2] for i in range(0, len(mac), 2))
value = float(a[2])
key = '%s(%s)' % (a[3], a[4])
db[key][mac].append((timestamp, value))
# helper function for unique PNG filenames
used_png = set()
def get_unused_png(key):
r = key = re.sub(r'[^-\w.]', '_', key)
i = 0
while r in used_png:
i += 1
r = key + '-%d' % i
return r + '.png'
# create output dir
outdir = tempfile.mkdtemp()
htmlout = open(os.path.join(outdir, "index.html"), "w")
print >> htmlout, "<h1>PyMOL Benchmarks,", socket.gethostname()
print >> htmlout, time.strftime("%D-%T"), "</h1>"
# make plots
for key in sorted(db):
data = db[key]
pyplot.clf()
fig, ax = pyplot.subplots(1)
maxy = 0.0
for mac in data:
x, y = zip(*data[mac])
x = map(datetime.datetime.fromtimestamp, x)
maxy = max(maxy, max(y))
ax.plot(x, y, "o-", label=mac[:290])
fig.autofmt_xdate()
ax.xaxis.set_major_formatter(dates.DateFormatter('%Y-%m-%d'))
ax.yaxis.set_label_text("Seconds")
ax.set_title(key)
pyplot.grid(True)
pyplot.ylim(0, maxy * 1.1)
pyplot.legend(loc="best")
pngname = get_unused_png(key)
pyplot.savefig(os.path.join(outdir, pngname), dpi=70)
print >> htmlout, "<img src='%s'>" % (pngname)
# done
if not options.quiet:
print outdir
# open index.html
if options.browse:
outhtml = os.path.join(outdir, "index.html")
if sys.platform.startswith("darwin"):
os.system("open " + outhtml)
else:
import webbrowser
webbrowser.open(outhtml)