Mercurial Hosting > traffic-intelligence
changeset 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 | 6b65b26c1e46 |
children | a5e40bd04cf4 |
files | python/events.py |
diffstat | 1 files changed, 24 insertions(+), 18 deletions(-) [+] |
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