comparison python/pavement.py @ 511:ad518f0c3218

merged pulling from main
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 28 May 2014 17:46:38 -0400
parents 7978b286fcfa
children 3058e00887bc
comparison
equal deleted inserted replaced
510:b0dac840c24f 511:ad518f0c3218
13 3: "Alkyde", 13 3: "Alkyde",
14 4: "Autre"} 14 4: "Autre"}
15 15
16 durabilities = {1: 98, #96 to 100 16 durabilities = {1: 98, #96 to 100
17 2: 85, #75 to 96 17 2: 85, #75 to 96
18 3: 72, #50 to 75 18 3: 62, #50 to 75
19 4: 32, #15 to 50 19 4: 32, #15 to 50
20 5: 7 #0 to 15 20 5: 7 #0 to 15
21 } 21 }
22 22
23 roadFunctionalClasses = {40: "Collectrice", 23 roadFunctionalClasses = {40: "Collectrice",
104 104
105 def winterMaintenanceIndicators(data, startDate, endDate, circuitReference, snowThreshold): 105 def winterMaintenanceIndicators(data, startDate, endDate, circuitReference, snowThreshold):
106 '''Computes several winter maintenance indicators 106 '''Computes several winter maintenance indicators
107 data = entretien_hivernal = pylab.csv2rec('C:\Users\Alexandre\Documents\Cours\Poly\Projet\mesures_entretien_hivernal\mesures_deneigement.txt', delimiter = ',')''' 107 data = entretien_hivernal = pylab.csv2rec('C:\Users\Alexandre\Documents\Cours\Poly\Projet\mesures_entretien_hivernal\mesures_deneigement.txt', delimiter = ',')'''
108 import datetime 108 import datetime
109 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, compteur_somme_abrasif = 0,0,0,0,0,0,0,0,0 109 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
110 110
111 if circuitReference in data['ref_circuit']: 111 if circuitReference in data['ref_circuit']:
112 for i in range(len(data)): 112 for i in range(len(data)):
113 if data['ref_circuit'][i] == circuitReference and (data['date'][i] + datetime.timedelta(days = 6)) <= endDate and (data['date'][i] + datetime.timedelta(days = 6)) > startDate: 113 if data['ref_circuit'][i] == circuitReference and (data['date'][i] + datetime.timedelta(days = 6)) <= endDate and (data['date'][i] + datetime.timedelta(days = 6)) > startDate:
114 premiere_neige += data['premiere_neige'][i] 114 compteur_premiere_neige += float(data['premiere_neige'][i])
115 somme_neige += float(data['neige'][i]) 115 somme_neige += float(data['neige'][i])
116 somme_eau += float(data['eau'][i]) 116 somme_eau += float(data['eau'][i])
117 somme_abrasif += float(data['abrasif'][i]) 117 somme_abrasif += float(data['abrasif'][i])
118 somme_sel += float(data['sel'][i]) 118 somme_sel += float(data['sel'][i])
119 somme_lc += float(data['lc'][i]) 119 somme_lc += float(data['lc'][i])
120 somme_lrg += float(data['lrg'][i]) 120 somme_lrg += float(data['lrg'][i])
121 somme_lrd += float(data['lrd'][i]) 121 somme_lrd += float(data['lrd'][i])
122 compteur_somme_abrasif += float(data['autre_abrasif_binaire'][i]) 122 compteur_somme_abrasif += float(data['autre_abrasif_binaire'][i])
123 if compteur_premiere_neige >= 1:
124 premiere_neige = 1
125 else:
126 premiere_neige = 0
123 if compteur_somme_abrasif >= 1: 127 if compteur_somme_abrasif >= 1:
124 autres_abrasifs = 1 128 autres_abrasifs = 1
125 else: 129 else:
126 autres_abrasifs = 0 130 autres_abrasifs = 0
127 if somme_neige < snowThreshold: 131 if somme_neige < snowThreshold:
131 else: 135 else:
132 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','','' 136 somme_eau, somme_neige, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs, neigeMTQ_sup_seuil = '','','','','','','','','',''
133 137
134 return (somme_eau, somme_neige, neigeMTQ_sup_seuil, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs) 138 return (somme_eau, somme_neige, neigeMTQ_sup_seuil, somme_abrasif, somme_sel, somme_lc, somme_lrg, somme_lrd, premiere_neige, autres_abrasifs)
135 139
136 def ecWeatherIndicators(data, startDate, endDate, snowThreshold, weatherDatatype, minProportionMeasures = 0.): 140 def weatherIndicators(data, startDate, endDate, snowThreshold, weatherDatatype, minProportionMeasures = 0.):
137 '''Computes the indicators from Environment Canada files 141 '''Computes the indicators from Environment Canada files
138 (loaded as a recarray using csv2rec in data), 142 (loaded as a recarray using csv2rec in data),
139 between start and end dates (datetime.datetime objects) 143 between start and end dates (datetime.datetime objects)
140 144
141 weatherDataType is to indicate Environnement Canada data ('ec') or else MTQ 145 weatherDataType is to indicate Environnement Canada data ('ec') or else MTQ
145 compteur,nbre_jours_gel_consecutifs=0,0 149 compteur,nbre_jours_gel_consecutifs=0,0
146 tmoys = [] 150 tmoys = []
147 seuils_T = [20,15,10,5] 151 seuils_T = [20,15,10,5]
148 deltas_T = [0,0,0,0] 152 deltas_T = [0,0,0,0]
149 startIndex = find(data['date'] == startDate) 153 startIndex = find(data['date'] == startDate)
150 nDays = (endDate - startDate).days+1 154 nDays = int((endDate - startDate).days)+1
151 if startIndex.size != 0: 155 if len(startIndex) > 0 and startIndex+nDays <= len(data):
152 for i in range(startIndex, startIndex+int(nDays)): 156 startIndex = startIndex[0]
157 for i in range(startIndex, startIndex+nDays):
153 if not np.isnan(data['tmax'][i]): 158 if not np.isnan(data['tmax'][i]):
154 tmax = data['tmax'][i] 159 tmax = data['tmax'][i]
155 else: 160 else:
156 tmax = None 161 tmax = None
157 if not np.isnan(data['tmin'][i]): 162 if not np.isnan(data['tmin'][i]):
158 tmin = data['tmin'][i] 163 tmin = data['tmin'][i]
159 else: 164 else:
195 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) 200 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)
196 else: 201 else:
197 return [None]*2+[[None]*len(seuils_T)]+[None]*5 202 return [None]*2+[[None]*len(seuils_T)]+[None]*5
198 203
199 def mtqWeatherIndicators(data, startDate, endDate,tmax,tmin,tmoy): 204 def mtqWeatherIndicators(data, startDate, endDate,tmax,tmin,tmoy):
205 print("Deprecated, use weatherIndicators")
200 from matplotlib.mlab import find 206 from matplotlib.mlab import find
201 nbre_jours_T_negatif,nbre_jours_gel_degel,ecart_type_T = 0,0,0 207 nbre_jours_T_negatif,nbre_jours_gel_degel,ecart_type_T = 0,0,0
202 compteur,nbre_jours_gel_consecutifs=0,0 208 compteur,nbre_jours_gel_consecutifs=0,0
203 tmoys = [] 209 tmoys = []
204 seuils_T = [20,15,10,5] 210 seuils_T = [20,15,10,5]
294 nonZeroIndices = ~np.isnan(self.data[dataLabel]) 300 nonZeroIndices = ~np.isnan(self.data[dataLabel])
295 days = self.data[nonZeroIndices]['jours'] 301 days = self.data[nonZeroIndices]['jours']
296 dates = self.data[nonZeroIndices]['date_mesure'] 302 dates = self.data[nonZeroIndices]['date_mesure']
297 measures = self.data[nonZeroIndices][dataLabel] 303 measures = self.data[nonZeroIndices][dataLabel]
298 for i in range(1, len(dates)): 304 for i in range(1, len(dates)):
299 nDaysTNegative, nDaysThawFreeze, deltaTemp, nConsecutiveFrozenDays, totalRain, totalSnow, snowAboveThreshold, stdevTemp = ecWeatherIndicators(weatherData, dates[i-1], dates[i], snowThreshold, weatherDataType, minProportionMeasures) 305 nDaysTNegative, nDaysThawFreeze, deltaTemp, nConsecutiveFrozenDays, totalRain, totalSnow, snowAboveThreshold, stdevTemp = weatherIndicators(weatherData, dates[i-1], dates[i], snowThreshold, weatherDataType, minProportionMeasures)
300 if dates[i-1].year+1 == dates[i].year: 306 if dates[i-1].year+1 == dates[i].year:
301 winter = 1 307 winter = 1
302 if days[i-1]<365: 308 if days[i-1]<365:
303 firstWinter = 1 309 firstWinter = 1
304 else: 310 else: