summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app.py23
-rw-r--r--configuration.py1
-rw-r--r--data/changelog_data.txt2
-rw-r--r--gestionOMS.py4
-rw-r--r--gestion_couleurs.py2
-rw-r--r--gestion_donnees.py23
-rw-r--r--gestion_erreurs.py4
-rw-r--r--gestion_unites.py14
-rw-r--r--templates/index.html2
-rw-r--r--trace_courbe.py135
10 files changed, 108 insertions, 102 deletions
diff --git a/app.py b/app.py
index 3f4da5c..02d88c4 100644
--- a/app.py
+++ b/app.py
@@ -8,11 +8,10 @@ import base64
8from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 8from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
9 9
10from configuration import config_init,CONFIG 10from configuration import config_init,CONFIG
11from gestion_erreurs import * 11from gestion_erreurs import initialise_erreurs, debug, niveau_debug
12from gestion_donnees import * 12import gestion_donnees as donnees
13from gestion_unites import * 13from trace_courbe import cree_figure
14from trace_courbe import * 14import faq as f
15from faq import *
16 15
17 16
18app = flask.Flask(__name__) 17app = flask.Flask(__name__)
@@ -26,7 +25,7 @@ def index():
26 ## charger les donneés dans le formulaire 25 ## charger les donneés dans le formulaire
27 fichier = flask.request.files['fichier_donnees'] 26 fichier = flask.request.files['fichier_donnees']
28 chaine = fichier.read() 27 chaine = fichier.read()
29 val_form2 = fichier_json_vers_configdonnees(chaine,liste_err) 28 val_form2 = donnees.fichier_json_vers_configdonnees(chaine,liste_err)
30 if val_form2 == {}: 29 if val_form2 == {}:
31 return flask.render_template("index.html",err=liste_err[2]+liste_err[1]+liste_err[0],valform=val_form) 30 return flask.render_template("index.html",err=liste_err[2]+liste_err[1]+liste_err[0],valform=val_form)
32 val_form.update(val_form2) 31 val_form.update(val_form2)
@@ -45,15 +44,15 @@ def courbe_image(ext):
45 data = flask.request.form 44 data = flask.request.form
46 45
47 # récupérer les données du formulaire proprement 46 # récupérer les données du formulaire proprement
48 config,listes_jours,listes_donnees = web_vers_python(data,liste_err) 47 config,listes_jours,listes_donnees = donnees.web_vers_python(data,liste_err)
49 debug(" * On a récupéré et traité les données du formulaire web",liste_err) 48 debug(" * On a récupéré et traité les données du formulaire web",liste_err)
50 49
51 texte = donnees_vers_json(listes_jours["poids"],listes_donnees["poids"],listes_jours["taille"],listes_donnees["taille"], config) 50 texte = donnees.donnees_vers_json(listes_jours["poids"],listes_donnees["poids"],listes_jours["taille"],listes_donnees["taille"], config)
52 51
53 debug("texte prêt à être exporté : "+texte,liste_err) 52 debug("texte prêt à être exporté : "+texte,liste_err)
54 53
55 # noter le nom de l'enfant pour l'export 54 # noter le nom de l'enfant pour l'export
56 nomenfant = simplifie_nom(config['nom']) 55 nomenfant = donnees.simplifie_nom(config['nom'])
57 56
58 # créer les figures 57 # créer les figures
59 try: 58 try:
@@ -105,15 +104,15 @@ def contact():
105@app.route("/faq") 104@app.route("/faq")
106def faq(): 105def faq():
107 106
108 table_faq = lire_fichier_csv_simple(fichier_FAQ) 107 table_faq = f.lire_fichier_csv_simple(f.fichier_FAQ)
109 l_categ,table_qr = extraire_tables_par_cat(table_faq) 108 l_categ,table_qr = f.extraire_tables_par_cat(table_faq)
110 109
111 return flask.render_template("faq.html",lcateg=l_categ,tableqr=table_qr,err=[]) 110 return flask.render_template("faq.html",lcateg=l_categ,tableqr=table_qr,err=[])
112 111
113@app.route("/changelog") 112@app.route("/changelog")
114def changelog(): 113def changelog():
115 114
116 table_version = lire_fichier_csv_simple(fichier_changelog) 115 table_version = f.lire_fichier_csv_simple(f.fichier_changelog)
117 116
118 return flask.render_template("changelog.html",table = table_version,err=[]) 117 return flask.render_template("changelog.html",table = table_version,err=[])
119 118
diff --git a/configuration.py b/configuration.py
index 242f179..fd6df9e 100644
--- a/configuration.py
+++ b/configuration.py
@@ -113,6 +113,7 @@ DEFAUT["tracevide"] = ""
113DEFAUT["memechelle"] = "" 113DEFAUT["memechelle"] = ""
114DEFAUT["positionlegende"] = "hg" 114DEFAUT["positionlegende"] = "hg"
115DEFAUT["prolongercourbes"] = "" 115DEFAUT["prolongercourbes"] = ""
116DEFAUT["grilleamelio"] = "oui"
116 117
117 118
118DEFAUT["prematurite"] = "0j" 119DEFAUT["prematurite"] = "0j"
diff --git a/data/changelog_data.txt b/data/changelog_data.txt
index f59e7b7..f0b26b0 100644
--- a/data/changelog_data.txt
+++ b/data/changelog_data.txt
@@ -1,3 +1,5 @@
1"Version 2.261","16/02/2021","<p>Du mieux sur la gestion de la grille améliorée, qui passe en ""par défaut"" maintenant. Plus une correction de bug sur l'échelle du graphique, et du code nettoyé. On dirait pas comme ça, hein ? N'hésitez pas à me signaler tout vilain bug persistant !</p>"
2
1"Version 2.26","15/02/2021","<p>Nouveauté en bêta-test : grille améliorée. Pour le moment on peut cocher pour avoir cette fonctionnalité.</p>" 3"Version 2.26","15/02/2021","<p>Nouveauté en bêta-test : grille améliorée. Pour le moment on peut cocher pour avoir cette fonctionnalité.</p>"
2 4
3"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>" 5"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>"
diff --git a/gestionOMS.py b/gestionOMS.py
index cebd1eb..b00b93b 100644
--- a/gestionOMS.py
+++ b/gestionOMS.py
@@ -5,8 +5,8 @@ Created on Mon May 18 08:59:11 2020
5 5
6@author: sekhmet 6@author: sekhmet
7""" 7"""
8from gestion_erreurs import * 8#from gestion_erreurs import erreur, warning, debug
9from gestion_couleurs import * 9from gestion_couleurs import degrade_choix
10 10
11import csv 11import csv
12 12
diff --git a/gestion_couleurs.py b/gestion_couleurs.py
index c1b3690..3230f3d 100644
--- a/gestion_couleurs.py
+++ b/gestion_couleurs.py
@@ -4,7 +4,7 @@
4 4
5### Gérer les couleurs 5### Gérer les couleurs
6 6
7from gestion_erreurs import * 7from gestion_erreurs import warning
8 8
9def rgb_vers_tuple(chaine,defaut,liste_err): 9def rgb_vers_tuple(chaine,defaut,liste_err):
10 """ convertit une chaine rgb genre #00FF1B 10 """ convertit une chaine rgb genre #00FF1B
diff --git a/gestion_donnees.py b/gestion_donnees.py
index 208be4a..169f3da 100644
--- a/gestion_donnees.py
+++ b/gestion_donnees.py
@@ -2,9 +2,9 @@
2# -*- coding: utf-8 -*- 2# -*- coding: utf-8 -*-
3 3
4from configuration import CONFIG,DEFAUT 4from configuration import CONFIG,DEFAUT
5from gestion_erreurs import * 5from gestion_erreurs import debug, warning, erreur, initialise_erreurs
6from gestion_couleurs import * 6from gestion_couleurs import rgb_vers_tuple, tuple_vers_rgb
7from gestion_unites import * 7from gestion_unites import choix_unite
8import datetime 8import datetime
9import json 9import json
10import unidecode 10import unidecode
@@ -73,6 +73,7 @@ def convertit_age_vers_texte(nombre):
73 if jours>0 or nombre ==0: # si c'est la naissance, faut beien écrire 0j quand même 73 if jours>0 or nombre ==0: # si c'est la naissance, faut beien écrire 0j quand même
74 chaine += str(jours)+"j" 74 chaine += str(jours)+"j"
75 return chaine 75 return chaine
76
76########################## 77##########################
77 78
78# fonction qui calcule "auto" le maxi du graphique en fonction du max 79# fonction qui calcule "auto" le maxi du graphique en fonction du max
@@ -150,7 +151,7 @@ def delta_date(date1,datenaissance):
150 d = date1 - datenaissance 151 d = date1 - datenaissance
151 jours = d.days 152 jours = d.days
152 if jours<0: 153 if jours<0:
153 erreur_continue("La différence entre les dates est négative... :/") 154 warning("La différence entre les dates est négative... :/")
154 return -1 155 return -1
155 return jours 156 return jours
156 157
@@ -179,7 +180,7 @@ def web_vers_python(data,liste_err):
179 180
180 181
181 182
182########### Fonctions qui gèretn les données 183########### Fonctions qui gèretn les données web vers python
183 184
184def gere_checkbox(chaine): 185def gere_checkbox(chaine):
185 """ prend en arg une chaine, et renvoie "oui" si c'est "on" (sortie de la checkbox) 186 """ prend en arg une chaine, et renvoie "oui" si c'est "on" (sortie de la checkbox)
@@ -193,6 +194,7 @@ def gere_configuration(data,liste_err):
193 """ prend en argument le dictionnaire de requête (configuration imparfaite), et 194 """ prend en argument le dictionnaire de requête (configuration imparfaite), et
194 construit le dictionnaire de configuration qui va bien. 195 construit le dictionnaire de configuration qui va bien.
195 Vérifie que chaque entrée est cohérente évidemment.""" 196 Vérifie que chaque entrée est cohérente évidemment."""
197 # Initialisation
196 configuration = {"non_sauve": {}} 198 configuration = {"non_sauve": {}}
197 199
198 # Pour le nom, osef qu'il soit vide 200 # Pour le nom, osef qu'il soit vide
@@ -292,6 +294,7 @@ def gere_configuration(data,liste_err):
292 294
293 configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes","")) 295 configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
294 296
297 # Ceci n'a pas besoin d'être sauvé
295 configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio","")) 298 configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio",""))
296 299
297 configuration["couleurs"] = {} 300 configuration["couleurs"] = {}
@@ -303,7 +306,7 @@ def gere_configuration(data,liste_err):
303 306
304 return configuration 307 return configuration
305 308
306 309## web vers python : données
307def gere_donnees(data,naissance,typedonnee,liste_err): 310def gere_donnees(data,naissance,typedonnee,liste_err):
308 """ prend en argument le dictionnaire de requête, et la date de 311 """ prend en argument le dictionnaire de requête, et la date de
309 naissance (éventuellement vide), et construit deux listes : 312 naissance (éventuellement vide), et construit deux listes :
@@ -347,6 +350,7 @@ def gere_donnees(data,naissance,typedonnee,liste_err):
347 return (l_jours,l_donnee) 350 return (l_jours,l_donnee)
348 351
349 352
353# python vers Json
350#### export vers json 354#### export vers json
351 355
352def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config): 356def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
@@ -378,7 +382,7 @@ def fusionne_donnees(listes_jours,listes_donnees):
378 de données (par la même clé de type de données). Il faut les fusionner pour avoir une liste de dictionnaires, de type 382 de données (par la même clé de type de données). Il faut les fusionner pour avoir une liste de dictionnaires, de type
379 ("age":truc, "donnee1":truc, "donnee2":truc, ...) triée par ordre de jours. Si jamais une des données est vide, 383 ("age":truc, "donnee1":truc, "donnee2":truc, ...) triée par ordre de jours. Si jamais une des données est vide,
380 le champ du dictionnaire n'est pas rempli""" 384 le champ du dictionnaire n'est pas rempli"""
381# nb_donnees = len(listes_jours) 385
382 def fini(lj): 386 def fini(lj):
383 """ teste si les listes sont toutes vides """ 387 """ teste si les listes sont toutes vides """
384 for l in lj.values(): 388 for l in lj.values():
@@ -411,10 +415,11 @@ def fusionne_donnees(listes_jours,listes_donnees):
411 return liste_f 415 return liste_f
412 416
413 417
414 418### COnversion json vers formulaire
415# Json -> formulaire HTML 419# Json -> formulaire HTML
416def fichier_json_vers_configdonnees(chaine,liste_err): 420def fichier_json_vers_configdonnees(chaine,liste_err):
417 """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire """ 421 """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire
422 Renvoyé sous forme de dictionnaire (mais adapté au formulaire web)"""
418 debug("json vers config : Prêt à interpréter le json",liste_err) 423 debug("json vers config : Prêt à interpréter le json",liste_err)
419 try: 424 try:
420 valform = json.loads(chaine) 425 valform = json.loads(chaine)
diff --git a/gestion_erreurs.py b/gestion_erreurs.py
index 7fffb06..910aabd 100644
--- a/gestion_erreurs.py
+++ b/gestion_erreurs.py
@@ -23,9 +23,9 @@ def warning(message,listeerreurs):
23 print("** Warning : "+message) 23 print("** Warning : "+message)
24 listeerreurs[1].append("Alerte : "+message) 24 listeerreurs[1].append("Alerte : "+message)
25 25
26def debug(message,liste_erreurs): 26def debug(message,listeerreurs):
27 global niveau_debug 27 global niveau_debug
28 if niveau_debug: 28 if niveau_debug:
29 print("##Debug : "+message) 29 print("##Debug : "+message)
30 liste_erreurs[2].append("# Debug : "+message) 30 listeerreurs[2].append("# Debug : "+message)
31 31
diff --git a/gestion_unites.py b/gestion_unites.py
index b97d90b..d4089bd 100644
--- a/gestion_unites.py
+++ b/gestion_unites.py
@@ -2,7 +2,7 @@
2# -*- coding: utf-8 -*- 2# -*- coding: utf-8 -*-
3 3
4from configuration import CONFIG 4from configuration import CONFIG
5from gestion_erreurs import * 5from gestion_erreurs import warning
6 6
7##################### outils pour affichage et choix de l'unité 7##################### outils pour affichage et choix de l'unité
8 8
@@ -31,7 +31,7 @@ def choix_echelle_data(typedonnees, donneemax):
31 if donneemax>15: 31 if donneemax>15:
32 return (5,1) 32 return (5,1)
33 elif donneemax > 10: 33 elif donneemax > 10:
34 return (2,1) 34 return (1,0.5)
35 else: 35 else:
36 return (1,0.2) 36 return (1,0.2)
37 if typedonnees == "taille": 37 if typedonnees == "taille":
@@ -53,25 +53,25 @@ def choix_echelle_temps(unite, tempsmaxi):
53 if unite=="jours": 53 if unite=="jours":
54 if tempsmaxi > 60: # pourquoi mettre en jours ? 54 if tempsmaxi > 60: # pourquoi mettre en jours ?
55 return (30,1) 55 return (30,1)
56 elif tempsmaxi >20: 56 elif tempsmaxi >15:
57 return (7,1) 57 return (7,1)
58 else: 58 else:
59 return (1,0) 59 return (1,0)
60 if unite=="semaines": 60 if unite=="semaines":
61 if tempsmaxi >50: 61 if tempsmaxi >50:
62 return (5,1) 62 return (5,1)
63 elif tempsmaxi > 15: 63 elif tempsmaxi > 10:
64 return (2,1) 64 return (2,1)
65 else: 65 else:
66 return (1,1/7) # On met en jours 66 return (1,1/7) # On met en jours
67 67
68 if unite=="mois": 68 if unite=="mois":
69 if tempsmaxi > 30: 69 if tempsmaxi > 24:
70 return (2,1) 70 return (12,1)
71 elif tempsmaxi > 10: 71 elif tempsmaxi > 10:
72 return (1,0) 72 return (1,0)
73 else: 73 else:
74 return (1,0.25) # on met en semaines 74 return (1,0.25) # on met en semaines à peu près (quart de mois)
75 75
76 if unite=="années": 76 if unite=="années":
77 return (1,1/12) # années / mois 77 return (1,1/12) # années / mois
diff --git a/templates/index.html b/templates/index.html
index e5d4d24..34be454 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -96,7 +96,7 @@
96 <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li> 96 <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li>
97 97
98 <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>
99 <li><label>Grille améliorée (bêta)&nbsp;:</label><input type="checkbox" name="grilleamelio"></li> 99 <li><label>Grille améliorée (bêta)&nbsp;:</label><input type="checkbox" name="grilleamelio" {% if valform.grilleamelio == 'oui' %} checked{% endif %}></li>
100 <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}"> 100 <li>Dimensions du graphique&nbsp;: <label>largeur&nbsp;: </label><input type="text" name="largeur" value="{{ valform.largeur }}">
101 <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li> 101 <label>hauteur&nbsp;: </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li>
102 <li><label>Légende&nbsp;: <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label> 102 <li><label>Légende&nbsp;: <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label>
diff --git a/trace_courbe.py b/trace_courbe.py
index 9cb4845..c3e1691 100644
--- a/trace_courbe.py
+++ b/trace_courbe.py
@@ -1,9 +1,10 @@
1#!/usr/bin/env python3 1#!/usr/bin/env python3
2# -*- coding: utf-8 -*- 2# -*- coding: utf-8 -*-
3from configuration import CONFIG 3from configuration import CONFIG
4from gestionOMS import * 4import gestionOMS as oms
5from gestion_unites import * 5import gestion_unites as u
6from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python 6from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python
7from gestion_erreurs import debug, erreur, warning
7from numpy import arange 8from numpy import arange
8 9
9import matplotlib.pyplot as plt 10import matplotlib.pyplot as plt
@@ -12,18 +13,22 @@ import matplotlib.pyplot as plt
12 13
13 14
14def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): 15def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
15 debug("debut de cree_figure",liste_err) 16 """ conf est le dictionnaire de config. l_jours et l_poids les listes des temps (en jours) et de données
17 (donc pas forcément du poids)
18 typedonnee est le type de données (voir CONFIG["liste_typedonnees"]
19 liste_err la liste des erreurs à compléter (voir gestion_erreurs))
20 Renvoie la figure tracée"""
21 debug("debut de cree_figure. Config : "+str(conf),liste_err)
16 try: 22 try:
17 liste_data_labels_p,liste_data_labels_z = renvoie_liste_labels(conf,CONFIG["liste_data_choisie_p"],CONFIG["liste_data_choisie_z"],liste_err) 23 liste_data_labels_p,liste_data_labels_z = oms.renvoie_liste_labels(conf,CONFIG["liste_data_choisie_p"],CONFIG["liste_data_choisie_z"],liste_err)
18 except: 24 except:
19 erreur("bug avec liste data labels",liste_err) 25 erreur("bug avec liste data labels",liste_err)
20 return "" 26 return ""
21 27
22 # maxi saisi par l'utilisateur ? 28 ######################## Gestion des bornes #############################
29 # y a-t-il un maxi saisi par l'utilisateur ?
23 if conf["maxi"] ==0: 30 if conf["maxi"] ==0:
24 # Est-ce qu'on a donné un maxi quand même (car même échelle) ? 31 # Est-ce qu'on a donné un maxi quand même (car même échelle) ?
25 print(conf)
26 print(conf["non_sauve"])
27 if conf["non_sauve"].get("maxi",0) == 0: 32 if conf["non_sauve"].get("maxi",0) == 0:
28 jour_maxi = calcule_max_graphique(l_jours) 33 jour_maxi = calcule_max_graphique(l_jours)
29 else: 34 else:
@@ -31,42 +36,41 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
31 else: 36 else:
32 jour_maxi = conf["maxi"]+1 37 jour_maxi = conf["maxi"]+1
33 38
34
35 # On s'assure que c'est bien compris dans les bornes 39 # On s'assure que c'est bien compris dans les bornes
36 jour_maxi = max(CONFIG["jours_mini_courbe"],min(jour_maxi,CONFIG["jours_maxi_courbe"])) 40 jour_maxi = max(CONFIG["jours_mini_courbe"],min(jour_maxi,CONFIG["jours_maxi_courbe"]))
37 debug("cree_figure : gestion du jour max ok : "+str(jour_maxi),liste_err) 41 debug("cree_figure : gestion du jour max : "+str(jour_maxi),liste_err)
38 42
43 ##################### Gestion des unités ###############################
39 # si l'unité n'est pas précisée, ni en "non sauvé" ni par l'utilisateur 44 # si l'unité n'est pas précisée, ni en "non sauvé" ni par l'utilisateur
40 if conf["unite"] == "" and conf["non_sauve"].get("unite","") == "": 45 if conf["unite"] == "" and conf["non_sauve"].get("unite","") == "":
41 unite = choix_unite(jour_maxi) 46 unite = u.choix_unite(jour_maxi)
42 debug("Unité non précisée, on choisit "+unite,liste_err) 47 debug("Unité non précisée, on choisit "+unite,liste_err)
43 elif conf["unite"] != "": 48 elif conf["unite"] != "":
44 unite = conf["unite"] 49 unite = conf["unite"]
45 else: 50 else:
46 unite = conf["non_sauve"]["unite"] 51 unite = conf["non_sauve"]["unite"]
47 52
48 #debug("prématuri dans la config : "+conf["prematurite"],liste_err) 53 ##################### Gestion de la prématurité #######################"
49 prema = int(convertit_jours_vers_python(conf["prematurite"],liste_err)) 54 prema = int(convertit_jours_vers_python(conf["prematurite"],liste_err))
50 ## Gestion des prémas, deux cas : 55 ## Gestion des prémas, deux cas :
51 # Si agecorrige est oui, alors on veut juste soustraire la valeur de préma 56 # Si agecorrige est oui, alors on veut juste soustraire la valeur de préma
52 # à toutes les données. 57 # à toutes les données.
53 # Si agecorrige est non, alors on veut ajouter la valeur de préma aux courbes de référence. 58 # Si agecorrige est non, alors on veut ajouter la valeur de préma aux courbes de référence.
54 59 debug("Prématurité : "+str(prema)+" age corrigé : "+conf["agecorrige"],liste_err)
55 debug("Prématurité : "+str(prema)+" age corrigé : "+conf["agecorrige"],liste_err)
56
57 if prema>0 and conf["agecorrige"] == "oui": 60 if prema>0 and conf["agecorrige"] == "oui":
58 l_jours = [j-prema for j in l_jours] 61 l_jours = [j-prema for j in l_jours]
59 jour_maxi = jour_maxi - prema 62 jour_maxi = jour_maxi - prema
60# debug("liste des jours : "+str(l_jours),liste_err)
61 63
62 l_jours_conv = convertit_tableau(l_jours,unite,liste_err) 64
65 ###################### Conversion des unités ###########################""
66 l_jours_conv = u.convertit_tableau(l_jours,unite,liste_err)
63 # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne... 67 # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne...
64 age_maxi = convertitunite(jour_maxi-1,unite,liste_err) 68 age_maxi = u.convertitunite(jour_maxi-1,unite,liste_err)
65 69
66 debug("cree_figure : conversion des unités ok : "+str(l_jours_conv),liste_err) 70 debug("cree_figure : conversion des unités ok : "+str(l_jours_conv),liste_err)
67 71
72 #####################" Courbes OMS et titre ######################################"
68 titre = "Courbe de "+typedonnee+" OMS" 73 titre = "Courbe de "+typedonnee+" OMS"
69
70 if conf["typecourbe"] == "P": 74 if conf["typecourbe"] == "P":
71 # percentiles 75 # percentiles
72 liste_data_labels = liste_data_labels_p 76 liste_data_labels = liste_data_labels_p
@@ -98,7 +102,6 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
98 if conf["nom"] !="": 102 if conf["nom"] !="":
99 titre += " de " +conf["nom"] 103 titre += " de " +conf["nom"]
100 104
101
102 if prema>0: 105 if prema>0:
103 titre+= ", préma de "+conf["prematurite"] 106 titre+= ", préma de "+conf["prematurite"]
104 if conf["agecorrige"] == "oui": 107 if conf["agecorrige"] == "oui":
@@ -106,30 +109,28 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
106 else: 109 else:
107 titre+=" (courbe en âge réel, données OMS décalées)" 110 titre+=" (courbe en âge réel, données OMS décalées)"
108 111
109 debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels),liste_err) 112 #debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels),liste_err)
110 debug("Fichier d'où extraire les données : "+fichier_oms,liste_err) 113 debug("Fichier d'où extraire les données : "+fichier_oms,liste_err)
114
111 115
112
113
114 # convertir les unités
115 #### Partie code OMS
116 #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues 116 #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues
117 try: 117 try:
118 t = lire_fichier_csv(fichier_oms) 118 t = oms.lire_fichier_csv(fichier_oms)
119 except: 119 except:
120 liste_err[0].append("Impossible d'ouvrir le fichier "+fichier_oms) 120 erreur("cree_figure : Impossible d'ouvrir le fichier "+fichier_oms, liste_err)
121 return "" 121 return ""
122 122
123 debug("cree_figure : on va convertir données OMS à la bonne unité",liste_err) 123 debug("cree_figure : Conversion des données OMS à la bonne unité",liste_err)
124 try: 124 try:
125 coljour= (extraire_colonne(t,0,jour_maxi)) 125 coljour= (oms.extraire_colonne(t,0,jour_maxi))
126 if prema>0 and conf["agecorrige"] != "oui": 126 if prema>0 and conf["agecorrige"] != "oui":
127 coljour = [j + prema for j in coljour] 127 coljour = [j + prema for j in coljour]
128 coljour = convertit_tableau(coljour,unite,liste_err) 128 coljour = u.convertit_tableau(coljour,unite,liste_err)
129 except: 129 except:
130 erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi)+" unite = "+unite,liste_err) 130 erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi)+" unite = "+unite,liste_err)
131 return "" 131 return ""
132 132
133 ##################### Création de la figure et du graphique ###################
133 debug("cree_figure : prête à créer la figure",liste_err) 134 debug("cree_figure : prête à créer la figure",liste_err)
134 #### La figure, params 135 #### La figure, params
135 136
@@ -142,36 +143,13 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
142 plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"] 143 plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"]
143 ax = plt.axes() 144 ax = plt.axes()
144 145
146 ###################### Tracé des différentes courbes
145 #Tracé des courbes OMS 147 #Tracé des courbes OMS
146 for (i,label,couleur) in liste_data_labels: 148 for (i,label,couleur) in liste_data_labels:
147 ax.plot(coljour,extraire_colonne(t,i,jour_maxi),label=label,color=couleur) 149 ax.plot(coljour,oms.extraire_colonne(t,i,jour_maxi),label=label,color=couleur)
148 #warning("colonne"+str(i)+str(label)+str(couleur),liste_err)
149 150
150 debug("cree_figure : tracé des courbes OMS ok",liste_err) 151 debug("cree_figure : tracé des courbes OMS ok",liste_err)
151 152
152
153 ##### Tracé des courbes OMS fini
154
155 # On extrait la valeur min et la valeur max des poids
156 (colonne_min,_,_) = liste_data_labels[-1]
157 (colonne_max,_,_) = liste_data_labels[0]
158
159 debug("cree_figure : colonnes min et max : "+str(colonne_min)+" "+str(colonne_max),liste_err)
160
161 poids_min = min(extraire_colonne(t,colonne_min,jour_maxi))
162 poids_max = max(extraire_colonne(t,colonne_max,jour_maxi))
163 if l_jours != []:
164 poids_min = min(min(l_poids),poids_min)
165 poids_max = max(max(l_poids),poids_max)
166 # On ajuste un peu ces min et max
167 # min : valeur min -1kg
168 poids_min = max(0,poids_min-1)
169 #max : +5%
170 poids_max = poids_max * 1.05
171
172
173 debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err)
174
175 ### Tracé pour de bon 153 ### Tracé pour de bon
176 if l_jours != []: 154 if l_jours != []:
177 ax.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o') 155 ax.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o')
@@ -186,20 +164,44 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
186 dates_extrapole = list(range(date_fin, jour_maxi)) 164 dates_extrapole = list(range(date_fin, jour_maxi))
187 donnees_extrapole = prolongecourbe(t, date_fin, l_poids[-1], dates_extrapole, conf["typecourbe"], liste_err) 165 donnees_extrapole = prolongecourbe(t, date_fin, l_poids[-1], dates_extrapole, conf["typecourbe"], liste_err)
188 #print("données extrapolées !") 166 #print("données extrapolées !")
189 dates_extrapole = convertit_tableau(dates_extrapole,unite,liste_err) 167 dates_extrapole = u.convertit_tableau(dates_extrapole,unite,liste_err)
190 168
191 # tracé des données extrapolées 169 # tracé des données extrapolées
192 plt.plot(dates_extrapole, donnees_extrapole,color=conf["couleurs"]["cadretxt"], linestyle=(0, (5,7)), marker=None) 170 plt.plot(dates_extrapole, donnees_extrapole,color=conf["couleurs"]["cadretxt"], linestyle=(0, (5,7)), marker=None)
171 debug("Tracé de la courbe extrapolée ok", liste_err)
193 172
194 else: 173 else:
195 debug("On ne trace pas de courbe enfant", liste_err) 174 debug("On ne trace pas de courbe enfant", liste_err)
196 175
197 debug("Début de la gestion de l'échelle", liste_err) 176 ###################" Gestion de l'échelle #####################
177 debug("Courbes tracées. Il n'y a plus qu'à gérer l'échelle", liste_err)
198 ### échelle à régler 178 ### échelle à régler
179
180 # On extrait la valeur min et la valeur max des poids des courbes OMS et des données
181 (colonne_min,_,_) = liste_data_labels[-1]
182 (colonne_max,_,_) = liste_data_labels[0]
199 183
184 # poids max OMS
185 poids_min = min(oms.extraire_colonne(t,colonne_min,jour_maxi))
186 poids_max = max(oms.extraire_colonne(t,colonne_max,jour_maxi))
187 if l_jours != []:
188 poids_min = min(min(l_poids),poids_min)
189 # Pour le poids max, voir la dernière valeur du tableau
190 i = 0
191 while i<len(l_jours) and l_jours[i]<jour_maxi:
192 i=i+1
193 poids_max = max(max(l_poids[0:i+1]),poids_max)
194 # On ajuste un peu ces min et max
195 # min : valeur min -1kg
196 poids_min = max(0,poids_min-1)
197 #max : +5%
198 poids_max = poids_max * 1.05
199
200
201 # Grille custom ?
200 if conf["non_sauve"]["grilleamelio"] == "oui": 202 if conf["non_sauve"]["grilleamelio"] == "oui":
201 203 debug("On a choisi la grille plus jolie", liste_err)
202 pas=choix_echelle_data(typedonnee, poids_max) 204 pas=u.choix_echelle_data(typedonnee, poids_max)
203 # data_min_arrondie 205 # data_min_arrondie
204 minechelle = int(poids_min/pas[0])*pas[0] 206 minechelle = int(poids_min/pas[0])*pas[0]
205 207
@@ -215,7 +217,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
215 ax.set_yticks(echellemineure, minor=True) 217 ax.set_yticks(echellemineure, minor=True)
216 218
217 # échelle en temps 219 # échelle en temps
218 pas=choix_echelle_temps(unite, age_maxi) 220 pas=u.choix_echelle_temps(unite, age_maxi)
219 debug("pas choisis pour l'échelle en x : "+str(pas), liste_err) 221 debug("pas choisis pour l'échelle en x : "+str(pas), liste_err)
220 222
221 echellemajeure = arange(0,age_maxi, pas[0]) 223 echellemajeure = arange(0,age_maxi, pas[0])
@@ -226,8 +228,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
226 ax.set_xticks(echellemajeure, minor=False) 228 ax.set_xticks(echellemajeure, minor=False)
227 ax.set_xticks(echellemineure, minor=True) 229 ax.set_xticks(echellemineure, minor=True)
228 230
229 231 ################################# Aspect du graphique
230 #### Aspect du graphique
231 232
232 debug("On commende la déco du graphique", liste_err) 233 debug("On commende la déco du graphique", liste_err)
233 234
@@ -255,13 +256,13 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err):
255 256
256 fig.tight_layout() 257 fig.tight_layout()
257 258
258 debug("Fin de cree_figure", liste_err) 259 debug("Fin de cree_figure, tout va bien.", liste_err)
259 return fig 260 return fig
260 261
261 262
262 263
263 264
264### Pour extrapoler la courbe 265######################################## Pour extrapoler la courbe
265 266
266def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err): 267def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err):
267 """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours) 268 """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours)
@@ -286,17 +287,15 @@ def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err):
286 i+=1 287 i+=1
287 debug("prolongecourbe : on a trouvé la valeur de i : "+str(i),liste_err) 288 debug("prolongecourbe : on a trouvé la valeur de i : "+str(i),liste_err)
288 if i>=len(ligneoms): 289 if i>=len(ligneoms):
289 warning("prolongation de courbe : pas réussi... donnée au dessus !", liste_err) 290 warning("prolongation de courbe : pas réussi... donnée trop haute !", liste_err)
290 return [] 291 return []
291 if i==idep: 292 if i==idep:
292 warning("prolongation de courbe : pas réussi... donnée en dessous !", liste_err) 293 warning("prolongation de courbe : pas réussi... donnée trop basse !", liste_err)
293 return [] 294 return []
294 295
295 # Le coeff : donnee = coeff * l[i-1]+ (1-coeff)*ligne[i] 296 # Le coeff : donnee = coeff * l[i-1]+ (1-coeff)*ligne[i]
296 # On utilisera la même chose pour la nouvelle donnee 297 # On utilisera la même chose pour la nouvelle donnee
297 #print(ligneoms[i], ligneoms[i-1])
298 coeff = (donnee - ligneoms[i])/(ligneoms[i-1] - ligneoms[i]) 298 coeff = (donnee - ligneoms[i])/(ligneoms[i-1] - ligneoms[i])
299 #print("coeff : "+str(coeff))
300 299
301 # extrapolations 300 # extrapolations
302 nouvdonnees = [] 301 nouvdonnees = []