waveform: add LogWaveform

This commit is contained in:
Simon Renblad 2024-01-09 15:37:17 +08:00
parent 85bc36278d
commit adffcf26e0

View File

@ -3,6 +3,7 @@ from PyQt5.QtCore import Qt
from artiq.gui.models import DictSyncTreeSepModel, LocalModelManager from artiq.gui.models import DictSyncTreeSepModel, LocalModelManager
import numpy as np
import bisect import bisect
import pyqtgraph as pg import pyqtgraph as pg
import logging import logging
@ -200,3 +201,41 @@ class Waveform(pg.PlotWidget):
def wheelEvent(self, e): def wheelEvent(self, e):
if e.modifiers() & QtCore.Qt.ControlModifier: if e.modifiers() & QtCore.Qt.ControlModifier:
super().wheelEvent(e) super().wheelEvent(e)
class LogWaveform(Waveform):
def __init__(self, channel, state, parent=None):
Waveform.__init__(self, channel, state, parent)
def extract_data_from_state(self):
try:
self.x_data, self.y_data = zip(*self.state['logs'][self.name])
except:
logger.debug('Error caught when loading waveform: {}'.format(self.name), exc_info=True)
def display(self):
try:
self.plot_data_item.setData(
x=self.x_data, y=np.ones(len(self.x_data)))
self.plot_data_item.opts.update(
{"connect": np.zeros(2), "symbol": "x"})
old_msg = ""
old_x = 0
for x, msg in zip(self.x_data, self.y_data):
if x == old_x:
old_msg += "\n" + msg
else:
lbl = pg.TextItem(old_msg)
self.addItem(lbl)
lbl.setPos(old_x, DISPLAY_HIGH)
old_msg = msg
old_x = x
lbl = pg.TextItem(old_msg)
self.addItem(lbl)
lbl.setPos(old_x, DISPLAY_HIGH)
except:
logger.debug('Error caught when displaying waveform: {}'.format(self.name), exc_info=True)
self.plot_data_item.setData(x=[], y=[])
def format_cursor_label(self):
self.cursor_label.setText("")