diff --git a/build/lib/iexcode/instruments/ARPES.py b/build/lib/iexcode/instruments/ARPES.py index 68b161c9059860f03ccad6d511fbe6c993483c9c..ccfe14e4e9313ecf593e2472ff4605bfb1ac1f7c 100644 --- a/build/lib/iexcode/instruments/ARPES.py +++ b/build/lib/iexcode/instruments/ARPES.py @@ -30,6 +30,7 @@ global BL global tey,ca15 global ARPES_Motors + ############################################################################# def ARPES_init(set_folders=True,reset=True,**kwargs): """ @@ -46,8 +47,9 @@ def ARPES_init(set_folders=True,reset=True,**kwargs): detector_dictionary = staff_detector_dictionary() else: detector_dictionary = ARPES_detector_dictionary() - mda_scanRecord = ScanRecord(kwargs['scan_ioc'],detector_dictionary, - ARPES_trigger_dictionary(),ARPES_scan_before_sequence(),ARPES_scan_after_sequence()) + mda_scanRecord = ScanRecord(kwargs['scan_ioc']) + + mda_scanRecord.reset_all(detector_dictionary,ARPES_trigger_dictionary(kwargs['scan_ioc']),ARPES_scan_before_sequence(kwargs['scan_ioc']),ARPES_scan_after_sequence(kwargs['scan_ioc'])) #endstation BL=Endstation('ARPES',kwargs['scan_ioc'],kwargs['xrays'],kwargs['BL_mode'],mda_scanRecord, @@ -370,10 +372,10 @@ def ARPES_scan_after_sequence(scan_dim, **kwargs): def ARPES_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'] - detector_triggers_pv,detector_triggers_proc = userStringSeq_pvs(BL.ioc, seq_num) + detector_triggers_pv,detector_triggers_proc = userStringSeq_pvs(kwargs['scan_ioc'], seq_num) #clear the userStringSeq userStringSeq_clear(BL.ioc,seq_num=kwargs['seq_num']) @@ -388,12 +390,12 @@ def ARPES_detector_triggers_sequence(**kwargs): # do we need to add 29idb:ca5 return detector_triggers_proc -def ARPES_trigger_dictionary(): +def ARPES_trigger_dictionary(**kwargs): """ need to do something """ trigger_dictionary = { - 1:ARPES_detector_triggers_sequence(), + 1:ARPES_detector_triggers_sequence(**kwargs), } return trigger_dictionary diff --git a/build/lib/iexcode/instruments/scanRecord.py b/build/lib/iexcode/instruments/scanRecord.py index 2e01a97a40feb0cabc45a2affce438fa7ef800d9..d9e015ba41aa72f619f837c6f7831af9d3e3c564 100644 --- a/build/lib/iexcode/instruments/scanRecord.py +++ b/build/lib/iexcode/instruments/scanRecord.py @@ -14,14 +14,17 @@ def saveData_get_all(ioc_pv): returns saveData info: """ saveData_info = { - 'fileSystem':caget(ioc_pv+":saveData_fileSystem",as_string=True), - 'subDir':caget(ioc_pv+":saveData_subDir",as_string=True), - 'scanNumber':caget(ioc_pv+":saveData_scanNumber"), - 'baseName':caget(ioc_pv+":saveData_baseName",as_string=True), + 'fileSystem':caget(ioc_pv+"saveData_fileSystem",as_string=True), + 'subDir':caget(ioc_pv+"saveData_subDir",as_string=True), + 'scanNumber':caget(ioc_pv+"saveData_scanNumber"), + 'baseName':caget(ioc_pv+"saveData_baseName",as_string=True), } filepath = join(saveData_info['fileSystem'],saveData_info['subDir']) filepath=filepath.replace('//','/') + saveData_info['filepath'] = filepath + + return saveData_info default_positioner_settling_time = 0.05 @@ -32,7 +35,7 @@ class ScanRecord: used for short hand scanning and to get info related to a scanRecord """ - def __init__(self,scan_ioc,detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv,**kwargs): + def __init__(self,scan_ioc,**kwargs): """ scan_ioc: full pv for the ioc, "29idARPES:", "29idc:" detector_dictionary: dictionary corresponding to detector num and pv to proc => {det_num:'det_pv'} @@ -41,16 +44,32 @@ class ScanRecord: after_scan_pv: pv to be proc'ed be for the start of a scan **kwargs - reset: resets the scanRecord (True / False) => default = True + detector_dictionary + trigger_dictionary + before_scan_pv + after_scan_pv """ - kwargs.setdefault('reset',True) + + self.ioc = scan_ioc - if kwargs['reset']: - self.reset_all(detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv) + if 'detector_dictionary' in kwargs: + self.detector_dictionary = kwargs['detector_dictionary'] + if 'trigger_dictionary' in kwargs: + self.trigger_dictionary = kwargs['trigger_dictionary'] + if 'before_scan_pv' in kwargs: + self.before_scan_pv = kwargs['before_scan_pv'] + if 'after_scan_pv' in kwargs: + self.after_scan_pv = kwargs['after_scan_pv'] + + + else: + pass - pass + + + ############################################################################################################## ################################ MDA (ScanRecord) files and folders ############################## @@ -72,7 +91,7 @@ class ScanRecord: previously: MDA_GetLastFileNum """ - fileNum = self.fileNum(self) + fileNum = self.fileNum() return fileNum - 1 @@ -109,7 +128,7 @@ class ScanRecord: previously: MDA_CurrentUser """ - subdir=caget(self.ioc+":saveData_subDir",as_string=True) + subdir=saveData_get_all(self.ioc)['subDir'] m=subdir.find('/mda') if m == 0 : current_user='Staff' @@ -127,29 +146,34 @@ class ScanRecord: ### before and after scans - def _before_after_scan(self,**kwargs): + def _before_after_scan_set(self,**kwargs): """ - Fills in the before and after user sequences into the scan record + Clears the before_scan and after_scan in all dims + Fills in the before_scan and after_after pv for kwargs['scan_dim'] only **kwargs - before_scan_pv => '' - after_scan_pv => self.default_after_scan_seq() + scan_dim = 1 (default) + before_scan_pv + after_scan_pv """ kwargs.setdefault('scan_dim',1) - kwargs.setdefault('before_scan_pv','') - kwargs.setdefault('after_scan_pv',self._default_after_scan_seq()) - - scan_pv = self.ioc+"scan"+str(kwargs['scan_dim']) + + if 'before_scan_pv' in kwargs: + self.before_scan_pv = kwargs['before_scan_pv'] + if 'after_scan_pv' in kwargs: + self.before_scan_pv = kwargs['after_scan_pv'] #Clearing all Before/Afters in all dims for dim in [1,2,3,4]: caput(self.ioc+"scan"+str(dim)+".BSPV","") caput(self.ioc+"scan"+str(dim)+".ASPV","") - caput(scan_pv+".BSPV",kwargs['before_scan_pv']) + scan_pv = self.ioc+"scan"+str(kwargs['scan_dim']) + + caput(scan_pv+".BSPV",self.before_scan_pv) caput(scan_pv+".BSCD",1) caput(scan_pv+".BSWAIT","Wait") - caput(scan_pv+".ASPV",kwargs['after_scan_pv']) + caput(scan_pv+".ASPV",self.after_scan_pv) caput(scan_pv+".ASCD",1) caput(scan_pv+".ASWAIT","Wait") @@ -165,10 +189,9 @@ class ScanRecord: positioner_settling_time detector_settling_time - Previously: AfterScan_StrSeq """ - kwargs.setdefault(seq_num,10) + kwargs.setdefault('seq_num',10) kwargs.setdefault('positioner_settling_time',default_positioner_settling_time) kwargs.setdefault('detector_settling_time',default_detector_settling_time) @@ -176,7 +199,8 @@ class ScanRecord: scan_pv = self.ioc+"scan"+str(scan_dim) seq_num=kwargs['seq_num'] - after_scan_pv = userStringSeq_pvs(self.ioc, seq_num) + after_scan_pv = userStringSeq_pvs(self.ioc, seq_num)[0] + self.after_scan_pv = after_scan_pv #clear and write the after scan user sequence userStringSeq_clear(self.ioc,seq_num) @@ -184,11 +208,11 @@ class ScanRecord: #link 1 - clears positioners caput(after_scan_pv+".LNK1",scan_pv+'.P1AR'+" PP NMS") - caput(after_scan_pv+".DO1","Clear pos&rdbk PV's, etc") + caput(after_scan_pv+".STR1","Clear pos&rdbk PV's, etc") #link 2 - sets positioner mode to to abosolute caput(after_scan_pv+".LNK2",scan_pv+'.CMND'+" PP NMS") - caput(after_scan_pv+".DO2","ABSOLUTE") + caput(after_scan_pv+".STR2","ABSOLUTE") #link 3 - sets positioner delay time to default settling_time = kwargs['positioner_settling_time'] @@ -200,15 +224,18 @@ class ScanRecord: caput(after_scan_pv+".LNK4",scan_pv+'.DDLY'+" PP NMS") caput(after_scan_pv+".DO4",settling_time) - return after_scan_pv + return after_scan_pv+"+PROC" ### Resetting: - def reset_scan_dim(self,scan_dim,detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv): + def reset_scan_dim(self,scan_dim,**kwargs): """ Resets all the scanRecords (scanDIM=1,2,3,4) for a given IOC uses Reset_Scan() **kwargs - scaler='y', only for Kappa ioc + detector_dictionary + trigger_dictionary + before_scan_pv + after_scan_pv Previously: Reset_ScanAll """ @@ -216,14 +243,18 @@ class ScanRecord: self.triggers_clear(scan_dim) self.positioners_clear(scan_dim) - self.detectors_set(scan_dim,detector_dictionary) - self.triggers_set(scan_dim,trigger_dictionary) - self.before_after_sequences_set(scan_dim,before_scan_pv,after_scan_pv) + if 'detector_dictionary' in kwargs: + self.detectors_set(scan_dim,kwargs['detector_dictionary']) + + if 'trigger_dictionary' in kwargs: + self.triggers_set(scan_dim,kwargs['trigger_dictionary']) + + self._before_after_scan_set(self,kwargs.update({'scan_dim':scan_dim})) self.detector_settling_time(scan_dim) self.positioner_settling_time(scan_dim) - def reset_all(self,detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv): + def reset_all(self): """ Resets all the scanRecords (scanDIM=1,2,3,4) for a given IOC uses Reset_Scan() @@ -235,7 +266,14 @@ class ScanRecord: for scan_dim in range(4,1): self.reset_scan_dim(scan_dim,{},{},'','') - self.reset_scan_dim(1,detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv) + + kwargs = { + 'detector_dictionary':self.detector_dictionary, + 'trigger_dictionary':self.trigger_dictionary, + 'before_scan_pv':self.before_scan_pv, + 'after_scan_pv':self.after_scan_pv + } + self.reset_scan_dim(1,**kwargs) ### default setting def settings_defaults(self,scan_dim,verbose=True,**kwargs): @@ -374,9 +412,11 @@ class ScanRecord: detector_dictionary = {detNum:pv} """ scan_pv = self.ioc+"scan"+str(scan_dim) - for det_num in detector_dictionary.keys(): - det_pv=caget(scan_pv+".D"+det_num+"PV") - caput(det_pv,detector_dictionary[det_num]) + + if detector_dictionary != None: + for det_num in detector_dictionary.keys(): + det_pv=caget(scan_pv+".D"+det_num+"PV") + caput(det_pv,detector_dictionary[det_num]) def detector_settling_time(self,**kwargs): """ @@ -399,9 +439,10 @@ class ScanRecord: Previously: Clear_Scan_Triggers """ scan_pv = self.ioc+"scan"+str(scan_dim) - if len(trigger_dictionary.keys())>0: - for tigger_num in trigger_dictionary.keys(): - caput(scan_pv+".T"+str(tigger_num)+"PV",trigger_dictionary[tigger_num]) + if trigger_dictionary != None: + if len(trigger_dictionary.keys())>0: + for tigger_num in trigger_dictionary.keys(): + caput(scan_pv+".T"+str(tigger_num)+"PV",trigger_dictionary[tigger_num]) def triggers_clear(self,scan_dim,trigger_dictionary,verbose=True): """ diff --git a/iexcode/instruments/ARPES.py b/iexcode/instruments/ARPES.py index 68b161c9059860f03ccad6d511fbe6c993483c9c..ccfe14e4e9313ecf593e2472ff4605bfb1ac1f7c 100644 --- a/iexcode/instruments/ARPES.py +++ b/iexcode/instruments/ARPES.py @@ -30,6 +30,7 @@ global BL global tey,ca15 global ARPES_Motors + ############################################################################# def ARPES_init(set_folders=True,reset=True,**kwargs): """ @@ -46,8 +47,9 @@ def ARPES_init(set_folders=True,reset=True,**kwargs): detector_dictionary = staff_detector_dictionary() else: detector_dictionary = ARPES_detector_dictionary() - mda_scanRecord = ScanRecord(kwargs['scan_ioc'],detector_dictionary, - ARPES_trigger_dictionary(),ARPES_scan_before_sequence(),ARPES_scan_after_sequence()) + mda_scanRecord = ScanRecord(kwargs['scan_ioc']) + + mda_scanRecord.reset_all(detector_dictionary,ARPES_trigger_dictionary(kwargs['scan_ioc']),ARPES_scan_before_sequence(kwargs['scan_ioc']),ARPES_scan_after_sequence(kwargs['scan_ioc'])) #endstation BL=Endstation('ARPES',kwargs['scan_ioc'],kwargs['xrays'],kwargs['BL_mode'],mda_scanRecord, @@ -370,10 +372,10 @@ def ARPES_scan_after_sequence(scan_dim, **kwargs): def ARPES_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'] - detector_triggers_pv,detector_triggers_proc = userStringSeq_pvs(BL.ioc, seq_num) + detector_triggers_pv,detector_triggers_proc = userStringSeq_pvs(kwargs['scan_ioc'], seq_num) #clear the userStringSeq userStringSeq_clear(BL.ioc,seq_num=kwargs['seq_num']) @@ -388,12 +390,12 @@ def ARPES_detector_triggers_sequence(**kwargs): # do we need to add 29idb:ca5 return detector_triggers_proc -def ARPES_trigger_dictionary(): +def ARPES_trigger_dictionary(**kwargs): """ need to do something """ trigger_dictionary = { - 1:ARPES_detector_triggers_sequence(), + 1:ARPES_detector_triggers_sequence(**kwargs), } return trigger_dictionary diff --git a/iexcode/instruments/scanRecord.py b/iexcode/instruments/scanRecord.py index 2e01a97a40feb0cabc45a2affce438fa7ef800d9..77abe5ac44e27399c6e212747862798ecd19c0ee 100644 --- a/iexcode/instruments/scanRecord.py +++ b/iexcode/instruments/scanRecord.py @@ -14,14 +14,17 @@ def saveData_get_all(ioc_pv): returns saveData info: """ saveData_info = { - 'fileSystem':caget(ioc_pv+":saveData_fileSystem",as_string=True), - 'subDir':caget(ioc_pv+":saveData_subDir",as_string=True), - 'scanNumber':caget(ioc_pv+":saveData_scanNumber"), - 'baseName':caget(ioc_pv+":saveData_baseName",as_string=True), + 'fileSystem':caget(ioc_pv+"saveData_fileSystem",as_string=True), + 'subDir':caget(ioc_pv+"saveData_subDir",as_string=True), + 'scanNumber':caget(ioc_pv+"saveData_scanNumber"), + 'baseName':caget(ioc_pv+"saveData_baseName",as_string=True), } filepath = join(saveData_info['fileSystem'],saveData_info['subDir']) filepath=filepath.replace('//','/') + saveData_info['filepath'] = filepath + + return saveData_info default_positioner_settling_time = 0.05 @@ -32,7 +35,7 @@ class ScanRecord: used for short hand scanning and to get info related to a scanRecord """ - def __init__(self,scan_ioc,detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv,**kwargs): + def __init__(self,scan_ioc,**kwargs): """ scan_ioc: full pv for the ioc, "29idARPES:", "29idc:" detector_dictionary: dictionary corresponding to detector num and pv to proc => {det_num:'det_pv'} @@ -41,16 +44,32 @@ class ScanRecord: after_scan_pv: pv to be proc'ed be for the start of a scan **kwargs - reset: resets the scanRecord (True / False) => default = True + detector_dictionary + trigger_dictionary + before_scan_pv + after_scan_pv """ - kwargs.setdefault('reset',True) + + self.ioc = scan_ioc - if kwargs['reset']: - self.reset_all(detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv) + if 'detector_dictionary' in kwargs: + self.detector_dictionary = kwargs['detector_dictionary'] + if 'trigger_dictionary' in kwargs: + self.trigger_dictionary = kwargs['trigger_dictionary'] + if 'before_scan_pv' in kwargs: + self.before_scan_pv = kwargs['before_scan_pv'] + if 'after_scan_pv' in kwargs: + self.after_scan_pv = kwargs['after_scan_pv'] + + + else: + pass - pass + + + ############################################################################################################## ################################ MDA (ScanRecord) files and folders ############################## @@ -72,7 +91,7 @@ class ScanRecord: previously: MDA_GetLastFileNum """ - fileNum = self.fileNum(self) + fileNum = self.fileNum() return fileNum - 1 @@ -109,7 +128,7 @@ class ScanRecord: previously: MDA_CurrentUser """ - subdir=caget(self.ioc+":saveData_subDir",as_string=True) + subdir=saveData_get_all(self.ioc)['subDir'] m=subdir.find('/mda') if m == 0 : current_user='Staff' @@ -127,29 +146,34 @@ class ScanRecord: ### before and after scans - def _before_after_scan(self,**kwargs): + def _before_after_scan_set(self,**kwargs): """ - Fills in the before and after user sequences into the scan record + Clears the before_scan and after_scan in all dims + Fills in the before_scan and after_after pv for kwargs['scan_dim'] only **kwargs - before_scan_pv => '' - after_scan_pv => self.default_after_scan_seq() + scan_dim = 1 (default) + before_scan_pv + after_scan_pv """ kwargs.setdefault('scan_dim',1) - kwargs.setdefault('before_scan_pv','') - kwargs.setdefault('after_scan_pv',self._default_after_scan_seq()) - - scan_pv = self.ioc+"scan"+str(kwargs['scan_dim']) + + if 'before_scan_pv' in kwargs: + self.before_scan_pv = kwargs['before_scan_pv'] + if 'after_scan_pv' in kwargs: + self.before_scan_pv = kwargs['after_scan_pv'] #Clearing all Before/Afters in all dims for dim in [1,2,3,4]: caput(self.ioc+"scan"+str(dim)+".BSPV","") caput(self.ioc+"scan"+str(dim)+".ASPV","") - caput(scan_pv+".BSPV",kwargs['before_scan_pv']) + scan_pv = self.ioc+"scan"+str(kwargs['scan_dim']) + + caput(scan_pv+".BSPV",self.before_scan_pv) caput(scan_pv+".BSCD",1) caput(scan_pv+".BSWAIT","Wait") - caput(scan_pv+".ASPV",kwargs['after_scan_pv']) + caput(scan_pv+".ASPV",self.after_scan_pv) caput(scan_pv+".ASCD",1) caput(scan_pv+".ASWAIT","Wait") @@ -165,10 +189,9 @@ class ScanRecord: positioner_settling_time detector_settling_time - Previously: AfterScan_StrSeq """ - kwargs.setdefault(seq_num,10) + kwargs.setdefault('seq_num',10) kwargs.setdefault('positioner_settling_time',default_positioner_settling_time) kwargs.setdefault('detector_settling_time',default_detector_settling_time) @@ -176,7 +199,8 @@ class ScanRecord: scan_pv = self.ioc+"scan"+str(scan_dim) seq_num=kwargs['seq_num'] - after_scan_pv = userStringSeq_pvs(self.ioc, seq_num) + after_scan_pv = userStringSeq_pvs(self.ioc, seq_num)[0] + self.after_scan_pv = after_scan_pv #clear and write the after scan user sequence userStringSeq_clear(self.ioc,seq_num) @@ -184,11 +208,11 @@ class ScanRecord: #link 1 - clears positioners caput(after_scan_pv+".LNK1",scan_pv+'.P1AR'+" PP NMS") - caput(after_scan_pv+".DO1","Clear pos&rdbk PV's, etc") + caput(after_scan_pv+".STR1","Clear pos&rdbk PV's, etc") #link 2 - sets positioner mode to to abosolute caput(after_scan_pv+".LNK2",scan_pv+'.CMND'+" PP NMS") - caput(after_scan_pv+".DO2","ABSOLUTE") + caput(after_scan_pv+".STR2","ABSOLUTE") #link 3 - sets positioner delay time to default settling_time = kwargs['positioner_settling_time'] @@ -200,15 +224,18 @@ class ScanRecord: caput(after_scan_pv+".LNK4",scan_pv+'.DDLY'+" PP NMS") caput(after_scan_pv+".DO4",settling_time) - return after_scan_pv + return after_scan_pv+".PROC" ### Resetting: - def reset_scan_dim(self,scan_dim,detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv): + def reset_scan_dim(self,scan_dim,**kwargs): """ Resets all the scanRecords (scanDIM=1,2,3,4) for a given IOC uses Reset_Scan() **kwargs - scaler='y', only for Kappa ioc + detector_dictionary + trigger_dictionary + before_scan_pv + after_scan_pv Previously: Reset_ScanAll """ @@ -216,14 +243,18 @@ class ScanRecord: self.triggers_clear(scan_dim) self.positioners_clear(scan_dim) - self.detectors_set(scan_dim,detector_dictionary) - self.triggers_set(scan_dim,trigger_dictionary) - self.before_after_sequences_set(scan_dim,before_scan_pv,after_scan_pv) + if 'detector_dictionary' in kwargs: + self.detectors_set(scan_dim,kwargs['detector_dictionary']) + + if 'trigger_dictionary' in kwargs: + self.triggers_set(scan_dim,kwargs['trigger_dictionary']) + + self._before_after_scan_set(self,kwargs.update({'scan_dim':scan_dim})) self.detector_settling_time(scan_dim) self.positioner_settling_time(scan_dim) - def reset_all(self,detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv): + def reset_all(self): """ Resets all the scanRecords (scanDIM=1,2,3,4) for a given IOC uses Reset_Scan() @@ -235,7 +266,14 @@ class ScanRecord: for scan_dim in range(4,1): self.reset_scan_dim(scan_dim,{},{},'','') - self.reset_scan_dim(1,detector_dictionary,trigger_dictionary,before_scan_pv,after_scan_pv) + + kwargs = { + 'detector_dictionary':self.detector_dictionary, + 'trigger_dictionary':self.trigger_dictionary, + 'before_scan_pv':self.before_scan_pv, + 'after_scan_pv':self.after_scan_pv + } + self.reset_scan_dim(1,**kwargs) ### default setting def settings_defaults(self,scan_dim,verbose=True,**kwargs): @@ -374,9 +412,11 @@ class ScanRecord: detector_dictionary = {detNum:pv} """ scan_pv = self.ioc+"scan"+str(scan_dim) - for det_num in detector_dictionary.keys(): - det_pv=caget(scan_pv+".D"+det_num+"PV") - caput(det_pv,detector_dictionary[det_num]) + + if detector_dictionary != None: + for det_num in detector_dictionary.keys(): + det_pv=caget(scan_pv+".D"+det_num+"PV") + caput(det_pv,detector_dictionary[det_num]) def detector_settling_time(self,**kwargs): """ @@ -399,9 +439,10 @@ class ScanRecord: Previously: Clear_Scan_Triggers """ scan_pv = self.ioc+"scan"+str(scan_dim) - if len(trigger_dictionary.keys())>0: - for tigger_num in trigger_dictionary.keys(): - caput(scan_pv+".T"+str(tigger_num)+"PV",trigger_dictionary[tigger_num]) + if trigger_dictionary != None: + if len(trigger_dictionary.keys())>0: + for tigger_num in trigger_dictionary.keys(): + caput(scan_pv+".T"+str(tigger_num)+"PV",trigger_dictionary[tigger_num]) def triggers_clear(self,scan_dim,trigger_dictionary,verbose=True): """