class Keithley(): def __init__(self, main, ui): self.ui = ui self.copyDataFunc = main.CopyDataFunc self.collect_data_thread = Collect_data() self.save_thread = Save_Thread() main.connect(self.ui.pushButton_browse_keithley, SIGNAL('clicked()'), self.Browse_keithley) main.connect(self.ui.pushButton_import_keithley, SIGNAL('clicked()'), self.Import_keithley) main.connect(self.ui.pushButton_close_keithley, SIGNAL('clicked()'), self.Close_keithley) main.connect(self.ui.pushButton_select_keithley, SIGNAL('clicked()'), self.Select_keithley) main.connect(self.ui.pushButton_scan_keithley, SIGNAL('clicked()'), self.Scan_keithley) main.connect(self.ui.pushButton_pause_keithley, SIGNAL('clicked()'), self.collect_data_thread.pause) main.connect(self.ui.pushButton_stop_keithley, SIGNAL('clicked()'), self.collect_data_thread.stop) main.connect(self.ui.pushButton_clear_keithley, SIGNAL('clicked()'), self.collect_data_thread.Clear_keithley) main.connect(self.ui.pushButton_copy_keithley, SIGNAL('clicked()'), self.Copy_keithley) main.connect(self.ui.pushButton_fit_keithley, SIGNAL('clicked()'), self.collect_data_thread.Fit) main.connect(self.ui.pushButton_browse_save_G_keithley, SIGNAL('clicked()'), self.Google_browse) main.connect(self.ui.pushButton_browse_save_O_keithley, SIGNAL('clicked()'), self.Other_browse) main.connect(self.ui.pushButton_check_G_keithley, SIGNAL('clicked()'), self.Check) main.connect(self.ui.pushButton_Select_Directory_G_keithley, SIGNAL('clicked()'), self.Google_select_namefolder) main.connect(self.ui.pushButton_Save_G_keithley, SIGNAL('clicked()'), self.G_save) main.connect(self.ui.pushButton_Open_G_keithley, SIGNAL('clicked()'), self.G_open) main.connect(self.ui.pushButton_Save_O_keithley, SIGNAL('clicked()'), self.O_save) main.connect(self.ui.pushButton_Open_O_keithley, SIGNAL('clicked()'), self.O_open) main.connect( self.ui.radioButton_voltage_keithley, SIGNAL("clicked()"), lambda: self.ui.tabWidget_scan_keithley.setCurrentIndex(0)) main.connect(self.ui.radioButton_timescan_keithley, SIGNAL("clicked()"), self.collect_data_thread.Pre_MPL_Plot) main.connect(self.ui.radioButton_stepscan_keithley, SIGNAL("clicked()"), self.collect_data_thread.Pre_MPL_Plot) main.connect(self.collect_data_thread, SIGNAL("plot"), self.Plot_data) main.connect(self.collect_data_thread, SIGNAL("mpl_plot"), self.Plot_analysis) main.connect(self.collect_data_thread, SIGNAL("data_available"), self.Pre_save) # self.connect(self.Keithley_programs.collect_data_thread, SIGNAL("clear_plot"), self.Keithley_programs.Clear_plot) self.Array = [] self.count = 0 self.go_on = True # Set up guiqwt plot self.curve_item = make.curve([], [], color='b', marker="o") self.ui.curvewidget_keithley.plot.add_item(self.curve_item) self.ui.curvewidget_keithley.plot.set_antialiasing(True) self.ui.curvewidget_keithley.plot.set_titles( "Measurement and Plot Based on Array", "X-Axis", "Y-Axis") self.curve_ct_item = make.curve([], [], color='b', marker="o") self.ui.curvewidget_ct_keithley.plot.add_item(self.curve_ct_item) self.ui.curvewidget_ct_keithley.plot.set_antialiasing(True) self.ui.curvewidget_ct_keithley.plot.set_titles( "Current vs Time", "Time", "Current") self.curve_vt_item = make.curve([], [], color='b', marker="o") self.ui.curvewidget_vt_keithley.plot.add_item(self.curve_vt_item) self.ui.curvewidget_vt_keithley.plot.set_antialiasing(True) self.ui.curvewidget_vt_keithley.plot.set_titles( "Voltage vs Time", "Time", "Voltage") # Tab: Keithley # Group: Import # Search and find the directory of the file you want to import def Browse_keithley(self): prev_dir = os.getcwd() fileDir = QFileDialog.getOpenFileName(None, 'Select File to Import', prev_dir, filter="Array Files (*.array)") if fileDir != '': file_list = str(fileDir).split('/') for i in range(0, len(file_list) - 1): global open_dir open_dir = '' if i < len(file_list) - 1: open_dir += file_list[i] + '\\' elif i == len(file_list) - 1: open_dir += file_list[i] fileDir.replace('/', '\\') self.ui.lineEdit_directory_keithley.setText(fileDir) self.ui.pushButton_import_keithley.setEnabled(True) self.ui.lineEdit_condition_keithley.setText( 'File: "' + file_list[len(file_list) - 1] + '" has been chosen.') else: self.ui.lineEdit_condition_keithley.setText( "Please choose valid file to import.") # Tab: Keithley # Group: Import # Import the file ends in ".array" def Import_keithley(self): divider_found = True count = 0 temp = 0 self.Array = [] x_value = [] y_value = [] fileDir = self.ui.lineEdit_directory_keithley.text() fp = open(fileDir) while True: if count == 5000: self.ui.lineEdit_condition_keithley.setText( "Data not found in file. Please check it.") divider_found = False break line = fp.readline() line_list = line.split(',') if line_list[0].upper() == "Array Data".upper() + '\n': break count += 1 if divider_found == True: line = fp.readline() while True: line = fp.readline().replace('\n', '') print 'line: ' + line if line == '': break value = line.split(',') x_value.append(temp) x_value.append(temp + 1) y_value.append(value[1]) y_value.append(value[1]) self.Array.append(float(value[1])) temp += 1 self.Plot_import(x_value, y_value) self.ui.lineEdit_condition_keithley.setText( "File is imported correctly.") self.ui.groupBox_visa_keithley.setEnabled(True) def Copy_keithley(self): Values = self.copyDataFunc() if Values != None: self.ui.lineEdit_condition_keithley.setText( 'Array has been copied and plotted.') self.ui.tabWidget_plot_keithely.setCurrentIndex(0) self.Array = [] x_value = [] y_value = [] item = 0 for i in range(0, len(Values)): for j in range(0, len(Values[i])): x_value.append(item) x_value.append(item + 1 - 0.0001) y_value.append(Values[i][j]) y_value.append(Values[i][j]) self.Array.append(Values[i][j]) item += 1 self.Plot_import(x_value, y_value) self.ui.lineEdit_directory_keithley.setText( 'From Array Builder Tab.') self.ui.groupBox_visa_keithley.setEnabled(True) self.ui.groupBox_xvalue_keithley.setEnabled(True) else: self.ui.lineEdit_condition_keithley.setText( 'No valid array to copy.') def Plot_import(self, x, y): self.Reset_plot_import() self.axes_import.plot(x, y, marker='.', linestyle='-') self.axes_import.grid() self.axes_import.set_title("Array Import Plot") self.axes_import.set_xlabel("Steps") self.axes_import.set_ylabel("Values") self.ui.mplwidget_import.draw() def Plot_analysis(self): self.ui.tabWidget_plot_keithely.setCurrentIndex(2) self.ui.mplwidget_analysis.draw() self.ui.mplwidget_ct_analysis.draw() self.ui.mplwidget_vt_analysis.draw() def Plot_data(self, voltage, current, time, step): self.ui.label_yvalue_keithley.setText(format(current, '.3f')) self.ui.label_xvalue_keithley.setText(format(voltage, '.3f')) if self.ui.radioButton_timescan_keithley.isChecked(): self.ui.label_tvalue_keithley.setText(format(time, '.3f')) elif self.ui.radioButton_stepscan_keithley.isChecked(): self.ui.label_tvalue_keithley.setText(str(step)) self.ui.curvewidget_keithley.plot.do_autoscale() self.ui.curvewidget_ct_keithley.plot.do_autoscale() self.ui.curvewidget_vt_keithley.plot.do_autoscale() self.curve_item.plot().replot() self.curve_ct_item.plot().replot() self.curve_vt_item.plot().replot() def Clear_plot(self): self.ui.mplwidget_analysis.draw() self.ui.mplwidget_ct_analysis.draw() self.ui.mplwidget_vt_analysis.draw() self.curve_item.plot().replot() self.curve_ct_item.plot().replot() self.curve_vt_item.plot().replot() # Reset the import matplot widget def Reset_plot_import(self): self.ui.mplwidget_import.figure.clear() self.axes_import = self.ui.mplwidget_import.figure.add_subplot(111) def Refresh_visa(self): self.rm = visa.ResourceManager() try: all_visas = self.rm.list_resources() except: all_visas = "No Visa Available." self.ui.comboBox_visa_keithley.clear() for item in all_visas: self.ui.comboBox_visa_keithley.addItem(item) # Tab: Keithley # Group: Visa # Select the visa address of the Keithley def Select_keithley(self): self.visa_address = str(self.ui.comboBox_visa_keithley.currentText()) self.rm = visa.ResourceManager() self.rm.list_resources() inst = self.rm.open_resource(self.visa_address) self.visa_check = self.Check_visa(inst) if self.visa_check == True: self.ui.lineEdit_condition_keithley.setText( "Visa is selected succefully!") self.visa_name = inst.query("*IDN?") self.ui.lineEdit_visa_keithley.setText(self.visa_name) self.visa_chosen = inst self.ui.groupBox_scan_keithley.setEnabled(True) elif self.visa_check == False: self.ui.lineEdit_condition_keithley.setText( "Invalid visa address.") self.ui.lineEdit_visa_keithley.setText("None.") self.visa_chosen = False def Check_visa(self, inst): try: inst.ask("*IDN?") valid = True except: valid = False return valid # Tab: Keithley # Group: Visa # Close the visa address you choose def Close_keithley(self): self.visa_chosen.close() self.ui.lineEdit_condition_keithley.setText('Visa address is closed') self.ui.lineEdit_visa_keithley.setText('') self.ui.groupBox_scan_keithley.setEnabled(False) # Tab: Keithley # Group: Scan # Start to scan by the keithley def Scan_keithley(self): c_limit = 0 try: if self.ui.lineEdit_climit_keithley.text() != '': c_limit = float(self.ui.lineEdit_climit_keithley.text()) self.collect_data_thread.input(self.visa_chosen, self.ui, self.Array, self.go_on, self.curve_item, self.curve_ct_item, self.curve_vt_item, c_limit) self.ui.pushButton_pause_keithley.setEnabled(True) self.ui.pushButton_stop_keithley.setEnabled(True) self.ui.pushButton_scan_keithley.setEnabled(False) except ValueError: self.ui.lineEdit_condition_keithley.setText( "Invalid current limit.") def Google_browse(self): prev_dir = 'C:\\' file_list = [] file_dir = QFileDialog.getExistingDirectory( None, 'Select Google Drive Folder', prev_dir) if file_dir != '': file_list = str(file_dir).split('/') # for i in range(0, len(file_list) - 1): # if i < len(file_list) - 1: # open_dir += file_list[i] + '\\' # elif i == len(file_list) - 1: # open_dir += file_list[i] file_dir.replace('/', '\\') self.ui.lineEdit_GoogleDrive_G_keithley.setText(file_dir) self.ui.label_condition_G_keithley.setText( 'Open Google Drive User Folder') self.ui.pushButton_check_G_keithley.setEnabled(True) def Other_browse(self): prev_dir = os.getcwd() fileDir = QFileDialog.getExistingDirectory(None, 'Select Folder to Save', prev_dir) if fileDir != '': open_dir = '' file_list = str(fileDir).split('/') for i in range(0, len(file_list) - 1): if i < len(file_list) - 1: open_dir += file_list[i] + '\\' elif i == len(file_list) - 1: open_dir += file_list[i] fileDir.replace('/', '\\') self.O_directory = fileDir self.ui.lineEdit_directory_O_keithley.setText(fileDir) self.ui.label_username_O_keithley.setEnabled(True) self.ui.comboBox_Name_Folder_O_keithley.setEnabled(True) self.ui.groupBox_Filename_O_keithley.setEnabled(True) self.ui.groupBox_File_Type_O_keithley.setEnabled(True) self.ui.label_comment_O_keithley.setEnabled(True) self.ui.textEdit_comment_O_keithley.setEnabled(True) self.ui.pushButton_Save_O_keithley.setEnabled(True) self.ui.lineEdit_Custom_Name_O_keithley.setEnabled(True) self.ui.label_condition_O_keithley.setText( "Click save button to save.") else: self.ui.lineEdit_directory_O_keithley.setText('None') self.ui.label_condition_O_keithley.setText('Failed to Read File') def Check(self): self.G_directory = '' file_list = [] file_list = str( self.ui.lineEdit_GoogleDrive_G_keithley.text()).split('\\') if os.path.exists( self.ui.lineEdit_GoogleDrive_G_keithley.text()) == False: self.ui.label_condition_G_keithley.setText( 'Incorrect Google Drive Directory.') else: self.ui.label_condition_G_keithley.setText( 'Please click browse to the "03 User Accounts" folder') for i in range(0, len(file_list)): self.G_directory += file_list[i] + '\\' if file_list[i].upper() == '03 User Accounts'.upper(): self.ui.label_namefolder_G_keithley.setEnabled(True) self.ui.comboBox_Name_Folder_G_keithley.setEnabled(True) self.ui.pushButton_Select_Directory_G_keithley.setEnabled( True) self.ui.label_condition_G_keithley.setText( 'Choose name folder in Google Drive to save.') break def Google_select_namefolder(self): namefolder = str(self.ui.comboBox_Name_Folder_G_keithley.currentText()) if namefolder == 'None': self.ui.label_condition_G_keithley.setText( 'Please choose a name folder to save.') else: now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) self.ui.label_G_keithley.setText("Save to \\" + namefolder + "\Date" + '\\' + date) self.G_directory += namefolder + "\Data" + '\\' + date + '\\' + 'Keithely with Array' self.ui.groupBox_File_Type_G_keithley.setEnabled(True) self.ui.groupBox_Filename_G_keithley.setEnabled(True) self.ui.label_comment_G_keithley.setEnabled(True) self.ui.textEdit_comment_G_keithley.setEnabled(True) self.ui.pushButton_Save_G_keithley.setEnabled(True) self.ui.lineEdit_Custom_Name_G_keithley.setEnabled(True) self.ui.label_condition_G_keithley.setText( 'Click save button to save.') def Select_type_G_keithley(self): if self.ui.radioButton_csv_G_keithley.isChecked(): self.G_type = '.csv' self.G_divide = ',' elif self.ui.radioButton_txt_G_keithley.isChecked(): self.G_type = '.txt' self.G_divide = '\t' def Select_type_O_keithley(self): if self.ui.radioButton_csv_O_keithley.isChecked(): self.O_type = '.csv' self.O_divide = ',' elif self.ui.radioButton_txt_O_keithley.isChecked(): self.O_type = '.txt' self.O_divide = '\t' def Select_name_G_keithley(self): if self.ui.radioButton_Timename_G_keithley.isChecked(): now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) current_time = '%s.%s.%s' % (now.hour, now.minute, now.second) date_and_time = date + ' ' + current_time self.G_file_name = str(date_and_time) elif self.ui.radioButton_Custom_Name_G_keithley.isChecked(): self.G_file_name = str( self.ui.lineEdit_Custom_Name_G_keithley.text()) def Select_name_O_keithley(self): if self.ui.radioButton_Timename_O_keithley.isChecked(): now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) current_time = '%s.%s.%s' % (now.hour, now.minute, now.second) date_and_time = date + ' ' + current_time self.O_file_name = str(date_and_time) elif self.ui.radioButton_Custom_Name_O_keithley.isChecked(): self.O_file_name = str( self.ui.lineEdit_Custom_Name_O_keithley.text()) def Pre_save(self, date_value, t_value, x_value, y_value, array): self.date_value = date_value self.t_value = t_value self.x_value = x_value self.y_value = y_value self.array = array def G_save(self): if self.ui.radioButton_Custom_Name_G_keithley.isChecked( ) and self.ui.lineEdit_Custom_Name_G_keithley.text() == '': self.ui.label_condition_G_keithley.setText( 'Enter a valid file name.') else: self.Select_type_G_keithley() self.Select_name_G_keithley() # It contains the measurement information, including user name, date, measurement type, time step etc. # This is a two dimensional list. Each sub list related to a single line. comments = [] # For QMDlab data file it is "Collected Data" divider = 'Collected Data' # Parameters' names, such as VOLTAGE, CURRENT, TIME parameters = [] # Parameters' units units = [] # Include all the data data = [] # Contains file type, divider, name and directory file_info = [] # First line user name temp = [] temp.append('User Name:') temp.append( str(self.ui.comboBox_Name_Folder_G_keithley.currentText())) comments.append(temp) # Second line edit time temp = [] temp.append('Edit Time:') temp.append(str(datetime.datetime.now())) comments.append(temp) # Third line array source temp = [] temp.append('Array Source:') temp.append(str(self.ui.lineEdit_directory_keithley.text())) comments.append(temp) # Fourth line visa address temp = [] temp.append('Visa Address:') temp.append(str(self.ui.comboBox_visa_keithley.currentText())) comments.append(temp) # Fifth line visa name temp = [] temp.append('Visa Name:') visa_name = self.visa_name.rstrip('\n') visa_name = visa_name.replace(',', ' ') temp.append(str(visa_name)) comments.append(temp) # Sixth line scan source temp = [] temp.append('Scan Source:') temp.append('Voltage') comments.append(temp) # Seventh line time step temp = [] temp.append('Time Step(sec):') temp.append(str(self.ui.lineEdit_tstep_keithley.text())) comments.append(temp) # Eighth line comments temp = [] temp.append('Comments:') temp.append(str(self.ui.textEdit_comment_G_keithley.toPlainText())) comments.append(temp) # Do parameters, units and data together parameters.append('Date') units.append('String') data.append(self.date_value) parameters.append('Time') units.append('s') data.append(self.t_value) parameters.append('Step') units.append('1') temp = [] for i in range(0, len(self.array)): temp.append(i) data.append(temp) parameters.append('Array') units.append('1') data.append(self.array) parameters.append('Voltage') units.append('Volts') data.append(self.x_value) parameters.append('Current') units.append('Amps') data.append(self.y_value) # File_info # First is file name file_info.append(self.G_file_name) # csv or txt file file_info.append(self.G_type) # the divide of csv is "," while for txt its "\t" file_info.append(self.G_divide) # Always "Collected Data" file_info.append(divider) # The saving directory file_info.append(self.G_directory) self.save_thread.input(comments, parameters, units, data, file_info) self.ui.pushButton_Open_G_keithley.setEnabled(True) self.ui.label_condition_G_keithley.setText('File has been saved.') def O_save(self): if self.ui.comboBox_Name_Folder_O_keithley.currentText() == 'None': self.ui.label_condition_O_keithley.setText( 'Pleanse choose a user name.') elif self.ui.radioButton_Custom_Name_O_keithley.isChecked( ) and self.ui.lineEdit_Custom_Name_O_keithley.text() == '': self.ui.label_condition_O_keithley.setText( 'Please enter a file name.') else: self.Select_type_O_keithley() self.Select_name_O_keithley() # It contains the measurement information, including user name, date, measurement type, time step etc. # This is a two dimensional list. Each sub list related to a single line. comments = [] # For QMDlab data file it is "Collected Data" divider = 'Collected Data' # Parameters' names, such as VOLTAGE, CURRENT, TIME parameters = [] # Parameters' units units = [] # Include all the data data = [] # Contains file type, divider, name and directory file_info = [] # First line user name temp = [] temp.append('User Name:') temp.append( str(self.ui.comboBox_Name_Folder_O_keithley.currentText())) comments.append(temp) # Second line edit time temp = [] temp.append('Edit Time:') temp.append(str(datetime.datetime.now())) comments.append(temp) # Third line array source temp = [] temp.append('Array Source:') temp.append(str(self.ui.lineEdit_directory_keithley.text())) comments.append(temp) # Fourth line visa address temp = [] temp.append('Visa Address:') temp.append(str(self.ui.comboBox_visa_keithley.currentText())) comments.append(temp) # Fifth line visa name temp = [] temp.append('Visa Name:') visa_name = self.visa_name.rstrip('\n') visa_name = visa_name.replace(',', ' ') temp.append(str(visa_name)) comments.append(temp) # Sixth line scan source temp = [] temp.append('Scan Source:') temp.append('Voltage') comments.append(temp) # Seventh line time step temp = [] temp.append('Time Step(sec):') temp.append(str(self.ui.lineEdit_tstep_keithley.text())) comments.append(temp) # Eighth line comments temp = [] temp.append('Comments:') temp.append(str(self.ui.textEdit_comment_O_keithley.toPlainText())) comments.append(temp) # Do parameters, units and data together parameters.append('Date') units.append('String') data.append(self.date_value) parameters.append('Time') units.append('s') data.append(self.t_value) parameters.append('Step') units.append('1') temp = [] for i in range(0, len(self.array)): temp.append(i) data.append(temp) parameters.append('Array') units.append('1') data.append(self.array) parameters.append('Voltage') units.append('Volts') data.append(self.x_value) parameters.append('Current') units.append('Amps') data.append(self.y_value) # File_info # First is file name file_info.append(self.O_file_name) # csv or txt file file_info.append(self.O_type) # the divide of csv is "," while for txt its "\t" file_info.append(self.O_divide) # Always "Collected Data" file_info.append(divider) # The saving directory file_info.append(self.O_directory) self.save_thread.input(comments, parameters, units, data, file_info) self.ui.pushButton_Open_O_keithley.setEnabled(True) self.ui.label_condition_O_keithley.setText('File has been saved.') def G_open(self): opendir = self.G_directory open_path = 'explorer "' + opendir + '"' subprocess.Popen(open_path) def O_open(self): opendir = self.O_directory open_path = 'explorer "' + opendir + '"' subprocess.Popen(open_path)
def __init__(self, main, ui): self.ui = ui self.copyDataFunc = main.CopyDataFunc self.collect_data_thread = Collect_data() self.save_thread = Save_Thread() main.connect(self.ui.pushButton_browse_keithley, SIGNAL('clicked()'), self.Browse_keithley) main.connect(self.ui.pushButton_import_keithley, SIGNAL('clicked()'), self.Import_keithley) main.connect(self.ui.pushButton_close_keithley, SIGNAL('clicked()'), self.Close_keithley) main.connect(self.ui.pushButton_select_keithley, SIGNAL('clicked()'), self.Select_keithley) main.connect(self.ui.pushButton_scan_keithley, SIGNAL('clicked()'), self.Scan_keithley) main.connect(self.ui.pushButton_pause_keithley, SIGNAL('clicked()'), self.collect_data_thread.pause) main.connect(self.ui.pushButton_stop_keithley, SIGNAL('clicked()'), self.collect_data_thread.stop) main.connect(self.ui.pushButton_clear_keithley, SIGNAL('clicked()'), self.collect_data_thread.Clear_keithley) main.connect(self.ui.pushButton_copy_keithley, SIGNAL('clicked()'), self.Copy_keithley) main.connect(self.ui.pushButton_fit_keithley, SIGNAL('clicked()'), self.collect_data_thread.Fit) main.connect(self.ui.pushButton_browse_save_G_keithley, SIGNAL('clicked()'), self.Google_browse) main.connect(self.ui.pushButton_browse_save_O_keithley, SIGNAL('clicked()'), self.Other_browse) main.connect(self.ui.pushButton_check_G_keithley, SIGNAL('clicked()'), self.Check) main.connect(self.ui.pushButton_Select_Directory_G_keithley, SIGNAL('clicked()'), self.Google_select_namefolder) main.connect(self.ui.pushButton_Save_G_keithley, SIGNAL('clicked()'), self.G_save) main.connect(self.ui.pushButton_Open_G_keithley, SIGNAL('clicked()'), self.G_open) main.connect(self.ui.pushButton_Save_O_keithley, SIGNAL('clicked()'), self.O_save) main.connect(self.ui.pushButton_Open_O_keithley, SIGNAL('clicked()'), self.O_open) main.connect( self.ui.radioButton_voltage_keithley, SIGNAL("clicked()"), lambda: self.ui.tabWidget_scan_keithley.setCurrentIndex(0)) main.connect(self.ui.radioButton_timescan_keithley, SIGNAL("clicked()"), self.collect_data_thread.Pre_MPL_Plot) main.connect(self.ui.radioButton_stepscan_keithley, SIGNAL("clicked()"), self.collect_data_thread.Pre_MPL_Plot) main.connect(self.collect_data_thread, SIGNAL("plot"), self.Plot_data) main.connect(self.collect_data_thread, SIGNAL("mpl_plot"), self.Plot_analysis) main.connect(self.collect_data_thread, SIGNAL("data_available"), self.Pre_save) # self.connect(self.Keithley_programs.collect_data_thread, SIGNAL("clear_plot"), self.Keithley_programs.Clear_plot) self.Array = [] self.count = 0 self.go_on = True # Set up guiqwt plot self.curve_item = make.curve([], [], color='b', marker="o") self.ui.curvewidget_keithley.plot.add_item(self.curve_item) self.ui.curvewidget_keithley.plot.set_antialiasing(True) self.ui.curvewidget_keithley.plot.set_titles( "Measurement and Plot Based on Array", "X-Axis", "Y-Axis") self.curve_ct_item = make.curve([], [], color='b', marker="o") self.ui.curvewidget_ct_keithley.plot.add_item(self.curve_ct_item) self.ui.curvewidget_ct_keithley.plot.set_antialiasing(True) self.ui.curvewidget_ct_keithley.plot.set_titles( "Current vs Time", "Time", "Current") self.curve_vt_item = make.curve([], [], color='b', marker="o") self.ui.curvewidget_vt_keithley.plot.add_item(self.curve_vt_item) self.ui.curvewidget_vt_keithley.plot.set_antialiasing(True) self.ui.curvewidget_vt_keithley.plot.set_titles( "Voltage vs Time", "Time", "Voltage")
class Lock_In_Sweep(): def __init__ (self, main, ui): self.ui = ui self.copyDataFunc = main.CopyDataFunc self.update_visa() self.collectDataThread = CollectData() self.save_thread = Save_Thread() main.connect(self.ui.pushButton_copy_LI, SIGNAL('clicked()'), self.Copy_LI_S) main.connect(self.ui.pushButtonSelectReadVisaLI_S, SIGNAL('clicked()'),self.select_ReadVisa) main.connect(self.ui.pushButtonSelectSweepVisaLI_S, SIGNAL('clicked()'), self.select_SweepVisa) main.connect(self.ui.pushButtonCloseReadVisaLI_S, SIGNAL('clicked()'), self.close_ReadVisa) main.connect(self.ui.pushButtonCloseSweepVisaLI_S, SIGNAL('clicked()'), self.close_SweepVisa) main.connect(self.ui.pushButtonStartLI_S, SIGNAL("clicked()"), self.start) main.connect(self.ui.pushButtonPauseLI_S, SIGNAL("clicked()"), self.collectDataThread.pause) main.connect(self.ui.pushButtonStopLI_S, SIGNAL("clicked()"), self.stop) main.connect(self.collectDataThread, SIGNAL("Plot"), self.plotData) main.connect(self.collectDataThread, SIGNAL("StatPlot"), self.plot_Stats) main.connect(self.collectDataThread, SIGNAL("PreSave"), self.pre_save) main.connect(self.ui.pushButtonBrowseLI_S, SIGNAL("clicked()"), self.browse) main.connect(self.ui.pushButtonSelectFolderLI_S, SIGNAL("clicked()"), self.select_name) main.connect(self.ui.radioButtonCSV_LI_S, SIGNAL("clicked()"), self.save_type) main.connect(self.ui.radioButtonTXT_LI_S, SIGNAL("clicked()"), self.save_type) main.connect(self.ui.pushButtonSaveLI_S, SIGNAL("clicked()"), self.save) self.canvas_import_LI_S = FigureCanvas(self.ui.mplwidget_import_LI_S.figure) self.canvas_import_LI_S.setParent(self.ui.widgetLI_S) # This is the toolbar widget for the import canvas self.mpl_toolbar_import_LI_S = NavigationToolbar(self.canvas_import_LI_S, self.ui.widgetLI_S) vbox_import_LI_S = QVBoxLayout() vbox_import_LI_S.addWidget(self.canvas_import_LI_S) vbox_import_LI_S.addWidget(self.mpl_toolbar_import_LI_S) self.ui.widgetLI_S.setLayout(vbox_import_LI_S) self.ui.mplwidget_import_LI_S = self.canvas_import_LI_S # Set up guiqwt plot self.curve_item = make.curve([], [], color = 'b', marker = "o") self.ui.curvewidgetLI_S.plot.add_item(self.curve_item) self.ui.curvewidgetLI_S.plot.set_antialiasing(True) self.curve_item_STDEV = make.curve([], [], color = 'b', marker = "o") self.ui.curvewidgetSTDEV_LI_S.plot.add_item(self.curve_item_STDEV) self.ui.curvewidgetSTDEV_LI_S.plot.set_antialiasing(True) self.curve_item_Mean = make.curve([], [], color = 'b', marker = "o") self.ui.curvewidgetMeanValue_LI_S.plot.add_item(self.curve_item_Mean) self.ui.curvewidgetMeanValue_LI_S.plot.set_antialiasing(True) self.ui.pushButtonStartLI_S.setEnabled(False) self.ui.pushButtonStopLI_S.setEnabled(False) self.ui.pushButtonPauseLI_S.setEnabled(False) self.ui.pushButtonClearLI_S.setEnabled(False) self.ui.pushButtonCloseReadVisaLI_S.setEnabled(False) self.ui.pushButtonCloseSweepVisaLI_S.setEnabled(False) self.SweepVisa_check = False self.ReadVisa_check = False # def Browse_LI_S(self): # prev_dir = os.getcwd() # fileDir = QFileDialog.getOpenFileName(None, 'Select File to Import', prev_dir, filter="Array Files (*.array)") # if fileDir != '': # file_list = str(fileDir).split('/') # for i in range(0, len(file_list) - 1): # global open_dir # open_dir = '' # if i < len(file_list) - 1: # open_dir += file_list[i] + '\\' # elif i == len(file_list) - 1: # open_dir += file_list[i] # fileDir.replace('/', '\\') # else: # self.ui.lineEdit_condition_keithley.setText("Please choose valid file to import.") # # def Import_LI_S(self): # divider_found = True # count = 0 # temp = 0 # self.Array = [] # x_value = [] # y_value = [] # # fileDir = self.ui.lineEdit_directory_keithley.text() # fp = open(fileDir) # while True: # if count == 5000: # self.ui.lineEdit_condition_keithley.setText("Data not found in file. Please check it.") # divider_found = False # break # line = fp.readline() # line_list = line.split(',') # if line_list[0].upper() == "Array Data".upper() + '\n': # break # count += 1 # # if divider_found == True: # line = fp.readline() # while True: # line = fp.readline().replace('\n', '') # print 'line: ' + line # if line == '': # break # value = line.split(',') # x_value.append(temp) # x_value.append(temp + 1) # y_value.append(value[1]) # y_value.append(value[1]) # self.Array.append(float(value[1])) # temp += 1 # # self.Plot_import(x_value, y_value) # self.ui.lineEdit_condition_keithley.setText("File is imported correctly.") # self.ui.groupBox_visa_keithley.setEnabled(True) def Copy_LI_S(self): Values = self.copyDataFunc() if Values != None: self.Array = [] x_value = [] y_value = [] item = 0 for i in range(0, len(Values)): for j in range(0, len(Values[i])): x_value.append(item) x_value.append(item + 1 - 0.0001) y_value.append(Values[i][j]) y_value.append(Values[i][j]) self.Array.append(Values[i][j]) item += 1 self.Plot_import(x_value, y_value) else: pass #self.ui.lineEdit_condition_keithley.setText('No valid array to copy.') def Plot_import(self, x, y): self.Reset_plot_import() self.axes_import.plot(x, y, marker = '.', linestyle = '-') self.axes_import.grid() self.axes_import.set_title("Array Import Plot") self.axes_import.set_xlabel("Steps") self.axes_import.set_ylabel("Values") self.ui.mplwidget_import_LI_S.draw() self.ui.lineEditStatusLI_S.setText("The array has been copied") # Reset the import matplot widget def Reset_plot_import(self): self.ui.mplwidget_import_LI_S.figure.clear() self.axes_import = self.ui.mplwidget_import_LI_S.figure.add_subplot(111) def update_visa(self): try: visas = rm.list_resources() except: self.ui.lineEditStatusLI_S.setText("No visas are connected") self.ui.comboBoxReadVisaLI_S.clear() self.ui.comboBoxSweepVisaLI_S.clear() for i in visas: self.ui.comboBoxReadVisaLI_S.addItem(i) self.ui.comboBoxSweepVisaLI_S.addItem(i) def select_ReadVisa(self): valid = False ReadVisa = str(self.ui.comboBoxReadVisaLI_S.currentText()) rm = visa.ResourceManager() rm.list_resources() inst1 = rm.open_resource(ReadVisa) try: valid = self.check_ReadVisa(inst1) except: self.ui.lineEditStatusLI_S.setText("Error with Read visa") if valid == True: self.ReadVisa = inst1 self.ui.labelReadVisaLI_S.setText(str(self.ReadVisa.ask('*IDN?'))) self.ui.pushButtonCloseReadVisaLI_S.setEnabled(True) self.ui.lineEditStatusLI_S.setText("There are no errors") self.ReadVisa_check = True else: self.pushButtonStartLI_S.setEnabled(False) self.ui.labelReadVisaLI_S.setText("None") self.ui.labelSweepVisaLI_S.setText("None") self.ui.lineEditStatusLI_S.setText("There is an error with the visas") if self.SweepVisa_check == True: self.ui.pushButtonStartLI_S.setEnabled(True) else: self.ui.lineEditStatusLI_S.setText('Please choose other visa to start') def select_SweepVisa(self): valid = False SweepVisa = str(self.ui.comboBoxSweepVisaLI_S.currentText()) rm = visa.ResourceManager() rm.list_resources() inst2 = rm.open_resource(SweepVisa) try: valid = self.check_SweepVisa(inst2) except: self.ui.lineEditStatusLI_S.setText("Error with the Sweep visa") if valid == True: self.SweepVisa = inst2 self.ui.labelSweepVisaLI_S.setText(str(self.SweepVisa.ask('*IDN?'))) self.ui.pushButtonCloseSweepVisaLI_S.setEnabled(True) self.ui.lineEditStatusLI_S.setText("There are no errors") self.SweepVisa_check = True else: self.ui.pushButtonStartLI_S.setEnabled(False) self.ui.lineEditStatusLI_S.setText("Error with the Sweep visa") if self.ReadVisa_check == True: self.ui.pushButtonStartLI_S.setEnabled(True) else: self.ui.lineEditStatusLI_S.setText('Please choose other visa to start') def check_ReadVisa(self, inst1): try: inst1.ask('*IDN?') valid = True except: valid = False return valid def check_SweepVisa(self, inst2): try: inst2.ask('*IDN?') valid = True except: valid = False return valid def close_ReadVisa(self): self.ReadVisa.close() self.ui.labelReadVisaLI_S.setText("") self.ui.lineEditStatusLI_S.setText("The Read Visa has been closed") def close_SweepVisa(self): self.SweepVisa.close() self.ui.labelSweepVisaLI_S.setText("") self.ui.lineEditStatusLI_S.setText("The Sweep Visa has been closed") def start(self): self.ui.pushButtonStartLI_S.setDisabled(True) self.ui.pushButtonPauseLI_S.setEnabled(True) self.ui.pushButtonStopLI_S.setEnabled(True) self.ui.tabWidgetLockIn_S.setCurrentIndex(1) if self.Array[0] < 200: self.SweepVisa.write('FRNG 2') self.SweepVisa.write('FREQ' + ' ' + str(self.Array[0])) else: pass time.sleep(1) self.ReadVisa.ask('MEAS:VOLT?') if int(self.SweepVisa.ask('SENS?')) < 3: self.sens_unit = 'nV' self.sens_magn = 1E-9 elif int(self.SweepVisa.ask('Sens?')) >= 3 and int(self.SweepVisa.ask('SENS?')) < 12: self.sens_unit = 'uV' self.sens_magn = 1E-6 else: self.sens_unit = 'mV' self.sens_magn = 1E-3 self.magnitude = [self.sens_magn, self.sens_unit] self.collectDataThread.input(self.ui, self.curve_item,self.curve_item_STDEV, self.curve_item_Mean, self.ReadVisa, self.SweepVisa, self.Array, self.magnitude) self.ui.lineEditStatusLI_S.setText("Running...") def plotData(self, voltage, magnitude): self.ui.lineEditSTDEV_LI_S.setText(str(round(np.std(voltage/self.magnitude[0]),10)) + " " + magnitude[1]) self.ui.lineEditMaxMinLI_S.setText(str(round(np.max(voltage/self.magnitude[0])- np.min(voltage/self.magnitude[0]), 10)) + " " + magnitude[1]) self.ui.lineEditMeanValueLI_S.setText(str(np.mean(voltage/self.magnitude[0])) + " " + magnitude[1]) self.curve_item.plot().replot() self.ui.curvewidgetLI_S.plot.do_autoscale() def plot_Stats(self): self.curve_item_STDEV.plot().replot() self.ui.curvewidgetSTDEV_LI_S.plot.do_autoscale() self.curve_item_Mean.plot().replot() self.ui.curvewidgetMeanValue_LI_S.plot.do_autoscale() def stop(self): self.collectDataThread.pauseLoop = True self.collectDataThread.quit() self.ui.pushButtonStartLI_S.setEnabled(True) self.ui.pushButtonStopLI_S.setEnabled(False) self.ui.pushButtonPauseLI_S.setEnabled(False) def pre_save(self, Freq, Mean, Stdev, StepPoints): self.Freq = Freq self.Mean = Mean self.Stdev = Stdev self.StepPoints = StepPoints def browse(self): prev_dir = 'C:\\' file_list = [] file_dir = QFileDialog.getExistingDirectory(None, 'Select The GoogleDrive Folder', prev_dir) if file_dir != '': file_list = str(file_dir).split('/') file_dir.replace('/', '\\') self.ui.lineEditDirectoryLI_S.setText(file_dir) self.directory = '' def select_name(self): file_list= [] file_list = str(self.ui.lineEditDirectoryLI_S.text()).split('\\') for i in range(0, len(file_list)): self.directory += file_list[i] + '\\' namefolder = str(self.ui.comboBoxFoldersLI_S.currentText()) if namefolder == 'None': self.ui.lineEditStatusLI_S.setText('Please Choose A Folder To Save To.') else: #Sets the name of the file to current date and time by default now = datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) self.directory += namefolder + "\Data" + '\\' + date self.current_time = '%s.%s.%s' % (now.hour, now.month, now.second) self.date_and_time = date + ' ' + self.current_time self.file_name = (self.date_and_time) print self.directory def save_type(self): if self.ui.radioButtonCSV_LI_S.isChecked() == True: self.type = '.csv' self.divide = ',' elif self.ui.radioButtonTXT_LI_S.isChecked() == True: self.type = '.txt' self.divide = '\t' def save_name(self): if self.ui.radioButtonDateTime_LI_S.isChecked(): now = datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) current_time = '%s.%s.%s' % (now.hour, now.month, now.second) date_and_time = date + ' ' + current_time self.file_name = str(date_and_time) elif self.ui.radioButtonCustomName_LI_S.isChecked(): self.file_name = str(self.ui.lineEditCustomLI_S.text()) def save(self): if self.ui.radioButtonCustomName_LI_S.isChecked() and self.ui.lineEditCustomLI_S.text() == ' ': self.ui.lineEditStatusLI_S.setText('Please Enter A Custom File Name') else: self.save_type() self.save_name() comments = [] file_info = [] parameters = [] units = [] data = [] divider = 'Collected Data' parameters.append('Frequency') units.append('Hz') data.append(self.Freq) parameters.append('Points Collected') units.append('1') data.append(self.StepPoints) parameters.append('Standard Deviation') units.append(self.magnitude[1]) data.append(self.Stdev) parameters.append('Mean Value') units.append(self.magnitude[1]) data.append(self.Mean) file_info.append(self.file_name) file_info.append(self.type) file_info.append(self.divide) file_info.append(divider) file_info.append(self.directory) self.save_thread.input(comments, parameters, units, data, file_info) self.ui.lineEditStatusLI_S.setText("File has been saved")
def __init__ (self, main, ui): self.ui = ui self.copyDataFunc = main.CopyDataFunc self.update_visa() self.collectDataThread = CollectData() self.save_thread = Save_Thread() main.connect(self.ui.pushButton_copy_LI, SIGNAL('clicked()'), self.Copy_LI_S) main.connect(self.ui.pushButtonSelectReadVisaLI_S, SIGNAL('clicked()'),self.select_ReadVisa) main.connect(self.ui.pushButtonSelectSweepVisaLI_S, SIGNAL('clicked()'), self.select_SweepVisa) main.connect(self.ui.pushButtonCloseReadVisaLI_S, SIGNAL('clicked()'), self.close_ReadVisa) main.connect(self.ui.pushButtonCloseSweepVisaLI_S, SIGNAL('clicked()'), self.close_SweepVisa) main.connect(self.ui.pushButtonStartLI_S, SIGNAL("clicked()"), self.start) main.connect(self.ui.pushButtonPauseLI_S, SIGNAL("clicked()"), self.collectDataThread.pause) main.connect(self.ui.pushButtonStopLI_S, SIGNAL("clicked()"), self.stop) main.connect(self.collectDataThread, SIGNAL("Plot"), self.plotData) main.connect(self.collectDataThread, SIGNAL("StatPlot"), self.plot_Stats) main.connect(self.collectDataThread, SIGNAL("PreSave"), self.pre_save) main.connect(self.ui.pushButtonBrowseLI_S, SIGNAL("clicked()"), self.browse) main.connect(self.ui.pushButtonSelectFolderLI_S, SIGNAL("clicked()"), self.select_name) main.connect(self.ui.radioButtonCSV_LI_S, SIGNAL("clicked()"), self.save_type) main.connect(self.ui.radioButtonTXT_LI_S, SIGNAL("clicked()"), self.save_type) main.connect(self.ui.pushButtonSaveLI_S, SIGNAL("clicked()"), self.save) self.canvas_import_LI_S = FigureCanvas(self.ui.mplwidget_import_LI_S.figure) self.canvas_import_LI_S.setParent(self.ui.widgetLI_S) # This is the toolbar widget for the import canvas self.mpl_toolbar_import_LI_S = NavigationToolbar(self.canvas_import_LI_S, self.ui.widgetLI_S) vbox_import_LI_S = QVBoxLayout() vbox_import_LI_S.addWidget(self.canvas_import_LI_S) vbox_import_LI_S.addWidget(self.mpl_toolbar_import_LI_S) self.ui.widgetLI_S.setLayout(vbox_import_LI_S) self.ui.mplwidget_import_LI_S = self.canvas_import_LI_S # Set up guiqwt plot self.curve_item = make.curve([], [], color = 'b', marker = "o") self.ui.curvewidgetLI_S.plot.add_item(self.curve_item) self.ui.curvewidgetLI_S.plot.set_antialiasing(True) self.curve_item_STDEV = make.curve([], [], color = 'b', marker = "o") self.ui.curvewidgetSTDEV_LI_S.plot.add_item(self.curve_item_STDEV) self.ui.curvewidgetSTDEV_LI_S.plot.set_antialiasing(True) self.curve_item_Mean = make.curve([], [], color = 'b', marker = "o") self.ui.curvewidgetMeanValue_LI_S.plot.add_item(self.curve_item_Mean) self.ui.curvewidgetMeanValue_LI_S.plot.set_antialiasing(True) self.ui.pushButtonStartLI_S.setEnabled(False) self.ui.pushButtonStopLI_S.setEnabled(False) self.ui.pushButtonPauseLI_S.setEnabled(False) self.ui.pushButtonClearLI_S.setEnabled(False) self.ui.pushButtonCloseReadVisaLI_S.setEnabled(False) self.ui.pushButtonCloseSweepVisaLI_S.setEnabled(False) self.SweepVisa_check = False self.ReadVisa_check = False
def __init__(self, main, ui): self.ui = ui self.copyData = main.copyData self.collectDataThread = CollectData() self.save_thread = Save_Thread() self.rm = visa.ResourceManager() self.update_visa() self.ui.startButton.setDisabled(True) self.ui.closeVisaButton0.setDisabled(True) self.ui.closeVisaButton1.setDisabled(True) self.ui.stopButton.setEnabled(False) self.ui.startButton.setEnabled(False) self.x_value = [] self.y_value = [] self.item = 0 self.Array = [] self.frontX = 0.0 self.frontY = 0.0 self.backX = 0.0 self.backY = 0.0 self.x_plot = [-1.0,1.0] self.y_plot = [-1.0,1.0] self.timeStep = .1 self.ui.timeStepValue.setText(str(self.timeStep)) self.directory = '' self.temp = [] # Sets up Current v. Voltage guiqwt plot self.curve_item_ay = make.curve([], [], color='b', marker = "o") self.ui.curvewidget_scanPlot_ay.plot.add_item(self.curve_item_ay) self.ui.curvewidget_scanPlot_ay.plot.set_antialiasing(True) self.ui.curvewidget_scanPlot_ay.plot.set_titles("Current v. Voltage", "Current (A)", "Voltage (V)") # Sets up Voltage v. Time Step guiqwt plot self.curve_item_vt_ay = make.curve([], [], color='b', marker = "o") self.ui.curvewidget_vt_ay.plot.add_item(self.curve_item_vt_ay) self.ui.curvewidget_vt_ay.plot.set_antialiasing(True) self.ui.curvewidget_vt_ay.plot.set_titles("Voltage v. Time Step", "Time Step", "Voltage (V)") # Sets up Current v. Time Step guiqwt plot self.curve_item_ct_ay = make.curve([], [], color='b', marker = "o") self.ui.curvewidget_ct_ay.plot.add_item(self.curve_item_ct_ay) self.ui.curvewidget_ct_ay.plot.set_antialiasing(True) self.ui.curvewidget_ct_ay.plot.set_titles("Current v. Time Step", "Time Step", "Current (A)") main.connect(self.ui.startButton, SIGNAL("clicked()"), self.start) main.connect(self.ui.stopButton, SIGNAL("clicked()"), self.stop) main.connect(self.ui.slopeButton_ay, SIGNAL("clicked()"), self.slopeTriger) main.connect(self.collectDataThread, SIGNAL("stop"), self.stop) main.connect(self.collectDataThread, SIGNAL("plot"), self.plotData) main.connect(self.collectDataThread, SIGNAL("analyse"), self.analyse) main.connect(self.ui.pushButton_browse_ay, SIGNAL('clicked()'), self.browse_ay) main.connect(self.ui.pushButton_import_ay, SIGNAL('clicked()'), self.import_ay) main.connect(self.ui.pushButton_copy_ay, SIGNAL('clicked()'), self.copy_ay) main.connect(self.ui.selectVisaButton, SIGNAL("clicked()"), self.select_visa) main.connect(self.ui.updateVisaButton, SIGNAL("clicked()"), self.update_visa) main.connect(self.ui.closeVisaButton0, SIGNAL("clicked()"), self.close_visa0) main.connect(self.ui.closeVisaButton1, SIGNAL("clicked()"), self.close_visa1) main.connect(self.ui.pushButton_browse_save_G_ay, SIGNAL('clicked()'), self.Google_browse) main.connect(self.ui.pushButton_browse_save_O_ay, SIGNAL('clicked()'), self.Other_browse) main.connect(self.ui.pushButton_check_G_ay, SIGNAL('clicked()'), self.Check) main.connect(self.ui.pushButton_Select_Directory_G_ay, SIGNAL('clicked()'), self.Google_select_namefolder) main.connect(self.ui.pushButton_Save_G_ay, SIGNAL('clicked()'), self.G_save) main.connect(self.ui.pushButton_Open_G_ay, SIGNAL('clicked()'), self.G_open) main.connect(self.ui.pushButton_Save_O_ay, SIGNAL('clicked()'), self.O_save) main.connect(self.ui.pushButton_Open_O_ay, SIGNAL('clicked()'), self.O_open) main.ui.mplwidget_analysis_ay.figure.canvas.mpl_connect('button_release_event', self.slope)
def __init__(self, main, ui): self.ui = ui self.copyData = main.copyData self.collectDataThread = CollectData() self.save_thread = Save_Thread() self.update_visa() self.ui.pushButtonStart.setDisabled(True) self.ui.pushButtoncloseVisa1.setDisabled(True) self.ui.pushButtoncloseVisa2.setDisabled(True) self.ui.pushButtonStop.setEnabled(False) self.ui.pushButtonStart.setEnabled(False) self.x_value = [] self.y_value = [] self.item = 0 self.Array = [] self.timeStep = .1 self.ui.lineEditTimeStep.setText(str(self.timeStep)) self.directory = '' self.temp = [] # Sets up Current v. Voltage guiqwt plot self.curve_item_ay = make.curve([], [], color='b', marker="o") self.ui.curvewidget_scanPlot_ay.plot.add_item(self.curve_item_ay) self.ui.curvewidget_scanPlot_ay.plot.set_antialiasing(True) # Sets up Voltage v. Time Step guiqwt plot self.curve_item_vt_ay = make.curve([], [], color='b', marker="o") self.ui.curvewidget_vt_ay.plot.add_item(self.curve_item_vt_ay) self.ui.curvewidget_vt_ay.plot.set_antialiasing(True) # Sets up Current v. Time Step guiqwt plot self.curve_item_ct_ay = make.curve([], [], color='b', marker="o") self.ui.curvewidget_ct_ay.plot.add_item(self.curve_item_ct_ay) self.ui.curvewidget_ct_ay.plot.set_antialiasing(True) # For the canvas. self.canvas_import_ay = FigureCanvas( self.ui.mplwidget_import_ay.figure) self.canvas_import_ay.setParent(self.ui.widget_import_ay) self.mpl_toolbar_import_ay = NavigationToolbar( self.canvas_import_ay, self.ui.widget_import_ay) self.canvas_analysis_ay = FigureCanvas( self.ui.mplwidget_analysis_ay.figure) self.canvas_analysis_ay.setParent(self.ui.widget_analysis_ay) self.mpl_toolbar_analysis_ay = NavigationToolbar( self.canvas_analysis_ay, self.ui.widget_analysis_ay) self.canvas_analysis_ct_ay = FigureCanvas( self.ui.mplwidget_analysis_ct_ay.figure) self.canvas_analysis_ct_ay.setParent(self.ui.widget_analysis_ct_ay) self.mpl_toolbar_analysis_ct_ay = NavigationToolbar( self.canvas_analysis_ct_ay, self.ui.widget_analysis_ct_ay) self.canvas_analysis_vt_ay = FigureCanvas( self.ui.mplwidget_analysis_vt_ay.figure) self.canvas_analysis_vt_ay.setParent(self.ui.widget_analysis_vt_ay) self.mpl_toolbar_analysis_vt_ay = NavigationToolbar( self.canvas_analysis_vt_ay, self.ui.widget_analysis_vt_ay) # Create the QVBoxLayout object and add the widget into the layout vbox_import_ay = QVBoxLayout() vbox_import_ay.addWidget(self.canvas_import_ay) vbox_import_ay.addWidget(self.mpl_toolbar_import_ay) self.ui.widget_import_ay.setLayout(vbox_import_ay) vbox_analysis_ay = QVBoxLayout() vbox_analysis_ay.addWidget(self.canvas_analysis_ay) vbox_analysis_ay.addWidget(self.mpl_toolbar_analysis_ay) self.ui.widget_analysis_ay.setLayout(vbox_analysis_ay) vbox_analysis_ct_ay = QVBoxLayout() vbox_analysis_ct_ay.addWidget(self.canvas_analysis_ct_ay) vbox_analysis_ct_ay.addWidget(self.mpl_toolbar_analysis_ct_ay) self.ui.widget_analysis_ct_ay.setLayout(vbox_analysis_ct_ay) vbox_analysis_vt_ay = QVBoxLayout() vbox_analysis_vt_ay.addWidget(self.canvas_analysis_vt_ay) vbox_analysis_vt_ay.addWidget(self.mpl_toolbar_analysis_vt_ay) self.ui.widget_analysis_vt_ay.setLayout(vbox_analysis_vt_ay) # Connect the mplwidget with canvass self.ui.mplwidget_import_ay = self.canvas_import_ay self.ui.mplwidget_analysis_ay = self.canvas_analysis_ay self.ui.mplwidget_analysis_ct_ay = self.canvas_analysis_ct_ay self.ui.mplwidget_analysis_vt_ay = self.canvas_analysis_vt_ay main.connect(self.ui.pushButtonselectVisa, SIGNAL('clicked()'), self.select_visa) main.connect(self.ui.pushButtonupdateVisa, SIGNAL('clicked()'), self.update_visa) main.connect(self.ui.pushButtoncloseVisa1, SIGNAL('clicked()'), self.close_visaCurrent) main.connect(self.ui.pushButtoncloseVisa2, SIGNAL('clicked()'), self.close_visaVoltage) main.connect(self.ui.pushButton_browse_ay, SIGNAL('clicked()'), self.browse_ay) main.connect(self.ui.pushButton_import_ay, SIGNAL('clicked()'), self.import_ay) main.connect(self.ui.pushButton_copy_ay, SIGNAL('clicked()'), self.copy_ay) main.connect(self.ui.pushButtonStart, SIGNAL('clicked()'), self.pre_start) main.connect(self.ui.pushButtonPause, SIGNAL('clicked()'), self.collectDataThread.pause) main.connect(self.ui.pushButtonStop, SIGNAL('clicked()'), self.stop) main.connect(self.ui.pushButtonClear, SIGNAL('clicked()'), self.clear_plots) main.connect(self.ui.pushButtonFit, SIGNAL('clicked()'), self.Fit) main.connect(self.collectDataThread, SIGNAL("Plot"), self.plotData) main.connect(self.collectDataThread, SIGNAL("Analyze"), self.Analyze) main.connect(self.ui.pushButton_browse_save_G_ay, SIGNAL('clicked()'), self.Google_browse) main.connect(self.ui.pushButton_check_G_ay, SIGNAL('clicked()'), self.Check) main.connect(self.ui.pushButton_Select_Directory_G_ay, SIGNAL('clicked()'), self.Google_select_namefolder) main.connect(self.ui.radioButton_csv_G_ay, SIGNAL('clicked()'), self.Select_type_G_ay) main.connect(self.ui.radioButton_txt_G_ay, SIGNAL('clicked()'), self.Select_type_G_ay) main.connect(self.ui.radioButton_Timename_G_ay, SIGNAL('clicked()'), self.Select_name_G_ay) main.connect(self.ui.radioButton_Custom_Name_G_ay, SIGNAL('clicked()'), self.Select_name_G_ay) main.connect(self.ui.pushButton_Save_G_ay, SIGNAL('clicked()'), self.G_save)
class Agilent_Yokogawa(): def __init__(self, main, ui): self.ui = ui self.copyData = main.copyData self.collectDataThread = CollectData() self.save_thread = Save_Thread() self.rm = visa.ResourceManager() self.update_visa() self.ui.startButton.setDisabled(True) self.ui.closeVisaButton0.setDisabled(True) self.ui.closeVisaButton1.setDisabled(True) self.ui.stopButton.setEnabled(False) self.ui.startButton.setEnabled(False) self.x_value = [] self.y_value = [] self.item = 0 self.Array = [] self.frontX = 0.0 self.frontY = 0.0 self.backX = 0.0 self.backY = 0.0 self.x_plot = [-1.0,1.0] self.y_plot = [-1.0,1.0] self.timeStep = .1 self.ui.timeStepValue.setText(str(self.timeStep)) self.directory = '' self.temp = [] # Sets up Current v. Voltage guiqwt plot self.curve_item_ay = make.curve([], [], color='b', marker = "o") self.ui.curvewidget_scanPlot_ay.plot.add_item(self.curve_item_ay) self.ui.curvewidget_scanPlot_ay.plot.set_antialiasing(True) self.ui.curvewidget_scanPlot_ay.plot.set_titles("Current v. Voltage", "Current (A)", "Voltage (V)") # Sets up Voltage v. Time Step guiqwt plot self.curve_item_vt_ay = make.curve([], [], color='b', marker = "o") self.ui.curvewidget_vt_ay.plot.add_item(self.curve_item_vt_ay) self.ui.curvewidget_vt_ay.plot.set_antialiasing(True) self.ui.curvewidget_vt_ay.plot.set_titles("Voltage v. Time Step", "Time Step", "Voltage (V)") # Sets up Current v. Time Step guiqwt plot self.curve_item_ct_ay = make.curve([], [], color='b', marker = "o") self.ui.curvewidget_ct_ay.plot.add_item(self.curve_item_ct_ay) self.ui.curvewidget_ct_ay.plot.set_antialiasing(True) self.ui.curvewidget_ct_ay.plot.set_titles("Current v. Time Step", "Time Step", "Current (A)") main.connect(self.ui.startButton, SIGNAL("clicked()"), self.start) main.connect(self.ui.stopButton, SIGNAL("clicked()"), self.stop) main.connect(self.ui.slopeButton_ay, SIGNAL("clicked()"), self.slopeTriger) main.connect(self.collectDataThread, SIGNAL("stop"), self.stop) main.connect(self.collectDataThread, SIGNAL("plot"), self.plotData) main.connect(self.collectDataThread, SIGNAL("analyse"), self.analyse) main.connect(self.ui.pushButton_browse_ay, SIGNAL('clicked()'), self.browse_ay) main.connect(self.ui.pushButton_import_ay, SIGNAL('clicked()'), self.import_ay) main.connect(self.ui.pushButton_copy_ay, SIGNAL('clicked()'), self.copy_ay) main.connect(self.ui.selectVisaButton, SIGNAL("clicked()"), self.select_visa) main.connect(self.ui.updateVisaButton, SIGNAL("clicked()"), self.update_visa) main.connect(self.ui.closeVisaButton0, SIGNAL("clicked()"), self.close_visa0) main.connect(self.ui.closeVisaButton1, SIGNAL("clicked()"), self.close_visa1) main.connect(self.ui.pushButton_browse_save_G_ay, SIGNAL('clicked()'), self.Google_browse) main.connect(self.ui.pushButton_browse_save_O_ay, SIGNAL('clicked()'), self.Other_browse) main.connect(self.ui.pushButton_check_G_ay, SIGNAL('clicked()'), self.Check) main.connect(self.ui.pushButton_Select_Directory_G_ay, SIGNAL('clicked()'), self.Google_select_namefolder) main.connect(self.ui.pushButton_Save_G_ay, SIGNAL('clicked()'), self.G_save) main.connect(self.ui.pushButton_Open_G_ay, SIGNAL('clicked()'), self.G_open) main.connect(self.ui.pushButton_Save_O_ay, SIGNAL('clicked()'), self.O_save) main.connect(self.ui.pushButton_Open_O_ay, SIGNAL('clicked()'), self.O_open) main.ui.mplwidget_analysis_ay.figure.canvas.mpl_connect('button_release_event', self.slope) def browse_ay(self): prev_dir = os.getcwd() print prev_dir fileDir = QFileDialog.getOpenFileName(None, 'Select File to Import', prev_dir, filter="Array Files (*.array)") if fileDir != '': file_list = str(fileDir).split('/') for i in range(0, len(file_list) - 1): global open_dir open_dir = '' if i < len(file_list) - 1: open_dir += file_list[i] + '\\' elif i == len(file_list) - 1: open_dir += file_list[i] fileDir.replace('/', '\\') self.ui.lineEdit_directory_ay.setText(fileDir) self.ui.pushButton_import_ay.setEnabled(True) self.ui.lineEdit_condition_ay.setText('File: "' + file_list[len(file_list) - 1] + '" has been chosen.') def import_ay(self): divider_found = True count = 0 temp = 0 x_value = [] y_value = [] fileDir = self.ui.lineEdit_directory_ay.text() fp = open(fileDir) while True: if count == 5000: self.ui.lineEdit_condition_ay.setText("Data not found in file. Please check it.") divider_found = False break line = fp.readline() line_list = line.split(',') if line_list[0].upper() == "Array Data".upper() + '\n': break count += 1 if divider_found == True: line = fp.readline() while True: line = fp.readline().replace('\n', '') if line == '': break value = line.split(',') x_value.append(temp) x_value.append(temp + 1) y_value.append(value[1]) y_value.append(value[1]) self.Array.append(value[1]) temp += 1 self.plot_import(x_value, y_value) self.ui.output.setText("File was imported correctly.") def copy_ay(self): Values = self.copyData() if not Values == False: for i in range(0, len(Values)): for j in range(0, len(Values[i])): self.x_value.append(self.item) self.x_value.append(self.item + 1) self.y_value.append(Values[i][j]) self.y_value.append(Values[i][j]) self.Array.append(Values[i][j]) self.item += 1 self.plot_import(self.x_value, self.y_value) def check_visa(self, inst): try: inst.ask("*IDN?") valid = True except: valid = False return valid def update_visa(self): try: visas = self.rm.list_resources() except: visas = '' current_visa0 = self.ui.visa0.text() current_visa1 = self.ui.visa1.text() check_current0 = False check_current1 = False self.ui.selectVisa0.clear() self.ui.selectVisa1.clear() for each_visa in visas: if current_visa0 == each_visa: check_current0 = True self.ui.selectVisa0.addItem(each_visa) for each_visa in visas: if current_visa1 == each_visa: check_current1 = True self.ui.selectVisa1.addItem(each_visa) if check_current0 == False: self.ui.visa0.setText("None") self.ui.startButton.setDisabled(True) self.ui.closeVisaButton0.setDisabled(True) if check_current1 == False: self.ui.visa1.setText("None") self.ui.startButton.setDisabled(True) self.ui.closeVisaButton1.setDisabled(True) def select_visa(self): visa_chosen0 = str(self.ui.selectVisa0.currentText()) visa_chosen1 = str(self.ui.selectVisa1.currentText()) valid = False try: inst0 = self.rm.open_resource(visa_chosen0) inst1 = self.rm.open_resource(visa_chosen1) valid = True except: valid = False if valid: self.ui.visa0.setText(visa_chosen0) self.ui.visa1.setText(visa_chosen1) self.visa_chosen0 = inst0 self.visa_chosen1 = inst1 self.visa0_name = self.visa_chosen0.ask('*IDN?') self.visa1_name = self.visa_chosen1.ask('*IDN?') self.ui.output.setText(self.visa0_name + self.visa1_name) self.ui.error.setText("None") self.ui.startButton.setDisabled(False) self.ui.stopButton.setDisabled(False) self.ui.closeVisaButton0.setDisabled(False) self.ui.closeVisaButton1.setDisabled(False) self.visa_chosen0.write('SOUR:FUNC CURR') self.visa_chosen0.write('SOUR:PROT:VOLT 30') elif not valid: self.ui.error.setText("Invalid Visa Port.") self.ui.visa0.setText("None") self.ui.visa1.setText("None") self.visa_chosen0 = False self.ui.startButton.setDisabled(True) self.ui.closeVisaButton0.setDisabled(True) self.ui.closeVisaButton1.setDisabled(True) def close_visa0(self): self.collectDataThread.stop() try: self.ui.output.setText(self.visa_chosen0.ask("*IDN?")) valid = True except: valid = False if valid == True: self.ui.visa0.setText("None") self.ui.error.setText("None") self.visa_chosen0.close() elif valid == False: self.ui.error.setText("No visa connected.") self.ui.visa0.setText("None") self.visa_chosen0 = False self.ui.startButton.setDisabled(True) self.ui.stopButton.setDisabled(True) self.ui.closeVisaButton0.setDisabled(True) def close_visa1(self): self.collectDataThread.stop() try: self.ui.output.setText(self.visa_chosen1.ask('*IDN?')) valid = True except: valid = False if valid == True: self.ui.visa1.setText('None') self.ui.error.setText("None") self.visa_chosen1.close() elif valid == False: self.ui.error.setText("No visa connected.") self.ui.visa1.setText("None") self.visa_chosen1 = False self.ui.startButton.setDisabled(True) self.ui.stopButton.setDisabled(True) self.ui.closeVisaButton1.setDisabled(True) def start(self): if self.ui.startButton.text() == 'Start': self.visa_chosen0.write('OUTP ON') self.timeStep = float(self.ui.timeStepValue.text()) self.ui.timeStepValue.setDisabled(True) self.collectDataThread.input(self.ui, self.visa_chosen0, self.visa_chosen1, self.Array, self.timeStep, self.curve_item_ay, self.curve_item_vt_ay, self.curve_item_ct_ay, [], [], []) self.ui.stopButton.setEnabled(True) self.ui.output.setText("Running") self.ui.startButton.setText("Pause") else: self.collectDataThread.pause() def stop(self): if self.ui.stopButton.text() == 'Stop': self.collectDataThread.stop() def plot_import(self, x, y): self.ui.mplwidget_import_ay.figure.clear() self.axes_import = self.ui.mplwidget_import_ay.figure.add_subplot(111) self.axes_import.plot(x, y, marker = '.', linestyle = '-') self.axes_import.grid() self.axes_import.set_title("Array Import Plot") self.axes_import.set_xlabel("Steps") self.axes_import.set_ylabel("Values") self.ui.mplwidget_import_ay.draw() def plotData(self): self.ui.curvewidget_scanPlot_ay.plot.do_autoscale() self.ui.curvewidget_vt_ay.plot.do_autoscale() self.ui.curvewidget_ct_ay.plot.do_autoscale() self.curve_item_ay.plot().replot() self.curve_item_vt_ay.plot().replot() self.curve_item_ct_ay.plot().replot() def analyse(self, date_value, t_value, x_plot, y_plot): self.date_value = date_value self.t_value = t_value self.x_plot = x_plot self.y_plot = y_plot self.ui.mplwidget_analysis_ay.figure.clear() self.axes_analysis_ay = self.ui.mplwidget_analysis_ay.figure.add_subplot(111) self.axes_analysis_ay.grid() self.axes_analysis_ay.set_title('Voltage v. Current') self.axes_analysis_ay.set_ylabel("Voltage (V)") self.axes_analysis_ay.set_xlabel("Current (A)") self.axes_analysis_ay.plot(x_plot, y_plot, marker = '.', linestyle = '-') self.ui.mplwidget_analysis_ay.draw() self.frontX = self.x_plot[0] self.frontY = self.y_plot[0] self.ui.tabWidget_save_ay.setEnabled(True) self.ui.mplwidget_analysis_ct_ay.figure.clear() self.axes_analysis_ct_ay = self.ui.mplwidget_analysis_ct_ay.figure.add_subplot(111) self.axes_analysis_ct_ay.grid() self.axes_analysis_ct_ay.set_title('Current v. Step') self.axes_analysis_ct_ay.set_ylabel("Current (A)") self.axes_analysis_ct_ay.set_xlabel("Step") self.axes_analysis_ct_ay.plot(t_value, y_plot, marker = '.', linestyle = '-') self.ui.mplwidget_analysis_ct_ay.draw() self.ui.mplwidget_analysis_vt_ay.figure.clear() self.axes_analysis_vt_ay = self.ui.mplwidget_analysis_vt_ay.figure.add_subplot(111) self.axes_analysis_vt_ay.grid() self.axes_analysis_vt_ay.set_title('Voltage v. Step') self.axes_analysis_vt_ay.set_ylabel("Voltage (V)") self.axes_analysis_vt_ay.set_xlabel("Step") self.axes_analysis_vt_ay.plot(t_value, x_plot, marker = '.', linestyle = '-') self.ui.mplwidget_analysis_vt_ay.draw() def slopeTriger(self): if self.ui.slope_ay.isChecked(): self.ui.slope_ay.setChecked(False) else: self.ui.slope_ay.setChecked(True) def slope(self, event=None): if self.ui.slope_ay.isChecked(): self.backX = self.frontX self.backY = self.frontY self.frontX = event.xdata self.frontY = event.ydata index= min(range(len(self.x_plot)), key=lambda i: math.sqrt((self.x_plot[i]-self.frontX)**2+(self.y_plot[i]-self.frontY)**2)) self.frontX = self.x_plot[index] self.frontY = self.y_plot[index] if not ((self.frontX == self.backX) or (self.frontY == self.backY)): try: VI = (self.frontY-self.backY)/(self.frontX-self.backX) except: VI = "None" try: IV = (self.frontX-self.backX)/(self.frontY-self.backY) except: IV = "None" self.ui.output.setText("Resistance: " + str(VI) + " Ohm") self.ui.slop_VI_ay.setText(str(VI)) self.ui.slop_IV_ay.setText(str(IV)) x = [self.backX, self.frontX] y = [self.backY, self.frontY] self.ui.start_end_fit_ay.setText("(" + str(self.backX) + ", " + str(self.backY) + "), " +"(" + str(self.frontX) + ", " + str(self.frontY) + ")") self.ui.mplwidget_analysis_ay.figure.clear() self.axes_analysis_ay = self.ui.mplwidget_analysis_ay.figure.add_subplot(111) self.axes_analysis_ay.grid() self.axes_analysis_ay.set_title('Voltage v. Current') self.axes_analysis_ay.set_ylabel("Voltage (V)") self.axes_analysis_ay.set_xlabel("Current (A)") self.axes_analysis_ay.plot(self.x_plot, self.y_plot, 'b.-', x, y, 'r') self.ui.mplwidget_analysis_ay.draw() def browse(self): prev_dir = 'C:\\Users' try: self.directory = QFileDialog.getExistingDirectory(self, 'Select Google Drive File to Open:', prev_dir) except ValueError: self.directory = False if self.directory != '' and self.directory != False: self.file_list = str(self.directory).split('/') for i in range(0, len(self.file_list) - 1): if i < len(self.file_list) - 1: self.open_dir += self.file_list[i] + '\\' elif i == len(self.file_list) - 1: self.open_dir += self.file_list[i] self.directory.replace('/', '\\') self.ui.directory.setText(self.directory) self.ui.output.setText('Folder reached.') else: self.directory = False self.ui.directory.setText('None') self.ui.output.setText('Failed to reach folder.') self.update_folders() def update_folders(self): self.ui.folderName.clear() self.ui.folderName.addItem('None') if not self.directory: return else: self.directories = numpy.asarray(os.listdir(self.directory)) for folder in self.directories: self.ui.folderName.addItem(folder) def select_type_ay(self): if self.ui.csvRadio.isChecked(): self.type = '.csv' self.divide = ',' self.form = '' elif self.ui.txtRadio.isChecked(): self.type = '.txt' self.divide = '\t' self.form = ' ' else: self.type = False def select_name_ay(self): now = datetime.datetime.now() self.date = '%s-%s-%s' % (now.year, now.month, now.day) self.current_time = '%s.%s.%s' % (now.hour, now.month, now.second) self.date_and_time = self.date + ' ' + self.current_time if self.ui.defaultFile.isChecked(): try: self.file = self.date_and_time except ValueError: self.file = False elif self.ui.customFile.isChecked(): try: self.file = str(self.ui.file.text()) except ValueError: self.file = False def select_folder(self): try: self.folder_name = str(self.ui.folderName.currentText()) except ValueError: self.folder_name = False if self.folder_name == 'None' or self.folder_name == '' : self.folder_name = False def Google_browse(self): prev_dir = 'C:\\' file_list = [] file_dir = QFileDialog.getExistingDirectory(None, 'Select Google Drive Folder', prev_dir) if file_dir != '': file_list = str(file_dir).split('/') # for i in range(0, len(file_list) - 1): # if i < len(file_list) - 1: # open_dir += file_list[i] + '\\' # elif i == len(file_list) - 1: # open_dir += file_list[i] file_dir.replace('/', '\\') self.ui.lineEdit_GoogleDrive_G_ay.setText(file_dir) self.ui.label_condition_G_ay.setText('Open Google Drive User Folder') self.ui.pushButton_check_G_ay.setEnabled(True) def Other_browse(self): prev_dir = os.getcwd() fileDir = QFileDialog.getExistingDirectory(None, 'Select Folder to Save', prev_dir) if fileDir != '': open_dir = '' file_list = str(fileDir).split('/') for i in range(0, len(file_list) - 1): if i < len(file_list) - 1: open_dir += file_list[i] + '\\' elif i == len(file_list) - 1: open_dir += file_list[i] fileDir.replace('/', '\\') self.O_directory = fileDir self.ui.lineEdit_directory_O_ay.setText(fileDir) self.ui.label_username_O_ay.setEnabled(True) self.ui.comboBox_Name_Folder_O_ay.setEnabled(True) self.ui.groupBox_Filename_O_ay.setEnabled(True) self.ui.groupBox_File_Type_O_ay.setEnabled(True) self.ui.label_comment_O_ay.setEnabled(True) self.ui.textEdit_comment_O_ay.setEnabled(True) self.ui.pushButton_Save_O_ay.setEnabled(True) self.ui.lineEdit_Custom_Name_O_ay.setEnabled(True) self.ui.label_condition_O_ay.setText("Click save button to save.") else: self.ui.lineEdit_directory_O_ay.setText('None') self.ui.label_condition_O_ay.setText('Failed to Read File') def Check(self): self.G_directory = '' file_list = [] file_list = str(self.ui.lineEdit_GoogleDrive_G_ay.text()).split('\\') if os.path.exists(self.ui.lineEdit_GoogleDrive_G_ay.text()) == False: self.ui.label_condition_G_ay.setText('Incorrect Google Drive Directory.') else: self.ui.label_condition_G_ay.setText('Please click browse to the "03 User Accounts" folder') for i in range(0, len(file_list)): self.G_directory += file_list[i] + '\\' if file_list[i].upper() == '03 User Accounts'.upper(): self.ui.label_namefolder_G_ay.setEnabled(True) self.ui.comboBox_Name_Folder_G_ay.setEnabled(True) self.ui.pushButton_Select_Directory_G_ay.setEnabled(True) self.ui.label_condition_G_ay.setText('Choose name folder in Google Drive to save.') break def Google_select_namefolder(self): namefolder = str(self.ui.comboBox_Name_Folder_G_ay.currentText()) if namefolder == 'None': self.ui.label_condition_G_ay.setText('Please choose a name folder to save.') else: now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) self.ui.label_G_ay.setText("Save to \\" + namefolder + "\Date" + '\\' + date) self.G_directory += namefolder + "\Data" + '\\' + date + '\\' + 'Agilent Yokogawa with Array' self.ui.groupBox_File_Type_G_ay.setEnabled(True) self.ui.groupBox_Filename_G_ay.setEnabled(True) self.ui.label_comment_G_ay.setEnabled(True) self.ui.textEdit_comment_G_ay.setEnabled(True) self.ui.pushButton_Save_G_ay.setEnabled(True) self.ui.lineEdit_Custom_Name_G_ay.setEnabled(True) self.ui.label_condition_G_ay.setText('Click save button to save.') def Select_type_G_ay(self): if self.ui.radioButton_csv_G_ay.isChecked(): self.G_type = '.csv' self.G_divide = ',' elif self.ui.radioButton_txt_G_ay.isChecked(): self.G_type = '.txt' self.G_divide = '\t' def Select_type_O_ay(self): if self.ui.radioButton_csv_O_ay.isChecked(): self.O_type = '.csv' self.O_divide = ',' elif self.ui.radioButton_txt_O_ay.isChecked(): self.O_type = '.txt' self.O_divide = '\t' def Select_name_G_ay(self): if self.ui.radioButton_Timename_G_ay.isChecked(): now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) current_time = '%s.%s.%s' % (now.hour, now.minute, now.second) date_and_time = date + ' ' + current_time self.G_file_name = str(date_and_time) elif self.ui.radioButton_Custom_Name_G_ay.isChecked(): self.G_file_name = str(self.ui.lineEdit_Custom_Name_G_ay.text()) def Select_name_O_ay(self): if self.ui.radioButton_Timename_O_ay.isChecked(): now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) current_time = '%s.%s.%s' % (now.hour, now.minute, now.second) date_and_time = date + ' ' + current_time self.O_file_name = str(date_and_time) elif self.ui.radioButton_Custom_Name_O_ay.isChecked(): self.O_file_name = str(self.ui.lineEdit_Custom_Name_O_ay.text()) def Pre_save(self, date_value, t_value, x_value, y_value, array): self.date_value = date_value self.t_value = t_value self.x_value = x_value self.y_value = y_value self.array = array def G_save(self): if self.ui.radioButton_Custom_Name_G_ay.isChecked() and self.ui.lineEdit_Custom_Name_G_ay.text() == '': self.ui.label_condition_G_ay.setText('Enter a valid file name.') else: self.Select_type_G_ay() self.Select_name_G_ay() # It contains the measurement information, including user name, date, measurement type, time step etc. # This is a two dimensional list. Each sub list related to a single line. comments = [] # For QMDlab data file it is "Collected Data" divider = 'Collected Data' # Parameters' names, such as VOLTAGE, CURRENT, TIME parameters = [] # Parameters' units units = [] # Include all the data data = [] # Contains file type, divider, name and directory file_info = [] # Line 1: user name temp = [] temp.append('User Name:') temp.append(str(self.ui.comboBox_Name_Folder_G_ay.currentText())) comments.append(temp) # Line 2: edit time temp = [] temp.append('Edit Time:') temp.append(str(datetime.datetime.now())) comments.append(temp) # Line 3: array source temp = [] temp.append('Array Source:') temp.append(str(self.ui.lineEdit_directory_ay.text())) comments.append(temp) # Line 4: visa0 address temp = [] temp.append('Visa 0 Address:') temp.append(str(self.ui.visa0.text())) comments.append(temp) # Line 5: visa1 address temp = [] temp.append('Visa 1 Address:') temp.append(str(self.ui.visa1.text())) comments.append(temp) # Line 6: visa name temp = [] temp.append('Visa 0 Name:') visa0_name = self.visa0_name.rstrip('\n') visa0_name = visa0_name.replace(',', ' ') temp.append(str(visa0_name)) comments.append(temp) # Line 7: visa name temp = [] temp.append('Visa 1 Name:') visa1_name = self.visa1_name.rstrip('\n') visa1_name = visa1_name.replace(',', ' ') temp.append(str(visa1_name)) comments.append(temp) # Line 8: scan source temp = [] temp.append('Scan Source:') temp.append('Voltage') comments.append(temp) # Line 9: time step temp = [] temp.append('Time Step(sec):') temp.append(str(self.timeStep)) comments.append(temp) # Line 10: comments temp = [] temp.append('Comments:') temp.append(str(self.ui.textEdit_comment_G_ay.toPlainText())) comments.append(temp) # Do parameters, units and data together parameters.append('Date') units.append('String') data.append(self.date_value) parameters.append('Time') units.append('s') data.append(self.t_value) parameters.append('Step') units.append('1') temp = [] for i in range(0, len(self.y_plot)): temp.append(i) data.append(temp) parameters.append('Array') units.append('1') data.append(self.x_value) parameters.append('Voltage') units.append('Volts') data.append(self.x_plot) parameters.append('Current') units.append('Amps') data.append(self.y_plot) # File_info # First is file name file_info.append(self.G_file_name) # csv or txt file file_info.append(self.G_type) # the divide of csv is "," while for txt its "\t" file_info.append(self.G_divide) # Always "Collected Data" file_info.append(divider) # The saving directory file_info.append(self.G_directory) self.save_thread.input(comments, parameters, units, data, file_info) self.ui.pushButton_Open_G_ay.setEnabled(True) self.ui.label_condition_G_ay.setText('File has been saved.') def O_save(self): if self.ui.comboBox_Name_Folder_O_ay.currentText() == 'None': self.ui.label_condition_O_ay.setText('Pleanse choose a user name.') elif self.ui.radioButton_Custom_Name_O_ay.isChecked() and self.ui.lineEdit_Custom_Name_O_ay.text() == '': self.ui.label_condition_O_ay.setText('Please enter a file name.') else: self.Select_type_O_ay() self.Select_name_O_ay() # It contains the measurement information, including user name, date, measurement type, time step etc. # This is a two dimensional list. Each sub list related to a single line. comments = [] # For QMDlab data file it is "Collected Data" divider = 'Collected Data' # Parameters' names, such as VOLTAGE, CURRENT, TIME parameters = [] # Parameters' units units = [] # Include all the data data = [] # Contains file type, divider, name and directory file_info = [] # Line 1: user name temp = [] temp.append('User Name:') temp.append(str(self.ui.comboBox_Name_Folder_G_ay.currentText())) comments.append(temp) # Line 2: edit time temp = [] temp.append('Edit Time:') temp.append(str(datetime.datetime.now())) comments.append(temp) # Line 3: array source temp = [] temp.append('Array Source:') temp.append(str(self.ui.lineEdit_directory_ay.text())) comments.append(temp) # Line 4: visa0 address temp = [] temp.append('Visa 0 Address:') temp.append(str(self.ui.visa0.text())) comments.append(temp) # Line 5: visa1 address temp = [] temp.append('Visa 1 Address:') temp.append(str(self.ui.visa1.text())) comments.append(temp) # Line 6: visa name temp = [] temp.append('Visa 0 Name:') visa0_name = self.visa0_name.rstrip('\n') visa0_name = visa0_name.replace(',', ' ') temp.append(str(visa0_name)) comments.append(temp) # Line 7: visa name temp = [] temp.append('Visa 1 Name:') visa1_name = self.visa1_name.rstrip('\n') visa1_name = visa1_name.replace(',', ' ') temp.append(str(visa1_name)) comments.append(temp) # Line 8: scan source temp = [] temp.append('Scan Source:') temp.append('Voltage') comments.append(temp) # Line 9: time step temp = [] temp.append('Time Step(sec):') temp.append(str(self.timeStep)) comments.append(temp) # Line 10: comments temp = [] temp.append('Comments:') temp.append(str(self.ui.textEdit_comment_G_ay.toPlainText())) comments.append(temp) # Do parameters, units and data together parameters.append('Date') units.append('String') data.append(self.date_value) parameters.append('Time') units.append('s') data.append(self.t_value) parameters.append('Step') units.append('1') temp = [] for i in range(0, len(self.y_plot)): temp.append(i) data.append(temp) parameters.append('Array') units.append('1') data.append(self.x_value) parameters.append('Voltage') units.append('Volts') data.append(self.x_plot) parameters.append('Current') units.append('Amps') data.append(self.y_plot) # File_info # First is file name file_info.append(self.O_file_name) # csv or txt file file_info.append(self.O_type) # the divide of csv is "," while for txt its "\t" file_info.append(self.O_divide) # Always "Collected Data" file_info.append(divider) # The saving directory file_info.append(self.O_directory) self.save_thread.input(comments, parameters, units, data, file_info) self.ui.pushButton_Open_O_ay.setEnabled(True) self.ui.label_condition_O_ay.setText('File has been saved.') def G_open(self): opendir = self.G_directory open_path = 'explorer "' + opendir + '"' subprocess.Popen(open_path) def O_open(self): opendir = self.O_directory open_path = 'explorer "' + opendir + '"' subprocess.Popen(open_path)
def __init__(self, main, ui): self.ui = ui self.copyDataFunc = main.CopyDataFunc self.collect_data_thread = Collect_data() self.save_thread = Save_Thread() main.connect(self.ui.pushButtonK2_browseGate, SIGNAL('clicked()'), self.Browse_Array) main.connect(self.ui.pushButtonK2_importGate, SIGNAL('clicked()'), self.Import_Array) main.connect(self.ui.pushButtonK2_copyGate, SIGNAL('clicked()'), self.Copy_Array) main.connect(self.ui.pushButtonK2_updateGate, SIGNAL('clicked()'), self.update_visas) main.connect(self.ui.pushButtonK2_updateLead, SIGNAL('clicked()'), self.update_visas) main.connect(self.ui.pushButtonK2_selectGate, SIGNAL('clicked()'), lambda : self.Select_visa("gate", self.gate_visa, self.ui.comboBoxK2_gateVisa, self.ui.lineEditK2_gateVisa, [self.ui.pushButtonK2_selectGate, self.ui.pushButtonK2_closeGate])) main.connect(self.ui.pushButtonK2_selectLead, SIGNAL('clicked()'), lambda : self.Select_visa("lead", self.lead_visa, self.ui.comboBoxK2_leadVisa, self.ui.lineEditK2_leadVisa, [self.ui.pushButtonK2_selectLead, self.ui.pushButtonK2_closeLead])) main.connect(self.ui.pushButtonK2_closeGate, SIGNAL('clicked()'), lambda : self.Close_visa("gate", self.gate_visa, self.ui.lineEditK2_gateVisa, [self.ui.pushButtonK2_selectGate, self.ui.pushButtonK2_closeGate])) main.connect(self.ui.pushButtonK2_closeLead, SIGNAL('clicked()'), lambda : self.Close_visa("lead", self.lead_visa, self.ui.lineEditK2_leadVisa, [self.ui.pushButtonK2_selectLead, self.ui.pushButtonK2_closeLead])) main.connect(self.ui.pushButtonK2_Start, SIGNAL('clicked()'), self.start) main.connect(self.ui.pushButtonK2_Stop, SIGNAL('clicked()'), self.collect_data_thread.stop) main.connect(self.ui.pushButtonK2_Pause, SIGNAL('clicked()'), self.collect_data_thread.pause) main.connect(self.ui.pushButtonK2_browse_save_G, SIGNAL('clicked()'), self.Google_browse) main.connect(self.ui.pushButtonK2_browse_save_O, SIGNAL('clicked()'), self.Other_browse) main.connect(self.ui.pushButtonK2_check_G, SIGNAL('clicked()'), self.Check) main.connect(self.ui.pushButtonK2_Select_Directory_G, SIGNAL('clicked()'), self.Google_select_namefolder) main.connect(self.ui.pushButtonK2_Save_G, SIGNAL('clicked()'), self.G_save) main.connect(self.ui.pushButtonK2_Open_G, SIGNAL('clicked()'), self.G_open) main.connect(self.ui.pushButtonK2_Save_O, SIGNAL('clicked()'), self.O_save) main.connect(self.ui.pushButtonK2_Open_O, SIGNAL('clicked()'), self.O_open) main.connect(self.collect_data_thread, SIGNAL("curve_plot"), self.curvePlots_update) main.connect(self.collect_data_thread, SIGNAL("mpl_plot"), self.mplPlots) main.connect(self.collect_data_thread, SIGNAL("data_available"), self.Pre_save) self.Array = [] self.count = 0 self.go_on = True self.ui.mplwidgetK2_gateArray = self.make_mplToolBar(self.ui.mplwidgetK2_gateArray, self.ui.widgetK2_gateArray) self.ui.mplwidgetK2_AgateVoltage = self.make_mplToolBar(self.ui.mplwidgetK2_AgateVoltage, self.ui.widgetK2_AgateVoltage) self.ui.mplwidgetK2_AleadCurrent = self.make_mplToolBar(self.ui.mplwidgetK2_AleadCurrent, self.ui.widgetK2_AleadCurrent) self.ui.mplwidgetK2_AgateCurrent = self.make_mplToolBar(self.ui.mplwidgetK2_AgateCurrent, self.ui.widgetK2_AgateCurrent) self.ui.mplwidgetK2_ALeadResistance = self.make_mplToolBar(self.ui.mplwidgetK2_ALeadResistance, self.ui.widgetK2_ALeadResistance) self.ui.mplwidgetK2_ALeadCurrentGateVoltage = self.make_mplToolBar(self.ui.mplwidgetK2_ALeadCurrentGateVoltage, self.ui.widgetK2_ALeadCurrentGateVoltage) self.ui.mplwidgetK2_ALeadResistanceGateVoltage = self.make_mplToolBar(self.ui.mplwidgetK2_ALeadResistanceGateVoltage, self.ui.widgetK2_ALeadResistanceGateVoltage) self.axes_gateArray = None self.axes_AgateVoltage = None self.axes_AleadCurrent = None self.axes_AgateCurrent = None self.axes_ALeadResistance = None self.axes_ALeadCurrentGateVoltage = None self.axes_ALeadResistanceGateVoltage = None #self.ui.mplwidget_import = self.canvas_import #self.ui.mplwidget_analysis = self.canvas_analysis #self.ui.mplwidget_ct_analysis = self.canvas_ct_analysis #self.ui.mplwidget_vt_analysis = self.canvas_vt_analysis # Set up guiqwt plot self.curve_itemK2_SgateVoltage = self.make_curveWidgets(self.ui.curvewidgetK2_SgateVoltage, "b", titles = ["Gate Voltage", "Steps", "Gate Voltage (V)"]) self.curve_itemK2_SleadCurrent = self.make_curveWidgets(self.ui.curvewidgetK2_SleadCurrent, "b", titles = ["Lead Current", "Steps", "Lead Current (A)"]) self.curve_itemK2_SgateCurrent = self.make_curveWidgets(self.ui.curvewidgetK2_SgateCurrent, "b", titles = ["Gate Current", "Steps", "Gate Current (A)"]) self.curve_itemK2_SleadResistance = self.make_curveWidgets(self.ui.curvewidgetK2_SleadResistance, "b", titles = ["Lead Resistance", "Steps", "Lead Resistance (Ohms)"]) self.curve_itemK2_SleadCurrentGateVoltage = self.make_curveWidgets(self.ui.curvewidgetK2_SleadCurrentGateVoltage, "b", titles = ["Lead Current vs Gate Voltage", "Gate Voltage (V)", "Lead Current (A)"]) self.curve_itemK2_SleadResistanceGateVoltage = self.make_curveWidgets(self.ui.curvewidgetK2_SleadResistanceGateVoltage, "b", titles = ["Lead Resistane vs Gate Voltage", "Gate Voltage (V)", "Lead Resistance (Ohms)"]) self.ui.pushButtonK2_Pause.setEnabled(False) self.ui.pushButtonK2_Stop.setEnabled(False) self.gate_visa = None self.lead_visa = None self.update_visas() self.uiSavingGDpushButtons = [ self.ui.pushButtonK2_browse_save_G, self.ui.pushButtonK2_check_G, self.ui.pushButtonK2_Select_Directory_G, self.ui.pushButtonK2_Save_G, self.ui.pushButtonK2_Open_G] self.uiSavingGDradioButton = [self.ui.radioButtonK2_csv_G, self.ui.radioButtonK2_txt_G, self.ui.radioButtonK2_Timename_G, self.ui.radioButtonK2_Custom_Name_G] self.uiSavingGDtextEdit = [self.ui.textEditK2_comment_G] self.uiSavingGDcomboBox = [self.ui.comboBoxK2_Name_Folder_G] self.uiSavingGDlineEdit = [self.ui.lineEditK2_GoogleDrive_G, self.ui.lineEditK2_Custom_Name_G] self.uiSavingGDlabel = [self.ui.labelK2_condition_G] """
class KeithleyGateSweep(): def __init__(self, main, ui): self.ui = ui self.copyDataFunc = main.CopyDataFunc self.collect_data_thread = Collect_data() self.save_thread = Save_Thread() main.connect(self.ui.pushButtonK2_browseGate, SIGNAL('clicked()'), self.Browse_Array) main.connect(self.ui.pushButtonK2_importGate, SIGNAL('clicked()'), self.Import_Array) main.connect(self.ui.pushButtonK2_copyGate, SIGNAL('clicked()'), self.Copy_Array) main.connect(self.ui.pushButtonK2_updateGate, SIGNAL('clicked()'), self.update_visas) main.connect(self.ui.pushButtonK2_updateLead, SIGNAL('clicked()'), self.update_visas) main.connect(self.ui.pushButtonK2_selectGate, SIGNAL('clicked()'), lambda : self.Select_visa("gate", self.gate_visa, self.ui.comboBoxK2_gateVisa, self.ui.lineEditK2_gateVisa, [self.ui.pushButtonK2_selectGate, self.ui.pushButtonK2_closeGate])) main.connect(self.ui.pushButtonK2_selectLead, SIGNAL('clicked()'), lambda : self.Select_visa("lead", self.lead_visa, self.ui.comboBoxK2_leadVisa, self.ui.lineEditK2_leadVisa, [self.ui.pushButtonK2_selectLead, self.ui.pushButtonK2_closeLead])) main.connect(self.ui.pushButtonK2_closeGate, SIGNAL('clicked()'), lambda : self.Close_visa("gate", self.gate_visa, self.ui.lineEditK2_gateVisa, [self.ui.pushButtonK2_selectGate, self.ui.pushButtonK2_closeGate])) main.connect(self.ui.pushButtonK2_closeLead, SIGNAL('clicked()'), lambda : self.Close_visa("lead", self.lead_visa, self.ui.lineEditK2_leadVisa, [self.ui.pushButtonK2_selectLead, self.ui.pushButtonK2_closeLead])) main.connect(self.ui.pushButtonK2_Start, SIGNAL('clicked()'), self.start) main.connect(self.ui.pushButtonK2_Stop, SIGNAL('clicked()'), self.collect_data_thread.stop) main.connect(self.ui.pushButtonK2_Pause, SIGNAL('clicked()'), self.collect_data_thread.pause) main.connect(self.ui.pushButtonK2_browse_save_G, SIGNAL('clicked()'), self.Google_browse) main.connect(self.ui.pushButtonK2_browse_save_O, SIGNAL('clicked()'), self.Other_browse) main.connect(self.ui.pushButtonK2_check_G, SIGNAL('clicked()'), self.Check) main.connect(self.ui.pushButtonK2_Select_Directory_G, SIGNAL('clicked()'), self.Google_select_namefolder) main.connect(self.ui.pushButtonK2_Save_G, SIGNAL('clicked()'), self.G_save) main.connect(self.ui.pushButtonK2_Open_G, SIGNAL('clicked()'), self.G_open) main.connect(self.ui.pushButtonK2_Save_O, SIGNAL('clicked()'), self.O_save) main.connect(self.ui.pushButtonK2_Open_O, SIGNAL('clicked()'), self.O_open) main.connect(self.collect_data_thread, SIGNAL("curve_plot"), self.curvePlots_update) main.connect(self.collect_data_thread, SIGNAL("mpl_plot"), self.mplPlots) main.connect(self.collect_data_thread, SIGNAL("data_available"), self.Pre_save) self.Array = [] self.count = 0 self.go_on = True self.ui.mplwidgetK2_gateArray = self.make_mplToolBar(self.ui.mplwidgetK2_gateArray, self.ui.widgetK2_gateArray) self.ui.mplwidgetK2_AgateVoltage = self.make_mplToolBar(self.ui.mplwidgetK2_AgateVoltage, self.ui.widgetK2_AgateVoltage) self.ui.mplwidgetK2_AleadCurrent = self.make_mplToolBar(self.ui.mplwidgetK2_AleadCurrent, self.ui.widgetK2_AleadCurrent) self.ui.mplwidgetK2_AgateCurrent = self.make_mplToolBar(self.ui.mplwidgetK2_AgateCurrent, self.ui.widgetK2_AgateCurrent) self.ui.mplwidgetK2_ALeadResistance = self.make_mplToolBar(self.ui.mplwidgetK2_ALeadResistance, self.ui.widgetK2_ALeadResistance) self.ui.mplwidgetK2_ALeadCurrentGateVoltage = self.make_mplToolBar(self.ui.mplwidgetK2_ALeadCurrentGateVoltage, self.ui.widgetK2_ALeadCurrentGateVoltage) self.ui.mplwidgetK2_ALeadResistanceGateVoltage = self.make_mplToolBar(self.ui.mplwidgetK2_ALeadResistanceGateVoltage, self.ui.widgetK2_ALeadResistanceGateVoltage) self.axes_gateArray = None self.axes_AgateVoltage = None self.axes_AleadCurrent = None self.axes_AgateCurrent = None self.axes_ALeadResistance = None self.axes_ALeadCurrentGateVoltage = None self.axes_ALeadResistanceGateVoltage = None #self.ui.mplwidget_import = self.canvas_import #self.ui.mplwidget_analysis = self.canvas_analysis #self.ui.mplwidget_ct_analysis = self.canvas_ct_analysis #self.ui.mplwidget_vt_analysis = self.canvas_vt_analysis # Set up guiqwt plot self.curve_itemK2_SgateVoltage = self.make_curveWidgets(self.ui.curvewidgetK2_SgateVoltage, "b", titles = ["Gate Voltage", "Steps", "Gate Voltage (V)"]) self.curve_itemK2_SleadCurrent = self.make_curveWidgets(self.ui.curvewidgetK2_SleadCurrent, "b", titles = ["Lead Current", "Steps", "Lead Current (A)"]) self.curve_itemK2_SgateCurrent = self.make_curveWidgets(self.ui.curvewidgetK2_SgateCurrent, "b", titles = ["Gate Current", "Steps", "Gate Current (A)"]) self.curve_itemK2_SleadResistance = self.make_curveWidgets(self.ui.curvewidgetK2_SleadResistance, "b", titles = ["Lead Resistance", "Steps", "Lead Resistance (Ohms)"]) self.curve_itemK2_SleadCurrentGateVoltage = self.make_curveWidgets(self.ui.curvewidgetK2_SleadCurrentGateVoltage, "b", titles = ["Lead Current vs Gate Voltage", "Gate Voltage (V)", "Lead Current (A)"]) self.curve_itemK2_SleadResistanceGateVoltage = self.make_curveWidgets(self.ui.curvewidgetK2_SleadResistanceGateVoltage, "b", titles = ["Lead Resistane vs Gate Voltage", "Gate Voltage (V)", "Lead Resistance (Ohms)"]) self.ui.pushButtonK2_Pause.setEnabled(False) self.ui.pushButtonK2_Stop.setEnabled(False) self.gate_visa = None self.lead_visa = None self.update_visas() self.uiSavingGDpushButtons = [ self.ui.pushButtonK2_browse_save_G, self.ui.pushButtonK2_check_G, self.ui.pushButtonK2_Select_Directory_G, self.ui.pushButtonK2_Save_G, self.ui.pushButtonK2_Open_G] self.uiSavingGDradioButton = [self.ui.radioButtonK2_csv_G, self.ui.radioButtonK2_txt_G, self.ui.radioButtonK2_Timename_G, self.ui.radioButtonK2_Custom_Name_G] self.uiSavingGDtextEdit = [self.ui.textEditK2_comment_G] self.uiSavingGDcomboBox = [self.ui.comboBoxK2_Name_Folder_G] self.uiSavingGDlineEdit = [self.ui.lineEditK2_GoogleDrive_G, self.ui.lineEditK2_Custom_Name_G] self.uiSavingGDlabel = [self.ui.labelK2_condition_G] """ main.connect(self.ui.pushButton_scan_keithley, SIGNAL('clicked()'), self.Scan_keithley) main.connect(self.ui.pushButton_pause_keithley, SIGNAL('clicked()'), self.collect_data_thread.pause) main.connect(self.ui.pushButton_stop_keithley, SIGNAL('clicked()'), self.collect_data_thread.stop) main.connect(self.ui.pushButton_clear_keithley, SIGNAL('clicked()'), self.collect_data_thread.Clear_keithley) main.connect(self.ui.pushButton_fit_keithley, SIGNAL('clicked()'), self.collect_data_thread.Fit) main.connect(self.ui.pushButton_browse_save_G_keithley, SIGNAL('clicked()'), self.Google_browse) main.connect(self.ui.pushButton_browse_save_O_keithley, SIGNAL('clicked()'), self.Other_browse) main.connect(self.ui.pushButton_check_G_keithley, SIGNAL('clicked()'), self.Check) main.connect(self.ui.pushButton_Select_Directory_G_keithley, SIGNAL('clicked()'), self.Google_select_namefolder) main.connect(self.ui.pushButton_Save_G_keithley, SIGNAL('clicked()'), self.G_save) main.connect(self.ui.pushButton_Open_G_keithley, SIGNAL('clicked()'), self.G_open) main.connect(self.ui.pushButton_Save_O_keithley, SIGNAL('clicked()'), self.O_save) main.connect(self.ui.pushButton_Open_O_keithley, SIGNAL('clicked()'), self.O_open) main.connect(self.ui.radioButton_voltage_keithley, SIGNAL("clicked()"), lambda : self.ui.tabWidget_scan_keithley.setCurrentIndex(0)) main.connect(self.ui.radioButton_timescan_keithley, SIGNAL("clicked()"), self.collect_data_thread.Pre_MPL_Plot) main.connect(self.ui.radioButton_stepscan_keithley, SIGNAL("clicked()"), self.collect_data_thread.Pre_MPL_Plot) main.connect(self.collect_data_thread, SIGNAL("plot"), self.Plot_data) main.connect(self.collect_data_thread, SIGNAL("mpl_plot"), self.Plot_analysis) main.connect(self.collect_data_thread, SIGNAL("data_available"), self.Pre_save) # self.connect(self.Keithley_programs.collect_data_thread, SIGNAL("clear_plot"), self.Keithley_programs.Clear_plot) """ def make_mplToolBar(self, mplwidget, widget): canvas_mpl = FigureCanvas(mplwidget.figure) canvas_mpl.setParent(widget) # This is the toolbar widget for the import canvas mpl_toolbar = NavigationToolbar(canvas_mpl, mplwidget) vbox_ = QVBoxLayout() # The matplotlib canvas vbox_.addWidget(canvas_mpl) # The matplotlib toolbar vbox_.addWidget(mpl_toolbar) widget.setLayout(vbox_) return canvas_mpl def make_curveWidgets(self, curvewidget, color, titles): curve_item = make.curve([], [], color = 'b', marker = "o") curvewidget.plot.add_item(curve_item) curvewidget.plot.set_antialiasing(True) curvewidget.plot.set_titles(titles[0], titles[1], titles[2]) return curve_item def Browse_Array(self): prev_dir = os.getcwd() fileDir = QFileDialog.getOpenFileName(None, 'Select File to Import', prev_dir, filter="Array Files (*.array)") if fileDir != '': file_list = str(fileDir).split('/') for i in range(0, len(file_list) - 1): global open_dir open_dir = '' if i < len(file_list) - 1: open_dir += file_list[i] + '\\' elif i == len(file_list) - 1: open_dir += file_list[i] fileDir.replace('/', '\\') self.ui.lineEditK2_directoryGate.setText(fileDir) self.ui.pushButtonK2_importGate.setEnabled(True) self.ui.lineEditk2_condition_keithley.setText('File: "' + file_list[len(file_list) - 1] + '" has been chosen.') else: self.ui.lineEditk2_condition_keithley.setText("Please choose valid file to import.") def Import_Array(self): divider_found = True count = 0 temp = 0 self.Array = [] x_value = [] y_value = [] fileDir = self.ui.lineEditK2_directoryGate.text() fp = open(fileDir) while True: if count == 5000: self.ui.lineEditk2_condition_keithley.setText("Data not found in file. Please check it.") divider_found = False break line = fp.readline() line_list = line.split(',') if line_list[0].upper() == "Array Data".upper() + '\n': break count += 1 if divider_found == True: line = fp.readline() while True: line = fp.readline().replace('\n', '') #print 'line: ' + line if line == '': break value = line.split(',') x_value.append(temp) x_value.append(temp + 1) y_value.append(value[1]) y_value.append(value[1]) self.Array.append(float(value[1])) temp += 1 self.plot_data(self.axes_gateArray, x_value, y_value, ["Array Import Plot", "Steps", "Values"], self.ui.mplwidgetK2_gateArray) self.ui.lineEditk2_condition_keithley.setText("File is imported correctly.") #self.ui.groupBox_visa_keithley.setEnabled(True) def Copy_Array(self): Values = self.copyDataFunc() if Values != None: self.ui.lineEditk2_condition_keithley.setText('Array has been copied and plotted.') #self.ui.tabWidget_plot_keithely.setCurrentIndex(0) self.Array = [] x_value = [] y_value = [] item = 0 for i in range(0, len(Values)): for j in range(0, len(Values[i])): x_value.append(item) x_value.append(item + 1 - 0.0001) y_value.append(Values[i][j]) y_value.append(Values[i][j]) self.Array.append(Values[i][j]) item += 1 self.plot_data(self.axes_gateArray, x_value, y_value, ["Array Import Plot", "Steps", "Values"], self.ui.mplwidgetK2_gateArray) self.ui.lineEditK2_directoryGate.setText('From Array Builder Tab.') #self.ui.groupBox_visa_keithley.setEnabled(True) #self.ui.groupBox_xvalue_keithley.setEnabled(True) else: self.ui.lineEditk2_condition_keithley.setText('No valid array to copy.') def plot_reset(self, axes, mplwidget): mplwidget.figure.clear() axes = mplwidget.figure.add_subplot(111) return axes def plot_data(self, axes, x, y, titles, mplwidget): axes = self.plot_reset(axes, mplwidget) axes.plot(x, y, marker = '.', linestyle = '-') axes.grid() axes.set_title("Array Import Plot") axes.set_xlabel("Steps") axes.set_ylabel("Values") mplwidget.draw() def update_visas(self): rm = visa.ResourceManager() try: all_visas = rm.list_resources() except: all_visas = "No Visa Available." self.ui.comboBoxK2_gateVisa.clear() self.ui.comboBoxK2_leadVisa.clear() for item in all_visas: self.ui.comboBoxK2_gateVisa.addItem(item) self.ui.comboBoxK2_leadVisa.addItem(item) def Select_visa(self, gateLead, visa_chosen, comboBoxVisa, lineEditVisa, selectClose): visa_address = str(comboBoxVisa.currentText()) rm = visa.ResourceManager() rm.list_resources() inst = rm.open_resource(visa_address) visa_check = self.Check_visa(inst) if visa_check == True: self.ui.lineEditk2_condition_keithley.setText("Visa is selected succefully!") visa_name = inst.query("*IDN?") lineEditVisa.setText(visa_name) selectClose[0].setEnabled(False) selectClose[1].setEnabled(True) if gateLead == "gate": self.gate_visa = inst elif gateLead == "lead": self.lead_visa = inst #self.ui.groupBox_scan_keithley.setEnabled(True) elif visa_check == False: self.ui.lineEditk2_condition_keithley.setText("Invalid visa address.") lineEditVisa.setText("None.") visa_chosen = False def Check_visa(self, inst): try: inst.ask("*IDN?") valid = True except: valid = False return valid def Close_visa(self, gateLead, visa_chosen, lineEditVisa, selectClose): visa_chosen.close() self.ui.lineEditk2_condition_keithley.setText('Visa address is closed') lineEditVisa.setText('') selectClose[0].setEnabled(True) selectClose[1].setEnabled(False) if gateLead == "gate": self.gate_visa = None elif gateLead == "lead": self.lead_visa = None #self.ui.groupBox_scan_keithley.setEnabled(False) def start(self): gate_set = set(str(self.gate_visa).split(' ')) lead_set = set(str(self.lead_visa).split(' ')) if gate_set == lead_set: self.ui.lineEditk2_condition_keithley.setText('Two visa addresses cannot be same.') else: instruments = [self.gate_visa, self.lead_visa] curves = [self.curve_itemK2_SgateVoltage, self.curve_itemK2_SleadCurrent, self.curve_itemK2_SgateCurrent, self.curve_itemK2_SleadResistance, self.curve_itemK2_SleadCurrentGateVoltage, self.curve_itemK2_SleadResistanceGateVoltage] curveWidgets =[self.ui.curvewidgetK2_SgateVoltage, self.ui.curvewidgetK2_SleadCurrent, self.ui.curvewidgetK2_SgateCurrent, self.ui.curvewidgetK2_SleadResistance, self.ui.curvewidgetK2_SleadCurrentGateVoltage, self.ui.curvewidgetK2_SleadResistanceGateVoltage] go_on = None self.ui.tabWidgetK2.setCurrentIndex(1) self.ui.pushButtonK2_Start.setEnabled(False) self.ui.pushButtonK2_Pause.setEnabled(True) self.ui.pushButtonK2_Stop.setEnabled(True) self.ui.lineEditk2_condition_keithley.setText('Running...') self.collect_data_thread.input(instruments, self.ui, self.Array, go_on , curves, curveWidgets) def curvePlots_update(self, curveInfo): curveWidget = curveInfo[0] curve = curveInfo[1] curveWidget.plot.do_autoscale() curve.plot().replot() def mplPlots(self): self.ui.tabWidgetK2.setCurrentIndex(2) self.ui.mplwidgetK2_AgateVoltage.draw() self.ui.mplwidgetK2_AleadCurrent.draw() self.ui.mplwidgetK2_AgateCurrent.draw() self.ui.mplwidgetK2_ALeadResistance.draw() self.ui.mplwidgetK2_ALeadCurrentGateVoltage.draw() self.ui.mplwidgetK2_ALeadResistanceGateVoltage.draw() def Plot_analysis(self): self.ui.tabWidget_plot_keithely.setCurrentIndex(2) self.ui.mplwidget_analysis.draw() self.ui.mplwidget_ct_analysis.draw() self.ui.mplwidget_vt_analysis.draw() def Plot_data(self, voltage, current, time, step): self.ui.label_yvalue_keithley.setText(format(current, '.3f')) self.ui.label_xvalue_keithley.setText(format(voltage, '.3f')) if self.ui.radioButton_timescan_keithley.isChecked(): self.ui.label_tvalue_keithley.setText(format(time, '.3f')) elif self.ui.radioButton_stepscan_keithley.isChecked(): self.ui.label_tvalue_keithley.setText(str(step)) self.ui.curvewidget_keithley.plot.do_autoscale() self.ui.curvewidget_ct_keithley.plot.do_autoscale() self.ui.curvewidget_vt_keithley.plot.do_autoscale() self.curve_item.plot().replot() self.curve_ct_item.plot().replot() self.curve_vt_item.plot().replot() def Clear_plot(self): self.ui.mplwidget_analysis.draw() self.ui.mplwidget_ct_analysis.draw() self.ui.mplwidget_vt_analysis.draw() self.curve_item.plot().replot() self.curve_ct_item.plot().replot() self.curve_vt_item.plot().replot() def Google_browse(self): prev_dir = 'C:\\' file_list = [] file_dir = QFileDialog.getExistingDirectory(None, 'Select Google Drive Folder', prev_dir) if file_dir != '': file_list = str(file_dir).split('/') # for i in range(0, len(file_list) - 1): # if i < len(file_list) - 1: # open_dir += file_list[i] + '\\' # elif i == len(file_list) - 1: # open_dir += file_list[i] file_dir.replace('/', '\\') self.ui.lineEditK2_GoogleDrive_G.setText(file_dir) self.ui.labelK2_condition_G.setText('Open Google Drive User Folder') self.ui.pushButtonK2_check_G.setEnabled(True) def Other_browse(self): prev_dir = os.getcwd() fileDir = QFileDialog.getExistingDirectory(None, 'Select Folder to Save', prev_dir) if fileDir != '': open_dir = '' file_list = str(fileDir).split('/') for i in range(0, len(file_list) - 1): if i < len(file_list) - 1: open_dir += file_list[i] + '\\' elif i == len(file_list) - 1: open_dir += file_list[i] fileDir.replace('/', '\\') self.O_directory = fileDir self.ui.lineEditK2_directory_O.setText(fileDir) self.ui.labelK2_username_O.setEnabled(True) self.ui.comboBoxK2_Name_Folder_O.setEnabled(True) self.ui.groupBoxK2_Filename_O.setEnabled(True) self.ui.groupBoxK2_File_Type_O.setEnabled(True) self.ui.labelK2_comment_O.setEnabled(True) self.ui.textEditK2_comment_O.setEnabled(True) self.ui.pushButtonK2_Save_O.setEnabled(True) self.ui.lineEditK2_Custom_Name_O.setEnabled(True) self.ui.labelK2_condition_O.setText("Click save button to save.") else: self.ui.lineEditK2_directory_O.setText('None') self.ui.labelK2_condition_O.setText('Failed to Read File') def Check(self): self.G_directory = '' file_list = [] file_list = str(self.ui.lineEditK2_GoogleDrive_G.text()).split('\\') if os.path.exists(self.ui.lineEditK2_GoogleDrive_G.text()) == False: self.ui.labelK2_condition_G.setText('Incorrect Google Drive Directory.') else: self.ui.labelK2_condition_G.setText('Please click browse to the "03 User Accounts" folder') for i in range(0, len(file_list)): self.G_directory += file_list[i] + '\\' if file_list[i].upper() == '03 User Accounts'.upper(): self.ui.labelK2_namefolder_G.setEnabled(True) self.ui.comboBoxK2_Name_Folder_G.setEnabled(True) self.ui.pushButtonK2_Select_Directory_G.setEnabled(True) self.ui.labelK2_condition_G.setText('Choose name folder in Google Drive to save.') break def Google_select_namefolder(self): namefolder = str(self.ui.comboBoxK2_Name_Folder_G.currentText()) if namefolder == 'None': self.ui.labelK2_condition_G.setText('Please choose a name folder to save.') else: now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) self.ui.labelK2_G.setText("Save to \\" + namefolder + "\Date" + '\\' + date) self.G_directory += namefolder + "\Data" + '\\' + date + '\\' + 'Keithely with Array' self.ui.groupBoxK2_File_Type_G.setEnabled(True) self.ui.groupBoxK2_Filename_G.setEnabled(True) self.ui.labelK2_comment_G.setEnabled(True) self.ui.textEditK2_comment_G.setEnabled(True) self.ui.pushButtonK2_Save_G.setEnabled(True) self.ui.lineEditK2_Custom_Name_G.setEnabled(True) self.ui.labelK2_condition_G.setText('Click save button to save.') def Select_type_G(self): if self.ui.radioButtonK2_csv_G.isChecked(): self.G_type = '.csv' self.G_divide = ',' elif self.ui.radioButtonK2_txt_G.isChecked(): self.G_type = '.txt' self.G_divide = '\t' def Select_type_O(self): if self.ui.radioButtonK2_csv_O.isChecked(): self.O_type = '.csv' self.O_divide = ',' elif self.ui.radioButtonK2_txt_O.isChecked(): self.O_type = '.txt' self.O_divide = '\t' def Select_name_G(self): if self.ui.radioButtonK2_Timename_G.isChecked(): now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) current_time = '%s.%s.%s' % (now.hour, now.minute, now.second) date_and_time = date + ' ' + current_time self.G_file_name = str(date_and_time) elif self.ui.radioButtonK2_Custom_Name_G.isChecked(): self.G_file_name = str(self.ui.lineEditK2_Custom_Name_G.text()) def Select_name_O(self): if self.ui.radioButtonK2_Timename_O.isChecked(): now = datetime.datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) current_time = '%s.%s.%s' % (now.hour, now.minute, now.second) date_and_time = date + ' ' + current_time self.O_file_name = str(date_and_time) elif self.ui.radioButtonK2_Custom_Name_O.isChecked(): self.O_file_name = str(self.ui.lineEditK2_Custom_Name_O.text()) def Pre_save(self, date_value, t_value, stepData, Array, gateVolt_data, curr_data, gateCurr_data, resistance_data): self.date_value = date_value self.t_value = t_value self.stepData = stepData self.Array = Array self.gateVolt_data = gateVolt_data self.curr_data = curr_data self.gateCurr_data = gateCurr_data self.resistance_data = resistance_data def G_save(self): if self.uiSavingGDradioButton[3].isChecked() and self.uiSavingGDlineEdit[1].text() == '': self.uiSavingGDlabel[0].setText('Enter a valid file name.') else: self.Select_type_G() self.Select_name_G() # It contains the measurement information, including user name, date, measurement type, time step etc. # This is a two dimensional list. Each sub list related to a single line. comments = [] # For QMDlab data file it is "Collected Data" divider = 'Collected Data' # Parameters' names, such as VOLTAGE, CURRENT, TIME parameters = [] # Parameters' units units = [] # Include all the data data = [] # Contains file type, divider, name and directory file_info = [] # First line user name temp = [] temp.append('User Name:') temp.append(str(self.uiSavingGDcomboBox[0].currentText())) comments.append(temp) # Second line edit time temp = [] temp.append('Edit Time:') temp.append(str(datetime.datetime.now())) comments.append(temp) # Third line array source temp = [] temp.append('Array Source:') temp.append(str(self.ui.lineEditK2_directoryGate.text())) comments.append(temp) # Fourth line visa address temp = [] temp.append('Gate Visa Address:') temp.append(str(self.ui.comboBoxK2_gateVisa.currentText())) comments.append(temp) temp = [] temp.append('Gate Visa Name:') name = str(self.ui.lineEditK2_gateVisa.text()) name = name.rstrip() temp.append(name) comments.append(temp) # Fifth line visa address temp = [] temp.append('Lead Visa Address:') temp.append(str(self.ui.comboBoxK2_leadVisa.currentText())) comments.append(temp) temp = [] temp.append('Lead Visa Name:') name = str(self.ui.lineEditK2_leadVisa.text()) name = name.rstrip() temp.append(name) comments.append(temp) # Sixth line scan source temp = [] temp.append('Y-Values Units:') if self.ui.radioButtonK2_Volts.isChecked(): temp.append('Volts') elif self.ui.radioButtonK2_mVolts.isChecked(): temp.append('mVolts') elif self.ui.radioButtonK2_uVolts.isChecked(): temp.append('uVolts') elif self.ui.radioButtonK2_nVolts.isChecked(): temp.append('nVolts') comments.append(temp) # Seventh line time step temp = [] temp.append('Lead Output:') if self.ui.radioButtonK2_Lead4.isChecked(): temp.append('4-Terminal') elif self.ui.radioButtonK2_Lead2.isChecked(): temp.append('2-Terminal') comments.append(temp) # Eighth line output voltage temp = [] temp.append('Output Voltage:') temp.append(self.ui.lineEditK2_LeadOutput.text()) temp.append(self.ui.comboBoxK2_LeadOutput.currentText()) comments.append(temp) # Nineth line comments temp = [] temp.append('Comments:') temp.append(str(self.ui.textEditK2_comment_G.toPlainText())) comments.append(temp) # Do parameters, units and data together parameters.append('Date') units.append('String') data.append(self.date_value) parameters.append('Time') units.append('s') data.append(self.t_value) parameters.append('Step') units.append('1') data.append(self.stepData) parameters.append('Step Value') units.append('1') data.append(self.Array) parameters.append('Gate Voltage') units.append('Volts') data.append(self.gateVolt_data) parameters.append('Gate Current') units.append('Amps') data.append(self.gateCurr_data) parameters.append('Lead Voltage') units.append('Volts') data.append(self.lead_voltage) parameters.append('Lead Current') units.append('Amps') data.append(self.curr_data) parameters.append('Lead Resistance') units.append('Ohms') data.append(self.resistance_data) # File_info # First is file name file_info.append(self.G_file_name) # csv or txt file file_info.append(self.G_type) # the divide of csv is "," while for txt its "\t" file_info.append(self.G_divide) # Always "Collected Data" file_info.append(divider) # The saving directory file_info.append(self.G_directory) self.save_thread.input(comments, parameters, units, data, file_info) self.ui.pushButtonK2_Open_G.setEnabled(True) self.ui.labelK2_condition_G.setText('File has been saved.') def O_save(self): if self.ui.comboBoxK2_Name_Folder_O.currentText() == 'None': self.ui.labelK2_condition_O.setText('Pleanse choose a user name.') elif self.ui.radioButtonK2_Custom_Name_O.isChecked() and self.ui.lineEdit_Custom_Name_O.text() == '': self.ui.labelK2_condition_O.setText('Please enter a file name.') else: self.Select_type_O() self.Select_name_O() # It contains the measurement information, including user name, date, measurement type, time step etc. # This is a two dimensional list. Each sub list related to a single line. comments = [] # For QMDlab data file it is "Collected Data" divider = 'Collected Data' # Parameters' names, such as VOLTAGE, CURRENT, TIME parameters = [] # Parameters' units units = [] # Include all the data data = [] # Contains file type, divider, name and directory file_info = [] # First line user name temp = [] temp.append('User Name:') temp.append(str(self.ui.comboBoxK2_Name_Folder_O.currentText())) comments.append(temp) # Second line edit time temp = [] temp.append('Edit Time:') temp.append(str(datetime.datetime.now())) comments.append(temp) # Third line array source temp = [] temp.append('Array Source:') temp.append(str(self.ui.lineEditK2_directoryGate.text())) comments.append(temp) # Fourth line visa address temp = [] temp.append('Gate Visa Address:') temp.append(str(self.ui.comboBoxK2_gateVisa.currentText())) comments.append(temp) temp = [] temp.append('Gate Visa Name:') name = str(self.ui.lineEditK2_gateVisa.text()) name = name.rstrip() temp.append(name) comments.append(temp) # Fifth line visa address temp = [] temp.append('Lead Visa Address:') temp.append(str(self.ui.comboBoxK2_leadVisa.currentText())) comments.append(temp) temp = [] temp.append('Lead Visa Name:') name = str(self.ui.lineEditK2_leadVisa.text()) name = name.rstrip() temp.append(name) comments.append(temp) # Sixth line scan source temp = [] temp.append('Y-Values Units:') if self.ui.radioButtonK2_Volts.isChecked(): temp.append('Volts') elif self.ui.radioButtonK2_mVolts.isChecked(): temp.append('mVolts') elif self.ui.radioButtonK2_uVolts.isChecked(): temp.append('uVolts') elif self.ui.radioButtonK2_nVolts.isChecked(): temp.append('nVolts') comments.append(temp) # Seventh line time step temp = [] temp.append('Lead Output:') if self.ui.radioButtonK2_Lead4.isChecked(): temp.append('4-Terminal') elif self.ui.radioButtonK2_Lead2.isChecked(): temp.append('2-Terminal') comments.append(temp) # Eighth line output voltage temp = [] temp.append('Output Voltage:') temp.append(self.ui.lineEditK2_LeadOutput.text()) temp.append(self.ui.comboBoxK2_LeadOutput.currentText()) comments.append(temp) # Nineth line comments temp = [] temp.append('Comments:') temp.append(str(self.ui.textEditK2_comment_O.toPlainText())) comments.append(temp) # Do parameters, units and data together parameters.append('Date') units.append('String') data.append(self.date_value) parameters.append('Time') units.append('s') data.append(self.t_value) parameters.append('Step') units.append('1') data.append(self.stepData) parameters.append('Step Value') units.append('1') data.append(self.Array) parameters.append('Gate Voltage') units.append('Volts') data.append(self.gateVolt_data) parameters.append('Gate Current') units.append('Amps') data.append(self.gateCurr_data) parameters.append('Lead Voltage') units.append('Volts') data.append(self.lead_voltage) parameters.append('Lead Current') units.append('Amps') data.append(self.curr_data) parameters.append('Lead Resistance') units.append('Ohms') data.append(self.resistance_data) # File_info # First is file name file_info.append(self.O_file_name) # csv or txt file file_info.append(self.O_type) # the divide of csv is "," while for txt its "\t" file_info.append(self.O_divide) # Always "Collected Data" file_info.append(divider) # The saving directory file_info.append(self.O_directory) self.save_thread.input(comments, parameters, units, data, file_info) self.ui.pushButtonK2_Open_O.setEnabled(True) self.ui.labelK2_condition_O.setText('File has been saved.') def G_open(self): opendir = self.G_directory open_path = 'explorer "' + opendir + '"' subprocess.Popen(open_path) def O_open(self): opendir = self.O_directory open_path = 'explorer "' + opendir + '"' subprocess.Popen(open_path)
def __init__(self, main, ui): self.ui = ui self.update_visas() self.collectDataThread = CollectData() self.save_thread = Save_Thread() # Set up guiqwt plot self.curve_item_current = make.curve([], [], color='b') self.ui.curvewidgetCurrent_CB.plot.add_item(self.curve_item_current) self.ui.curvewidgetCurrent_CB.plot.set_antialiasing(True) self.curve_item_voltage = make.curve([], [], color='b') self.ui.curvewidgetVoltage_CB.plot.add_item(self.curve_item_voltage) self.ui.curvewidgetVoltage_CB.plot.set_antialiasing(True) self.curve_item_conductance = make.curve([], [], color='b') self.ui.curvewidgetConductance_CB.plot.add_item( self.curve_item_conductance) self.ui.curvewidgetConductance_CB.plot.set_antialiasing(True) self.curve_item_resistance = make.curve([], [], color='b') self.ui.curvewidgetResistance_CB.plot.add_item( self.curve_item_resistance) self.ui.curvewidgetResistance_CB.plot.set_antialiasing(True) self.ui.pushButtonStart_CB.setEnabled(False) self.ui.pushButtonStop_CB.setEnabled(False) self.ui.pushButtonPause_CB.setEnabled(False) self.ui.pushButtonClear_CB.setEnabled(False) self.ui.pushButtonCloseAgilent_CB.setEnabled(False) self.ui.pushButtonCloseLockIn_CB.setEnabled(False) main.connect(self.ui.pushButtonUpdateVisas_CB, SIGNAL('clicked()'), self.update_visas) main.connect(self.ui.pushButtonSelectVisas_CB, SIGNAL('clicked()'), self.select_visas) main.connect(self.ui.pushButtonCloseAgilent_CB, SIGNAL('clicked()'), self.closeAgilent) main.connect(self.ui.pushButtonCloseLockIn_CB, SIGNAL('clicked()'), self.closeLockIn) main.connect(self.ui.pushButtonRetrieveVoltage_CB, SIGNAL('clicked()'), self.retrieve_inputs) main.connect(self.ui.pushButtonStart_CB, SIGNAL('clicked()'), self.start) main.connect(self.ui.pushButtonPause_CB, SIGNAL('clicked()'), self.collectDataThread.pause) main.connect(self.ui.pushButtonStop_CB, SIGNAL('clicked()'), self.stop) main.connect(self.ui.pushButtonPause_CB, SIGNAL('clicked()'), self.append_parameters) main.connect(self.ui.pushButtonStop_CB, SIGNAL('clicked()'), self.append_parameters) main.connect(self.ui.pushButtonClear_CB, SIGNAL('clicked()'), self.reset_plots) main.connect(self.collectDataThread, SIGNAL('Plot'), self.plotData) main.connect(self.collectDataThread, SIGNAL('PreSave'), self.PreSave) main.connect(self.ui.pushButtonBrowse_CB, SIGNAL("clicked()"), self.browse) main.connect(self.ui.pushButtonSelectFolder_CB, SIGNAL("clicked()"), self.select_name) main.connect(self.ui.radioButtonCSV_CB, SIGNAL("clicked()"), self.save_type) main.connect(self.ui.radioButtonTXT_CB, SIGNAL("clicked()"), self.save_type) main.connect(self.ui.pushButtonSave_CB, SIGNAL("clicked()"), self.save) #Variables and Arrays self.lock_in_sens_list = [ 100E-9, 200E-9, 500E-9, 1E-6, 2E-6, 5E-6, 10E-6, 20E-6, 50E-6, 100E-6, 200E-6, 500E-6, 1E-3, 2E-3, 5E-3, 10E-3, 20E-3, 50E-3, 100E-3, 200E-3, 500E-3 ] self.sens = [] self.frequency = [] self.amplitude = [] self.phase = [] self.QFactor = [] self.filter = [] self.trim_frequency = [] self.slope = [] self.reserve = [] self.quadrant = [] self.mode = [] self.range = [] self.coupling = [] self.inputType = [] self.floatground = [] self.TimeConstant = []
class Current_Bias(): def __init__(self, main, ui): self.ui = ui self.update_visas() self.collectDataThread = CollectData() self.save_thread = Save_Thread() # Set up guiqwt plot self.curve_item_current = make.curve([], [], color='b') self.ui.curvewidgetCurrent_CB.plot.add_item(self.curve_item_current) self.ui.curvewidgetCurrent_CB.plot.set_antialiasing(True) self.curve_item_voltage = make.curve([], [], color='b') self.ui.curvewidgetVoltage_CB.plot.add_item(self.curve_item_voltage) self.ui.curvewidgetVoltage_CB.plot.set_antialiasing(True) self.curve_item_conductance = make.curve([], [], color='b') self.ui.curvewidgetConductance_CB.plot.add_item( self.curve_item_conductance) self.ui.curvewidgetConductance_CB.plot.set_antialiasing(True) self.curve_item_resistance = make.curve([], [], color='b') self.ui.curvewidgetResistance_CB.plot.add_item( self.curve_item_resistance) self.ui.curvewidgetResistance_CB.plot.set_antialiasing(True) self.ui.pushButtonStart_CB.setEnabled(False) self.ui.pushButtonStop_CB.setEnabled(False) self.ui.pushButtonPause_CB.setEnabled(False) self.ui.pushButtonClear_CB.setEnabled(False) self.ui.pushButtonCloseAgilent_CB.setEnabled(False) self.ui.pushButtonCloseLockIn_CB.setEnabled(False) main.connect(self.ui.pushButtonUpdateVisas_CB, SIGNAL('clicked()'), self.update_visas) main.connect(self.ui.pushButtonSelectVisas_CB, SIGNAL('clicked()'), self.select_visas) main.connect(self.ui.pushButtonCloseAgilent_CB, SIGNAL('clicked()'), self.closeAgilent) main.connect(self.ui.pushButtonCloseLockIn_CB, SIGNAL('clicked()'), self.closeLockIn) main.connect(self.ui.pushButtonRetrieveVoltage_CB, SIGNAL('clicked()'), self.retrieve_inputs) main.connect(self.ui.pushButtonStart_CB, SIGNAL('clicked()'), self.start) main.connect(self.ui.pushButtonPause_CB, SIGNAL('clicked()'), self.collectDataThread.pause) main.connect(self.ui.pushButtonStop_CB, SIGNAL('clicked()'), self.stop) main.connect(self.ui.pushButtonPause_CB, SIGNAL('clicked()'), self.append_parameters) main.connect(self.ui.pushButtonStop_CB, SIGNAL('clicked()'), self.append_parameters) main.connect(self.ui.pushButtonClear_CB, SIGNAL('clicked()'), self.reset_plots) main.connect(self.collectDataThread, SIGNAL('Plot'), self.plotData) main.connect(self.collectDataThread, SIGNAL('PreSave'), self.PreSave) main.connect(self.ui.pushButtonBrowse_CB, SIGNAL("clicked()"), self.browse) main.connect(self.ui.pushButtonSelectFolder_CB, SIGNAL("clicked()"), self.select_name) main.connect(self.ui.radioButtonCSV_CB, SIGNAL("clicked()"), self.save_type) main.connect(self.ui.radioButtonTXT_CB, SIGNAL("clicked()"), self.save_type) main.connect(self.ui.pushButtonSave_CB, SIGNAL("clicked()"), self.save) #Variables and Arrays self.lock_in_sens_list = [ 100E-9, 200E-9, 500E-9, 1E-6, 2E-6, 5E-6, 10E-6, 20E-6, 50E-6, 100E-6, 200E-6, 500E-6, 1E-3, 2E-3, 5E-3, 10E-3, 20E-3, 50E-3, 100E-3, 200E-3, 500E-3 ] self.sens = [] self.frequency = [] self.amplitude = [] self.phase = [] self.QFactor = [] self.filter = [] self.trim_frequency = [] self.slope = [] self.reserve = [] self.quadrant = [] self.mode = [] self.range = [] self.coupling = [] self.inputType = [] self.floatground = [] self.TimeConstant = [] def update_visas(self): visas = rm.list_resources() self.ui.comboBoxAgilent_CB.clear() self.ui.comboBoxLockIn_CB.clear() self.ui.labelCurrentAgilent_CB.setText("") self.ui.labelCurrentLockIn_CB.setText("") for i in visas: self.ui.comboBoxAgilent_CB.addItem(i) self.ui.comboBoxLockIn_CB.addItem(i) def select_visas(self): Agilent = str(self.ui.comboBoxAgilent_CB.currentText()) self.Agilent = rm.open_resource(Agilent) LockIn = str(self.ui.comboBoxLockIn_CB.currentText()) self.LockIn = rm.open_resource(LockIn) try: valid = self.check_Visas() except: valid = False if valid == True: self.ui.labelCurrentAgilent_CB.setText( str(self.Agilent.ask('*IDN?'))) self.ui.labelCurrentLockIn_CB.setText(str( self.LockIn.ask('*IDN?'))) self.ui.lineEditCondition_CB.setText( 'No errors with selected visas') self.ui.pushButtonStart_CB.setEnabled(True) self.ui.pushButtonCloseAgilent_CB.setEnabled(True) self.ui.pushButtonCloseLockIn_CB.setEnabled(True) else: self.ui.lineEditCondition_CB.setText('Error with visas') def check_Visas(self): try: self.Agilent.ask('*IDN?') self.LockIn.ask('*IDN?') valid = True except: valid = False return valid def closeAgilent(self): self.Agilent.close() self.ui.lineEditCondition_CB.setText( 'The visa for Agilent has been closed') self.ui.labelCurrentAgilent_CB.setText('') def closeLockIn(self): self.LockIn.close() self.ui.lineEditCondition_CB.setText( 'The visa for Lock In has been closed') self.ui.labelCurrentLockIn_CB.setText('') def retrieve_inputs(self): #Reading from the lock-in will return values of integers, these integers correspond to the actual settings read from the lock in. These arrays make sure the integers are converted to what the #settings were placed to. self.sens_conversion = [ '100', '200', '500', '1', '2', '5', '10', '20', '50', '100', '200', '500', '1', '2', '5', '10', '20', '50', '100', '200', '500' ] self.tc_values = [ '500 us', '1 ms', '3 ms', '10 ms', '30 ms', '100 ms', '300 ms', '1 s', '3 s', '10 s', '30 s', '100 s', '300 s' ] self.qfactor_values = ['1', '2', '5', '10', '20', '50', '100'] self.temp1 = self.sens_conversion[int(self.LockIn.ask('SENS?'))] if int(self.LockIn.ask('SENS?')) < 3: self.temp1 = self.temp1 + ' ' + 'nV' elif int(self.LockIn.ask('SENS?')) >= 3 and int( self.LockIn.ask('SENS ?')) < 12: self.temp1 = self.temp1 + ' ' + 'uV' else: self.temp1 = self.temp1 + ' ' + 'mV' self.ui.lineEditVoltageLockInSens_CB.setText(self.temp1) self.ui.lineEditFreq_CB.setText( str(self.LockIn.ask("FREQ?")).replace("\r\n", "")) self.ui.lineEditTrimFreq_CB.setText( str(self.LockIn.ask("IFFR?")).replace("\r\n", "")) self.ui.lineEditPhase_CB.setText( str(self.LockIn.ask("PHAS?")).replace("\r\n", "")) self.ui.lineEditAmplitude_CB.setText( str(self.LockIn.ask("SLVL?")).replace("\r\n", "")) self.ui.lineEditQFactor_CB.setText(self.qfactor_values[int( self.LockIn.ask("QFCT?"))]) self.ui.lineEditTimeConstant_CB.setText(self.tc_values[int( (self.LockIn.ask("OFLT?")))]) #Depending on the integer returned from the lock-in, certain buttons will be pushed. if int(self.LockIn.ask('ISRC?')) == 0: self.ui.radioButtonA_CB.setChecked(True) else: self.ui.radioButtonAB_CB.setChecked(True) if int(self.LockIn.ask('ICPL?')) == 0: self.ui.radioButtonAC_CB.setChecked(True) else: self.ui.radioButtonDC_CB.setChecked(True) if int(self.LockIn.ask('IGND?')) == 0: self.ui.radioButtonFloat_CB.setChecked(True) else: self.ui.radioButtonGround_CB.setChecked(True) if int(self.LockIn.ask('TYPF?')) == 0: self.ui.radioButtonBandPass_CB.setChecked(True) elif int(self.LockIn.ask('TYPF?')) == 1: self.ui.radioButtonHighPass_CB.setChecked(True) elif int(self.LockIn.ask('TYPF?')) == 2: self.ui.radioButtonLowPass_CB.setChecked(True) elif int(self.LockIn.ask('TYPF?')) == 3: self.ui.radioButtonNotch_CB.setChecked(True) else: self.ui.radioButtonFlat_CB.setChecked(True) if int(self.LockIn.ask('QUAD?')) == 0: self.ui.radioButtonQuadrant1_CB.setChecked(True) elif int(self.LockIn.ask('QUAD?')) == 1: self.ui.radioButtonQuadrant2_CB.setChecked(True) elif int(self.LockIn.ask('QUAD?')) == 2: self.ui.radioButtonQuadrant3_CB.setChecked(True) else: self.ui.radioButtonQuadrant4_CB.setChecked(True) if int(self.LockIn.ask('FMOD?')) == 0: self.ui.radioButtonfMode_CB.setChecked(True) elif int(self.LockIn.ask('FMOD?')) == 1: self.ui.radioButtonInternalMode_CB.setChecked(True) elif int(self.LockIn.ask('FMOD?')) == 2: self.ui.radioButton2fMode_CB.setChecked(True) elif int(self.LockIn.ask('FMOD?')) == 3: self.ui.radioButton3fMode_CB.setChecked(True) else: self.ui.radioButtonReadMode_CB.setChecked(True) if int(self.LockIn.ask('FRNG?')) == 0: self.ui.radioButtonRange1_CB.setChecked(True) elif int(self.LockIn.ask('FRNG?')) == 1: self.ui.radioButtonRange2_CB.setChecked(True) elif int(self.LockIn.ask('FRNG?')) == 2: self.ui.radioButtonRange3_CB.setChecked(True) elif int(self.LockIn.ask('FRNG?')) == 3: self.ui.radioButtonRange4_CB.setChecked(True) else: self.ui.radioButtonRange5_CB.setChecked(True) if int(self.LockIn.ask('RMOD?')) == 0: self.ui.radioButtonHighRes_CB.setChecked(True) elif int(self.LockIn.ask('RMOD?')) == 1: self.ui.radioButtonNormal_CB.setChecked(True) else: self.ui.radioButtonLowNoise_CB.setChecked(True) if int(self.LockIn.ask('OFSL?')) == 0: self.ui.radioButton6dB_CB.setChecked(True) else: self.ui.radioButton12dB_CB.setChecked(True) self.LockIn.write('LOCL LOCAL') def start(self): self.ui.tabWidgetCB.setCurrentIndex(1) if self.ui.dialVoltageLockIn_CB.value( ) >= 0 and self.ui.dialVoltageLockIn_CB.value() <= 2: self.LockIn_sens = self.lock_in_sens_list[ self.ui.dialVoltageLockIn_CB.value()] self.LockIn_magn = ['nV', 1E-9] elif self.ui.dialVoltageLockIn_CB.value( ) >= 3 and self.ui.dialVoltageLockIn_CB.value() <= 11: self.LockIn_sens = self.lock_in_sens_list[ self.ui.dialVoltageLockIn_CB.value()] self.LockIn_magn = ['uV', 1E-6] else: self.LockIn_sens = self.lock_in_sens_list[ self.ui.dialVoltageLockIn_CB.value()] self.LockIn_magn = ['mV', 1E-3] self.ui.pushButtonStart_CB.setEnabled(False) self.ui.pushButtonPause_CB.setEnabled(True) self.ui.pushButtonStop_CB.setEnabled(True) self.ui.lineEditCondition_CB.setText('Running...') self.collectDataThread.input(self.ui, self.curve_item_current, self.curve_item_voltage, self.curve_item_conductance, self.curve_item_resistance, self.LockIn_sens, self.LockIn_magn, self.Agilent, self.LockIn) def plotData(self): self.curve_item_current.plot().replot() self.curve_item_voltage.plot().replot() self.curve_item_conductance.plot().replot() self.curve_item_resistance.plot().replot() self.ui.curvewidgetCurrent_CB.plot.do_autoscale() self.ui.curvewidgetVoltage_CB.plot.do_autoscale() self.ui.curvewidgetConductance_CB.plot.do_autoscale() self.ui.curvewidgetResistance_CB.plot.do_autoscale() def stop(self): self.collectDataThread.pauseLoop = True self.collectDataThread.quit() self.ui.pushButtonClear_CB.setEnabled(True) self.ui.pushButtonStop_CB.setEnabled(False) self.ui.pushButtonPause_CB.setEnabled(False) self.ui.lineEditCondition_CB.setText("Stopped") def append_parameters(self): self.sens.append(self.temp1) self.frequency.append(str(self.ui.lineEditFreq_CB.text())) self.trim_frequency.append(str(self.ui.lineEditTrimFreq_CB.text())) self.amplitude.append(str(self.ui.lineEditAmplitude_CB.text())) self.phase.append(str(self.ui.lineEditPhase_CB.text())) self.QFactor.append(str(self.ui.lineEditQFactor_CB.text())) self.TimeConstant.append(str(self.ui.lineEditTimeConstant_CB.text())) if self.ui.radioButtonBandPass_CB.isChecked(): self.filter.append('Band Pass') elif self.ui.radioButtonHighPass_CB.isChecked(): self.filter.append('High Pass') elif self.ui.radioButtonLowPass_CB.isChecked(): self.filter.append('Low Pass') elif self.ui.radioButtonNotch_CB.isChecked(): self.filter.append('Notch') elif self.ui.radioButtonFlat_CB.isChecked(): self.filter.append('Flat') else: self.filter = '' self.ui.lineEditCondition_CB.setText( 'Please Choose A Filter Type For Voltage') if self.ui.radioButton6dB_CB.isChecked(): self.slope.append('6 dB/oct.') elif self.ui.radioButton12dB_CB.isChecked(): self.slope.append('12 dB/oct.') else: self.slope = '' self.ui.lineEditCondition_CB.setText( 'Please Choose A Slope For Voltage') if self.ui.radioButtonHighRes_CB.isChecked(): self.reserve.append('High Res') elif self.ui.radioButtonNormal_CB.isChecked(): self.reserve.append('Normal') elif self.ui.radioButtonLowNoise_CB.isChecked(): self.reserve.append('Low Noise') else: self.reserve = '' self.ui.lineEditCondition_CB.setText( 'Please Choose A Reserve For Voltage') if self.ui.radioButtonQuadrant1_CB.isChecked(): self.quadrant.append('0-90') elif self.ui.radioButtonQuadrant2_CB.isChecked(): self.quadrant.append('90-180') elif self.ui.radioButtonQuadrant3_CB.isChecked(): self.quadrant.append('180-270') elif self.ui.radioButtonQuadrant4_CB.isChecked(): self.quadrant.append('270-360') else: self.quadrant = '' self.ui.lineEditCondition_CB.setText( 'Please Choose A Quadrant For Voltage') if self.ui.radioButtonfMode_CB.isChecked(): self.mode.append('f External') elif self.ui.radioButton2fMode_CB.isChecked(): self.mode.append('2f External') elif self.ui.radioButton3fMode_CB.isChecked(): self.mode.append('3f External') elif self.ui.radioButtonInternalMode_CB.isChecked(): self.mode.append('Internal') elif self.ui.radioButtonRearMode_CB.isChecked(): self.mode.append('Rear VCO') else: self.mode = '' self.ui.lineEditCondition_CB.setText( 'Please Choose A Mode For Voltage') if self.ui.radioButtonRange1_CB.isChecked(): self.range.append('0.2-21 Hz') elif self.ui.radioButtonRange2_CB.isChecked(): self.range.append('2.0-210 Hz') elif self.ui.radioButtonRange3_CB.isChecked(): self.range.append('20-2.1k Hz') elif self.ui.radioButtonRange4_CB.isChecked(): self.range.append('200-21k Hz') elif self.ui.radioButtonRange5_CB.isChecked(): self.range.append('2.0k-210k Hz') else: self.range = '' self.ui.lineEditCondition_CB.setText( 'Please Choose A Frequency Range For Voltage') if self.ui.radioButtonAC_CB.isChecked(): self.coupling.append('AC') elif self.ui.radioButtonDC_CB.isChecked(): self.coupling.append('DC') else: self.coupling = '' self.ui.lineEditCondition.setText( 'Please Choose A Coupling For Voltage') if self.ui.radioButtonA_CB.isChecked(): self.inputType.append('A') elif self.ui.radioButtonAB_CB.isChecked(): self.inputType.append('A-B') else: self.inputType = '' self.ui.lineEditCondition_CB.setText( 'Please Choose An Input Type For Voltage') if self.ui.radioButtonFloat_CB.isChecked(): self.floatground.append('Float') elif self.ui.radioButtonGround_CB.isChecked(): self.floatground.append('Ground') else: self.floatground = '' self.ui.lineEditCondition_CB.setText( 'Please Choose A Float/Ground For Voltage') if self.ui.radioButtonOhms_CB.isChecked(): self.resistor_unit = 'Ohms' elif self.ui.radioButtonkOhms_CB.isChecked(): self.resistor_unit = 'kOhms' elif self.ui.radioButtonMOhms_CB.isChecked(): self.resistor_unit = 'MOhms' else: self.resistor_unit = 'GOhms' def PreSave(self, Time, Steps, Current, Voltage, Conductance, Resistance): self.Time = Time self.Steps = Steps self.Current = Current self.Voltage = Voltage self.Conductance = Conductance self.Resistance = Resistance self.collectDataThread.save_ready == False def reset_plots(self): self.ui.pushButtonStart_CB.setEnabled(True) self.curve_item_current.set_data([], []) self.curve_item_voltage.set_data([], []) self.curve_item_conductance.set_data([], []) self.curve_item_resistance.set_data([], []) self.curve_item_current.plot().replot() self.curve_item_voltage.plot().replot() self.curve_item_conductance.plot().replot() self.curve_item_resistance.plot().replot() self.reset_check = True def browse(self): prev_dir = 'C:\\' file_list = [] file_dir = QFileDialog.getExistingDirectory( None, 'Select The GoogleDrive Folder', prev_dir) if file_dir != '': file_list = str(file_dir).split('/') file_dir.replace('/', '\\') self.ui.lineEditDirectory_CB.setText(file_dir) self.directory = '' def select_name(self): file_list = [] file_list = str(self.ui.lineEditDirectory_CB.text()).split('\\') for i in range(0, len(file_list)): self.directory += file_list[i] + '\\' namefolder = str(self.ui.comboBoxFolders_CB.currentText()) if namefolder == 'None': self.ui.lineEditCondition_CB.setText( 'Please Choose A Folder To Save To.') else: #Sets the name of the file to current date and time by default now = datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) self.directory += namefolder + "\Data" + '\\' + date self.current_time = '%s.%s.%s' % (now.hour, now.month, now.second) self.date_and_time = date + ' ' + self.current_time self.file_name = (self.date_and_time) print self.directory def save_type(self): if self.ui.radioButtonCSV_CB.isChecked() == True: self.type = '.csv' self.divide = ',' elif self.ui.radioButtonTXT_CB.isChecked() == True: self.type = '.txt' self.divide = '\t' def save_name(self): if self.ui.radioButtonDateTime_CB.isChecked(): now = datetime.now() date = '%s-%s-%s' % (now.year, now.month, now.day) current_time = '%s.%s.%s' % (now.hour, now.month, now.second) date_and_time = date + ' ' + current_time self.file_name = str(date_and_time) elif self.ui.radioButtonCustomName_CB.isChecked(): self.file_name = str(self.ui.lineEditCustom_CB.text()) def save(self): if self.ui.radioButtonCustomName_CB.isChecked( ) and self.ui.lineEditCustom_CB.text() == ' ': self.ui.lineEditStatus_CB.setText( 'Please Enter A Custom File Name') else: self.save_type() self.save_name() import datetime parameters_s = [ 'Sensitivity:', 'Frequency:', 'Amplitude:', 'Phase:', 'Trim Frequency:', 'Reserve:', 'Slope:', 'Q Factor:', 'Time Constant:', 'Filter Type:', 'Coupling:', 'Input:', 'Float/Ground:', 'Quadrant:', 'Mode:', 'Frequency Range:' ] parametersValue = [ self.sens, self.frequency, self.amplitude, self.phase, self.trim_frequency, self.reserve, self.slope, self.QFactor, self.TimeConstant, self.filter, self.coupling, self.inputType, self.floatground, self.quadrant, self.mode, self.range ] comments = [] parameters = [] file_info = [] units = [] data = [] divider = 'Collected Data' # First line user name temp = [] temp.append('User Name:') temp.append(str(self.ui.comboBoxFolders_CB.currentText())) comments.append(temp) temp = [] temp.append('Edit Time:') temp.append(str(datetime.datetime.now())) comments.append(temp) # Fourth line visa address temp = [] temp.append('Agilent Visa Address:') temp.append(str(self.ui.comboBoxAgilent_CB.currentText())) comments.append(temp) # Fifth line visa name temp = [] temp.append('Visa Name:') visa_name = self.Agilent.ask('*IDN?').rstrip('\n') visa_name = visa_name.replace(',', ' ') temp.append(visa_name) comments.append(temp) temp = [] temp.append('Lock-In Visa Address:') temp.append(str(self.ui.comboBoxLockIn_CB.currentText())) comments.append(temp) temp = [] temp.append('Visa Name:') visa_name = self.LockIn.ask('*IDN?').rstrip('\n') visa_name = visa_name.replace(',', ' ') temp.append(visa_name) comments.append(temp) # Sixth line scan source temp = [] temp.append('Scan Source:') temp.append('Voltage') comments.append(temp) # Seventh line time step temp = [] temp.append('Time Step(sec):') temp.append(str(self.ui.lineEditTimestep_VB.text())) comments.append(temp) temp = [] temp.append('Output Voltage:') temp.append(str(self.ui.lineEditAmplitude_CB.text()) + ' ' + 'V') comments.append(temp) temp = [] temp.append('Large Resistor Value:') temp.append( str(self.ui.lineEditResistor_CB.text()) + ' ' + self.resistor_unit) comments.append(temp) temp = [] temp.append('Lock-In Parameters:') temp.append('') comments.append(temp) for i in range(0, len(parameters_s)): temp = [] for j in range(0, len(self.sens)): temp.append(parameters_s[i]) temp.append(parametersValue[i][j]) comments.append(temp) # Eighth line comments temp = [] temp.append('Comments:') temp.append(str(self.ui.textEditComments_CB.toPlainText())) comments.append(temp) parameters.append('Time') units.append('s') data.append(self.Time) parameters.append('Steps') units.append(' ') data.append(self.Steps) parameters.append('Current') units.append('A') data.append(self.Current) parameters.append('Voltage') units.append(self.LockIn_magn[0]) data.append(self.Voltage) parameters.append('Conductance') units.append('S') data.append(self.Conductance) parameters.append('Resistance') units.append('Ohm') data.append(self.Resistance) file_info.append(self.file_name) file_info.append(self.type) file_info.append(self.divide) file_info.append(divider) file_info.append(self.directory) self.save_thread.input(comments, parameters, units, data, file_info) self.ui.lineEditCondition_CB.setText("Data has been saved")