Replace pandas with numpy, fixed naming, added plot title

This commit is contained in:
Kyle Bartholomew
2020-06-29 21:40:56 -07:00
parent e3a314eb34
commit a673a50b43
+20 -11
View File
@@ -142,17 +142,17 @@ class BulkCapture:
def __init__(self,
get_var_callback,
data_rate=500.0,
length=2.0):
duration=2.0):
from threading import Event, Thread
import pandas as pd
import numpy as np
self.get_var_callback = get_var_callback
self.event = Event()
def loop():
vals = []
start_time = time.monotonic()
total_samples = int(length * data_rate)
period = 1.0 / data_rate
for i in range(total_samples):
while time.monotonic() - start_time < duration:
try:
data = get_var_callback()
except Exception as ex:
@@ -163,17 +163,26 @@ class BulkCapture:
relative_time = time.monotonic() - start_time
vals.append([relative_time] + data)
time.sleep(period - (relative_time % period)) # this ensures consistently timed samples
self.data = pd.DataFrame(vals) # A lock is not really necessary due to the event
print("Achieved average data rate: {}Hz".format(total_samples / self.data.iloc[-1, 0]))
print("If this rate is significantly lower than what you specified, consider lowering it below the achieved value for more consistent sampling.")
self.data = np.array(vals) # A lock is not really necessary due to the event
print("Capture complete")
achieved_data_rate = len(self.data) / self.data[-1, 0]
if achieved_data_rate < (data_rate * 0.9):
print("Achieved average data rate: {}Hz".format(achieved_data_rate))
print("If this rate is significantly lower than what you specified, consider lowering it below the achieved value for more consistent sampling.")
self.event.set() # tell the main thread that the bulk capture is complete
Thread(target=loop, daemon=True).start()
def plot_data(self):
def plot(self):
import matplotlib.pyplot as plt
plt.plot(self.data[0], self.data.drop(0, axis=1))
import inspect
from textwrap import wrap
plt.plot(self.data[:,0], self.data[:,1:])
plt.xlabel("Time (seconds)")
plt.ylabel("Counts")
title = (str(inspect.getsource(self.get_var_callback))
.strip("['\\n']")
.split(" = ")[1])
plt.title("\n".join(wrap(title, 60)))
plt.legend(range(self.data.shape[1]-1))
plt.show()
@@ -205,7 +214,7 @@ def step_and_plot( axis,
capture = BulkCapture(get_var_callback,
data_rate=data_rate,
length = initial_settle_time + settle_time)
duration=initial_settle_time + settle_time)
set_setpoint(initial_setpoint)
time.sleep(initial_settle_time)