From e215f3abea11a69cf1180e503a905c4d60dbf8b7 Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Fri, 9 Sep 2022 18:14:59 +0200 Subject: [PATCH] fix in trace and app config --- app_config.py | 32 +++++++++++++++++++++----------- swissmx.py | 41 +++++++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/app_config.py b/app_config.py index 701e08f..a205358 100644 --- a/app_config.py +++ b/app_config.py @@ -33,6 +33,7 @@ class MyJsonEncoder(json.JSONEncoder): class AppCfg(QSettings): GBL_FLD_SCR_SHOT="global/folder_screenshot" GBL_DEV_PREFIX="global/device_prefix" #SAR-EXPMX + GBL_MISC="global/miscellaneous" GEO_OPT_CTR='geometry/opt_ctr' GEO_PIX2POS='geometry/pix2pos' @@ -154,7 +155,8 @@ class AppCfg(QSettings): t=type(val) if key in (AppCfg.GEO_PIX2POS,AppCfg.GEO_CAM_TRF): val=json.dumps(val, cls=MyJsonEncoder) - elif key in (AppCfg.GEO_CAM_PARAM, + elif key in (AppCfg.GBL_MISC, + AppCfg.GEO_CAM_PARAM, AppCfg.DFT_POS_DET,AppCfg.DFT_POS_PST,AppCfg.DFT_POS_COL,AppCfg.DFT_POS_BKLGT, AppCfg.DT_MISC): val=json.dumps(val, cls=MyJsonEncoder) @@ -174,7 +176,8 @@ class AppCfg(QSettings): elif key in (AppCfg.GEO_CAM_TRF,): val=json.loads(val)#, object_hook=MyJsonDecoder) val=np.array(val) - elif key in (AppCfg.GEO_CAM_PARAM, + elif key in (AppCfg.GBL_MISC, + AppCfg.GEO_CAM_PARAM, AppCfg.DFT_POS_DET,AppCfg.DFT_POS_PST,AppCfg.DFT_POS_COL,AppCfg.DFT_POS_BKLGT, AppCfg.DT_MISC): if val is not None: @@ -183,6 +186,8 @@ class AppCfg(QSettings): else: if key==AppCfg.DT_MISC: val={'show_plots': True, 'vel_scl': 1.0, 'pt2pt_time': 10.0,'sync_mode':1,'sync_flag':3,'verbose':0xff} + elif key==AppCfg.GBL_MISC: + val={'img_trace':4} else: val={} elif key in (AppCfg.GEO_BEAM_SZ,AppCfg.GEO_BEAM_POS,): @@ -220,13 +225,14 @@ class WndParameter(QMainWindow): #GEO_PIX2POS #GEO_BEAM_POS #GEO_CAM_PARAM + gbl_misc = cfg.value(AppCfg.GBL_MISC) + gbl_dev_prefix = cfg.value(AppCfg.GBL_DEV_PREFIX) geo_beam_sz = cfg.value(AppCfg.GEO_BEAM_SZ)*1000 dft_pos_pst = cfg.value(AppCfg.DFT_POS_PST) dft_pos_col = cfg.value(AppCfg.DFT_POS_COL) dft_pos_bklgt = cfg.value(AppCfg.DFT_POS_BKLGT) dft_pos_det = cfg.value(AppCfg.DFT_POS_DET) geo_cam_param = cfg.value(AppCfg.GEO_CAM_PARAM) - gbl_dev_prefix = cfg.value(AppCfg.GBL_DEV_PREFIX) dt_host = cfg.value(AppCfg.DT_HOST) dt_misc = cfg.value(AppCfg.DT_MISC) @@ -264,6 +270,17 @@ verbose bits: ''' params=[ + {'name':'various', 'type':'group','expanded':False, 'children':[ + {'name':AppCfg.GBL_DEV_PREFIX, 'title':'device prefix', 'type':'group', 'expanded':False, 'children':[ + {'name':'deltatau motors', 'value':gbl_dev_prefix[0], 'type':'str'}, + {'name':'smaract motors', 'value':gbl_dev_prefix[1], 'type':'str'}, + ]}, + {'name':AppCfg.GBL_MISC, 'title':'miscellaneous', 'type':'group', 'children':[ + {'name':'img_trace', 'value':gbl_misc['img_trace'], 'type':'int', 'tip':tip_sync_flag}, + #{'name':'verbose', 'value':gbl_misc['verbose'], 'type':'int', 'tip':tip_verbose}, + ]}, + # {'name':AppCfg.GEO_CAM_TRF, 'value':cfg.value(AppCfg.GEO_CAM_TRF), 'type':'str'}, + ]}, {'name':'geometry','type':'group','expanded':False,'children':[ {'name': AppCfg.GEO_BEAM_SZ, 'title':'size of the beam', 'type':'group', 'children':[ {'name':'width', 'type':'float', 'value':geo_beam_sz[0], 'step':0.1,'suffix':' um'}, @@ -310,10 +327,6 @@ verbose bits: {'name':'set_in', 'title':'use current position as "in"', 'type':'action'}, {'name':'set_out', 'title':'use current position as "out"', 'type':'action'}, ]}, - {'name': AppCfg.GBL_DEV_PREFIX, 'title':'device prefix', 'type':'group','expanded':False, 'children':[ - {'name':'deltatau motors', 'value':gbl_dev_prefix[0],'type':'str' }, - {'name':'smaract motors', 'value':gbl_dev_prefix[1],'type':'str' }, - ]}, {'name':'Delta Tau Parameters', 'type':'group','expanded':False, 'children':[ {'name':AppCfg.DT_HOST ,'title':'host name (host[:port:port_gather])','value':dt_host ,'type':'str'} , {'name':AppCfg.DT_MISC, 'title':'miscellaneous', 'type':'group', 'children':[ @@ -325,9 +338,6 @@ verbose bits: {'name':'verbose', 'value':dt_misc['verbose'], 'type':'int', 'tip':tip_verbose}, ]}, ]}, - #{'name':'miscellaneous', 'type':'group','expanded':False, 'children':[ - # {'name':AppCfg.GEO_CAM_TRF, 'value':cfg.value(AppCfg.GEO_CAM_TRF), 'type':'str'}, - #]}, #{'name':'Save/Restore functionality', 'type':'group','expanded':False, 'children':[ # {'name':'Save State', 'type':'action'}, # {'name':'Restore State', 'type':'action', 'children':[ @@ -428,7 +438,7 @@ verbose bits: cfg.setValue(par_nm, v) elif nm in (AppCfg.DT_HOST): cfg.setValue(nm, param.value()) - elif par_nm==AppCfg.DT_MISC: + elif par_nm in (AppCfg.GBL_MISC,AppCfg.DT_MISC): d=dict(map(lambda x:(x.name(),x.value()), parent.children())) cfg.setValue(par_nm, d) else: diff --git a/swissmx.py b/swissmx.py index c1af0ca..c3bd302 100755 --- a/swissmx.py +++ b/swissmx.py @@ -410,10 +410,6 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): #bm.setTransform(tr) # assign transform grp.addItem(obj) - #--- camera tracong images --- - self._goTrace=grp=pg.ItemGroup() # the transformation is the same as for tracked objects - grp.setZValue(-20) #lower than other objects - self.vb.addItem(grp) @@ -1079,16 +1075,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): #create trace - img=pg.ImageItem(self._goImg.image) - img.setZValue(100) - trImg=self._goImgGrp.transform() - trTrk=self._goTracked.transform() - - tr=trImg*trTrk.inverted()[0] #TODO: check if oder correct !!! - #tr.scale(.5,.5) - img.setTransform(tr) - - self._goTrace.addItem(img) + self.add_camera_trace() _log.debug(f'dist to beam ({pFix[0]:>0.6g} {pFix[1]:>0.6g}mm)') fx_motor=self.tweakers["fast_x"] @@ -1096,9 +1083,6 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): fx_motor.move_rel(pFix[0]) fy_motor.move_rel(pFix[1]) - self._goTrace.setTransform(self._goTracked.transform()) - - #fx_motor.move_abs(fx_motor.get_val()+pFix[0]) #fy_motor.move_abs(fy_motor.get_val()+pFix[1]) @@ -1280,6 +1264,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): fy=twk_fy.get_val() try: grp=self._goTracked + grpTrc=self._goTrace zoom_old,fx_old,fy_old=grp._state except AttributeError: # at initialization self._goTracked=grp=pg.ItemGroup() @@ -1287,12 +1272,17 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): self.vb.addItem(grp) grp._state=(zoom,fx,fy) zoom_old=fx_old=fy_old=None + + #--- camera tracing images --- + self._goTrace=grpTrc=pg.ItemGroup() # the transformation is the same as for tracked objects + 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}") if zoom_old!=zoom: geo.interp_zoom(zoom) bm=self._goBeamMarker - grp=self._goTracked opt_ctr=geo._opt_ctr A=np.asarray(geo._pix2pos.I) # trf=cfg.value(AppCfg.GEO_CAM_TRF) @@ -1304,6 +1294,21 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): A[1, 0], A[1, 1], 0, p[0], p[1], 1) # translate dx,dy grp.setTransform(tr) + grpTrc.setTransform(tr) + + def add_camera_trace(self): + # add up to tracelen image when moveing motors to new positions + tracelen=4 + img=pg.ImageItem(self._goImg.image) + trImg=self._goImgGrp.transform() + trTrk=self._goTracked.transform() + + tr=trImg*trTrk.inverted()[0] # TODO: check if oder correct !!! + img.setTransform(tr) + self._goTrace.addItem(img) + cld=self._goTrace.childItems() + if len(cld) > tracelen: + self.vb.removeItem(cld[0]) def cb_modify_app_param(self): wnd=WndParameter(self)