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
+}