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