add analisis data

This commit is contained in:
nazarchuk.as 2022-11-20 13:55:36 +03:00
parent 54d3f87c05
commit 90c2fdaf50
14 changed files with 143 additions and 30 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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.

Before

Width:  |  Height:  |  Size: 147 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

View File

@ -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 B,mTl E,mV I_M,mA t,ms
2 1 17.983333333333334 8.991666666666667 1079
3 2 26.666666666666668 13.333333333333334 1600
4 3 34.583333333333336 17.291666666666668 2075
5 4 46.71666666666667 23.358333333333334 2803
6 5 55.5 27.75 3330

View File

@ -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

1 U_34,mV I_M,mA U_0,mV I_0,mA E, mV N t,ms
2 0.016666666666666666 0.016666666666666666 0.016666666666666666 0.00016666666666666666 0 1 1
3 16.7 16.683333333333334 16.7 16.683333333333334 0.016666666666666666 0.16699999999999998 0.16683333333333333 5.0 1 1002 1001
4 33.38333333333333 33.36666666666667 33.38333333333333 33.36666666666667 0.016666666666666666 0.3338333333333333 0.33366666666666667 10.0 1 2003 2002
5 50.06666666666667 50.06666666666667 0.016666666666666666 0.5006666666666667 15.0 1 3004
66.75 66.75 0.016666666666666666 0.6675 20.0 1 4005