copy current SwissMX.conf, minor fixes

This commit is contained in:
2022-09-21 16:11:03 +02:00
parent 1393269ceb
commit d8399e901c
8 changed files with 61 additions and 27 deletions

View File

@@ -76,11 +76,10 @@ pyqtgraph.examples.run()
``` ```
Deploy stuff (22.8.22) quick and dirty Deploy stuff (22.8.22) quick and dirty (21.9.22 rewworked)
---------------------- ----------------------------------------------------------
``` ```
DST=/sf/cristallina/applications/mx/zamofing_t/ DST=/sf/cristallina/applications/mx/zamofing_t/
# /sf/cristallina/applications/mx
ssh saresc-cons-03 mkdir /tmp/zamofing_t/ ssh saresc-cons-03 mkdir /tmp/zamofing_t/
# add '--delete' if needed # add '--delete' if needed
@@ -88,17 +87,15 @@ rsync -vai ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX saresc-cons-03:$DST
rsync -vai ~/Documents/prj/SwissFEL/PBTools saresc-cons-03:$DST rsync -vai ~/Documents/prj/SwissFEL/PBTools saresc-cons-03:$DST
cd /sf/cristallina/applications/mx/zamofing_t/ESB_MX/python/SwissMX/ cd /sf/cristallina/applications/mx/zamofing_t/ESB_MX/python/SwissMX/
/opt/gfa/python-3.7/latest/bin/python swissmx.py
/opt/gfa/python-3.8/latest/bin/pip install qtawesome --user /opt/gfa/python-3.8/latest/bin/pip install qtawesome --user
/opt/gfa/python-3.8/latest/bin/pip install opencv-python /opt/gfa/python-3.8/latest/bin/pip install opencv-python
/opt/gfa/python-3.8/latest/bin/python swissmx.py /opt/gfa/python-3.8/latest/bin/python swissmx.py
rsync -vai gac-cristall@saresc-cons-03:~/.config/PSI/SwissMX.conf /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/SwissMX/
cd $DST cd $DST
/opt/gfa/python-3.8/latest/bin/python -m pdb swissmx.py /opt/gfa/python-3.8/latest/bin/python -m pdb swissmx.py
rsync -vai saresc-cons-03:/tmp/image*.png ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/SwissMX/scratch/ rsync -vai saresc-cons-03:/tmp/image*.png ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/SwissMX/scratch/
/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/SwissMX/scratch/autofocus2 /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/SwissMX/scratch/autofocus2
``` ```
@@ -119,6 +116,7 @@ localhost:10001:10002 (instead SAR-CPPM-EXPMX1)
``` ```
----------------------------------- SCRATCH -----------------------------------
14.9.22 external code: 14.9.22 external code:
---------------------- ----------------------
@@ -326,8 +324,10 @@ caput SAR-ESPMX:MOT_FX 0.001
caput SAR-ESPMX:MOT_FY 0.001 caput SAR-ESPMX:MOT_FY 0.001
---------- TODO ---------- ---------- TODO ----------
caput SAR-ESPMX:MOT_FX.VELO 16 caput SAR-EXPMX:MOT_FX.VELO 0.001
caput SAR-ESPMX:MOT_FY.VELO 16 caput SAR-EXPMX:MOT_FX.MDEL 0.001
caput SAR-EXPMX:MOT_FY.MDEL 0.001
caput SAR-EXPMX:MOT_CZ.MDEL 0.001

31
SwissMX.conf Normal file
View File

@@ -0,0 +1,31 @@
[General]
last_active=1663769422.4605258
[default_position]
backlight="{'pos_in': -29000.0, 'pos_out': 0.0}"
collimator="{'x_in': 10.00044, 'y_in': -2.322981, 'x_out': 10.00044, 'y_out': -2.322981}"
detector="{'pos_in': 5.0, 'pos_out': 10.0}"
post_sample_tube="{'x_in_us': -0.15010000000000012, 'y_in_us': -5.887284999999999, 'x_in_ds': -0.06905500000000053, 'y_in_ds': -5.831288, 'x_out_delta': 0.0, 'y_out_delta': -5.0, 'z_in': -3.53931, 'z_out': -3.53931}"
[deltatau]
host=SAR-CPPM-EXPMX1
miscellaneous="{'show_plots': true, 'vel_scl': 1.0, 'pt2pt_time': 10.0, 'sync_mode': 1, 'sync_flag': 3, 'verbose': 89}"
[geometry]
autofocus="{'range': 1.0, 'velocity': 0.3, 'steps': 40, 'mode': 0}"
beam_pos=86.37327847910599, 189.0894517936895
beam_size=30.2, 25.6
cam_param="{'gain': 10.0, 'exposure': 3.0, 'binning': [1, 1], 'roi': [500, 1000, 1200, 1000], 'mono8': true}"
cam_trf="[[-1, 0, 0], [0, -1, 0], [0, 0, 1]]"
find_fiducial="{'sz': 101, 'brd': 8, 'pitch': 120, 'mode': 0}"
opt_ctr=737.1648014091753, 30.84271709492559
pix2pos="[[1.0, 200.0, 400.0, 600.0, 800.0, 1000.0], [[[0.0011874776687831395, -3.874764193468664e-05], [-5.4202986411567655e-05, -0.0012020847338041858]], [[0.0008127767655446629, -2.5687142750131126e-05], [-3.525888389999674e-05, -0.000811545167142383]], [[0.0004932915647684639, -1.956448914762613e-05], [-2.260500843716497e-05, -0.0004979981531104616]], [[0.0002968132362841801, -1.3764033542843857e-05], [-1.1834139121941054e-05, -0.00030116315471687166]], [[0.00017925202767093252, -6.260148136189963e-06], [-7.57394284404282e-06, -0.00018089723447695783]], [[0.00010341140632662017, -6.93242588696217e-06], [-4.854849034530776e-06, -0.00010722678626793494]]]]"
[global]
device_prefix=SAR-EXPMX, SARES30-ESBMX
miscellaneous={'img_trace_len': 16}
[window]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\0\0\x4\xc0\0\0\x2\xa0\0\0\v\xd5\0\0\ax\0\0\x4\xc0\0\0\x2\xc5\0\0\v\xd5\0\0\ax\0\0\0\0\0\0\0\0\xf\0)
splitter=534, 871, 397
state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\a\x16\0\0\x4<\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\xe\0t\0o\0o\0l\0\x42\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)

View File

@@ -96,7 +96,7 @@ class AppCfg(QSettings):
if AppCfg.GEO_FND_FID not in keys: if AppCfg.GEO_FND_FID not in keys:
dflt.append((AppCfg.GEO_FND_FID, {'sz':101, 'brd':8, 'pitch':120, 'mode':0})) dflt.append((AppCfg.GEO_FND_FID, {'sz':101, 'brd':8, 'pitch':120, 'mode':0}))
if AppCfg.GEO_AUTOFOC not in keys: if AppCfg.GEO_AUTOFOC not in keys:
dflt.append((AppCfg.GEO_AUTOFOC, {'range':.4, 'vel':0.3, 'steps':40, 'mode':0})) dflt.append((AppCfg.GEO_AUTOFOC, {'range':.4, 'velocity':0.3, 'steps':40, 'mode':0}))
if AppCfg.GEO_OPT_CTR not in keys: if AppCfg.GEO_OPT_CTR not in keys:
dflt.append((AppCfg.GEO_OPT_CTR, np.array([603.28688025, 520.01112846]) )) dflt.append((AppCfg.GEO_OPT_CTR, np.array([603.28688025, 520.01112846]) ))
if AppCfg.GEO_CAM_TRF not in keys: if AppCfg.GEO_CAM_TRF not in keys:
@@ -279,8 +279,8 @@ verbose bits:
{'name':'mode', 'value':geo_fnd_fid['mode'], 'type':'int', 'step':1,'tip':'feature not yet used!'}, {'name':'mode', 'value':geo_fnd_fid['mode'], 'type':'int', 'step':1,'tip':'feature not yet used!'},
]}, ]},
{'name':AppCfg.GEO_AUTOFOC, 'title':'autofocus parameters', 'type':'group', 'expanded':True, 'children':[ {'name':AppCfg.GEO_AUTOFOC, 'title':'autofocus parameters', 'type':'group', 'expanded':True, 'children':[
{'name':'range', 'value':geo_af['range'], 'type':'float', 'limits':(0 ,3 ),'step':0.05,'suffix':'mm','decimals':3,'tip':'autofocus range (-rng/2 mm..+rng/2 mm..'}, {'name':'range', 'value':geo_af['range'], 'type':'float', 'limits':(0 ,6 ),'step':0.05,'suffix':'mm','decimals':3,'tip':'autofocus range (-rng/2 mm..+rng/2 mm..'},
{'name':'velocity', 'value':geo_af['vel'] , 'type':'float', 'limits':(0 ,2), 'step':0.05,'suffix':'mm/s','decimals':3}, {'name':'velocity', 'value':geo_af['velocity'], 'type':'float', 'limits':(0 ,2), 'step':0.05,'suffix':'mm/s','decimals':3},
{'name':'steps', 'value':geo_af['steps'], 'type':'int', 'limits':(0 ,50),'tip':'numbers of measurements in the range'}, {'name':'steps', 'value':geo_af['steps'], 'type':'int', 'limits':(0 ,50),'tip':'numbers of measurements in the range'},
{'name':'mode', 'value':geo_af['mode'], 'type':'int', 'step':1,'tip':'feature not yet used!'}, {'name':'mode', 'value':geo_af['mode'], 'type':'int', 'step':1,'tip':'feature not yet used!'},
@@ -430,7 +430,7 @@ verbose bits:
cfg.setValue(par_nm, v) cfg.setValue(par_nm, v)
elif nm in (AppCfg.DT_HOST): elif nm in (AppCfg.DT_HOST):
cfg.setValue(nm, param.value()) cfg.setValue(nm, param.value())
elif par_nm in (AppCfg.GBL_MISC,AppCfg.DT_MISC): elif par_nm in (AppCfg.GBL_MISC,AppCfg.DT_MISC,AppCfg.GEO_FND_FID,AppCfg.GEO_AUTOFOC):
d=dict(map(lambda x:(x.name(),x.value()), parent.children())) d=dict(map(lambda x:(x.name(),x.value()), parent.children()))
cfg.setValue(par_nm, d) cfg.setValue(par_nm, d)
if par_nm in (AppCfg.GBL_MISC): if par_nm in (AppCfg.GBL_MISC):

View File

@@ -32,7 +32,7 @@ def assert_tweaker_positions(targets, timeout=60.0):
motor, target, tolerance=m motor, target, tolerance=m
name=motor.short_name name=motor.short_name
pend_event() pend_event()
cur=motor.get_position() cur=motor.get_rbv()
done=motor.is_done() done=motor.is_done()
_log.debug("check {}[done={}]: {} == {}".format(name, done, cur, target)) _log.debug("check {}[done={}]: {} == {}".format(name, done, cur, target))
summary.append("{}[done={}]: {} == {}".format(name, done, cur, target)) summary.append("{}[done={}]: {} == {}".format(name, done, cur, target))
@@ -69,7 +69,7 @@ def assert_motor_positions(targets, timeout=60.0):
motor, target, tolerance=m motor, target, tolerance=m
name=motor._prefix name=motor._prefix
pend_event() pend_event()
cur=motor.get_position(readback=True) cur=motor.get_rbv(readback=True)
done=motor.done_moving done=motor.done_moving
_log.debug("check {}[done={}]: {} == {}".format(name, done, cur, target)) _log.debug("check {}[done={}]: {} == {}".format(name, done, cur, target))
summary.append("{}[done={}]: {} == {}".format(name, done, cur, target)) summary.append("{}[done={}]: {} == {}".format(name, done, cur, target))

View File

@@ -8,9 +8,8 @@ from PyQt5.QtGui import QPainter, QBrush, QColor, QPainterPath, QPen, QDoubleVal
from PyQt5.QtWidgets import QMenu, QInputDialog, QAction from PyQt5.QtWidgets import QMenu, QInputDialog, QAction
from PyQt5.uic import loadUiType from PyQt5.uic import loadUiType
from epics import Motor from epics import Motor
from epics.ca import pend_event
from app_utils import assert_motor_positions from app_utils import assert_tweaker_positions
Ui_MotorTweak, QWidget = loadUiType('epics_widgets/MotorTweak.ui') Ui_MotorTweak, QWidget = loadUiType('epics_widgets/MotorTweak.ui')
SPMG_STOP = 0 SPMG_STOP = 0
@@ -150,7 +149,7 @@ class MotorTweak(QWidget, Ui_MotorTweak):
m=self._motor m=self._motor
m.move(drive, wait=wait, ignore_limits=True, relative=False) m.move(drive, wait=wait, ignore_limits=True, relative=False)
if assert_position: if assert_position:
assert_motor_positions([(m, drive, 0.1)], timeout=1) assert_tweaker_positions([(self, drive, 0.1)], timeout=1)
def emit_signals(self, **kw): def emit_signals(self, **kw):
''' '''

View File

@@ -7,7 +7,7 @@ from PyQt5.QtWidgets import QMenu, QInputDialog, QAction
from PyQt5.uic import loadUiType from PyQt5.uic import loadUiType
from epics import PV from epics import PV
from epics.ca import pend_event from epics.ca import pend_event
from motor_utils import assert_tweaker_positions from app_utils import assert_tweaker_positions
Ui_MotorTweak, QWidget = loadUiType('epics_widgets/MotorTweak.ui') Ui_MotorTweak, QWidget = loadUiType('epics_widgets/MotorTweak.ui')
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -88,12 +88,13 @@ class Jungfrau:
self._pv_pulse_id.connect() self._pv_pulse_id.connect()
def acquire(self,run_name, n_pulses, wait=False): def acquire(self,run_name, n_pulses, wait=False):
self._pulse_id_start=int(self._pv_pulse_id.value)
if self._daq is not None: if self._daq is not None:
self._pulse_id_start=self._pv_pulse_id.value
self._daq.acquire(run_name, n_pulses=n_pulses, wait=False) self._daq.acquire(run_name, n_pulses=n_pulses, wait=False)
pass
def gather_upload(self): def gather_upload(self):
self._pulse_id_end=self._pv_pulse_id.value self._pulse_id_end=int(self._pv_pulse_id.value)
_log.debug(f'pulse_id: {self._pulse_id_start}..{self._pulse_id_end}') _log.debug(f'pulse_id: {self._pulse_id_start}..{self._pulse_id_end}')

View File

@@ -1616,7 +1616,7 @@ Author Thierry Zamofing (thierry.zamofing@psi.ch)
af_range=cfg['range'] af_range=cfg['range']
n=cfg['steps'] n=cfg['steps']
vel=cfg['vel'] vel=cfg['velocity']
rng=(-af_range/2, af_range/2) rng=(-af_range/2, af_range/2)
#geo.autofocus(app._camera, self.tweakers['base_z'],rng, n,dlg) #geo.autofocus(app._camera, self.tweakers['base_z'],rng, n,dlg)
af=geometry.autofocus(app._camera, self.tweakers['base_z']) af=geometry.autofocus(app._camera, self.tweakers['base_z'])
@@ -2090,7 +2090,7 @@ Author Thierry Zamofing (thierry.zamofing@psi.ch)
geo.least_square_plane(ptFitPlane) geo.least_square_plane(ptFitPlane)
def cb_progress(self,i,sz,dlg): def cb_progress(self,i,sz,dlg):
dlg.setValue(int(sz*90/i)) dlg.setValue(int(i*90/sz))
if dlg.wasCanceled(): if dlg.wasCanceled():
raise AttributeError('canceled') raise AttributeError('canceled')
@@ -2160,7 +2160,10 @@ Author Thierry Zamofing (thierry.zamofing@psi.ch)
dlg.setMaximum(sp.points.shape[0]) dlg.setMaximum(sp.points.shape[0])
while True: while True:
p=sp.progress() p=sp.progress()
if p<0 or dlg.wasCanceled(): if p<0:
break
elif dlg.wasCanceled():
dt._comm.gpascii.send_block('&1a;Gather.Enable=0')
break break
#_log.info(f'progress {p}/{sp.points.shape[0]}') #_log.info(f'progress {p}/{sp.points.shape[0]}')
dlg.setValue(p) dlg.setValue(p)