comparison 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
comparison
equal deleted inserted replaced
319:6b65b26c1e46 320:419f30491a4b
20 20
21 link to the moving objects 21 link to the moving objects
22 contains the indicators in a dictionary with the names as keys 22 contains the indicators in a dictionary with the names as keys
23 ''' 23 '''
24 24
25 categories = {'headon': 0, 25 categories = {'Head On': 0,
26 'rearend': 1, 26 'rearend': 1,
27 'side': 2, 27 'side': 2,
28 'parallel': 3} 28 'parallel': 3}
29 29
30 def __init__(self, num = None, timeInterval = None, roaduserNum1 = None, roaduserNum2 = None, movingObject1 = None, movingObject2 = None, categoryNum = None): 30 indicatorNames = ['Collision Course Dot Product',
31 'Collision Course Angle',
32 'Distance',
33 'Minimum Distance',
34 'Speed Differential']
35
36 def __init__(self, num = None, timeInterval = None, roaduserNum1 = None, roaduserNum2 = None, roadUser1 = None, roadUser2 = None, categoryNum = None):
31 moving.STObject.__init__(self, num, timeInterval) 37 moving.STObject.__init__(self, num, timeInterval)
32 self.roaduserNumbers = set([roaduserNum1, roaduserNum2]) 38 self.roaduserNumbers = set([roaduserNum1, roaduserNum2])
33 self.movingObject1 = movingObject1 39 self.roadUser1 = roadUser1
34 self.movingObject2 = movingObject2 40 self.roadUser2 = roadUser2
35 self.categoryNum = categoryNum 41 self.categoryNum = categoryNum
36 self.indicators = {} 42 self.indicators = {}
37 43
38 def getIndicator(self, indicatorName): 44 def getIndicator(self, indicatorName):
39 return self.indicators[indicatorName] 45 return self.indicators[indicatorName]
42 self.indicators[indicator.name] = indicator 48 self.indicators[indicator.name] = indicator
43 49
44 def computeIndicators(self): 50 def computeIndicators(self):
45 '''Computes the collision course cosine only if the cosine is positive''' 51 '''Computes the collision course cosine only if the cosine is positive'''
46 collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length()) 52 collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length())
47 collisionCourseCosines = {} 53 collisionCourseAngles = {}
48 distances = {}#[0]*int(self.timeInterval.length()) 54 distances = {}#[0]*int(self.timeInterval.length())
49 speedDifferentials = {} 55 speedDifferentials = {}
50 for instant in self.timeInterval: 56 for instant in self.timeInterval:
51 deltap = self.movingObject1.getPositionAtInstant(instant)-self.movingObject2.getPositionAtInstant(instant) 57 deltap = self.roadUser1.getPositionAtInstant(instant)-self.roadUser2.getPositionAtInstant(instant)
52 deltav = self.movingObject2.getVelocityAtInstant(instant)-self.movingObject1.getVelocityAtInstant(instant) 58 deltav = self.roadUser2.getVelocityAtInstant(instant)-self.roadUser1.getVelocityAtInstant(instant)
53 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav) 59 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav)
54 distances[instant] = deltap.norm2() 60 distances[instant] = deltap.norm2()
55 speedDifferentials[instant] = deltav.norm2() 61 speedDifferentials[instant] = deltav.norm2()
56 if collisionCourseDotProducts[instant] > 0: 62 #if collisionCourseDotProducts[instant] > 0:
57 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant])) 63 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
58 64
59 # todo shorten the time intervals based on the interaction definition 65 # todo shorten the time intervals based on the interaction definition
60 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts)) 66 self.addIndicator(indicators.SeverityIndicator('Collision Course Dot Product', collisionCourseDotProducts))
67 self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles))
61 self.addIndicator(indicators.SeverityIndicator('Distance', distances)) 68 self.addIndicator(indicators.SeverityIndicator('Distance', distances))
62 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials)) 69 self.addIndicator(indicators.SeverityIndicator('Speed Differential', speedDifferentials))
63 self.addIndicator(indicators.SeverityIndicator('Collision Course Angle', collisionCourseAngles))
64 70
65 # todo test for interaction instants and interval, compute indicators 71 # todo test for interaction instants and interval, compute indicators
66 72
67 # if we have features, compute other indicators 73 # if we have features, compute other indicators
68 if self.movingObject1.features and self.movingObject2.features: 74 if self.roadUser1.features and self.roadUser2.features:
69 from scipy.spatial.distance import cdist 75 from scipy.spatial.distance import cdist
70 minDistance={} 76 minDistance={}
71 for instant in self.timeInterval: 77 for instant in self.timeInterval:
72 positions1 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject1.features if f.existsAtInstant(instant)] 78 positions1 = [f.getPositionAtInstant(instant).astuple() for f in self.roadUser1.features if f.existsAtInstant(instant)]
73 positions2 = [f.getPositionAtInstant(instant).astuple() for f in self.movingObject2.features if f.existsAtInstant(instant)] 79 positions2 = [f.getPositionAtInstant(instant).astuple() for f in self.roadUser2.features if f.existsAtInstant(instant)]
74 distance = cdist(positions1, positions2, metric = 'euclidean') 80 distance = cdist(positions1, positions2, metric = 'euclidean')
75 minDistance[instant] = distance.min() 81 minDistance[instant] = distance.min()
76 self.addIndicator(indicators.SeverityIndicator('Minimum Distance', minDistance)) 82 self.addIndicator(indicators.SeverityIndicator('Minimum Distance', minDistance))
77 83
78 def computeCollisionPoints(self, predictionParameters, collisionDistanceThreshold, timeHorizon): 84 def computeCollisionPoints(self, predictionParameters, collisionDistanceThreshold, timeHorizon):
79 if self.movingObject1.features and self.movingObject2.features: 85 if self.roadUser1.features and self.roadUser2.features:
80 collisionPoints = prediction.computeCollisions(self.movingObject1, self.movingObject2, predictionParameters, collisionDistanceThreshold, timeHorizon) 86 collisionPoints = prediction.computeCollisions(self.roadUser1, self.roadUser2, predictionParameters, collisionDistanceThreshold, timeHorizon)
81 self.addIndicator(indicators.SeverityIndicator('collisionPoints', collisionPoints)) 87 self.addIndicator(indicators.SeverityIndicator('Collision Points', collisionPoints))
82 else: 88 else:
83 print('Features not associated with objects') 89 print('Features not associated with objects')
84 90
85 def addVideoFilename(self,videoFilename): 91 def addVideoFilename(self,videoFilename):
86 self.videoFilename= videoFilename 92 self.videoFilename= videoFilename
106 112
107 # TODO: 113 # TODO:
108 #http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a-class 114 #http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a-class
109 #http://www.rueckstiess.net/research/snippets/show/ca1d7d90 115 #http://www.rueckstiess.net/research/snippets/show/ca1d7d90
110 def calculateIndicatorPipe(pairs, predParam, timeHorizon=75,collisionDistanceThreshold=1.8): 116 def calculateIndicatorPipe(pairs, predParam, timeHorizon=75,collisionDistanceThreshold=1.8):
111 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(pairs.movingObject1, pairs.movingObject2, predParam, collisionDistanceThreshold, timeHorizon) 117 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(pairs.roadUser1, pairs.roadUser2, predParam, collisionDistanceThreshold, timeHorizon)
112 #print pairs.num 118 #print pairs.num
113 # Ignore empty collision points 119 # Ignore empty collision points
114 empty = 1 120 empty = 1
115 for i in collisionPoints: 121 for i in collisionPoints:
116 if(collisionPoints[i] != []): 122 if(collisionPoints[i] != []):
153 pool.close() 159 pool.close()
154 else: 160 else:
155 #prog = Tools.ProgressBar(0, len(self.pairs), 77) #Removed in traffic-intelligenc port 161 #prog = Tools.ProgressBar(0, len(self.pairs), 77) #Removed in traffic-intelligenc port
156 for j in xrange(len(self.pairs)): 162 for j in xrange(len(self.pairs)):
157 #prog.updateAmount(j) #Removed in traffic-intelligenc port 163 #prog.updateAmount(j) #Removed in traffic-intelligenc port
158 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(self.pairs[j].movingObject1, self.pairs[j].movingObject2, predParam, collisionDistanceThreshold, timeHorizon) 164 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(self.pairs[j].roadUser1, self.pairs[j].roadUser2, predParam, collisionDistanceThreshold, timeHorizon)
159 165
160 # Ignore empty collision points 166 # Ignore empty collision points
161 empty = 1 167 empty = 1
162 for i in collisionPoints: 168 for i in collisionPoints:
163 if(collisionPoints[i] != []): 169 if(collisionPoints[i] != []):