import numpy as np
import pylab as py
from matplotlib.widgets import Slider, Button, RadioButtons
from matplotlib import rc
# rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})


# rc('text', usetex=True)


def s_aperiodique(x,Q,omega):
    z1=-omega*(1/(2*Q)-np.sqrt(1/(4*Q**2) -1 ) )
    z2= -omega*(1/(2*Q)+np.sqrt(1/(4*Q**2) -1 ) )
    tau1=-1/z1
    tau2=-1/z2
    
    return 1+tau1/(tau2-tau1)*np.exp(-x/tau1)-tau2/(tau2-tau1)*np.exp(-x/tau2)
    


def s_critique(x,Q,omega):
    z=-omega*(1/(2*Q))
    tau=-1/z
    return 1-( 1+ x/tau)*np.exp(-x/tau)


def s_pseudo_periodique(x,Q,omega0):
    z=-omega0*(1/(2*Q))
    tau=-1/z
    omega=omega0*np.sqrt(1-1/(4*Q**2))
    return 1-np.exp(-x/tau)*(  np.cos(omega*x) +  1/(omega*tau)*np.sin(omega*x) )

    
t=np.linspace(0,10,50000)

fig = py.figure('RLC série')
ax = fig.add_subplot(1,1,1)

py.subplots_adjust(left=0.1, bottom=0.35)
py.axis([0,0.8,0,0.8])

l1,l2 =py.plot([],[],'-r',[],[],'-r')

def rebond (event):
	
    lnL  = amplitude1.val
    L = 10**lnL 
    omega = np.sqrt(1/(L))
    a1 = 1 * np.sqrt(L)
    T = 20
    Nb = 10**5
    t=np.linspace(0,T,Nb)
    l1.set_xdata([-10,0])
    y=[0,0]
    l1.set_ydata(y)
    l2.set_xdata(t[1:])
    
    if a1<0.5:
        l2.set_ydata(np.diff(s_aperiodique(t,a1,omega))*Nb/T)
    elif a1==0.5:
        l2.set_ydata(np.diff(s_critique(t,a1,omega))*Nb/T)
    else:
        l2.set_ydata(np.diff(s_pseudo_periodique(t,a1,omega))*Nb/T)
    
    ax.axes.axis([-5,20,-1,1.1])
    ax.set_ylabel('i', fontsize=16)
    ax.set_xlabel('t', fontsize=16)
    py.draw()
    
    

    

sld_amplitude1 = py.axes([0.1, 0.15, 0.8, 0.1], facecolor='grey')
amplitude1     = Slider(sld_amplitude1, r'log(L/1H)', -5, 1, valinit=0.5)


amplitude1.on_changed(rebond)


py.show()
