diff --git a/pykirdy/kirdy_qt.py b/pykirdy/kirdy_qt.py index bf45da8..0e61492 100644 --- a/pykirdy/kirdy_qt.py +++ b/pykirdy/kirdy_qt.py @@ -5,13 +5,14 @@ from pyqtgraph.parametertree import Parameter, ParameterTree, ParameterItem, reg import pyqtgraph as pg pg.setConfigOptions(antialias=True) from pyqtgraph import mkPen -from pyqtgraph.functions import siEval, siParse, SI_PREFIX_EXPONENTS, FLOAT_REGEX +from pyqtgraph.functions import siEval, siParse, SI_PREFIX_EXPONENTS, SI_PREFIXES from pglive.sources.live_axis_range import LiveAxisRange from pglive.sources.data_connector import DataConnector from pglive.kwargs import Axis, LeadingLine from pglive.sources.live_plot import LiveLinePlot from pglive.sources.live_plot_widget import LivePlotWidget from pglive.sources.live_axis import LiveAxis +import re import sys import os import argparse @@ -33,6 +34,7 @@ from pid_autotune import PIDAutotune, PIDAutotuneState import importlib.resources COMMON_ERROR_MSG = "Connection Timeout. Disconnecting." +FLOAT_REGEX = re.compile(r'(?P[+-]?((((\d+(\.\d*)?)|(\d*\.\d+))([eE][+-]?\d+)?)|((?i:nan)|(inf))))\s*((?P[u' + SI_PREFIXES + r']?)(?P[\w°℃].*))?$') def get_argparser(): parser = argparse.ArgumentParser(description="ARTIQ master") @@ -958,10 +960,8 @@ class MainWindow(QtWidgets.QMainWindow): if inner_param.opts.get("target", None) is not None: if inner_param.opts.get("action", None) is not None: if inner_param.opts.get("unit", None) is not None: - # siParse is buggy on ° character - if not inner_param.opts["unit"] == "°C": - _, _, suffix = siParse(str(data)+inner_param.opts["unit"]) - data = siEval(str(data)+inner_param.opts["unit"], suffix=suffix) + _, _, suffix = siParse(str(data)+inner_param.opts["unit"], regex=FLOAT_REGEX) + data = siEval(str(data)+inner_param.opts["unit"], regex=FLOAT_REGEX, suffix=suffix) cmd = getattr(getattr(self.kirdy, inner_param.opts["target"]), inner_param.opts["action"]) param.child(*param.childPath(inner_param)).setOpts(lock=True) await cmd(data)