import os as os
import inspect
import numpy as np# gestion des tableaux numpy
import matplotlib.pyplot as plt # tracé des courbes
from scipy.integrate import odeint # outil pour résoudre numériquement une équation différentielle
import csv
###################  Récupération des données ######################################"""
#os.chdir(os.path.dirname(inspect.getfile(inspect.currentframe()))) #chemin du fichier python si déjà enregistré
os.chdir('P:\\Documents\\chato_25-26\\TP\\TP5_mecanique') ### Chemin à modifier
donnees=np.loadtxt("donneesansgtronquees.csv",delimiter=',',unpack=True,skiprows=1)#delimiter à ajuster en fonction de l'export des données
t=donnees[0,:]
accelerationx=donnees[1,:]
accelerationy=donnees[2,:]
accelerationz=donnees[3,:]


t=t-t[0] #permet de remettre une origine des temps après avoir éventuellement tronqué votre fichier texte



################ Tracé des données expérimentales
#Parmi les trois courbes ci-dessous selectionner la plus pertinente pour la modéliser
plt.figure()
plt.plot(t,accelerationx,"b-",linewidth=2,markersize=12)
plt.xlabel(r"$t\ (\rm s)$",fontsize=20)
plt.ylabel(r"$a_x\ (\rm ms^{-2})$",fontsize=20,rotation=90)
plt.xticks(fontsize = 16)
plt.yticks(fontsize = 16)
plt.title(r"${ \rm accélération \ du \ pendule /x}$",fontsize=20)
plt.grid()
plt.show()

plt.figure()
plt.plot(t,accelerationy,"b-",linewidth=2,markersize=12)
plt.xlabel(r"$t\ (\rm s)$",fontsize=20)
plt.ylabel(r"$a_y\ (\rm ms^{-2})$",fontsize=20,rotation=90)
plt.xticks(fontsize = 16)
plt.yticks(fontsize = 16)
plt.title(r"${\rm accélération \  du \  pendule /y}$",fontsize=20)
plt.grid()
plt.show()

plt.figure()
plt.plot(t,accelerationz,"b-",linewidth=2,markersize=12)
plt.xlabel(r"$t\ (\rm s)$",fontsize=20)
plt.ylabel(r"$a_z\ (\rm ms^{-2})$",fontsize=20,rotation=90)
plt.xticks(fontsize = 16)
plt.yticks(fontsize = 16)
plt.title(r"${ \rm accélération \ du \ pendule /z}$",fontsize=20)
plt.grid()
plt.show()

#
# ################## Résolution de l'équation différentielle en l'absence de frottement
# l=0.5# longueur du pendule en mètre à modifier en fonction de votre mesure (valeur pouvant être ajustée pour faire coller la modélisation à l'expérience)
# g=9.8# intensité du champ de pesanteur (valeur à modifier pour faire coller la simulation à l'expérience)
# ai=accelerationx# ou ai=accelerationz ou ai=accelerationy à modifier en fonction de l'axe selectionner
# #ai=ai-valmoyai# on peut éventuellement retrancher la valeur moyenne (à identifier ou à calculer)
# CI=[ai[0],0]#vecteur de condition initiale, le deuxième term correpond au choix d'un extremum à l'instant initial
# def equationdiffai(X,t): # définition du système d'équations traduisant l'équation différentielle
#     [ai,aipoint]=X
#     return ([aipoint,-g/l*ai])
#
# solai = odeint(equationdiffai,CI,t)
# ai_mod=solai[:,0]# récupération de ai
# aipoint_mod=solai[:,1]# récupération de aipoint
#
# ################# Comparaison de la courbe expérimentale et de la courbe issue de la modélisation
# plt.figure()
# plt.plot(t,ai, '-b',t,ai_mod, '--r')
# plt.grid()
# plt.legend(['$ai_{exp}$','$\ddot a_i+g/\ell a_i=0$'],loc=0)
# plt.xlabel('temps (s)', fontsize=16)
# plt.ylabel(r'$a_i$',fontsize=16)
# plt.title(r"modélisation de l'accélération du pendule",fontsize=20)
# plt.show()

###########Résolution de l'équation différentielle dans le cas des petits angles en considérant les frottements
# alphap=0.1 # valeur à ajuster pour faire coller votre modélisation à la courbe expérimentale
# def equationdiffaifro(X,t): # définition du système d'équations traduisant l'équation différentielle
#     [ai,aipoint]=X
#     return ([aipoint,-alphap*aipoint-g/l*ai])
#
# solaifro = odeint(equationdiffaifro,CI,t)
# ai_modf=solaifro[:,0]# récupération de ai
# aipoint_modf=solaifro[:,1]# récupération de aipoint

################# Comparaison de la courbe expérimentale et de la courbe issue de la modélisation
# plt.figure()
# plt.plot(t,ai, '-b',t,ai_modf, '--r')
# plt.grid()
# plt.legend(['$ai_{exp}$','$\ddot a_i+\\alpha_p\dot a_i+g/\ell a_i=0$'],loc=0)
# plt.xlabel('temps (s)', fontsize=16)
# plt.ylabel(r'$a_i$',fontsize=16)
# plt.title(r"modélisation de l'accélération du pendule",fontsize=20)
# plt.show()
