From 080d3edfa398a71e413af22a0b6cba09b185ca37 Mon Sep 17 00:00:00 2001
From: "FR@29iduser" <rodolakis@anl.gov>
Date: Fri, 16 Sep 2022 15:16:33 -0500
Subject: [PATCH] Octupole reset working

---
 build/lib/iexcode/instruments/ARPES.py  |  2 +-
 build/lib/iexcode/instruments/Motors.py |  9 ++++
 iexcode/instruments/ARPES.py            |  2 +-
 iexcode/instruments/Octupole.py         | 60 ++++++++++++++++---------
 4 files changed, 49 insertions(+), 24 deletions(-)

diff --git a/build/lib/iexcode/instruments/ARPES.py b/build/lib/iexcode/instruments/ARPES.py
index a01087d..1457595 100644
--- a/build/lib/iexcode/instruments/ARPES.py
+++ b/build/lib/iexcode/instruments/ARPES.py
@@ -202,7 +202,7 @@ def folders_ARPES(user_name,**kwargs):
         print("run,folder,user_name,ioc,ftp: ",run,iex.BL.folder,user_name,kwargs['scan_ioc'],kwargs['ftp'])
 
     # Create User Folder:
-    make_user_folders(run,iex.BL.folder,user_name,iex.BL.endstation,ftp=kwargs['ftp'])
+    make_user_folders(run,iex.BL.folder,user_name,iex.BL.endstation_name,ftp=kwargs['ftp'])
     sleep(5)
 
     if kwargs["set_folders"]:
diff --git a/build/lib/iexcode/instruments/Motors.py b/build/lib/iexcode/instruments/Motors.py
index 6007ef8..b59469b 100644
--- a/build/lib/iexcode/instruments/Motors.py
+++ b/build/lib/iexcode/instruments/Motors.py
@@ -426,6 +426,15 @@ def dscanphi(start,stop,step):
     iex.BL.motors.scan("phi",start,stop,step,relative=True)
 
 
+def scan_motors_2D(inner_loop_list,outer_loop_list,**kwargs):
+    """
+    2D motor scans
+
+    usage:
+    scan_motors_2D(["x",-5,5,.25],["z",141.5-5,141.5+5,.25])
+    """
+    iex.BL.motors.scan_2D(inner_loop_list,outer_loop_list,**kwargs)
+
 ######## mprint and mvsample ###################
 def mprint(name=''):
     """
diff --git a/iexcode/instruments/ARPES.py b/iexcode/instruments/ARPES.py
index a01087d..1457595 100644
--- a/iexcode/instruments/ARPES.py
+++ b/iexcode/instruments/ARPES.py
@@ -202,7 +202,7 @@ def folders_ARPES(user_name,**kwargs):
         print("run,folder,user_name,ioc,ftp: ",run,iex.BL.folder,user_name,kwargs['scan_ioc'],kwargs['ftp'])
 
     # Create User Folder:
-    make_user_folders(run,iex.BL.folder,user_name,iex.BL.endstation,ftp=kwargs['ftp'])
+    make_user_folders(run,iex.BL.folder,user_name,iex.BL.endstation_name,ftp=kwargs['ftp'])
     sleep(5)
 
     if kwargs["set_folders"]:
diff --git a/iexcode/instruments/Octupole.py b/iexcode/instruments/Octupole.py
index 5f6644a..b0f4733 100644
--- a/iexcode/instruments/Octupole.py
+++ b/iexcode/instruments/Octupole.py
@@ -32,7 +32,7 @@ from iexcode.instruments.scalers import scaler_cts,Scaler
 from iexcode.instruments.spec_stuff import folders_spec
 
 default_ioc = '29ide:'
-global tey,tfy,pd,mesh,diag,kbh,kbv, Octupole_scaler_pv
+global tey,tfy,pd,mesh,diag,kbh,kbv
 
 #############################################################################
 def Octupole_init(*userName,**kwargs):
@@ -86,7 +86,7 @@ def Octupole_init(*userName,**kwargs):
     tey = SRS("29ide:scaler1.S3", '29ide:SR570_4:')
     tfy = Scaler("29ide:scaler1.S4")
     pd = SRS("29idMZ0:scaler1.S5", '29ide:SR570_5:')
-    Octupole_scaler_pv = '29ide:scaler1.CNT'
+    
     
     #resetting everything
     if kwargs['reset']:
@@ -94,10 +94,14 @@ def Octupole_init(*userName,**kwargs):
 
     print ('Octupole initalized')
     #return any detectors or other parameters that you want access to from jupyter
-    return tey,tfy,pd,mesh,diag,kbh,kbv, Octupole_scaler_pv
+    return tey,tfy,pd,mesh,diag,kbh,kbv
 ##############################################################################################################
 ##############################                    detectors and motors                ##############################
 ##############################################################################################################
+def Octupole_scaler_pv():
+    scaler_pv = '29ide:scaler1.CNT'
+    return scaler_pv
+
 def _Octupole_ca_list():
     """
     list of detectors to trigger 
@@ -218,6 +222,7 @@ def folders_Octupole(user_name,**kwargs):
     kwargs.setdefault('run',check_run())
     kwargs.setdefault('ftp',False)
     kwargs.setdefault('debug',False)
+    kwargs.setdefault('vortex',False)
 
     run = kwargs['run']
 
@@ -234,9 +239,9 @@ def folders_Octupole(user_name,**kwargs):
 
     #resetting
     if 'reset':
-        Octupole_reset()
+        Octupole_reset(**kwargs)
 
-def Octupole_reset():
+def Octupole_reset(**kwargs):
     """
     resets scanRecord, current amplifiers, mono limits and lakeshore
     """
@@ -244,7 +249,7 @@ def Octupole_reset():
     if iex.BL.mode=='staff':
         iex.BL.mda.detector_dictionary = staff_detector_dictionary()
     else:
-         iex.BL.mda.detector_dictionary = _Octupole_detector_dictionary()
+         iex.BL.mda.detector_dictionary = _Octupole_detector_dictionary(**kwargs)
     iex.BL.mda.trigger_dictionary = _Octupole_trigger_dictionary()
     iex.BL.mda.scan_before_sequence = _Octupole_scan_before_sequence()
     iex.BL.mda.scan_after_sequence = _Octupole_scan_after_sequence()    
@@ -254,7 +259,7 @@ def Octupole_reset():
     iex.BL.mda.reset_all()
 
     #resetting the current amplifiers
-    if iex.BL.xray:
+    if iex.BL.xrays:
         ca_reset_all()
     
     #resetting mono and anyother beamline stuff
@@ -344,7 +349,7 @@ def _Octupole_log_entries():
 ##############################################################################################################
 ##############################             Octupole scanRecord           ##############################
 ##############################################################################################################
-def _Octupole_scan_before_sequence(scan_ioc,scan_dim,**kwargs):
+def _Octupole_scan_before_sequence(**kwargs):
     """
     writes the user string sequence to happen at the beginning of a scan
     returns before_scan_pv = pv for userStringSeq for before scan
@@ -357,6 +362,8 @@ def _Octupole_scan_before_sequence(scan_ioc,scan_dim,**kwargs):
     kwargs.setdefault('seq_num',9)
     seq_num=kwargs['seq_num']
 
+    scan_ioc = iex.BL.ioc
+
     before_scan_pv,before_scan_proc = userStringSeq_pvs(scan_ioc, seq_num)
 
     #clear and write the before scan user sequence
@@ -371,7 +378,7 @@ def _Octupole_scan_before_sequence(scan_ioc,scan_dim,**kwargs):
 
     return before_scan_proc
 
-def _Octupole_scan_after_sequence(scan_ioc,scan_dim,**kwargs):
+def _Octupole_scan_after_sequence(**kwargs):
     """
     writes the user string sequence to happen at the end of a scan
     returns after_scan_pv = pv for userStringSeq for after scan
@@ -384,7 +391,12 @@ def _Octupole_scan_after_sequence(scan_ioc,scan_dim,**kwargs):
     """
     kwargs.setdefault('seq_num',10)
     kwargs.setdefault('snake',False)
-    seq_num=kwargs['seq_num']
+    kwargs.setdefault('scan_dim',1)
+
+    seq_num = kwargs['seq_num']
+    scan_dim = kwargs['scan_dim']
+
+    scan_ioc = iex.BL.ioc
 
     if 'scan_ioc' in kwargs:
         scan_ioc = kwargs['scan_ioc']
@@ -421,40 +433,44 @@ def _Octupole_scan_after_sequence(scan_ioc,scan_dim,**kwargs):
 
     return after_scan_proc
 
-def _Octupole_detector_triggers_sequence(scan_ioc,scan_dim,**kwargs):    # do we need to add 29idb:ca5 ???
+def _Octupole_detector_triggers_sequence(**kwargs):    # do we need to add 29idb:ca5 ???
     """
     
     """
 
-    kwargs.setdefault(seq_num,8)
+    kwargs.setdefault('seq_num',8)
     seq_num=kwargs['seq_num']
 
+    scan_ioc = iex.BL.ioc
+
     detector_triggers_pv,detector_triggers_proc = userStringSeq_pvs(iex.BL.ioc, seq_num)
        
     #clear the userStringSeq
     userStringSeq_clear(scan_ioc,seq_num=kwargs['seq_num'])
     caput(detector_triggers_pv+".DESC","Octupole_Trigger1")
+   
+    ca_list = _Octupole_ca_list()
+    last = len(ca_list)
+    if last !=0:
+        for i,ca in enumerate(ca_list):
+            ca_pv = Keithley_pv(ca[0], ca[1])+':read.PROC CA NMS'
+            caput(detector_triggers_pv+".LNK" +str(i+2),ca_pv)
+            caput(detector_triggers_pv+".WAIT"+str(i+2),"After"+str(last))
 
-    scaler_pv = Octupole_scaler_pv
+    last+=1
+    scaler_pv = Octupole_scaler_pv()
 
     caput(detector_triggers_pv+".LNK" +str(1),scaler_pv)
     caput(detector_triggers_pv+".WAIT"+str(1),"After"+str(last))
-    
-    ca_list = _Octupole_ca_list()
-    last = len(ca_list)
-    for i,ca in enumerate(ca_list):
-        ca_pv = Keithley_pv(ca[0], ca[1])+':read.PROC CA NMS'
-        caput(detector_triggers_pv+".LNK" +str(i+2),ca_pv)
-        caput(detector_triggers_pv+".WAIT"+str(i+2),"After"+str(last))
 
     return detector_triggers_proc
 
-def _Octupole_trigger_dictionary(scan_ioc,scan_dim,**kwargs):
+def _Octupole_trigger_dictionary(**kwargs):
     """
     need to do something
     """
     trigger_dictionary = {
-        1:_Octupole_detector_triggers_sequence(scan_ioc,scan_dim,**kwargs),
+        1:_Octupole_detector_triggers_sequence(**kwargs),
     }
     return trigger_dictionary
 
-- 
GitLab