From a4b551265ac07adea84b48a8466d82466f8d1e68 Mon Sep 17 00:00:00 2001 From: "FR@29iduser" <rodolakis@anl.gov> Date: Mon, 12 Sep 2022 12:19:34 -0500 Subject: [PATCH] debugging slits --- build/lib/iexcode/instruments/slits.py | 111 +++++++++++++++---------- iexcode/instruments/slits.py | 111 +++++++++++++++---------- 2 files changed, 132 insertions(+), 90 deletions(-) diff --git a/build/lib/iexcode/instruments/slits.py b/build/lib/iexcode/instruments/slits.py index af7c195..62a17c7 100644 --- a/build/lib/iexcode/instruments/slits.py +++ b/build/lib/iexcode/instruments/slits.py @@ -5,7 +5,7 @@ from epics import caget, caput import iexcode.instruments.cfg as iex from iexcode.instruments.shutters import main_shutter_close from iexcode.instruments.utilities import print_warning_message -from iexcode.instruments.encoders import encoders_reset_zero +from iexcode.instruments.encoders import encoders_reset_zero, _encoder_dictionary,encoder_sync slit_ioc="29idb:" @@ -13,22 +13,21 @@ slit_ioc="29idb:" def _slits_dictionary(): """ dictionary of slit pv names for two and four blade slit assemblies - - slit_name = slit1A, slit2B, slit3D + key = slit_name + val - slitHV """ #'slit3C' : (None, "uses a flexure stage so is different"), d = { - 'slit1A' : ('Slit1H','Slit1V'), - 'slit2B' : ('Slit2H','Slit2V'), - 'slit3C' : ('Slit3C') - 'slit3D' : ('Slit4V') - + 'slit1A' : ('29idb:Slit1H','29idb:Slit1V'), + 'slit2B' : ('29idb:Slit2H','29idb:Slit2V'), + 'slit3C' : ('29idb:Slit3C',), + 'slit3D' : ('29idd:Slit4V',), } return d def slit_name_list(): - d=_slits_dictionary + d=_slits_dictionary() for key in d.keys(): print(key) @@ -41,41 +40,55 @@ def _slits_wide_open_dictionary(): 'slit1A' : (4.5,4.5), 'slit2B' : (6,8), 'slit3C' : (300), - 'slit3D' : (2000) - + 'slit3D' : (2000), } return d -def slits_pvs(slit_name_HV): +def slits_pvs(slit_name): """ returns the rbv and drive for the size,center (rbv_size,val_size),(rvb_center,val_center) """ + d = _slits_dictionary() + size = []#H,V + center = []#H,V if slit_name in d.keys(): - if slit_name == 'Slit3C': - size_rbv = '29idb:Slit3CRBV' - size_val = '29idb:Slit3CFit.A' + if slit_name == 'slit3C': + size_val = d[slit_name][0]+'Fit.A' + size_rbv = d[slit_name][0]+'RBV' + center_val = None center_rbv = None - center_val = None + size.append((size_val,size_rbv)) + center.append((center_val,center_rbv)) else: - slit_pv = slit_ioc + slit_name_HV - size_rbv = slit_pv +'t2.D' - size_val = slit_pv +'center.VAL' - center_rbv = slit_pv +'t2.C' - center_val = slit_pv +'center.VAL' - - return (size_rbv,size_val),(center_rbv,center_val) + for slit_HV in d[slit_name]: + size_val = slit_HV +'size.VAL' + size_rbv = slit_HV +'t2.C' + center_val = slit_HV +'center.VAL' + center_rbv = slit_HV +'t2.D' + size.append((size_val,size_rbv)) + center.append((center_val,center_rbv)) + else: + print_warning_message('slit_name = '+slit_name+' not a valid slit, choose:') + slit_name_list() + return size,center def slits_synch(slit_name): """ synch the motor position and the slit table for all the beamline slits """ d = _slits_dictionary() + if slit_name in _encoder_dictionary().keys(): + encoder_sync(slit_name) if slit_name in d.keys(): if slit_name != 'slit3C': - slit_pv = slit_ioc + slit_name+'sync.PROC' - caput(slit_pv,1) + for slit_HV in d[slit_name]: + slit_pv = slit_HV+'sync.PROC' + caput(slit_pv,1) + else: + print_warning_message('slit_name = '+slit_name+' not a valid slit, choose:') + slit_name_list() def slits_sync_all(): """ @@ -94,10 +107,9 @@ def slits_get_all(verbose=True): returns a dictionary with the current slit status """ vals = {} - vals['slit1A_size'], vals['slit1A_center'] = slit1A_get(verbose=verbose) - vals['slit2B_size'], vals['slit2B_center'] = slit2B_get(verbose=verbose) - vals['slit3C_size'] = slit3C_get(verbose=verbose) - vals['slit3D_size'],vals['slit3D_center'] = slit3D_get(verbose=verbose) + for slit_name in ['slit1A','slit2B','slit3C','slit3D']: + vals[slit_name+'_size'], vals[slit_name+'_center'] = slits_get(slit_name,verbose=verbose) + def slits_set(slit_name,size,center,verbose=True): """ @@ -110,20 +122,25 @@ def slits_set(slit_name,size,center,verbose=True): Previously: SetSlit """ d = _slits_dictionary() + #syncing slits_synch(slit_name) if inf in size: size = _slits_wide_open_dictionary()[slit_name] - if d[slit_name] != None: - for i,slit_HV in enumerate(d[slit_name]): #H and V - (size_rbv,size_val),(center_rbv,center_val) = slits_pvs(slit_HV) - if center_rbv != None: - caput(center_val, center[i],timeout=180) - if size_rbv != None: + + size_pvs,center_pvs = slits_pvs(slit_name) + for i in range(0,len(size_pvs)): + size_val, size_rbv, = size_pvs[i] + center_val,center_rbv = center_pvs[i] + if center_rbv != None: + caput(center_val, center[i],timeout=180) + if size_rbv != None: caput(size_val, size[i],timeout=180) - else: - print_warning_message("Not a valid slit_name") + + if verbose: + slits_get(slit_name,verbose=True) + return size,center @@ -139,18 +156,22 @@ def slits_get(slit_name,verbose=True): #syncing slits_synch(slit_name) - for slit_HV in d[slit_name]: #H and V - (size_rbv,size_val),(center_rbv,center_val) = slits_pvs(slit_HV) - if size_rbv != None: - size.append(caget(size_rbv)) - if center_rbv != None: + size_pvs,center_pvs = slits_pvs(slit_name) + for i in range(0,len(size_pvs)): + size_val, size_rbv, = size_pvs[i] + center_val,center_rbv = center_pvs[i] + if center_rbv != None: center.append(caget(center_rbv)) else: center.append(0) + if size_rbv != None: + size.append(caget(size_rbv)) + + if verbose: - if (d[slit_name])>1: - print(slit_name + " = ("+str(round(size[0],3))+"x"+str(round(size[1],3))+") @ ("+str(center[0])+","+str(center[1])+")") + if len(d[slit_name])>1: + print(slit_name + " = ("+str(round(size[0],3))+" x "+str(round(size[1],3))+") @ ("+str(round(center[0],3))+","+str(round(center[1],3))+")") else: print(slit_name + " = ("+str(round(size[0],3))+") @ ("+str(center[0])+")") @@ -279,7 +300,7 @@ def slit2B_set(H_size,V_size,verbose=True,**kwargs): size = (H_size,V_size) center = kwargs['center'] - slits_set(slit_name,size,center, verbose=verbose) + slits_set(slit_name,size,center,verbose=verbose) def slit2B_get(verbose=True): """ diff --git a/iexcode/instruments/slits.py b/iexcode/instruments/slits.py index af7c195..62a17c7 100644 --- a/iexcode/instruments/slits.py +++ b/iexcode/instruments/slits.py @@ -5,7 +5,7 @@ from epics import caget, caput import iexcode.instruments.cfg as iex from iexcode.instruments.shutters import main_shutter_close from iexcode.instruments.utilities import print_warning_message -from iexcode.instruments.encoders import encoders_reset_zero +from iexcode.instruments.encoders import encoders_reset_zero, _encoder_dictionary,encoder_sync slit_ioc="29idb:" @@ -13,22 +13,21 @@ slit_ioc="29idb:" def _slits_dictionary(): """ dictionary of slit pv names for two and four blade slit assemblies - - slit_name = slit1A, slit2B, slit3D + key = slit_name + val - slitHV """ #'slit3C' : (None, "uses a flexure stage so is different"), d = { - 'slit1A' : ('Slit1H','Slit1V'), - 'slit2B' : ('Slit2H','Slit2V'), - 'slit3C' : ('Slit3C') - 'slit3D' : ('Slit4V') - + 'slit1A' : ('29idb:Slit1H','29idb:Slit1V'), + 'slit2B' : ('29idb:Slit2H','29idb:Slit2V'), + 'slit3C' : ('29idb:Slit3C',), + 'slit3D' : ('29idd:Slit4V',), } return d def slit_name_list(): - d=_slits_dictionary + d=_slits_dictionary() for key in d.keys(): print(key) @@ -41,41 +40,55 @@ def _slits_wide_open_dictionary(): 'slit1A' : (4.5,4.5), 'slit2B' : (6,8), 'slit3C' : (300), - 'slit3D' : (2000) - + 'slit3D' : (2000), } return d -def slits_pvs(slit_name_HV): +def slits_pvs(slit_name): """ returns the rbv and drive for the size,center (rbv_size,val_size),(rvb_center,val_center) """ + d = _slits_dictionary() + size = []#H,V + center = []#H,V if slit_name in d.keys(): - if slit_name == 'Slit3C': - size_rbv = '29idb:Slit3CRBV' - size_val = '29idb:Slit3CFit.A' + if slit_name == 'slit3C': + size_val = d[slit_name][0]+'Fit.A' + size_rbv = d[slit_name][0]+'RBV' + center_val = None center_rbv = None - center_val = None + size.append((size_val,size_rbv)) + center.append((center_val,center_rbv)) else: - slit_pv = slit_ioc + slit_name_HV - size_rbv = slit_pv +'t2.D' - size_val = slit_pv +'center.VAL' - center_rbv = slit_pv +'t2.C' - center_val = slit_pv +'center.VAL' - - return (size_rbv,size_val),(center_rbv,center_val) + for slit_HV in d[slit_name]: + size_val = slit_HV +'size.VAL' + size_rbv = slit_HV +'t2.C' + center_val = slit_HV +'center.VAL' + center_rbv = slit_HV +'t2.D' + size.append((size_val,size_rbv)) + center.append((center_val,center_rbv)) + else: + print_warning_message('slit_name = '+slit_name+' not a valid slit, choose:') + slit_name_list() + return size,center def slits_synch(slit_name): """ synch the motor position and the slit table for all the beamline slits """ d = _slits_dictionary() + if slit_name in _encoder_dictionary().keys(): + encoder_sync(slit_name) if slit_name in d.keys(): if slit_name != 'slit3C': - slit_pv = slit_ioc + slit_name+'sync.PROC' - caput(slit_pv,1) + for slit_HV in d[slit_name]: + slit_pv = slit_HV+'sync.PROC' + caput(slit_pv,1) + else: + print_warning_message('slit_name = '+slit_name+' not a valid slit, choose:') + slit_name_list() def slits_sync_all(): """ @@ -94,10 +107,9 @@ def slits_get_all(verbose=True): returns a dictionary with the current slit status """ vals = {} - vals['slit1A_size'], vals['slit1A_center'] = slit1A_get(verbose=verbose) - vals['slit2B_size'], vals['slit2B_center'] = slit2B_get(verbose=verbose) - vals['slit3C_size'] = slit3C_get(verbose=verbose) - vals['slit3D_size'],vals['slit3D_center'] = slit3D_get(verbose=verbose) + for slit_name in ['slit1A','slit2B','slit3C','slit3D']: + vals[slit_name+'_size'], vals[slit_name+'_center'] = slits_get(slit_name,verbose=verbose) + def slits_set(slit_name,size,center,verbose=True): """ @@ -110,20 +122,25 @@ def slits_set(slit_name,size,center,verbose=True): Previously: SetSlit """ d = _slits_dictionary() + #syncing slits_synch(slit_name) if inf in size: size = _slits_wide_open_dictionary()[slit_name] - if d[slit_name] != None: - for i,slit_HV in enumerate(d[slit_name]): #H and V - (size_rbv,size_val),(center_rbv,center_val) = slits_pvs(slit_HV) - if center_rbv != None: - caput(center_val, center[i],timeout=180) - if size_rbv != None: + + size_pvs,center_pvs = slits_pvs(slit_name) + for i in range(0,len(size_pvs)): + size_val, size_rbv, = size_pvs[i] + center_val,center_rbv = center_pvs[i] + if center_rbv != None: + caput(center_val, center[i],timeout=180) + if size_rbv != None: caput(size_val, size[i],timeout=180) - else: - print_warning_message("Not a valid slit_name") + + if verbose: + slits_get(slit_name,verbose=True) + return size,center @@ -139,18 +156,22 @@ def slits_get(slit_name,verbose=True): #syncing slits_synch(slit_name) - for slit_HV in d[slit_name]: #H and V - (size_rbv,size_val),(center_rbv,center_val) = slits_pvs(slit_HV) - if size_rbv != None: - size.append(caget(size_rbv)) - if center_rbv != None: + size_pvs,center_pvs = slits_pvs(slit_name) + for i in range(0,len(size_pvs)): + size_val, size_rbv, = size_pvs[i] + center_val,center_rbv = center_pvs[i] + if center_rbv != None: center.append(caget(center_rbv)) else: center.append(0) + if size_rbv != None: + size.append(caget(size_rbv)) + + if verbose: - if (d[slit_name])>1: - print(slit_name + " = ("+str(round(size[0],3))+"x"+str(round(size[1],3))+") @ ("+str(center[0])+","+str(center[1])+")") + if len(d[slit_name])>1: + print(slit_name + " = ("+str(round(size[0],3))+" x "+str(round(size[1],3))+") @ ("+str(round(center[0],3))+","+str(round(center[1],3))+")") else: print(slit_name + " = ("+str(round(size[0],3))+") @ ("+str(center[0])+")") @@ -279,7 +300,7 @@ def slit2B_set(H_size,V_size,verbose=True,**kwargs): size = (H_size,V_size) center = kwargs['center'] - slits_set(slit_name,size,center, verbose=verbose) + slits_set(slit_name,size,center,verbose=verbose) def slit2B_get(verbose=True): """ -- GitLab