comparison python/pavement.py @ 446:a65a14c90834

adding weather info to pavement data
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 04 Feb 2014 02:13:27 -0500
parents b5cc6b001ae6
children 7ef40014236c
comparison
equal deleted inserted replaced
445:f0ce17ea9273 446:a65a14c90834
2 '''Tools for processing and analyzing pavement marking data''' 2 '''Tools for processing and analyzing pavement marking data'''
3 3
4 import numpy as np 4 import numpy as np
5 5
6 __metaclass__ = type 6 __metaclass__ = type
7
8 class RTSS:
9 'class for data related to a RTSS, including agregating pavement marking measurements'
10
11 def __init__(self, id):
12 self.id = id
13
14 class MarkingTest:
15 '''class for a test site for a given product'''
16
17 def __init__(self, siteId, paintingDate, paintingType, color, data):
18 self.siteId = siteId
19 self.paintingDate = paintingDate
20 self.paintingType = paintingType
21 self.color = color
22 self.data = data
23 self.nMeasures = len(data)
24
25 def plot(self, measure, options = 'o', dayRatio = 1., **kwargs):
26 from matplotlib.pyplot import plot
27 plot(self.data['jours']/float(dayRatio),
28 self.data[measure], options, **kwargs)
29
30 def getMarkingMeasures(self, dataLabel):
31 from numpy import isnan
32 nonZeroIndices = ~isnan(self.data[dataLabel])
33 return self.data[nonZeroIndices]['jours'], self.data[nonZeroIndices][dataLabel]
34
35 def plotMarkingMeasures(self, measure, options = 'o', dayRatio = 1., **kwargs):
36 for i in range(1,7):
37 self.plot('{}_{}'.format(measure, i), options, dayRatio, **kwargs)
38
39 7
40 def occ_max(a): 8 def occ_max(a):
41 if a != []: 9 if a != []:
42 s = set(a) 10 s = set(a)
43 l = list(s) 11 l = list(s)
196 neigeEC_sup_seuil = 0 164 neigeEC_sup_seuil = 0
197 else: 165 else:
198 neigeEC_sup_seuil = 1 166 neigeEC_sup_seuil = 1
199 167
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) 168 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)
169
170
171 class RTSS:
172 'class for data related to a RTSS, including agregating pavement marking measurements'
173
174 def __init__(self, id):
175 self.id = id
176
177 class MarkingTest:
178 '''class for a test site for a given product
179
180 including the series of measurements over the years'''
181
182 def __init__(self, id, paintingDate, paintingType, color, data):
183 self.id = id
184 self.paintingDate = paintingDate
185 self.paintingType = paintingType
186 self.color = color
187 self.data = data
188 self.nMeasures = len(data)
189
190 def getSite(self):
191 return int(self.id[:2])
192
193 def getTestAttributes(self):
194 return [self.paintingType, self.color]
195
196 def plot(self, measure, options = 'o', dayRatio = 1., **kwargs):
197 from matplotlib.pyplot import plot
198 plot(self.data['jours']/float(dayRatio),
199 self.data[measure], options, **kwargs)
200
201 def getMarkingMeasures(self, dataLabel):
202 from numpy import isnan
203 nonZeroIndices = ~isnan(self.data[dataLabel])
204 return self.data[nonZeroIndices]['jours'], self.data[nonZeroIndices][dataLabel]
205
206 def plotMarkingMeasures(self, measure, options = 'o', dayRatio = 1., **kwargs):
207 for i in range(1,7):
208 self.plot('{}_{}'.format(measure, i), options, dayRatio, **kwargs)
209
210 def computeMarkingMeasureVariations(self, dataLabel, lanePositions, weatherData, snowThreshold):
211 '''Computes for each successive measurement
212 lanePositions = None
213 measure variation, initial measure, time duration, weather indicators
214
215 TODO if measurements per lane, add a variable for lane position (position1 to 6)
216 lanePositions = list of integers (range(1,7))
217 measure variation, initial measure, time duration, lane position1, weather indicators
218 measure variation, initial measure, time duration, lane position2, weather indicators
219 ...'''
220 from numpy import isnan
221 variationData = []
222 if lanePositions == None:
223 nonZeroIndices = ~isnan(self.data[dataLabel])
224 days = self.data[nonZeroIndices]['jours']
225 dates = self.data[nonZeroIndices]['date_mesure']
226 measures = self.data[nonZeroIndices][dataLabel]
227 for i in range(1, len(dates)):
228 nDaysTNegative, nDaysThawFreeze, deltaTemp, nConsecutiveFrozenDays, totalRain, totalSnow, snowAboveThreshold, stdevTemp = ecWeatherIndicators(weatherData, dates[i-1], dates[i], snowThreshold)
229 variationData.append([measures[i-1]-measures[i], measures[i-1], days[i]-days[i-1], nDaysTNegative, nDaysThawFreeze] + deltaTemp + [nConsecutiveFrozenDays, totalRain, totalSnow, snowAboveThreshold, stdevTemp])
230 return variationData