Mercurial Hosting > traffic-intelligence
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