Belle II Software  release-05-02-19
plot.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 import numpy as np
5 import matplotlib.pyplot as plt
6 
7 
8 def fFileExist(filename):
9  '''Test if file exists'''
10 
11  try:
12  oFile = open(filename, 'r')
13  except IOError:
14  return 0
15  else:
16  oFile.close()
17  return 1
18 
19 
20 def read(optlevel, b, name):
21  '''read time from out/*.out and save plots to plots/. The cut deletes obviously wrong times.'''
22 
23  z = 0
24  for i in range(0, len(optlevel)):
25  if fFileExist('out/' + optlevel[i - z] + '.out') == 0:
26  del optlevel[i - z]
27  z = z + 1
28  cut = True
29  value = [0] * len(optlevel)
30  sigma = [0] * len(optlevel)
31  valuenormed = [0] * len(optlevel)
32  sigmanormed = [0] * len(optlevel)
33  n = [0] * len(optlevel)
34  t = list(range(0, len(optlevel)))
35  for i in t:
36  fobj = open('out/' + optlevel[i] + '.out', 'r')
37  readvalue = []
38  # read file
39  for line in fobj:
40  words = line.split()
41  readvalue.append(1 / float(words[b]))
42  fobj.close()
43  # Calculation
44  value[i] = np.mean(readvalue)
45  sigma[i] = np.std(readvalue)
46  u = list(range(0, len(readvalue)))
47  z = 0
48  if cut:
49  for j in u:
50  if readvalue[j - z] > 1.5 * value[i] or readvalue[j - z] < 0.5 \
51  * value[i]:
52  del readvalue[j - z]
53  z = z + 1
54  sigma[i] = np.std(readvalue)
55  value[i] = np.mean(readvalue)
56  n[i] = len(readvalue)
57  x = 1 / value[0]
58  for i in range(0, len(value)):
59  valuenormed[i] = value[i] * x
60  sigmanormed[i] = sigma[i] * x
61  plt.errorbar(
62  t,
63  valuenormed,
64  xerr=0,
65  yerr=sigmanormed,
66  color='black',
67  fmt='_',
68  ecolor='black',
69  label='normed time',
70  )
71  (locs, labels) = plt.xticks(t, optlevel)
72  plt.setp(labels, rotation=90)
73  plt.xlim([-0.5, len(optlevel) - 0.5])
74  plt.ylabel('performance')
75  fig = plt.gcf()
76  fig.subplots_adjust(bottom=0.65)
77  plt.savefig('plots/' + name + '.png')
78  plt.close()
79  fobj = open('plots/' + name + '.out', 'w')
80  for i in t:
81  fobj.write(optlevel[i] + '&' + str(n[i]) + '&' + str('%.3f' % value[i]) +
82  ' & ' + str('%.3f' % sigma[i]) + '&' + str('%.4f' % valuenormed[i]) +
83  '&' + str('%.4f' % sigmanormed[i]) + '\\\\\n')
84  fobj.write("\hline\n")
85 
86 
87 name = 'CDCLegendreTracking'
88 optlevel = ['gcc-O0', 'gcc-O3', 'gcc-O3-native']
89 read(optlevel, 0, name)