From 21afed9739d25721adbdbb45f13417d99c0ecd6d Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Mon, 19 Sep 2022 09:22:28 +0200 Subject: [PATCH] fix tracking object bugs after collection --- Readme.md | 9 ++++++++- epics_widgets/MotorTweak.py | 32 ++++++++++++++++++++++++++++-- epics_widgets/SimMotorTweak.py | 4 ++-- epics_widgets/SmaractMotorTweak.py | 4 ++-- swissmx.py | 20 +++++++++++-------- 5 files changed, 54 insertions(+), 15 deletions(-) diff --git a/Readme.md b/Readme.md index d15beac..d3e8c32 100644 --- a/Readme.md +++ b/Readme.md @@ -318,4 +318,11 @@ X10193.88 Y-8892 -8892.02 10193.9 -996.5999999999985 --> z has wrong sign ! \ No newline at end of file +-> z has wrong sign ! + + + + +!!!!!!!!!!! AFTER COLLECTION GRAPHICAL OVERLAY OBJECTS ARE SHIFTED !!!!!!!!!!! +!!!!!!!!!!! IF MOVING ON THE EPICS PANEL, THE OBJECTS GET OUT OF SYNC !!!!!!!! + diff --git a/epics_widgets/MotorTweak.py b/epics_widgets/MotorTweak.py index b930e42..966dea1 100644 --- a/epics_widgets/MotorTweak.py +++ b/epics_widgets/MotorTweak.py @@ -20,7 +20,7 @@ SPMG_GO = 3 class MotorTweak(QWidget, Ui_MotorTweak): event_val = pyqtSignal(str, dict) - event_readback = pyqtSignal(str, float, dict) + event_rbv = pyqtSignal(str, float, dict) event_soft_limit = pyqtSignal(str, dict) event_high_hard_limit = pyqtSignal(str, dict) event_low_hard_limit = pyqtSignal(str, dict) @@ -202,7 +202,7 @@ class MotorTweak(QWidget, Ui_MotorTweak): if field == 'VAL': self.event_val.emit(self._pvname, kw) elif field == 'RBV': - self.event_readback.emit(kw['alias'], kw['value'], kw) + self.event_rbv.emit(kw['alias'], kw['value'], kw) elif field == 'LVIO': self.event_soft_limit.emit(self._pvname, kw) elif field == 'HLS': @@ -382,3 +382,31 @@ class MotorTweak(QWidget, Ui_MotorTweak): path.setFillRule(Qt.WindingFill) path.addRoundedRect(x, y, w, h, rounding, rounding) qp.drawPath(path) + + + +if __name__ == "__main__": + logging.basicConfig(level=logging.DEBUG, format='%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s ') + _log.debug('start') + def cb_rbv(*args,**kwargs): + _log.debug(f'RBV{args} {kwargs}') + + + + import sys + from PyQt5.QtWidgets import QApplication, QWidget, QLabel + app=QApplication(sys.argv) + mot_widget=MotorTweak() + + #mot_widget.event_val.connect(cb_rbv) + mot_widget.event_rbv.connect(cb_rbv) + + pfx='SAR-EXPMX' + mot_widget.connect_motor(f"{pfx}:MOT_FY", alias="fast_y", label="fast Y") + mot_widget.setGeometry(50, 50, 520, 100) + mot_widget.setWindowTitle("PyQt5 Example") + mot_widget.show() + sys.exit(app.exec_()) + + + diff --git a/epics_widgets/SimMotorTweak.py b/epics_widgets/SimMotorTweak.py index 6980fbe..0470aad 100644 --- a/epics_widgets/SimMotorTweak.py +++ b/epics_widgets/SimMotorTweak.py @@ -34,7 +34,7 @@ class SimMotor: class SimMotorTweak(QWidget, Ui_MotorTweak): event_val = pyqtSignal(str, dict) - event_readback = pyqtSignal(str, dict) + event_rbv = pyqtSignal(str, dict) event_soft_limit = pyqtSignal(str, dict) event_high_hard_limit = pyqtSignal(str, dict) event_low_hard_limit = pyqtSignal(str, dict) @@ -162,7 +162,7 @@ class SimMotorTweak(QWidget, Ui_MotorTweak): if field == 'VAL': self.event_val.emit(m._rec_name, kw) elif field == 'RBV': - self.event_readback.emit(m._rec_name, kw) + self.event_rbv.emit(m._rec_name, kw) elif field == 'LVIO': self.event_soft_limit.emit(m._rec_name, kw) elif field == 'HLS': diff --git a/epics_widgets/SmaractMotorTweak.py b/epics_widgets/SmaractMotorTweak.py index ede574a..7137f30 100644 --- a/epics_widgets/SmaractMotorTweak.py +++ b/epics_widgets/SmaractMotorTweak.py @@ -23,7 +23,7 @@ SPMG_GO = 3 class SmaractMotorTweak(QWidget, Ui_MotorTweak): event_val = pyqtSignal(str, dict) - event_readback = pyqtSignal(str, dict) + event_rbv = pyqtSignal(str, dict) event_soft_limit = pyqtSignal(str, dict) event_high_hard_limit = pyqtSignal(str, dict) event_low_hard_limit = pyqtSignal(str, dict) @@ -184,7 +184,7 @@ class SmaractMotorTweak(QWidget, Ui_MotorTweak): if field == 'VAL': self.event_val.emit(self._pvname, kw) elif field == 'RBV': - self.event_readback.emit(self._pvname, kw) + self.event_rbv.emit(self._pvname, kw) elif field == 'LVIO': self.event_soft_limit.emit(self._pvname, kw) elif field == 'HLS': diff --git a/swissmx.py b/swissmx.py index 78d79c3..d2bfde9 100755 --- a/swissmx.py +++ b/swissmx.py @@ -742,8 +742,8 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): #self.tweakers["fast_x"].event_readback.connect(lambda alias, value, kw: self.fast_x_position.emit(value)) #self.tweakers["fast_y"].event_readback.connect(lambda alias, value, kw: self.fast_y_position.emit(value)) - self.tweakers["fast_x"].event_val.connect(lambda rec_name, kw: self.track_objects()) - self.tweakers["fast_y"].event_val.connect(lambda rec_name, kw: self.track_objects()) + self.tweakers["fast_x"].event_rbv.connect(lambda rec_name, kw: self.track_objects()) + self.tweakers["fast_y"].event_rbv.connect(lambda rec_name, kw: self.track_objects()) # layout.addStretch() def cb_marker_moved(self,obj,*args,**kwargs): @@ -1277,8 +1277,8 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): twk_fx=self.tweakers["fast_x"];twk_fy=self.tweakers["fast_y"] # TODO: get_position() is delayed as it is the RBV. do same as for the zoom # TODO: and return the last set_point - fx=twk_fx.get_val() - fy=twk_fy.get_val() + fx=twk_fx.get_rbv() + fy=twk_fy.get_rbv() try: grp=self._goTracked grpTrc=self._goTrace @@ -1295,7 +1295,10 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): grpTrc.setZValue(-20) #lower than other objects self.vb.addItem(grpTrc) - _log.debug(f"zoom:{zoom_old}->{zoom} fx:{fx_old}->{fx} fy:{fy_old}->{fy}") + try: + _log.debug(f"zoom:{zoom_old}->{zoom:d} fx:{fx_old:.3f}->{fx:.3f} fy:{fy_old:.3f}->{fy:.3f}") + except TypeError: + _log.debug(f"zoom:{zoom_old}->{zoom} fx:{fx_old}->{fx:.3f} fy:{fy_old}->{fy:.3f}") if zoom_old!=zoom: geo.interp_zoom(zoom) @@ -1993,13 +1996,13 @@ Author Thierry Zamofing (thierry.zamofing@psi.ch) v=geo.pos2pix((23, 0)) l=np.linalg.norm(v) l=23 - go=UsrGO.FixTargetFrame((fx-l/2,fx-l/2), (l, l), tpl='23.0x23.0') + go=UsrGO.FixTargetFrame((fx-l/2,fy-l/2), (l, l), tpl='23.0x23.0') elif idx==3: w,h=(.120*12, .120*8) - go=UsrGO.FixTargetFrame((fx-w/2,fx-h/2), (w, h), tpl='test') + go=UsrGO.FixTargetFrame((fx-w/2,fy-h/2), (w, h), tpl='test') elif idx==4: w,h=(30, 22) - go=UsrGO.Grid((fx-w/2,fx-h/2), (w, h), (30, 22), .1) + go=UsrGO.Grid((fx-w/2,fy-h/2), (w, h), (30, 22), .1) else: _log.error('index not handeled') @@ -2064,6 +2067,7 @@ Author Thierry Zamofing (thierry.zamofing@psi.ch) cfg = app._cfg dt_misc = cfg.value(AppCfg.DT_MISC) + #_log.critical('abort for test');return # RET geo = app._geometry fn='/tmp/shapepath' try: