Skip to content
Snippets Groups Projects
Commit 98bbe167 authored by Alexandros Asonitis's avatar Alexandros Asonitis
Browse files

ADU DG modification availiable

parent 84efb32b
Branches
No related tags found
No related merge requests found
......@@ -7,6 +7,7 @@ from interface import *
from help import *
from measurements import *
import configparser
import quick
# Create the grids
#create the information grid
......@@ -60,12 +61,13 @@ tab.titles = titles
display(tab)
button = widgets.Button(description ='Start Measurement')
quick_button = widgets.Button(description = 'Quick Measurement')
output = widgets.Output()
export_ini_button = widgets.Button(description = 'Export as ini')
import_ini_button = widgets.Button(description='Import from ini')
all_widgets =[transfer_gates,output_gates,button,transfer_check,integration_transfer,output_check,integration_output,gatediode_check,integration_gatediode,terminal,export_ini_button,import_ini_button]
all_widgets =[transfer_gates,output_gates,button,transfer_check,integration_transfer,output_check,integration_output,gatediode_check,integration_gatediode,terminal,export_ini_button,import_ini_button,quick_button]
add_widgets_to_list(sample,all_widgets)
add_widgets_to_list(smu_map,all_widgets)
......@@ -77,7 +79,7 @@ add_widgets_to_list(Vtg_output,all_widgets)
add_widgets_to_list(Vbg_output,all_widgets)
add_widgets_to_list(Vg_gatediode,all_widgets)
line = widgets.HBox([button,import_ini_button,export_ini_button])
line = widgets.HBox([button,quick_button,import_ini_button,export_ini_button])
display(line,output)
device = hp4155a.HP4155a('GPIB0::17::INSTR')
......@@ -449,6 +451,373 @@ def on_start_clicked(b):
enable_widgets(all_widgets)
def on_quick_clicked(b):
with output:
clear_output()
#disable all widgets
disable_widgets(all_widgets)
#additional code to check smu configuration fast without modifing a lot of code
try:
check_configuration(smu_map)
except Exception as e:
error_box(e)
enable_widgets(all_widgets)
return
Setup(device) #setup the device
#for all measurements the same (copy the interface with values for parameter setting)
map = smu_map.copy()
for key,value in map.items():
map[key]= value.value
sample_copy = sample.copy()
for key,value in sample_copy.items():
sample_copy[key]=value.value
smu_s = device.smu_dict()
smu_s.update(vname ='VS',iname = 'IS',mode = 'COMM',func='CONS') #Source smu is always grounded
if transfer_check.value == True:
plot = plot_transfer.copy()
for key,value in plot.items():
plot[key] = value.value
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(vname='VDS',iname='ID',mode = 'V',func = 'VAR2')
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)
quick.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)
quick.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)
quick.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
quick.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
quick.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
quick.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
quick.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
quick.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)
......@@ -603,6 +972,7 @@ def on_import_ini_clicked(b):
button.on_click(on_start_clicked)
quick_button.on_click(on_quick_clicked)
import_ini_button.on_click(on_import_ini_clicked)
export_ini_button.on_click(on_export_ini_clicked)
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment