rework motor tweak
This commit is contained in:
@@ -43,10 +43,12 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
|
|
||||||
|
|
||||||
def connect_motor(self, motor_base, short_name=None, **kwargs):
|
def connect_motor(self, motor_base, short_name=None, **kwargs):
|
||||||
|
# TODO: DO NOT USE Motor base class, but reduce to the only really needed PV: s.a. class QopticZoom(object)
|
||||||
|
# TODO: have a own motor Class as class SimMotor:
|
||||||
m = Motor(motor_base)
|
m = Motor(motor_base)
|
||||||
m.get_position()
|
m.get_position()
|
||||||
self._ignore_limits = m.HLM == m.LLM # if both high/low limits are equal they are meaningless
|
self._ignore_limits = m.HLM == m.LLM # if both high/low limits are equal they are meaningless
|
||||||
self.motor = m
|
self._motor = m
|
||||||
if not short_name:
|
if not short_name:
|
||||||
short_name = m.description
|
short_name = m.description
|
||||||
self.short_name = short_name
|
self.short_name = short_name
|
||||||
@@ -73,8 +75,8 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
# self.jog_forward.released.connect(lambda: self.jog('forward', False))
|
# self.jog_forward.released.connect(lambda: self.jog('forward', False))
|
||||||
# self.jog_reverse.released.connect(lambda: self.jog('reverse', False))
|
# self.jog_reverse.released.connect(lambda: self.jog('reverse', False))
|
||||||
|
|
||||||
self.tweak_forward.clicked.connect(lambda m: self.motor.tweak('forward'))
|
self.tweak_forward.clicked.connect(lambda x: m.tweak('forward'))
|
||||||
self.tweak_reverse.clicked.connect(lambda m: self.motor.tweak('reverse'))
|
self.tweak_reverse.clicked.connect(lambda x: m.tweak('reverse'))
|
||||||
|
|
||||||
self.bind_wheel()
|
self.bind_wheel()
|
||||||
|
|
||||||
@@ -101,7 +103,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
|
|
||||||
|
|
||||||
def set_motor_validator(self, **kwargs):
|
def set_motor_validator(self, **kwargs):
|
||||||
m = self.motor
|
m = self._motor
|
||||||
lineedit = self._drive_val
|
lineedit = self._drive_val
|
||||||
min, max = m.PV('LLM').get(), m.PV('HLM').get()
|
min, max = m.PV('LLM').get(), m.PV('HLM').get()
|
||||||
if min == max:
|
if min == max:
|
||||||
@@ -111,18 +113,35 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
|
|
||||||
|
|
||||||
def move_relative(self, dist):
|
def move_relative(self, dist):
|
||||||
self.motor.move(dist, ignore_limits=True, relative=True)
|
try:
|
||||||
|
self._val+=dist
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
self._motor.move(dist, ignore_limits=True, relative=True)
|
||||||
|
|
||||||
def is_done(self):
|
def is_done(self):
|
||||||
self.motor.refresh()
|
m=self._motor
|
||||||
return 1 == self.motor.done_moving
|
m.refresh()
|
||||||
|
return 1 == m.done_moving
|
||||||
|
|
||||||
def get_position(self):
|
def get_rbv(self):
|
||||||
return self.motor.get_position(readback=True)
|
#return self._motor.get('RBV')
|
||||||
|
m=self._motor
|
||||||
|
return m.get_position(readback=True)
|
||||||
|
|
||||||
|
def get_val(self):
|
||||||
|
#return self._motor.get('VAL')
|
||||||
|
try:
|
||||||
|
v=self._val
|
||||||
|
except AttributeError:
|
||||||
|
m=self._motor
|
||||||
|
self._val=v=m.get('VAL')
|
||||||
|
return v
|
||||||
|
|
||||||
def is_homed(self):
|
def is_homed(self):
|
||||||
self.motor.refresh()
|
m=self._motor
|
||||||
status = DeltatauMotorStatus(self.motor.motor_status)
|
m.refresh()
|
||||||
|
status = DeltatauMotorStatus(m.motor_status)
|
||||||
return bool(DeltatauMotorStatus.MOTOR_HAS_BEEN_HOMED & status)
|
return bool(DeltatauMotorStatus.MOTOR_HAS_BEEN_HOMED & status)
|
||||||
|
|
||||||
def move_motor_to_position(self, drive=None, wait=False, assert_position=False):
|
def move_motor_to_position(self, drive=None, wait=False, assert_position=False):
|
||||||
@@ -130,9 +149,14 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
drive = float(self._drive_val.text())
|
drive = float(self._drive_val.text())
|
||||||
if assert_position:
|
if assert_position:
|
||||||
wait=True
|
wait=True
|
||||||
self.motor.move(drive, wait=wait, ignore_limits=True, relative=False)
|
try:
|
||||||
|
self._val=drive
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
m=self._motor
|
||||||
|
m.move(drive, wait=wait, ignore_limits=True, relative=False)
|
||||||
if assert_position:
|
if assert_position:
|
||||||
assert_motor_positions([(self.motor, drive, 0.1)], timeout=1)
|
assert_motor_positions([(m, drive, 0.1)], timeout=1)
|
||||||
|
|
||||||
def emit_signals(self, **kw):
|
def emit_signals(self, **kw):
|
||||||
'''
|
'''
|
||||||
@@ -191,7 +215,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
self.event_axis_fault.emit(self._pvname, kw)
|
self.event_axis_fault.emit(self._pvname, kw)
|
||||||
|
|
||||||
def update_label(self, **kwargs):
|
def update_label(self, **kwargs):
|
||||||
m = self.motor
|
m = self._motor
|
||||||
self.label.setText(self._templates[self._label_style].format(rbv=m.readback))
|
self.label.setText(self._templates[self._label_style].format(rbv=m.readback))
|
||||||
self.jog_forward.setToolTip('jog forward at {:.3f} {}/s'.format(m.jog_speed, m.units))
|
self.jog_forward.setToolTip('jog forward at {:.3f} {}/s'.format(m.jog_speed, m.units))
|
||||||
self.jog_reverse.setToolTip('jog reverse at {:.3f} {}/s'.format(m.jog_speed, m.units))
|
self.jog_reverse.setToolTip('jog reverse at {:.3f} {}/s'.format(m.jog_speed, m.units))
|
||||||
@@ -199,7 +223,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
self.tweak_reverse.setToolTip('tweak reverse by {:.3f} {}'.format(m.tweak_val, m.units))
|
self.tweak_reverse.setToolTip('tweak reverse by {:.3f} {}'.format(m.tweak_val, m.units))
|
||||||
|
|
||||||
def update_jog_speed(self, event):
|
def update_jog_speed(self, event):
|
||||||
m = self.motor
|
m = self._motor
|
||||||
speed = m.jog_speed
|
speed = m.jog_speed
|
||||||
sign = math.copysign(1, event.angleDelta().y())
|
sign = math.copysign(1, event.angleDelta().y())
|
||||||
m.jog_speed = speed + (sign * 0.1 * speed)
|
m.jog_speed = speed + (sign * 0.1 * speed)
|
||||||
@@ -207,7 +231,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
self.jog_reverse.setToolTip('jog reverse at {:.3f} {}/s'.format(m.jog_speed, m.units))
|
self.jog_reverse.setToolTip('jog reverse at {:.3f} {}/s'.format(m.jog_speed, m.units))
|
||||||
|
|
||||||
def tweak_event(self, event):
|
def tweak_event(self, event):
|
||||||
m = self.motor
|
m = self._motor
|
||||||
sign = event.angleDelta().y()
|
sign = event.angleDelta().y()
|
||||||
if sign < 0:
|
if sign < 0:
|
||||||
m.tweak_reverse = 1
|
m.tweak_reverse = 1
|
||||||
@@ -219,14 +243,14 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
self.tweak_reverse.wheelEvent = self.tweak_event
|
self.tweak_reverse.wheelEvent = self.tweak_event
|
||||||
|
|
||||||
def jog(self, direction, enable):
|
def jog(self, direction, enable):
|
||||||
m = self.motor
|
m = self._motor
|
||||||
if 'forw' in direction:
|
if 'forw' in direction:
|
||||||
m.jog_forward = int(enable)
|
m.jog_forward = int(enable)
|
||||||
else:
|
else:
|
||||||
m.jog_reverse = int(enable)
|
m.jog_reverse = int(enable)
|
||||||
|
|
||||||
def contextMenuEvent(self, event):
|
def contextMenuEvent(self, event):
|
||||||
m = self.motor
|
m = self._motor
|
||||||
menu = QMenu(self)
|
menu = QMenu(self)
|
||||||
menu.setTitle(self.short_name)
|
menu.setTitle(self.short_name)
|
||||||
|
|
||||||
@@ -267,7 +291,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
prec, ok = QInputDialog.getInt(self, msg, msg, prec, 0, 10)
|
prec, ok = QInputDialog.getInt(self, msg, msg, prec, 0, 10)
|
||||||
_log.debug('prec after (%d) %d', ok, prec)
|
_log.debug('prec after (%d) %d', ok, prec)
|
||||||
if ok:
|
if ok:
|
||||||
self.motor.put('PREC', prec, wait=True)
|
m.put('PREC', prec, wait=True)
|
||||||
|
|
||||||
elif action == changejogspeedAction:
|
elif action == changejogspeedAction:
|
||||||
name = m.NAME
|
name = m.NAME
|
||||||
@@ -275,7 +299,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
msg = 'Jog speed for motor {}'.format(name)
|
msg = 'Jog speed for motor {}'.format(name)
|
||||||
speed, ok = QInputDialog.getDouble(self, msg, msg, speed, 0.01, m.slew_speed, m.precision)
|
speed, ok = QInputDialog.getDouble(self, msg, msg, speed, 0.01, m.slew_speed, m.precision)
|
||||||
if ok:
|
if ok:
|
||||||
self.motor.put('JVEL', speed, wait=True)
|
m.put('JVEL', speed, wait=True)
|
||||||
|
|
||||||
elif action == changetweakstepAction:
|
elif action == changetweakstepAction:
|
||||||
name = m.NAME
|
name = m.NAME
|
||||||
@@ -283,13 +307,13 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
msg = 'Tweak step for motor {} at {} {}'.format(name, tv, m.units)
|
msg = 'Tweak step for motor {} at {} {}'.format(name, tv, m.units)
|
||||||
tv, ok = QInputDialog.getDouble(self, msg, msg, tv, pow(10, -m.precision), m.slew_speed, m.precision)
|
tv, ok = QInputDialog.getDouble(self, msg, msg, tv, pow(10, -m.precision), m.slew_speed, m.precision)
|
||||||
if ok:
|
if ok:
|
||||||
self.motor.put('TWV', tv, wait=True)
|
m.put('TWV', tv, wait=True)
|
||||||
|
|
||||||
elif action == tozeroAction:
|
elif action == tozeroAction:
|
||||||
m.move(0.0, ignore_limits=True)
|
m.move(0.0, ignore_limits=True)
|
||||||
|
|
||||||
elif action == stopmotorAction:
|
elif action == stopmotorAction:
|
||||||
self.motor.stop_go = SPMG_STOP if m.stop_go == SPMG_GO else SPMG_GO
|
m.stop_go = SPMG_STOP if m.stop_go == SPMG_GO else SPMG_GO
|
||||||
|
|
||||||
elif action == autolabelsAction:
|
elif action == autolabelsAction:
|
||||||
self._auto_labels = not self._auto_labels
|
self._auto_labels = not self._auto_labels
|
||||||
@@ -315,7 +339,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
self.update_label()
|
self.update_label()
|
||||||
|
|
||||||
def update_label_template(self):
|
def update_label_template(self):
|
||||||
m = self.motor
|
m = self._motor
|
||||||
source = self._templates_source
|
source = self._templates_source
|
||||||
target = self._templates
|
target = self._templates
|
||||||
|
|
||||||
@@ -340,7 +364,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
qp.end()
|
qp.end()
|
||||||
|
|
||||||
def _draw_limits(self, qp):
|
def _draw_limits(self, qp):
|
||||||
m = self.motor
|
m = self._motor
|
||||||
width, height = self.size().width(), self.size().height()
|
width, height = self.size().width(), self.size().height()
|
||||||
pad = 5
|
pad = 5
|
||||||
rounding = 2
|
rounding = 2
|
||||||
|
|||||||
@@ -58,9 +58,9 @@ class SimMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
|
|
||||||
def connect_motor(self, rec_name, short_name=None, *args, **kwargs):
|
def connect_motor(self, rec_name, short_name=None, *args, **kwargs):
|
||||||
self.label.setToolTip('{} => {}'.format(rec_name, short_name))
|
self.label.setToolTip('{} => {}'.format(rec_name, short_name))
|
||||||
self.motor=SimMotor(rec_name, short_name)
|
self._motor=m=SimMotor(rec_name, short_name)
|
||||||
self.set_motor_validator()
|
self.set_motor_validator()
|
||||||
self._drive_val.setText(str(self.motor._pos))
|
self._drive_val.setText(str(m._pos))
|
||||||
self._drive_val.returnPressed.connect(self.move_motor_to_position)
|
self._drive_val.returnPressed.connect(self.move_motor_to_position)
|
||||||
|
|
||||||
self.jog_forward.hide()
|
self.jog_forward.hide()
|
||||||
@@ -68,7 +68,7 @@ class SimMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
|
|
||||||
tweak_min = kwargs.get("tweak_min", 0.0001)
|
tweak_min = kwargs.get("tweak_min", 0.0001)
|
||||||
tweak_max = kwargs.get("tweak_max", 20.0)
|
tweak_max = kwargs.get("tweak_max", 20.0)
|
||||||
self._tweak_val.setText(str(self.motor._twv))
|
self._tweak_val.setText(str(m._twv))
|
||||||
self._tweak_val.setValidator(QDoubleValidator(tweak_min, tweak_max, 4, self._tweak_val))
|
self._tweak_val.setValidator(QDoubleValidator(tweak_min, tweak_max, 4, self._tweak_val))
|
||||||
#self._tweak_val.editingFinished.connect(lambda m=self._pv_tweak_val: m.put(self._tweak_val.text()))
|
#self._tweak_val.editingFinished.connect(lambda m=self._pv_tweak_val: m.put(self._tweak_val.text()))
|
||||||
self.tweak_forward.clicked.connect(lambda m: self.move_relative(float(self._tweak_val.text())))
|
self.tweak_forward.clicked.connect(lambda m: self.move_relative(float(self._tweak_val.text())))
|
||||||
@@ -93,8 +93,9 @@ class SimMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
|
|
||||||
|
|
||||||
def set_motor_validator(self, **kwargs):
|
def set_motor_validator(self, **kwargs):
|
||||||
|
m=self._motor
|
||||||
lineedit = self._drive_val
|
lineedit = self._drive_val
|
||||||
min, max = self.motor._llm, self.motor._hlm
|
min, max = m._llm, m._hlm
|
||||||
if min == max:
|
if min == max:
|
||||||
min = -1e6
|
min = -1e6
|
||||||
max = 1e6
|
max = 1e6
|
||||||
@@ -102,15 +103,19 @@ class SimMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
|
|
||||||
|
|
||||||
def move_relative(self, dist, delay=None):
|
def move_relative(self, dist, delay=None):
|
||||||
self.motor._pos += dist
|
m=self._motor
|
||||||
|
m._pos += dist
|
||||||
if delay:
|
if delay:
|
||||||
sleep(delay)
|
sleep(delay)
|
||||||
_log.debug('{} rel move => {}'.format(self.motor._short_name, dist))
|
_log.debug('{} rel move => {}'.format(m._short_name, dist))
|
||||||
self.update_label()
|
self.update_label()
|
||||||
self.emit_signals(source_field='VAL')
|
self.emit_signals(source_field='VAL')
|
||||||
|
|
||||||
def get_position(self):
|
def get_rbv(self):
|
||||||
return self.motor._pos
|
return self._motor._pos
|
||||||
|
|
||||||
|
def get_val(self):
|
||||||
|
return self._motor._pos
|
||||||
|
|
||||||
def is_homed(self):
|
def is_homed(self):
|
||||||
return True
|
return True
|
||||||
@@ -140,32 +145,34 @@ class SimMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
return True # in (0, 3)
|
return True # in (0, 3)
|
||||||
|
|
||||||
def move_motor_to_position(self, drive=None, wait=False, assert_position=False):
|
def move_motor_to_position(self, drive=None, wait=False, assert_position=False):
|
||||||
|
m=self._motor
|
||||||
if assert_position:
|
if assert_position:
|
||||||
wait=True
|
wait=True
|
||||||
if drive is None:
|
if drive is None:
|
||||||
_log.debug('{} abs target from widget'.format(self.motor._short_name))
|
_log.debug('{} abs target from widget'.format(m._short_name))
|
||||||
drive = float(self._drive_val.text())
|
drive = float(self._drive_val.text())
|
||||||
_log.debug('{} abs move => {}'.format(self.motor._short_name, drive))
|
_log.debug('{} abs move => {}'.format(m._short_name, drive))
|
||||||
self.motor._pos=drive
|
m._pos=drive
|
||||||
self.update_label()
|
self.update_label()
|
||||||
self.emit_signals(source_field='VAL')
|
self.emit_signals(source_field='VAL')
|
||||||
|
|
||||||
def emit_signals(self, **kw):
|
def emit_signals(self, **kw):
|
||||||
|
m=self._motor
|
||||||
field = kw['source_field']
|
field = kw['source_field']
|
||||||
if field == 'VAL':
|
if field == 'VAL':
|
||||||
self.event_val.emit(self.motor._rec_name, kw)
|
self.event_val.emit(m._rec_name, kw)
|
||||||
elif field == 'RBV':
|
elif field == 'RBV':
|
||||||
self.event_readback.emit(self.motor._rec_name, kw)
|
self.event_readback.emit(m._rec_name, kw)
|
||||||
elif field == 'LVIO':
|
elif field == 'LVIO':
|
||||||
self.event_soft_limit.emit(self.motor._rec_name, kw)
|
self.event_soft_limit.emit(m._rec_name, kw)
|
||||||
elif field == 'HLS':
|
elif field == 'HLS':
|
||||||
self.event_high_hard_limit.emit(self.motor._rec_name, kw)
|
self.event_high_hard_limit.emit(m._rec_name, kw)
|
||||||
self.event_axis_fault.emit(self.motor._rec_name, kw)
|
self.event_axis_fault.emit(m._rec_name, kw)
|
||||||
elif field == 'LVIO':
|
elif field == 'LVIO':
|
||||||
self.event_low_hard_limit.emit(self.motor._rec_name, kw)
|
self.event_low_hard_limit.emit(m._rec_name, kw)
|
||||||
self.event_axis_fault.emit(self.motor._rec_name, kw)
|
self.event_axis_fault.emit(m._rec_name, kw)
|
||||||
elif field == 'STAT':
|
elif field == 'STAT':
|
||||||
self.event_axis_fault.emit(self.motor._rec_name, kw)
|
self.event_axis_fault.emit(m._rec_name, kw)
|
||||||
|
|
||||||
|
|
||||||
def set_val_on_status_change(self, **kw):
|
def set_val_on_status_change(self, **kw):
|
||||||
@@ -194,11 +201,12 @@ class SimMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
self._drive_val.setText(v)
|
self._drive_val.setText(v)
|
||||||
|
|
||||||
def update_label(self, **kwargs):
|
def update_label(self, **kwargs):
|
||||||
self.label.setText(self._templates[self._label_style].format(rbv=self.motor._pos))
|
m=self._motor
|
||||||
self._drive_val.setText(f'{self.motor._pos:.3f}')
|
self.label.setText(self._templates[self._label_style].format(rbv=m._pos))
|
||||||
|
self._drive_val.setText(f'{m._pos:.3f}')
|
||||||
twv=float(self._tweak_val.text())
|
twv=float(self._tweak_val.text())
|
||||||
self.tweak_forward.setToolTip('tweak forward by {:.3f} {}'.format(twv, self.motor._units))
|
self.tweak_forward.setToolTip('tweak forward by {:.3f} {}'.format(twv, m._units))
|
||||||
self.tweak_reverse.setToolTip('tweak reverse by {:.3f} {}'.format(twv, self.motor._units))
|
self.tweak_reverse.setToolTip('tweak reverse by {:.3f} {}'.format(twv, m._units))
|
||||||
|
|
||||||
def tweak_event(self, event):
|
def tweak_event(self, event):
|
||||||
sign = event.angleDelta().y()
|
sign = event.angleDelta().y()
|
||||||
@@ -278,15 +286,16 @@ class SimMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def update_label_template(self):
|
def update_label_template(self):
|
||||||
|
m=self._motor
|
||||||
source = self._templates_source
|
source = self._templates_source
|
||||||
target = self._templates
|
target = self._templates
|
||||||
|
|
||||||
for k in source:
|
for k in source:
|
||||||
target[k] = source[k].format(
|
target[k] = source[k].format(
|
||||||
short_name=self.motor._short_name,
|
short_name=m._short_name,
|
||||||
precision=self.motor._prec,
|
precision=m._prec,
|
||||||
units=self.motor._units)
|
units=m._units)
|
||||||
self.label.setText(target[self._label_style].format(rbv=self.motor._pos))
|
self.label.setText(target[self._label_style].format(rbv=m._pos))
|
||||||
|
|
||||||
def paintEvent(self, e):
|
def paintEvent(self, e):
|
||||||
qp = QPainter()
|
qp = QPainter()
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ class SmaractMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
|
|
||||||
|
|
||||||
def connect_motor(self, motor_base, short_name=None, *args, **kwargs):
|
def connect_motor(self, motor_base, short_name=None, *args, **kwargs):
|
||||||
|
# TODO: DO NOT USE so many PVs, but reduce to the only really needed PV: s.a. class QopticZoom(object)
|
||||||
self._pvname = motor_base+':DRIVE'
|
self._pvname = motor_base+':DRIVE'
|
||||||
self._pv_name = PV(motor_base+':NAME')
|
self._pv_name = PV(motor_base+':NAME')
|
||||||
self._pv_drive = PV(motor_base+':DRIVE')
|
self._pv_drive = PV(motor_base+':DRIVE')
|
||||||
@@ -126,7 +127,7 @@ class SmaractMotorTweak(QWidget, Ui_MotorTweak):
|
|||||||
sleep(delay)
|
sleep(delay)
|
||||||
self._pv_drive.put(target)
|
self._pv_drive.put(target)
|
||||||
|
|
||||||
def get_position(self):
|
def get_rbv(self):
|
||||||
return self._pv_readback.get(use_monitor=False)
|
return self._pv_readback.get(use_monitor=False)
|
||||||
|
|
||||||
def is_homed(self):
|
def is_homed(self):
|
||||||
|
|||||||
30
swissmx.py
30
swissmx.py
@@ -290,7 +290,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
self.prepare_microscope_page()
|
self.prepare_microscope_page()
|
||||||
self.prepare_embl_gui()
|
self.prepare_embl_gui()
|
||||||
self.prepare_left_tabs()
|
self.prepare_left_tabs()
|
||||||
#self.update_beam_marker(qoptic_zoom.get_position()) #ZAC: orig. code
|
#self.update_beam_marker(qoptic_zoom.get_sp()) #ZAC: orig. code
|
||||||
self._centerpiece_stack.setCurrentIndex(0)
|
self._centerpiece_stack.setCurrentIndex(0)
|
||||||
self._centerpiece_stack.currentChanged.connect(self.center_piece_update)
|
self._centerpiece_stack.currentChanged.connect(self.center_piece_update)
|
||||||
self.init_validators()
|
self.init_validators()
|
||||||
@@ -300,7 +300,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
self.create_helical_widgets() #ZAC: orig. code
|
self.create_helical_widgets() #ZAC: orig. code
|
||||||
|
|
||||||
self.center_piece_update(0) # start camera updater
|
self.center_piece_update(0) # start camera updater
|
||||||
curzoom = app._zoom.get_sp()
|
curzoom = app._zoom.get_val()
|
||||||
_log.debug(f"starting app with zoom at {curzoom}")
|
_log.debug(f"starting app with zoom at {curzoom}")
|
||||||
self.zoom_changed_cb(curzoom)
|
self.zoom_changed_cb(curzoom)
|
||||||
self._tabs_daq_methods.currentChanged.connect(self.switch_task)
|
self._tabs_daq_methods.currentChanged.connect(self.switch_task)
|
||||||
@@ -973,9 +973,9 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
app = QApplication.instance()
|
app = QApplication.instance()
|
||||||
self._tab_daq_method_embl.setLayout(QVBoxLayout())
|
self._tab_daq_method_embl.setLayout(QVBoxLayout())
|
||||||
layout = self._tab_daq_method_embl.layout()
|
layout = self._tab_daq_method_embl.layout()
|
||||||
motors = self.get_gonio_motors()
|
#motors = self.get_gonio_motors()
|
||||||
self._embl_module = EmblWidget(self) #ZAC: orig. code
|
self._embl_module = EmblWidget(self) #ZAC: orig. code
|
||||||
self._embl_module.configure(motors, app._camera, app._zoom)
|
#self._embl_module.configure(motors, app._camera, app._zoom)
|
||||||
layout.addWidget(self._embl_module)
|
layout.addWidget(self._embl_module)
|
||||||
|
|
||||||
def prepare_microscope_page(self):
|
def prepare_microscope_page(self):
|
||||||
@@ -1074,12 +1074,12 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
# state = (zoom, fx, fy) (created at first call of self.track_objects() )
|
# state = (zoom, fx, fy) (created at first call of self.track_objects() )
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
geo=app._geometry
|
geo=app._geometry
|
||||||
zoom = app._zoom.get_sp()
|
zoom = app._zoom.get_val()
|
||||||
fast_x=self.tweakers["fast_x"];fast_y=self.tweakers["fast_y"]
|
fast_x=self.tweakers["fast_x"];fast_y=self.tweakers["fast_y"]
|
||||||
# TODO: get_position() is delayed as it is the RBV. do same as for the zoom
|
# TODO: get_position() is delayed as it is the RBV. do same as for the zoom
|
||||||
# TODO: and return the last set_point
|
# TODO: and return the last set_point
|
||||||
fx=fast_x.get_position()
|
fx=fast_x.get_val()
|
||||||
fy=fast_y.get_position()
|
fy=fast_y.get_val()
|
||||||
try:
|
try:
|
||||||
tracked=self._goTracked
|
tracked=self._goTracked
|
||||||
zoom_old,fx_old,fy_old=tracked['state']
|
zoom_old,fx_old,fy_old=tracked['state']
|
||||||
@@ -1176,7 +1176,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
self._mouse_pos = pos
|
self._mouse_pos = pos
|
||||||
task = self.active_task()
|
task = self.active_task()
|
||||||
xy = self._goImg.mapFromScene(pos)
|
xy = self._goImg.mapFromScene(pos)
|
||||||
z = app._zoom.get_sp()
|
z = app._zoom.get_val()
|
||||||
#_log.debug('mouse_pos:{} scene_pos:{} zoom:{}'.format(pos,xy,z))
|
#_log.debug('mouse_pos:{} scene_pos:{} zoom:{}'.format(pos,xy,z))
|
||||||
#TODO: implement mouse handling
|
#TODO: implement mouse handling
|
||||||
# if self._ppm_toolbox._force_ppm > 0:
|
# if self._ppm_toolbox._force_ppm > 0:
|
||||||
@@ -1217,7 +1217,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def mouse_click_event_geometry_calib(self, event):
|
def mouse_click_event_geometry_calib(self, event):
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
zoom = app._zoom.get()
|
zoom = app._zoom.get_val()
|
||||||
fast_x=self.tweakers["fast_x"];fast_y=self.tweakers["fast_y"]
|
fast_x=self.tweakers["fast_x"];fast_y=self.tweakers["fast_y"]
|
||||||
if self._btn_pix2pos.isChecked():
|
if self._btn_pix2pos.isChecked():
|
||||||
try:
|
try:
|
||||||
@@ -1225,8 +1225,8 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
raw=app._raw_pix2pos[zoom]=list()
|
raw=app._raw_pix2pos[zoom]=list()
|
||||||
imgPos=self._goImg.mapFromScene(event.scenePos())
|
imgPos=self._goImg.mapFromScene(event.scenePos())
|
||||||
fx=fast_x.get_position();
|
fx=fast_x.get_rbv();
|
||||||
fy=fast_y.get_position()
|
fy=fast_y.get_rbv()
|
||||||
x=imgPos.x();y=imgPos.y()
|
x=imgPos.x();y=imgPos.y()
|
||||||
_log.debug('append calib: zoom:{} stage_x_y:{}/{} cam_pix_x_y:{}/{}'.format(zoom, fx, fy, x, y))
|
_log.debug('append calib: zoom:{} stage_x_y:{}/{} cam_pix_x_y:{}/{}'.format(zoom, fx, fy, x, y))
|
||||||
raw.append((fx, fy, x, y))
|
raw.append((fx, fy, x, y))
|
||||||
@@ -1321,7 +1321,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
event.ignore()
|
event.ignore()
|
||||||
return
|
return
|
||||||
pos = event.scenePos()
|
pos = event.scenePos()
|
||||||
zoom_level = app._zoom.get()
|
zoom_level = app._zoom.get_val()
|
||||||
_log.debug(" zoom {}".format(zoom_level))
|
_log.debug(" zoom {}".format(zoom_level))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -1440,7 +1440,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def get_beam_mark_on_camera_xy(self):
|
def get_beam_mark_on_camera_xy(self):
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
z = app._zoom.get()
|
z = app._zoom.get_val()
|
||||||
try:
|
try:
|
||||||
bx = self.beamx_fitter(z)
|
bx = self.beamx_fitter(z)
|
||||||
by = self.beamy_fitter(z)
|
by = self.beamy_fitter(z)
|
||||||
@@ -2125,8 +2125,8 @@ class Main(QMainWindow, Ui_MainWindow):
|
|||||||
def daq_grid_add_grid(self, gx=None, gy=None):
|
def daq_grid_add_grid(self, gx=None, gy=None):
|
||||||
grid_index = len(self._grids)
|
grid_index = len(self._grids)
|
||||||
if gx in (False, None):
|
if gx in (False, None):
|
||||||
gx=self.tweakers["fast_x"].get_position()
|
gx=self.tweakers["fast_x"].get_rbv()
|
||||||
gy=self.tweakers["fast_y"].get_position()
|
gy=self.tweakers["fast_y"].get_rbv()
|
||||||
xstep = self._sb_grid_x_step.value()
|
xstep = self._sb_grid_x_step.value()
|
||||||
ystep = self._sb_grid_y_step.value()
|
ystep = self._sb_grid_y_step.value()
|
||||||
xoffset = self._sb_grid_x_offset.value()
|
xoffset = self._sb_grid_x_offset.value()
|
||||||
|
|||||||
13
zoom.py
13
zoom.py
@@ -70,7 +70,7 @@ class Zoom(QGroupBox, Ui_Zoom):
|
|||||||
buttons=((1, "1"), (200, "200"), (400, "400"), (600, "600"), (800, "800"), (1000, "1000"),)
|
buttons=((1, "1"), (200, "200"), (400, "400"), (600, "600"), (800, "800"), (1000, "1000"),)
|
||||||
|
|
||||||
zoom=QApplication.instance()._zoom
|
zoom=QApplication.instance()._zoom
|
||||||
current_zoom_value = zoom.get_rb()
|
current_zoom_value = zoom.get_val()
|
||||||
|
|
||||||
# zoom widgets
|
# zoom widgets
|
||||||
layout = QVBoxLayout()
|
layout = QVBoxLayout()
|
||||||
@@ -306,21 +306,22 @@ class QopticZoom(object):
|
|||||||
self._pv[name]=pv
|
self._pv[name]=pv
|
||||||
return pv
|
return pv
|
||||||
|
|
||||||
def get_rb(self) -> int:
|
def get_rbv(self) -> int:
|
||||||
# get_rb somtimes lags. therefore get_sp will get the last set_point without usage of pvs
|
# get_rbv lags. therefore get_val is often the better choicewill get the last set_point without usage of pvs
|
||||||
|
# default do not get the RBV, because this might be delayed
|
||||||
try:
|
try:
|
||||||
pv = self.getPv('POS_RB') #default do not get the RBV, because this might be delayed
|
pv = self.getPv('POS_RB')
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
val=self._val; _log.debug('simulated mode:{}'.format(val))
|
val=self._val; _log.debug('simulated mode:{}'.format(val))
|
||||||
return val
|
return val
|
||||||
else:
|
else:
|
||||||
return pv.get()
|
return pv.get()
|
||||||
|
|
||||||
def get_sp(self) -> int:
|
def get_val(self) -> int:
|
||||||
try:
|
try:
|
||||||
val=self._val
|
val=self._val
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pv=self.getPv('POS_RB') # default do not get the RBV, because this might be delayed
|
pv=self.getPv('POS_SP')
|
||||||
self._val=val=pv.get()
|
self._val=val=pv.get()
|
||||||
return val
|
return val
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user