From b7bb71dd2faa9047d1126aa647401aa2ff7865c8 Mon Sep 17 00:00:00 2001 From: jmcchesn <jmcchesn@aps.anl.gov> Date: Thu, 8 Sep 2022 10:34:06 -0500 Subject: [PATCH] vortex updated --- iexcode/cheatsheet.txt | 13 +- iexcode/instruments/scanRecord.py | 12 +- iexcode/instruments/vortex.py | 210 +++++++++++++----------------- 3 files changed, 113 insertions(+), 122 deletions(-) diff --git a/iexcode/cheatsheet.txt b/iexcode/cheatsheet.txt index a33f305..1a5bfd1 100644 --- a/iexcode/cheatsheet.txt +++ b/iexcode/cheatsheet.txt @@ -139,15 +139,26 @@ resolution => gives the resolution for the current settings scaler_cts => sets the scaler counter for the current endstation #scanRecord: functions and class for handling the scanRecord +saveData_get_all => returns dictions of fileSystem,subDir,scanNumber,baseName ScanRecord => class for handling scanRecord_user scan_fillin => same as iex.BL.mda.fillin scan_fillin_table => same as iex.BL.mda.fillin_table scan_go => same as iex.BL.mda.go +.trigger_get +.trigger_set +.trigger_clear +.detectors_set +detectors_clear => clears all +.fileNum +.lastFileNum +.filepath +.prefix .current_run .user_name .empty_scan => scan with no positioners .time_scan => scan with positioner readback as time and detector settling as minutes -.lastFileNum + + #Scienta: base functions for taking spectra, called by electron_analyzer diff --git a/iexcode/instruments/scanRecord.py b/iexcode/instruments/scanRecord.py index 98a7a31..2fc7d39 100644 --- a/iexcode/instruments/scanRecord.py +++ b/iexcode/instruments/scanRecord.py @@ -5,7 +5,6 @@ import time from epics import caget, caput, PV import iexcode.instruments.cfg as iex - from iexcode.instruments.utilities import dateandtime, print_warning_message from iexcode.instruments.userCalcs import userStringSeq_pvs,userStringSeq_clear from iexcode.instruments.shutters import shutter_check @@ -535,13 +534,22 @@ class ScanRecord: Clear all scan detectors triggers trigger_dictionary = {trigger_num:pv} - 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]) + def triggers_get(self,scan_dim): + """ + returns a dictionary of the current scan striggers for scan_dim + """ + scan_pv = self.ioc+"scan"+str(scan_dim) + scan_trigger = {} + for tigger_num in range(1,5): + scan_trigger.update({tigger_num:caget(scan_pv+".T"+str(tigger_num)+"PV")}) + + def triggers_clear(self,scan_dim,trigger_dictionary,verbose=True): """ Clear all scan detectors triggers diff --git a/iexcode/instruments/vortex.py b/iexcode/instruments/vortex.py index e813756..b57d15d 100644 --- a/iexcode/instruments/vortex.py +++ b/iexcode/instruments/vortex.py @@ -1,148 +1,120 @@ +from this import d +from epics import caput, caget + +import iexcode.instruments.cfg as iex +from iexcode.instruments.scanRecord import saveData_get_all + +vortex_pv = "29idVORTEX:" +scaler_pv = '29idMZ0:scaler1.TP' +calc_pv = '29idKappa:userCalcOut3.A' +vortex_power_pv = '29idd:Unidig1Bo1' +transform_pv = '29idd:userTran1' + #Define caput with wait function def caputw(PVname,PVinput): return caput(PVname,PVinput,wait=True,timeout = 100000) -def vortex(energy): - '''Sets the energy window for the vortex''' - cen, wid = vortex_Ecal(energy) - set_roi1(cen,wid) - caput('29idKappa:userCalcOut3.A',energy) - - -def set_roi1(cen,wid): - caput('29idVORTEX:mca1.R0LO',round(cen-wid/2)) - caput('29idVORTEX:mca1.R0HI',round(cen+wid/2)) - -def set_roi2(cen,wid): - caput('29idVORTEX:mca1.R1LO',round(cen-wid/2)) - caput('29idVORTEX:mca1.R1HI',round(cen+wid/2)) - -def vortex_Ecal(energy): - cen = 12.8 + 0.72*energy - wid = 120 - return cen, wid +def mca_energy(energy): + ''' + Sets the energy window for the vortex + ''' + #energy window calc + center = 12.8 + 0.72*energy + width = 120 + #set hi and low + caput(vortex_pv+'mca1.R0LO',round(center-width/2)) + caput(vortex_pv+'mca1.R0HI',round(center-width/2)) + #pv to store energy set point + caput(calc_pv,energy) -def mcacounttime(t): - '''Sets acquisition time for vortex and SRS to t(s)''' - caput('29idVORTEX:mca1.PRTM',t) - caput('29idMZ0:scaler1.TP',t) +def mca_scaler(time_sec): + ''' + Sets acquisition time for vortex and SRS to time_sec + ''' + caput(vortex_pv+'mca1.PRTM',time_sec) + caput(scaler_pv,time_sec) -def runmca(t): - caput('29idVORTEX:mca1.PRTM',t) +def mca_run(time_sec): + caput(vortex_pv+'mca1.PRTM',time_sec) sleep(0.1) - caputw('29idVORTEX:mca1EraseStart',1) + caput(vortex_pv'mca1EraseStart',1,wait=True,timeout = 100000) + -def mcaoff(): +def mca_off(): '''Power vortex OFF''' - caput('29idd:Unidig1Bo1',1) + caput(vortex_power_pv,1) print('Vortex power OFF') -def mcaon(): +def mca_on(): '''Power vortex ON''' - caput('29idd:Unidig1Bo1',0) + caput(vortex_power_pv,0) print('Vortex power ON') +def _mca_file_setup(): + mda_saveData=saveData_get_all(iex.BL.mda.ioc) + caput(vortex_pv+'saveData_fileSystem',mda_saveData[fileSystem]) + caput(vortex_pv+'saveData_subDir', '/'+ mda_saveData['subDir']+'/S'+str(mda_saveData['scanNumber'])) + caput(vortex_pv+'saveData_scanNumber',1) - -def mcascan(add_vortex=True,save_image=False): +def _vortex_detector_dictionary(add_mca): + d = { + 16:vortex_pv+":mca1.R0", + 17:vortex_pv+":mca1.R1", + 49:transform_pv+".D", + 50:transform_pv+".E", + } + if add_mca == False: + for key in d.keys(): + d[key]='' + return d + +def _vortex_trigger_dictionary(save_image,trig_num=2): + if save_image: + d = {trig_num:vortex_pv+'scanH.EXSC'} + else: + d = {trig_num:vortex_pv+'mca1EraseStart'} + + return d + +def scanmca(add_mca=True,save_image=False,**kwargs): ''' add_vortex=True (default): set up scan to save vortex as a detector add_vortex=False: remove the vortex from the scan detector save_image=True: save the individual mca files + **kwargs: + trig_num ''' - - def scan_num(): - scan = caget('29idKappa:saveData_message') - loc = scan.find('.') - if (loc==-1): - scannum=0 - else: - scannum =int(scan[loc-4:loc]) - return scannum - - def mcafileinit(): - # mainpath = '/net/s4data/export/sector4/4idc/mda' - scanrecpath = caget('29idKappa:saveData_subDir') - scan = scan_num()+1 - caput('29idVORTEX:saveData_subDir', '/'+ scanrecpath+'/S'+str(scan)) - caput('29idVORTEX:saveData_scanNumber',1) - if add_vortex: + if trig_num in kwargs: + trig_num = kwargs['trig_num'] + else: + trig_num = 2 + if add_mca: + #add trigger and detectors + iex.BL.mda.triggers_set(_vortex_trigger_dictionary(save_image,trig_num)) + iex.BL.mda.detectors_set(_vortex_detector_dictionary(add_mca)) + sleep(1) if save_image: - mcafileinit() + _mca_file_setup() chkmcasave() - caput('29idKappa:scan1.T2PV','29idVORTEX:scanH.EXSC') - caput('29idKappa:scan1.D16PV','29idVORTEX:mca1.R0') - caput('29idKappa:scan1.D17PV','29idVORTEX:mca1.R1') - caput('29idKappa:scan1.D49PV','29idd:userTran1.D') - caput('29idKappa:scan1.D50PV','29idd:userTran1.E') - sleep(1) - else: - caput('29idKappa:scan1.T2PV','29idVORTEX:mca1EraseStart') - caput('29idKappa:scan1.D16PV','29idVORTEX:mca1.R0') - caput('29idKappa:scan1.D17PV','29idVORTEX:mca1.R1') - caput('29idKappa:scan1.D49PV','29idd:userTran1.D') - caput('29idKappa:scan1.D50PV','29idd:userTran1.E') - sleep(1) else: - caput('29idKappa:scan1.T2PV','') - caput('29idKappa:scan1.D16PV','') - caput('29idKappa:scan1.D17PV','') - caput('29idKappa:scan1.D49PV','') - caput('29idKappa:scan1.D50PV','') + #remove vortex trigger and detectors + iex.BL.mda.triggers_clear() + iex.BL.mda.detectors_set(_vortex_detector_dictionary(add_mca)) sleep(1) -def chkmcasave(): - if (caget('29idKappa:scan1.T2PV')=='29idVORTEX:scanH.EXSC'): +def mca_check_save(**kwargs): + """ + checks if vortex is being triggered + **kwargs: + scan_dim => 1 default + trig_num => 2 default + """ + kwargs.setdefault('scan_dim',1) + kwargs.setdefault('trig_num',2) + d=iex.BL.mda.triggers_get(kwargs['scan_dim']) + if d[kwargs['trig_num']] == vortex_pv+'scanH.EXSC': print('Saving mca files') - mcafileinit() - + _mca_file_setup() -# def savemca(): -# caput('29idKappa:scan1.T2PV','29idVORTEX:scanH.EXSC') -# caput('29idKappa:scan1.D16PV','29idVORTEX:mca1.R0') -# caput('29idKappa:scan1.D17PV','29idVORTEX:mca1.R1') -# caput('29idKappa:scan1.D49PV','29idd:userTran1.D') -# caput('29idKappa:scan1.D50PV','29idd:userTran1.E') -# sleep(1) - -# def nosavemca(): -# caput('29idKappa:scan1.T2PV','29idVORTEX:mca1EraseStart') -# caput('29idKappa:scan1.D16PV','29idVORTEX:mca1.R0') -# caput('29idKappa:scan1.D17PV','29idVORTEX:mca1.R1') -# caput('29idKappa:scan1.D49PV','29idd:userTran1.D') -# caput('29idKappa:scan1.D50PV','29idd:userTran1.E') -# sleep(1) - -# def nomca(): -# caput('29idKappa:scan1.T2PV','') -# caput('29idKappa:scan1.D16PV','') -# caput('29idKappa:scan1.D17PV','') -# caput('29idKappa:scan1.D49PV','') -# caput('29idKappa:scan1.D50PV','') -# sleep(1) - -# def scan_num(): -# scan = caget('29idKappa:saveData_message') -# loc = scan.find('.') -# if (loc==-1): -# scannum=0 -# else: -# scannum =int(scan[loc-4:loc]) -# return scannum - -# def mcafileinit(): -# # mainpath = '/net/s4data/export/sector4/4idc/mda' -# scanrecpath = caget('29idKappa:saveData_subDir') -# scan = scan_num()+1 -# caput('29idVORTEX:saveData_subDir', '/'+ scanrecpath+'/S'+str(scan)) -# caput('29idVORTEX:saveData_scanNumber',1) - - -# def chkmcasave(): -# if (caget('29idKappa:scan1.T2PV')=='29idVORTEX:scanH.EXSC'): -# print('Saving mca files') -# mcafileinit() - - -- GitLab