diff --git a/iexcode/instruments/xrays.py b/iexcode/instruments/xrays.py index d9f2c917695aea3c4a594924bccf55fdc0ef1128..556e17e685228511cb1db9636b53b28c4c3ef9ef 100644 --- a/iexcode/instruments/xrays.py +++ b/iexcode/instruments/xrays.py @@ -9,6 +9,7 @@ from time import sleep from epics import caget,caput import iexcode.instruments.cfg as iex +from iexcode.instruments.conversions_constants import * from iexcode.instruments.SRS_current_amplifiers import * from iexcode.instruments.Keithley_current_amplifiers import * from iexcode.instruments.diagnostics import * diff --git a/iexcode/macros/commissioning.py b/iexcode/macros/commissioning.py index b4086a0d0696887867bf2be38abc78fad46ff068..7e9f22f01830cd655bfa738595a7b673b0dcccbb 100644 --- a/iexcode/macros/commissioning.py +++ b/iexcode/macros/commissioning.py @@ -604,7 +604,7 @@ def M0M1_steering(h_position,v_position,verbose=False): -def monoVslit_quick_scan(slit_name, **kwargs): +def monoVslit_quick_scan(slit_name,**kwargs): """ sets the slit to be narrow and scans along and across the grating at 500 eV to see if M0/M1 are steering the beam to the center of the grating diff --git a/iexcode/macros/start_of_the_week.py b/iexcode/macros/start_of_the_week.py index ec6907831c5fd48005ee64aa79a266dfb2f51e1d..977b2fe3790a3a98db6364788ba9a3ad0ca6b995 100644 --- a/iexcode/macros/start_of_the_week.py +++ b/iexcode/macros/start_of_the_week.py @@ -123,6 +123,202 @@ def interactive_fit_mda(val_name,scannum,det,FWHM_or_PolyOrder,fct,**kwargs): flagfit=2 return flagfit,val +def sotw_BLinit(branch): + """ + returns the init function for sotw + """ + if branch == 'c': + BL_init=ARPES_init + elif branch == 'd': + BL_init=kappa_init + else: + print_warning_message('Not a valid branch') + BL_init=None + return BL_init + +def sotw_setup(grt,branch,wait,**kwargs): + """ + All the start_of_the_week initalization stuff + doesn't get run if kwargs['repeat']=False + """ + # checkin branch is defined and initializing BLconfig + branch=branch.lower() + BL_init = sotw_BLinit(branch) + + if branch == 'd': + cam_exposure_time(m3r_camNum,0.001) + + + + BL_init('staff',reset=True,set_folders=True,xrays=True) + switch_branch(branch) + log_name_set('StartOfTheWeek_log.txt') + log_print("\n\n================== Start Of The Week @ "+today('slash')+':\n') + + #switching grating if needed + grating(grt) + + ########################################################################### + ### stuff that requires beam + ########################################################################### + ### Wait for next 8AM: + if wait: + t = datetime.today() + if 0 <= t.hour <= 8: + wait_for_it(0,8,5) + else: + wait_for_it(1,8,5) + + ### checking branch shutter: + branch_shutter_open() + main_shutter_open() + + if main_shutter_status() == False: + print_warning_message('Aborting... main shutter did not open') + return + + if branch_shutter_status() == False: + print_warning_message('Aborting... '+branch+'-branch shutter did not open') + return + + ### checking QP ratio: + QP=ID_QP_ratio_get()[0] + if QP != 100: + foo=input('QP on!!! Continue (y or n)? >') + if foo.lower() == 'y' or foo.lower() == 'yes': + status = 'Continueing' + else: + status = 'Aborting...' + print(status) + return + + ### checking ID: + polarization(kwargs['mode']) + +def sotw_ID_steering(detCA4,**kwargs): + """ + slit1A/ID_steering + """ + #scanning + ID_steering_scans(**kwargs) + #plotting + scanNum_h = last_mda()-1 + scanNum_v = last_mda() + + flagfit, h = interactive_fit_mda('H_center',scanNum_h,detCA4,1,'gauss',xrange=[-1,1]) + if flagfit == '': + return + + flagfit, v = interactive_fit_mda('V_center',scanNum_v,detCA4,1,'gauss',xrange=[-1,1],val_name='V_center') + if flagfit == '': + return + try: + ID_steering_message(h,v) + flag = interactive_fct() + except: + print('\nUnable to calculate ID steering') + print('steering out => move beam more positive (10 urad ~ 0.25 mm)') + print('steering up => move beam more positive (10 urad ~ 0.25 mm)') + flag = interactive_fct() + return flag + +def sotw_wire(detH,detV,**kwargs): + """ + """ + #scanning + wire_scans(**kwargs) + + #plotting + try: + scanNum_h = last_mda()-1 + scanNum_v = last_mda() + plot_mda(scanNum_h,detH,scanNum_v,detV,title='wire-H (blue) & wire-V (orange)');plt.show() + except: + print('Unable to plot. Try:') + print("plot_mda("+str(scanNum_h)+","+str(detH)+","+str(scanNum_v)+","+str(detV)+",title='wire-H (blue) & wire-V (orange)');plt.show()") + flag = interactive_fct() + return flag + +def sotw_slit_vs_mono(grt,slit_name,detDiode,**kwargs): + """ + """ + for slit_name in ['slit2B','slit1A']: + message={'slit2B': 'M1 alignment and slit center','slit1A':'slit center'} + print('\n---------- Scanning '+slit_name+':\n') + message[slit_name] + flag=2 + list_position = [grt,0,0,0,0] + flag = 2 + while flag>1: + #scanning + if kwargs['monoVslit_quick']: + monoVslit_quick_scan(slit_name,**kwargs) + else: + monoVslit_full_profile_scan(slit_name,**kwargs) + #plotting + c = mono_grating_density_get()/1200 + + scanNum_v = last_mda()-1 + scanNum_h = last_mda() + + if kwargs['monoVslit_quick']: + flagfit, h = interactive_fit_mda('H_center',scanNum_h,detDiode,1,'gauss',xrange=[-1,1]) + if flagfit == '': + return + flagfit, v = interactive_fit_mda('V_center',scanNum_v,detDiode,c,'gauss',xrange=[-1,1]) + if flagfit == '': + return + flag = interactive_fct() + + print('\nBeam position - '+slit_name[-2:]+':') + print(f" - vertical: V = {round(v,3)}") + print(f" - horizontal: H = {round(h,3)}") + + if slit_name == 'slit2B': + #beam steering calculations + new_roll = M0M1_steering(h,v) + list_position[2] = v + list_position[1] = h + + foo = input('\nDo you want to steer M1 (y or n)?') + if foo[0].lower() == 'y': + new_roll = input2float('New M1 roll value => ',new_roll) + try: + FMB_mirror_move(1,'RZ',new_roll) + sleep(2) + FMB_mirror_get(1) + print('\nrepeating scans...') + flag == 2 + except: + print('\invalid input; unable to move M1') + flag = interactive_fct() + + #update M1 dictionary + foo=input('Do you want to update the M1 (y or n)? >') + if foo[0].lower() == 'y': + update_mirror_dict(1) + if flag == '': + return + + elif slit_name == 'slit1A': + list_position[4] = v + list_position[3] = h + + if flag == '': + return + flag = 2 + + #update slit dictionary + print('\nBeam center fit @ ['+grt+',2V,2H,1V,1H]:'+str(list_position)) + + foo=input('Do you want to update the slit dictionary (y or n)? >') + if foo[0].lower() == 'y': + slit_list=input('do you want to use '+str(list_position)+' (y or n)? >') + if foo[0].lower() == 'y': + update_slit_dict(list_position) + else: + update_slit_dict() + def StartOfTheWeek(grt,branch,wait=False,**kwargs): """ This should be run every at the start of every week; 50 min total. @@ -168,69 +364,14 @@ def StartOfTheWeek(grt,branch,wait=False,**kwargs): print_warning_message(scan+" is not a valid scan scanType=['slit1','wire','flux','monoVslit']") return - # checkin branch is defined and initializing BLconfig - branch=branch.lower() - if branch == 'c': - BL_init=ARPES_init - elif branch == 'd': - BL_init=kappa_init - cam_exposure_time(m3r_camNum,0.001) - else: - print_warning_message('Not a valid branch') - return - if kwargs['repeat']: #check to see if init is defined + BL_init=sotw_BLinit(branch) if BLconfig_branch() != branch: BL_init('staff',reset=True,set_folders=False,xrays=True) else: - BL_init('staff',reset=True,set_folders=True,xrays=True) - switch_branch(branch) - log_name_set('StartOfTheWeek_log.txt') - log_print("\n\n================== Start Of The Week @ "+today('slash')+':\n') - - #switching grating if needed - grating(grt) - - ########################################################################### - ### stuff that requires beam - ########################################################################### - ### Wait for next 8AM: - if wait: - t = datetime.today() - if 0 <= t.hour <= 8: - wait_for_it(0,8,5) - else: - wait_for_it(1,8,5) - - ### checking branch shutter: - branch_shutter_open() - main_shutter_open() - - if main_shutter_status() == False: - print_warning_message('Aborting... main shutter did not open') - return - - if branch_shutter_status() == False: - print_warning_message('Aborting... '+branch+'-branch shutter did not open') - return + sotw_setup(grt,branch,wait,**kwargs) - ### checking QP ratio: - QP=ID_QP_ratio_get()[0] - if QP != 100: - foo=input('QP on!!! Continue (y or n)? >') - if foo.lower() == 'y' or foo.lower() == 'yes': - status = 'Continueing' - else: - status = 'Aborting...' - print(status) - return - - ### checking ID: - polarization(kwargs['mode']) - - ### Ready to start: - scanNum = mda_fileNum() ########################################################################### ### scanning ########################################################################### @@ -240,140 +381,31 @@ def StartOfTheWeek(grt,branch,wait=False,**kwargs): print("\n\n================== Slit 1A scans:") flag=2 while flag>1: - #scanning - ID_steering_scans(**kwargs) - #plotting - scanNum_h = last_mda()-1 - scanNum_v = last_mda() - - flagfit, h = interactive_fit_mda('H_center',scanNum_h,detCA4,1,'gauss',xrange=[-1,1]) - if flagfit == '': - return - - flagfit, v = interactive_fit_mda('V_center',scanNum_v,detCA4,1,'gauss',xrange=[-1,1],val_name='V_center') - if flagfit == '': - return - try: - ID_steering_message(h,v) - flag = interactive_fct() - except: - print('\nUnable to calculate ID steering') - print('steering out => move beam more positive (10 urad ~ 0.25 mm)') - print('steering up => move beam more positive (10 urad ~ 0.25 mm)') - flag = interactive_fct() - + flag = sotw_ID_steering(detCA4,**kwargs) if flag == '': return - diagnostic('mesh_W','out') ###### Wire scans: if 'wire' in kwargs['scanType']: print("\n\n================== Slit 1A scans:") - - #scanning - wire_scans(**kwargs) - - #plotting - try: - scanNum_h = last_mda()-1 - scanNum_v = last_mda() - plot_mda(scanNum_h,detH,scanNum_v,detV,title='wire-H (blue) & wire-V (orange)');plt.show() - except: - print('Unable to plot. Try:') - print("plot_mda("+str(scanNum_h)+","+str(detH)+","+str(scanNum_v)+","+str(detV)+",title='wire-H (blue) & wire-V (orange)');plt.show()") - + flag = sotw_wire(detH,detV,**kwargs) + if flag == '': + return ###### Mono/slit scans: if 'monoVslit' in kwargs['scanType']: - #checking that detDiode is in if not kwargs['detDiode']: foo=input('What is the detector number for mono scans (make sure it is IN!)? >') detDiode=int(foo) else: foo=input('Is detector D'+str(kwargs['detDiode'])+' in direct beam (y or n)? >') - print("\n\n================== Mono/slit scans:") - - for slit_name in ['slit2B','slit1A']: - # slit2B => M1 alignment - print('\n---------- Scanning '+slit_name+':\n') - flag=2 - - list_position = [grt,0,0,0,0] - while flag>1: - #scanning - if kwargs['monoVslit_quick']: - monoVslit_quick_scan(slit_name,**kwargs) - else: - monoVslit_full_profile_scan(slit_name,**kwargs) - #plotting - c = mono_grating_density_get()/1200 - - scanNum_v = last_mda()-1 - scanNum_h = last_mda() - - if kwargs['monoVslit_quick']: - flagfit, h = interactive_fit_mda('H_center',scanNum_h,detDiode,1,'gauss',xrange=[-1,1]) - if flagfit == '': - return - flagfit, v = interactive_fit_mda('V_center',scanNum_v,detDiode,c,'gauss',xrange=[-1,1]) - if flagfit == '': - return - flag = interactive_fct() - - print('\nBeam position - '+slit_name[-2:]+':') - print(f" - vertical: V = {round(v,3)}") - print(f" - horizontal: H = {round(h,3)}") - - if slit_name == 'slit2B': - #beam steering calculations - new_roll = M0M1_steering(h,v) - list_position[4] = v - list_position[3] = h - - foo = input('\nDo you want to steer M1 (y or n)?') - if foo[0].lower() == 'y': - new_roll = input2float('New M1 roll value => ',new_roll) - try: - FMB_mirror_move(1,'RZ',new_roll) - sleep(2) - FMB_mirror_get(1) - print('\nrepeating scans...') - flag == 2 - except: - print('\invalid input; unable to move M1') - flag = interactive_fct() - - elif slit_name == 'slit1A': - list_position[2] = v - list_position[1] = h - - if flag == '': - return - flag = 2 - - #update slit dictionary - print('\nBeam center fit @ ['+grt+',2V,2H,1V,1H]:'+str(list_position)) - - foo=input('Do you want to update the slit dictionary (y or n)? >') - if foo[0].lower() == 'y': - slit_list=input('do you want to use '+str(list_position)+' (y or n)? >') - if foo[0].lower() == 'y': - update_slit_dict(list_position) - else: - update_slit_dict() - - #update M1 dictionary - foo=input('Do you want to update the M1 (y or n)? >') - if foo[0].lower() == 'y': - update_mirror_dict(1) - if flag == '': - return - - + sotw_slit_vs_mono(grt,slit_name,detDiode,**kwargs) + + ###### Check flux: if 'flux' in kwargs['scanType']: print("\n\n================== Check Flux:")