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
|
DFT_POS_BKLGT ="default_position/backlight" #json
|
||||||
|
|
||||||
DT_HOST="deltatau/host"
|
DT_HOST="deltatau/host"
|
||||||
DT_SHOW_PLOTS="deltatau/show_plots"
|
DT_MISC="deltatau/miscellaneous"
|
||||||
DT_VEL_SCL="deltatau/velocity_scale"
|
|
||||||
|
|
||||||
# ---------- OBSOLETE ??? ----------
|
# ---------- OBSOLETE ??? ----------
|
||||||
#ZOOM_BUTTONS="sample_viewing/zoom_buttons"
|
#ZOOM_BUTTONS="sample_viewing/zoom_buttons"
|
||||||
|
|
||||||
@@ -163,7 +161,9 @@ class AppCfg(QSettings):
|
|||||||
t=type(val)
|
t=type(val)
|
||||||
if key in (AppCfg.GEO_PIX2POS,AppCfg.GEO_CAM_TRF):
|
if key in (AppCfg.GEO_PIX2POS,AppCfg.GEO_CAM_TRF):
|
||||||
val=json.dumps(val, cls=MyJsonEncoder)
|
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=json.dumps(val, cls=MyJsonEncoder)
|
||||||
val=val.replace('"',"'")
|
val=val.replace('"',"'")
|
||||||
elif key in (AppCfg.GEO_OPT_CTR,AppCfg.GEO_BEAM_SZ,AppCfg.GEO_BEAM_POS):
|
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,):
|
elif key in (AppCfg.GEO_CAM_TRF,):
|
||||||
val=json.loads(val)#, object_hook=MyJsonDecoder)
|
val=json.loads(val)#, object_hook=MyJsonDecoder)
|
||||||
val=np.array(val)
|
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:
|
if val is not None:
|
||||||
val=val.replace("'",'"')
|
val=val.replace("'",'"')
|
||||||
val=json.loads(val) # , object_hook=MyJsonDecoder)
|
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,):
|
elif key in (AppCfg.GEO_BEAM_SZ,AppCfg.GEO_BEAM_POS,):
|
||||||
val=np.array(tuple(map(float, val)))/1000
|
val=np.array(tuple(map(float, val)))/1000
|
||||||
elif key in (AppCfg.GEO_OPT_CTR):
|
elif key in (AppCfg.GEO_OPT_CTR):
|
||||||
@@ -226,76 +233,93 @@ class WndParameter(QMainWindow):
|
|||||||
geo_cam_param = cfg.value(AppCfg.GEO_CAM_PARAM)
|
geo_cam_param = cfg.value(AppCfg.GEO_CAM_PARAM)
|
||||||
gbl_dev_prefix = cfg.value(AppCfg.GBL_DEV_PREFIX)
|
gbl_dev_prefix = cfg.value(AppCfg.GBL_DEV_PREFIX)
|
||||||
dt_host = cfg.value(AppCfg.DT_HOST)
|
dt_host = cfg.value(AppCfg.DT_HOST)
|
||||||
dt_show_plots = cfg.value(AppCfg.DT_SHOW_PLOTS)
|
dt_misc = cfg.value(AppCfg.DT_MISC)
|
||||||
dt_vel_scl = cfg.value(AppCfg.DT_VEL_SCL)
|
|
||||||
|
|
||||||
|
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
|
||||||
|
'''
|
||||||
|
|
||||||
|
tip_sync_flag='''\
|
||||||
if dft_pos_pst is None:dft_pos_pst={}
|
default=0
|
||||||
if dft_pos_col is None:dft_pos_col={}
|
bit 0=1 : simulated start trigger
|
||||||
if dft_pos_bklgt is None:dft_pos_bklgt={}
|
bit 1=2 : simulated frame trigger
|
||||||
if dft_pos_det is None:dft_pos_det={}
|
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=[
|
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': 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':'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':'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':'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': AppCfg.DFT_POS_PST, 'title':'post sample tube reference positions','type':'group','expanded':False,'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':'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':'Up Y' ,'value':dft_pos_pst.get('y_up' ,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':'Down X' ,'value':dft_pos_pst.get('x_down' ,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':'Down Y' ,'value':dft_pos_pst.get('y_down' ,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 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 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 delta Y' ,'value':dft_pos_pst.get('y_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':'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':'in Z' ,'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':'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': 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 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':'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 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 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':'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':'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':'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':'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':'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':'deltatau motors', 'value':gbl_dev_prefix[0],'type':'str' },
|
||||||
{'name':'smaract motors', 'value':gbl_dev_prefix[1],'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':'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':'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':'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':'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':'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_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_MISC, 'title':'miscellaneous', 'type':'group', 'children':[
|
||||||
{'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':'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':'Misc', 'type':'group', 'children':[
|
{'name':'pt2pt_time', 'value':dt_misc['pt2pt_time'], 'type':'float', 'step':0.1,'tip':"This is a checkbox"},
|
||||||
{'name':AppCfg.GEO_CAM_TRF, 'value':cfg.value(AppCfg.GEO_CAM_TRF), 'type':'str'},
|
{'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':'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':'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)
|
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))
|
child.sigValueChanging.connect(lambda a,b: self.cb_valueChanging(a,b))
|
||||||
for ch2 in child.children():
|
for ch2 in child.children():
|
||||||
ch2.sigValueChanging.connect(lambda a,b: self.cb_valueChanging(a,b))
|
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', 'Save State').sigActivated.connect(self.cb_save)
|
||||||
p.param('Save/Restore functionality', 'Restore State').sigActivated.connect(self.cb_restore)
|
#p.param('Save/Restore functionality', 'Restore State').sigActivated.connect(self.cb_restore)
|
||||||
|
|
||||||
self._paramTree=pt=ParameterTree(parent=self)
|
self._paramTree=pt=ParameterTree(parent=self)
|
||||||
pt.setParameters(p, showTop=False)
|
pt.setParameters(p, showTop=True)
|
||||||
pt.setWindowTitle('SwissMX parameters')
|
pt.setWindowTitle('SwissMX parameters')
|
||||||
#t.resize(600, 800)
|
#t.resize(600, 800)
|
||||||
self.setCentralWidget(pt)
|
self.setCentralWidget(pt)
|
||||||
self.move(100, 100)
|
self.move(100, 100)
|
||||||
self.resize(600, 800)
|
self.resize(600, 1000)
|
||||||
|
|
||||||
def cb_change(self,paramAll, changes):
|
def cb_change(self,paramAll, changes):
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
@@ -331,7 +355,7 @@ class WndParameter(QMainWindow):
|
|||||||
parent=param.parent()
|
parent=param.parent()
|
||||||
par_nm=parent.name()
|
par_nm=parent.name()
|
||||||
nm=param.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())
|
cfg.setValue(nm,param.value())
|
||||||
elif par_nm==AppCfg.GEO_BEAM_SZ:
|
elif par_nm==AppCfg.GEO_BEAM_SZ:
|
||||||
v = np.array(tuple(map(lambda x: x.value(),parent.children())))
|
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:
|
elif par_nm == AppCfg.DFT_POS_PST:
|
||||||
k=tuple(map(lambda x: x.name(),parent.children()))
|
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()))
|
v = tuple(map(lambda x: x.value(),parent.children()))
|
||||||
d=dict(zip(k,v))
|
d=dict(zip(k,v))
|
||||||
cfg.setValue(par_nm,d)
|
cfg.setValue(par_nm,d)
|
||||||
elif par_nm == AppCfg.DFT_POS_COL:
|
elif par_nm == AppCfg.DFT_POS_COL:
|
||||||
k=tuple(map(lambda x: x.name(),parent.children()))
|
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()))
|
v = tuple(map(lambda x: x.value(),parent.children()))
|
||||||
d=dict(zip(k,v))
|
d=dict(zip(k,v))
|
||||||
cfg.setValue(par_nm,d)
|
cfg.setValue(par_nm,d)
|
||||||
@@ -367,22 +391,27 @@ class WndParameter(QMainWindow):
|
|||||||
v = tuple(map(lambda x: x.value(),parent.children()))
|
v = tuple(map(lambda x: x.value(),parent.children()))
|
||||||
d=dict(zip(k,v))
|
d=dict(zip(k,v))
|
||||||
cfg.setValue(par_nm,d)
|
cfg.setValue(par_nm,d)
|
||||||
elif par_nm == AppCfg.GBL_DEV_PREFIX:
|
elif par_nm==AppCfg.GBL_DEV_PREFIX:
|
||||||
v = tuple(map(lambda x: x.value(),parent.children()))
|
v=tuple(map(lambda x:x.value(), parent.children()))
|
||||||
cfg.setValue(par_nm,v)
|
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()
|
cfg.sync()
|
||||||
|
|
||||||
def cb_valueChanging(self,param, value):
|
def cb_valueChanging(self,param, value):
|
||||||
_log.debug(f'Value changing (not finalized): {param}, {value}')
|
_log.debug(f'Value changing (not finalized): {param}, {value}')
|
||||||
|
|
||||||
def cb_save(self):
|
#def cb_save(self):
|
||||||
self._state=p.saveState()
|
# self._state=p.saveState()
|
||||||
|
|
||||||
def cb_restore(self):
|
#def cb_restore(self):
|
||||||
p=self._p
|
# p=self._p
|
||||||
add=p['Save/Restore functionality', 'Restore State', 'Add missing items']
|
# add=p['Save/Restore functionality', 'Restore State', 'Add missing items']
|
||||||
rem=p['Save/Restore functionality', 'Restore State', 'Remove extra items']
|
# rem=p['Save/Restore functionality', 'Restore State', 'Remove extra items']
|
||||||
p.restoreState(self._state, addChildren=add, removeChildren=rem)
|
# p.restoreState(self._state, addChildren=add, removeChildren=rem)
|
||||||
|
|
||||||
# ----------------------------- OBSOLETE -----------------------------
|
# ----------------------------- OBSOLETE -----------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -32,12 +32,11 @@ class Deltatau:
|
|||||||
if len(hpp)>2:
|
if len(hpp)>2:
|
||||||
param['fast_gather_port']=int(hpp[2])
|
param['fast_gather_port']=int(hpp[2])
|
||||||
_log.info(' -> ssh-tunneling PPComm({host}:{port} {host}:{fast_gather_port})'.format(**param))
|
_log.info(' -> ssh-tunneling PPComm({host}:{port} {host}:{fast_gather_port})'.format(**param))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self._comm=comm=PPComm(**param)
|
self._comm=comm=PPComm(**param,timeout=2.0)
|
||||||
self._gather=gather=Gather(comm)
|
self._gather=gather=Gather(comm)
|
||||||
except BaseException as e:
|
except socket.timeout as e:
|
||||||
_log.critical(f'can not connect to deltatau:{e}')
|
_log.critical(f'can not connect to deltatau:"{host}" -> {e}')
|
||||||
self._comm=comm=None
|
self._comm=comm=None
|
||||||
self._gather=gather=None
|
self._gather=gather=None
|
||||||
#return
|
#return
|
||||||
|
|||||||
279
swissmx.py
279
swissmx.py
@@ -891,25 +891,25 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
icon = qtawesome.icon("material.arrow_back")
|
icon = qtawesome.icon("material.arrow_back")
|
||||||
but = QPushButton(icon, "")
|
but = QPushButton(icon, "")
|
||||||
but.clicked.connect(lambda m, dir="x-pos": self.move_post_tube(dir))
|
but.clicked.connect(lambda m, pos="x+": self.move_post_tube(pos))
|
||||||
glay.addWidget(but, 1, 0)
|
glay.addWidget(but, 1, 0)
|
||||||
|
|
||||||
# c.setLayout(glay)
|
# c.setLayout(glay)
|
||||||
icon = qtawesome.icon("material.arrow_forward")
|
icon = qtawesome.icon("material.arrow_forward")
|
||||||
but = QPushButton(icon, "")
|
but = QPushButton(icon, "")
|
||||||
but.clicked.connect(lambda m, dir="x-neg": self.move_post_tube(dir))
|
but.clicked.connect(lambda m, pos="x-": self.move_post_tube(pos))
|
||||||
glay.addWidget(but, 1, 1)
|
glay.addWidget(but, 1, 1)
|
||||||
|
|
||||||
# c.setLayout(glay)
|
# c.setLayout(glay)
|
||||||
icon = qtawesome.icon("material.arrow_downward")
|
icon = qtawesome.icon("material.arrow_downward")
|
||||||
but = QPushButton(icon, "")
|
but = QPushButton(icon, "")
|
||||||
but.clicked.connect(lambda m, dir="down": self.move_post_tube(dir))
|
but.clicked.connect(lambda m, pos="y-": self.move_post_tube(pos))
|
||||||
glay.addWidget(but, 2, 0)
|
glay.addWidget(but, 2, 0)
|
||||||
|
|
||||||
# c.setLayout(glay)
|
# c.setLayout(glay)
|
||||||
icon = qtawesome.icon("material.arrow_upward")
|
icon = qtawesome.icon("material.arrow_upward")
|
||||||
but = QPushButton(icon, "")
|
but = QPushButton(icon, "")
|
||||||
but.clicked.connect(lambda m, dir="up": self.move_post_tube(dir))
|
but.clicked.connect(lambda m, pos="y+": self.move_post_tube(pos))
|
||||||
glay.addWidget(but, 2, 1)
|
glay.addWidget(but, 2, 1)
|
||||||
|
|
||||||
block.layout().addWidget(c)
|
block.layout().addWidget(c)
|
||||||
@@ -937,26 +937,40 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def build_group_faststage(self, toolbox):
|
def build_group_faststage(self, toolbox):
|
||||||
pfx=QApplication.instance()._cfg.value(AppCfg.GBL_DEV_PREFIX)[0]
|
pfx=QApplication.instance()._cfg.value(AppCfg.GBL_DEV_PREFIX)[0]
|
||||||
qutilities.add_item_to_toolbox(toolbox,"Fast Stage",
|
c=QWidget()
|
||||||
widget_list=[
|
c.setLayout(QGridLayout())
|
||||||
#self.get_tweaker('f"{pfx}:MOT_BLGT', alias='backlight', label='backlight'),
|
f=lambda v: lambda x:self.move_detector(v) #needs nested lambda to work ...
|
||||||
self.get_tweaker(f"{pfx}:MOT_FY", alias="fast_y", label="fast Y"),
|
for i,v in enumerate(('in','out')):
|
||||||
self.get_tweaker(f"{pfx}:MOT_FX", alias="fast_x", label="fast X"),
|
but=QPushButton('detector '+v)
|
||||||
self.get_tweaker(f"{pfx}:MOT_ROT_Y",alias="omega",label="omega",tweak_min=0.001,tweak_max=180.0,),
|
but.clicked.connect(f(v))
|
||||||
self.get_tweaker(f"{pfx}:MOT_CX", alias="base_x", label="base X"),
|
c.layout().addWidget(but, 0, i)
|
||||||
self.get_tweaker(f"{pfx}:MOT_CZ", alias="base_z", label="base Z"),
|
widgets=[
|
||||||
self.get_tweaker(f"{pfx}:MOT_DET_Z", alias="det_z", label="detector Z"),
|
# self.get_tweaker('f"{pfx}:MOT_BLGT', alias='backlight', label='backlight'),
|
||||||
],
|
self.get_tweaker(f"{pfx}:MOT_FY", alias="fast_y", label="fast Y"),
|
||||||
)
|
self.get_tweaker(f"{pfx}:MOT_FX", alias="fast_x", label="fast X"),
|
||||||
|
self.get_tweaker(f"{pfx}:MOT_ROT_Y", alias="omega", label="omega", tweak_min=0.001, tweak_max=180.0, ),
|
||||||
|
self.get_tweaker(f"{pfx}:MOT_CX", alias="base_x", label="base X"),
|
||||||
|
self.get_tweaker(f"{pfx}:MOT_CZ", alias="base_z", label="base Z"),
|
||||||
|
self.get_tweaker(f"{pfx}:MOT_DET_Z", alias="det_z", label="detector Z"),
|
||||||
|
c
|
||||||
|
]
|
||||||
|
qutilities.add_item_to_toolbox(toolbox,"Fast Stage",widget_list=widgets)
|
||||||
|
|
||||||
def build_group_collimator(self, toolbox):
|
def build_group_collimator(self, toolbox):
|
||||||
pfx=QApplication.instance()._cfg.value(AppCfg.GBL_DEV_PREFIX)[1]
|
pfx=QApplication.instance()._cfg.value(AppCfg.GBL_DEV_PREFIX)[1]
|
||||||
qutilities.add_item_to_toolbox(toolbox,"Collimator",
|
c=QWidget()
|
||||||
widget_list=[
|
c.setLayout(QGridLayout())
|
||||||
self.get_tweaker(f"{pfx}1", alias="colli_x", label="colli X", mtype="smaract_motor",),
|
f=lambda v: lambda x:self.move_collimator(v) #needs nested lambda to work ...
|
||||||
self.get_tweaker(f"{pfx}2", alias="colli_y", label="colli Y", mtype="smaract_motor",),
|
for i,v in enumerate(('in','out','ready')):
|
||||||
],
|
but=QPushButton(v)
|
||||||
)
|
but.clicked.connect(f(v))
|
||||||
|
c.layout().addWidget(but, 0, i)
|
||||||
|
widgets = [
|
||||||
|
self.get_tweaker(f"{pfx}1", alias="colli_x", label="colli X", mtype="smaract_motor",),
|
||||||
|
self.get_tweaker(f"{pfx}2", alias="colli_y", label="colli Y", mtype="smaract_motor",),
|
||||||
|
c,
|
||||||
|
]
|
||||||
|
qutilities.add_item_to_toolbox(toolbox,"Collimator",widget_list=widgets)
|
||||||
|
|
||||||
def build_group_posttube(self, toolbox):
|
def build_group_posttube(self, toolbox):
|
||||||
pfx=QApplication.instance()._cfg.value(AppCfg.GBL_DEV_PREFIX)[1]
|
pfx=QApplication.instance()._cfg.value(AppCfg.GBL_DEV_PREFIX)[1]
|
||||||
@@ -970,10 +984,10 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
|
|||||||
c = QWidget()
|
c = QWidget()
|
||||||
c.setLayout(QGridLayout())
|
c.setLayout(QGridLayout())
|
||||||
but = QPushButton("post tube out")
|
but = QPushButton("post tube out")
|
||||||
but.clicked.connect(lambda m, dir="out": self.move_post_tube(dir))
|
but.clicked.connect(lambda m, pos="out": self.move_post_tube(pos))
|
||||||
c.layout().addWidget(but, 0, 0)
|
c.layout().addWidget(but, 0, 0)
|
||||||
but = QPushButton("post tube in")
|
but = QPushButton("post tube in")
|
||||||
but.clicked.connect(lambda m, dir="in": self.move_post_tube(dir))
|
but.clicked.connect(lambda m, pos="in": self.move_post_tube(pos))
|
||||||
c.layout().addWidget(but, 0, 1)
|
c.layout().addWidget(but, 0, 1)
|
||||||
widgets.append(c)
|
widgets.append(c)
|
||||||
|
|
||||||
@@ -991,14 +1005,11 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
def build_group_xeye(self, toolbox):
|
def build_group_xeye(self, toolbox):
|
||||||
pfx=QApplication.instance()._cfg.value(AppCfg.GBL_DEV_PREFIX)[1]
|
pfx=QApplication.instance()._cfg.value(AppCfg.GBL_DEV_PREFIX)[1]
|
||||||
qutilities.add_item_to_toolbox(
|
widgets=[
|
||||||
toolbox,
|
self.get_tweaker(f"{pfx}14", alias="xeye_x", label="X", mtype="smaract_motor"),
|
||||||
"X-Ray Eye",
|
self.get_tweaker(f"{pfx}15", alias="xeye_y", label="Y", mtype="smaract_motor"),
|
||||||
widget_list=[
|
]
|
||||||
self.get_tweaker(f"{pfx}14", alias="xeye_x", label="X", mtype="smaract_motor"),
|
qutilities.add_item_to_toolbox(toolbox,"X-Ray Eye",widget_list=widgets)
|
||||||
self.get_tweaker(f"{pfx}15", alias="xeye_y", label="Y", mtype="smaract_motor"),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
def set_active_task(self, task):
|
def set_active_task(self, task):
|
||||||
_log.info("TASK == {}".format(task))
|
_log.info("TASK == {}".format(task))
|
||||||
@@ -1966,6 +1977,8 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
|
|||||||
#def _OLD_daq_collect_points(self, points, visualizer_method, visualizer_params):
|
#def _OLD_daq_collect_points(self, points, visualizer_method, visualizer_params):
|
||||||
app = QApplication.instance()
|
app = QApplication.instance()
|
||||||
cfg = app._cfg
|
cfg = app._cfg
|
||||||
|
dt_misc = cfg.value(AppCfg.DT_MISC)
|
||||||
|
|
||||||
geo = app._geometry
|
geo = app._geometry
|
||||||
verbose=0xff
|
verbose=0xff
|
||||||
fn='/tmp/shapepath'
|
fn='/tmp/shapepath'
|
||||||
@@ -1983,7 +1996,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
|
|||||||
#sp.gen_grid_points(w=15, h=15, pitch=3, rnd=0, ofs=(0, +2000))
|
#sp.gen_grid_points(w=15, h=15, pitch=3, rnd=0, ofs=(0, +2000))
|
||||||
#sp.gen_grid_points(w=5, h=10, pitch=1, rnd=0, ofs=(0, 0));sp.sort_points(False, 10);sp.points
|
#sp.gen_grid_points(w=5, h=10, pitch=1, rnd=0, ofs=(0, 0));sp.sort_points(False, 10);sp.points
|
||||||
#sp.sort_points(False, 15);
|
#sp.sort_points(False, 15);
|
||||||
sp.meta['pt2pt_time']=10
|
sp.meta['pt2pt_time']=dt_misc['pt2pt_time']
|
||||||
sp.setup_gather()
|
sp.setup_gather()
|
||||||
sp.setup_sync(verbose=verbose&32, timeOfs=0.05)
|
sp.setup_sync(verbose=verbose&32, timeOfs=0.05)
|
||||||
try:
|
try:
|
||||||
@@ -2005,10 +2018,11 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
|
|||||||
_log.info(f'progress {p}/{sp.points.shape[0]}')
|
_log.info(f'progress {p}/{sp.points.shape[0]}')
|
||||||
time.sleep(.1)
|
time.sleep(.1)
|
||||||
sp.gather_upload(fnRec=fn+'.npz')
|
sp.gather_upload(fnRec=fn+'.npz')
|
||||||
dp=deltatau.shapepath.DebugPlot(sp)
|
if dt_misc['show_plots']:
|
||||||
dp.plot_gather(mode=11)
|
dp=deltatau.shapepath.DebugPlot(sp)
|
||||||
plt.show(block=False)
|
dp.plot_gather(mode=11)
|
||||||
#plt.show(block=True)
|
plt.show(block=False)
|
||||||
|
#plt.show(block=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
def esc_run_steps(self, steps, title):
|
def esc_run_steps(self, steps, title):
|
||||||
@@ -2020,158 +2034,155 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
|
|||||||
QMessageBox.warning(self, "escape steps", "ABORTED" + title)
|
QMessageBox.warning(self, "escape steps", "ABORTED" + title)
|
||||||
break
|
break
|
||||||
|
|
||||||
def move_post_tube(self, dir):
|
#backlight="{'pos_in': -10.0, 'pos_out': 0.0}"
|
||||||
|
|
||||||
|
def move_post_tube(self, pos):
|
||||||
|
# post_sample_tube="{'x_up': -0.2, 'y_up': 0.0, 'x_down': 0.0, 'y_down': 0.0, 'x_out_delta': 0.0, 'y_out_delta': 0.0, 'z_in': 0.0, 'z_out': 0.0}"
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
cfg=app._cfg
|
cfg=app._cfg
|
||||||
x_up = cfg.value(AppCfg.PST_X_UP , np.NaN,type=float)
|
|
||||||
y_up = cfg.value(AppCfg.PST_Y_UP , np.NaN,type=float)
|
pos_pst = cfg.value(AppCfg.DFT_POS_PST)
|
||||||
x_down = cfg.value(AppCfg.PST_X_DOWN, np.NaN,type=float)
|
if pos_pst is None:
|
||||||
y_down = cfg.value(AppCfg.PST_Y_DOWN, np.NaN,type=float)
|
|
||||||
dx = cfg.value(AppCfg.PST_DX , np.NaN,type=float)
|
|
||||||
dy = cfg.value(AppCfg.PST_DY , np.NaN,type=float)
|
|
||||||
tz_in = cfg.value(AppCfg.PST_TZ_IN , np.NaN,type=float)
|
|
||||||
tz_out = cfg.value(AppCfg.PST_TZ_OUT, np.NaN,type=float)
|
|
||||||
if np.isnan(x_up):
|
|
||||||
msg = "SwissMX *POST-SAMPLE-TUBE* configuration is incomplete!!!"
|
msg = "SwissMX *POST-SAMPLE-TUBE* configuration is incomplete!!!"
|
||||||
_log.warning(msg)
|
_log.warning(msg)
|
||||||
QMessageBox.warning(self, "post tube not configured", msg)
|
QMessageBox.warning(self, "post tube not configured", msg)
|
||||||
return
|
return
|
||||||
|
|
||||||
usy = self.tweakers["tube_usy"]
|
x_in_us=pos_pst['x_in_us']
|
||||||
dsy = self.tweakers["tube_dsy"]
|
y_in_us=pos_pst['y_in_us']
|
||||||
|
x_in_ds=pos_pst['x_in_ds']
|
||||||
|
y_in_ds=pos_pst['y_in_ds']
|
||||||
|
x_out_d=pos_pst['x_out_delta']
|
||||||
|
y_out_d=pos_pst['y_out_delta']
|
||||||
|
z_in =pos_pst['z_in']
|
||||||
|
z_out =pos_pst['z_out']
|
||||||
|
|
||||||
usx = self.tweakers["tube_usx"]
|
tw_x_us = self.tweakers["tube_usx"]
|
||||||
dsx = self.tweakers["tube_dsx"]
|
tw_y_us = self.tweakers["tube_usy"]
|
||||||
tube_z = self.tweakers["tube_z"]
|
tw_x_ds = self.tweakers["tube_dsx"]
|
||||||
|
tw_y_ds = self.tweakers["tube_dsy"]
|
||||||
|
tw_z = self.tweakers["tube_z"]
|
||||||
|
|
||||||
tandem_twv = float(self._post_tandem_tweak_val.text())
|
tandem_twv = float(self._post_tandem_tweak_val.text())
|
||||||
|
|
||||||
if dir == "in":
|
_log.info(f"move post sample tube {pos}")
|
||||||
_log.info("move post sample tube in")
|
if pos == "in":
|
||||||
usy.move_abs(y_up)
|
tw_x_us.move_abs(x_in_us)
|
||||||
dsy.move_abs(y_down)
|
tw_y_us.move_abs(y_in_us)
|
||||||
usx.move_abs(x_up)
|
tw_x_ds.move_abs(x_in_ds)
|
||||||
dsx.move_abs(x_down)
|
tw_y_ds.move_abs(y_in_ds)
|
||||||
try:
|
try:
|
||||||
app_utils.assert_tweaker_positions([
|
app_utils.assert_tweaker_positions([
|
||||||
(usy, y_up, 0.1),
|
(tw_x_us, x_in_us, 0.1),
|
||||||
(dsy, y_down, 0.1),
|
(tw_y_us, y_in_us, 0.1),
|
||||||
(usx, x_up, 0.1),
|
(tw_x_ds, x_in_ds, 0.1),
|
||||||
(dsx, x_down, 0.1), ],timeout=10.0,
|
(tw_y_ds, y_in_ds, 0.1), ],timeout=10.0,
|
||||||
)
|
)
|
||||||
except app_utils.PositionsNotReached as e:
|
except app_utils.PositionsNotReached as e:
|
||||||
_log.warning("failed to move post sample tube {}".format(dir))
|
msg=f"failed to move post sample tube {pos}: {e}"
|
||||||
_log.warning(e)
|
_log.warning(msg)
|
||||||
QMessageBox.warning(self, "failed to move post sample tube XY {in}", "failed to move post sample tube XY {in}",)
|
QMessageBox.warning(self, "failed to move post sample tube", msg,)
|
||||||
raise
|
raise
|
||||||
tube_z.move_abs(tz_in, wait=True)
|
tw_z.move_abs(z_in, wait=True)
|
||||||
try:
|
try:
|
||||||
app_utils.assert_tweaker_positions([(tube_z, tz_in, 0.1)])
|
app_utils.assert_tweaker_positions([(tw_z, z_in, 0.1)])
|
||||||
except app_utils.PositionsNotReached as e:
|
except app_utils.PositionsNotReached as e:
|
||||||
_log.warning("failed to move post sample tube Z {in}")
|
msg=f"failed to move post sample tube {pos}: {e}"
|
||||||
_log.warning(e)
|
_log.warning(msg)
|
||||||
QMessageBox.warning(self, "failed to move post sample tube Z {in}", "failed to move post sample tube Z {in}",)
|
QMessageBox.warning(self, "failed to move post sample tube", msg,)
|
||||||
raise
|
raise
|
||||||
|
elif pos == "out":
|
||||||
elif dir == "out":
|
tw_z.move_abs(z_out, wait=True)
|
||||||
_log.info("move post sample tube out")
|
|
||||||
tube_z.move_abs(tz_out, wait=True)
|
|
||||||
try:
|
try:
|
||||||
app_utils.assert_tweaker_positions([(tube_z, tz_out, 0.1)])
|
app_utils.assert_tweaker_positions([(tw_z, z_out, 0.1)])
|
||||||
except app_utils.PositionsNotReached as e:
|
except app_utils.PositionsNotReached as e:
|
||||||
_log.warning("failed to move post sample tube {out}")
|
msg=f"failed to move post sample tube {pos}: {e}"
|
||||||
_log.warning(e)
|
_log.warning(msg)
|
||||||
QMessageBox.warning(self,"failed to move post sample tube Z {out}","failed to move post sample tube Z {out}",)
|
QMessageBox.warning(self, "failed to move post sample tube", msg,)
|
||||||
raise
|
raise
|
||||||
usy.move_abs(y_up+dy)
|
x_out_us=x_in_us+x_out_d; tw_x_us.move_abs(x_out_us)
|
||||||
dsy.move_abs(y_down+dy)
|
y_out_us=y_in_us+y_out_d; tw_y_us.move_abs(y_out_us)
|
||||||
usx.move_abs(x_up+dx)
|
x_out_ds=x_in_ds+x_out_d; tw_x_ds.move_abs(x_out_ds)
|
||||||
dsx.move_abs(x_down+dx)
|
y_out_ds=y_in_ds+y_out_d; tw_y_ds.move_abs(y_out_ds)
|
||||||
try:
|
try:
|
||||||
app_utils.assert_tweaker_positions([
|
app_utils.assert_tweaker_positions([
|
||||||
(usy, y_up + dy, 0.1),
|
(tw_x_us, x_out_us, 0.1),
|
||||||
(dsy, y_down + dy, 0.1),
|
(tw_y_us, y_out_us, 0.1),
|
||||||
(usx, x_up + dx, 0.1),
|
(tw_x_ds, x_out_ds, 0.1),
|
||||||
(dsx, x_down + dx, 0.1), ], timeout=10.0,
|
(tw_y_ds, y_out_ds, 0.1), ], timeout=10.0,
|
||||||
)
|
)
|
||||||
except app_utils.PositionsNotReached as e:
|
except app_utils.PositionsNotReached as e:
|
||||||
_log.warning("failed to move post sample tube {}".format(dir))
|
msg=f"failed to move post sample tube {pos}: {e}"
|
||||||
_log.warning(e)
|
_log.warning(msg)
|
||||||
QMessageBox.warning(self,"failed to move post sample tube XY {out}","failed to move post sample tube XY {out}",)
|
QMessageBox.warning(self, "failed to move post sample tube", msg,)
|
||||||
raise
|
raise
|
||||||
elif dir == "x-pos":
|
elif pos == "x+":
|
||||||
_log.info("tamdem move post sample tube X-pos by {} mm".format(tandem_twv))
|
tw_x_us.move_rel(tandem_twv)
|
||||||
usx.move_rel(tandem_twv)
|
tw_x_ds.move_rel(tandem_twv)
|
||||||
dsx.move_rel(tandem_twv)
|
elif pos == "x-":
|
||||||
elif dir == "x-neg":
|
tw_x_us.move_rel(-tandem_twv)
|
||||||
_log.info("tamdem move post sample tube X-neg {} mm".format(tandem_twv))
|
tw_x_ds.move_rel(-tandem_twv)
|
||||||
usx.move_rel(-tandem_twv)
|
elif pos == "y+":
|
||||||
dsx.move_rel(-tandem_twv)
|
tw_y_us.move_rel(tandem_twv)
|
||||||
elif dir == "up":
|
tw_y_ds.move_rel(tandem_twv)
|
||||||
_log.info("tamdem move post sample tube UP {} mm".format(tandem_twv))
|
elif pos == "y-":
|
||||||
usy.move_rel(tandem_twv)
|
tw_y_us.move_rel(-tandem_twv)
|
||||||
dsy.move_rel(tandem_twv)
|
tw_y_ds.move_rel(-tandem_twv)
|
||||||
elif dir == "down":
|
else:
|
||||||
_log.info("tamdem move post sample tube DOWN {} mm".format(tandem_twv))
|
raise ValueError("post sample tube *{}* is not known!!")
|
||||||
usy.move_rel(-tandem_twv)
|
|
||||||
dsy.move_rel(-tandem_twv)
|
|
||||||
|
|
||||||
def move_detector(self, pos):
|
def move_detector(self, pos):
|
||||||
#SAR-EXPMX: MOT_DET_Z.VAL
|
# detector="{'pos_in': -0.1, 'pos_out': 0.0}"
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
cfg=app._cfg
|
cfg=app._cfg
|
||||||
det_z = self.tweakers["det_z"]
|
pos_det = cfg.value(AppCfg.DFT_POS_DET)
|
||||||
if AppCfg.DFT_POS_DET not in cfg.allKeys():
|
if pos_det is None:
|
||||||
msg="detector default positions are not configured."
|
msg="detector default positions are not configured."
|
||||||
_log.warning(msg)
|
_log.warning(msg)
|
||||||
QMessageBox.warning(self, "configuration incomplete", msg)
|
QMessageBox.warning(self, "post tube not configured", msg)
|
||||||
return
|
return
|
||||||
|
|
||||||
pos = cfg.value(AppCfg.DFT_POS_DET)
|
det_z = self.tweakers["det_z"]
|
||||||
_log.info("moving collimator {} to X,Y = {:.3f}, {:.3f}".format(pos, x_pos, y_pos))
|
try:
|
||||||
|
p_z=pos_det['pos_'+pos]
|
||||||
if pos == "out":
|
except KeyError:
|
||||||
cy.move_abs(y_pos+dy, assert_position=True)
|
|
||||||
cx.move_abs(x_pos+dx, assert_position=True)
|
|
||||||
elif pos == "in":
|
|
||||||
cx.move_abs(x_pos, assert_position=True)
|
|
||||||
cy.move_abs(y_pos, assert_position=True)
|
|
||||||
elif pos == "ready":
|
|
||||||
cx.move_abs(x_pos, assert_position=True)
|
|
||||||
cy.move_abs(y_pos+dy, assert_position=True)
|
|
||||||
else:
|
|
||||||
raise ValueError("Collimator position *{}* is not known!!")
|
raise ValueError("Collimator position *{}* is not known!!")
|
||||||
|
_log.info(f"moving detector {pos} to {p_z:.5g}")
|
||||||
|
det_z.move_abs(p_z, assert_position=True)
|
||||||
|
|
||||||
def move_collimator(self, pos):
|
def move_collimator(self, pos):
|
||||||
|
# collimator="{'x_in': 0.0, 'y_in': -0.1, 'x_out_delta': 0.0, 'y_out_delta': 0.0}"
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
cfg=app._cfg
|
cfg=app._cfg
|
||||||
cx = self.tweakers["colli_x"]
|
cx = self.tweakers["colli_x"]
|
||||||
cy = self.tweakers["colli_y"]
|
cy = self.tweakers["colli_y"]
|
||||||
|
|
||||||
x_pos = cfg.value(AppCfg.COL_X_IN, None, type=float)
|
pos_col = cfg.value(AppCfg.DFT_POS_COL)
|
||||||
y_pos = cfg.value(AppCfg.COL_Y_IN, np.NaN, type=float)
|
if pos_col is None:
|
||||||
dx = cfg.value(AppCfg.COL_DX, np.NaN, type=float)
|
|
||||||
dy = cfg.value(AppCfg.COL_DY, np.NaN, type=float)
|
|
||||||
|
|
||||||
if np.isnan(x_pos + y_pos + dx + dy):
|
|
||||||
msg="COLLIMATOR configuration is incomplete!"
|
msg="COLLIMATOR configuration is incomplete!"
|
||||||
_log.warning(msg)
|
_log.warning(msg)
|
||||||
QMessageBox.warning(self, "post tube not configured", msg)
|
QMessageBox.warning(self, "post tube not configured", msg)
|
||||||
return
|
return
|
||||||
|
|
||||||
_log.info("moving collimator {} to X,Y = {:.3f}, {:.3f}".format(pos, x_pos, y_pos))
|
x_in = pos_col['x_in']
|
||||||
|
y_in = pos_col['y_in']
|
||||||
|
x_out = pos_col['x_out']
|
||||||
|
y_out = pos_col['y_out']
|
||||||
|
|
||||||
if pos == "out":
|
if pos == "out":
|
||||||
cy.move_abs(y_pos+dy, assert_position=True)
|
x_pos=x_out
|
||||||
cx.move_abs(x_pos+dx, assert_position=True)
|
y_pos=y_out
|
||||||
elif pos == "in":
|
elif pos == "in":
|
||||||
cx.move_abs(x_pos, assert_position=True)
|
x_pos=x_in
|
||||||
cy.move_abs(y_pos, assert_position=True)
|
y_pos=y_in
|
||||||
elif pos == "ready":
|
elif pos == "ready":
|
||||||
cx.move_abs(x_pos, assert_position=True)
|
x_pos=x_in
|
||||||
cy.move_abs(y_pos+dy, assert_position=True)
|
y_pos=y_out
|
||||||
else:
|
else:
|
||||||
raise ValueError("Collimator position *{}* is not known!!")
|
raise ValueError("Collimator position *{}* is not known!!")
|
||||||
|
_log.info(f"moving collimator {pos} to X,Y = {x_pos:.3f}, {y_pos:.3f}")
|
||||||
|
cx.move_abs(x_pos, assert_position=True)
|
||||||
|
cy.move_abs(y_pos, assert_position=True)
|
||||||
|
|
||||||
|
|
||||||
# **************** OBSOLETE AND/OR OLD STUFF ****************
|
# **************** OBSOLETE AND/OR OLD STUFF ****************
|
||||||
|
|||||||
Reference in New Issue
Block a user