changeset 452:c59a47ce0209

reorganized interactioninterval (in compute indicators) and comments
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 13 Feb 2014 14:10:52 -0500
parents cd342a774806
children 15c6f1bc30a2
files python/events.py
diffstat 1 files changed, 17 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/python/events.py	Thu Feb 13 01:24:27 2014 -0500
+++ b/python/events.py	Thu Feb 13 14:10:52 2014 -0500
@@ -86,6 +86,7 @@
         velocityAngles = {}
         distances = {}#[0]*int(self.timeInterval.length())
         speedDifferentials = {}
+        interactionInstants = []
         for instant in self.timeInterval:
             deltap = self.roadUser1.getPositionAtInstant(instant)-self.roadUser2.getPositionAtInstant(instant)
             v1 = self.roadUser1.getVelocityAtInstant(instant)
@@ -95,18 +96,20 @@
             collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav)
             distances[instant] = deltap.norm2()
             speedDifferentials[instant] = deltav.norm2()
-            #if collisionCourseDotProducts[instant] > 0:
+            if collisionCourseDotProducts[instant] > 0:
+                interactionInstants.append(instant)
             collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
 
-        # todo shorten the time intervals based on the interaction definition
+        if len(interactionInstants) >= 2:
+            self.interactionInterval = moving.TimeInterval(interactionInstants[0], interactionInstants[-1])
+        else:
+            self.interactionInterval = moving.TimeInterval()
         self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[0], collisionCourseDotProducts))
         self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[1], collisionCourseAngles))
         self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[2], distances))
         self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[4], velocityAngles))
         self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[5], speedDifferentials))
 
-        # todo test for interaction instants and interval, compute indicators
-
         # if we have features, compute other indicators
         if self.roadUser1.features != None and self.roadUser2.features != None:
             minDistance={}
@@ -145,18 +148,6 @@
 	    ''' interaction types: conflict or collision if they are known'''
         self.interactionType= interactionType
 
-    def computeInteractionInterval(self):
-        ''' Computes the times during which the road users are getting closer,
-        ie the collision course angle is positive
-        (Other thresholds/indicators could be tried)'''
-        collisionCourseDotProducts = self.getIndicator(Interaction.indicatorNames[0])
-        inter = collisionCourseDotProducts.getTimeInterval()
-        interactionInstants = [t for t in inter if collisionCourseDotProducts[t] >= 0]
-        if len(interactionInstants) >= 2:
-            self.interactionInterval = moving.TimeInterval(interactionInstants[0], interactionInstants[-1])
-        else:
-            self.interactionInterval = moving.TimeInterval()
-
 def createInteractions(objects):
     '''Create all interactions of two co-existing road users
 
@@ -176,7 +167,8 @@
     Returns the prototype indices (in the interaction list) and the label of each indicator (interaction)
 
     if an indicator profile (time series) is different enough (<minSimilarity), 
-    it will become a new prototype. Otherwise, it will be assigned to an existing prototypes'''
+    it will become a new prototype. 
+    Non-prototype interactions will be assigned to an existing prototype'''
 
     # sort indicators based on length
     indices = range(similarityMatrix.shape[0])
@@ -205,6 +197,14 @@
 
     return prototypeIndices, labels
 
+def prototypeMultivariateCluster(interactions, similarityMatrics, indicatorNames, minSimilarities, minClusterSize):
+    '''Finds exmaple indicator time series (several indicators) for all interactions
+
+    if any interaction indicator time series is different enough (<minSimilarity),
+    it will become a new prototype. 
+    Non-prototype interactions will be assigned to an existing prototype if all indicators are similar enough'''
+    pass
+
 # TODO:
 #http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a-class
 #http://www.rueckstiess.net/research/snippets/show/ca1d7d90