diff --git a/hp4155/Custom_SMU/interface_custom.ipynb b/hp4155/Custom_SMU/interface_custom.ipynb
index 138fcb8bef58952ebfdd04410675b358deb76ecb..043a6f654d1a34e789abb907ac19bbc352bba8b3 100644
--- a/hp4155/Custom_SMU/interface_custom.ipynb
+++ b/hp4155/Custom_SMU/interface_custom.ipynb
@@ -7,12 +7,46 @@
"metadata": {},
"outputs": [
{
- "ename": "SyntaxError",
- "evalue": "'(' was never closed (main.py, line 27)",
- "output_type": "error",
- "traceback": [
- "\u001b[1;36m File \u001b[1;32m~\\labcode\\hp4155\\Custom_SMU\\main.py:27\u001b[1;36m\u001b[0m\n\u001b[1;33m ini = widgets.Button(description = 'Import from ini. (Coming Soon)',style = {'description_width': 'initial'},layout=Layout(height='auto', width='auto')\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m '(' was never closed\n"
- ]
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "fdd75ac6ae5f48bd88118fe3c5f63751",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Tab(children=(GridspecLayout(children=(Label(value='UNIT', layout=Layout(grid_area='widget001', height='auto',…"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "ff8460761b0c47cb891e414876fd5c54",
+ "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": "5545d590d0884f65aa5d12dea03a6919",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
}
],
"source": [
@@ -22,7 +56,7 @@
{
"cell_type": "code",
"execution_count": null,
- "id": "b4134f36-9202-45f5-ad20-b71dfc315edd",
+ "id": "432e90a3-d6c4-4718-9b1f-0b9fd77e2383",
"metadata": {},
"outputs": [],
"source": []
diff --git a/hp4155/Custom_SMU/main.py b/hp4155/Custom_SMU/main.py
index 98f8c9c01d0508f5c2ba79fbe93564fad4a11af9..6049c85f1b90986c46102206d499bf1bbd28166d 100644
--- a/hp4155/Custom_SMU/main.py
+++ b/hp4155/Custom_SMU/main.py
@@ -4,6 +4,7 @@ sys.path.insert(0, '..') #append parent directory
import os
import configparser
import warnings
+import traceback
from interface import *
from help import *
@@ -24,7 +25,7 @@ tab.titles = titles
display(tab)
start = widgets.Button(description='Start Measurement')
-ini = widgets.Button(description = 'Import from ini. (Coming Soon)',style = {'description_width': 'initial'},layout=Layout(height='auto', width='auto'))
+ini = widgets.Button(description = 'Import from ini.')
output = widgets.Output()
display(widgets.HBox([start,ini]),output)
@@ -256,8 +257,8 @@ def on_start_clicked(b):
config.add_section("THESE ARE THE PARAMETERS OF THE CORRESPONDING MEASUREMENT")
config.add_section("THE WHOLE INTERFACE IS SAVED SO FIND WHAT YOU NEED")
config.add_section("DO NOT MODIFY THIS FILE")
- config.add_section(f"MEASUREMENT MODE: {measurement_mode}")
- config.add_section(f"INTEGRATION TIME: {integration}")
+ config.add_section(f"MEASUREMENT MODE:{measurement_mode}")
+ config.add_section(f"INTEGRATION TIME:{integration}")
# First the smus
config.add_section("SMUS")
@@ -445,8 +446,8 @@ def on_start_clicked(b):
config.add_section("THESE ARE THE PARAMETERS OF THE CORRESPONDING MEASUREMENT")
config.add_section("THE WHOLE INTERFACE IS SAVED SO FIND WHAT YOU NEED")
config.add_section("DO NOT MODIFY THIS FILE")
- config.add_section(f"MEASUREMENT MODE: {measurement_mode}")
- config.add_section(f"INTEGRATION TIME: {integration}")
+ config.add_section(f"MEASUREMENT MODE:{measurement_mode}")
+ config.add_section(f"INTEGRATION TIME:{integration}")
# First the smus
config.add_section("SMUS")
@@ -467,6 +468,9 @@ def on_start_clicked(b):
for key,value in parameters.items():
config.set('SAMPLING PARAMETERS',key,str(value))
+ # Sampling time
+ config.set('SAMPLING PARAMETERS','duration',str(duration))
+
# Now the constant smus
config.add_section('CONSTANT SMUS')
for i, cons_smu in enumerate(cons_smus):
@@ -578,7 +582,7 @@ def on_start_clicked(b):
config.add_section("THESE ARE THE PARAMETERS OF THE CORRESPONDING MEASUREMENT")
config.add_section("THE WHOLE INTERFACE IS SAVED SO FIND WHAT YOU NEED")
config.add_section("DO NOT MODIFY THIS FILE")
- config.add_section(f"MEASUREMENT MODE: {measurement_mode}")
+ config.add_section(f"MEASUREMENT MODE:{measurement_mode}")
# First the smus
config.add_section("SMUS")
@@ -608,9 +612,6 @@ def on_start_clicked(b):
ini.disabled = False
return # just to be sure
-# This should be tested at the end.
-# After the ini files have been created
-"""
def on_ini_clicked(b):
with output:
clear_output()
@@ -638,16 +639,151 @@ def on_ini_clicked(b):
# Get the measurement Mode
measurement_mode = get_mode(sections)
+
# Get the constant smus
for j in range(1,5):
third_page[21,j].value = config.get(f"CONSTANT SMU{j}",'value')
third_page[22,j].value = config.get(f"CONSTANT SMU{j}",'comp')
-
+
if measurement_mode == 'SWEEP':
third_page[0,0].value = measurement_mode
third_page[0,1].value = get_integration(sections)
-"""
+ # Get the SMU channels
+ for i in range(1,5):
+ first_page[i,1].value = config.get(f"SMU{i}",'vname')
+ first_page[i,2].value = config.get(f"SMU{i}",'iname')
+ first_page[i,3].value = config.get(f"SMU{i}",'mode')
+ first_page[i,4].value = config.get(f"SMU{i}",'func')
+ first_page[i,5].value = eval(config.get(f"SMU{i}",'disabled'))
+
+ # Get the maximum 6 user functions
+ for i in range(1,7):
+ if f"USER FUNCTION {i}" in sections:
+ second_page[i,0].value = config.get(f"USER FUNCTION {i}",'name')
+ second_page[i,1].value = config.get(f"USER FUNCTION {i}",'unit')
+ second_page[i,2].value = config.get(f"USER FUNCTION {i}",'expression')
+
+ # Get the Sweep units VAR1,VAR2,VARD, PULSE
+ # VAR1
+ third_page[4,0].value = config.get('VAR1','start')
+ third_page[5,0].value = config.get('VAR1','stop')
+ third_page[6,0].value = config.get('VAR1','step')
+ third_page[7,0].value = config.get('VAR1','comp')
+ third_page[8,0].value = config.get('VAR1','pcomp')
+ hyst = config.get('VAR1','mode')
+ if hyst == 'SING':
+ third_page[9,0].value = False
+ elif hyst == 'DOUB':
+ third_page[9,0].value = True
+ else:
+ raise Exception("Invalid Hysterisis Mode")
+
+ # VAR2
+ third_page[4,1].value = config.get('VAR2','start')
+ third_page[5,1].value = config.get('VAR2','step')
+ third_page[6,1].value = config.get('VAR2','points')
+ third_page[7,1].value = config.get('VAR2','comp')
+ third_page[8,1].value = config.get('VAR2','pcomp')
+
+ # VARD
+ third_page[4,2].value = config.get('VARD','offset')
+ third_page[5,2].value = config.get('VARD','ratio')
+ third_page[7,2].value = config.get('VARD','comp')
+ third_page[8,2].value = config.get('VARD','pcomp')
+
+ # PULSE
+ third_page[4,3].value = config.get('PULSE','period')
+ third_page[5,3].value = config.get('PULSE','width')
+ third_page[6,3].value = config.get('PULSE','base')
+
+
+ # Get the axes
+ for j in range(1,4):
+ fourth_page[1,j].value = config.get(f"AXIS {j}",'name')
+ fourth_page[2,j].value = config.get(f"AXIS {j}",'scale')
+ fourth_page[3,j].value = config.get(f"AXIS {j}",'min')
+ fourth_page[4,j].value = config.get(f"AXIS {j}",'max')
+
+
+ # Get the variables
+ for i in range(8):
+ if f"VARIABLE {i+1}" in sections:
+ fifth_page[6+i,0].value = config.get(f"VARIABLE {i+1}",'name')
+ fifth_page[6+i,1].value = config.get(f"VARIABLE {i+1}",'unit')
+
+ elif measurement_mode == 'SAMPLING':
+ third_page[0,0].value = measurement_mode
+ third_page[0,1].value = get_integration(sections)
+
+ # Get the SMU channels
+ for i in range(1,5):
+ first_page[i,1].value = config.get(f"SMU{i}",'vname')
+ first_page[i,2].value = config.get(f"SMU{i}",'iname')
+ first_page[i,3].value = config.get(f"SMU{i}",'mode')
+ first_page[i,4].value = config.get(f"SMU{i}",'func')
+ first_page[i,5].value = eval(config.get(f"SMU{i}",'disabled'))
+
+ # Get the maximum 6 user functions
+ for i in range(1,7):
+ if f"USER FUNCTION {i}" in sections:
+ second_page[i,0].value = config.get(f"USER FUNCTION {i}",'name')
+ second_page[i,1].value = config.get(f"USER FUNCTION {i}",'unit')
+ second_page[i,2].value = config.get(f"USER FUNCTION {i}",'expression')
+
+ # Get the sampling Parameters
+ third_page[12,0].value = config.get('SAMPLING PARAMETERS','mode')
+ third_page[13,0].value = config.get('SAMPLING PARAMETERS','interval')
+ third_page[16,0].value = config.get('SAMPLING PARAMETERS','hold')
+ third_page[14,0].value = config.get('SAMPLING PARAMETERS','points')
+ third_page[17,0].value = bool(config.get('SAMPLING PARAMETERS','filter'))
+ third_page[15,0].value = config.get('SAMPLING PARAMETERS','duration')
+
+ # Get the axes
+ for j in range(1,4):
+ fourth_page[1,j].value = config.get(f"AXIS {j}",'name')
+ fourth_page[2,j].value = config.get(f"AXIS {j}",'scale')
+ fourth_page[3,j].value = config.get(f"AXIS {j}",'min')
+ fourth_page[4,j].value = config.get(f"AXIS {j}",'max')
+
+
+ # Get the variables
+ for i in range(8):
+ if f"VARIABLE {i+1}" in sections:
+ fifth_page[6+i,0].value = config.get(f"VARIABLE {i+1}",'name')
+ fifth_page[6+i,1].value = config.get(f"VARIABLE {i+1}",'unit')
-start.on_click(on_start_clicked)
\ No newline at end of file
+ elif measurement_mode == 'STRESS':
+ third_page[0,0].value = measurement_mode
+ # There is no integration time
+ # Get the SMU channels
+ for i in range(1,5):
+ first_page[i,1].value = config.get(f"SMU{i}",'name')
+ # There is not iname
+ first_page[i,3].value = config.get(f"SMU{i}",'mode')
+ # Function is set automatically
+ first_page[i,5].value = eval(config.get(f"SMU{i}",'disabled'))
+
+ # Skip The user Functions
+
+ # Set the Stress parameters
+ third_page[15,0].value = config.get('PARAMETERS','stress time')
+ third_page[16,0].value = config.get('PARAMETERS','hold time')
+ third_page[17,0].value = bool(config.get('PARAMETERS','filter'))
+
+ # Skip the axes and variables
+ else:
+ raise Exception("MEASUREMENT MODE NOT FOUND!")
+
+
+ except Exception as e:
+ error_box(traceback.format_exc())
+
+ change_state(first_page,second_page,third_page,fourth_page,fifth_page)
+ start.disabled = False
+ ini.disabled = False
+
+
+start.on_click(on_start_clicked)
+ini.on_click(on_ini_clicked)
\ No newline at end of file