comparison python/events.py @ 661:dc70d9e711f5

some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 18 May 2015 13:53:25 +0200
parents 3058e00887bc
children 72174e66aba5
comparison
equal deleted inserted replaced
660:994dd644f6ab 661:dc70d9e711f5
102 else: 102 else:
103 self.roadUserNumbers = None 103 self.roadUserNumbers = None
104 self.categoryNum = categoryNum 104 self.categoryNum = categoryNum
105 self.indicators = {} 105 self.indicators = {}
106 self.interactionInterval = None 106 self.interactionInterval = None
107 self.collisionPoints = None # distionary for collison points with different prediction methods
107 108
108 def getRoadUserNumbers(self): 109 def getRoadUserNumbers(self):
109 return self.roadUserNumbers 110 return self.roadUserNumbers
110 111
111 def setRoadUsers(self, objects): 112 def setRoadUsers(self, objects):
126 127
127 def getIndicator(self, indicatorName): 128 def getIndicator(self, indicatorName):
128 return self.indicators.get(indicatorName, None) 129 return self.indicators.get(indicatorName, None)
129 130
130 def addIndicator(self, indicator): 131 def addIndicator(self, indicator):
131 if indicator: 132 if indicator is not None:
132 self.indicators[indicator.name] = indicator 133 self.indicators[indicator.name] = indicator
133 134
135 def getIndicatorValueAtInstant(self, indicatorName, instant):
136 indicator = self.getIndicator(indicatorName)
137 if indicator is not None:
138 return indicator[instant]
139 else:
140 return None
141
142 def getIndicatorValuesAtInstant(self, instant):
143 '''Returns list of indicator values at instant
144 as dict (with keys from indicators dict)'''
145 values = {}
146 for k, indicator in self.indicators.iteritems():
147 values[k] = indicator[instant]
148 return values
149
134 def plot(self, options = '', withOrigin = False, timeStep = 1, withFeatures = False, **kwargs): 150 def plot(self, options = '', withOrigin = False, timeStep = 1, withFeatures = False, **kwargs):
135 self.roadUser1.plot(options, withOrigin, timeStep, withFeatures, **kwargs) 151 self.roadUser1.plot(options, withOrigin, timeStep, withFeatures, **kwargs)
136 self.roadUser2.plot(options, withOrigin, timeStep, withFeatures, **kwargs) 152 self.roadUser2.plot(options, withOrigin, timeStep, withFeatures, **kwargs)
137 153
138 def plotOnWorldImage(self, nPixelsPerUnitDistance, options = '', withOrigin = False, timeStep = 1, **kwargs): 154 def plotOnWorldImage(self, nPixelsPerUnitDistance, options = '', withOrigin = False, timeStep = 1, **kwargs):
175 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[2], distances)) 191 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[2], distances))
176 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[4], velocityAngles)) 192 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[4], velocityAngles))
177 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[5], speedDifferentials)) 193 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[5], speedDifferentials))
178 194
179 # if we have features, compute other indicators 195 # if we have features, compute other indicators
180 if len(self.roadUser1.features) != 0 and len(self.roadUser2.features) != 0: 196 if self.roadUser1.hasFeatures() and self.roadUser2.hasFeatures():
181 minDistance={} 197 minDistance={}
182 for instant in self.timeInterval: 198 for instant in self.timeInterval:
183 minDistance[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant) 199 minDistance[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant)
184 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[3], minDistance)) 200 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[3], minDistance))
185 201
194 210
195 if timeInterval is not None: 211 if timeInterval is not None:
196 commonTimeInterval = timeInterval 212 commonTimeInterval = timeInterval
197 else: 213 else:
198 commonTimeInterval = self.timeInterval 214 commonTimeInterval = self.timeInterval
199 self.collisionPoints, self.crossingZones = predictionParameters.computeCrossingsCollisions(self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug, commonTimeInterval, nProcesses,usePrototypes,route1,route2,prototypes,secondStepPrototypes,nMatching,objects,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched,useDestination,useSpeedPrototype,acceptPartialLength, step) 215 self.collisionPoints[predictionParameters.name], crossingZones = predictionParameters.computeCrossingsCollisions(self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug, commonTimeInterval, nProcesses,usePrototypes,route1,route2,prototypes,secondStepPrototypes,nMatching,objects,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched,useDestination,useSpeedPrototype,acceptPartialLength, step)
216 if computeCZ:
217 self.crossingZones[predictionParameters.name] = crossingZones
200 for i, cp in self.collisionPoints.iteritems(): 218 for i, cp in self.collisionPoints.iteritems():
201 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(cp) 219 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(cp)
202 # add probability of collision, and probability of successful evasive action 220 # add probability of collision, and probability of successful evasive action
203 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs, mostSevereIsMax=False)) 221 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs, mostSevereIsMax=False))
204 222
211 def computePET(self, collisionDistanceThreshold): 229 def computePET(self, collisionDistanceThreshold):
212 # TODO add crossing zone 230 # TODO add crossing zone
213 self.pet = moving.MovingObject.computePET(self.roadUser1, self.roadUser2, collisionDistanceThreshold) 231 self.pet = moving.MovingObject.computePET(self.roadUser1, self.roadUser2, collisionDistanceThreshold)
214 232
215 def addVideoFilename(self,videoFilename): 233 def addVideoFilename(self,videoFilename):
216 self.videoFilename= videoFilename 234 self.videoFilename = videoFilename
217 235
218 def addInteractionType(self,interactionType): 236 def addInteractionType(self,interactionType):
219 ''' interaction types: conflict or collision if they are known''' 237 ''' interaction types: conflict or collision if they are known'''
220 self.interactionType= interactionType 238 self.interactionType = interactionType
239
240 def getCrossingZones(self, predictionMethodName):
241 if self.hasattr(self, 'crossingZones'):
242 return self.crossingZones[predictionMethodName]
243 else:
244 return None
245
246 def getCollisionPoints(self, predictionMethodName):
247 if self.collisionPoints is not None:
248 return self.collisionPoints[predictionMethodName]
249 else:
250 return None
251
221 252
222 def createInteractions(objects, _others = None): 253 def createInteractions(objects, _others = None):
223 '''Create all interactions of two co-existing road users''' 254 '''Create all interactions of two co-existing road users'''
224 if _others is not None: 255 if _others is not None:
225 others = _others 256 others = _others