Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env python3
import numpy as np
import PyQt5 # make sure pyqtgraph imports Qt5
import pyqtgraph
from collections import deque # CircularBuffer
from artiq.applets.simple import TitleApplet
class RTPlot(pyqtgraph.PlotWidget):
def __init__(self, args):
pyqtgraph.PlotWidget.__init__(self)
self.args = args
self.xs = None
self.ys = None
self.y2s = None
def data_changed(self, data, mods, title):
try:
y = data.get(self.args.y)[1]
except KeyError:
return
y2 = data.get(self.args.y2, (False, None))[1]
if self.xs is None:
# Should be only first iteration
num = int(self.args.num)
self.xs = np.arange(0., num) # Fixed x-values
self.ys = deque(np.full(num, 0.), num) # Y-vals are a CircBuff of len num
if (y2 is not None): # make extra one if y2 is passed
self.y2s = deque(np.full(num, 0.0), num)
return
self.ys.append(y[0])
self.clear()
self.plot(self.xs, self.ys, pen=None, symbol="x")
if y2 is not None:
self.y2s.append(y2[0])
self.plot(self.xs, self.y2s, pen=None, symbol="+", symbolPen='r')
self.setTitle(title)
def main():
applet = TitleApplet(RTPlot)
applet.add_dataset("num", "Number of measures")
applet.add_dataset("y", "Y value")
applet.add_dataset("y2", "Second Y value", required=False)
applet.run()
if __name__ == "__main__":
main()