#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun May 22 20:19:33 2022

@author: tex
"""

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



os.chdir('/media/tex/PRO_SYLVIE/physiquespe/TIPE/chaufferette/')
#os.chdir('U:\Documents/')
donnees=open('chaufferette1.txt','r')
lignes=donnees.readlines()
donnees.close()
taille=len(lignes)

temps=[]
T=[]

for i in range(len(lignes)-1):
    l=lignes[i]
    l=l.strip()
    l=l.split('\t')
    for i in range(len(l)):
        l[i]=l[i].replace(',','.')
    temps.append(float(l[1]))
    T.append(float(l[3]))
temps=np.array(temps)
T=np.array(T)
plt.plot(temps,T)
plt.xlabel('temps(s)')
plt.ylabel('T (degres Celsius)')

plt.plot([temps[0],temps[len(temps)-1]],[52,52])
plt.plot([temps[0],temps[len(temps)-1]],[37,37])

plt.grid()
plt.show()


#je remarque que la température initiale est de l'ordre de 51^0C et qu'elle 
#commence à diminuer pour t voisin de 300s donc je cherche la valeur de i
#pour t=300s, cela me donne la température initiale Ti
i=0
while temps[i]<290:
    i=i+1
i1=i
Ti=T[i1]
ti=temps[i1]

#Pour Tf je prends 37^0C
#je vais modéliser la courbe par une fonction exponentielle pour i allant de i1
#à ....

Ti=52
Tf=37
ti=290
def modele(x,tau):
    return Tf+(Ti-Tf)*np.exp(-(x-ti)/tau)

tempsm=[temps[i] for i in range(i1,len(temps)-20)]
Tm=[T[i] for i in range(i1,len(temps)-20)]

tempsm=np.array(tempsm)
Tm=np.array(Tm)
plt.plot(tempsm,Tm)
plt.show()


def ecart(tau):
    s=0
    for i in range(len(tempsm)):
        s=s+(Tm[i]-modele(tempsm[i],tau))**2
    return s

tabtau=np.linspace(10,400)
plt.plot(tabtau,ecart(tabtau))
plt.show()

i=1
while ecart(tabtau[i])<ecart(tabtau[i-1]):
    i=i+1
tau=tabtau[i]

plt.plot(tempsm,modele(tempsm,tau))
plt.plot(tempsm,Tm)
plt.grid()
plt.show()




from scipy.optimize import curve_fit

Ti=52
Tf=37
ti=290
def modele(x,tau):
    return Tf+(Ti-Tf)*np.exp(-(x-ti)/tau)

tempsm=[temps[i] for i in range(i1,len(temps)-20)]
Tm=[T[i] for i in range(i1,len(temps)-20)]

tempsm=np.array(tempsm)
Tm=np.array(Tm)
        
plt.plot(tempsm,Tm,c='blue')


besttau, covar = curve_fit(modele,tempsm,Tm,600)
print('besttau',besttau)

T_fit =modele(tempsm,besttau)
plt.plot(tempsm,T_fit, label="modele",c='red')
plt.legend()
plt.grid()
plt.show()
