V 2.2 : possibilité d'avoir des prémas (bêta)
authorDenise sur Lya <sekhmet@lya>
Thu, 12 Nov 2020 22:47:51 +0000 (23:47 +0100)
committerDenise sur Lya <sekhmet@lya>
Thu, 12 Nov 2020 22:47:51 +0000 (23:47 +0100)
configuration.py
data/changelog_data.txt
gestion_donnees.py
templates/index.html
trace_courbe.py

index c56e56951a686b0e215a1d7e542f1aaabfbff51d..79bcd6d12bd54c3ed3020b1e04f001061a766d6c 100644 (file)
@@ -113,6 +113,9 @@ DEFAUT["tracevide"] = ""
 DEFAUT["memechelle"] = ""
 DEFAUT["positionlegende"] = "hg"
 
+DEFAUT["prematurite"] = "0j"
+DEFAUT["agecorrige"] = "oui"
+
 
 # initialiser la config
 def config_init():
index 2eda8642f4f7dbf466368bd8689abc0c6ecf134d..3b680f3720f39cb9df7dd863ebcef3de326684c2 100644 (file)
@@ -1,8 +1,17 @@
+"Version 2.2","12/11/2020","<p>Ajout de la possibilité d'avoir la courbe ajustée pour les prématurés. Attention c'est encore en bêta ! Le principe c'est simplement les courbes OMS décalées de la durée de prématurité, ce qui convient plus ou moins bien aux enfants nés prématurés une fois qu'ils ont atteint l'âge du terme en âge corrigé.
+<ul>
+<li>Si vous n'êtes pas concerné(e), laisser ""0j"" (0 jours) en prématurité (logique non ?)</li>
+<li>Si vous préférez l'âge corrigé, cocher la case. L'âge de l'enfant sera alors potentiellement négatif.</li>
+<li>Si vous préférez l'âge réel, c'est la courbe OMS qui sera alors décalée</li>
+</ul>
+Tout retour sur cette fonctionnalité est le bienvenu !
+</p>"
+
 "Version 2.1","28/07/2020","<p>Petites améliorations :
 <ul>
 <li>Bug corrigé : quand on ajoute des lignes, maintenant ça ajoute aussi des saisies de taille ! ^^</li>
 <li>Par défaut, les saisies de taille sont masquées (car la plupart du temps on regarde le poids). On peut cliquer pour afficher les tailles.</li>
-</ul>"
+</ul></p>"
 
 "Version 2.0","28/07/2020","<p>Nouveauté : courbes de taille disponible !
 <ul>
index 3523e7e25f908edd8433e1645e2718d038072e0c..880614de16c1235cd1aba63b6365200202df1e1b 100644 (file)
@@ -21,6 +21,7 @@ def convertit_jours_vers_python(chaine,liste_err):
     Si un des caractères n'est ni un nombre, ni une lettre "autorisée" ni une espace,
     on affiche un warning et on ignore ce caractère
     """
+#    debug("conversion de "+chaine+" vers un nb de jours",liste_err)
     chainenombre = ""
     agejours = 0.
     for lettre in chaine:
@@ -52,6 +53,7 @@ def convertit_jours_vers_python(chaine,liste_err):
     if agejours<0:
         warning("L'âge est négatif !",liste_err)
         agejours = 0
+#    debug("On a convertit ! Résultat : "+str(agejours),liste_err)
     return agejours
 
 # python -> json
@@ -209,6 +211,12 @@ def gere_configuration(data,liste_err):
         naissance = convertit_date_vers_python(naissance,liste_err)
     configuration["naissance"] = naissance
     
+    prematurite = data.get("prematurite","")
+    j = convertit_jours_vers_python(prematurite,liste_err)
+    configuration["prematurite"] = convertit_age_vers_texte(j)
+    
+    configuration["agecorrige"] = gere_checkbox(data.get("agecorrige",""))
+    
     # Type de courbe. Au pire on met P
     tyc = data.get("typecourbe","")
     if not (tyc in ["P","Z"]):
@@ -383,7 +391,7 @@ def fusionne_donnees(listes_jours,listes_donnees):
             if lj[cle_mini]== []:
                 cle_mini = cle
             elif lj[cle] != []:
-                if convertit_jours_vers_python(lj[cle][0],[])<convertit_jours_vers_python(lj[cle_mini][0],[]):
+                if convertit_jours_vers_python(lj[cle][0],initialise_erreurs())<convertit_jours_vers_python(lj[cle_mini][0],initialise_erreurs()):
                     cle_mini = cle
         return cle_mini
     
index 8f5eb8776faa44989a08d9d5074442990fd38267..6dc7ed651e56b55d4c68f665c7a40336aeefa69a 100644 (file)
@@ -37,6 +37,8 @@
 | <label><input type="radio" name="sexe" value="M" {%if valform.sexe == "M"%} checked {% endif %}> masculin</label> | <label><input type="radio" name="sexe" value="N" {%if valform.sexe == "N"%} checked {% endif %}> neutre (expérimental)</label></li>
 <li><label>Date de naissance&nbsp;: </label> <input type="date" name="naissance" value="{{ valform.naissance }}">
        <p id="changemode" class="petit"><span onclick="change_mode_dates('text')" class="bouton">Cliquer ici</span> pour saisir les dates comme du texte.</p> </li>
+<li><label>Prématurité (expérimental) ?</label> <input type="text" name="prematurite" value="{{ valform.prematurite }}"> <input type="checkbox" name="agecorrige" {% if valform.agecorrige == "oui"%}checked{%endif%}> Afficher l'âge corrigé <p class="petit">Si l'enfant est prématuré, saisir de quelle durée (en mois, jours, semaines, voir syntaxe plus bas). Sinon, laisser 0j. Attention c'est encore en bêta !</p> </li>
+
 </ul>
 
 
index a967916f70ad92496aaa7a230366b15526386fed..d004dcb7b485cbfc9ccf3298e452c82278d069a3 100644 (file)
@@ -3,7 +3,7 @@
 from configuration import CONFIG
 from gestionOMS import *
 from gestion_unites import *
-from gestion_donnees import calcule_max_graphique
+from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python
 
 import matplotlib.pyplot as plt
 
@@ -24,7 +24,6 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
         print(conf)
         print(conf["non_sauve"])
         if conf["non_sauve"].get("maxi",0) == 0:
-            print("bla")
             jour_maxi = calcule_max_graphique(l_jours)
         else:
             jour_maxi = conf["non_sauve"]["maxi"]+1
@@ -45,11 +44,27 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
     else:
         unite = conf["non_sauve"]["unite"]
     
+    #debug("prématurité dans la config : "+conf["prematurite"],liste_err)
+    prema = int(convertit_jours_vers_python(conf["prematurite"],liste_err))
+    ## Gestion des prémas, deux cas :
+    # Si agecorrige est oui, alors on veut juste soustraire la valeur de préma
+    # à toutes les données.
+    # Si agecorrige est non, alors on veut ajouter la valeur de préma aux courbes de référence.
+
+    debug("Prématurité : "+str(prema)+"age corrigé : "+conf["agecorrige"],liste_err)
+
+            
+    if prema>0 and conf["agecorrige"] == "oui":
+        l_jours = [j-prema for j in l_jours]
+        jour_maxi = jour_maxi - prema
+#        debug("liste des jours : "+str(l_jours),liste_err)
+    else:
+        debug("bla",liste_err)
     l_jours_conv = convertit_tableau(l_jours,unite,liste_err)
     # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne...
     age_maxi = convertitunite(jour_maxi-1,unite,liste_err)
     
-    debug("cree_figure : conversion des unités ok",liste_err)        
+    debug("cree_figure : conversion des unités ok : "+str(l_jours_conv),liste_err)        
 
     titre = "Courbe de "+typedonnee+" OMS"
     
@@ -79,13 +94,22 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
     else:
         erreur("Type de courbe invalide"+conf["typecourbe"],liste_err)
         return ""
-   
-    debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels),liste_err)
-    debug("Fichier d'où extraire les données : "+fichier_oms,liste_err)
     
     # Si y'a un nom on met "courbe de machin"
     if conf["nom"] !="":
         titre += " de " +conf["nom"]
+
+    
+    if prema>0:
+        titre+= ", préma de "+conf["prematurite"]
+        if conf["agecorrige"] == "oui":
+            titre+=" (courbe en âge corrigé)"
+        else:
+            titre+=" (courbe en âge réel, données OMS décalées)"
+   
+    debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels),liste_err)
+    debug("Fichier d'où extraire les données : "+fichier_oms,liste_err)
+    
         
     
     # convertir les unités
@@ -98,14 +122,18 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
         return ""
     
     debug("cree_figure : on va convertir données OMS à la bonne unité",liste_err)
-    try:   
-        coljour = convertit_tableau(extraire_colonne(t,0,jour_maxi),unite,liste_err)
+    try:
+        coljour= (extraire_colonne(t,0,jour_maxi))
+        if prema>0 and conf["agecorrige"] != "oui":
+            coljour = [j + prema for j in coljour]
+        coljour = convertit_tableau(coljour,unite,liste_err)
     except:
         erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi)+" unite = "+unite,liste_err)
         return ""
     
     debug("cree_figure : prête à créer la figure",liste_err)   
-    #### La figure
+    #### La figure, params
+    
     fig = plt.figure(num=None, figsize=(conf["largeur"], conf["hauteur"]), dpi=100, facecolor=conf["couleurs"]["fond"])
     plt.rcParams['axes.facecolor'] = conf["couleurs"]["fond"]
     plt.rcParams['axes.edgecolor']= conf["couleurs"]["cadretxt"]
@@ -140,14 +168,17 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
     
     #warning("Jusque là ça marche",liste_err)
     debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err)
-    
+
+
+    ### Tracé pour de bon    
     if l_jours != []:
         plt.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o')
+        debug("Tracé de la courbe enfant, avec les jours "+str(l_jours_conv),liste_err)
     
     plt.xlabel("Âge en "+unite,color=conf["couleurs"]["cadretxt"])
     plt.ylabel(typedonnee.capitalize()+" en "+CONFIG["unites_typedonnees"][typedonnee],color=conf["couleurs"]["cadretxt"])
     plt.title(titre,color=conf["couleurs"]["cadretxt"])
-    plt.axis([0,age_maxi,poids_min,poids_max])
+    plt.axis([min(0,l_jours_conv[0]),age_maxi,poids_min,poids_max])
     
     if conf['legende']=="oui":
         legende = plt.legend(loc=conf['positionlegende'])