From 60f690a6333d46ba85183f70e343cd9927f396ee Mon Sep 17 00:00:00 2001 From: unknown <asoalexandros@gmail.com> Date: Tue, 13 Aug 2024 12:09:46 +0200 Subject: [PATCH] MESA Released! --- hp4155/MESA/lib/MESA_SMU_configuration.png | Bin 0 -> 8959 bytes hp4155/MESA/lib/help.py | 187 +++++++++++++++++++++ hp4155/MESA/lib/interface.py | 119 +++++++++++++ hp4155/MESA/mesa.py | 39 +++++ hp4155/MESA/mesa_interface.ipynb | 101 +++++++++++ 5 files changed, 446 insertions(+) create mode 100644 hp4155/MESA/lib/MESA_SMU_configuration.png create mode 100644 hp4155/MESA/lib/help.py create mode 100644 hp4155/MESA/lib/interface.py create mode 100644 hp4155/MESA/mesa.py create mode 100644 hp4155/MESA/mesa_interface.ipynb diff --git a/hp4155/MESA/lib/MESA_SMU_configuration.png b/hp4155/MESA/lib/MESA_SMU_configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..35315592b545ba5bfffee902100f0d3180b379d0 GIT binary patch literal 8959 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 QFfcH9y85}Sb4q9e0M~@q&;S4c literal 0 HcmV?d00001 diff --git a/hp4155/MESA/lib/help.py b/hp4155/MESA/lib/help.py new file mode 100644 index 0000000..2d2f444 --- /dev/null +++ b/hp4155/MESA/lib/help.py @@ -0,0 +1,187 @@ +import matplotlib.pyplot as plt +import numpy as np +import time +from datetime import datetime + +import tkinter as tk +from tkinter import filedialog +import tkinter.messagebox + +import pandas as pd + +def normalization_factor(width): + factor = 10**6/width + return factor + +def add_widgets_to_list(source_dictionary,target_list): + for widget in source_dictionary.values(): + target_list.append(widget) + +def change_state(widgets_list): + for widget in widgets_list: + widget.disabled = not widget.disabled + +#saving functions : save parameters and dataframe to txt +def create_file(filename): + root = tk.Tk() + root.withdraw() + root.lift() #show window above all other applications + + root.attributes("-topmost", True)#window stays above all other applications + + file = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files","*.txt")],title = "save results path",initialfile =filename) + + #check if the file path is correct(.txt) + while file.endswith(".txt") == False: + #open again filedialog with error message box + tk.messagebox.showerror(message='invalid filename!') + file = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files","*.txt")],title = "save results path",initialfile =filename) + root.destroy() + return file + + +def check_values(parameters): + valid = True + + root = tk.Tk() + root.withdraw() + root.lift() #show window above all other applications + + root.attributes("-topmost", True)#window stays above all other applications + + #get better variable names + start = parameters['start'] + stop = parameters['stop'] + step = parameters['step'] + + #check values + if abs(step.value) > abs(stop.value-start.value) or step.value==0:#invalid parameter setting + valid = False + tkinter.messagebox.showerror(message="Invalid parameter setting!") + + if start.value<stop.value and step.value<0: #change polarity + step.value =(-1)*step.value + + elif start.value>stop.value and step.value>0: + step.value = (-1)*step.value + + else: + pass + + root.destroy() + return valid + +#Setup The device for mesa measurement +def setup(device): + device.reset() + + #setup sweep measurement mode + device.measurement_mode('SWE') + + #disable all irrelevant units + device.disable_not_smu() + + #disable smu 2 and 4 + device.smu_disable(2) + device.smu_disable(4) + +def measure(parameters,norm,device): + #delete user functions + device.del_user_functions() + + smu1 = device.smu_dict() + smu1.update(vname ='VGND',iname = 'IGND',mode = 'COMM',func='CONS') + + smu3 = device.smu_dict() + smu3.update(vname='V',iname='I',mode ='V',func='VAR1') + + device.setup_smu(1,smu1) + device.setup_smu(3,smu3) + + #define user functions + device.user_function('Imm','mA/mm',f'I*{norm}') + device.user_function('ABSImm','mA/mm','ABS(Imm)') + + var1 = device.var1_dict() + var1.update( + mode = parameters['hyst'].value, + start = parameters['start'].value, + stop = parameters['stop'].value, + step = parameters['step'].value, + comp = parameters['comp'].value, + pcomp = 0 + ) + + device.setup_var1(var1) + device.integration_time(parameters['integration'].value) + + + #display + device.display_variable('X','V') + device.display_variable('Y1','ABSImm') + + device.axis_scale('Y1','LOG') + + if parameters['start'].value < parameters['stop'].value: + device.display_variable_min_max('X','MIN',parameters['start'].value) + device.display_variable_min_max('X','MAX',parameters['stop'].value) + + else: + device.display_variable_min_max('X','MAX',parameters['start'].value) + device.display_variable_min_max('X','MIN',parameters['stop'].value) + + if parameters['comp'].value !=0: + device.display_variable_min_max('Y1','MIN',0) + device.display_variable_min_max('Y1','MAX',abs(parameters['comp'].value)*norm) + + + variables_list = ['V','I','Imm','ABSImm'] + device.variables_to_save(variables_list) + + device.single_measurement() + while device.operation_completed() == False: + pass + + device.autoscaling() + + values = dict([(variable,device.return_values(variable)) for variable in variables_list]) + return values + +def plot_results(x,y): + fig, ax1 = plt.subplots() + + color = 'tab:red' + ax1.set_xlabel('V/V') + ax1.set_ylabel('I/mA/mm', color = color) + ax1.set_yscale('log') + + ax1.plot(x,y, color = color) + ax1.tick_params(axis ='y', labelcolor = color) + + fig.suptitle('MESA Plot', fontweight ="bold") + fig.tight_layout() + fig.show() #interactve Figures + +def save_to_file(values,sample,parameters,file): + with open(file,'w') as f: + date = str(datetime.today().replace(microsecond=0)) + f.write(f"Mesa Measurement at {date}"+"\n") + f.write(f"Series:{sample['processing_number'].value}"+"\n") + f.write(f"Sample:{sample['sample'].value}"+"\n") + f.write(f"Field:{sample['field'].value}"+"\n") + f.write(f"Width/um:{sample['width'].value}"+"\n\n") + + f.write('Parameters\n') + f.write(f"V from {parameters['start'].value}V to {parameters['stop'].value}V with step {parameters['step'].value}V"+"\n") + f.write(f"I Compliance/A:{parameters['comp'].value}"+"\n") + f.write(f"Integration Time:{parameters['integration'].value}"+"\n") + + f.write("\nResults\n") + + #create pandas dataframe + df = pd.DataFrame(values) + + df = df.drop(columns=['ABSImm']) + df = df.rename(columns={'V':'V/V','I':'I/A','Imm':'Imm/mA/mm'}) + + df.to_csv(file,sep= " ",mode = 'a') \ No newline at end of file diff --git a/hp4155/MESA/lib/interface.py b/hp4155/MESA/lib/interface.py new file mode 100644 index 0000000..91362f4 --- /dev/null +++ b/hp4155/MESA/lib/interface.py @@ -0,0 +1,119 @@ +import ipywidgets as widgets +from ipywidgets import GridspecLayout,Layout +from IPython.display import clear_output +import sys +import os + +width = "50%" +height = 'auto' +style = {'description_width': 'initial'} +floatbox_width = "80%" + +def parameters_interface(): + grid = GridspecLayout(5,4) + grid[0,:]=widgets.Label("V (SMU3)",layout=Layout(height='auto', width='auto')) + grid[0,:].style.font_weight='bold' + + + #first line + grid[1,0]=widgets.Label("Start(V)",layout=Layout(height='auto', width='auto')) + grid[1,1]=widgets.Label("Step(V)",layout=Layout(height='auto', width='auto')) + grid[1,2]=widgets.Label("Stop(V)",layout=Layout(height='auto', width='auto')) + + #second line + grid[2,0]=widgets.BoundedFloatText(value=0,min=-100,max=100,step=1,layout=Layout(height='auto', width=floatbox_width)) + grid[2,1]=widgets.BoundedFloatText(value=0.5,min=-200,max=200,step=1,layout=Layout(height='auto', width=floatbox_width)) + grid[2,2]=widgets.BoundedFloatText(value=100,min=-100,max=100,step=1,layout=Layout(height='auto', width=floatbox_width)) + + #third line + grid[3,0]=widgets.Label("Compliance(A)",layout=Layout(height='auto', width='auto')) + grid[3,1] =widgets.Label("Integration Time",layout=Layout(height='auto', width='auto'))#mind the gap + grid[3,2] =widgets.Label("Hysterisis",layout=Layout(height='auto', width='auto'))#mind the gap + + #fourth line + grid[4,0]=widgets.BoundedFloatText(value=0.02,min=-0.1,max=0.1,step=0.01,layout=Layout(height='auto', width=floatbox_width)) + grid[4,1]=widgets.Dropdown(options=["SHORt","MEDium","LONG"],value="MEDium",style =style,layout=Layout(height='auto', width=floatbox_width)) + grid[4,2]=widgets.Dropdown(options=['SINGle','DOUBle'],value='SINGle',layout=Layout(height='auto', width=floatbox_width))#mind the gap + + parameters = { + 'start': grid[2,0], + 'step': grid[2,1], + 'stop': grid[2,2], + 'comp': grid[4,0], + 'hyst':grid[4,2], + 'integration':grid[4,1] + } + + + display(grid) + return parameters + + +def sample_information_interface(): + width = '90%' + sample_information=widgets.Label("Sample Information",layout=Layout(height=height, width='50%')) + sample_information.style.font_weight='bold' + information_grid=GridspecLayout(3,2) + + for i in range(3): + for j in range(2): + if i ==2 and j == 1: + #information_grid[i,j]=widgets.Dropdown(options=['mA/mm','uA/um'],value='mA/mm',layout=Layout(height=height, width=width))#mind the gap + pass + elif i == 2 and j == 0: + information_grid[i,j]=widgets.BoundedFloatText( + value=100, + min=1e-3, + max=sys.float_info.max,step=1, + layout=Layout(height=height, width=width) + ) + else: + information_grid[i,j]=widgets.Text(layout=Layout(height=height, width=width)) + + information_grid[0,0].description = "Processing-Nr:" + information_grid[1,0].description = "Sample:" + information_grid[2,0].description = "Device Width(um):" + information_grid[0,1].description = "Field(XYY):" + information_grid[1,1].description = "Device:" + information_grid[1,1].disabled = True + #information_grid[2,1].description = "Normalization:" + + for i in range(3): + for j in range(2): + try: + information_grid[i,j].style = style + except: + pass + + image_title = widgets.Label("SMU Configuration",layout=Layout(height=height, width='50%')) + image_title.style.font_weight='bold' + + filename = os.getcwd()+r"\lib\MESA_SMU_configuration.png" + #print(filename) + + file = open(filename, "rb") + image = file.read() + image_widget =widgets.Image( + value = image, + format='png', + width='auto', + height='auto', + ) + + #display(widgets.HBox([sample_information,image_title])) + #display(widgets.HBox([information_grid,image_widget])) + vbox1 =widgets.VBox([sample_information,information_grid]) + vbox2 =widgets.VBox([image_title,image_widget]) + + display(widgets.HBox([vbox1,vbox2])) + + information = { + 'processing_number': information_grid[0,0], + 'sample' : information_grid[1,0], + 'field': information_grid[0,1], + #'device':information_grid[1,1], + 'width': information_grid[2,0], + } + + return information + \ No newline at end of file diff --git a/hp4155/MESA/mesa.py b/hp4155/MESA/mesa.py new file mode 100644 index 0000000..b28f512 --- /dev/null +++ b/hp4155/MESA/mesa.py @@ -0,0 +1,39 @@ +import sys +sys.path.insert(0, './lib') +sys.path.insert(0, '..') #append parent directory + +import hp4155a +from interface import * +from help import * + +sample = sample_information_interface() +parameters =parameters_interface() +button = widgets.Button(description ='Start Measurement') +output = widgets.Output() + +display(button,output) + +all_widgets = [button] +add_widgets_to_list(sample,all_widgets) +add_widgets_to_list(parameters,all_widgets) + +device = hp4155a.HP4155a('GPIB0::17::INSTR') +setup(device) +def on_button_clicked(b): + with output: + clear_output(wait = True) + change_state(all_widgets) + norm=normalization_factor(sample['width'].value) + + valid = check_values(parameters) + if valid == True: + values = measure(parameters,norm,device) + plot_results(values['V'],values['ABSImm']) + filename = f"MESA_ISO_{sample['field'].value}.txt" + file = create_file(filename) + save_to_file(values,sample,parameters,file) + + change_state(all_widgets) + +button.on_click(on_button_clicked) + \ No newline at end of file diff --git a/hp4155/MESA/mesa_interface.ipynb b/hp4155/MESA/mesa_interface.ipynb new file mode 100644 index 0000000..45d6413 --- /dev/null +++ b/hp4155/MESA/mesa_interface.ipynb @@ -0,0 +1,101 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "1b607685-438c-466e-9671-140ae6c8d9f9", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1e8f68e7a1a44930b5f8aa7274a71bd1", + "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": "59dc533f8cc2493597699a3a72882bbf", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "GridspecLayout(children=(Label(value='V (SMU3)', layout=Layout(grid_area='widget001', height='auto', width='au…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b79166daed814a348b6538ae9102b66c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='Start Measurement', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "68d3460573264361a55153b8c1f43020", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Output()" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib widget\n", + "%run mesa.py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c62885a4-1186-4770-937f-fc8b5c484b98", + "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.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab