From 39c040c75f907bb780186bbf73d38c234e761ce9 Mon Sep 17 00:00:00 2001 From: "FR@29iduser" <rodolakis@anl.gov> Date: Tue, 20 Sep 2022 14:31:03 -0500 Subject: [PATCH] EA now triggers, slits work --- .../iexcode/instruments/current_amplifiers.py | 9 +++++ .../iexcode/instruments/electron_analyzer.py | 10 ++--- build/lib/iexcode/instruments/m3r.py | 4 +- build/lib/iexcode/instruments/scanRecord.py | 9 ++++- build/lib/iexcode/instruments/slits.py | 40 ++++++++++--------- iexcode/instruments/electron_analyzer.py | 10 ++--- iexcode/instruments/m3r.py | 4 +- iexcode/instruments/scanRecord.py | 9 ++++- iexcode/instruments/slits.py | 40 ++++++++++--------- 9 files changed, 77 insertions(+), 58 deletions(-) diff --git a/build/lib/iexcode/instruments/current_amplifiers.py b/build/lib/iexcode/instruments/current_amplifiers.py index 5d51e8a..7488c52 100644 --- a/build/lib/iexcode/instruments/current_amplifiers.py +++ b/build/lib/iexcode/instruments/current_amplifiers.py @@ -350,8 +350,17 @@ class SRS: self.offset_unit = None self.offset_sign = None self.offset_factor = None + self.set_all() self.get_all(verbose=False) + def set_all(self): + """ + set all PV to current SP values (what the screen shows in not necessarely what the PV are set to) + """ + pv=self._srs_pv+"init.PROC" + caput(pv,1) + + def get_all(self,verbose): """ reads the current SRS and corresponding scaler values diff --git a/build/lib/iexcode/instruments/electron_analyzer.py b/build/lib/iexcode/instruments/electron_analyzer.py index c72f5f7..393f7a8 100644 --- a/build/lib/iexcode/instruments/electron_analyzer.py +++ b/build/lib/iexcode/instruments/electron_analyzer.py @@ -225,26 +225,22 @@ def _scanEATrigger(EAlist,before_after,**kwargs): kwargs.setdefault("detNum",20) kwargs.setdefault("prefix","EA")# if not None then over rides the auto kwargs.setdefault("debug",False) - - scanPV=iex.BL.ioc+"scan"+str(kwargs["scan_dim"]) - triggerPV=scanPV+".T"+str(kwargs["detTrig"])+"PV" if kwargs["debug"]: - print("scanPV: "+scanPV) print("before_after: "+before_after) #setting EA._savePlugin FilePath, FileName,FileNumber if before_after == "before": _scanEAPrefix("mda",**kwargs) scantype, HVscanPV, KElist, parms =EA._spectraSetup(EAlist,**kwargs) - caput(triggerPV,HVscanPV) + iex.BL.mda.trigger_dictionary.update({kwargs['detTrig']:HVscanPV}) if before_after == "after": _scanEAPrefix(kwargs["prefix"],**kwargs) - caput(triggerPV,"") + iex.BL.mda.trigger_dictionary.update({kwargs['detTrig']:""}) if kwargs["debug"]: - print(triggerPV,caget(triggerPV, as_string=True)) + print("trigger_dictionary",iex.BL.mda.trigger_dictionary) return diff --git a/build/lib/iexcode/instruments/m3r.py b/build/lib/iexcode/instruments/m3r.py index 402a220..04aef80 100644 --- a/build/lib/iexcode/instruments/m3r.py +++ b/build/lib/iexcode/instruments/m3r.py @@ -97,11 +97,13 @@ def m3r_branch(): print('M3R is not in a default position') return branch -def m3r_switch_branch(branch): +def m3r_switch_branch(branch,verbose=True): """ switches the mirror to the position defined in m3r_table """ position = m3r_table(branch) + if verbose: + print("Moving M3R to the "+branch+"branch: "+str(position)) FMB_mirror_move_all(3,position,verbose=False) # Relax bellows by doing large Z translation: FMB_mirror_move(3,"TY",5,verbose=False) diff --git a/build/lib/iexcode/instruments/scanRecord.py b/build/lib/iexcode/instruments/scanRecord.py index 073218e..ef3f17e 100644 --- a/build/lib/iexcode/instruments/scanRecord.py +++ b/build/lib/iexcode/instruments/scanRecord.py @@ -340,7 +340,7 @@ class ScanRecord: #clearing self.detectors_clear(scan_dim,{}) self.triggers_clear(scan_dim,{}) - self.positioners_clear(scan_dim) + self.positioners_clear({scan_dim:scan_dim}) #resetting if 'detector_dictionary' in kwargs: @@ -480,6 +480,9 @@ class ScanRecord: kwargs.setdefault('positioner_settling_time',default_positioner_settling_time) kwargs.setdefault('debug',False) + if 'trigger_dictionary' in kwargs: + self.trigger_dictionary = kwargs['trigger_dictionary'] + self.progress(kwargs['scan_dim']) scan_pv = self.ioc+"scan"+str(kwargs['scan_dim']) @@ -502,6 +505,8 @@ class ScanRecord: self.detector_settling_time(**kwargs) self.positioner_settling_time(**kwargs) + + self.triggers_set(kwargs['scan_dim'],self.trigger_dictionary) #checking that PVs and positioner limits are good self.check(kwargs['scan_dim']) @@ -726,7 +731,7 @@ class ScanRecord: for i in range(1,5): caput(scan_pv+".P"+str(i)+"SM","LINEAR") - self.positioners_clear(self.ioc,kwargs['scan_dim']) + self.positioners_clear(**kwargs) ############################################################################################################## ############################# progress, go and abort ############################## diff --git a/build/lib/iexcode/instruments/slits.py b/build/lib/iexcode/instruments/slits.py index 89e6de4..1b8da87 100644 --- a/build/lib/iexcode/instruments/slits.py +++ b/build/lib/iexcode/instruments/slits.py @@ -44,8 +44,8 @@ def _slits_wide_open_dictionary(): d = { 'slit1A' : (4.5,4.5), 'slit2B' : (6,8), - 'slit3C' : (300), - 'slit3D' : (2000), + 'slit3C' : (300,), + 'slit3D' : (2000,), } return d @@ -64,8 +64,8 @@ def slits_pvs(slit_name): size_rbv = d[slit_name][0]+'RBV' center_val = None center_rbv = None - size.append((size_val,size_rbv)) - center.append((center_val,center_rbv)) + size.append((size_rbv,size_val)) + center.append((center_rbv,center_val)) else: for slit_HV in d[slit_name]: size_rbv = slit_HV +'size.VAL' @@ -132,15 +132,17 @@ def slits_set(slit_name,size,center,verbose=True,wait=True): #syncing slits_synch(slit_name) - if inf in size: - size = _slits_wide_open_dictionary()[slit_name] - - size_pvs,center_pvs = slits_pvs(slit_name) - - for i in range(0,len(size_pvs)): + maxsize=_slits_wide_open_dictionary()[slit_name] + size=list(size) + center=list(center) + for i,s in enumerate(size): + if size[i] == inf: + size[i]=maxsize #get pvnames + size_pvs,center_pvs = slits_pvs(slit_name) size_rbv, size_val, = size_pvs[i] center_rbv,center_val = center_pvs[i] + #check if there is a pv if center_rbv != None: #check if specified value @@ -155,7 +157,7 @@ def slits_set(slit_name,size,center,verbose=True,wait=True): if verbose: slits_get(slit_name,verbose=True) - return size,center + return tuple(size),tuple(center) def slits_get(slit_name,verbose=True): @@ -347,8 +349,8 @@ def slit3C_set(size,verbose=True): Previously SetSlit3C """ slit_name = 'slit3C' - center = None - slits_set(slit_name,size,center, verbose=verbose) + center = (None,) + slits_set(slit_name,(size,),center, verbose=verbose) def slit3C_get(verbose=True): """ @@ -358,7 +360,7 @@ def slit3C_get(verbose=True): slit_name = "slit3C" return slits_get(slit_name,verbose=verbose) -def slit3D_set(V_size,position=None,verbose=True): +def slit3D_set(V_size,center=None,verbose=True): """ set the exit slit for the D-branch @@ -370,15 +372,15 @@ def slit3D_set(V_size,position=None,verbose=True): V_size=2000 size = (V_size) - if position == None: + if center == None: center = slit3D_get()[1] else: - center = (position) + center = (center,) slits_set(slit_name,size,center,verbose=False) - if position == None: + if center == None: size,center = slit3D_get() print("Slit-3D = "+str(size)+"um") else: @@ -391,8 +393,8 @@ def slit3D_get(verbose=True): """ slit_name = "slit3D" (V_size),(V_center) = slits_get(slit_name,verbose) - V_size = round(V_size,3) - V_center = round(V_center,3) + V_size = round(V_size[0],3) + V_center = round(V_center[0],3) return V_size,V_center diff --git a/iexcode/instruments/electron_analyzer.py b/iexcode/instruments/electron_analyzer.py index c72f5f7..393f7a8 100644 --- a/iexcode/instruments/electron_analyzer.py +++ b/iexcode/instruments/electron_analyzer.py @@ -225,26 +225,22 @@ def _scanEATrigger(EAlist,before_after,**kwargs): kwargs.setdefault("detNum",20) kwargs.setdefault("prefix","EA")# if not None then over rides the auto kwargs.setdefault("debug",False) - - scanPV=iex.BL.ioc+"scan"+str(kwargs["scan_dim"]) - triggerPV=scanPV+".T"+str(kwargs["detTrig"])+"PV" if kwargs["debug"]: - print("scanPV: "+scanPV) print("before_after: "+before_after) #setting EA._savePlugin FilePath, FileName,FileNumber if before_after == "before": _scanEAPrefix("mda",**kwargs) scantype, HVscanPV, KElist, parms =EA._spectraSetup(EAlist,**kwargs) - caput(triggerPV,HVscanPV) + iex.BL.mda.trigger_dictionary.update({kwargs['detTrig']:HVscanPV}) if before_after == "after": _scanEAPrefix(kwargs["prefix"],**kwargs) - caput(triggerPV,"") + iex.BL.mda.trigger_dictionary.update({kwargs['detTrig']:""}) if kwargs["debug"]: - print(triggerPV,caget(triggerPV, as_string=True)) + print("trigger_dictionary",iex.BL.mda.trigger_dictionary) return diff --git a/iexcode/instruments/m3r.py b/iexcode/instruments/m3r.py index 402a220..04aef80 100644 --- a/iexcode/instruments/m3r.py +++ b/iexcode/instruments/m3r.py @@ -97,11 +97,13 @@ def m3r_branch(): print('M3R is not in a default position') return branch -def m3r_switch_branch(branch): +def m3r_switch_branch(branch,verbose=True): """ switches the mirror to the position defined in m3r_table """ position = m3r_table(branch) + if verbose: + print("Moving M3R to the "+branch+"branch: "+str(position)) FMB_mirror_move_all(3,position,verbose=False) # Relax bellows by doing large Z translation: FMB_mirror_move(3,"TY",5,verbose=False) diff --git a/iexcode/instruments/scanRecord.py b/iexcode/instruments/scanRecord.py index 073218e..ef3f17e 100644 --- a/iexcode/instruments/scanRecord.py +++ b/iexcode/instruments/scanRecord.py @@ -340,7 +340,7 @@ class ScanRecord: #clearing self.detectors_clear(scan_dim,{}) self.triggers_clear(scan_dim,{}) - self.positioners_clear(scan_dim) + self.positioners_clear({scan_dim:scan_dim}) #resetting if 'detector_dictionary' in kwargs: @@ -480,6 +480,9 @@ class ScanRecord: kwargs.setdefault('positioner_settling_time',default_positioner_settling_time) kwargs.setdefault('debug',False) + if 'trigger_dictionary' in kwargs: + self.trigger_dictionary = kwargs['trigger_dictionary'] + self.progress(kwargs['scan_dim']) scan_pv = self.ioc+"scan"+str(kwargs['scan_dim']) @@ -502,6 +505,8 @@ class ScanRecord: self.detector_settling_time(**kwargs) self.positioner_settling_time(**kwargs) + + self.triggers_set(kwargs['scan_dim'],self.trigger_dictionary) #checking that PVs and positioner limits are good self.check(kwargs['scan_dim']) @@ -726,7 +731,7 @@ class ScanRecord: for i in range(1,5): caput(scan_pv+".P"+str(i)+"SM","LINEAR") - self.positioners_clear(self.ioc,kwargs['scan_dim']) + self.positioners_clear(**kwargs) ############################################################################################################## ############################# progress, go and abort ############################## diff --git a/iexcode/instruments/slits.py b/iexcode/instruments/slits.py index 89e6de4..1b8da87 100644 --- a/iexcode/instruments/slits.py +++ b/iexcode/instruments/slits.py @@ -44,8 +44,8 @@ def _slits_wide_open_dictionary(): d = { 'slit1A' : (4.5,4.5), 'slit2B' : (6,8), - 'slit3C' : (300), - 'slit3D' : (2000), + 'slit3C' : (300,), + 'slit3D' : (2000,), } return d @@ -64,8 +64,8 @@ def slits_pvs(slit_name): size_rbv = d[slit_name][0]+'RBV' center_val = None center_rbv = None - size.append((size_val,size_rbv)) - center.append((center_val,center_rbv)) + size.append((size_rbv,size_val)) + center.append((center_rbv,center_val)) else: for slit_HV in d[slit_name]: size_rbv = slit_HV +'size.VAL' @@ -132,15 +132,17 @@ def slits_set(slit_name,size,center,verbose=True,wait=True): #syncing slits_synch(slit_name) - if inf in size: - size = _slits_wide_open_dictionary()[slit_name] - - size_pvs,center_pvs = slits_pvs(slit_name) - - for i in range(0,len(size_pvs)): + maxsize=_slits_wide_open_dictionary()[slit_name] + size=list(size) + center=list(center) + for i,s in enumerate(size): + if size[i] == inf: + size[i]=maxsize #get pvnames + size_pvs,center_pvs = slits_pvs(slit_name) size_rbv, size_val, = size_pvs[i] center_rbv,center_val = center_pvs[i] + #check if there is a pv if center_rbv != None: #check if specified value @@ -155,7 +157,7 @@ def slits_set(slit_name,size,center,verbose=True,wait=True): if verbose: slits_get(slit_name,verbose=True) - return size,center + return tuple(size),tuple(center) def slits_get(slit_name,verbose=True): @@ -347,8 +349,8 @@ def slit3C_set(size,verbose=True): Previously SetSlit3C """ slit_name = 'slit3C' - center = None - slits_set(slit_name,size,center, verbose=verbose) + center = (None,) + slits_set(slit_name,(size,),center, verbose=verbose) def slit3C_get(verbose=True): """ @@ -358,7 +360,7 @@ def slit3C_get(verbose=True): slit_name = "slit3C" return slits_get(slit_name,verbose=verbose) -def slit3D_set(V_size,position=None,verbose=True): +def slit3D_set(V_size,center=None,verbose=True): """ set the exit slit for the D-branch @@ -370,15 +372,15 @@ def slit3D_set(V_size,position=None,verbose=True): V_size=2000 size = (V_size) - if position == None: + if center == None: center = slit3D_get()[1] else: - center = (position) + center = (center,) slits_set(slit_name,size,center,verbose=False) - if position == None: + if center == None: size,center = slit3D_get() print("Slit-3D = "+str(size)+"um") else: @@ -391,8 +393,8 @@ def slit3D_get(verbose=True): """ slit_name = "slit3D" (V_size),(V_center) = slits_get(slit_name,verbose) - V_size = round(V_size,3) - V_center = round(V_center,3) + V_size = round(V_size[0],3) + V_center = round(V_center[0],3) return V_size,V_center -- GitLab