From febe43f08afbddc3a393a38a971a85c094bef649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9F=D1=83?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2?= Date: Sat, 10 Dec 2022 17:05:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D0=BB(=D0=B0)=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20'Pro?= =?UTF-8?q?ject/program=5Ffiles'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project/program_files/analize.py | 56 ++++++++++++++++++++++++++++++ Project/program_files/voltmeter.py | 40 +++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 Project/program_files/analize.py create mode 100644 Project/program_files/voltmeter.py diff --git a/Project/program_files/analize.py b/Project/program_files/analize.py new file mode 100644 index 0000000..7d37690 --- /dev/null +++ b/Project/program_files/analize.py @@ -0,0 +1,56 @@ +from scipy.optimize import curve_fit +from numpy import linspace +import numpy as np +from numpy import tanh +from scipy.constants import e, k +from numpy import sqrt +from numpy import array +import pandas as pd + + +# Global variables + +new_U = linspace(-22, 22, 1000) + + +# Function for approximation + + +def function_IU(U, I_n, T_e, A, B): + return I_n * tanh(e*U/2/k/T_e) + A*U + B + +# Find the best fit params of In and Te + + +def find_FitParams(data_I, data_U): + popt, pcov = curve_fit(function_IU, data_U, data_I, p0=[0, 50000, 0, 0]) + return popt, pcov + + +# Returns disperancy of given value + + +def discrepancy(data, popt): + I = data[0] + U = data[1] + tmp = [] + + for i in range(len(U)): + temp = sqrt((function_IU( + U[i], *popt)-I[i])**2/len(U)/(len(U)-1)) + tmp.append(temp) + + return tmp + + +# Returns pandas.DataFrame with approximated Current and Voltage values + + +def getApproxValues(data): + data = data.sort_values(by=['U']) + popt, pcov = find_FitParams(data['I'], data['U']) + df = pd.DataFrame() + df['U'] = new_U + df['I'] = function_IU(df['U'], *popt) + error = np.sqrt(np.diag(pcov)) + return [df, popt, error] diff --git a/Project/program_files/voltmeter.py b/Project/program_files/voltmeter.py new file mode 100644 index 0000000..d450259 --- /dev/null +++ b/Project/program_files/voltmeter.py @@ -0,0 +1,40 @@ +class AKIP(): + + def __init__(self, folder): + self.folder = folder + + def getVoltageDC(self): + self.instr = open(self.folder, 'w') + self.instr.write('MEAS:VOLT:DC?\n') + self.instr.flush() + self.instr = open(self.folder, 'r') + data = self.instr.readline() + self.instr.close() + return float(data) + + def getCurrentDC(self): + self.instr = open(self.folder, 'w') + self.instr.write('MEAS:AMP:DC?\n') + self.instr.flush() + self.instr = open(self.folder, 'r') + data = self.instr.readline() + self.instr.close() + return float(data) + + def getVoltageAC(self): + self.instr = open(self.folder, 'w') + self.instr.write('MEAS:VOLT:AC?\n') + self.instr.flush() + self.instr = open(self.folder, 'r') + data = self.instr.readline() + self.instr.close() + return float(data) + + def getCurrentAC(self): + self.instr = open(self.folder, 'w') + self.instr.write('MEAS:AMP:AC?\n') + self.instr.flush() + self.instr = open(self.folder, 'r') + data = self.instr.readline() + self.instr.close() + return float(data)