annotate python/pavement.py @ 439:ad61d21d3d1b

corrected bug with last array position lookup
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 21 Jan 2014 17:30:48 -0500
parents ca114520605f
children b5cc6b001ae6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
4 import numpy as np
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
5
431
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
6 __metaclass__ = type
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
7
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
8 class RTSS:
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
9 'class for data related to a RTSS, including agregating pavement marking measurements'
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
10
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
11 def __init__(self, id):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
12 self.id = id
431
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
13
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
14 class MarkingTest:
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
15 '''class for a test site for a given product'''
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
16
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
17 def __init__(self, siteId, paintingDate, paintingType, color, data):
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
18 self.siteId = siteId
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
19 self.paintingDate = paintingDate
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
20 self.paintingType = paintingType
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
21 self.color = color
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
22 self.data = data
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
23 self.nMeasures = len(data)
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
24
432
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 431
diff changeset
25 def plot(self, measure, options = 'o', dayRatio = 1., **kwargs):
431
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
26 from matplotlib.pyplot import plot
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
27 plot(self.data['jours']/float(dayRatio),
432
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 431
diff changeset
28 self.data[measure], options, **kwargs)
431
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
29
434
9a714f32fc9f small updates
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 433
diff changeset
30 def getMarkingMeasures(self, dataLabel):
433
d40ad901b272 added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 432
diff changeset
31 from numpy import isnan
d40ad901b272 added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 432
diff changeset
32 nonZeroIndices = ~isnan(self.data[dataLabel])
d40ad901b272 added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 432
diff changeset
33 return self.data[nonZeroIndices]['jours'], self.data[nonZeroIndices][dataLabel]
431
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
34
433
d40ad901b272 added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 432
diff changeset
35 def plotMarkingMeasures(self, measure, options = 'o', dayRatio = 1., **kwargs):
431
0bcfa49d179a began module for pavement marking data processing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
36 for i in range(1,7):
433
d40ad901b272 added kernel smoothing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 432
diff changeset
37 self.plot('{}_{}'.format(measure, i), options, dayRatio, **kwargs)
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
38
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
39
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
40 def occ_max(a):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
41 if a != []:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
42 s = set(a)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
43 l = list(s)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
44 occ = []
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
45 for i in range(len(l)):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
46 b = 0
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
47 for j in range(len(a)):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
48 if a[j] == l[i]:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
49 b += 1
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
50 occ.append([l[i], b])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
51 nbre_occs = []
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
52 for i in range(len(occ)):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
53 nbre_occs.append(occ[i][1])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
54 return occ[nbre_occs.index(max(nbre_occs))][0]
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
55 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
56 return ""
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
57
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
58 def caracteristiques(rtss, maintenanceLevel, rtssWeatherStation, fmr, paintType):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
59 '''Computes characteristic data for the RTSS (class rtss)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
60 maintenanceLevel = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\exigence_circuits.txt', delimiter = ';')
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
61 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 = ',')
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
62 fmr = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\fmr.txt', delimiter = ';')
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
63 paintType = pylab.csv2rec('C:\Users\Alexandre\Desktop\Projet_maitrise_recherche\BDD_access\\analyse_donnees_deneigement\\type_peinture.txt', delimiter = ';')
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
64 '''
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
65 # determination exigence deneigement
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
66 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
67 for i in range(len(maintenanceLevel)):
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
68 if maintenanceLevel['rtss_debut'][i] == rtss.id:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
69 exigence = maintenanceLevel['exigence'][i]
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
70 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
71 exigence = ''
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
72
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
73 # determination x/y
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
74 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
75 for i in range(len(rtssWeatherStation)):
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
76 if rtssWeatherStation['rtss'][i] == rtss.id:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
77 x_moy = rtssWeatherStation['x_moy'][i]
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
78 y_moy = rtssWeatherStation['y_moy'][i]
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
79 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
80 x_moy, y_moy = '',''
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
81
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
82 # determination info fmr
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
83 age_revtm, classe_fonct, type_revtm, milieu, djma, pourc_camions = [], [], [], [], [], []
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
84 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
85 for i in range(len(fmr)):
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
86 if fmr['rtss_debut'][i] == rtss.id:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
87 age_revtm.append(fmr['age_revtm'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
88 classe_fonct.append(fmr['des_clasf_fonct'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
89 type_revtm.append(fmr['des_type_revtm'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
90 milieu.append(fmr['des_cod_mil'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
91 djma.append(fmr['val_djma'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
92 pourc_camions.append(fmr['val_pourc_camns'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
93 age_revtm = occ_max(age_revtm)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
94 classe_fonct = occ_max(classe_fonct)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
95 type_revtm = occ_max(type_revtm)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
96 milieu = occ_max(milieu)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
97 djma = occ_max(djma)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
98 pourc_camions = occ_max(pourc_camions)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
99 if pourc_camions == "" or pourc_camions < 0:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
100 djma_camions = ""
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
101 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
102 djma_camions = pourc_camions*djma/100
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
103 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
104 age_revtm, classe_fonct, type_revtm, milieu, djma, djma_camions = '','','','','',''
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
105
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
106 # determination type peinture
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
107 peinture_rd, peinture_rg, peinture_cl = [], [], []
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
108 peinture_lrd, peinture_lrg, peinture_lc = 0,0,0
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
109 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
110 for i in range(len(paintType)):
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
111 if paintType['rtss_debut_orig'][i] == rtss.id:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
112 peinture_rd.append((paintType['peinture_rd'][i]))
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
113 peinture_rg.append((paintType['peinture_rg'][i]))
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
114 peinture_cl.append((paintType['peinture_cl'][i]))
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
115 peinture_lrd = occ_max(peinture_rd)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
116 peinture_lrg = occ_max(peinture_rg)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
117 peinture_lc = occ_max(peinture_cl)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
118 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
119 peinture_lrd, peinture_lrg, peinture_lc = '','',''
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
120
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
121 return [exigence, x_moy, y_moy, age_revtm, classe_fonct, type_revtm, milieu, djma, djma_camions, peinture_lrd, peinture_lrg, peinture_lc]
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
122
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
123 def winterMaintenanceIndicators(data, startDate, endDate, circuitReference, snowThreshold):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
124 '''Computes several winter maintenance indicators
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
125 data = entretien_hivernal = pylab.csv2rec('C:\Users\Alexandre\Documents\Cours\Poly\Projet\mesures_entretien_hivernal\mesures_deneigement.txt', delimiter = ',')'''
438
ca114520605f minor bug update
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 437
diff changeset
126 import datetime
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
127 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
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
128
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
129 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
130 for i in range(len(data)):
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
131 if data['ref_circuit'][i] == circuitReference and (data['date'][i] + datetime.timedelta(days = 6)) <= endDate and (data['date'][i] + datetime.timedelta(days = 6)) > startDate:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
132 premiere_neige += data['premiere_neige'][i]
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
133 somme_neige += float(data['neige'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
134 somme_eau += float(data['eau'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
135 somme_abrasif += float(data['abrasif'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
136 somme_sel += float(data['sel'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
137 somme_lc += float(data['lc'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
138 somme_lrg += float(data['lrg'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
139 somme_lrd += float(data['lrd'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
140 compteur_somme_abrasif += float(data['autre_abrasif_binaire'][i])
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
141 if compteur_somme_abrasif >= 1:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
142 autres_abrasifs = 1
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
143 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
144 autres_abrasifs = 0
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
145 if somme_neige < snowThreshold:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
146 neigeMTQ_sup_seuil = 0
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
147 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
148 neigeMTQ_sup_seuil = 1
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
149 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
150 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
151
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
152 return [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
153
438
ca114520605f minor bug update
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 437
diff changeset
154 def ecWeatherIndicators(data, startDate, endDate):
437
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
155 '''Computes the indicators from Environment Canada files
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
156 (loaded as a recarray using csv2rec in data),
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
157 between start and end dates (datetime.datetime objects)'''
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
158 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
159 compteur,nbre_jours_gel_consecutifs=0,0
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
160 tmoys = []
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
161 seuils_T = [20,15,10,5]
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
162 deltas_T = [0,0,0,0]
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
163 for i in range(int((endDate - startDate).days)+1):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
164 if data['tmax'][i] != '' and data['tmax'][i] != None:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
165 tmax = float(data['tmax'][i].replace(',','.'))
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
166 if data['tmin'][i] != '' and data['tmin'][i] != None:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
167 tmin = float(data['tmin'][i].replace(',','.'))
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
168 if data['pluie_tot'][i] != '' and data['pluie_tot'][i] != None:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
169 pluie_tot += float(data['pluie_tot'][i].replace(',','.'))
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
170 if data['neige_tot'][i] != '' and data['neige_tot'][i] != None:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
171 neige_tot += float(data['neige_tot'][i].replace(',','.'))
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
172 if data['tmax'][i] != '' and data['tmax'][i] != None:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
173 if tmax < 0:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
174 nbre_jours_T_negatif += 1
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
175 if data['tmax'][i] != '' and data['tmax'][i] != None and data['tmin'][i] != '' and data['tmin'][i] != None:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
176 if tmax > 0 and tmin < 0:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
177 nbre_jours_gel_degel += 1
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
178 for l in range(len(seuils_T)):
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
179 if tmax - tmin >=seuils_T[l]:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
180 deltas_T[l] += 1
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
181 if data['tmoy'][i] != '' and data['tmoy'][i] != None:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
182 tmoys.append(float(data['tmoy'][i].replace(',','.')))
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
183 if data['tmax'][i] != '' and data['tmax'][i] != None and tmax < 0:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
184 compteur += 1
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
185 elif (tmax >= 0 or data['tmax'][i] == '' or data['tmax'][i] == None) and compteur >= nbre_jours_gel_consecutifs:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
186 nbre_jours_gel_consecutifs = compteur
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
187 compteur = 0
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
188 else:
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
189 compteur = 0
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
190 nbre_jours_gel_consecutifs = max(nbre_jours_gel_consecutifs,compteur)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
191 ecart_type_T = np.std(tmoys)
830136bc0e18 integrating Alexandre functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 434
diff changeset
192
438
ca114520605f minor bug update
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 437
diff changeset
193 return (nbre_jours_T_negatif,nbre_jours_gel_degel, deltas_T, nbre_jours_gel_consecutifs, pluie_tot, neige_tot, ecart_type_T)