diff --git a/Dasha_LCRCode.py b/Dasha_LCRCode.py index 867e104..bb7d69c 100644 --- a/Dasha_LCRCode.py +++ b/Dasha_LCRCode.py @@ -18,7 +18,9 @@ try: except OSError as ex: print("Warning:",ex) +# Maximum output voltage V_MAX = 25 # corresponds to the max RMS voltage of 25 V of KLC101 device +# NOTE: AC output of KLC101 is a square wave, RMS = Amplitude ############################################ @@ -410,39 +412,32 @@ def LCR_scan_func(handle:int, init_voltage:float, final_voltage:float, intensity_data = [] # To store data from each scan cwd = os.getcwd() # save original directory - # TODO: edit the helpe_scan_func and scanning loop below, after this, the code should be complete! - # possibly doesnt even need the initial and ffinal lims, no need to differentiate + # TODO: edit the helper_scan_func and scanning loop below, after this, the code should be complete! # NOTE: helper function for the scanning loop - def helper_scan_func(idx, bval, instr=handle, init_lim=init_lim, init_sweep=init_sweep, - subsequent_lim=subsequent_lim, subsequent_sweep=subsequent_sweep, sleep=5): # TODO: remove sleep function argument - if idx == 0: # for first iteration, sweep to one of the limits - write_no_echo(instr, f'{init_lim} {bval*10}') # convert back to kG - write_no_echo(instr, f'SWEEP {init_sweep}') - else: - write_no_echo(instr, f'{subsequent_lim} {bval*10}') # convert back to kG - write_no_echo(instr, f'SWEEP {subsequent_sweep}') - + def helper_scan_func(idx, voltage_val, instr=handle, sleep=2): + + # TODO: edit code block below for the LCR controller # read the actual voltage and print it out - actual_bval = sep_num_from_units(query_no_echo(instr, 'IMAG?'))[0]*0.1 # convert kG to T - print(f'Actual magnet strength: {actual_bval} T,', f'Target magnet strength: {bval} T') + # actual_voltage_val = sep_num_from_units(query_no_echo(instr, 'IMAG?'))[0]*0.1 # convert kG to T + actual_voltage_val = [0] - while abs(actual_bval - bval) > 0.0001: # if the actual voltage - time.sleep(5) # little break + print(f'Actual magnet strength: {actual_voltage_val} T,', f'Target magnet strength: {voltage_val} T') + + while abs(actual_voltage_val - voltage_val) > 0.0001: # if the actual voltage is not reached, keep + time.sleep(sleep) # little break actual_bval = sep_num_from_units(query_no_echo(instr, 'IMAG?'))[0]*0.1 # update the actual bval - print(f'Actual magnet strength: {actual_bval} T,', f'Target magnet strength: {bval} T') + print(f'Actual magnet strength: {actual_voltage_val} T,', f'Target magnet strength: {voltage_val} T') #scanning loop for i, bval in enumerate(voltage_lst): - if not loopscan_bool: helper_scan_func(i, bval) else: if i <= middle_index_voltage_lst: helper_scan_func(i, bval) else: - helper_scan_func(i, bval, instr=handle, init_lim=subsequent_lim, init_sweep=subsequent_sweep, - subsequent_lim=init_lim, subsequent_sweep=init_sweep, sleep=5) + helper_scan_func(i, bval, instr=handle, sleep=2) time.sleep(5) # we acquire with the LF @@ -470,19 +465,20 @@ def LCR_scan_func(handle:int, init_voltage:float, final_voltage:float, elapsed_time = (end_time - start_time) / 60 print('Scan time: ', elapsed_time, 'minutes') + # TODO: check all file paths if they are correct for Dasha write_no_echo(instr, f'LLIM {instr_bsettings[1][0]*10};ULIM {instr_bsettings[2][0]*10}') # reset the initial limits of the device after the scan if zerowhenfin_bool: write_no_echo(instr, 'SWEEP ZERO') # if switched on, discharges the magnet after performing the measurement loop above #save intensity & WL data as .txt - os.chdir('C:/Users/localadmin/Desktop/Users/Lukas') + os.chdir('C:/Users/localadmin/Desktop/Users/Dasha') # creates new folder for MAP data - new_folder_name = "Test_Map_" + f"{datetime.datetime.now().strftime('%Y_%m_%d_%H.%M')}" + new_folder_name = "Test_Map_" + f"{datetime.datetime.now().strftime('%Y_%m_%d_%H.%M')}" # TODO: add folder_name as function argument os.mkdir(new_folder_name) # Here the things will be saved in a new folder under user Lukas ! # IMPORTANT last / has to be there, otherwise data cannot be saved and will be lost!!!!!!!!!!!!!!!! - os.chdir('C:/Users/localadmin/Desktop/Users/Lukas/'+ new_folder_name) + os.chdir('C:/Users/localadmin/Desktop/Users/Dasha/'+ new_folder_name) intensity_data = np.array(intensity_data) np.savetxt(base_file_name + '.txt', intensity_data) @@ -491,9 +487,20 @@ def LCR_scan_func(handle:int, init_voltage:float, final_voltage:float, np.savetxt("Wavelength.txt", wl) -################################################################# END OF FUNCTION DEFS ########################################################################################### +################################################################# END OF FUNCTION DEFS ########################################################################################### # NOTE: RYAN INTRODUCED SOME FUNCTIONS HERE TO PERFORM THE SCAN + +# ENTER START AND END VOLTAGES, AS WELL AS VOLTAGE STEP SIZE HERE +start_voltage = 0 +end_voltage = 0.5 +voltage_stepsize = 0.25 + +#Here you can specify the filename of the map e.g. put experiment type, exposure time, used filters, etc.... +experiment_settings = 'PL_SP_700_LP_700_HeNe_52muW_exp_2s_Start_' +#The program adds the range of the scan as well as the resolution and the date and time of the measurement +experiment_name = f"{start_voltage}V_to_{end_voltage}V_{voltage_stepsize}V_{datetime.datetime.now().strftime('%Y_%m_%d_%H%M')}" + try: # initialise KLC connection # Find devices @@ -539,21 +546,10 @@ try: experiment.Load("Alison_08.07.24") # NOTE: this should be the experiment.ExperimentCompleted += experiment_completed # we are hooking a listener. - # experiment.SetValue(SpectrometerSettings.GratingSelected, '[750nm,1200][0][0]') + # experiment.SetValue(SpectrometerSettings.GratingSelected, '[750nm,1200][0][0]') # TODO: find out what these two lines of code do, leave commented as of (31.10.2024) # InitializerFilenameParams() - # ENTER START AND END VOLTAGES, AS WELL AS VOLTAGE STEP SIZE HERE - start_voltage = 0 - end_voltage = 0.5 - voltage_stepsize = 0.25 - - #Here you can specify the filename of the map e.g. put experiment type, exposure time, used filters, etc.... - experiment_settings = 'PL_SP_700_LP_700_HeNe_52muW_exp_2s_Start_' - #The program adds the range of the scan as well as the resolution and the date and time of the measurement - experiment_name = f"{start_voltage}V_to_{end_voltage}V_{voltage_stepsize}V_{datetime.datetime.now().strftime('%Y_%m_%d_%H%M')}" - # TODO: insert LCR rotation scan function here - # use this reference code for the LCR scan later on # sweep_b_val(powerbox_dualsupply, set_llim_bval, set_ulim_bval, set_res_bval, 'z-axis', # experiment_settings, base_file_name=experiment_name, zerowhenfin_bool=True, reversescan_bool=False) diff --git a/notes.txt b/notes.txt index 795b33e..4bf5965 100644 --- a/notes.txt +++ b/notes.txt @@ -1,4 +1,7 @@ -For the code to work, change the directory to load the KLCCommandLib_x64.dll file in 'KLCCommandLib64.py', line 5. +1. For the code to work, change the directory to load the KLCCommandLib_x64.dll file in 'KLCCommandLib64.py', line 5. The line of code is as follows: -klcLib=cdll.LoadLibrary(r"C:\Users\rtan\Documents\RyanWork2024\Dasha-LCR_Code\Thorlabs_KLC_PythonSDK\"KLCCommandLib_x64.dll") \ No newline at end of file +klcLib=cdll.LoadLibrary(r"C:\Users\rtan\Documents\RyanWork2024\Dasha-LCR_Code\Thorlabs_KLC_PythonSDK\"KLCCommandLib_x64.dll") + +2. Another issue is then importing the other needed folders, probs have to have all the required files in the same scan +script folder on the offline computer. \ No newline at end of file