diff --git a/app_config.py b/app_config.py index d12b385..b68e231 100644 --- a/app_config.py +++ b/app_config.py @@ -56,7 +56,11 @@ class AppCfg(QSettings): #set default keys if not existing if AppCfg.GEO_BEAM_SZ not in keys: _log.warning(f'{AppCfg.GEO_BEAM_SZ} not defined. set default') - self.setValue(AppCfg.GEO_BEAM_SZ, [40, 20]) #([40, 20) -> tuples are not supported natively + self.setValue(AppCfg.GEO_BEAM_SZ, [30.2, 25.6]) #([40, 20) -> tuples are not supported natively + + if AppCfg.GEO_BEAM_POS not in keys: + _log.warning(f'{AppCfg.GEO_BEAM_POS} not defined. set default') + self.setValue(AppCfg.GEO_BEAM_POS, [23.4, -54.2]) # beam position relativ to optical center in mm if AppCfg.GEO_PIX2POS not in keys: _log.warning(f'{AppCfg.GEO_OPT_CTR} not defined. calc default') diff --git a/epics_widgets/SimMotorTweak.py b/epics_widgets/SimMotorTweak.py index 29401f6..7337169 100644 --- a/epics_widgets/SimMotorTweak.py +++ b/epics_widgets/SimMotorTweak.py @@ -72,6 +72,8 @@ class SimMotorTweak(QWidget, Ui_MotorTweak): self._tweak_val.setText(str(twv)) 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_forward.clicked.connect(lambda m: self.move_relative(float(self._tweak_val.text()))) + self.tweak_reverse.clicked.connect(lambda m: self.move_relative(-float(self._tweak_val.text()))) #self.tweak_forward.clicked.connect(lambda m: self._pv_tweak_f.put(1)) #self.tweak_reverse.clicked.connect(lambda m: self._pv_tweak_r.put(1)) @@ -101,9 +103,11 @@ class SimMotorTweak(QWidget, Ui_MotorTweak): def move_relative(self, dist, delay=None): - target = self.motor._pos + dist + self.motor._pos += dist if delay: sleep(delay) + _log.debug('{} rel move => {}'.format(self.motor._short_name, dist)) + self.update_label() def get_position(self): return self.motor._pos @@ -136,14 +140,14 @@ class SimMotorTweak(QWidget, Ui_MotorTweak): return True # in (0, 3) def move_motor_to_position(self, drive=None, wait=False, assert_position=False): - if assert_position: wait=True if drive is None: _log.debug('{} abs target from widget'.format(self.motor._short_name)) drive = float(self._drive_val.text()) _log.debug('{} abs move => {}'.format(self.motor._short_name, drive)) - self._pos=drive + self.motor._pos=drive + self.update_label() def emit_signals(self, **kw): field = kw['source_field'] @@ -189,9 +193,11 @@ class SimMotorTweak(QWidget, Ui_MotorTweak): self._drive_val.setText(v) def update_label(self, **kwargs): - self.label.setText(self._templates[self._label_style].format(rbv=self._pv_readback.get())) - self.tweak_forward.setToolTip('tweak forward by {:.3f} {}'.format(self._pv_tweak_val.get(), self._units)) - self.tweak_reverse.setToolTip('tweak reverse by {:.3f} {}'.format(self._pv_tweak_val.get(), self._units)) + self.label.setText(self._templates[self._label_style].format(rbv=self.motor._pos)) + self._drive_val.setText(f'{self.motor._pos:.3f}') + twv=float(self._tweak_val.text()) + self.tweak_forward.setToolTip('tweak forward by {:.3f} {}'.format(twv, self.motor._units)) + self.tweak_reverse.setToolTip('tweak reverse by {:.3f} {}'.format(twv, self.motor._units)) def tweak_event(self, event): sign = event.angleDelta().y() diff --git a/swissmx.py b/swissmx.py index 6399100..bbcbcaf 100755 --- a/swissmx.py +++ b/swissmx.py @@ -344,13 +344,13 @@ class Main(QMainWindow, Ui_MainWindow): vb.addItem(grid) #--- beam marker --- - bm_sz=np.array(tuple(map(int, cfg.value(AppCfg.GEO_BEAM_SZ)))) - self._goBeamMarker=bm=UsrGO.Marker(-opt_ctr-[50, 120],bm_sz,mode=0) - bm.setTransform(tr) # assign transform + bm_sz=np.array((50, 40)) # it is immidiatly repositioned in zoom_changed_cb + self._goBeamMarker=bm=UsrGO.Marker(-opt_ctr-bm_sz/2,bm_sz,mode=0) self.vb.addItem(bm) - #--- opctical center --- - self._goOptCtr=obj=UsrGO.Marker(-opt_ctr, [50, 50],mode=1) + #--- opctical center ---- + oc_sz=np.array((50,50)) + self._goOptCtr=obj=UsrGO.Marker(-opt_ctr-oc_sz/2, oc_sz,mode=1) bm.setTransform(tr) # assign transform self.vb.addItem(obj) @@ -1038,26 +1038,24 @@ class Main(QMainWindow, Ui_MainWindow): def zoom_changed_cb(self, value): self.zoomChanged.emit(value) + app=QApplication.instance() + cfg=app._cfg + geo=app._geometry try: - ppm = self.ppm_fitter(value) + geo.interp_zoom(value) except AttributeError as e: _log.warning(e) else: - _log.debug("zoom callback zoomChanged.emit({}), pixelsPerMillimeter.emit({})".format(value, ppm)) - self.pixelsPerMillimeter.emit(ppm) - self.update_beam_marker(value) - -# def getZoom(self): -# return qoptic_zoom.get_position() - -# def getPpm(self): -# ppm_fitter = None -# try: -# ppm_fitter = self.ppm_fitter(self.getZoom()) -# except Exception as e: -# _log.error("garbage in getPpm()") -# traceback.print_exc() -# return ppm_fitter + opt_ctr=geo._opt_ctr + bm_sz=np.array(tuple(map(float, cfg.value(AppCfg.GEO_BEAM_SZ))))/1000 + bm_pos=np.array(tuple(map(float, cfg.value(AppCfg.GEO_BEAM_POS))))/1000 + bm_sz=np.abs(geo.pos2pix(bm_sz)) + bm_pos=-opt_ctr-geo.pos2pix(bm_pos)-bm_sz/2 + bm=self._goBeamMarker + bm.setPos(bm_pos,finish=False) + bm.setSize(bm_sz) + _log.debug(f"zoom->{value} beam marker pos:{bm_pos} sz:{bm_sz})") + #self.update_beam_marker(value) def append_to_beam_markers(self, x, y, zoom): self._beam_markers[zoom] = (x, y) @@ -1181,9 +1179,10 @@ class Main(QMainWindow, Ui_MainWindow): if task==TASK_SETUP_GEOMETRY_CALIB: self.mouse_click_event_geometry_calib(event) return - - #Ctrl-left : move to position - #Ctrl-left : move to position + ################################ + # Ctrl-left : move to position + # Ctrl-right : object tree + ################################ #dblclick = event.double() app=QApplication.instance() @@ -1201,8 +1200,19 @@ class Main(QMainWindow, Ui_MainWindow): p1=self._goImg.mapFromScene(pos) p2=bm.pos()+bm.size()/2 px=p2+p1 - um=geo.pix2pos(px) - _log.debug(f'{px} -> {um}') + mm=geo.pix2pos(px) + _log.debug(f'{px} -> {mm}') + fx_motor, fy_motor, bx_motor, bz_motor, omega_motor=self.get_gonio_tweakers() + #fx=fx_motor.get_position() + #fy=fy_motor.get_position() + #dx=(x-bx)/ppm + #dy=-(y-by)/ppm + #fx+=dx + #fy+=dy + fx_motor.move_relative(mm[0]) + fy_motor.move_relative(mm[1]) + #self.fast_dx_position.emit(dx) + #self.fast_dy_position.emit(dy) pass elif mod&Qt.AltModifier: pass @@ -1228,7 +1238,6 @@ class Main(QMainWindow, Ui_MainWindow): event.pos()# return Point(self.currentItem.mapFromScene(self._scenePos)) app=QApplication.instance() - fx_motor, fy_motor, bx_motor, bz_motor, omega_motor = self.get_gonio_tweakers() if event.button() == Qt.RightButton: UsrGO.obj_info(self.vb.childTransform())