From f6eb34b3950faa6f4414d470337e39aa41ed31d5 Mon Sep 17 00:00:00 2001 From: unknown <asoalexandros@gmail.com> Date: Wed, 27 Nov 2024 10:10:58 +0100 Subject: [PATCH] Header from memristor measurement removed --- hp4155/memristor (Version 4.0)/memristor.py | 166 ++++--------------- hp4155/memristor (Version 4.0)/schematic.png | Bin 0 -> 17440 bytes 2 files changed, 31 insertions(+), 135 deletions(-) create mode 100644 hp4155/memristor (Version 4.0)/schematic.png diff --git a/hp4155/memristor (Version 4.0)/memristor.py b/hp4155/memristor (Version 4.0)/memristor.py index 094bba7..8a44695 100644 --- a/hp4155/memristor (Version 4.0)/memristor.py +++ b/hp4155/memristor (Version 4.0)/memristor.py @@ -6,16 +6,6 @@ from keyboard import add_hotkey,remove_hotkey # pulsed libraries from help_pulse import * -#additional variables -first = True #first measurement -""" -This is not anymore the first time you start a measurement but the first time you write a header -""" - -file = None #complete filename with path -#first_sampling = True #indicates first sampling for set and reset buttons because we cannot add two at each button -#we dont need this variable anymore - #create temporary file to store the results localy temp_file= os.path.join(os.getcwd(),'tempfile.txt') @@ -43,15 +33,14 @@ DUT = widgets.Text( style = {'description_width': 'initial'}, ) -#start new measurement button(new sample) -new=widgets.Button(description='next sample') #choose a new folder button new_folder = widgets.Button(description='change folder') -horizontal = widgets.HBox([sample_series,new]) -horizontal3= widgets.HBox([DUT,new_folder]) + +horizontal = widgets.HBox([sample_series,new_folder]) +horizontal3= widgets.HBox([DUT,]) #here contact scehmatic all_text_boxes = widgets.VBox([horizontal,field,horizontal3]) @@ -168,11 +157,6 @@ all = widgets.VBox([line0,line1,line2,line3,line4]) output = widgets.Output() -#help lists for changing state of the buttons -information = [sample_series,field,DUT] -buttons = [set,reset,full,new,new_folder,retention_button,contact_check,qcc,qcc_select] -parameters = [Vset,CC_vset,Vreset,CC_vreset,step,integration_time,number,sampling,Vretention,period,duration,auto_qcc] - #choose folder directory folder=choose_folder() @@ -198,7 +182,7 @@ tab.titles = titles display(tab,output) -all_widgets = [sweep_button,cons_button] +all_widgets = [ sweep_button,cons_button,sample_series,field,DUT,set,reset,full,new,new_folder,retention_button,contact_check,qcc,qcc_select,Vset,CC_vset,Vreset,CC_vreset,step,integration_time,number,sampling,Vretention,period,duration,auto_qcc] add_widgets_to_list(cons_dict,all_widgets) add_widgets_to_list(sweep_dict,all_widgets) @@ -206,22 +190,15 @@ add_widgets_to_list(sweep_dict,all_widgets) """ the above is what happens when the programm starts all the rest have to be written into button trigger functions""" def on_contact_check_clicked(b): - global first,folder,file,temp_file + global folder,temp_file with output: global first,folder,file,temp_file clear_output(wait = True) change_state(all_widgets) - change_state(buttons) - change_state(parameters) - #during first button press - if first == True: - change_state(information)#disable all widgets that are relevant about the information of the sample - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) + R = regular_contact_check() @@ -234,27 +211,16 @@ def on_contact_check_clicked(b): information_box("Contact Check Completed") change_state(all_widgets) - change_state(buttons) - change_state(parameters) def on_qcc_clicked(b): - global first,folder,file,temp_file + global folder,temp_file with output: - global first,folder,file,temp_file clear_output(wait = True) change_state(all_widgets) - change_state(buttons) - change_state(parameters) - - #during first button press - if first == True: - change_state(information)#disable all widgets that are relevant about the information of the sample - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) + if qcc_select.value == 'EBL': R = EBL() @@ -270,17 +236,16 @@ def on_qcc_clicked(b): information_box("Quick Contact Check Completed") change_state(all_widgets) - change_state(buttons) - change_state(parameters) - + def on_set_button_clicked(b): global first,folder,file,temp_file with output: #disable buttons change_state(all_widgets) - change_state(buttons) - change_state(parameters) + + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) device = setup_memristor() @@ -292,14 +257,6 @@ def on_set_button_clicked(b): #check values valid = check_values(step.value,Vset.value,Vreset.value) - #during first button press - if first == True and valid == True: - change_state(information)#disable all widgets that are relevant about the information of the sample - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False if valid == True: if sampling.value == True: #do sampling set before set process(100mV) @@ -335,19 +292,17 @@ def on_set_button_clicked(b): del device - change_state(buttons) - change_state(parameters) change_state(all_widgets) def on_reset_button_clicked(b): - global first,folder,file,temp_file + global folder,temp_file with output: change_state(all_widgets) - change_state(buttons) - change_state(parameters) - device = setup_memristor() + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) + #lock device device.inst.lock_excl() @@ -356,15 +311,6 @@ def on_reset_button_clicked(b): #check values valid = check_values(step.value,Vset.value,Vreset.value) - #during first button press - if first == True and valid == True: - #disable checkboxes, text fields etc. - change_state(information) - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False #set first to false irrelvant if it is in the if statement or not if valid == True: if sampling.value == True: #do sampling set before reset process(10mV) @@ -407,17 +353,16 @@ def on_reset_button_clicked(b): del device - change_state(buttons) - change_state(parameters) change_state(all_widgets) def on_full_button_clicked(b): - global first,folder,file,temp_file + global folder,temp_file with output: - change_state(buttons) - change_state(parameters) change_state(all_widgets) + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) + device= setup_memristor() # lock device @@ -565,52 +510,23 @@ def on_full_button_clicked(b): del device - change_state(buttons) - change_state(parameters) change_state(all_widgets) -#move to next sample -def on_new_sample_button_clicked(b): - global first - with output: - #the if is to ensure that is not pressed many times - #just in case the user presses anything - change_state(buttons) - change_state(parameters) - change_state(all_widgets) - - first = True - #change_state(information) not anymore creating changing state but enabling the widgets - enable_widgets(information) - #sample_series.value='' - #field.value='' - DUT.value='' - - #enable again - change_state(buttons) - change_state(parameters) - change_state(all_widgets) #new_folder clicked def on_new_folder_button_clicked(b): global folder,file,first with output: - change_state(buttons) #just to be sure - change_state(parameters) change_state(all_widgets) - folder = choose_folder()#choose new folder - #file = create_file(sample_series,field,DUT,folder) #and create the new file (creates multiple headers!!!) - first = True #that will write header if the directory is the same as the previous one! - change_state(buttons) - change_state(parameters) + folder = choose_folder() #choose new folder + change_state(all_widgets) def on_retention_button_clicked(b): global first,folder,file,temp_file with output: - change_state(buttons) - change_state(parameters) + change_state(all_widgets) device = setup_memristor() @@ -619,15 +535,8 @@ def on_retention_button_clicked(b): clear_output() - #during first button press - if first == True: - #disable checkboxes, text fields etc. - change_state(information) - filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" - file = os.path.join(folder,filename) - #write header to temp_file - write_header(temp_file,sample_series,field,DUT) - first = False #set first to false irrelvant if it is in the if statement or not + filename=f"{sample_series.value}_{field.value}_{DUT.value}.txt" + file = os.path.join(folder,filename) #execute measurement t,R=retention(Vretention.value,period.value,duration.value,device) @@ -645,18 +554,13 @@ def on_retention_button_clicked(b): del device - change_state(buttons) - change_state(parameters) change_state(all_widgets) def on_sweep_button_clicked(b): with output: - global first clear_output(wait = True) change_state(all_widgets) - change_state(buttons) - change_state(parameters) check_pulse(sweep_dict) sample_dict= { @@ -672,8 +576,6 @@ def on_sweep_button_clicked(b): plot_sweep_pulse(values) save_sweep(folder,sample_dict,values,times,sweep_dict) change_state(all_widgets) - change_state(buttons) - change_state(parameters) def on_constant_button_clicked(b): @@ -681,8 +583,7 @@ def on_constant_button_clicked(b): global first clear_output(wait = True) change_state(all_widgets) - change_state(buttons) - change_state(parameters) + check_pulse(sweep_dict) sample_dict= { @@ -690,16 +591,12 @@ def on_constant_button_clicked(b): 'field':field, 'dut':DUT } - if first == True: - change_state(information) - first = False times,values = constant_meas(cons_dict) plot_constant_pulse(values) save_constant(folder,sample_dict,values,times,cons_dict) change_state(all_widgets) - change_state(buttons) - change_state(parameters) + #link buttons to widgets (pulsed) sweep_button.on_click(on_sweep_button_clicked) @@ -709,7 +606,6 @@ cons_button.on_click(on_constant_button_clicked) set.on_click(on_set_button_clicked) reset.on_click(on_reset_button_clicked) full.on_click(on_full_button_clicked) -new.on_click(on_new_sample_button_clicked) new_folder.on_click(on_new_folder_button_clicked) retention_button.on_click(on_retention_button_clicked) contact_check.on_click(on_contact_check_clicked) diff --git a/hp4155/memristor (Version 4.0)/schematic.png b/hp4155/memristor (Version 4.0)/schematic.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3a144bfd6c17374838b2d9222e57173fe2fcd8 GIT binary patch literal 17440 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 literal 0 HcmV?d00001 -- GitLab