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