Mercurial Hosting > traffic-intelligence
annotate trafficintelligence/pavement.py @ 1275:9f1711a85c56
added code to make sure TTC is replaced of recomputed and not having a value
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 19 Jun 2024 16:11:35 -0400 |
parents | 785c86013d2c |
children |
rev | line source |
---|---|
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
1 #! /usr/bin/env python |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
2 '''Tools for processing and analyzing pavement marking data''' |
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
3 |
1029
c6cf75a2ed08
reorganization of imports
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1028
diff
changeset
|
4 import datetime |
458
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
5 |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
6 import numpy as np |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
7 |
1029
c6cf75a2ed08
reorganization of imports
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1028
diff
changeset
|
8 from trafficintelligence import utils |
431
0bcfa49d179a
began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff
changeset
|
9 |
465
16fe64136506
added dictionary
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
458
diff
changeset
|
10 paintTypes = {0: "Non-existant", |
16fe64136506
added dictionary
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
458
diff
changeset
|
11 1: "Eau", |
16fe64136506
added dictionary
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
458
diff
changeset
|
12 2: "Epoxy", |
16fe64136506
added dictionary
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
458
diff
changeset
|
13 3: "Alkyde", |
16fe64136506
added dictionary
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
458
diff
changeset
|
14 4: "Autre"} |
16fe64136506
added dictionary
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
458
diff
changeset
|
15 |
450
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
16 durabilities = {1: 98, #96 to 100 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
17 2: 85, #75 to 96 |
497
6ebdd90ce3ee
bug in pavement durability
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
475
diff
changeset
|
18 3: 62, #50 to 75 |
450
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
19 4: 32, #15 to 50 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
20 5: 7 #0 to 15 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
21 } |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
22 |
456 | 23 roadFunctionalClasses = {40: "Collectrice", |
24 20: "Nationale", | |
25 30: "Regionale", | |
26 10: "Autoroute", | |
27 60: "Acces ressources", | |
28 51: "Local 1", | |
29 52: "Local 2", | |
458
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
30 53: "Local 3", |
456 | 31 15: "Aut (PRN)", |
32 25: "Nat (PRN)", | |
33 70: "Acces isolees", | |
465
16fe64136506
added dictionary
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
458
diff
changeset
|
34 99: "Autres"} |
456 | 35 |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
36 def caracteristiques(rtss, maintenanceLevel, rtssWeatherStation, fmr, paintType): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
37 '''Computes characteristic data for the RTSS (class rtss) |
1272
785c86013d2c
added moving average smoothing for kitti loading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1112
diff
changeset
|
38 maintenanceLevel = pylab.csv2rec('C:\\Users\\Alexandre\\Desktop\\Projet_maitrise_recherche\\BDD_access\\analyse_donnees_deneigement\\exigence_circuits.txt', delimiter = ';') |
785c86013d2c
added moving average smoothing for kitti loading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1112
diff
changeset
|
39 rtssWeatherStation = pylab.csv2rec('C:\\Users\\Alexandre\\Desktop\\Projet_maitrise_recherche\\stations_environnement_canada\\rtssWeatherStation\\juste_pour_rtss_avec_donnees_entretien_hiv\\rtssWeatherStation_EC3.txt', delimiter = ',') |
785c86013d2c
added moving average smoothing for kitti loading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1112
diff
changeset
|
40 fmr = pylab.csv2rec('C:\\Users\\Alexandre\\Desktop\\Projet_maitrise_recherche\\BDD_access\\analyse_donnees_deneigement\\fmr.txt', delimiter = ';') |
785c86013d2c
added moving average smoothing for kitti loading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1112
diff
changeset
|
41 paintType = pylab.csv2rec('C:\\Users\\Alexandre\\Desktop\\Projet_maitrise_recherche\\BDD_access\\analyse_donnees_deneigement\\type_peinture.txt', delimiter = ';') |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
42 ''' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
43 # determination exigence deneigement |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
44 if rtss.id in maintenanceLevel['rtss_debut']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
45 for i in range(len(maintenanceLevel)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
46 if maintenanceLevel['rtss_debut'][i] == rtss.id: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
47 exigence = maintenanceLevel['exigence'][i] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
48 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
49 exigence = '' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
50 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
51 # determination x/y |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
52 if rtss.id in rtssWeatherStation['rtss']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
53 for i in range(len(rtssWeatherStation)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
54 if rtssWeatherStation['rtss'][i] == rtss.id: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
55 x_moy = rtssWeatherStation['x_moy'][i] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
56 y_moy = rtssWeatherStation['y_moy'][i] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
57 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
58 x_moy, y_moy = '','' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
59 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
60 # determination info fmr |
458
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
61 age_revtm, classe_fonct, type_revtm, milieu, djma, pourc_camions, vit_max = [], [], [], [], [], [], [] |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
62 if rtss.id in fmr['rtss_debut']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
63 for i in range(len(fmr)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
64 if fmr['rtss_debut'][i] == rtss.id: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
65 age_revtm.append(fmr['age_revtm'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
66 classe_fonct.append(fmr['des_clasf_fonct'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
67 type_revtm.append(fmr['des_type_revtm'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
68 milieu.append(fmr['des_cod_mil'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
69 djma.append(fmr['val_djma'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
70 pourc_camions.append(fmr['val_pourc_camns'][i]) |
458
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
71 vit_max.append(fmr['val_limt_vitss'][i]) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
72 age_revtm = utils.mostCommon(age_revtm) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
73 classe_fonct = utils.mostCommon(classe_fonct) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
74 type_revtm = utils.mostCommon(type_revtm) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
75 milieu = utils.mostCommon(milieu) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
76 djma = utils.mostCommon(djma) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
77 vit_max = utils.mostCommon(vit_max) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
78 if vit_max < 0: |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
79 vit_max = '' |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
80 pourc_camions = utils.mostCommon(pourc_camions) |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
81 if pourc_camions == "" or pourc_camions < 0: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
82 djma_camions = "" |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
83 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
84 djma_camions = pourc_camions*djma/100 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
85 else: |
458
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
86 age_revtm, classe_fonct, type_revtm, milieu, djma, djma_camions, vit_max = '','','','','','','' |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
87 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
88 # determination type peinture |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
89 peinture_rd, peinture_rg, peinture_cl = [], [], [] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
90 peinture_lrd, peinture_lrg, peinture_lc = 0,0,0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
91 if rtss.id in paintType['rtss_debut_orig']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
92 for i in range(len(paintType)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
93 if paintType['rtss_debut_orig'][i] == rtss.id: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
94 peinture_rd.append((paintType['peinture_rd'][i])) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
95 peinture_rg.append((paintType['peinture_rg'][i])) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
96 peinture_cl.append((paintType['peinture_cl'][i])) |
458
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
97 peinture_lrd = utils.mostCommon(peinture_rd) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
98 peinture_lrg = utils.mostCommon(peinture_rg) |
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
99 peinture_lc = utils.mostCommon(peinture_cl) |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
100 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
101 peinture_lrd, peinture_lrg, peinture_lc = '','','' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
102 |
458
28ff95845c65
update to include speed limit
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
457
diff
changeset
|
103 return (exigence, x_moy, y_moy, age_revtm, classe_fonct, type_revtm, milieu, djma, djma_camions, vit_max, peinture_lrd, peinture_lrg, peinture_lc) |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
104 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
105 def winterMaintenanceIndicators(data, startDate, endDate, circuitReference, snowThreshold): |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
106 '''Computes several winter maintenance indicators |
1272
785c86013d2c
added moving average smoothing for kitti loading
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1112
diff
changeset
|
107 data = entretien_hivernal = pylab.csv2rec('C:\\Users\\Alexandre\\Documents\\Cours\\Poly\\Projet\\mesures_entretien_hivernal\\mesures_deneigement.txt', delimiter = ',')''' |
502
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
108 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, compteur_premiere_neige, compteur_somme_abrasif = 0,0,0,0,0,0,0,0,0 |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
109 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
110 if circuitReference in data['ref_circuit']: |
439
ad61d21d3d1b
corrected bug with last array position lookup
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
438
diff
changeset
|
111 for i in range(len(data)): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
112 if data['ref_circuit'][i] == circuitReference and (data['date'][i] + datetime.timedelta(days = 6)) <= endDate and (data['date'][i] + datetime.timedelta(days = 6)) > startDate: |
502
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
113 compteur_premiere_neige += float(data['premiere_neige'][i]) |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
114 somme_neige += float(data['neige'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
115 somme_eau += float(data['eau'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
116 somme_abrasif += float(data['abrasif'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
117 somme_sel += float(data['sel'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
118 somme_lc += float(data['lc'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
119 somme_lrg += float(data['lrg'][i]) |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
120 somme_lrd += float(data['lrd'][i]) |
502
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
121 compteur_somme_abrasif += float(data['autre_abrasif_binaire'][i]) |
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
122 if compteur_premiere_neige >= 1: |
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
123 premiere_neige = 1 |
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
124 else: |
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
125 premiere_neige = 0 |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
126 if compteur_somme_abrasif >= 1: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
127 autres_abrasifs = 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
128 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
129 autres_abrasifs = 0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
130 if somme_neige < snowThreshold: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
131 neigeMTQ_sup_seuil = 0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
132 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
133 neigeMTQ_sup_seuil = 1 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
134 else: |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
135 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','','' |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
136 |
440
b5cc6b001ae6
correction for tmax and returns as tuples
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
439
diff
changeset
|
137 return (somme_eau, somme_neige, neigeMTQ_sup_seuil, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs) |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
138 |
502
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
139 def weatherIndicators(data, startDate, endDate, snowThreshold, weatherDatatype, minProportionMeasures = 0.): |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
140 '''Computes the indicators from Environment Canada files |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
141 (loaded as a recarray using csv2rec in data), |
447
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
142 between start and end dates (datetime.datetime objects) |
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
143 |
475
819eef979d3f
clarified argument name and made it available in a calling function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
465
diff
changeset
|
144 weatherDataType is to indicate Environnement Canada data ('ec') or else MTQ |
447
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
145 minProportionMeasures is proportion of measures necessary to consider the indicators''' |
437
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
146 nbre_jours_T_negatif,nbre_jours_gel_degel,pluie_tot,neige_tot,ecart_type_T = 0,0,0,0,0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
147 compteur,nbre_jours_gel_consecutifs=0,0 |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
148 tmoys = [] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
149 seuils_T = [20,15,10,5] |
830136bc0e18
integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
434
diff
changeset
|
150 deltas_T = [0,0,0,0] |
1112
956a66096e91
removed code now available in simulation project, and issue with deprecated find function in matplotlib
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1029
diff
changeset
|
151 startIndex = np.nonzero(data['date'] == startDate) |
502
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
152 nDays = int((endDate - startDate).days)+1 |
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
153 if len(startIndex) > 0 and startIndex+nDays <= len(data): |
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
154 startIndex = startIndex[0] |
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
155 for i in range(startIndex, startIndex+nDays): |
457
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
156 if not np.isnan(data['tmax'][i]): |
502
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
157 tmax = data['tmax'][i] |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
158 else: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
159 tmax = None |
457
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
160 if not np.isnan(data['tmin'][i]): |
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
161 tmin = data['tmin'][i] |
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
162 else: |
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
163 tmin = None |
475
819eef979d3f
clarified argument name and made it available in a calling function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
465
diff
changeset
|
164 if weatherDatatype == 'ec': |
636
3058e00887bc
removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
503
diff
changeset
|
165 if data['pluie_tot'][i] is not None and not np.isnan(data['pluie_tot'][i]): |
457
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
166 pluie_tot += data['pluie_tot'][i] |
636
3058e00887bc
removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
503
diff
changeset
|
167 if data['neige_tot'][i] is not None and not np.isnan(data['neige_tot'][i]): |
457
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
168 neige_tot += data['neige_tot'][i] |
636
3058e00887bc
removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
503
diff
changeset
|
169 if tmax is not None: |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
170 if tmax < 0: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
171 nbre_jours_T_negatif += 1 |
636
3058e00887bc
removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
503
diff
changeset
|
172 if tmax is not None and tmin is not None: |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
173 if tmax > 0 and tmin < 0: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
174 nbre_jours_gel_degel += 1 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
175 for l in range(len(seuils_T)): |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
176 if tmax - tmin >=seuils_T[l]: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
177 deltas_T[l] += 1 |
457
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
178 if not np.isnan(data['tmoy'][i]): |
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
179 tmoys.append(data['tmoy'][i]) |
636
3058e00887bc
removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
503
diff
changeset
|
180 if tmax is not None: |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
181 if tmax < 0: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
182 compteur += 1 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
183 elif tmax >= 0 and compteur >= nbre_jours_gel_consecutifs: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
184 nbre_jours_gel_consecutifs = compteur |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
185 compteur = 0 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
186 else: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
187 compteur = 0 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
188 nbre_jours_gel_consecutifs = max(nbre_jours_gel_consecutifs,compteur) |
457
95a8eb38d9a2
update to weather function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
456
diff
changeset
|
189 if len(tmoys) > 0 and float(len(tmoys))/nDays >= minProportionMeasures: |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
190 if tmoys != []: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
191 ecart_type_T = np.std(tmoys) |
440
b5cc6b001ae6
correction for tmax and returns as tuples
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
439
diff
changeset
|
192 else: |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
193 ecart_type = None |
447
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
194 if neige_tot < snowThreshold: |
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
195 neigeEC_sup_seuil = 0 |
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
196 else: |
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
197 neigeEC_sup_seuil = 1 |
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
198 return (nbre_jours_T_negatif,nbre_jours_gel_degel, deltas_T, nbre_jours_gel_consecutifs, pluie_tot, neige_tot, neigeEC_sup_seuil, ecart_type_T) |
440
b5cc6b001ae6
correction for tmax and returns as tuples
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
439
diff
changeset
|
199 else: |
447
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
200 return [None]*2+[[None]*len(seuils_T)]+[None]*5 |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
201 |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
202 def mtqWeatherIndicators(data, startDate, endDate,tmax,tmin,tmoy): |
502
33574b94f09e
corrected a bug and improved code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
497
diff
changeset
|
203 print("Deprecated, use weatherIndicators") |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
204 nbre_jours_T_negatif,nbre_jours_gel_degel,ecart_type_T = 0,0,0 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
205 compteur,nbre_jours_gel_consecutifs=0,0 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
206 tmoys = [] |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
207 seuils_T = [20,15,10,5] |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
208 deltas_T = [0,0,0,0] |
1112
956a66096e91
removed code now available in simulation project, and issue with deprecated find function in matplotlib
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
1029
diff
changeset
|
209 startIndex = np.nonzero(data['date'] == startDate) |
453
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
210 nDays = (endDate - startDate).days+1 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
211 for i in range(startIndex, startIndex+nDays): |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
212 if tmax[i] < 0: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
213 nbre_jours_T_negatif += 1 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
214 if tmax[i] > 0 and tmin[i] < 0: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
215 nbre_jours_gel_degel += 1 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
216 for l in range(len(seuils_T)): |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
217 if tmax[i] - tmin[i] >=seuils_T[l]: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
218 deltas_T[l] += 1 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
219 tmoys.append(tmoy[i]) |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
220 if tmax[i] < 0: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
221 compteur += 1 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
222 elif tmax[i] >= 0 and compteur >= nbre_jours_gel_consecutifs: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
223 nbre_jours_gel_consecutifs = compteur |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
224 compteur = 0 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
225 else: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
226 compteur = 0 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
227 nbre_jours_gel_consecutifs = max(nbre_jours_gel_consecutifs,compteur) |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
228 if tmoys != []: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
229 ecart_type_T = np.std(tmoys) |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
230 else: |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
231 ecart_type = None |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
232 |
15c6f1bc30a2
added function for MTQ weather indicators (use generic EC function preferrably)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
450
diff
changeset
|
233 return (nbre_jours_T_negatif,nbre_jours_gel_degel, deltas_T, nbre_jours_gel_consecutifs, ecart_type_T) |
450
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
234 |
665
15e244d2a1b5
corrected bug with circular import for VideoFilenameAddable, moved to base module
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
636
diff
changeset
|
235 class RTSS(object): |
450
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
236 '''class for data related to a RTSS: |
449
1e4c1b6b0e0b
added comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
448
diff
changeset
|
237 - agregating pavement marking measurements |
1e4c1b6b0e0b
added comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
448
diff
changeset
|
238 - RTSS characteristics from FMR: pavement type, age, AADT, truck AADT |
450
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
239 - winter maintenance level from V155 |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
240 |
450
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
241 If divided highway, the RTSS ends with G or D and are distinct: there is no ambiguity |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
242 - retroreflectivity types: there are CB, RJ and RB |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
243 If undivided, ending with C |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
244 - durability is fine: ETAT_MARQG_RG ETAT_MARQG_CL ETAT_MARQG_RD (+SG/SD, but recent) |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
245 - retroreflectivity: CJ is center line, RB and SB are left/right if DEBUT-FIN>0 or <0 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
246 ''' |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
247 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
248 def __init__(self, _id, name, data): |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
249 self.id = _id |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
250 self.name = name |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
251 self.data = data |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
252 |
665
15e244d2a1b5
corrected bug with circular import for VideoFilenameAddable, moved to base module
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
636
diff
changeset
|
253 class MarkingTest(object): |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
254 '''class for a test site for a given product |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
255 |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
256 including the series of measurements over the years''' |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
257 |
450
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
258 def __init__(self, _id, paintingDate, paintingType, color, data): |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
259 self.id = _id |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
260 self.paintingDate = paintingDate |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
261 self.paintingType = paintingType |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
262 self.color = color |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
263 self.data = data |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
264 self.nMeasures = len(data) |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
265 |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
266 def getSite(self): |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
267 return int(self.id[:2]) |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
268 |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
269 def getTestAttributes(self): |
447
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
270 return [self.paintingType, self.color, self.paintingDate.year] |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
271 |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
272 def plot(self, measure, options = 'o', dayRatio = 1., **kwargs): |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
273 from matplotlib.pyplot import plot |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
274 plot(self.data['jours']/float(dayRatio), |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
275 self.data[measure], options, **kwargs) |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
276 |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
277 def getMarkingMeasures(self, dataLabel): |
447
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
278 nonZeroIndices = ~np.isnan(self.data[dataLabel]) |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
279 return self.data[nonZeroIndices]['jours'], self.data[nonZeroIndices][dataLabel] |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
280 |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
281 def plotMarkingMeasures(self, measure, options = 'o', dayRatio = 1., **kwargs): |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
282 for i in range(1,7): |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
283 self.plot('{}_{}'.format(measure, i), options, dayRatio, **kwargs) |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
284 |
475
819eef979d3f
clarified argument name and made it available in a calling function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
465
diff
changeset
|
285 def computeMarkingMeasureVariations(self, dataLabel, lanePositions, weatherData, snowThreshold, weatherDataType = 'ec', minProportionMeasures = 0.): |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
286 '''Computes for each successive measurement |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
287 lanePositions = None |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
288 measure variation, initial measure, time duration, weather indicators |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
289 |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
290 TODO if measurements per lane, add a variable for lane position (position1 to 6) |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
291 lanePositions = list of integers (range(1,7)) |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
292 measure variation, initial measure, time duration, lane position1, weather indicators |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
293 measure variation, initial measure, time duration, lane position2, weather indicators |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
294 ...''' |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
295 variationData = [] |
636
3058e00887bc
removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
503
diff
changeset
|
296 if lanePositions is None: |
447
7ef40014236c
updated weather indicator calculations
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
446
diff
changeset
|
297 nonZeroIndices = ~np.isnan(self.data[dataLabel]) |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
298 days = self.data[nonZeroIndices]['jours'] |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
299 dates = self.data[nonZeroIndices]['date_mesure'] |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
300 measures = self.data[nonZeroIndices][dataLabel] |
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
301 for i in range(1, len(dates)): |
503
7978b286fcfa
corrected call to new weather indicator function
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
502
diff
changeset
|
302 nDaysTNegative, nDaysThawFreeze, deltaTemp, nConsecutiveFrozenDays, totalRain, totalSnow, snowAboveThreshold, stdevTemp = weatherIndicators(weatherData, dates[i-1], dates[i], snowThreshold, weatherDataType, minProportionMeasures) |
450
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
303 if dates[i-1].year+1 == dates[i].year: |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
304 winter = 1 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
305 if days[i-1]<365: |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
306 firstWinter = 1 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
307 else: |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
308 winter = 0 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
309 firstWinter = 0 |
c0786fe4ad94
small additions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
449
diff
changeset
|
310 variationData.append([measures[i-1]-measures[i], measures[i-1], days[i]-days[i-1], days[i-1], winter, firstWinter, nDaysTNegative, nDaysThawFreeze] + deltaTemp + [nConsecutiveFrozenDays, totalRain, totalSnow, snowAboveThreshold, stdevTemp]) |
446
a65a14c90834
adding weather info to pavement data
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
440
diff
changeset
|
311 return variationData |