# TP 8 - RESEAUX - Programme 1 : mesure du nombre de traits n par unité de longueur (questions 4)
##################################################################################
# Importation des bibliotèques

import numpy as np
import matplotlib.pyplot as plt
import numpy.random as rd
##################################################################################
# Entrées des valeurs expérimentales

Lambda = 546.08e-9               # Longueur d'onde vert Hg

alpha0_min_degré =               # Nombre de degrés mesurés pour alpha0 minimum      A COMPLETER
alpha0_min_minute =              # Nombre de minutes mesurées pour alpha0 minimum    A COMPLETER
alpha0_min =                     # alpha0 minimum converti en radian                 A COMPLETER

alpha0_max_degré =               # Nombre de degrés mesurés pour alpha0 maximum      A COMPLETER  
alpha0_max_minute =              # Nombre de minutes mesurées pour alpha0 maximum    A COMPLETER
alpha0_max =                     # alpha0 maximum converti en radian                 A COMPLETER

alpha0 = (alpha0_min + alpha0_max)/2              # alpha0 moyen en radian
deltaalpha0 = (alpha0_max - alpha0_min)/2         # demi-largeur de l'intervalle de variation de alpha0 en radian

alpha1_min_degré =               # Nombre de degrés mesurés pour alpha1 minimum      A COMPLETER   
alpha1_min_minute =              # Nombre de minutes mesurées pour alpha1 minimum    A COMPLETER
alpha1_min =                     # alpha1 minimum converti en radian                 A COMPLETER

alpha1_max_degré =               # Nombre de degrés mesurés pour alpha1 maximum      A COMPLETER
alpha1_max_minute =              # Nombre de minutes mesurées pour alpha1 maximum    A COMPLETER
alpha1_max =                     # alpha1 maximum converti en radian                 A COMPLETER

alpha1 = (alpha1_min + alpha1_max)/2              # alpha1 moyen en radian
deltaalpha1 = (alpha1_max - alpha1_min)/2         # demi-largeur de l'intervalle de variation de alpha1 en radian
##################################################################################
# Calcul de n et u(n) par simulation Monte-Carlo

N = 100000             # Nombre d'expériences simulées

n = np.zeros(N)        # Initialisation du tableau dans lequel on stocke les N valeurs du nombre de traits par unité de longueur

for i in range(0,N):   # Pour chacune des N expériences

    alpha0i = rd.uniform(alpha0-deltaalpha0,alpha0+deltaalpha0)      # Tirage aléatoire d'une valeur de alpha0 pour l'expérience i
    alpha1i =                                                        # Tirage aléatoire d'une valeur de alpha1 pour l'expérience i     A COMPLETER
    Dmini = (alpha1i - alpha0i)                                      # Angle de déviation minimum en radian pour l'expérience i

    n[i] =                                                           # Calcul du nombre de traits par mètre n pour l'expérience i      A COMPLETER
    
n = n/1000                           # Conversion en nombre de traits par mm

nmoy = np.mean(n)                    # Calcul de la moyenne des N valeurs de n
un = np.std(n,ddof=1)                # Calcul de l'écart-type u(n)

print('n =',nmoy,'mm-1')
print('u(n) =',un,'mm-1')
##################################################################################
# Tracé de l'histogramme des N valeurs de n
 
plt.title('Histogramme de n')
plt.xlabel('n en mm-1')
plt.ylabel('Effectifs')
plt.hist(n,bins='rice')      
plt.grid()
plt.show()
##################################################################################