import numpy as np import scipy.optimize as spo import matplotlib.pyplot as plt import gc def fit_plot(Vbias, a1, a2, a3, a4): return np.exp(a1 * np.tanh(0.08*Vbias+a2)/a3) - a4 yes = (['y', 'Y', '', 'yes', 'Yes']) no = (['n', 'N', 'no', 'No']) shotnostart = 17739 toPlot = np.load("toPlot.npy") #toPlot je numpy 3D pole se osami: x=čas(0-4000), y=napětí(0) nebo proud(1), z=číslo měření dataLoop = np.load("npzcache/loop_voltage" + str(shotnostart) + ".npz") loop_voltage = dataLoop['data'] x = np.linspace(-100, 100, 1000) timePlot = 2000 #modify iterator and range to change output while timePlot in range(2000,2001): while True: try: xdata = toPlot[timePlot, 0, :] y = toPlot[timePlot, 1, :] ydata = y + 0.00009 * np.random.normal(size=len(xdata)) initial_guess = [1.02,-0.45,7,-0.9] po, po_cov = spo.curve_fit(fit_plot, xdata, ydata, initial_guess) #ff=po[0]*np.exp(po[1] * np.tanh(po[2]*x+po[3])/po[4])-po[5] #print(po) #print(po_cov) ax1 = plt.subplot2grid((5,1),(0,0), rowspan=3) ax2 = plt.subplot2grid((6,3),(4,0)) ax1.axis([-60, 60, -0.1, 0.6]) ax1.grid() ax1.axvline(x=0, ls='-.', color='black') ax1.axhline(y=0, ls='-.', color='black') ax1.text(-60, -0.435, '$t = <' + str((timePlot * 10) - 10) + ';' + str((timePlot * 10) + 10) + '> [us]$', fontsize=12, color='grey') ax1.text(-60, 0.62, 'I = e^(' + str(round(po[0],2)) + '* tanh(0.08 * Vbias + ' + str(round(po[1],2)) + ')/ ' + str(round(po[2],1)) + ') + ' + str(round(po[3],2)), fontsize=10, color='grey') ax1.scatter(toPlot[timePlot, 0, :], toPlot[timePlot, 1, :], marker='x', color='red') ax1.plot(x, fit_plot(x, po[0], po[1], po[2], po[3])) ax2.plot(range(0, 40000), loop_voltage, color='blue') ax2.axis([6000, 40000, -1, 22]) ax2.axvline(x=(timePlot * 10), ls='-.', color='red') cur_axes = plt.gca() cur_axes.axes.get_xaxis().set_ticklabels([]) cur_axes.axes.get_yaxis().set_ticklabels([]) plt.savefig('output/' + str(timePlot) + '.png') gc.collect() timePlot = timePlot + 1 except RuntimeError: print("adaai") continue break