#-*-coding:utf-8-*-
########################################################################################
#########################  Réalisation d'un graphique   ################################
###################  A partir de mesures expérimentales    #############################
###########################  Python 3.4  Mars 2018 #####################################
########################################################################################
#################################   J.B.  & S.R  #######################################
########################################################################################

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import linregress
plt.close("all") # pour fermer les fenêtres graphiques


## Récupération du fichiers de points

# Mettre le fichier de données dans le même dossier

def recup(nomfichier, colonnes, sep = ";"):
    """
    nomfichier : fichier texte .txt ou .csv
    colonnes : type int, nbre de colonnes à récupérer
    sep : type str, séparateur de colonnes, ";" par défaut
    RETOUR : type array, tableau de données.
    """
    L = [ [] for _ in range(colonnes)] #initialisaition de la liste de données
    with open(nomfichier, "r") as contenu:
        for ligne in contenu:
            try : #pour éviter les entêtes
                ligne = ligne.replace(',','.') #  transforme les , en .
                ligne = ligne.split(sep) #sépare les valeurs
                for i in range(colonnes):
                    L[i].append(float(ligne[i]) )#remplissage et conversion en flottant
            except: ValueError
    return np.array(L) # conversion en tableau



##Points expérimentaux factices
nomfichier ='TP.csv'
Donnees = recup(nomfichier, 2, sep = ";")

liste_x =  Donnees[0] #abscisses
liste_y = Donnees[1] #ordonnées

## Valeur de l'incertitudes de mesures : +/-0.2 en x, +/- 0.4 en y
e_x = [0.2 for k in range(len(liste_x))]
e_y = [0.4 for k in range(len(liste_x))]

## Régression linéaire
(a,b,rho,_,_)=linregress(liste_x,liste_y)
print("Coefficient de correlation : ",rho)
print("Equation de la droite : ")
print("y =",a," x +",b)


## Méthode de monté-Carlo




## représentation graphique
plt.figure(figsize=(10,8))
plt.grid()
plt.plot(liste_x,a*liste_x+b,label="modèle",linewidth=3)
plt.errorbar(liste_x,liste_y,xerr=e_x,yerr=e_y,label="expérience",capsize = 5,fmt="go",linewidth=2)
plt.legend(loc="best",fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.xlabel(" X (unite)",fontsize = 16)
plt.ylabel(" Y (unite)",fontsize = 16)
plt.title(" Mon Titre ",fontsize = 18)
plt.show()

plt.figure(2,figsize=(10,8))
plt.grid()
plt.plot(liste_x,liste_y,"o",label="expérience",linewidth=2)
plt.legend(loc="best",fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.xlabel(" X (unite)",fontsize = 16)
plt.ylabel(" Y (unite)",fontsize = 16)
plt.title(" Mon Titre ",fontsize = 18)
plt.show()


