diff python/events.py @ 320:419f30491a4b

renamed fields movingObject to roadUser, etc
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 06 May 2013 17:20:07 +0200
parents d280b881e860
children a5e40bd04cf4
line wrap: on
line diff
--- a/python/events.py	Mon May 06 15:27:11 2013 +0200
+++ b/python/events.py	Mon May 06 17:20:07 2013 +0200
@@ -22,16 +22,22 @@
     contains the indicators in a dictionary with the names as keys
     '''
 
-    categories = {'headon': 0,
+    categories = {'Head On': 0,
                   'rearend': 1,
                   'side': 2,
                   'parallel': 3}
 
-    def __init__(self, num = None, timeInterval = None, roaduserNum1 = None, roaduserNum2 = None, movingObject1 = None, movingObject2 = None, categoryNum = None):
+    indicatorNames = ['Collision Course Dot Product',
+                      'Collision Course Angle',
+                      'Distance',
+                      'Minimum Distance',
+                      'Speed Differential']
+
+    def __init__(self, num = None, timeInterval = None, roaduserNum1 = None, roaduserNum2 = None, roadUser1 = None, roadUser2 = None, categoryNum = None):
         moving.STObject.__init__(self, num, timeInterval)
         self.roaduserNumbers = set([roaduserNum1, roaduserNum2])
-        self.movingObject1 = movingObject1
-        self.movingObject2 = movingObject2
+        self.roadUser1 = roadUser1
+        self.roadUser2 = roadUser2
         self.categoryNum = categoryNum
         self.indicators = {}
 
@@ -44,41 +50,41 @@
     def computeIndicators(self):
         '''Computes the collision course cosine only if the cosine is positive'''
         collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length())
-        collisionCourseCosines = {}
+        collisionCourseAngles = {}
         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)
+            deltap = self.roadUser1.getPositionAtInstant(instant)-self.roadUser2.getPositionAtInstant(instant)
+            deltav = self.roadUser2.getVelocityAtInstant(instant)-self.roadUser1.getVelocityAtInstant(instant)
             collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav)
             distances[instant] = deltap.norm2()
             speedDifferentials[instant] = deltav.norm2()
-            if collisionCourseDotProducts[instant] > 0:
-                collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
+            #if collisionCourseDotProducts[instant] > 0:
+            collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
 
         # todo shorten the time intervals based on the interaction definition
         self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts))
+        self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles))
         self.addIndicator(indicators.SeverityIndicator('Distance', distances))
         self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials))
-        self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles))
 
         # todo test for interaction instants and interval, compute indicators
 
         # if we have features, compute other indicators
-        if self.movingObject1.features and self.movingObject2.features:
+        if self.roadUser1.features and self.roadUser2.features:
             from scipy.spatial.distance import cdist
             minDistance={}
             for instant in self.timeInterval:
-                positions1 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject1.features if f.existsAtInstant(instant)]
-                positions2 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject2.features if f.existsAtInstant(instant)]
+                positions1 = [f.getPositionAtInstant(instant).astuple() for f in self.roadUser1.features if f.existsAtInstant(instant)]
+                positions2 = [f.getPositionAtInstant(instant).astuple() for f in self.roadUser2.features if f.existsAtInstant(instant)]
                 distance = cdist(positions1, positions2, metric = 'euclidean')
                 minDistance[instant] = distance.min()
             self.addIndicator(indicators.SeverityIndicator('Minimum Distance', minDistance))
 
     def computeCollisionPoints(self, predictionParameters, collisionDistanceThreshold, timeHorizon):
-        if self.movingObject1.features and self.movingObject2.features:
-            collisionPoints = prediction.computeCollisions(self.movingObject1, self.movingObject2, predictionParameters, collisionDistanceThreshold, timeHorizon)
-            self.addIndicator(indicators.SeverityIndicator('collisionPoints', collisionPoints))	
+        if self.roadUser1.features and self.roadUser2.features:
+            collisionPoints = prediction.computeCollisions(self.roadUser1, self.roadUser2, predictionParameters, collisionDistanceThreshold, timeHorizon)
+            self.addIndicator(indicators.SeverityIndicator('Collision Points', collisionPoints))	
         else:
             print('Features not associated with objects')
 
@@ -108,7 +114,7 @@
 #http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a-class
 #http://www.rueckstiess.net/research/snippets/show/ca1d7d90
 def calculateIndicatorPipe(pairs, predParam, timeHorizon=75,collisionDistanceThreshold=1.8):  
-    collisionPoints, crossingZones = prediction.computeCrossingsCollisions(pairs.movingObject1, pairs.movingObject2, predParam, collisionDistanceThreshold, timeHorizon)      
+    collisionPoints, crossingZones = prediction.computeCrossingsCollisions(pairs.roadUser1, pairs.roadUser2, predParam, collisionDistanceThreshold, timeHorizon)      
     #print pairs.num    
     # Ignore empty collision points
     empty = 1
@@ -155,7 +161,7 @@
             #prog = Tools.ProgressBar(0, len(self.pairs), 77) #Removed in traffic-intelligenc port
             for j in xrange(len(self.pairs)):
                 #prog.updateAmount(j) #Removed in traffic-intelligenc port
-                collisionPoints, crossingZones = prediction.computeCrossingsCollisions(self.pairs[j].movingObject1, self.pairs[j].movingObject2, predParam, collisionDistanceThreshold, timeHorizon)      
+                collisionPoints, crossingZones = prediction.computeCrossingsCollisions(self.pairs[j].roadUser1, self.pairs[j].roadUser2, predParam, collisionDistanceThreshold, timeHorizon)      
                 
                 # Ignore empty collision points
                 empty = 1