procpico.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import sys
  2. import matplotlib.pyplot as plt
  3. import pandas as pd
  4. titles = {
  5. '1-oe_ardusink.csv': 'PulsePal → Open Ephys Arduino Output Sink',
  6. '2-oe_event_zmq_arduino.csv': 'OE event/ZMQInterface → OPETH/Arduino',
  7. '3-oe_data_zmq_arduino.csv': 'OE data/ZMQInterface → OPETH/Arduino',
  8. '4-oe_data_filter_zmq_arduino.csv': 'OE filtered data/ZMQInterface → OPETH/Arduino',
  9. '5-oe_intan.csv': 'OE + Intan/ZMQInterface → OPETH/Arduino'
  10. }
  11. if sys.argv[1:]:
  12. fname = sys.argv[1]
  13. lines = open(fname, 'rt').readlines()[1:]
  14. else:
  15. print("Missing input file")
  16. exit()
  17. fig, (ax1, ax2) = plt.subplots(2, figsize=(5,7))
  18. meas = [float(l.split(';')[2].replace(',', '.'))*1000 for l in lines]
  19. results = pd.DataFrame(meas, columns=['latency'])
  20. print(results)
  21. print(pd.DataFrame([results.mean(), results.std(), results.min(), results.max()],
  22. index=['mean', 'std', 'min', 'max']))
  23. results.plot(ax=ax1)
  24. ax1.set_ylabel('[ms]')
  25. results.hist(ax=ax2)
  26. ax2.set_xlabel('[ms]')
  27. ax1.set_ylim([0,38])
  28. ax2.set_ylim([0,35])
  29. ax2.set_ylabel('number of pulses')
  30. title = titles[fname] if fname in titles else sys.argv[2]
  31. ax1.set_title(title)
  32. ax2.set_title('mean: %.1f stddev: %.1f max: %.1f ms' % (results.mean(), results.std(), results.max()))
  33. basename = fname.split('.')[0]
  34. fig.savefig(basename + '.png')
  35. fig.savefig(basename + '.svg')
  36. plt.show()