blob: dc9f87dc019bfbe16287795293bcaa883a103f01 [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
Ravago Jones5127ccc2022-07-31 16:32:45 -07008
Brian Silverman6260c092018-01-14 15:21:36 -08009def main(argv):
Ravago Jones5127ccc2022-07-31 16:32:45 -070010 if len(argv) < 4:
Austin Schuhea5f0a72024-09-02 15:02:36 -070011 print('Args: input output.cc struct_name')
Ravago Jones5127ccc2022-07-31 16:32:45 -070012 return 1
13 data_sum = [0.0] * 4096
14 data_count = [0] * 4096
15 data_list_absolute = []
16 data_list_current = []
Brian Silverman6260c092018-01-14 15:21:36 -080017
Ravago Jones5127ccc2022-07-31 16:32:45 -070018 with open(argv[1], 'r') as fd:
19 for line in fd:
20 if line.startswith('reading'):
21 split_line = line.split()
22 data_absolute = int(split_line[1])
23 data_index = int(split_line[3][2:])
24 data_current = int(split_line[2]) / 10000.0
25 data_sum[data_index] += data_current
26 data_count[data_index] += 1
27 data_list_absolute.append(data_absolute)
28 data_list_current.append(data_current)
29 data = [0.0] * 4096
30 min_zero = 4096
31 max_zero = 0
Austin Schuh5ea48472021-02-02 20:46:41 -080032 for i in range(0, 4096):
Ravago Jones5127ccc2022-07-31 16:32:45 -070033 if data_count[i] == 0:
34 min_zero = min(i, min_zero)
35 max_zero = max(i, min_zero)
Brian Silverman6260c092018-01-14 15:21:36 -080036
Austin Schuh5ea48472021-02-02 20:46:41 -080037 for i in range(0, 4096):
Ravago Jones5127ccc2022-07-31 16:32:45 -070038 if data_count[i] != 0:
39 data[i] = data_sum[i] / data_count[i]
40 if min_zero == 0 and max_zero == 4095:
41 for i in range(0, 4096):
42 if data_count[i] != 0:
43 while i > 0:
44 data[i - 1] = data[i]
45 i -= 1
46 break
Brian Silverman6260c092018-01-14 15:21:36 -080047
Ravago Jones5127ccc2022-07-31 16:32:45 -070048 for i in reversed(range(0, 4096)):
49 if data_count[i] != 0:
50 while i < 4095:
51 data[i + 1] = data[i]
52 i += 1
53 break
54 else:
55 for i in range(0, 4096):
56 if data_count[i] == 0:
57 if i < (min_zero + max_zero) / 2:
58 data[i] = data[min_zero - 1]
59 else:
60 data[i] = data[max_zero + 1]
Brian Silverman6260c092018-01-14 15:21:36 -080061
Ravago Jones5127ccc2022-07-31 16:32:45 -070062 pylab.plot(range(0, 4096), data)
63 pylab.figure()
64 pylab.plot(data_list_absolute, data_list_current)
65 pylab.show()
66 with open(argv[2], 'w') as out_fd:
67 out_fd.write('extern const float %s[4096];\n' % argv[3])
68 out_fd.write('const float %s[4096] = {\n' % argv[3])
69 for datapoint in data:
70 out_fd.write(' %ff,\n' % datapoint)
71 out_fd.write('};')
72
73 return 0
74
Brian Silverman6260c092018-01-14 15:21:36 -080075
76if __name__ == '__main__':
Ravago Jones5127ccc2022-07-31 16:32:45 -070077 sys.exit(main(sys.argv))