quick try on a special scan panel where the values can be specified

This commit is contained in:
2021-05-11 15:51:24 +02:00
parent b8dd131fb5
commit c0fe63b24e
2 changed files with 29 additions and 29 deletions
+3 -1
View File
@@ -1,10 +1,12 @@
from pathlib import Path
from slic.gui import widgets as ws
from slic.gui.special import ValueEntry
PERSISTABLE_WIDGETS = (
ws.MathEntry,
ws.FilenameEntry
ws.FilenameEntry,
ValueEntry
)
+26 -28
View File
@@ -1,12 +1,16 @@
import wx
from .daqpanels import AdjustableComboBox, ETADisplay
from .widgets import LabeledMathEntry, LabeledEntry, LabeledFilenameEntry, TwoButtons, make_filled_hbox, make_filled_vbox, STRETCH
from .daqpanels import AdjustableComboBox, ETADisplay, correct_n_pulses, run, post_event
from .widgets import LabeledMathEntry, LabeledEntry, LabeledFilenameEntry, TwoButtons, make_filled_hbox, make_filled_vbox, STRETCH, EXPANDING
from slic.utils import nice_arange, readable_seconds
from slic.utils.reprate import get_pvname_reprate
class ValueEntry(wx.TextCtrl):
pass
class SpecialScanPanel(wx.Panel):
def __init__(self, parent, scanner, instrument, *args, **kwargs):
@@ -27,21 +31,16 @@ class SpecialScanPanel(wx.Panel):
self.Bind(wx.EVT_TIMER, self.on_change_adj, self.timer)
self.timer.Start(2500) #TODO: make configurable
self.le_start = le_start = LabeledMathEntry(self, label="Start", value=0)
self.le_stop = le_stop = LabeledMathEntry(self, label="Stop", value=10)
self.le_step = le_step = LabeledMathEntry(self, label="Step Size", value=0.1)
self.le_values = le_values = ValueEntry(self, value="", style=wx.TE_MULTILINE)
self.le_nsteps = le_nsteps = LabeledEntry(self, label="#Steps")
le_nsteps.Disable()
self.on_change_pos(None) # update #Steps
self.on_change_values(None) # update #Steps
for le in (le_start, le_stop, le_step):
le.Bind(wx.EVT_TEXT, self.on_change_pos)
le_values.Bind(wx.EVT_TEXT, self.on_change_values)
self.cb_relative = cb_relative = wx.CheckBox(self, label="Relative to current position")
self.cb_return = cb_return = wx.CheckBox(self, label="Return to initial value")
cb_relative.SetValue(False)
cb_return.SetValue(True)
self.le_npulses = le_npulses = LabeledMathEntry(self, label="#Pulses", value=100)
@@ -56,27 +55,27 @@ class SpecialScanPanel(wx.Panel):
btn_go.Bind2(wx.EVT_BUTTON, self.on_stop)
# sizers:
widgets = (le_start, le_stop, le_step, le_nsteps)
hb_values = wx.BoxSizer()
hb_values.Add(le_values, 1, wx.EXPAND)
widgets = (STRETCH, STRETCH, STRETCH, le_nsteps)
hb_pos = make_filled_hbox(widgets)
widgets = (cb_relative, cb_return)
widgets = (STRETCH, cb_return)
hb_cbs = make_filled_vbox(widgets)
widgets = (cb_adjs, st_adj, STRETCH, hb_pos, hb_cbs, le_npulses, le_nrepeat, le_fname, eta, btn_go)
widgets = (cb_adjs, st_adj, EXPANDING, hb_values, hb_pos, hb_cbs, le_npulses, le_nrepeat, le_fname, eta, btn_go)
vbox = make_filled_vbox(widgets, border=10)
self.SetSizerAndFit(vbox)
def on_change_pos(self, event):
def on_change_values(self, event):
try:
start_pos, end_pos, step_size = self._get_pos()
if step_size == 0:
raise ValueError
except ValueError:
steps = self._get_values()
except ValueError as e:
nsteps = ""
tooltip = "Start, Stop and Step Size need to be floats.\nStep Size cannot be zero."
tooltip = str(e)
else:
steps = nice_arange(start_pos, end_pos, step_size)
nsteps = str(len(steps))
tooltip = str(steps)
self.le_nsteps.SetValue(nsteps)
@@ -94,7 +93,7 @@ class SpecialScanPanel(wx.Panel):
adjustable = self.cb_adjs.get()
start_pos, end_pos, step_size = self._get_pos()
steps = self._get_values()
filename = self.le_fname.GetValue()
@@ -107,10 +106,9 @@ class SpecialScanPanel(wx.Panel):
rate = self.eta.value
n_pulses = correct_n_pulses(rate, n_pulses)
relative = self.cb_relative.GetValue()
return_to_initial_values = self.cb_return.GetValue()
self.scan = self.scanner.scan1D(adjustable, start_pos, end_pos, step_size, n_pulses, filename, relative=relative, return_to_initial_values=return_to_initial_values, repeat=n_repeat, start_immediately=False)
self.scan = self.scanner.ascan_list(adjustable, steps, n_pulses, filename, return_to_initial_values=return_to_initial_values, repeat=n_repeat, start_immediately=False)
def wait():
self.scan.run()
@@ -128,11 +126,11 @@ class SpecialScanPanel(wx.Panel):
self.scan = None
def _get_pos(self):
start_pos = self.le_start.GetValue()
end_pos = self.le_stop.GetValue()
step_size = self.le_step.GetValue()
return float(start_pos), float(end_pos), float(step_size)
def _get_values(self):
values = self.le_values.GetValue()
values = values.replace(",", " ").split()
values = [float(v) for v in values]
return values