diff --git a/hp4155/ADU for double gate devices_version_3/double_gate_ADU.py b/hp4155/ADU for double gate devices_version_3/double_gate_ADU.py deleted file mode 100644 index 3097116e1a7de2c8f531611bbd7f9d2ef7e47dc3..0000000000000000000000000000000000000000 --- a/hp4155/ADU for double gate devices_version_3/double_gate_ADU.py +++ /dev/null @@ -1,545 +0,0 @@ -import sys -sys.path.insert(0, './lib') -sys.path.insert(0, '..') #append parent directory - - -from interface import * -from help import * -from measurements import * -import configparser - - -#setup user interface -ui = interface() -device = hp4155a.HP4155a('GPIB0::17::INSTR') - -def on_start_clicked(b): - with ui.output: - clear_output() - #disable all widgets - change_state(all_widgets) - - #additional code to check smu configuration fast without modifing a lot of code - try: - check_configuration(ui.sample) - except Exception as e: - error_box(e) - change_state(ui.all_widgets) - return - - #setup the devicr - device.reset() - - #setup sweep measurement mode - device.measurement_mode('SWE') - - #disable all irrelevant units - device.disable_not_smu() - - - - if ui.transfer_check.value == True: - if ui.transfer_gates.value == 'VTG': - - - points = number_of_points(Vds_transfer) - - var2=device.var2_dict() #Vds_output is always used in tranfer curve with the same config - var2.update( - start=Vds_transfer['start'].value, - step=Vds_transfer['step'].value, - points=points, - comp=Vds_transfer['comp'].value, - pcomp=Vds_transfer['pcomp'].value, - stop = Vds_transfer['stop'].value #not important for setting VAR2 only parameters in file - ) - - # also drain smu is the same - smu_d = device.smu_dict() - smu_d.update() - match transfer_gates.value: - case 'VTG' if check_values(Vtg_transfer,'primary') and check_values(Vds_transfer,'secondary'): - smu_t = device.smu_dict() - smu_t.update(vname = 'VTG',iname='ITG',mode = 'V',func='VAR1') - smu_b = device.smu_dict() - smu_b.update(vname = 'VBG',iname='IBG',mode = 'COMM',func = 'CONS') - - var1 = device.var1_dict() - var1.update( - mode=Vtg_transfer['hyst'].value, - start=Vtg_transfer['start'].value, - stop=Vtg_transfer['stop'].value, - step=Vtg_transfer['step'].value, - comp =Vtg_transfer['comp'].value, - pcomp=Vtg_transfer['pcomp'].value - ) - #define the final dict - meas_dict = { - "SAMPLE":sample_copy, - "MAP" : map, - "SMU_T":smu_t, - "SMU_D": smu_d, - "SMU_B":smu_b, - "SMU_S":smu_s, - "VAR1":var1, - "VAR2":var2, - "PLOT": plot, # plot in the tool - "INTEGRATION": integration_transfer.value, - } - #measure (later) - Transfer_VTG(device,meas_dict) - - case 'VBG' if check_values(Vbg_transfer,'primary') and check_values(Vds_transfer,'secondary'): - smu_t = device.smu_dict() - smu_t.update(vname = 'VTG',iname='ITG',mode = 'COMM',func='CONS') - smu_b = device.smu_dict() - smu_b.update(vname = 'VBG',iname='IBG',mode = 'V',func = 'VAR1') - - var1 = device.var1_dict() - var1.update( - mode=Vbg_transfer['hyst'].value, - start=Vbg_transfer['start'].value, - stop=Vbg_transfer['stop'].value, - step=Vbg_transfer['step'].value, - comp =Vbg_transfer['comp'].value, - pcomp=Vbg_transfer['pcomp'].value - ) - - #define the final dict - meas_dict = { - "SAMPLE":sample_copy, - "MAP" : map, - "SMU_T":smu_t, - "SMU_D": smu_d, - "SMU_B":smu_b, - "SMU_S":smu_s, - "VAR1":var1, - "VAR2":var2, - "PLOT": plot, # plot in the tool - "INTEGRATION": integration_transfer.value, - } - #measure (later) - Transfer_VBG(device,meas_dict) - - - case 'BOTH' if check_values(Vbg_transfer,'synchronous') and check_values(Vds_transfer,'secondary') and check_values(Vtg_transfer,'primary'): - smu_t = device.smu_dict() - smu_t.update(vname = 'VTG',iname='ITG',mode = 'V',func='VAR1') - smu_b = device.smu_dict() - smu_b.update(vname = 'VBG',iname='IBG',mode = 'V',func = 'VARD') - - var1 = device.var1_dict() - var1.update( - mode=Vtg_transfer['hyst'].value, - start=Vtg_transfer['start'].value, - stop=Vtg_transfer['stop'].value, - step=Vtg_transfer['step'].value, - comp =Vtg_transfer['comp'].value, - pcomp=Vtg_transfer['pcomp'].value - ) - - #calculate parameters for VARD - ratio,offset = calculate_line(Vtg_transfer,Vbg_transfer) - - # update VBG step - Vbg_transfer["step"].value = Decimal(str(ratio)) * Decimal(str(Vtg_transfer["step"].value)) - - - vard = device.vard_dict() - vard.update( - offset = offset, - ratio = ratio, - comp = Vbg_transfer["comp"].value, - pcomp = Vbg_transfer["pcomp"].value, - start = Vbg_transfer["start"].value, - step = Vbg_transfer['step'].value, - stop = Vbg_transfer['stop'].value, - ) - - #define the final dict - meas_dict = { - "SAMPLE":sample_copy, - "MAP" : map, - "SMU_T":smu_t, - "SMU_D": smu_d, - "SMU_B":smu_b, - "SMU_S":smu_s, - "VAR1":var1, - "VAR2":var2, - "PLOT": plot, # plot in the tool - "INTEGRATION": integration_transfer.value, - "VARD":vard - } - - #measure (later) - Transfer_BOTH(device,meas_dict) - case _ : - information_box("Transfer Measurement skipped due to invalid parameters") - - if output_check.value == True: - smu_d = device.smu_dict() - smu_d.update(vname='VDS',iname='ID',mode = 'V',func = 'VAR1') - - var1 = device.var1_dict() - var1.update( - mode=Vds_output['hyst'].value, - start=Vds_output['start'].value, - stop=Vds_output['stop'].value, - step=Vds_output['step'].value, - comp =Vds_output['comp'].value, - pcomp=Vds_output['pcomp'].value - ) - - plot = plot_output.copy() - for key,value in plot.items(): - plot[key] = value.value - - match output_gates.value: - case 'VTG' if check_values(Vds_output,'primary') and check_values(Vtg_output,'secondary'): - smu_t=device.smu_dict() - smu_t.update(vname ='VTG',iname = 'ITG',mode = 'V',func='VAR2') - - smu_b= device.smu_dict() - smu_b.update(vname='VBG',iname='IBG',mode = 'COMM',func='CONS') - - points = number_of_points(Vtg_output) - - var2=device.var2_dict() - var2.update( - start=Vtg_output['start'].value, - step=Vtg_output['step'].value, - points=points, - comp=Vtg_output['comp'].value, - pcomp=Vtg_output['pcomp'].value, - stop = Vtg_output['stop'].value - ) - - meas_dict = { - "SAMPLE":sample_copy, - "MAP" : map, - "SMU_T":smu_t, - "SMU_D": smu_d, - "SMU_B":smu_b, - "SMU_S":smu_s, - "VAR1":var1, - "VAR2":var2, - "PLOT": plot, # plot in the tool - "INTEGRATION": integration_output.value, - } - - #measure later - Output_VTG(device,meas_dict) - - case 'VBG' if check_values(Vds_output,'primary') and check_values(Vbg_output,'secondary'): - smu_t=device.smu_dict() - smu_t.update(vname ='VTG',iname = 'ITG',mode = 'COMM',func='CONS') - - smu_b= device.smu_dict() - smu_b.update(vname='VBG',iname='IBG',mode = 'V',func = 'VAR2') - - points = number_of_points(Vbg_output) - - var2=device.var2_dict() - var2.update( - start=Vbg_output['start'].value, - step=Vbg_output['step'].value, - points=points, - comp=Vbg_output['comp'].value, - pcomp=Vbg_output['pcomp'].value, - stop = Vbg_output['stop'].value - ) - - meas_dict = { - "SAMPLE":sample_copy, - "MAP" : map, - "SMU_T":smu_t, - "SMU_D": smu_d, - "SMU_B":smu_b, - "SMU_S":smu_s, - "VAR1":var1, - "VAR2":var2, - "PLOT": plot, # plot in the tool - "INTEGRATION": integration_output.value, - } - - #measure later - Output_VBG(device,meas_dict) - - - case 'BOTH' if check_values(Vds_output,'primary') and check_values(Vtg_output,'secondary') and check_values(Vbg_output,'secondary'): - smu_t=device.smu_dict() - smu_t.update(vname ='VTG',iname = 'ITG',mode = 'V',func='VAR2') - - smu_b= device.smu_dict() - smu_b.update(vname='VBG',iname='IBG',mode = 'V',func = 'CONS') - - points = number_of_points(Vtg_output) - - var2=device.var2_dict() - var2.update( - start=Vtg_output['start'].value, - step=Vtg_output['step'].value, - points=points, - comp=Vtg_output['comp'].value, - pcomp=Vtg_output['pcomp'].value, - stop = Vtg_output['stop'].value - ) - - points_VBG = number_of_points(Vbg_output) - values_VBG = np.linspace(Vbg_output["start"].value,Vbg_output["stop"].value,num = points_VBG,endpoint= True) - - #there is not such unit we create it with a loop - var3 = { - "start":Vbg_output['start'].value, - "step":Vbg_output['step'].value, - "points":points_VBG, - "comp":Vbg_output['comp'].value, - "stop" : Vbg_output['stop'].value, - "values" : values_VBG - } - meas_dict = { - "SAMPLE":sample_copy, - "MAP" : map, - "SMU_T":smu_t, - "SMU_D": smu_d, - "SMU_B":smu_b, - "SMU_S":smu_s, - "VAR1":var1, - "VAR2":var2, - "VAR3":var3, - "PLOT": plot, # plot in the tool - "INTEGRATION": integration_output.value, - } - - #measure later - Output_BOTH(device,meas_dict) - - case _ : - information_box("Output Measurement skipped due to invalid parameters") - - - if gatediode_check.value == True: - #drain is disabled - device.smu_disable(map['D']) - - # VAR1 is set with the same interface - var1 = device.var1_dict() - var1.update( - mode=Vg_gatediode['hyst'].value, - start=Vg_gatediode['start'].value, - stop=Vg_gatediode['stop'].value, - step=Vg_gatediode['step'].value, - comp =Vg_gatediode['comp'].value, - pcomp=Vg_gatediode['pcomp'].value - ) - - plot = plot_gatediode.copy() - for key,value in plot.items(): - plot[key] = value.value - - match terminal.value: - case 'VTG' if check_values(Vg_gatediode,'primary'): - smu_t=device.smu_dict() - smu_t.update(vname ='VTG',iname = 'ITG',mode = 'V',func='VAR1') - - meas_dict = { - "SAMPLE":sample_copy, - "MAP" : map, - "SMU_T":smu_t, - "SMU_S":smu_s, - "VAR1":var1, - "PLOT": plot, # plot in the tool - "INTEGRATION": integration_gatediode.value, - } - #measure later - Gatediode_VTG(device,meas_dict) - - case 'VBG' if check_values(Vg_gatediode,'primary'): - smu_b=device.smu_dict() - smu_b.update(vname ='VBG',iname = 'IBG',mode = 'V',func='VAR1') - - meas_dict = { - "SAMPLE":sample_copy, - "MAP" : map, - "SMU_B":smu_b, - "SMU_S":smu_s, - "VAR1":var1, - "PLOT": plot, # plot in the tool - "INTEGRATION": integration_gatediode.value, - } - #measure later - Gatediode_VBG(device,meas_dict) - - case _ : - information_box("Gatediode Measurement skipped due to invalid parameters") - - information_box("Measurement finished!") - enable_widgets(all_widgets) - -def on_export_ini_clicked(b): - with output: - disable_widgets(all_widgets) - config = configparser.ConfigParser() - default_filename = 'ADU_double_gate.ini' - try: - file = save_as_ini(default_filename) - with open(file,'w') as configfile: - config.add_section('ALL VALUES ARE IN SI-UNITS!') - config.add_section('IT IS RECOMMENDED TO CHANGE THE INI FILE FROM THE INTERFACE AND DO NOT CHANGE ANY VALUES MANUALLY') - - # Transfer curve - config.add_section('Transfer') - config.set('Transfer','Integration',integration_transfer.value) - - config.add_section("Vtg_transfer") - for parameter,widget in Vtg_transfer.items(): - config.set('Vtg_transfer',parameter,str(widget.value)) - - config.add_section("Vbg_transfer") - for parameter,widget in Vbg_transfer.items(): - config.set('Vbg_transfer',parameter,str(widget.value)) - - config.add_section('Vds_transfer') - for parameter,widget in Vds_transfer.items(): - config.set('Vds_transfer',parameter,str(widget.value)) - - config.add_section('Plot_transfer') - for parameter,widget in plot_transfer.items(): - config.set('Plot_transfer',parameter,str(widget.value)) - - #output - config.add_section('Output') - config.set('Output','Integration',integration_output.value) - - config.add_section("Vtg_output") - for parameter,widget in Vtg_output.items(): - config.set('Vtg_output',parameter,str(widget.value)) - - config.add_section("Vbg_output") - for parameter,widget in Vbg_output.items(): - config.set('Vbg_output',parameter,str(widget.value)) - - config.add_section('Vds_output') - for parameter,widget in Vds_output.items(): - config.set('Vds_output',parameter,str(widget.value)) - - config.add_section('Plot_output') - for parameter,widget in plot_output.items(): - config.set('Plot_output',parameter,str(widget.value)) - - # Gatediode - config.add_section('Gatediode') - config.set('Gatediode','Integration',integration_gatediode.value) - - config.add_section("Vg_gatediode") - for parameter,widget in Vg_gatediode.items(): - config.set('Vg_gatediode',parameter,str(widget.value)) - - config.add_section('Plot_gatediode') - for parameter,widget in plot_gatediode.items(): - config.set('Plot_gatediode',parameter,str(widget.value)) - - # add the smu configuration - config.add_section('SMU_configuration') - for parameter,widget in smu_map.items(): - config.set('SMU_configuration',parameter,str(widget.value)) - - # Add the sweeping gates - config.add_section('Sweeping_gates') - config.set('Sweeping_gates','Transfer',str(transfer_gates.value)) - config.set('Sweeping_gates','Output',str(output_gates.value)) - config.set('Sweeping_gates','Gatediode',str(terminal.value)) - - - config.write(configfile) - except Exception as e: - information_box(e) - - enable_widgets(all_widgets) - - -def on_import_ini_clicked(b): - with output: - disable_widgets(all_widgets) - #load values to the interface - config = configparser.ConfigParser() - try: - file = load_ini() - except Exception as e: - information_box(e) - enable_widgets(all_widgets) - return - - try: - #read the values from each section - config.read(file) - - #transfer curve - integration_transfer.value = config.get('Transfer', "integration") - for parameter,widget in Vtg_transfer.items(): - widget.value = config.get('Vtg_transfer',parameter) - for parameter,widget in Vds_transfer.items(): - widget.value = config.get('Vds_transfer',parameter) - for parameter,widget in Vbg_transfer.items(): - widget.value = config.get('Vbg_transfer',parameter) - for parameter,widget in plot_transfer.items(): - widget.value = config.get('Plot_transfer',parameter) - - #output curve - integration_output.value = config.get('Output','integration') - for parameter,widget in Vtg_output.items(): - widget.value = config.get('Vtg_output',parameter) - for parameter,widget in Vds_output.items(): - widget.value = config.get('Vds_output',parameter) - for parameter,widget in Vbg_output.items(): - widget.value = config.get('Vbg_output',parameter) - - for parameter,widget in plot_output.items(): - widget.value = config.get('Plot_output',parameter) - - # gatediode - integration_gatediode.value = config.get('Gatediode','integration') - for parameter,widget in Vg_gatediode.items(): - widget.value = config.get('Vg_gatediode',parameter) - - for parameter,widget in plot_gatediode.items(): - widget.value = config.get('Plot_gatediode',parameter) - - # SMU map - for parameter,widget in smu_map.items(): - widget.value = int(config.get('SMU_configuration',parameter)) - - # sweeping gates - transfer_gates.value = config.get('Sweeping_gates','Transfer') - output_gates.value = config.get('Sweeping_gates','Output') - terminal.value = config.get('Sweeping_gates','Gatediode') - - information_box("all parameters loaded succesfully") - except Exception as error: - if type(error).__name__ =='NoSectionError': - information_box(f"{error}.Explanation: Section(header) [section] does not exist. Create a new ini file or compare it with functional ini files!") - elif type(error).__name__=='NoOptionError': - information_box(f'{error}.Explanation: The variable name before the equal sign is not recognized. Create a new ini file or compare it with functional ini files!') - elif type(error).__name__ == 'TraitError': - information_box(f'{error}.Explanation: Invalid Parameter Setting. Check if you set an invalid value!') - elif type(error).__name__ =="DuplicateOptionError": - information_box(f"{error}. Explaination: The section contains the setted parameter more than once!") - else: - information_box(f"A {type(error).__name__} has occurred. Create A new ini file") - enable_widgets(all_widgets) - - -button.on_click(on_start_clicked) -import_ini_button.on_click(on_import_ini_clicked) -export_ini_button.on_click(on_export_ini_clicked) - - - - - - - - - - - diff --git a/hp4155/ADU for double gate devices_version_3/test_interface.ipynb b/hp4155/ADU for double gate devices_version_3/test_interface.ipynb deleted file mode 100644 index a7400ddffc78f77a238dc48e15fbdc67d54e1dc0..0000000000000000000000000000000000000000 --- a/hp4155/ADU for double gate devices_version_3/test_interface.ipynb +++ /dev/null @@ -1,122 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "81f37cac-ea14-4540-8bc9-78bee248dfbb", - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "91ef05d7a6e34befbcbaef0e3692f6e6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(VBox(children=(Label(value='Sample Information', layout=Layout(height='auto', width='50%'), sty…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "99f97fd54ff9409589f12a5cc8a440f2", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(Checkbox(value=True, description='Transfer', indent=False), Checkbox(value=True, description='O…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "ba4758b9e9134b3c8ada14f3bde78f6d", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Tab(children=(VBox(children=(Dropdown(description='Integration Time', index=1, layout=Layout(height='auto', wi…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8c6428fed06e43eeb90750550b851e38", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(Button(description='Start Measurement', style=ButtonStyle()), Button(description='Import from i…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "77b86609607541b684326d5e49684be6", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Output()" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import sys\n", - "sys.path.insert(0, './lib')\n", - "sys.path.insert(0, '..') #append parent directory\n", - "\n", - "\n", - "from interface import *\n", - "from help import *\n", - "\n", - "interface = interface()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "65639b77-8c22-4132-a2cf-754276d08b72", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.0" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/hp4155/ADU_for_double_gate_devices_version_3/double_gate_ADU.py b/hp4155/ADU_for_double_gate_devices_version_3/double_gate_ADU.py new file mode 100644 index 0000000000000000000000000000000000000000..bd4d20b07cdfcb75867f0b3cdfb92670fb10eb49 --- /dev/null +++ b/hp4155/ADU_for_double_gate_devices_version_3/double_gate_ADU.py @@ -0,0 +1,262 @@ +import sys +sys.path.insert(0, './lib') +sys.path.insert(0, '..') #append parent directory + + +from interface import * +from help import * +import transfer +import output +import configparser + + +#setup user interface +ui = interface() +device = hp4155a.HP4155a('GPIB0::17::INSTR') + +def on_start_clicked(b): + with ui.output: + clear_output() + #disable all widgets + change_state(ui.all_widgets) + + #additional code to check smu configuration fast without modifing a lot of code + try: + check_configuration(ui.sample) + except Exception as e: + error_box(e) + change_state(ui.all_widgets) + return + + #setup the devicr + device.reset() + + #setup sweep measurement mode + device.measurement_mode('SWE') + + #disable all irrelevant units + device.disable_not_smu() + + if ui.transfer_check.value == True: + if ui.transfer_gates.value == 'VTG': + transfer.VTG(ui,device) + elif ui.transfer_gates.value == 'VBG': + transfer.VBG(ui,device) + elif ui.transfer_gates.value == 'BOTH SIMULTANEOUSLY': + transfer.SIM(ui,device) + else: # Sequential measurement + transfer.SEQ(ui,device) + + if output_check.value == True: + if ui.output_gates.value == "VTG": + output.VTG(ui,device) + elif ui.output_gates.value == "VBG": + output.VBG(ui,device) + else: # Both + output.SEQ(ui,device) + + + if gatediode_check.value == True: + if ui.gatediode_gates.value == 'VTG': + gatediode.VTG(ui,device) + else: #VBG + gatediode.VBG(ui,device) + + information_box("Measurement finished!") + change_state(ui.all_widgets) + +def on_export_ini_clicked(b): + with output: + change_state(ui.all_widgets) + config = configparser.ConfigParser() + default_filename = 'ADU_double_gate.ini' + try: + file = save_as_ini(default_filename) + with open(file,'w') as configfile: + config.add_section('ALL VALUES ARE IN SI-UNITS!') + config.add_section('IT IS RECOMMENDED TO CHANGE THE INI FILE FROM THE INTERFACE AND DO NOT CHANGE ANY VALUES MANUALLY') + + # Transfer curve + config.add_section('Transfer') + config.set('Transfer','Integration',ui.integration_transfer.value) + + config.add_section("Vtg_transfer") + for parameter, widget in vars(ui.Vtg_transfer).items(): + if parameter != "grid": + config.set("Vtg_transfer",parameter,str(widget.value)) + + + config.add_section("Vbg_transfer") + for parameter,widget in vars(ui.Vbg_transfer).items(): + if parameter != "grid": + config.set('Vbg_transfer',parameter,str(widget.value)) + + config.add_section('Vds_transfer') + for parameter,widget in vars(ui.Vds_transfer).items(): + if parameter != "grid": + config.set('Vds_transfer',parameter,str(widget.value)) + + + config.add_section('Plot_transfer') + for parameter,widget in vars(ui.plot_transfer).items(): + if parameter != "grid": + config.set('Plot_transfer',parameter,str(widget.value)) + + #output + config.add_section('Output') + config.set('Output','Integration',ui.integration_output.value) + + config.add_section("Vtg_output") + for parameter,widget in vars(ui.Vtg_output).items(): + if parameter != "grid": + config.set('Vtg_output',parameter,str(widget.value)) + + + config.add_section("Vbg_output") + for parameter,widget in vars(ui.Vbg_output).items(): + if parameter != "grid": + config.set('Vbg_output',parameter,str(widget.value)) + + + config.add_section('Vds_output') + for parameter,widget in vars(ui.Vds_output).items(): + if parameter != "grid": + config.set('Vds_output',parameter,str(widget.value)) + + + config.add_section('Plot_output') + for parameter,widget in vars(ui.plot_output).items(): + if parameter != "grid": + config.set('Plot_output',parameter,str(widget.value)) + + # Gatediode + config.add_section('Gatediode') + config.set('Gatediode','Integration',ui.integration_gatediode.value) + + config.add_section("Vg_gatediode") + for parameter,widget in vars(ui.Vg_gatediode).items(): + if parameter != "grid": + config.set('Vg_gatediode',parameter,str(widget.value)) + + config.add_section('Plot_gatediode') + for parameter,widget in vars(ui.plot_gatediode).items(): + if parameter != "grid": + config.set('Plot_gatediode',parameter,str(widget.value)) + + # add the smu configuration + config.add_section('SMU_configuration') + config.set("SMU_configuration","D",str(ui.sample.drain.value)) + config.set("SMU_configuration","TG",str(ui.sample.top_gate.value)) + config.set("SMU_configuration","BG",str(ui.sample.back_gate.value)) + config.set("SMU_configuration","S",str(ui.sample.source.value)) + + # Add the sweeping gates + config.add_section('Sweeping_gates') + config.set('Sweeping_gates','Transfer',str(ui.transfer_gates.value)) + config.set('Sweeping_gates','Output',str(ui.output_gates.value)) + config.set('Sweeping_gates','Gatediode',str(ui.gatediode_gates.value)) + + + config.write(configfile) + except Exception as e: + information_box(e) + + change_state(ui.all_widgets) + + +def on_import_ini_clicked(b): + with output: + change_state(ui.all_widgets) + #load values to the interface + config = configparser.ConfigParser() + try: + file = load_ini() + except Exception as e: + information_box(e) + enable_widgets(all_widgets) + return + + try: + #read the values from each section + config.read(file) + + #transfer curve + ui.integration_transfer.value = config.get('Transfer', "integration") + for parameter,widget in vars(ui.Vtg_transfer).items(): + if parameter != "grid": + widget.value = config.get('Vtg_transfer',parameter) + for parameter,widget in vars(ui.Vds_transfer).items(): + if parameter != "grid": + widget.value = config.get('Vds_transfer',parameter) + for parameter,widget in vars(ui.Vbg_transfer).items(): + if parameter != "grid": + widget.value = config.get('Vbg_transfer',parameter) + for parameter,widget in vars(ui.plot_transfer).items(): + if parameter != "grid": + widget.value = config.get('Plot_transfer',parameter) + + #output curve + ui.integration_output.value = config.get('Output','integration') + for parameter,widget in vars(ui.Vtg_output).items(): + if parameter != "grid": + widget.value = config.get('Vtg_output',parameter) + for parameter,widget in vars(ui.Vds_output).items(): + if parameter != "grid": + widget.value = config.get('Vds_output',parameter) + for parameter,widget in vars(ui.Vbg_output).items(): + if parameter != "grid": + widget.value = config.get('Vbg_output',parameter) + for parameter,widget in vars(ui.plot_output).items(): + if parameter != "grid": + widget.value = config.get('Plot_output',parameter) + + # gatediode + ui.integration_gatediode.value = config.get('Gatediode','integration') + for parameter,widget in vars(ui.Vg_gatediode).items(): + if parameter != "grid": + widget.value = config.get('Vg_gatediode',parameter) + + for parameter,widget in vars(ui.plot_gatediode).items(): + if parameter != "grid": + widget.value = config.get('Plot_gatediode',parameter) + + # SMU map + ui.sample.drain.value = int(config.get("SMU_configuration","d")) + ui.sample.top_gate.value = int(config.get("SMU_configuration","tg")) + ui.sample.back_gate.value = int(config.get("SMU_configuration","bg")) + ui.sample.source.value = int(config.get("SMU_configuration","s")) + + # sweeping gates + ui.transfer_gates.value = config.get('Sweeping_gates','Transfer') + ui.output_gates.value = config.get('Sweeping_gates','Output') + ui.gatediode_gates.value = config.get('Sweeping_gates','Gatediode') + + information_box("all parameters loaded succesfully") + except Exception as error: + if type(error).__name__ =='NoSectionError': + information_box(f"{error}.Explanation: Section(header) [section] does not exist. Create a new ini file or compare it with functional ini files!") + elif type(error).__name__=='NoOptionError': + information_box(f'{error}.Explanation: The variable name before the equal sign is not recognized. Create a new ini file or compare it with functional ini files!') + elif type(error).__name__ == 'TraitError': + information_box(f'{error}.Explanation: Invalid Parameter Setting. Check if you set an invalid value!') + elif type(error).__name__ =="DuplicateOptionError": + information_box(f"{error}. Explaination: The section contains the setted parameter more than once!") + else: + information_box(f"A {type(error).__name__} has occurred. Create A new ini file") + change_state(ui.all_widgets) + + +button.on_click(on_start_clicked) +import_ini_button.on_click(on_import_ini_clicked) +export_ini_button.on_click(on_export_ini_clicked) + + + + + + + + + + + diff --git a/hp4155/ADU for double gate devices_version_3/double_gate_ADU_interface.ipynb b/hp4155/ADU_for_double_gate_devices_version_3/double_gate_ADU_interface.ipynb similarity index 100% rename from hp4155/ADU for double gate devices_version_3/double_gate_ADU_interface.ipynb rename to hp4155/ADU_for_double_gate_devices_version_3/double_gate_ADU_interface.ipynb diff --git a/hp4155/ADU for double gate devices_version_3/lib/gatediode.py b/hp4155/ADU_for_double_gate_devices_version_3/lib/gatediode.py similarity index 100% rename from hp4155/ADU for double gate devices_version_3/lib/gatediode.py rename to hp4155/ADU_for_double_gate_devices_version_3/lib/gatediode.py diff --git a/hp4155/ADU for double gate devices_version_3/lib/help.py b/hp4155/ADU_for_double_gate_devices_version_3/lib/help.py similarity index 100% rename from hp4155/ADU for double gate devices_version_3/lib/help.py rename to hp4155/ADU_for_double_gate_devices_version_3/lib/help.py diff --git a/hp4155/ADU for double gate devices_version_3/lib/interface.py b/hp4155/ADU_for_double_gate_devices_version_3/lib/interface.py similarity index 100% rename from hp4155/ADU for double gate devices_version_3/lib/interface.py rename to hp4155/ADU_for_double_gate_devices_version_3/lib/interface.py diff --git a/hp4155/ADU for double gate devices_version_3/lib/output.py b/hp4155/ADU_for_double_gate_devices_version_3/lib/output.py similarity index 100% rename from hp4155/ADU for double gate devices_version_3/lib/output.py rename to hp4155/ADU_for_double_gate_devices_version_3/lib/output.py diff --git a/hp4155/ADU for double gate devices_version_3/lib/transfer.py b/hp4155/ADU_for_double_gate_devices_version_3/lib/transfer.py similarity index 100% rename from hp4155/ADU for double gate devices_version_3/lib/transfer.py rename to hp4155/ADU_for_double_gate_devices_version_3/lib/transfer.py diff --git a/hp4155/ADU for double gate devices_version_3/plotly_example.ipynb b/hp4155/ADU_for_double_gate_devices_version_3/plotly_example.ipynb similarity index 100% rename from hp4155/ADU for double gate devices_version_3/plotly_example.ipynb rename to hp4155/ADU_for_double_gate_devices_version_3/plotly_example.ipynb diff --git a/hp4155/ADU_for_double_gate_devices_version_3/test_interface.ipynb b/hp4155/ADU_for_double_gate_devices_version_3/test_interface.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..4a4d27609bf9deae820a414a6221910326092426 --- /dev/null +++ b/hp4155/ADU_for_double_gate_devices_version_3/test_interface.ipynb @@ -0,0 +1,211 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "81f37cac-ea14-4540-8bc9-78bee248dfbb", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f16d4dd5623d4e3f8c3cf903bdd10aab", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(VBox(children=(Label(value='Sample Information', layout=Layout(height='auto', width='50%'), sty…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b695db8d41264b34a2c0a47e2725c2a3", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Checkbox(value=True, description='Transfer', indent=False), Checkbox(value=True, description='O…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "89897d1897a84fcf9331ca9482310f6d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Tab(children=(VBox(children=(Dropdown(description='Integration Time', index=1, layout=Layout(height='auto', wi…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bcdd605ef1b54fbfaba309755af70733", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(Button(description='Start Measurement', style=ButtonStyle()), Button(description='Import from i…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1566ed7958504c49b06bcc529b2fdea8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import sys\n", + "sys.path.insert(0, './lib')\n", + "sys.path.insert(0, '..') #append parent directory\n", + "\n", + "\n", + "from interface import *\n", + "from help import *\n", + "import configparser\n", + "import traceback\n", + "\n", + "ui = interface()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "43e7d2ca-3bc0-486c-94b2-e1eebb124a3b", + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'interface' object has no attribute 'terminal'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[2], line 64\u001b[0m\n\u001b[0;32m 62\u001b[0m ui\u001b[38;5;241m.\u001b[39mtransfer_gates\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;241m=\u001b[39m config\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSweeping_gates\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mTransfer\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 63\u001b[0m ui\u001b[38;5;241m.\u001b[39moutput_gates\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;241m=\u001b[39m config\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSweeping_gates\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOutput\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m---> 64\u001b[0m \u001b[43mui\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mterminal\u001b[49m\u001b[38;5;241m.\u001b[39mvalue \u001b[38;5;241m=\u001b[39m config\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSweeping_gates\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mGatediode\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 66\u001b[0m information_box(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mall parameters loaded succesfully\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "\u001b[1;31mAttributeError\u001b[0m: 'interface' object has no attribute 'terminal'" + ] + } + ], + "source": [ + "change_state(ui.all_widgets)\n", + "#load values to the interface\n", + "config = configparser.ConfigParser()\n", + "try:\n", + " file = load_ini()\n", + "except Exception as e:\n", + " information_box(e)\n", + " change_state(ui.all_widgets)\n", + "\n", + "#read the values from each section\n", + "config.read(file)\n", + "\n", + "#transfer curve\n", + "ui.integration_transfer.value = config.get('Transfer', \"integration\")\n", + "for parameter,widget in vars(ui.Vtg_transfer).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Vtg_transfer',parameter)\n", + "for parameter,widget in vars(ui.Vds_transfer).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Vds_transfer',parameter)\n", + "for parameter,widget in vars(ui.Vbg_transfer).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Vbg_transfer',parameter)\n", + "for parameter,widget in vars(ui.plot_transfer).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Plot_transfer',parameter)\n", + "\n", + "#output curve\n", + "ui.integration_output.value = config.get('Output','integration')\n", + "for parameter,widget in vars(ui.Vtg_output).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Vtg_output',parameter)\n", + "for parameter,widget in vars(ui.Vds_output).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Vds_output',parameter)\n", + "for parameter,widget in vars(ui.Vbg_output).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Vbg_output',parameter)\n", + "for parameter,widget in vars(ui.plot_output).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Plot_output',parameter)\n", + "\n", + "# gatediode\n", + "ui.integration_gatediode.value = config.get('Gatediode','integration')\n", + "for parameter,widget in vars(ui.Vg_gatediode).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Vg_gatediode',parameter)\n", + "\n", + "for parameter,widget in vars(ui.plot_gatediode).items():\n", + " if parameter != \"grid\":\n", + " widget.value = config.get('Plot_gatediode',parameter)\n", + "\n", + "# SMU map\n", + "ui.sample.drain.value = int(config.get(\"SMU_configuration\",\"d\"))\n", + "ui.sample.top_gate.value = int(config.get(\"SMU_configuration\",\"tg\"))\n", + "ui.sample.back_gate.value = int(config.get(\"SMU_configuration\",\"bg\"))\n", + "ui.sample.source.value = int(config.get(\"SMU_configuration\",\"s\"))\n", + "\n", + "\n", + "\n", + "# sweeping gates\n", + "ui.transfer_gates.value = config.get('Sweeping_gates','Transfer')\n", + "ui.output_gates.value = config.get('Sweeping_gates','Output')\n", + "ui.gatediode_gates.value = config.get('Sweeping_gates','Gatediode')\n", + "\n", + "information_box(\"all parameters loaded succesfully\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0b886a31-7979-4406-b696-1e01e6feb132", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}