# TP 8 - RESEAUX - Programme 2 : mesure de longueurs d'onde (question 6)
##################################################################################
# Importation des bibliotèques

import numpy as np
import matplotlib.pyplot as plt
import numpy.random as rd
##################################################################################
# Entrées des valeurs expérimentales

n =                               # Nombre de traits par unité de longueur en m-1    A COMPLETER
un =                              # Incertitude-type sur n en m-1                    A COMPLETER
deltan = un*np.sqrt(3)            # Demi-intervalle de variation de n en m-1

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 la longueur d'onde lambda et u(lambda) par simulation Monte-Carlo

N = 100000                 # Nombre d'expériences simulées

Lambda = np.zeros(N)       # Initialisation du tableau dans lequel on stocke les N valeurs de la longueur d'onde
                          
for i in range(0,N):       # Pour chacune des N expériences

    ni =                                                             # Tirage aléatoire d'une valeur de n pour l'expérience i          A COMPLETER  
    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        

    Lambda[i] =                        # Calcul de la longueur d'onde pour l'expérience i                                              A COMPLETER
    
Lambda = Lambda*1e9                    # Conversion de la longueur d'onde en nm

Lambdamoy = np.mean(Lambda)            # Calcul de la moyenne des N valeurs de lambda
uLambda = np.std(Lambda,ddof=1)        # Calcul de l'écart-type des N valeurs de lambda

print('Lambda =',Lambdamoy,'nm')      
print('u(Lambda) =',uLambda,'nm')
##################################################################################
# Tracé de l'histogramme des N valeurs de lambda
 
plt.title('Histogramme de Lambda')
plt.xlabel('Lambda en nm')
plt.ylabel('Effectifs')
plt.hist(Lambda,bins='rice')      
plt.grid()
plt.show()
##################################################################################
