comparison python/indicators.py @ 285:5957aa1d69e1

Integrating Mohamed's changes Changed the indicator interface to access values, so that the generic LCSS implementation can be used
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Sat, 26 Jan 2013 19:02:25 -0500
parents abbd4bc13dac
children fa95796a76b3
comparison
equal deleted inserted replaced
284:f2cf16ad798f 285:5957aa1d69e1
36 36
37 def empty(self): 37 def empty(self):
38 return len(self.values) == 0 38 return len(self.values) == 0
39 39
40 def __getitem__(self, i): 40 def __getitem__(self, i):
41 'Returns ith value'
42 sortedKeys = sorted(self.values.keys())
43 if 0<=i<len(sortedKeys):
44 return self.values[sortedKeys[i]]
45 else:
46 return None
47
48 def valueAtInstant(self, i):
41 if i in self.values.keys(): 49 if i in self.values.keys():
42 return self.values[i] 50 return self.values[i]
43 else: 51 else:
44 return None 52 return None
53
54 def __len__(self):
55 return len(self.values)
45 56
46 def __iter__(self): 57 def __iter__(self):
47 self.iterInstantNum = 0 # index in the interval or keys of the dict 58 self.iterInstantNum = 0 # index in the interval or keys of the dict
48 return self 59 return self
49 60
51 if self.iterInstantNum >= len(self.values):#(self.timeInterval and self.iterInstantNum>=self.timeInterval.length())\ 62 if self.iterInstantNum >= len(self.values):#(self.timeInterval and self.iterInstantNum>=self.timeInterval.length())\
52 # or (self.iterInstantNum >= self.values) 63 # or (self.iterInstantNum >= self.values)
53 raise StopIteration 64 raise StopIteration
54 else: 65 else:
55 self.iterInstantNum += 1 66 self.iterInstantNum += 1
56 return self.values[self.values.keys()[self.iterInstantNum-1]] 67 return self.__getitem__(self.iterInstantNum-1)
57 68
58 def getTimeInterval(self): 69 def getTimeInterval(self):
59 return self.timeInterval 70 return self.timeInterval
60 71
61 def getValues(self): 72 def getValues(self):
81 time = sorted(self.values.keys()) 92 time = sorted(self.values.keys())
82 plot([x/xfactor for x in time], [self.values[i] for i in time], options+marker, **kwargs) 93 plot([x/xfactor for x in time], [self.values[i] for i in time], options+marker, **kwargs)
83 if self.maxValue: 94 if self.maxValue:
84 ylim(ymax = self.maxValue) 95 ylim(ymax = self.maxValue)
85 96
97 @staticmethod
98 def computeDLCSS(indicator1, indicator2, threshold, delta = float('inf'), method= 'min'):
99 ''' compute the distance between two indicators using LCSS
100 two common methods are used: min or mean of the indicators length'''
101 # l1= TemporalIndicator1.valueSorted
102 # l2= TemporalIndicator2.valueSorted
103 # if method = 'min':
104 # DLCSS= 1- (LCSS(l1,l2, threshold, delta, distance))/min(len(l1),len(l2)))
105 # if method = 'mean':
106 # average= len(l1)+len(l2))/2
107 # DLCSS= 1- ((LCSS(l1,l2, threshold, delta, distance))/average)
108 # return DLCSS
109 return 0
110
86 class SeverityIndicator(TemporalIndicator): 111 class SeverityIndicator(TemporalIndicator):
87 '''Class for severity indicators 112 '''Class for severity indicators
88 field mostSevereIsMax is True 113 field mostSevereIsMax is True
89 if the most severe value taken by the indicator is the maximum''' 114 if the most severe value taken by the indicator is the maximum'''
90 115
91 def __init__(self, name, values, timeInterval=None, mostSevereIsMax=True, ignoredValue = None, maxValue = None): 116 def __init__(self, name, values, timeInterval=None, mostSevereIsMax=True, ignoredValue = None, maxValue = None):
92 TemporalIndicator.__init__(self, name, values, timeInterval, maxValue) 117 TemporalIndicator.__init__(self, name, values, timeInterval, maxValue)
93 self.mostSevereIsMax = mostSevereIsMax 118 self.mostSevereIsMax = mostSevereIsMax
94 self.ignoredValue = ignoredValue 119 self.ignoredValue = ignoredValue
95 120
96 def getMostSevereValue(self, minNInstants=1): 121 def getMostSevereValue(self, minNInstants=1): # TODO use scoreatpercentile
97 from matplotlib.mlab import find 122 from matplotlib.mlab import find
98 from numpy.core.multiarray import array 123 from numpy.core.multiarray import array
99 from numpy.core.fromnumeric import mean 124 from numpy.core.fromnumeric import mean
100 values = array(self.values.values()) 125 values = array(self.values.values())
101 if self.ignoredValue: 126 if self.ignoredValue: