diff --git a/hp4155/Custom_SMU/debug.ipynb b/hp4155/Custom_SMU/debug.ipynb index 88f4e5b2f3906e13c7a683a86d8d18c77a22bc4f..77b71c0b6caa69365d41ddc2a991cbd94584517b 100644 --- a/hp4155/Custom_SMU/debug.ipynb +++ b/hp4155/Custom_SMU/debug.ipynb @@ -9,7 +9,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e0c05966295b480084cd0c192364699c", + "model_id": "0450843a82be4f3fbe7a87920f890f4f", "version_major": 2, "version_minor": 0 }, @@ -23,7 +23,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5cdeb91c8cd241a49fa19ce9ba786941", + "model_id": "f76add8fe754452e904885c809dea1df", "version_major": 2, "version_minor": 0 }, @@ -37,7 +37,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9f73930882314ec8b9866c902ea98ed2", + "model_id": "31436a2c3a9545bcaa4614b567215425", "version_major": 2, "version_minor": 0 }, @@ -567,6 +567,8 @@ " if duration <= 0:\n", " error_box(\"Stress Time should be positive!\")\n", " change_state(first_page,second_page,third_page,fourth_page,fifth_page)\n", + " start.disabled = False\n", + " ini.disabled = False\n", " return\n", " hold_time = third_page[16,0].value\n", " filter = int(third_page[17,0].value)\n", @@ -635,7 +637,7 @@ " for i, smu in enumerate(smus):\n", " config.add_section(f\"SMU{i+1}\")\n", " for key,value in smu.items():\n", - " config.set(f\"SMU{i+1}\",key,value)\n", + " config.set(f\"SMU{i+1}\",key,str(value))\n", "\n", " config.add_section('PARAMETERS')\n", " config.set('PARAMETERS', \"STRESS TIME\",str(duration))\n", diff --git a/hp4155/Custom_SMU/interface_custom.ipynb b/hp4155/Custom_SMU/interface_custom.ipynb index 52d3d5c36393736e1bba2be07ae80ba59c030541..138fcb8bef58952ebfdd04410675b358deb76ecb 100644 --- a/hp4155/Custom_SMU/interface_custom.ipynb +++ b/hp4155/Custom_SMU/interface_custom.ipynb @@ -2,51 +2,17 @@ "cells": [ { "cell_type": "code", - "execution_count": null, - "id": "a40693da-961a-434d-89f5-6443c0acb517", + "execution_count": 1, + "id": "3f5d53eb-4723-4e65-8d58-22888bcc84b1", "metadata": {}, "outputs": [ { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "07ccc2d2ed024b878a9d69c3903880e5", - "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": "beeb721fca534858b4b08e86adb95e7c", - "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": "6959057ebb5d4959be53648e831ed217", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Output()" - ] - }, - "metadata": {}, - "output_type": "display_data" + "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" + ] } ], "source": [ diff --git a/hp4155/Custom_SMU/main.py b/hp4155/Custom_SMU/main.py index 81c753e86cc6ac1e4a1c2f2883c6738d3d74e14f..98f8c9c01d0508f5c2ba79fbe93564fad4a11af9 100644 --- a/hp4155/Custom_SMU/main.py +++ b/hp4155/Custom_SMU/main.py @@ -24,7 +24,7 @@ tab.titles = titles display(tab) start = widgets.Button(description='Start Measurement') -ini = widgets.Button(description = 'Import from ini.') +ini = widgets.Button(description = 'Import from ini. (Coming Soon)',style = {'description_width': 'initial'},layout=Layout(height='auto', width='auto')) output = widgets.Output() display(widgets.HBox([start,ini]),output) @@ -130,10 +130,10 @@ def on_start_clicked(b): ) var2 = create_dict( start = third_page[4,1].value, - stop = third_page[5,1].value, + step = third_page[5,1].value, points = third_page[6,1].value, comp = third_page[7,1].value, - pcomp=third_page[8,1] + pcomp=third_page[8,1].value ) vard = create_dict( offset=third_page[4,2].value, @@ -211,7 +211,7 @@ def on_start_clicked(b): # List all errors occured counter,message = device.list_all_errors() - if counter>1: + if counter>0: error_box(message) change_state(first_page,second_page,third_page,fourth_page,fifth_page) start.disabled = False @@ -223,15 +223,15 @@ def on_start_clicked(b): # These are correcly defined and include the plotted ones values = {} for variable in variables: - key = f"{variable['name']} ({variable['unit']})" - values[key] = device.return_data(variable['name']) + key = variable['name']+"("+variable['unit'] +")" + values[key] = device.return_values(variable['name']) plot_results(values,device) # Save results - df = pd.Dataframe(values) + df = pd.DataFrame(values) - filename = f"{sample_series}_{field}_{dut}_{measurement_name}.txt" + filename = f"{sample_series}_{field}_{dut}_{measurement_name}_sweep.txt" txt_file = create_file(filename) ini_file = os.path.splitext(txt_file)[0]+'.ini' @@ -239,7 +239,7 @@ def on_start_clicked(b): date = str(datetime.today().replace(microsecond=0)) f.write(f"{measurement_name} (sweep) at {date}:"+"\n") f.write("Sample Information\n") - f.write(f"Processing Number:{proceccing_nr}"+"\n") + f.write(f"Processing Number:{processing_nr}"+"\n") f.write(f"Sample Series:{sample_series}"+"\n") f.write(f"Field:{field}"+"\n") f.write(f"DUT:{dut}"+"\n") @@ -264,53 +264,53 @@ def on_start_clicked(b): for i, smu in enumerate(smus): config.add_section(f"SMU{i+1}") for key,value in smu.items(): - config.set(f"SMU{i+1}",key,value) + config.set(f"SMU{i+1}",key,str(value)) # Secondly the user functions config.add_section("USER FUNCTIONS") for i, user_function in enumerate(user_functions): config.add_section(f"USER FUNCTION {i+1}") for key,value in user_function.items(): - config.set(f"USER FUNCTION {i+1}",key,value) + config.set(f"USER FUNCTION {i+1}",key,str(value)) # Then the 3rd page config.add_section("VAR1") for key,value in var1.items(): - config.set("VAR1",key,value) + config.set("VAR1",key,str(value)) config.add_section("VAR2") for key,value in var2.items(): - config.set("VAR2",key,value) + config.set("VAR2",key,str(value)) config.add_section("VARD") for key, value in vard.items(): - config.set("VARD",key,value) + config.set("VARD",key,str(value)) config.add_section("PULSE") for key,value in pulse.items(): - config.set("PULSE",key,value) + config.set("PULSE",key,str(value)) # Now The constant smus config.add_section('CONSTANT SMUS') for i, cons_smu in enumerate(cons_smus): config.add_section(f"CONSTANT SMU{i+1}") for key, value in cons_smu.items(): - config.set(f"CONSTANT SMU{i+1}",key,value) + config.set(f"CONSTANT SMU{i+1}",key,str(value)) # Page 4 The axes config.add_section('AXES') for i,axis in enumerate(axes): - config_add_section(f"AXIS {i+1}") + config.add_section(f"AXIS {i+1}") for key,value in axis.items(): - config.set(f"AXIS {i+1}",key,value) + config.set(f"AXIS {i+1}",key,str(value)) # Page 5 The varibles config.add_section("SAVED VARIABLES") for i, variable in enumerate(variables): config.add_section(f"VARIABLE {i+1}") for key,value in variable.items(): - config.set(f"VARIABLE {i+1}",key,value) + config.set(f"VARIABLE {i+1}",key,str(value)) config.write(configfile) # Sampling Measurement Mode @@ -323,7 +323,7 @@ def on_start_clicked(b): points=third_page[14,0].value, filter=int(third_page[17,0].value) ) - duration = third_page[13,0].value + duration = third_page[15,0].value # Set the smus all constant #page 1 @@ -372,15 +372,10 @@ def on_start_clicked(b): device.total_sampling_time(duration) # Setup the constant SMUs - cons_smu_numbers = check_cons_smu_sampling(smus) - for i, cons_smu in enumerate(smus): + cons_smu_numbers = check_cons_smu_samp(smus) + for i, cons_smu in enumerate(cons_smus): if i+1 in cons_smu_numbers: # check if the constant smu was found in the first page func - device.setup_smu_sampling(i+1,cons_smu) - - # Set integration time - device.intergration_time(integration_time) - - + device.setup_smu_sampling(i+1,cons_smu) # Now set the axes setup_axes(axes,device) @@ -405,7 +400,7 @@ def on_start_clicked(b): # List all errors occured counter,message = device.list_all_errors() - if counter>1: + if counter>0: error_box(message) change_state(first_page,second_page,third_page,fourth_page,fifth_page) start.disabled = False @@ -417,13 +412,13 @@ def on_start_clicked(b): # These are correcly defined and include the plotted ones values = {} for variable in variables: - key = f"{variable['name']} ({variable['unit']})" - values[key] = device.return_data(variable['name']) + key = variable['name']+"("+variable['unit'] +")" + values[key] = device.return_values(variable['name']) plot_results(values,device) # Save results - df = pd.Dataframe(values) + df = pd.DataFrame(values) filename = f"{sample_series}_{field}_{dut}_{measurement_name}_sampling.txt" txt_file = create_file(filename) @@ -433,7 +428,7 @@ def on_start_clicked(b): date = str(datetime.today().replace(microsecond=0)) f.write(f"{measurement_name} (sampling) at {date}:"+"\n") f.write("Sample Information\n") - f.write(f"Processing Number:{proceccing_nr}"+"\n") + f.write(f"Processing Number:{processing_nr}"+"\n") f.write(f"Sample Series:{sample_series}"+"\n") f.write(f"Field:{field}"+"\n") f.write(f"DUT:{dut}"+"\n") @@ -458,41 +453,41 @@ def on_start_clicked(b): for i, smu in enumerate(smus): config.add_section(f"SMU{i+1}") for key,value in smu.items(): - config.set(f"SMU{i+1}",key,value) + config.set(f"SMU{i+1}",key,str(value)) # Secondly the user functions config.add_section("USER FUNCTIONS") for i, user_function in enumerate(user_functions): config.add_section(f"USER FUNCTION {i+1}") for key,value in user_function.items(): - config.set(f"USER FUNCTION {i+1}",key,value) + config.set(f"USER FUNCTION {i+1}",key,str(value)) # Then the 3rd page config.add_section('SAMPLING PARAMETERS') for key,value in parameters.items(): - config.set('SAMPLING PARAMETERS',key,value) + config.set('SAMPLING PARAMETERS',key,str(value)) # Now the constant smus config.add_section('CONSTANT SMUS') for i, cons_smu in enumerate(cons_smus): config.add_section(f"CONSTANT SMU{i+1}") for key, value in cons_smu.items(): - config.set(f"CONSTANT SMU{i+1}",key,value) + config.set(f"CONSTANT SMU{i+1}",key,str(value)) # Page 4 The axes config.add_section('AXES') for i,axis in enumerate(axes): - config_add_section(f"AXIS {i+1}") + config.add_section(f"AXIS {i+1}") for key,value in axis.items(): - config.set(f"AXIS {i+1}",key,value) + config.set(f"AXIS {i+1}",key,str(value)) # Page 5 The varibles config.add_section("SAVED VARIABLES") for i, variable in enumerate(variables): config.add_section(f"VARIABLE {i+1}") for key,value in variable.items(): - config.set(f"VARIABLE {i+1}",key,value) + config.set(f"VARIABLE {i+1}",key,str(value)) config.write(configfile) else: # Stress @@ -516,10 +511,12 @@ def on_start_clicked(b): ) # Now define the parameters - duration = third_page[13,0].value + duration = third_page[15,0].value if duration <= 0: error_box("Stress Time should be positive!") change_state(first_page,second_page,third_page,fourth_page,fifth_page) + start.disabled = False + ini.disabled = False return hold_time = third_page[16,0].value filter = int(third_page[17,0].value) @@ -537,11 +534,11 @@ def on_start_clicked(b): # Now set the Parameters device.stress_filter(filter) - device.hold_time(hold_time) + device.stress_hold_time(hold_time) device.stress_time(duration) - cons_smu_numbers = check_cons_smu_sampling(smus) # works also for sampling - for i, cons_smu in enumerate(smus): + cons_smu_numbers = check_cons_smu_samp(smus) # works also for sampling + for i, cons_smu in enumerate(cons_smus): if i+1 in cons_smu_numbers: # check if the constant smu was found in the first page func device.setup_smu_stress(i+1,cons_smu) @@ -552,14 +549,14 @@ def on_start_clicked(b): # List all errors occured counter,message = device.list_all_errors() - if counter>1: + if counter>0: error_box(message) change_state(first_page,second_page,third_page,fourth_page,fifth_page) start.disabled = False ini.disabled = False return - filename = f"{sample_series}_{field}_{dut}_{measurement_name}_sweep.txt" + filename = f"{sample_series}_{field}_{dut}_{measurement_name}_stress.txt" txt_file = create_file(filename) ini_file = os.path.splitext(txt_file)[0]+'.ini' @@ -567,7 +564,7 @@ def on_start_clicked(b): date = str(datetime.today().replace(microsecond=0)) f.write(f"{measurement_name} (Stress) at {date}:"+"\n") f.write("Sample Information\n") - f.write(f"Processing Number:{proceccing_nr}"+"\n") + f.write(f"Processing Number:{processing_nr}"+"\n") f.write(f"Sample Series:{sample_series}"+"\n") f.write(f"Field:{field}"+"\n") f.write(f"DUT:{dut}"+"\n") @@ -588,12 +585,12 @@ def on_start_clicked(b): for i, smu in enumerate(smus): config.add_section(f"SMU{i+1}") for key,value in smu.items(): - config.set(f"SMU{i+1}",key,value) + config.set(f"SMU{i+1}",key,str(value)) config.add_section('PARAMETERS') - config.set('PARAMETERS', "STRESS TIME",duration) - config.set('PARAMETERS', "HOLD TIME",hold_time) - config.set('PARAMETERS', "FILTER",filter) + config.set('PARAMETERS', "STRESS TIME",str(duration)) + config.set('PARAMETERS', "HOLD TIME",str(hold_time)) + config.set('PARAMETERS', "FILTER",str(filter)) # Now the constant smus @@ -601,7 +598,7 @@ def on_start_clicked(b): for i, cons_smu in enumerate(cons_smus): config.add_section(f"CONSTANT SMU{i+1}") for key, value in cons_smu.items(): - config.set(f"CONSTANT SMU{i+1}",key,value) + config.set(f"CONSTANT SMU{i+1}",key,str(value)) config.write(configfile) # End of fuction @@ -653,10 +650,4 @@ def on_ini_clicked(b): """ -start.on_click(on_start_clicked) - - - - - - \ No newline at end of file +start.on_click(on_start_clicked) \ No newline at end of file