blob: d8890647b851cd218ef5e546a97b2e0d8995fa9f [file] [log] [blame]
Austin Schuh085eab92020-11-26 13:54:51 -08001#!/usr/bin/python3
Brian Silverman6260c092018-01-14 15:21:36 -08002
3import sys
4from matplotlib import pylab
5
6# TODO(austin): Plot flag.
7
8def main(argv):
9 if len(argv) < 4:
10 print 'Args: input output.cc struct_name'
11 return 1
12 data_sum = [0.0] * 4096
13 data_count = [0] * 4096
14 data_list_absolute = []
15 data_list_current = []
16
17 with open(argv[1], 'r') as fd:
18 for line in fd:
19 if line.startswith('reading'):
20 split_line = line.split()
21 data_absolute = int(split_line[1])
22 data_index = int(split_line[3][2:])
23 data_current = int(split_line[2]) / 10000.0
24 data_sum[data_index] += data_current
25 data_count[data_index] += 1
26 data_list_absolute.append(data_absolute)
27 data_list_current.append(data_current)
28 data = [0.0] * 4096
29 min_zero = 4096
30 max_zero = 0
Austin Schuh5ea48472021-02-02 20:46:41 -080031 for i in range(0, 4096):
Brian Silverman6260c092018-01-14 15:21:36 -080032 if data_count[i] == 0:
33 min_zero = min(i, min_zero)
34 max_zero = max(i, min_zero)
35
Austin Schuh5ea48472021-02-02 20:46:41 -080036 for i in range(0, 4096):
Brian Silverman6260c092018-01-14 15:21:36 -080037 if data_count[i] != 0:
38 data[i] = data_sum[i] / data_count[i]
39 if min_zero == 0 and max_zero == 4095:
Austin Schuh5ea48472021-02-02 20:46:41 -080040 for i in range(0, 4096):
Brian Silverman6260c092018-01-14 15:21:36 -080041 if data_count[i] != 0:
42 while i > 0:
43 data[i - 1] = data[i]
44 i -= 1
45 break;
46
Austin Schuh5ea48472021-02-02 20:46:41 -080047 for i in reversed(range(0, 4096)):
Brian Silverman6260c092018-01-14 15:21:36 -080048 if data_count[i] != 0:
49 while i < 4095:
50 data[i + 1] = data[i]
51 i += 1
52 break;
53 else:
Austin Schuh5ea48472021-02-02 20:46:41 -080054 for i in range(0, 4096):
Brian Silverman6260c092018-01-14 15:21:36 -080055 if data_count[i] == 0:
56 if i < (min_zero + max_zero) / 2:
57 data[i] = data[min_zero - 1]
58 else:
59 data[i] = data[max_zero + 1]
60
61 pylab.plot(range(0, 4096), data)
62 pylab.figure()
63 pylab.plot(data_list_absolute, data_list_current)
64 pylab.show()
65 with open(argv[2], 'w') as out_fd:
66 out_fd.write('extern const float %s[4096];\n' % argv[3])
67 out_fd.write('const float %s[4096] = {\n' % argv[3])
68 for datapoint in data:
69 out_fd.write(' %ff,\n' % datapoint)
70 out_fd.write('};')
71
72 return 0
73
74if __name__ == '__main__':
75 sys.exit(main(sys.argv))