add analisis data
This commit is contained in:
		
							parent
							
								
									54d3f87c05
								
							
						
					
					
						commit
						90c2fdaf50
					
				| @ -12,8 +12,8 @@ from scipy.optimize import curve_fit | ||||
| 
 | ||||
| 
 | ||||
| class Data: | ||||
|     def __init__(self, x=[], y=[], xlabel='', ylabel='', caption='', xerr=None, | ||||
|                  yerr=None, through_0=0, data_filename='', color=None, | ||||
|     def __init__(self, x=[], y=[], xlabel='', ylabel='', caption='', xerr=[], | ||||
|                  yerr=[], through_0=0, data_filename='', color=None, | ||||
|                  centering=None, size=15, coefficient=[0.9, 1.1], saving=None): | ||||
|         self.x = x | ||||
|         self.y = y | ||||
| @ -36,20 +36,20 @@ class Data: | ||||
|         self.data_filename = data_filename | ||||
|         self.saving = saving | ||||
| 
 | ||||
|     def make_errors(self, xerr=None, yerr=None): | ||||
|         if not xerr: | ||||
|     def make_errors(self, xerr=[], yerr=[]): | ||||
|         if not len(xerr): | ||||
|             xerr = self.xerr | ||||
|         if not yerr: | ||||
|         if not len(yerr): | ||||
|             yerr = self.yerr | ||||
|         if not xerr: | ||||
|         if not len(xerr): | ||||
|             xerr = 0 | ||||
|         if not yerr: | ||||
|         if not len(yerr): | ||||
|             yerr = 0 | ||||
|         if not yerr or type(yerr) == float or type(yerr) == int: | ||||
|         if type(yerr) == float or type(yerr) == int: | ||||
|             self.yerr = [yerr for _ in self.y] | ||||
|         else: | ||||
|             self.yerr = yerr | ||||
|         if not xerr or type(xerr) == float or type(xerr) == int: | ||||
|         if type(xerr) == float or type(xerr) == int: | ||||
|             self.xerr = [xerr for _ in self.x] | ||||
|         else: | ||||
|             self.xerr = xerr | ||||
|  | ||||
| @ -9,6 +9,8 @@ import os | ||||
| import csv | ||||
| import serial | ||||
| import numpy as np | ||||
| from scipy.optimize import curve_fit | ||||
| import matplotlib.pyplot as plt | ||||
| import time | ||||
| from PyQt6 import QtCore | ||||
| from PyQt6.QtGui import QPixmap | ||||
| @ -24,22 +26,16 @@ from PyQt6.QtWidgets import (QLabel, | ||||
| from Analisis_data import Data | ||||
| from Abstract_window import AbstractWindow | ||||
| 
 | ||||
| 
 | ||||
| class ChartWindow(AbstractWindow): | ||||
|     def __init__(self, parent): | ||||
|         super().__init__() | ||||
| 
 | ||||
|         self.setWindowTitle('Обработка данных') | ||||
|         self.parent = parent | ||||
|         self.parent.chartname = 'Chart' | ||||
|         self.parent.data = Data(data_filename=os.path.join(self.parent.folder, self.parent.dataname), | ||||
|                                 saving=os.path.join(self.parent.folder, self.parent.chartname)) | ||||
|         self.parent.data.read_csv() | ||||
|         # add B(I_M) #TODO | ||||
|         self.parent.data.x = np.array(self.parent.data.data['I_0,mA'])*np.array(self.parent.data.data['I_M,mA']) | ||||
|         self.parent.data.y = self.parent.data.data['U_34,mV'] | ||||
|         self.parent.data.ylabel = 'U_34,mV' | ||||
|         self.parent.data.xlabel = 'I$_{обр} \cdot B$, мА$\cdot $ Tл' | ||||
|         self.parent.data.make_grafic() | ||||
| 
 | ||||
|         (a, eps) = self.make_grad() | ||||
|         self.make_main(a, eps) | ||||
| 
 | ||||
|         self.setWindowTitle('Основной эксперимент. Обработка данных') | ||||
|         self.resize(1400, 800) | ||||
| @ -48,15 +44,126 @@ class ChartWindow(AbstractWindow): | ||||
|         self.setCentralWidget(self.centralwidget) | ||||
| 
 | ||||
|         pixmap = QPixmap(os.path.join( | ||||
|             self.parent.folder, self.parent.chartname)) | ||||
|             self.parent.folder, | ||||
|             self.parent.main_chartname)) | ||||
|         self.label = QLabel(self) | ||||
|         self.label.setScaledContents(True) | ||||
|         self.label.setFixedSize(0.7*self.width(), 0.9*self.height()) | ||||
|         self.label.setPixmap(pixmap) | ||||
| 
 | ||||
|         self.text = QTextBrowser() | ||||
|         self.text.setText('text') | ||||
|         self.text.setText(self.make_text()) | ||||
| 
 | ||||
|         self.hbox_layout = QGridLayout(self.centralwidget) | ||||
|         self.hbox_layout.addWidget(self.label, 0, 0) | ||||
|         self.hbox_layout.addWidget(self.text, 0, 1) | ||||
|         self.hbox_layout.addWidget(self.text, 0, 1) | ||||
| 
 | ||||
|     def B(self, x, b, c, d): | ||||
|         return x**2*b+x*c+d | ||||
| 
 | ||||
|     def make_grad(self): | ||||
| 
 | ||||
|         self.parent.grad_chartname = 'Graduation_chart.png' | ||||
|         self.parent.data_grad = Data(data_filename=os.path.join( | ||||
|             self.parent.folder, self.parent.flow_dataname)) | ||||
|         self.parent.data_grad.read_csv() | ||||
|         self.parent.data_grad.x = np.array( | ||||
|             self.parent.data_grad.data['I_M,mA']) | ||||
|         self.parent.data_grad.y = np.array(self.parent.data_grad.data['B,mTl']) | ||||
|         self.parent.data_grad.xlabel = 'I$_M$,mA' | ||||
|         self.parent.data_grad.ylabel = 'B,mTl' | ||||
|         self.parent.data_grad.xerr = 0.0035/100*self.parent.data_grad.x | ||||
|         self.parent.data_grad.yerr = 0.02*self.parent.data_grad.y | ||||
|         plt.figure(dpi=500, figsize=(8, 5)) | ||||
|         self.parent.data_grad.make_point_grafic() | ||||
| 
 | ||||
|         a, sigma = curve_fit( | ||||
|             self.B, self.parent.data_grad.x, self.parent.data_grad.y) | ||||
|         sigma = abs(np.sqrt(np.diag(sigma))/a) | ||||
|         eps = (np.min(sigma)**2+(0.0035/100)**2+0.02**2)**0.5 | ||||
|         x_range = np.arange(min(self.parent.data_grad.x), | ||||
|                             max(self.parent.data_grad.x), step=0.001) | ||||
|         y_fit = self.B(x_range, a[0], a[1], a[2]) | ||||
|         plt.plot(x_range, y_fit) | ||||
|         plt.savefig(os.path.join( | ||||
|             self.parent.folder, | ||||
|             self.parent.grad_chartname)) | ||||
|         return (a, eps) | ||||
| 
 | ||||
|     def make_main(self, a, eps_b): | ||||
|         self.parent.main_chartname = 'Chart' | ||||
|         self.parent.data_main = Data(data_filename=os.path.join(self.parent.folder, self.parent.dataname), | ||||
|                                      saving=os.path.join(self.parent.folder, self.parent.main_chartname)) | ||||
|         self.parent.data_main.read_csv() | ||||
| 
 | ||||
|         h = self.parent.a | ||||
|         e = np.array((self.parent.data_main.data['U_34,mV'] - | ||||
|                       self.parent.data_main.data['U_0,mV'])/10**3) | ||||
|         b = np.array( | ||||
|             self.B(self.parent.data_main.data['I_M,mA'], a[0], a[1], a[2])) | ||||
|         eds = chr(949) | ||||
|         self.parent.data_main.x = np.array( | ||||
|             self.parent.data_main.data['I_0,mA']*b) | ||||
|         self.parent.data_main.y = e | ||||
|         self.parent.data_main.ylabel = eds+'$_x$, mV' | ||||
|         self.parent.data_main.xlabel = 'I$_{обр} \cdot B$, мА$\cdot $ Tл' | ||||
|         self.parent.data_main.make_grafic() | ||||
|         self.parent.data_main.xerr = abs( | ||||
|             self.parent.data_main.x*(eps_b**2+0.01**2)**0.5) | ||||
|         self.parent.data_main.yerr = abs(5*10**-5*self.parent.data_main.y) | ||||
|         self.parent.data_main.through_0 = 0 | ||||
|         k, b1, sigma = self.parent.data_main.make_grafic() | ||||
|         self.parent.R_H = k*h | ||||
|         self.parent.sigma_R_H = self.parent.R_H*sigma[0]/k | ||||
| 
 | ||||
|         e_e = 1.6*10**-19 | ||||
|         self.parent.n = 1/(-self.parent.R_H*e_e)*10**-21 | ||||
|         self.parent.sigma_n = self.parent.n*abs(sigma[0]/k) | ||||
| 
 | ||||
|         self.parent.b = -self.parent.sigma*self.parent.R_H | ||||
| 
 | ||||
|         self.parent.sigma_b = self.parent.b*((self.parent.sigma_sigma/self.parent.sigma)**2 + | ||||
|                                              (sigma[0]/k)**2)**0.5 | ||||
| 
 | ||||
|     def make_text(self): | ||||
|         s0 = 'Вычисленные постоянные равны:'+'\n'+\ | ||||
|             'R_X - постоянная Холла, '+'\n'+' n - концентрация носителей заряда,'+'\n'+\ | ||||
|              'sigma - удельная проводимость, '+'\n'+' b - подвижность'+'\n'+'\n' | ||||
|          | ||||
|         s1 = 'R_X = ' + str(round(self.parent.R_H*10**10)) + '  +-  ' + \ | ||||
|             str(round(self.parent.sigma_R_H*10**10)) + \ | ||||
|             ' , 10^-10 м^3/Кл'+'\n'+'\n' | ||||
|         s2 = 'n = ' + str(round(self.parent.n)) + '  +-  ' + \ | ||||
|             str(round(self.parent.sigma_n)) + ' , 1/м^3'+'\n'+'\n' | ||||
|         s3 = 'sigma = ' + str(round(self.parent.sigma)) + '  +-  ' + \ | ||||
|             str(round(self.parent.sigma_sigma)) + ', 1/(Ом*м)'+'\n'+'\n' | ||||
| 
 | ||||
|         s4 = 'b = ' + str(round(self.parent.b*10**4)) + '  +-  ' + \ | ||||
|             str(round(self.parent.sigma_b*10**4)) + ', см^3/(В*с)'+'\n'+'\n' | ||||
|         return s0+s1+s2+s3+s4 | ||||
| 
 | ||||
|         # print('all ', -k/h, '+-', sigma[0]/h) | ||||
|         # plt.show() | ||||
|         # plt.figure(dpi=500, figsize=(8, 5)) | ||||
| 
 | ||||
|         # plt.figure(dpi=500, figsize=(8, 5)) | ||||
|         # x = np.array(data['I']) | ||||
|         # y = np.array(data['k']) | ||||
|         # xlabel = 'I, мА' | ||||
|         # ylabel = 'K, мВ/Тл' | ||||
|         # caption_point = '' | ||||
|         # xerr = abs(x*1/100) | ||||
|         # yerr = data['sig_k'] | ||||
|         # k, b, sigma = make_graffic( | ||||
|         #     x, y, xlabel, ylabel, caption_point, xerr, yerr, b=0, koef=[1.1, 1.1]) | ||||
|         # plt.savefig('K(I)') | ||||
|         # print('R_x ', k*h*10**6, '+-', sigma[0]*10**6*h) | ||||
|         # n = 1/(-k*h*e_e)*10**-21 | ||||
|         # sigma_n = n*abs(sigma[0]/k) | ||||
|         # print('n = ', n, '+-', sigma_n) | ||||
|         # sig = 1/4.097*5/4/10**-3 | ||||
|         # sig_sig = sig*((5*10**-5)**2+(1/100)**2)**0.5 | ||||
|         # print('sigma = ', sig, '+-', sig_sig) | ||||
|         # b = -sig*k*h*10**4 | ||||
|         # sig_b = b*((sig_sig/sig)**2+(sigma[0]/k)**2)**0.5 | ||||
|         # print('b = ', b, '+-', sig_b) | ||||
|  | ||||
| @ -26,7 +26,6 @@ from Abstract_window import AbstractWindow | ||||
| 
 | ||||
| 
 | ||||
| class ThreadData(QtCore.QThread): | ||||
|     signal = QtCore.pyqtSignal(str) | ||||
| 
 | ||||
|     def __init__(self, parent): | ||||
|         QtCore.QThread.__init__(self) | ||||
| @ -102,7 +101,7 @@ class MainWindow(AbstractWindow): | ||||
| 
 | ||||
|     def enter_a(self): | ||||
|         # TODO | ||||
|         self.parent.a = self.lineEdit.text() | ||||
|         self.parent.a = float(self.lineEdit.text())/10**3 | ||||
|         self.start.setEnabled(True) | ||||
|         self.lineEdit.setReadOnly(True) | ||||
| 
 | ||||
|  | ||||
| @ -60,11 +60,11 @@ class ResistanceWindow(AbstractWindow): | ||||
|         self.parent.change_number() | ||||
|      | ||||
|     def enter_L(self): | ||||
|         self.parent.L=self.line_L.text() | ||||
|         self.parent.L=float(self.line_L.text())/1000 | ||||
|         self.line_L.setReadOnly(True) | ||||
|          | ||||
|     def enter_l(self): | ||||
|         self.parent.L=self.line_l.text() | ||||
|         self.parent.l=float(self.line_l.text())/1000 | ||||
|         self.start.setEnabled(True) | ||||
|         self.line_l.setReadOnly(True) | ||||
|      | ||||
| @ -73,6 +73,9 @@ class ResistanceWindow(AbstractWindow): | ||||
|         current=10 | ||||
|         voltage=15 | ||||
|         # voltage, current = self.measure() | ||||
|          | ||||
|         self.parent.sigma = current*self.parent.L/(voltage*self.parent.l*self.parent.a) | ||||
|         self.parent.sigma_sigma = self.parent.sigma*((5*10**-5)**2+(0.0035/100)**2)**0.5 | ||||
|         self.current_value.setText(str(current)+', mA') | ||||
|         self.voltage_value.setText(str(voltage)+', mV') | ||||
|         self.menu.setEnabled(True) | ||||
|  | ||||
| @ -31,7 +31,7 @@ class SignWindow(AbstractWindow): | ||||
|         self.menu.clicked.connect(self.menu_clicked) | ||||
|          | ||||
|         self.with_field = QLabel('С полем: ', self) | ||||
|         self.without_field = QLabel('С полем: ', self) | ||||
|         self.without_field = QLabel('Без поля: ', self) | ||||
|         self.with_field_value = QLabel(self) | ||||
|         self.without_field_value = QLabel(self) | ||||
|                  | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 155 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Automation/j/Graduation_chart.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Automation/j/Graduation_chart.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 122 KiB | 
| @ -1 +1,6 @@ | ||||
| "B,mTl","E,mV","I_M,mA","t,ms" | ||||
| 1,17.983333333333334,8.991666666666667,1079 | ||||
| 2,26.666666666666668,13.333333333333334,1600 | ||||
| 3,34.583333333333336,17.291666666666668,2075 | ||||
| 4,46.71666666666667,23.358333333333334,2803 | ||||
| 5,55.5,27.75,3330 | ||||
|  | ||||
| 
 | 
| @ -1,6 +1,5 @@ | ||||
| "U_34,mV","I_M,mA","U_0,mV","I_0,mA","E, mV",N,"t,ms" | ||||
| 0.016666666666666666,0.016666666666666666,0.016666666666666666,0.00016666666666666666,0,1,1 | ||||
| 16.7,16.7,0.016666666666666666,0.16699999999999998,5.0,1,1002 | ||||
| 33.38333333333333,33.38333333333333,0.016666666666666666,0.3338333333333333,10.0,1,2003 | ||||
| 16.683333333333334,16.683333333333334,0.016666666666666666,0.16683333333333333,5.0,1,1001 | ||||
| 33.36666666666667,33.36666666666667,0.016666666666666666,0.33366666666666667,10.0,1,2002 | ||||
| 50.06666666666667,50.06666666666667,0.016666666666666666,0.5006666666666667,15.0,1,3004 | ||||
| 66.75,66.75,0.016666666666666666,0.6675,20.0,1,4005 | ||||
|  | ||||
| 
 | 
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user