Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
labcode
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Model registry
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
CST
labcode
Commits
98bbe167
Commit
98bbe167
authored
2 months ago
by
Alexandros Asonitis
Browse files
Options
Downloads
Patches
Plain Diff
ADU DG modification availiable
parent
84efb32b
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
hp4155/ADU for double gate devices-test/double_gate_ADU.py
+373
-3
373 additions, 3 deletions
hp4155/ADU for double gate devices-test/double_gate_ADU.py
hp4155/ADU for double gate devices-test/lib/quick.py
+769
-0
769 additions, 0 deletions
hp4155/ADU for double gate devices-test/lib/quick.py
with
1142 additions
and
3 deletions
hp4155/ADU for double gate devices-test/double_gate_ADU.py
+
373
−
3
View file @
98bbe167
...
...
@@ -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.
Click to expand it.
hp4155/ADU for double gate devices-test/lib/quick.py
0 → 100644
+
769
−
0
View file @
98bbe167
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment