# -*- coding: utf-8 -*-
"""
                  Programme à compléter
Détermination numérique de l'intensité de pesanteur g avec un pendule simple 

"""
import numpy as np
import matplotlib.pyplot as plt

###############################################################################
#######################                 L                  ####################
###############################################################################
## longeur mesurée du pendule (en mètre)

L_mesure = 0.01 # valeur en mètre  # A MODIFIER 

d_r = 0.001 # plus petite graduation : 1 millimètre 
d_G = 0.001 # +-1  millimètre dans l'estimation du centre de gravité G

###############################################################################
#######################                T                   ####################
###############################################################################
#  valeurs de Delta_t = 5T (mesurées en seconde)
### renseigner ici la liste du tableau 

Delta_t = [0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01] # A MODIFIER

n = 1 # nombre de périodes T dans Delta_t     # A MODIFIER

# Détermination de la valeur moyenne et de l'écart-type de T à partir des mesures
T_mesure = np.mean(Delta_t)/n  #  valeur moyenne de T (déterminée avec Delta_t/n = T)
u_T_mesure = np.std(Delta_t,ddof=1)/n # u(T) = u(n*T)/n
u_T = u_T_mesure

print('----------------------------------------------------------------------')
print("Période moyenne : T_mesure = ", T_mesure,"s")
print("Ecart-type : u(T)_mesure = ",u_T_mesure,"s" )
print('----------------------------------------------------------------------')


###############################################################################
#######################  Boucle pour les grandeurs simulées ###################
###############################################################################
## listes pour les grandeurs simulées
L,T = [],[]  
g = []  

N = 10**5 #   nombre d'iterations
###############################################################################
for i in range(N):
    x_r = 0 #  d_r*(np.random.uniform()-np.random.uniform()) # A MODIFIER
    x_G = 0 #   2*d_G*(np.random.uniform()-0.5)             # A MODIFIER
    L_simulation = L_mesure + x_r + x_G
    L.append(L_simulation) # ajout dans la liste L de la valeur L_simulation
    x_T = 0 #  u_T*np.random.normal()  # A MODIFIER
    T_simulation = T_mesure + x_T
    T.append(T_simulation)
    g_simulation = 4*np.pi**2 # A MODIFIER np.pi représente le nombre pi
    g.append( g_simulation)
    
###############################################################################    
###  Valeurs moyennes et écart-types des grandeurs simulées ; critère   #######
###############################################################################
L_moy_simulation = np.mean(L)    
u_L_simulation = np.std(L,ddof=1)

###################################################
# COMPLETER CI-DESSOUS T_MOY_SIMULATION  et u(T)SIMULATION
###################################################
T_moy_simulation = 1      # A MODIFIER PAR ANALOGIE AVEC L_moy_simulation
u_T_simulation =  1  # A MODIFIER PAR ANALOGIE AVEC u_L_simulation
###################################################

g_moy_simulation  = np.mean(g)
u_g_simulation  =  np.std(g,ddof=1)
###########################


###########################

###############################################################################
#############      Ne pas modifier la suite de ce programme       #############
###############################################################################

###############################################################################
####################   Affichage des données simulées        ##################
###############################################################################
print('----------------------------------------------------------------------')
print('----------------------------------------------------------------------')
print("                  Affichage des données associées à L"                 ) 
print('----------------------------------------------------------------------')
print('----------------------------------------------------------------------')
print("Longueur moyenne : L_simulation ",L_moy_simulation,"m")
print("Ecart-type : u(L)_simulation = ",u_L_simulation,"m" )
print('----------------------------------------------------------------------')
print('----------------------------------------------------------------------')
print("                  Affichage des données associées à T"                 ) 
print('----------------------------------------------------------------------')
print("Période moyenne : T_simulation = ", T_moy_simulation,"s")
print("Ecart-type : u(T)_simulation = ",u_T_simulation,"s" )
print('----------------------------------------------------------------------')
print("                  Affichage des données associées à g"                 ) 
print('----------------------------------------------------------------------')
#print('Valeur de référence = ', g_ref, 'm/s²')
#print('Valeur moyenne : g_moy = ', g_moy_simulation, 'm/s²')
#print('estimateur: écart-type : u(g) = ', u_g_simulation, 'm/s²')
#print('----------------------------------------------------------------------')
#print("Critère de validation : |g_moy - g_ref|/u(g) = ", critere)
#print('----------------------------------------------------------------------')
#print('----------------------------------------------------------------------')

###############################################################################
######################      Affichage des Figures     #########################
###############################################################################
plt.figure(figsize=(10,8))
plt.suptitle("Détermination numérique de type Monte-Carlo - Intensité de pesanteur $g$",color='blue',fontsize=20)
###############################################################################
#########################    Histogrammes     #################################
###############################################################################
plt.subplot(221)
plt.title("Histogramme de $L$",fontsize=15,color='blue') 
n, bins, patches = plt.hist(L,bins=100,facecolor='Green',density='True')
plt.grid()           # ajout d'une grille  
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.xlabel('$L$ (m)', fontsize=13)
###############################################################################
plt.subplot(222)
plt.title("Histogramme de $T$",fontsize=15,color='blue') 
n, bins, patches = plt.hist(T,bins=100,facecolor='Blue',density='True')
plt.grid()           # ajout d'une grille  
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.xlabel('$T$ (s)', fontsize=13)
###############################################################################
plt.subplot(212)
plt.title("Histogramme de $g$",fontsize=15,color='blue') 
n, bins, patches = plt.hist(g,bins=200,facecolor='Red',density='True')
plt.grid()           # ajout d'une grille  
plt.xticks(fontsize=13)
plt.yticks(fontsize=13)
plt.xlabel('$g$ (m/$s^2$)', fontsize=13)
###############################################################################
plt.subplots_adjust(bottom=0.05, top=0.88,left=0.1 ,right=0.95, hspace = 0.3, wspace = 0.3)
plt.show()
###############################################################################
