Skip to main content
Sign in
Snippets Groups Projects
Commit 4b6b1d76 authored by Alexandros Asonitis's avatar Alexandros Asonitis
Browse files

Directory choice for quick measurement

parent 18f32745
Branches
No related tags found
No related merge requests found
......@@ -248,9 +248,18 @@ def on_import_ini_clicked(b):
change_state(ui.all_widgets)
def on_folder_clicked(b):
with ui.output:
change_state(ui.all_widgets)
folder = choose_folder()
ui.folder_display.value = folder
change_state(ui.all_widgets)
ui.start.on_click(on_start_clicked)
ui.import_ini.on_click(on_import_ini_clicked)
ui.export_ini.on_click(on_export_ini_clicked)
ui.folder_button.on_click(on_folder_clicked)
......
......
......@@ -72,7 +72,7 @@ def VTG(ui,device):
# Append the normalized current
df["ITGmm/uA/um"]= (df["ITG/A"].apply(lambda x: Decimal(str(x))*Decimal(str(norm)))).astype('float')
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_TOP_GATE_D.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......@@ -159,7 +159,7 @@ def VBG(ui,device):
# Append the normalized current
df["IBGmm/uA/um"]= (df["IBG/A"].apply(lambda x: Decimal(str(x))*Decimal(str(norm)))).astype('float')
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_BACK_GATE_D.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......
......
......@@ -289,3 +289,64 @@ def create_plot(plot_config,df,file,fig_title,legend_title,save):
if save:
filename = os.path.splitext(file)[0]
fig.savefig(filename+"_Y2.png")
#choose directory to save measurement results in quick mode
#and check if you have access
def check_writable(folder):
filename = "test.txt"
file = os.path.join(folder,filename)
#protection against removing existing file in python
i=1
while os.path.exists(file):
filename=f"test{i}.txt"
file = os.path.join(folder,filename)
try:
with open(file,'a'):
writable = True
os.remove(file)
except:
writable = False
information_box(f"{folder} is not writable!")
return writable
def choose_folder():
root = tk.Tk()
root.withdraw()
root.lift() #show window above all other applications
root.attributes("-topmost", True)#window stays above all other applications
#choose nonemty folder
folder = tk.filedialog.askdirectory()
while folder == '':
folder = tk.filedialog.askdirectory()
#check if writable in a while loop
writable=check_writable(folder)
while writable == False:
#choose a correct folder
folder = tk.filedialog.askdirectory()
while folder == '':
folder = tk.filedialog.askdirectory()
#check writable if not repeat
writable=check_writable(folder)
root.destroy()
return folder
def save_file(ui,default_filename):
if ui.sample.quick.value == False:
file = create_file(default_filename)
else:
file = os.path.join(ui.folder_display.value,default_filename)
if os.path.isfile(file):
file = create_file(default_filename) #user would be asked to save the file somewhere else if it alrady exists
return file
\ No newline at end of file
......@@ -278,6 +278,12 @@ class interface:
def __init__(self):
self.sample = sample()
#add folder for quick measurement
folder_label = widgets.Label("Choose folder for quick measurement",layout=Layout(height='auto', width='auto'))
self.folder_display = widgets.Text(str(os.getcwd()),layout=Layout(height='auto', width='800px'),disabled = True)
self.folder_button = widgets.Button(description = "Choose folder")
display(widgets.VBox([folder_label,widgets.HBox([self.folder_button,self.folder_display])]))
self.transfer_check = measurement_check("Transfer")
self.output_check = measurement_check("Output")
self.gatediode_check = measurement_check("Gatediode")
......@@ -339,6 +345,7 @@ class interface:
]
)
#the tab widget
children = [transfer_box,output_box,gatediode_box]
titles = ["Transfer","Output","Gatediode"]
......@@ -368,7 +375,8 @@ class interface:
self.integration_gatediode,
self.gatediode_gates,
self.export_ini,
self.import_ini
self.import_ini,
self.folder_button
]
add_widgets_to_list(self.sample,self.all_widgets)
add_widgets_to_list(self.Vds_transfer,self.all_widgets)
......
......
......@@ -89,7 +89,7 @@ def VTG(ui,device):
df["ITGmm/uA/um"]= (df["ITG/A"].apply(lambda x: Decimal(str(x))*Decimal(str(norm)))).astype('float')
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_TOP_GATE_A.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......@@ -202,7 +202,7 @@ def VBG(ui,device):
# Save the results
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_BACK_GATE_A.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......@@ -325,7 +325,7 @@ def SEQ(ui,device):
# Save the results
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_BOTH_GATES_SEQ_A.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......
......
......@@ -89,7 +89,8 @@ def VTG(ui,device):
# Save the results
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_TOP_GATE_U.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......@@ -200,7 +201,7 @@ def VBG(ui,device):
# Save the results
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_BACK_GATE_U.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......@@ -329,7 +330,7 @@ def SIM(ui,device):
# Save the results
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_BOTH_GATES_SIM_U.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......@@ -462,7 +463,7 @@ def SEQ(ui,device):
# Save the results
default_filename = f"{ui.sample.sample.value}_{ui.sample.field.value}_{ui.sample.device.value}_BOTH_GATES_SEQ_U.txt"
file = create_file(default_filename)
file = save_file(ui,default_filename)
with open(file,'w') as f:
date = str(datetime.today().replace(microsecond=0))
......
......
%% Cell type:code id:81f37cac-ea14-4540-8bc9-78bee248dfbb tags:
``` python
import sys
sys.path.insert(0, './lib')
sys.path.insert(0, '..') #append parent directory
from interface import *
from help import *
import configparser
import traceback
ui = interface()
```
%% Output
%% Cell type:code id:43e7d2ca-3bc0-486c-94b2-e1eebb124a3b tags:
%% Cell type:code id:0b886a31-7979-4406-b696-1e01e6feb132 tags:
``` python
change_state(ui.all_widgets)
#load values to the interface
config = configparser.ConfigParser()
try:
file = load_ini()
except Exception as e:
information_box(e)
change_state(ui.all_widgets)
#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')
def on_folder_clicked(b):
with ui.output:
change_state(ui.all_widgets)
folder = choose_folder()
ui.folder_display.value = folder
change_state(ui.all_widgets)
information_box("all parameters loaded succesfully")
ui.folder_button.on_click(on_folder_clicked)
```
%% Output
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[2], line 64
62 ui.transfer_gates.value = config.get('Sweeping_gates','Transfer')
63 ui.output_gates.value = config.get('Sweeping_gates','Output')
---> 64 ui.terminal.value = config.get('Sweeping_gates','Gatediode')
66 information_box("all parameters loaded succesfully")
AttributeError: 'interface' object has no attribute 'terminal'
%% Cell type:code id:0b886a31-7979-4406-b696-1e01e6feb132 tags:
%% Cell type:code id:12121805-11ea-4c9f-a6dc-c1c46682369a tags:
``` python
```
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment