app config, tweakers, move_* functions
This commit is contained in:
153
app_config.py
153
app_config.py
@@ -54,9 +54,7 @@ class AppCfg(QSettings):
|
||||
DFT_POS_BKLGT ="default_position/backlight" #json
|
||||
|
||||
DT_HOST="deltatau/host"
|
||||
DT_SHOW_PLOTS="deltatau/show_plots"
|
||||
DT_VEL_SCL="deltatau/velocity_scale"
|
||||
|
||||
DT_MISC="deltatau/miscellaneous"
|
||||
# ---------- OBSOLETE ??? ----------
|
||||
#ZOOM_BUTTONS="sample_viewing/zoom_buttons"
|
||||
|
||||
@@ -163,7 +161,9 @@ 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,AppCfg.DFT_POS_DET,AppCfg.DFT_POS_PST,AppCfg.DFT_POS_COL,AppCfg.DFT_POS_BKLGT,):
|
||||
elif key in (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)
|
||||
val=val.replace('"',"'")
|
||||
elif key in (AppCfg.GEO_OPT_CTR,AppCfg.GEO_BEAM_SZ,AppCfg.GEO_BEAM_POS):
|
||||
@@ -181,10 +181,17 @@ 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,AppCfg.DFT_POS_DET,AppCfg.DFT_POS_PST,AppCfg.DFT_POS_COL,AppCfg.DFT_POS_BKLGT,):
|
||||
elif key in (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:
|
||||
val=val.replace("'",'"')
|
||||
val=json.loads(val) # , object_hook=MyJsonDecoder)
|
||||
else:
|
||||
if key==AppCfg.DT_MISC:
|
||||
val={'show_plots': True, 'vel_scl': 1.0, 'pt2pt_time': 10.0,'sync_mode':1,'sync_flag':3}
|
||||
else:
|
||||
val={}
|
||||
elif key in (AppCfg.GEO_BEAM_SZ,AppCfg.GEO_BEAM_POS,):
|
||||
val=np.array(tuple(map(float, val)))/1000
|
||||
elif key in (AppCfg.GEO_OPT_CTR):
|
||||
@@ -226,76 +233,93 @@ class WndParameter(QMainWindow):
|
||||
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_show_plots = cfg.value(AppCfg.DT_SHOW_PLOTS)
|
||||
dt_vel_scl = cfg.value(AppCfg.DT_VEL_SCL)
|
||||
dt_misc = cfg.value(AppCfg.DT_MISC)
|
||||
|
||||
tip_sync_mode='''\
|
||||
default=2
|
||||
0 : no sync at all
|
||||
1 : synchronize start
|
||||
2 : synchronize start and adapt motion speed
|
||||
this function generates the code blocks:
|
||||
self.sync_wait and self.sync_run
|
||||
sync_wait can be put in the program to force a timing sync
|
||||
sync_run are the commands to run the whole program
|
||||
'''
|
||||
|
||||
|
||||
if dft_pos_pst is None:dft_pos_pst={}
|
||||
if dft_pos_col is None:dft_pos_col={}
|
||||
if dft_pos_bklgt is None:dft_pos_bklgt={}
|
||||
if dft_pos_det is None:dft_pos_det={}
|
||||
tip_sync_flag='''\
|
||||
default=0
|
||||
bit 0=1 : simulated start trigger
|
||||
bit 1=2 : simulated frame trigger
|
||||
0 : real start and frame trigger
|
||||
1 : simulated start and real frame trigger
|
||||
2 : real start and simulated frame trigger
|
||||
3 : simulated start and frame trigger
|
||||
pt2pt_time : time point to point (needed sor sync code)
|
||||
'''
|
||||
|
||||
params=[
|
||||
{'name':'geometry','type':'group', 'children':[
|
||||
{'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'},
|
||||
{'name':'height', 'type':'float', 'value':geo_beam_sz[1], 'step':0.1,'suffix':' um'},
|
||||
#{'name':'TEST', 'type':'float', 'value':10.5, 'step':0.001, 'decimals':5},
|
||||
]},
|
||||
]},
|
||||
{'name': AppCfg.DFT_POS_PST, 'title':'post sample tube reference positions', 'type':'group', 'children':[
|
||||
{'name':'Up X' ,'value':dft_pos_pst.get('x_up' ,0),'type':'float','limits':(-45,15),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'Up Y' ,'value':dft_pos_pst.get('y_up' ,0),'type':'float','limits':(-45,15),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'Down X' ,'value':dft_pos_pst.get('x_down' ,0),'type':'float','limits':(-45,15),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'Down Y' ,'value':dft_pos_pst.get('y_down' ,0),'type':'float','limits':(-45,15),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'out delta X' ,'value':dft_pos_pst.get('x_out_delta',0),'type':'float','limits':(-32,32),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'out delta Y' ,'value':dft_pos_pst.get('y_out_delta',0),'type':'float','limits':(-32,32),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'tube Z in position' ,'value':dft_pos_pst.get('z_in' ,0),'type':'float','limits':(-8 ,1 ),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'tube Z OUT position','value':dft_pos_pst.get('z_out' ,0),'type':'float','limits':(-8 ,1 ),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name': AppCfg.DFT_POS_PST, 'title':'post sample tube reference positions','type':'group','expanded':False,'children':[
|
||||
{'name':'in X upstream' ,'value':dft_pos_pst.get('x_in_us' ,0),'type':'float','limits':(-45,15),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'in Y upstream' ,'value':dft_pos_pst.get('y_in_us' ,0),'type':'float','limits':(-45,15),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'in X downstream' ,'value':dft_pos_pst.get('x_in_ds' ,0),'type':'float','limits':(-45,15),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'in Y downstream' ,'value':dft_pos_pst.get('y_in_ds' ,0),'type':'float','limits':(-45,15),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'out X delta' ,'value':dft_pos_pst.get('x_out_delta',0),'type':'float','limits':(-32,32),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'out Y delta' ,'value':dft_pos_pst.get('y_out_delta',0),'type':'float','limits':(-32,32),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'in Z' ,'value':dft_pos_pst.get('z_in' ,0),'type':'float','limits':(-8 ,1 ),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
{'name':'out Z' ,'value':dft_pos_pst.get('z_out' ,0),'type':'float','limits':(-8 ,1 ),'step':0.1,'decimals':5,'suffix':' mm'},
|
||||
]},
|
||||
{'name': AppCfg.DFT_POS_COL, 'title':'collimator reference positions', 'type':'group', 'children':[
|
||||
{'name':'in X', 'value':dft_pos_col.get('x_in',0), 'type':'float', 'limits':(-15.9, 15.9 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
{'name':'in Y', 'value':dft_pos_col.get('y_in',0), 'type':'float', 'limits':(-15.9, 15.9 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
{'name':'out deltaX', 'value':dft_pos_col.get('x_out_delta',0),'type':'float', 'limits':(-15.9, 15.9 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
{'name':'out deltaY', 'value':dft_pos_col.get('y_out_delta',0),'type':'float', 'limits':(-15.9, 15.9 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
{'name': AppCfg.DFT_POS_COL, 'title':'collimator reference positions', 'type':'group','expanded':False, 'children':[
|
||||
{'name':'in X', 'value':dft_pos_col.get('x_in',0), 'type':'float', 'limits':(-15.9, 15.9 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
{'name':'in Y', 'value':dft_pos_col.get('y_in',0), 'type':'float', 'limits':(-15.9, 15.9 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
{'name':'out X', 'value':dft_pos_col.get('x_out',0),'type':'float', 'limits':(-15.9, 15.9 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
{'name':'out Y', 'value':dft_pos_col.get('y_out',0),'type':'float', 'limits':(-15.9, 15.9 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
]},
|
||||
{'name': AppCfg.DFT_POS_BKLGT, 'title':'Back Light reference positions', 'type':'group', 'children':[
|
||||
{'name': AppCfg.DFT_POS_BKLGT, 'title':'Back Light reference positions', 'type':'group','expanded':False, 'children':[
|
||||
{'name':'In position', 'value':dft_pos_bklgt.get('pos_in',0), 'type':'float', 'limits':(-30000, 10 ),'step':10, 'decimals':5, 'suffix':'ustep'},
|
||||
{'name':'Out position', 'value':dft_pos_bklgt.get('pos_out',0), 'type':'float', 'limits':(-1000, 10 ),'step':10, 'decimals':5, 'suffix':'ustep'},
|
||||
]},
|
||||
{'name': AppCfg.DFT_POS_DET, 'title':'detector reference positions', 'type':'group', 'children':[
|
||||
{'name': AppCfg.DFT_POS_DET, 'title':'detector reference positions', 'type':'group','expanded':False, 'children':[
|
||||
{'name':'In position', 'value':dft_pos_det.get('pos_in',0), 'type':'float', 'limits':(-20, 20 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
{'name':'Out position', 'value':dft_pos_det.get('pos_out',0), 'type':'float', 'limits':(-20, 20 ),'step':0.1, 'decimals':5, 'suffix':' mm'},
|
||||
]},
|
||||
{'name': AppCfg.GBL_DEV_PREFIX, 'title':'device prefix', 'type':'group', '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.GEO_CAM_PARAM, 'title':'camera parameters', 'type':'group', 'children':[
|
||||
{'name':AppCfg.GEO_CAM_PARAM, 'title':'camera parameters', 'type':'group','expanded':False, 'children':[
|
||||
{'name':'gain', 'value':geo_cam_param.get('gain',0), 'type':'float', 'step':1, },
|
||||
{'name':'exposure', 'value':geo_cam_param.get('exposure',0), 'type':'float', 'step':1, },
|
||||
{'name':'binning', 'value':geo_cam_param.get('binning','[1,1]'),'type':'str'},
|
||||
{'name':'roi', 'value':geo_cam_param.get('roi','[1,2,3,4]'),'type':'str'},
|
||||
{'name':'mono8', 'value':geo_cam_param.get('mono8','0'), 'type':'str'},
|
||||
]},
|
||||
{'name':'Delta Tau Parameters', 'type':'group', 'children':[
|
||||
{'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_SHOW_PLOTS,'title':'show plots after collection' ,'value':dt_show_plots,'type':'bool' ,'tip':"This is a checkbox"},
|
||||
{'name':AppCfg.DT_VEL_SCL ,'title':'velocity_scale' ,'value':dt_vel_scl ,'type':'float','limits':(0,1),'step':0.1,'tip':"This is a checkbox"},
|
||||
]},
|
||||
{'name':'Misc', 'type':'group', 'children':[
|
||||
{'name':AppCfg.GEO_CAM_TRF, 'value':cfg.value(AppCfg.GEO_CAM_TRF), 'type':'str'},
|
||||
]},
|
||||
|
||||
|
||||
{'name':'Save/Restore functionality', 'type':'group', 'children':[
|
||||
{'name':'Save State', 'type':'action'},
|
||||
{'name':'Restore State', 'type':'action', 'children':[
|
||||
{'name':'Add missing items', 'type':'bool', 'value':True},
|
||||
{'name':'Remove extra items', 'type':'bool', 'value':True},
|
||||
{'name':AppCfg.DT_MISC, 'title':'miscellaneous', 'type':'group', 'children':[
|
||||
{'name':'show plots after collection', 'value':dt_misc['show_plots'], 'type':'bool','tip':"This is a checkbox"},
|
||||
{'name':'velocity_scale', 'value':dt_misc['vel_scl'], 'type':'float', 'limits':(0, 1), 'step':0.1, 'tip':"This is a checkbox"},
|
||||
{'name':'pt2pt_time', 'value':dt_misc['pt2pt_time'], 'type':'float', 'step':0.1,'tip':"This is a checkbox"},
|
||||
{'name':'sync_mode', 'value':dt_misc['sync_mode'], 'type':'int', 'tip':tip_sync_mode},
|
||||
{'name':'sync_flag', 'value':dt_misc['sync_flag'], 'type':'int', 'tip':tip_sync_flag},
|
||||
]},
|
||||
]},
|
||||
{'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':[
|
||||
# {'name':'Add missing items', 'type':'bool', 'value':True},
|
||||
# {'name':'Remove extra items', 'type':'bool', 'value':True},
|
||||
# ]},
|
||||
#]},
|
||||
]
|
||||
|
||||
self._p=p=Parameter.create(name='params', type='group', children=params)
|
||||
@@ -305,16 +329,16 @@ class WndParameter(QMainWindow):
|
||||
child.sigValueChanging.connect(lambda a,b: self.cb_valueChanging(a,b))
|
||||
for ch2 in child.children():
|
||||
ch2.sigValueChanging.connect(lambda a,b: self.cb_valueChanging(a,b))
|
||||
p.param('Save/Restore functionality', 'Save State').sigActivated.connect(self.cb_save)
|
||||
p.param('Save/Restore functionality', 'Restore State').sigActivated.connect(self.cb_restore)
|
||||
#p.param('Save/Restore functionality', 'Save State').sigActivated.connect(self.cb_save)
|
||||
#p.param('Save/Restore functionality', 'Restore State').sigActivated.connect(self.cb_restore)
|
||||
|
||||
self._paramTree=pt=ParameterTree(parent=self)
|
||||
pt.setParameters(p, showTop=False)
|
||||
pt.setParameters(p, showTop=True)
|
||||
pt.setWindowTitle('SwissMX parameters')
|
||||
#t.resize(600, 800)
|
||||
self.setCentralWidget(pt)
|
||||
self.move(100, 100)
|
||||
self.resize(600, 800)
|
||||
self.resize(600, 1000)
|
||||
|
||||
def cb_change(self,paramAll, changes):
|
||||
app=QApplication.instance()
|
||||
@@ -331,7 +355,7 @@ class WndParameter(QMainWindow):
|
||||
parent=param.parent()
|
||||
par_nm=parent.name()
|
||||
nm=param.name()
|
||||
if par_nm in(AppCfg.DT_HOST,AppCfg.DT_SHOW_PLOTS,AppCfg.DT_VEL_SCL):
|
||||
if par_nm in(AppCfg.DT_HOST):
|
||||
cfg.setValue(nm,param.value())
|
||||
elif par_nm==AppCfg.GEO_BEAM_SZ:
|
||||
v = np.array(tuple(map(lambda x: x.value(),parent.children())))
|
||||
@@ -345,13 +369,13 @@ class WndParameter(QMainWindow):
|
||||
|
||||
elif par_nm == AppCfg.DFT_POS_PST:
|
||||
k=tuple(map(lambda x: x.name(),parent.children()))
|
||||
k=('x_up','y_up','x_down','y_down','x_out_delta','y_out_delta','z_in','z_out',)
|
||||
k=('x_in_us','y_in_us','x_in_ds','y_in_ds','x_out_delta','y_out_delta','z_in','z_out',)
|
||||
v = tuple(map(lambda x: x.value(),parent.children()))
|
||||
d=dict(zip(k,v))
|
||||
cfg.setValue(par_nm,d)
|
||||
elif par_nm == AppCfg.DFT_POS_COL:
|
||||
k=tuple(map(lambda x: x.name(),parent.children()))
|
||||
k=('x_in','y_in','x_out_delta','y_out_delta')
|
||||
k=('x_in','y_in','x_out','y_out')
|
||||
v = tuple(map(lambda x: x.value(),parent.children()))
|
||||
d=dict(zip(k,v))
|
||||
cfg.setValue(par_nm,d)
|
||||
@@ -367,22 +391,27 @@ class WndParameter(QMainWindow):
|
||||
v = tuple(map(lambda x: x.value(),parent.children()))
|
||||
d=dict(zip(k,v))
|
||||
cfg.setValue(par_nm,d)
|
||||
elif par_nm == AppCfg.GBL_DEV_PREFIX:
|
||||
v = tuple(map(lambda x: x.value(),parent.children()))
|
||||
cfg.setValue(par_nm,v)
|
||||
elif par_nm==AppCfg.GBL_DEV_PREFIX:
|
||||
v=tuple(map(lambda x:x.value(), parent.children()))
|
||||
cfg.setValue(par_nm, v)
|
||||
elif par_nm==AppCfg.DT_MISC:
|
||||
k=('show_plots','vel_scl','pt2pt_time','sync_mode','sync_flag')
|
||||
v=tuple(map(lambda x:x.value(), parent.children()))
|
||||
d=dict(zip(k,v))
|
||||
cfg.setValue(par_nm, d)
|
||||
cfg.sync()
|
||||
|
||||
def cb_valueChanging(self,param, value):
|
||||
_log.debug(f'Value changing (not finalized): {param}, {value}')
|
||||
|
||||
def cb_save(self):
|
||||
self._state=p.saveState()
|
||||
#def cb_save(self):
|
||||
# self._state=p.saveState()
|
||||
|
||||
def cb_restore(self):
|
||||
p=self._p
|
||||
add=p['Save/Restore functionality', 'Restore State', 'Add missing items']
|
||||
rem=p['Save/Restore functionality', 'Restore State', 'Remove extra items']
|
||||
p.restoreState(self._state, addChildren=add, removeChildren=rem)
|
||||
#def cb_restore(self):
|
||||
# p=self._p
|
||||
# add=p['Save/Restore functionality', 'Restore State', 'Add missing items']
|
||||
# rem=p['Save/Restore functionality', 'Restore State', 'Remove extra items']
|
||||
# p.restoreState(self._state, addChildren=add, removeChildren=rem)
|
||||
|
||||
# ----------------------------- OBSOLETE -----------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user