Mercurial Hosting > traffic-intelligence
changeset 294:1f253f218b9f
evolution of indicators and their computation in interactions
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 08 Feb 2013 18:35:24 -0500 |
parents | ee3302528cdc |
children | ba29bd82bd04 |
files | python/event.py python/ubc_utils.py |
diffstat | 2 files changed, 22 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/python/event.py Fri Feb 08 18:13:29 2013 -0500 +++ b/python/event.py Fri Feb 08 18:35:24 2013 -0500 @@ -17,6 +17,7 @@ or a road user and an obstacle link to the moving objects + contains the indicators in a dictionary with the names as keys ''' categories = {'headon': 0, @@ -30,30 +31,33 @@ self.movingObject1 = movingObject1 self.movingObject2 = movingObject2 self.categoryNum = categoryNum + self.indicators = {} def getIndicator(self, indicatorName): - if hasattr(self, 'indicators'): - for i in self.indicators: - if i.name == indicatorName: - return i - else: - return None + return self.indicators[indicatorName] + + def addIndicator(self, indicator): + self.indicators[indicator.name] = indicator def computeIndicators(self): '''Computes the collision course cosine only if the cosine is positive''' - collisionCourseDotProduct = [0]*int(self.timeInterval.length()) - collisionCourseCosine = {} - distances = [0]*int(self.timeInterval.length()) - for i,instant in enumerate(self.timeInterval): + collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length()) + collisionCourseCosines = {} + distances = {}#[0]*int(self.timeInterval.length()) + speedDifferentials = {} + for instant in self.timeInterval: deltap = self.movingObject1.getPositionAtInstant(instant)-self.movingObject2.getPositionAtInstant(instant) deltav = self.movingObject2.getVelocityAtInstant(instant)-self.movingObject1.getVelocityAtInstant(instant) - collisionCourseDotProduct[i] = moving.Point.dot(deltap, deltav) - distances[i] = deltap.norm2() - if collisionCourseDotProduct[i] > 0: - collisionCourseCosine[instant] = collisionCourseDotProduct[i]/(distances[i]*deltav.norm2()) - self.indicators = [moving.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProduct, self.timeInterval), - moving.SeverityIndicator('Distances', distances, self.timeInterval), - moving.SeverityIndicator('Collision Course Cosine', collisionCourseCosine)] + collisionCourseDotProduct[instant] = moving.Point.dot(deltap, deltav) + distances[instant] = deltap.norm2() + speedDifferentials[instant] = deltav.norm2() + if collisionCourseDotProduct[instant] > 0: + collisionCourseCosine[instant] = collisionCourseDotProduct[instant]/(distances[instant]*speedDifferentials[instant]) + # todo shorten the time intervals based on the interaction definition + self.addIndicator(moving.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts)) + self.addIndicator(moving.SeverityIndicator('Distance', distances)) + self.addIndicator(moving.SeverityIndicator('Speed Differential', speedDifferentials)) + self.addIndicator(moving.SeverityIndicator('Collision Course Cosine', collisionCourseCosines)) def createInteractions(objects):
--- a/python/ubc_utils.py Fri Feb 08 18:13:29 2013 -0500 +++ b/python/ubc_utils.py Fri Feb 08 18:35:24 2013 -0500 @@ -190,7 +190,7 @@ for i,v in enumerate([float(n) for n in line.split(' ')]): if not ignoredValue[indicatorNum] or v != ignoredValue[indicatorNum]: values[indicatorFrameNums[i]] = v - inter.indicators.append(SeverityIndicator(severityIndicatorNames[indicatorNum], values, None, mostSevereIsMax[indicatorNum])) + inter.addIndicator(SeverityIndicator(severityIndicatorNames[indicatorNum], values, None, mostSevereIsMax[indicatorNum])) interactions.append(inter) interactionNum+=1