From 0a15899ee604564d3bca8eb10ba32da9cb7429d7 Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Thu, 8 Sep 2022 15:55:14 +0200 Subject: [PATCH] wip --- app_config.py | 62 +++++++++++++++++++++++++++++++++++++++++++++++---- pyqtUsrObj.py | 8 +++++++ swissmx.py | 26 ++++++++++++++------- 3 files changed, 84 insertions(+), 12 deletions(-) diff --git a/app_config.py b/app_config.py index 4f2f89f..ccff6fa 100644 --- a/app_config.py +++ b/app_config.py @@ -272,15 +272,19 @@ bit 1=2 : simulated frame trigger {'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':'in Z' ,'value':dft_pos_pst.get('z_in' ,0),'type':'float','limits':(-8 ,5 ),'step':0.1,'decimals':5,'suffix':' mm'}, + {'name':'out Z' ,'value':dft_pos_pst.get('z_out' ,0),'type':'float','limits':(-8 ,5 ),'step':0.1,'decimals':5,'suffix':' mm'}, + {'name':'set_in', 'title':'use current position as "in"', 'type':'action'}, + {'name':'set_out', 'title':'use current position as "out"', 'type':'action'}, + ]}, {'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':'set_in', 'title':'use current position as "in"', 'type':'action'}, + {'name':'set_out', 'title':'use current position as "out"', 'type':'action'}, + ]}, {'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'}, @@ -288,6 +292,8 @@ bit 1=2 : simulated frame trigger {'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':'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' }, @@ -329,6 +335,12 @@ bit 1=2 : simulated frame trigger 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(AppCfg.DFT_POS_PST, 'set_in' ).sigActivated.connect(lambda x: self.cb_use_cur_pos_as(AppCfg.DFT_POS_PST, 'in')) + p.param(AppCfg.DFT_POS_PST, 'set_out').sigActivated.connect(lambda x: self.cb_use_cur_pos_as(AppCfg.DFT_POS_PST, 'out')) + p.param(AppCfg.DFT_POS_COL, 'set_in' ).sigActivated.connect(lambda x: self.cb_use_cur_pos_as(AppCfg.DFT_POS_COL, 'in')) + p.param(AppCfg.DFT_POS_COL, 'set_out').sigActivated.connect(lambda x: self.cb_use_cur_pos_as(AppCfg.DFT_POS_COL, 'out')) + p.param(AppCfg.DFT_POS_DET, 'set_in' ).sigActivated.connect(lambda x: self.cb_use_cur_pos_as(AppCfg.DFT_POS_DET, 'in')) + p.param(AppCfg.DFT_POS_DET, 'set_out').sigActivated.connect(lambda x: self.cb_use_cur_pos_as(AppCfg.DFT_POS_DET, 'out')) #p.param('Save/Restore functionality', 'Save State').sigActivated.connect(self.cb_save) #p.param('Save/Restore functionality', 'Restore State').sigActivated.connect(self.cb_restore) @@ -404,6 +416,48 @@ bit 1=2 : simulated frame trigger def cb_valueChanging(self,param, value): _log.debug(f'Value changing (not finalized): {param}, {value}') + def cb_use_cur_pos_as(self,dev,pos): + _log.debug(f'HERE {dev}:{pos}') + p=self._p.param(dev) + try: + twk=self.parent().tweakers + except AttributeError as e: + _log.warning('can not access tweakers to read values') + if pos=='in': #sample: just to test + p.children()[0].setValue(12.4) + elif pos=='out': + p.children()[0].setValue(14.1) + return + + #['fast_y', 'fast_x', 'omega', 'base_x', 'base_z', + # 'det_z', + # 'colli_x', 'colli_y', + # 'tube_usx', 'tube_usy', 'tube_dsx', 'tube_dsy', 'tube_z', + # 'xeye_x', 'xeye_y']) + #p.children() + cld=p.children() + if dev==AppCfg.DFT_POS_PST: + # k=('x_in_us','y_in_us','x_in_ds','y_in_ds','x_out_delta','y_out_delta','z_in','z_out',) + if pos=='in': + lut=((0,'tube_usx'),(1,'tube_usy'),(2,'tube_dsx'),(3,'tube_dsy'),(6,'tube_z')) + elif pos=='out': + cld[4].setValue(cld[0].value()-twk['tube_usx'].get_val()) #x_in_us-x_us + cld[5].setValue(cld[1].value()-twk['tube_usy'].get_val()) #y_in_us-y_us + lut=((7,'tube_z'),) + elif dev==AppCfg.DFT_POS_COL: + # k=('x_in', 'y_in', 'x_out', 'y_out') + if pos=='in': + lut=((0,'colli_x'),(1,'colli_y'),) + elif pos=='out': + lut=((2,'colli_x'),(3,'colli_y'),) + elif dev==AppCfg.DFT_POS_DET: + if pos=='in': + lut=((0,'det_z'),) + elif pos=='out': + lut=((1,'det_z'),) + for i,k in lut: + cld[i].setValue(twk[k].get_val()) + #def cb_save(self): # self._state=p.saveState() diff --git a/pyqtUsrObj.py b/pyqtUsrObj.py index 5a9e595..0d0b259 100644 --- a/pyqtUsrObj.py +++ b/pyqtUsrObj.py @@ -633,6 +633,14 @@ if __name__=='__main__': obj_info(tr) o.setTransform(tr) elif m&Qt.AltModifier: + import matplotlib.pyplot as plt + import numpy as np + + x=np.linspace(0.1, 2*np.pi, 41) + y=np.exp(np.sin(x)) + + plt.stem(x, y) + plt.show() pass else: obj_info(o) diff --git a/swissmx.py b/swissmx.py index 7a77ca1..79ae270 100755 --- a/swissmx.py +++ b/swissmx.py @@ -105,8 +105,8 @@ from epics_widgets.MotorTweak import MotorTweak from epics_widgets.SmaractMotorTweak import SmaractMotorTweak from epics_widgets.SimMotorTweak import SimMotorTweak ts.log('Import part 5/8:') -import matplotlib as mpl -import matplotlib.pyplot as plt +#import matplotlib as mpl +#import matplotlib.pyplot as plt import numpy as np np.set_printoptions(suppress=True,linewidth=196) import pyqtgraph as pg @@ -1563,11 +1563,21 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): except AttributeError: self._testCode=tc={'idx':0} step=tc['idx'] - vb=self.vb - vb.autoRange(items=(self._goImg,)) - return + step=1 if step==0: + vb=self.vb + vb.autoRange(items=(self._goImg,)) + elif step==1: + import matplotlib.pyplot as plt + import numpy as np + + x=np.linspace(0.1, 2*np.pi, 41) + y=np.exp(np.sin(x)) + + plt.stem(x, y) + plt.show() + if step==3: grp=pg.ItemGroup() vb.addItem(grp) obj=UsrGO.Marker((100, 100), (100, 100), mode=1) @@ -1578,7 +1588,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): grp.addItem(obj) tc['grp']=grp vb.autoRange(items=(obj,)) - elif step==1: + elif step==4: grp=tc['grp'] tr=grp.transform() # UsrGO.obj_info(tr) @@ -2023,7 +2033,6 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): dp.plot_gather(mode=11) plt.show(block=False) #plt.show(block=True) - return def esc_run_steps(self, steps, title): with pg.ProgressDialog(title, 0, len(steps)) as dlg: @@ -3714,7 +3723,8 @@ class WndSwissMx(QMainWindow, Ui_MainWindow): if __name__=="__main__": def main(): from PyQt5.QtCore import QT_VERSION_STR - _log.info(f'Version: pyqtgraph:{pg.__version__} matplotlib:{mpl.__version__} numpy:{np.__version__} epics:{epics.__version__} qt:{QT_VERSION_STR}' ) + #_log.info(f'Version: pyqtgraph:{pg.__version__} matplotlib:{mpl.__version__} numpy:{np.__version__} epics:{epics.__version__} qt:{QT_VERSION_STR}' ) + _log.info(f'Version: pyqtgraph:{pg.__version__} epics:{epics.__version__} qt:{QT_VERSION_STR}' ) import argparse, socket hostname=socket.gethostname() if hostname=='ganymede':