summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenise sur Lya <sekhmet@lya>2021-02-12 23:18:52 +0100
committerDenise sur Lya <sekhmet@lya>2021-02-12 23:18:52 +0100
commitc2fe511bb9e6974cc267b8926a47b1fa81b37da3 (patch)
tree6dbb649f7f81771ce2906787e84833196c8d07b6
parent85e9aa73264a0e8669074444807054a20d3d805d (diff)
downloadoms-c2fe511bb9e6974cc267b8926a47b1fa81b37da3.tar.gz
oms-c2fe511bb9e6974cc267b8926a47b1fa81b37da3.tar.zst
oms-c2fe511bb9e6974cc267b8926a47b1fa81b37da3.zip
Possibilité de prolonger la courbe
-rw-r--r--configuration.py3
-rw-r--r--data/changelog_data.txt2
-rw-r--r--gestion_donnees.py5
-rw-r--r--templates/index.html3
-rw-r--r--trace_courbe.py93
5 files changed, 92 insertions, 14 deletions
diff --git a/configuration.py b/configuration.py
index 79bcd6d..242f179 100644
--- a/configuration.py
+++ b/configuration.py
@@ -112,11 +112,12 @@ DEFAUT["unite"] = ""
112DEFAUT["tracevide"] = "" 112DEFAUT["tracevide"] = ""
113DEFAUT["memechelle"] = "" 113DEFAUT["memechelle"] = ""
114DEFAUT["positionlegende"] = "hg" 114DEFAUT["positionlegende"] = "hg"
115DEFAUT["prolongercourbes"] = ""
116
115 117
116DEFAUT["prematurite"] = "0j" 118DEFAUT["prematurite"] = "0j"
117DEFAUT["agecorrige"] = "oui" 119DEFAUT["agecorrige"] = "oui"
118 120
119
120# initialiser la config 121# initialiser la config
121def config_init(): 122def config_init():
122 c = DEFAUT.copy() 123 c = DEFAUT.copy()
diff --git a/data/changelog_data.txt b/data/changelog_data.txt
index a90c500..09a6da4 100644
--- a/data/changelog_data.txt
+++ b/data/changelog_data.txt
@@ -1,3 +1,5 @@
1"Version 2.25","12/02/2021","<p>Nouveauté : possibilité de ""prolonger"" la courbe de poids/taille en pointillés. L'extrapolation est faite à partir de la dernière donnée. À tester encore !</p>"
2
1"Version 2.2001","13/11/2020","<p>Amélioration de l'affichage pour les prémas (masqués par défaut). Précision dans le texte + FAQ.</p>" 3"Version 2.2001","13/11/2020","<p>Amélioration de l'affichage pour les prémas (masqués par défaut). Précision dans le texte + FAQ.</p>"
2 4
3"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é. 5"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é.
diff --git a/gestion_donnees.py b/gestion_donnees.py
index 880614d..c378b5e 100644
--- a/gestion_donnees.py
+++ b/gestion_donnees.py
@@ -82,7 +82,7 @@ def calcule_max_graphique(l_jours):
82 return CONFIG["jours_defaut_donneesvides"] 82 return CONFIG["jours_defaut_donneesvides"]
83 else: 83 else:
84 jour_maxi = max(l_jours)# pas la peine d'aller très au delà du jour max 84 jour_maxi = max(l_jours)# pas la peine d'aller très au delà du jour max
85 jour_maxi = int(jour_maxi* 1.1)+3 # on rajoute un peu 85 jour_maxi = int(jour_maxi* 1.2)+3 # on rajoute un peu
86 return jour_maxi 86 return jour_maxi
87 87
88 88
@@ -238,6 +238,7 @@ def gere_configuration(data,liste_err):
238 238
239 # Même échelle sur tous les graphiques 239 # Même échelle sur tous les graphiques
240 configuration["memechelle"] = gere_checkbox(data.get("memechelle","")) 240 configuration["memechelle"] = gere_checkbox(data.get("memechelle",""))
241
241 242
242 # maxi. 0 signifie qu'on veut pas de maxi 243 # maxi. 0 signifie qu'on veut pas de maxi
243 maxi = data.get("maxi","") 244 maxi = data.get("maxi","")
@@ -289,6 +290,8 @@ def gere_configuration(data,liste_err):
289 positionlegende = "upper left" 290 positionlegende = "upper left"
290 configuration["positionlegende"] = positionlegende 291 configuration["positionlegende"] = positionlegende
291 292
293 configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
294
292 295
293 configuration["couleurs"] = {} 296 configuration["couleurs"] = {}
294 # gérer les couleurs 297 # gérer les couleurs
diff --git a/templates/index.html b/templates/index.html
index 6f75438..959c6a1 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -93,6 +93,8 @@
93 {% endfor %} 93 {% endfor %}
94 </select></label></li> 94 </select></label></li>
95 <li><label>valeur maximum du graphique (facultatif, syntaxe similaire à l'âge) </label><input type="text" name="maxi" value="{{ valform.maxi }}"></li> 95 <li><label>valeur maximum du graphique (facultatif, syntaxe similaire à l'âge) </label><input type="text" name="maxi" value="{{ valform.maxi }}"></li>
96 <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li>
97
96 <li><label>Même échelle sur tous les graphiques&nbsp;: </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li> 98 <li><label>Même échelle sur tous les graphiques&nbsp;: </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li>
97 <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}"> 99 <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}">
98 <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li> 100 <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li>
@@ -103,6 +105,7 @@
103{% endfor %} 105{% endfor %}
104</select></label> 106</select></label>
105 </li> 107 </li>
108
106 <li>Couleur courbe du bas <input type="color" name="couleur_courbe1" value="{{ valform.couleurs.courbe1 }}"> | Couleur courbe du milieu <input type="color" name="couleur_courbe2" value="{{ valform.couleurs.courbe2 }}"> | Couleur courbe du haut <input type="color" name="couleur_courbe3" value="{{ valform.couleurs.courbe3 }}"> </li> 109 <li>Couleur courbe du bas <input type="color" name="couleur_courbe1" value="{{ valform.couleurs.courbe1 }}"> | Couleur courbe du milieu <input type="color" name="couleur_courbe2" value="{{ valform.couleurs.courbe2 }}"> | Couleur courbe du haut <input type="color" name="couleur_courbe3" value="{{ valform.couleurs.courbe3 }}"> </li>
107 <li>Couleur du fond <input type="color" name="couleur_fond" value="{{ valform.couleurs.fond }}"> | Couleur de la grille <input type="color" name="couleur_grille" value="{{ valform.couleurs.grille }}"> | Couleur des axes, texte et courbe <input type="color" name="couleur_cadretxt" value="{{ valform.couleurs.cadretxt }}"></li> 110 <li>Couleur du fond <input type="color" name="couleur_fond" value="{{ valform.couleurs.fond }}"> | Couleur de la grille <input type="color" name="couleur_grille" value="{{ valform.couleurs.grille }}"> | Couleur des axes, texte et courbe <input type="color" name="couleur_cadretxt" value="{{ valform.couleurs.cadretxt }}"></li>
108</ul> 111</ul>
diff --git a/trace_courbe.py b/trace_courbe.py
index d004dcb..fab6471 100644
--- a/trace_courbe.py
+++ b/trace_courbe.py
@@ -51,15 +51,13 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
51 # à toutes les données. 51 # à toutes les données.
52 # Si agecorrige est non, alors on veut ajouter la valeur de préma aux courbes de référence. 52 # Si agecorrige est non, alors on veut ajouter la valeur de préma aux courbes de référence.
53 53
54 debug("Prématurité : "+str(prema)+"age corrigé : "+conf["agecorrige"],liste_err) 54 debug("Prématurité : "+str(prema)+" age corrigé : "+conf["agecorrige"],liste_err)
55
56 55
57 if prema>0 and conf["agecorrige"] == "oui": 56 if prema>0 and conf["agecorrige"] == "oui":
58 l_jours = [j-prema for j in l_jours] 57 l_jours = [j-prema for j in l_jours]
59 jour_maxi = jour_maxi - prema 58 jour_maxi = jour_maxi - prema
60# debug("liste des jours : "+str(l_jours),liste_err) 59# debug("liste des jours : "+str(l_jours),liste_err)
61 else: 60
62 debug("bla",liste_err)
63 l_jours_conv = convertit_tableau(l_jours,unite,liste_err) 61 l_jours_conv = convertit_tableau(l_jours,unite,liste_err)
64 # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne... 62 # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne...
65 age_maxi = convertitunite(jour_maxi-1,unite,liste_err) 63 age_maxi = convertitunite(jour_maxi-1,unite,liste_err)
@@ -113,7 +111,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
113 111
114 112
115 # convertir les unités 113 # convertir les unités
116 114 #### Partie code OMS
117 #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues 115 #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues
118 try: 116 try:
119 t = lire_fichier_csv(fichier_oms) 117 t = lire_fichier_csv(fichier_oms)
@@ -142,13 +140,16 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
142 plt.rcParams['grid.color'] = conf["couleurs"]["grille"] 140 plt.rcParams['grid.color'] = conf["couleurs"]["grille"]
143 plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"] 141 plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"]
144 142
145 #warning("bla"+str(liste_data_labels),liste_err) 143 #Tracé des courbes OMS
146 for (i,label,couleur) in liste_data_labels: 144 for (i,label,couleur) in liste_data_labels:
147 plt.plot(coljour,extraire_colonne(t,i,jour_maxi),label=label,color=couleur) 145 plt.plot(coljour,extraire_colonne(t,i,jour_maxi),label=label,color=couleur)
148 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err) 146 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
149 147
150 debug("cree_figure : tracé des courbes OMS ok",liste_err) 148 debug("cree_figure : tracé des courbes OMS ok",liste_err)
151 149
150
151 ##### Tracé des courbes OMS fini
152
152 # On extrait la valeur min et la valeur max des poids 153 # On extrait la valeur min et la valeur max des poids
153 (colonne_min,_,_) = liste_data_labels[-1] 154 (colonne_min,_,_) = liste_data_labels[-1]
154 (colonne_max,_,_) = liste_data_labels[0] 155 (colonne_max,_,_) = liste_data_labels[0]
@@ -165,20 +166,43 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
165 poids_min = max(0,poids_min-1) 166 poids_min = max(0,poids_min-1)
166 #max : +5% 167 #max : +5%
167 poids_max = poids_max * 1.05 168 poids_max = poids_max * 1.05
169
168 170
169 #warning("Jusque là ça marche",liste_err)
170 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err) 171 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err)
171 172
172
173 ### Tracé pour de bon 173 ### Tracé pour de bon
174 if l_jours != []: 174 if l_jours != []:
175 plt.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o') 175 plt.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o')
176 debug("Tracé de la courbe enfant, avec les jours "+str(l_jours_conv),liste_err) 176 debug("Tracé de la courbe enfant, avec les jours "+str(l_jours_conv),liste_err)
177 177
178 #### extrapolatios éventuelles
179 #print("prolongercourbes" in conf)
180 if conf["prolongercourbes"] == "oui":
181 #print("coucou")
182 # les dates, on prend tous les jours tant qu'à faire
183 date_fin = int(l_jours[-1])
184 dates_extrapole = list(range(date_fin, jour_maxi))
185 donnees_extrapole = prolongecourbe(t, date_fin, l_poids[-1], dates_extrapole, conf["typecourbe"], liste_err)
186 #print("données extrapolées !")
187 dates_extrapole = convertit_tableau(dates_extrapole,unite,liste_err)
188
189 # tracé des données extrapolées
190 plt.plot(dates_extrapole, donnees_extrapole,color=conf["couleurs"]["cadretxt"], linestyle=(0, (5,7)), marker=None)
191
192 else:
193 debug("On ne trace pas de courbe enfant", liste_err)
194
178 plt.xlabel("Âge en "+unite,color=conf["couleurs"]["cadretxt"]) 195 plt.xlabel("Âge en "+unite,color=conf["couleurs"]["cadretxt"])
179 plt.ylabel(typedonnee.capitalize()+" en "+CONFIG["unites_typedonnees"][typedonnee],color=conf["couleurs"]["cadretxt"]) 196 plt.ylabel(typedonnee.capitalize()+" en "+CONFIG["unites_typedonnees"][typedonnee],color=conf["couleurs"]["cadretxt"])
197 #print("bla")
180 plt.title(titre,color=conf["couleurs"]["cadretxt"]) 198 plt.title(titre,color=conf["couleurs"]["cadretxt"])
181 plt.axis([min(0,l_jours_conv[0]),age_maxi,poids_min,poids_max]) 199 #print("ble")
200 if l_jours_conv == []:
201 plt.axis([0,age_maxi, poids_min, poids_max])
202 else:
203 plt.axis([min(0,l_jours_conv[0]),age_maxi,poids_min,poids_max])
204 #print("bli")
205
182 206
183 if conf['legende']=="oui": 207 if conf['legende']=="oui":
184 legende = plt.legend(loc=conf['positionlegende']) 208 legende = plt.legend(loc=conf['positionlegende'])
@@ -187,5 +211,50 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
187 211
188 fig.tight_layout() 212 fig.tight_layout()
189 213
190 #warning("Jusque là ça marche",liste_err) 214 debug("Fin de cree_figure", liste_err)
191 return fig \ No newline at end of file 215 return fig
216
217
218
219def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err):
220 """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours)
221 et la dernière donnée d'où on extrapole. On veut les extrapolations à nouvdate
222 (tableaux de jours)
223 typecourbe est P ou Z. Pour P il faut commencer à regarder à l'indice 4, pour Z
224 à l'indice 1
225 On renvoie [] si pas pu extrapoler. """
226
227 # la ligne OMS
228 ligneoms = tableauOMS[date]
229 debug("prolongecourbe : Ligne OMS :"+str(ligneoms)+" valeur de donnée : "+str(donnee), liste_err)
230
231
232 # On cherche dans quel intervalle on se situe
233 if typecourbe == "P":
234 idep=4
235 else:
236 idep = 1
237 i = idep
238 while i<len(ligneoms) and ligneoms[i]<donnee:
239 i+=1
240 debug("prolongecourbe : on a trouvé la valeur de i : "+str(i),liste_err)
241 if i>=len(ligneoms):
242 warning("prolongation de courbe : pas réussi... donnée au dessus !", liste_err)
243 return []
244 if i==idep:
245 warning("prolongation de courbe : pas réussi... donnée en dessous !", liste_err)
246 return []
247
248 # Le coeff : donnee = coeff * l[i-1]+ (1-coeff)*ligne[i]
249 # On utilisera la même chose pour la nouvelle donnee
250 #print(ligneoms[i], ligneoms[i-1])
251 coeff = (donnee - ligneoms[i])/(ligneoms[i-1] - ligneoms[i])
252 #print("coeff : "+str(coeff))
253
254 # extrapolations
255 nouvdonnees = []
256 for j in nouvdates:
257 ligne2 = tableauOMS[j]
258 nouvdonnees.append(coeff*ligne2[i-1]+ (1-coeff)*ligne2[i])
259
260 return nouvdonnees \ No newline at end of file