import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
from matplotlib import rc

## Déclaration des constantes

omega = 1

AvecOuSans = 'Sans les harmoniques 9 à 19'

##

def slider_changed (event):
    dessine()
    
def F(w0) : 
    if AvecOuSans == 'Sans les harmoniques 9 à 19':
        Test = 0
    if AvecOuSans == 'Avec les harmoniques 9 à 19':
        Test = 1
    return(Test)
    
    

def harmosenplus(label):
    global AvecOuSans
    AvecOuSans = label
    dessine()

    


## Création de la figure et des axes


fig = plt.figure(figsize=[15,6])

ax = fig.add_axes([0.58,0.1,0.4,0.4])
plt.xlabel(r'$t$ (s)',fontsize = 20)
plt.ylabel(r'$e(t)$',fontsize = 20)
plt.axis([0,5,-5,100])
l1 , l2b , l3b , l4b , l5b  =plt.plot([],[],'-k',[],[],'-b',[],[],'-b',[],[],'-b',[],[],'-b')



ax2 = fig.add_axes([0.58,0.59,0.4,0.4])
ll0, ll1 , ll2 , ll3 , ll4 , ll5 , ll6, ll7, ll8, ll9, ll10  ,ll11 , ll12 =plt.plot([],[],'-k' , [],[],'-k' ,[],[],'-k',[],[],'-k',[],[],'-k',[],[],'-k',[],[],'-r',[],[],'-r',[],[],'-r',[],[],'-r',[],[],'-r',[],[],'-r',[],[],'--b', lw =8)
plt.xlabel(r'$\omega_n$ (rad/s)',fontsize = 20)
plt.ylabel(r'$C_n$',fontsize = 20)



bx0 = fig.add_axes([0.06,0.1,0.45,0.5])
bx0.set_xticklabels([])
#bx0.set_yticklabels([])
b0 , b1 , b2 , b3 , b4 , b5 , l2 , l3 , l4 , l5=plt.plot([],[],'-k',[],[],'-r',[],[],'0.7',[],[],'-m',[],[],'-g',[],[],'-c',[],[],'-b',[],[],'-b',[],[],'-b',[],[],'-b')
plt.text(7.8,2.1,'pour le créneau impair',fontsize = 16)
#plt.text(-2,0,'$a_0$',fontsize = 16)


## Sliders
axBouton       = plt.axes([0.1,0.67,0.25,0.08])
bouton_change_sens = RadioButtons(axBouton, ['Sans les harmoniques 9 à 19','Avec les harmoniques 9 à 19'])
bouton_change_sens.on_clicked(harmosenplus)


    
sld_pos_0  = [0.06, 0.98, 0.4, 0.02]
sld_amplitude0 = plt.axes(sld_pos_0)
amplitude0     = Slider(sld_amplitude0, r'$a_0$',-1, 1 , valinit=0)
amplitude0.on_changed(slider_changed)

    
sld_pos_1  = [0.06, 0.96, 0.4, 0.02]
sld_amplitude1 = plt.axes(sld_pos_1)
amplitude1     = Slider(sld_amplitude1, r'$c_1$',0, 2 , valinit=4/np.pi)
amplitude1.on_changed(slider_changed)

sld_pos_2  = [0.06, 0.94, 0.4, 0.02]
sld_amplitude2 = plt.axes(sld_pos_2)
amplitude2     = Slider(sld_amplitude2, r'$\phi_1$',-3.14, 3.14 , valinit = -np.pi/2)
amplitude2.on_changed(slider_changed)

sld_pos_3  = [0.06, 0.92, 0.4, 0.02]
sld_amplitude3 = plt.axes(sld_pos_3)
amplitude3     = Slider(sld_amplitude3, r'$c_2$',0, 2 , valinit = 0)
amplitude3.on_changed(slider_changed)

sld_pos_4  = [0.06, 0.90, 0.4, 0.02]
sld_amplitude4 = plt.axes(sld_pos_4)
amplitude4     = Slider(sld_amplitude4, r'$\phi_2$',-3.14, 3.14 , valinit = -np.pi/2)
amplitude4.on_changed(slider_changed)

sld_pos_5  = [0.06, 0.88, 0.4, 0.02]
sld_amplitude5 = plt.axes(sld_pos_5)
amplitude5     = Slider(sld_amplitude5, r'$c_3$',0, 2 , valinit=4/3/np.pi)
amplitude5.on_changed(slider_changed)

sld_pos_6  = [0.06, 0.86, 0.4, 0.02]
sld_amplitude6 = plt.axes(sld_pos_6)
amplitude6     = Slider(sld_amplitude6, r'$\phi_3$',-3.14, 3.14 , valinit = -np.pi/2)
amplitude6.on_changed(slider_changed)

sld_pos_7  = [0.06, 0.84, 0.4, 0.02]
sld_amplitude7 = plt.axes(sld_pos_7)
amplitude7     = Slider(sld_amplitude7, r'$c_5$',0, 2 , valinit=4/5/np.pi)
amplitude7.on_changed(slider_changed)

sld_pos_8  = [0.06, 0.82, 0.4, 0.02]
sld_amplitude8 = plt.axes(sld_pos_8)
amplitude8     = Slider(sld_amplitude8, r'$\phi_5$',-3.14, 3.14 , valinit = -np.pi/2)
amplitude8.on_changed(slider_changed)

sld_pos_9  = [0.06, 0.80, 0.4, 0.02]
sld_amplitude9 = plt.axes(sld_pos_9)
amplitude9     = Slider(sld_amplitude9, r'$c_7$',0, 2 , valinit=4/7/np.pi)
amplitude9.on_changed(slider_changed)

sld_pos_10  = [0.06, 0.78, 0.4, 0.02]
sld_amplitude10 = plt.axes(sld_pos_10)
amplitude10     = Slider(sld_amplitude10, r'$\phi_7$',-3.14, 3.14 , valinit = -np.pi/2)
amplitude10.on_changed(slider_changed)




## Fonctions de dessin

def dessine():	
    
    a0  = amplitude0.val
    a1  = amplitude1.val
    a2  = amplitude2.val
    a3  = amplitude3.val
    a4  = amplitude4.val
    a5  = amplitude5.val
    a6  = amplitude6.val
    a7  = amplitude7.val
    a8  = amplitude8.val
    a9  = amplitude9.val
    a10  = amplitude10.val
    
    
    t=np.linspace(0,20, 1000)
    e=a0 + a1*np.cos(omega*t + a2 )  + a3*np.cos(omega*t*2 + a4 ) +a5*np.cos(omega*t*3 + a6 ) +a7*np.cos(omega*t*5 + a8 ) +a9*np.cos(omega*t*7 + a10 ) + F(1)*(1/9*np.sin(omega*t*9)+1/11*np.sin(omega*t*11)+1/13*np.sin(omega*t*13)+1/15*np.sin(omega*t*15)+1/17*np.sin(omega*t*17)+1/19*np.sin(omega*t*19) )      
    # s = 0
    # Q= 1
    t2=np.linspace(0,3/2*np.pi-0.001, 1000)
    cren=-1+a0+(-2)*np.floor((t2-1.0*np.pi)/np.pi)
    t3=np.linspace(3/2*np.pi-0.001,5/2*np.pi-0.001, 1000)
    cren3=1+a0+(2)*np.floor((t3-2.0*np.pi)/np.pi)
    t4=np.linspace(5/2*np.pi-0.001,7/2*np.pi-0.001, 1000)
    cren4=-1+a0+(-2)*np.floor((t4-3.0*np.pi)/np.pi)
    t5=np.linspace(7/2*np.pi-0.001,9/2*np.pi-0.001, 1000)
    cren5=1+a0+(2)*np.floor((t5-4.0*np.pi)/np.pi)
    
    b0.set_xdata(t)
    b0.set_ydata(t*0 + a0)
    b1.set_xdata(t)
    b1.set_ydata(a1*np.cos(omega*t + a2 ))
    b2.set_xdata(t)
    b2.set_ydata(a3*np.cos(omega*t*2 + a4 ))
    b3.set_xdata(t)
    b3.set_ydata(a5*np.cos(omega*t*3 + a6 ))            
    b4.set_xdata(t)
    b4.set_ydata(a7*np.cos(omega*t*5 + a8 ))
    b5.set_xdata(t)
    b5.set_ydata(a9*np.cos(omega*t*7 + a10 ))
    
    
    
    
        
    l1.set_xdata(t)
    l1.set_ydata(e)    
    
        
    l2.set_xdata(t2)
    l2.set_ydata(cren)
    
    l3.set_xdata(t3)
    l3.set_ydata(cren3)
    
    l4.set_xdata(t4)
    l4.set_ydata(cren4)
    
    l5.set_xdata(t5)
    l5.set_ydata(cren5)
    
    l2b.set_xdata(t2)
    l2b.set_ydata(cren)
    
    l3b.set_xdata(t3)
    l3b.set_ydata(cren3)
    
    l4b.set_xdata(t4)
    l4b.set_ydata(cren4)
    
    l5b.set_xdata(t5)
    l5b.set_ydata(cren5)
    
    epsilon = 0.045
    ll0.set_xdata([0-epsilon,0-epsilon])
    ll0.set_ydata([0,np.abs(a0)])    

    ll1.set_xdata([1-epsilon,1-epsilon])
    ll1.set_ydata([0,a1])
    
    ll2.set_xdata([2-epsilon,2-epsilon])
    ll2.set_ydata([0,a3])
    
    ll3.set_xdata([3-epsilon,3-epsilon])
    ll3.set_ydata([0,a5])
    
    ll4.set_xdata([5-epsilon,5-epsilon])
    ll4.set_ydata([0,a7])
    
    ll5.set_xdata([7-epsilon,7-epsilon])
    ll5.set_ydata([0,a9])
    
    
    ll6.set_xdata([0+epsilon,0+epsilon])
    ll6.set_ydata([0,0])    

    ll7.set_xdata([1+epsilon,1+epsilon])
    ll7.set_ydata([0,0])
    
    ll8.set_xdata([2+epsilon,2+epsilon])
    ll8.set_ydata([0,0])
    
    ll9.set_xdata([3+epsilon,3+epsilon])
    ll9.set_ydata([0,0])
    
    ll10.set_xdata([4+epsilon,4+epsilon])
    ll10.set_ydata([0,0])
    
    ll11.set_xdata([5+epsilon,5+epsilon])
    ll11.set_ydata([0,0])
        
  #  w = np.linspace(0.0001,6,100)
   # ll12.set_xdata(w)
   # ll12.set_ydata(np.abs(F(w,w0,Q)))
      
    ax.axes.axis([0,12,-3,3])
    ax2.axes.axis([-epsilon, 8 , 0, 3])
    bx0.axes.axis([0,12,-1.5,1.5])
    
    
    

    plt.draw()



## 


dessine()

plt.show()