comparison trafficintelligence/indicators.py @ 1256:56d0195d043e

cleaning indicators (no more time interval) and runtimeerror with arccos
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 03 Apr 2024 14:41:20 -0400
parents bb14f919d1cb
children 0f5bebd62a55
comparison
equal deleted inserted replaced
1255:c0fe55a6b82f 1256:56d0195d043e
13 # need for a class representing the indicators, their units, how to print them in graphs... 13 # need for a class representing the indicators, their units, how to print them in graphs...
14 class TemporalIndicator(object): 14 class TemporalIndicator(object):
15 '''Class for temporal indicators 15 '''Class for temporal indicators
16 i.e. indicators that take a value at specific instants 16 i.e. indicators that take a value at specific instants
17 17
18 values should be 18 values is a dict, for the values at specific time instants
19 * a dict, for the values at specific time instants
20 * or a list with a time interval object if continuous measurements
21
22 it should have more information like name, unit''' 19 it should have more information like name, unit'''
23 20
24 def __init__(self, name, values, timeInterval = None, maxValue = None): 21 def __init__(self, name, values, maxValue = None):
25 self.name = name 22 self.name = name
26 if timeInterval is None: 23 self.values = values
27 self.values = values 24 instants = sorted(self.values.keys())
28 instants = sorted(self.values.keys()) 25 if len(instants) > 0:
29 if len(instants) > 0: 26 self.timeInterval = moving.TimeInterval(instants[0], instants[-1])
30 self.timeInterval = moving.TimeInterval(instants[0], instants[-1]) 27 else:
31 else: 28 self.timeInterval = moving.TimeInterval()
32 self.timeInterval = moving.TimeInterval() 29 # else:
33 else: 30 # assert len(values) == timeInterval.length()
34 assert len(values) == timeInterval.length() 31 # self.timeInterval = timeInterval
35 self.timeInterval = timeInterval 32 # self.values = {}
36 self.values = {} 33 # for i in range(int(round(self.timeInterval.length()))):
37 for i in range(int(round(self.timeInterval.length()))): 34 # self.values[self.timeInterval[i]] = values[i]
38 self.values[self.timeInterval[i]] = values[i]
39 self.maxValue = maxValue 35 self.maxValue = maxValue
40 36
41 def __len__(self): 37 def __len__(self):
42 return len(self.values) 38 return len(self.values)
43 39
65 raise StopIteration 61 raise StopIteration
66 else: 62 else:
67 self.iterInstantNum += 1 63 self.iterInstantNum += 1
68 return self.getIthValue(self.iterInstantNum-1) 64 return self.getIthValue(self.iterInstantNum-1)
69 65
66 def min(self):
67 return min(self.values.values())
68
69 def max(self):
70 return max(self.values.values())
71
70 def getTimeInterval(self): 72 def getTimeInterval(self):
71 return self.timeInterval 73 return self.timeInterval
72 74
73 def getName(self): 75 def getName(self):
74 return self.name 76 return self.name
158 class SeverityIndicator(TemporalIndicator): 160 class SeverityIndicator(TemporalIndicator):
159 '''Class for severity indicators 161 '''Class for severity indicators
160 field mostSevereIsMax is True 162 field mostSevereIsMax is True
161 if the most severe value taken by the indicator is the maximum''' 163 if the most severe value taken by the indicator is the maximum'''
162 164
163 def __init__(self, name, values, timeInterval=None, mostSevereIsMax=True, maxValue = None): 165 def __init__(self, name, values, mostSevereIsMax=True, maxValue = None):
164 TemporalIndicator.__init__(self, name, values, timeInterval, maxValue) 166 TemporalIndicator.__init__(self, name, values, maxValue)
165 self.mostSevereIsMax = mostSevereIsMax 167 self.mostSevereIsMax = mostSevereIsMax
166 168
167 def getMostSevereValue(self, minNInstants=None, centile=None): 169 def getMostSevereValue(self, minNInstants=None, centile=None):
168 '''if there are more than minNInstants observations, 170 '''if there are more than minNInstants observations,
169 returns either the average of these maximum values 171 returns either the average of these maximum values