]> git.immae.eu Git - perso/Denise/oms.git/blobdiff - trace_courbe.py
Extrapolation améliorée + possibilité de voir le point voulu
[perso/Denise/oms.git] / trace_courbe.py
index e72560782e47f9268694400bcab791cadcd0c40e..28ee5b4c29b99ca523e900223f9dff7d0448a653 100644 (file)
@@ -5,8 +5,10 @@ import gestionOMS as oms
 import gestion_unites as u
 from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python, convertit_age_vers_texte
 from gestion_erreurs import debug, erreur, warning
+from calculs_extrapole import calcule_donnee_extrapolee, calcule_age_extrapole, interpole_lineaire, interpole_lineaire_ordonnee, formate_resultat_donnee, formate_resultat_age, formate_interpole, formate_extrapole
+
 from numpy import arange
-from calculs_extrapole import calcule_donnee_extrapolee, calcule_age_extrapole
+
 
 import matplotlib.pyplot as plt
 
@@ -167,6 +169,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err):
             jextrapole = jextrapole or conf["non_sauve"][calextra+"_type"] == typedonnee
         
         #print(jextrapole)
+        ############################## Là où on extrapole ################################
         if jextrapole:
             try:
                 debug("Il faut extrapoler les courbes !", liste_err)
@@ -181,6 +184,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err):
                 
                 debug("On extrapole sur les jours : "+str(sources_extrap), liste_err)
                
+                # On récupère toutes les données extrapolées
                 dates_extrapole, donnees_extrapole =  prolongecourbe(t, sources_extrap, sources_extrap_data, conf["typecourbe"], liste_err)
                 debug("données extrapolées !", liste_err)
                 #debug(str(dates_extrapole[0:10])+str(donnees_extrapole[0:10]), liste_err)            
@@ -201,19 +205,50 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err):
                     plt.plot(dates_extrapole_trace, donnees_extrapole_trace,color=conf["couleurs"]["cadretxt"], linestyle=(0, (5,7)), marker=None)
                     debug("Tracé de la courbe extrapolée ok", liste_err)
                 
-                # Calculer une donnée à l'âge x
+                ### Calculer une donnée à l'âge x
                 if conf["non_sauve"]["calculextradata_type"] == typedonnee:
-                    r = calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextradata_age"], typedonnee, liste_err)
-                    if r!="":
-                        liste_extracalculs.append(r)
+                    # On essaie l'interpolation
+                    r = interpole_lineaire(l_jours,l_poids,conf["non_sauve"]["calculextradata_age"], liste_err)
+                    if r==-1:
+                        # ça sera donc une extrapolation
+                        r = calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextradata_age"], liste_err)          
+                        message=formate_extrapole(conf["non_sauve"]["nbextradata"])
+#                        if  == 0:
+#                            message+="l'ensemble des données"
+#                        else:
+#                            message+="les "+str(conf["non_sauve"]["nbextradata"])+" dernière"+met_s(conf["non_sauve"]["nbextradata"])+" données"
+                    else:
+                        message=formate_interpole()
+                    
+                    texte = formate_resultat_donnee(conf["non_sauve"]["calculextradata_age"], r, typedonnee, message, liste_err)
+                    debug("calcul de la donnée extrapolée : "+texte, liste_err)
+                    if texte!="":
+                        liste_extracalculs.append(texte)
                         print(liste_extracalculs)
+                        # Ajouter le trait ?
+                        if conf["non_sauve"]["calculextradata_trace"] == "oui":
+                            dessine_guides(conf["non_sauve"]["calculextradata_age"], r, conf["couleurs"]["cadretxt"], unite, ax, liste_err)
                         
-                # Calculer un âge où on atteint cette donnée
+                ### Calculer un âge où on atteint cette donnée
                 if conf["non_sauve"]["calculextratemps_type"] == typedonnee:
-                    r = calcule_age_extrapole(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextratemps_val"], typedonnee, liste_err)
-                    if r!="":
-                        liste_extracalculs.append(r)
+                    # interpolation
+                    r = interpole_lineaire_ordonnee(l_jours,l_poids,conf["non_sauve"]["calculextratemps_val"], liste_err)
+                    if r==-1:
+                        # ça sera donc une extrapolation
+                        r = calcule_age_extrapole(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextratemps_val"], liste_err)          
+                        message=formate_extrapole(conf["non_sauve"]["nbextradata"])
+                    else:
+                        message=formate_interpole()
+                    
+                    texte = formate_resultat_age(r, conf["non_sauve"]["calculextratemps_val"], typedonnee, message, liste_err)
+                    
+                    #r = calcule_age_extrapole(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextratemps_val"], typedonnee, liste_err)
+                    if texte!="":
+                        liste_extracalculs.append(texte)
                         print(liste_extracalculs)
+                        # Ajouter le trait ?
+                        if conf["non_sauve"]["calculextratemps_trace"]:
+                            dessine_guides(r, conf["non_sauve"]["calculextratemps_val"], conf["couleurs"]["cadretxt"], unite, ax, liste_err)
                     
             except: 
                 warning("Des problèmes pour extrapoler...", liste_err)
@@ -371,4 +406,14 @@ def prolongecourbe(tableauOMS, dates, donnees, typecourbe, liste_err):
         ligne2 = tableauOMS[int(j)]
         nouvdonnees.append(coeff_moyen*ligne2[imin]+ (1-coeff_moyen)*ligne2[imax])
 
-    return nouvdates,nouvdonnees
\ No newline at end of file
+    return nouvdates,nouvdonnees
+
+
+def dessine_guides(t, data, couleur, unite, ax, liste_err):
+    """ dessine deux lignes, horizontales et verticales qui vont "vers" la courbe
+    jusqu'aux points (t, data). En pointillés et avec un point dessus."""
+    debug("Début de dessine_guides"+str(t)+", "+str(data), liste_err)
+    t_conv = u.convertitunite(t,unite,liste_err)
+    ax.vlines(t_conv, 0, data, colors=couleur, linestyles="dashed")
+    ax.hlines(data, 0, t_conv, color=couleur, linestyles="dashed")
+    ax.plot([t_conv], [data], color=couleur, marker="*", ms=13)