annotate python/events.py @ 695:957126bfb456 dev

corrected bug with indicator loading(also now correctly loading mostsevereismax)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 09 Jul 2015 00:58:08 -0400
parents c4363aa6f0e5
children 0ceee3b1a96d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
56
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
1 #! /usr/bin/env python
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
2 '''Libraries for events
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
3 Interactions, pedestrian crossing...'''
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
4
665
15e244d2a1b5 corrected bug with circular import for VideoFilenameAddable, moved to base module
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 664
diff changeset
5 import moving, prediction, indicators, utils, cvutils
15e244d2a1b5 corrected bug with circular import for VideoFilenameAddable, moved to base module
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 664
diff changeset
6 from base import VideoFilenameAddable
15e244d2a1b5 corrected bug with circular import for VideoFilenameAddable, moved to base module
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 664
diff changeset
7
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
8 import numpy as np
306
93d851d0d21e bug correction, minor work on indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 299
diff changeset
9 from numpy import arccos
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
10
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
11 import multiprocessing
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
12 import itertools
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
13
56
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
14
613
306db0f3c7a2 move 4 functions from trajLearning file
MohamedGomaa
parents: 610
diff changeset
15 def findRoute(prototypes,objects,i,j,noiseEntryNums,noiseExitNums,minSimilarity= 0.3, spatialThreshold=1.0, delta=180):
619
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
16 if i[0] not in noiseEntryNums:
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
17 prototypesRoutes= [ x for x in sorted(prototypes.keys()) if i[0]==x[0]]
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
18 elif i[1] not in noiseExitNums:
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
19 prototypesRoutes=[ x for x in sorted(prototypes.keys()) if i[1]==x[1]]
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
20 else:
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
21 prototypesRoutes=[x for x in sorted(prototypes.keys())]
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
22 routeSim={}
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
23 lcss = utils.LCSS(similarityFunc=lambda x,y: (distanceForLCSS(x,y) <= spatialThreshold),delta=delta)
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
24 for y in prototypesRoutes:
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
25 if y in prototypes.keys():
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
26 prototypesIDs=prototypes[y]
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
27 similarity=[]
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
28 for x in prototypesIDs:
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
29 s=lcss.computeNormalized(objects[j].positions, objects[x].positions)
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
30 similarity.append(s)
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
31 routeSim[y]=max(similarity)
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
32 route=max(routeSim, key=routeSim.get)
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
33 if routeSim[route]>=minSimilarity:
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
34 return route
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
35 else:
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
36 return i
613
306db0f3c7a2 move 4 functions from trajLearning file
MohamedGomaa
parents: 610
diff changeset
37
610
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
38 def getRoute(obj,prototypes,objects,noiseEntryNums,noiseExitNums,useDestination=True):
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
39 route=(obj.startRouteID,obj.endRouteID)
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
40 if useDestination:
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
41 if route not in prototypes.keys():
613
306db0f3c7a2 move 4 functions from trajLearning file
MohamedGomaa
parents: 610
diff changeset
42 route= findRoute(prototypes,objects,route,obj.getNum(),noiseEntryNums,noiseExitNums)
610
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
43 return route
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
44
664
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
45 class Interaction(moving.STObject, VideoFilenameAddable):
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
46 '''Class for an interaction between two road users
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
47 or a road user and an obstacle
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
48
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
49 link to the moving objects
294
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
50 contains the indicators in a dictionary with the names as keys
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
51 '''
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
52
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
53 categories = {'Head On': 0,
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
54 'rearend': 1,
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
55 'side': 2,
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
56 'parallel': 3}
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
57
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
58 indicatorNames = ['Collision Course Dot Product',
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
59 'Collision Course Angle',
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
60 'Distance',
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
61 'Minimum Distance',
341
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
62 'Velocity Angle',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
63 'Speed Differential',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
64 'Collision Probability',
628
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
65 'Time to Collision', # 7
341
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
66 'Probability of Successful Evasive Action',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
67 'predicted Post Encroachment Time']
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
68
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
69 indicatorNameToIndices = utils.inverseEnumeration(indicatorNames)
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
70
388
6e0dedd34920 minor name change
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 387
diff changeset
71 indicatorShortNames = ['CCDP',
408
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
72 'CCA',
341
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
73 'Dist',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
74 'MinDist',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
75 'VA',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
76 'SD',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
77 'PoC',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
78 'TTC',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
79 'P(SEA)',
2f39c4ed0b62 first version of indicator saving to sqlite
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 340
diff changeset
80 'pPET']
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
81
408
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
82 indicatorUnits = ['',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
83 'rad',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
84 'm',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
85 'm',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
86 'rad',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
87 'm/s',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
88 '',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
89 's',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
90 '',
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
91 '']
365d8dee44f3 last changes for TRB14
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 388
diff changeset
92
695
957126bfb456 corrected bug with indicator loading(also now correctly loading mostsevereismax)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 694
diff changeset
93 timeIndicators = ['Time to Collision', 'predicted Post Encroachment Time']
957126bfb456 corrected bug with indicator loading(also now correctly loading mostsevereismax)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 694
diff changeset
94
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
95 def __init__(self, num = None, timeInterval = None, roaduserNum1 = None, roaduserNum2 = None, roadUser1 = None, roadUser2 = None, categoryNum = None):
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
96 moving.STObject.__init__(self, num, timeInterval)
636
3058e00887bc removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 632
diff changeset
97 if timeInterval is None and roadUser1 is not None and roadUser2 is not None:
566
07b1bd0785cd simplifications to interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 559
diff changeset
98 self.timeInterval = roadUser1.commonTimeInterval(roadUser2)
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
99 self.roadUser1 = roadUser1
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
100 self.roadUser2 = roadUser2
636
3058e00887bc removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 632
diff changeset
101 if roaduserNum1 is not None and roaduserNum2 is not None:
566
07b1bd0785cd simplifications to interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 559
diff changeset
102 self.roadUserNumbers = set([roaduserNum1, roaduserNum2])
636
3058e00887bc removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 632
diff changeset
103 elif roadUser1 is not None and roadUser2 is not None:
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
104 self.roadUserNumbers = set([roadUser1.getNum(), roadUser2.getNum()])
566
07b1bd0785cd simplifications to interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 559
diff changeset
105 else:
07b1bd0785cd simplifications to interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 559
diff changeset
106 self.roadUserNumbers = None
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
107 self.categoryNum = categoryNum
294
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
108 self.indicators = {}
451
cd342a774806 Point/CurvilinearTrajectory/Interaction utiles
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 436
diff changeset
109 self.interactionInterval = None
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
110 # list for collison points and crossing zones
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
111 self.collisionPoints = None
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
112 self.crossingZones = None
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
113
340
1046b7346886 work in progress on storing indicator values
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 339
diff changeset
114 def getRoadUserNumbers(self):
1046b7346886 work in progress on storing indicator values
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 339
diff changeset
115 return self.roadUserNumbers
1046b7346886 work in progress on storing indicator values
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 339
diff changeset
116
628
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
117 def setRoadUsers(self, objects):
694
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
118 nums = sorted(list(self.getRoadUserNumbers()))
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
119 if nums[0]<len(objects) and objects[nums[0]].getNum() == nums[0]:
628
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
120 self.roadUser1 = objects[nums[0]]
694
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
121 if nums[1]<len(objects) and objects[nums[1]].getNum() == nums[1]:
628
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
122 self.roadUser2 = objects[nums[1]]
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
123
694
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
124 if self.roadUser1 is None or self.roadUser2 is None:
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
125 self.roadUser1 = None
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
126 self.roadUser2 = None
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
127 i = 0
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
128 while i < len(objects) and self.roadUser2 is None:
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
129 if objects[i].getNum() in nums:
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
130 if self.roadUser1 is None:
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
131 self.roadUser1 = objects[i]
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
132 else:
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
133 self.roadUser2 = objects[i]
c4363aa6f0e5 updated function to find road users for interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 692
diff changeset
134 i += 1
628
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
135
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
136 def getIndicator(self, indicatorName):
321
a5e40bd04cf4 rearranged LCSS indicator functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 320
diff changeset
137 return self.indicators.get(indicatorName, None)
294
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
138
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
139 def addIndicator(self, indicator):
661
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
140 if indicator is not None:
321
a5e40bd04cf4 rearranged LCSS indicator functions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 320
diff changeset
141 self.indicators[indicator.name] = indicator
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
142
661
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
143 def getIndicatorValueAtInstant(self, indicatorName, instant):
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
144 indicator = self.getIndicator(indicatorName)
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
145 if indicator is not None:
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
146 return indicator[instant]
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
147 else:
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
148 return None
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
149
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
150 def getIndicatorValuesAtInstant(self, instant):
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
151 '''Returns list of indicator values at instant
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
152 as dict (with keys from indicators dict)'''
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
153 values = {}
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
154 for k, indicator in self.indicators.iteritems():
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
155 values[k] = indicator[instant]
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
156 return values
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
157
628
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
158 def plot(self, options = '', withOrigin = False, timeStep = 1, withFeatures = False, **kwargs):
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
159 self.roadUser1.plot(options, withOrigin, timeStep, withFeatures, **kwargs)
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
160 self.roadUser2.plot(options, withOrigin, timeStep, withFeatures, **kwargs)
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
161
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
162 def plotOnWorldImage(self, nPixelsPerUnitDistance, options = '', withOrigin = False, timeStep = 1, **kwargs):
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
163 self.roadUser1.plotOnWorldImage(nPixelsPerUnitDistance, options, withOrigin, timeStep, **kwargs)
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
164 self.roadUser2.plotOnWorldImage(nPixelsPerUnitDistance, options, withOrigin, timeStep, **kwargs)
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
165
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
166 def play(self, videoFilename, homography = None, undistort = False, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = 1.):
636
3058e00887bc removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 632
diff changeset
167 if self.roadUser1 is not None and self.roadUser2 is not None:
628
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
168 cvutils.displayTrajectories(videoFilename, [self.roadUser1, self.roadUser2], homography = homography, firstFrameNum = self.getFirstInstant(), lastFrameNumArg = self.getLastInstant(), undistort = undistort, intrinsicCameraMatrix = intrinsicCameraMatrix, distortionCoefficients = distortionCoefficients, undistortedImageMultiplication = undistortedImageMultiplication)
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
169 else:
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
170 print('Please set the interaction road user attributes roadUser1 and roadUser1 through the method setRoadUsers')
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
171
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
172 def computeIndicators(self):
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
173 '''Computes the collision course cosine only if the cosine is positive'''
294
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
174 collisionCourseDotProducts = {}#[0]*int(self.timeInterval.length())
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
175 collisionCourseAngles = {}
325
6c9c7c956926 added velocity angle in indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 321
diff changeset
176 velocityAngles = {}
294
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
177 distances = {}#[0]*int(self.timeInterval.length())
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
178 speedDifferentials = {}
452
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
179 interactionInstants = []
294
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
180 for instant in self.timeInterval:
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
181 deltap = self.roadUser1.getPositionAtInstant(instant)-self.roadUser2.getPositionAtInstant(instant)
325
6c9c7c956926 added velocity angle in indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 321
diff changeset
182 v1 = self.roadUser1.getVelocityAtInstant(instant)
6c9c7c956926 added velocity angle in indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 321
diff changeset
183 v2 = self.roadUser2.getVelocityAtInstant(instant)
6c9c7c956926 added velocity angle in indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 321
diff changeset
184 deltav = v2-v1
6c9c7c956926 added velocity angle in indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 321
diff changeset
185 velocityAngles[instant] = arccos(moving.Point.dot(v1, v2)/(v1.norm2()*v2.norm2()))
299
7e5fb4abd070 renaming event to events and correcting errors in indicator computation
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 294
diff changeset
186 collisionCourseDotProducts[instant] = moving.Point.dot(deltap, deltav)
317
d280b881e860 added indicator min distance
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 310
diff changeset
187 distances[instant] = deltap.norm2()
294
1f253f218b9f evolution of indicators and their computation in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 293
diff changeset
188 speedDifferentials[instant] = deltav.norm2()
452
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
189 if collisionCourseDotProducts[instant] > 0:
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
190 interactionInstants.append(instant)
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
191 if distances[instant] != 0 and speedDifferentials[instant] != 0:
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
192 collisionCourseAngles[instant] = arccos(collisionCourseDotProducts[instant]/(distances[instant]*speedDifferentials[instant]))
306
93d851d0d21e bug correction, minor work on indicators
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 299
diff changeset
193
452
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
194 if len(interactionInstants) >= 2:
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
195 self.interactionInterval = moving.TimeInterval(interactionInstants[0], interactionInstants[-1])
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
196 else:
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
197 self.interactionInterval = moving.TimeInterval()
387
91679eb2ff2c cleaning up safety analysis and the new traditional constant velocity method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 382
diff changeset
198 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[0], collisionCourseDotProducts))
91679eb2ff2c cleaning up safety analysis and the new traditional constant velocity method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 382
diff changeset
199 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[1], collisionCourseAngles))
691
fa9aa5f08210 cleaned imports in indicators.py
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 665
diff changeset
200 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[2], distances, mostSevereIsMax = False))
387
91679eb2ff2c cleaning up safety analysis and the new traditional constant velocity method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 382
diff changeset
201 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[4], velocityAngles))
91679eb2ff2c cleaning up safety analysis and the new traditional constant velocity method
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 382
diff changeset
202 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[5], speedDifferentials))
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
203
317
d280b881e860 added indicator min distance
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 310
diff changeset
204 # if we have features, compute other indicators
661
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
205 if self.roadUser1.hasFeatures() and self.roadUser2.hasFeatures():
691
fa9aa5f08210 cleaned imports in indicators.py
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 665
diff changeset
206 minDistances={}
317
d280b881e860 added indicator min distance
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 310
diff changeset
207 for instant in self.timeInterval:
691
fa9aa5f08210 cleaned imports in indicators.py
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 665
diff changeset
208 minDistances[instant] = moving.MovingObject.minDistance(self.roadUser1, self.roadUser2, instant)
fa9aa5f08210 cleaned imports in indicators.py
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 665
diff changeset
209 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[3], minDistances, mostSevereIsMax = False))
317
d280b881e860 added indicator min distance
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 310
diff changeset
210
627
82e9f78a4714 added test for location for trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 619
diff changeset
211 def computeCrossingsCollisions(self, predictionParameters, collisionDistanceThreshold, timeHorizon, computeCZ = False, debug = False, timeInterval = None, nProcesses = 1, usePrototypes=False, route1= (-1,-1), route2=(-1,-1), prototypes={}, secondStepPrototypes={}, nMatching={}, objects=[], noiseEntryNums=[], noiseExitNums=[], minSimilarity=0.1, mostMatched=None, useDestination=True, useSpeedPrototype=True, acceptPartialLength=30, step=1):
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 325
diff changeset
212 '''Computes all crossing and collision points at each common instant for two road users. '''
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 325
diff changeset
213 TTCs = {}
610
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
214 if usePrototypes:
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
215 route1= getRoute(self.roadUser1,prototypes,objects,noiseEntryNums,noiseExitNums,useDestination)
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
216 route2= getRoute(self.roadUser2,prototypes,objects,noiseEntryNums,noiseExitNums,useDestination)
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 325
diff changeset
217
636
3058e00887bc removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 632
diff changeset
218 if timeInterval is not None:
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 325
diff changeset
219 commonTimeInterval = timeInterval
317
d280b881e860 added indicator min distance
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 310
diff changeset
220 else:
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 325
diff changeset
221 commonTimeInterval = self.timeInterval
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
222 self.collisionPoints, crossingZones = predictionParameters.computeCrossingsCollisions(self.roadUser1, self.roadUser2, collisionDistanceThreshold, timeHorizon, computeCZ, debug, commonTimeInterval, nProcesses,usePrototypes,route1,route2,prototypes,secondStepPrototypes,nMatching,objects,noiseEntryNums,noiseExitNums,minSimilarity,mostMatched,useDestination,useSpeedPrototype,acceptPartialLength, step)
558
a80ef6931fd8 updated safety-analysis to test multiprocessing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 526
diff changeset
223 for i, cp in self.collisionPoints.iteritems():
a80ef6931fd8 updated safety-analysis to test multiprocessing
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 526
diff changeset
224 TTCs[i] = prediction.SafetyPoint.computeExpectedIndicator(cp)
692
9a258687af4c corrected some errors for ttc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 691
diff changeset
225 if len(TTCs) > 0:
9a258687af4c corrected some errors for ttc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 691
diff changeset
226 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[7], TTCs, mostSevereIsMax=False))
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 325
diff changeset
227
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
228 # crossing zones and pPET
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 325
diff changeset
229 if computeCZ:
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
230 self.crossingZones[predictionParameters.name] = crossingZones
338
f3aceea2afbb first safety analysis script
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 325
diff changeset
231 pPETs = {}
610
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
232 for i, cz in self.crossingZones.iteritems():
0dc36203973d remove dublicated code for collision/crossing computations
MohamedGomaa
parents: 607
diff changeset
233 pPETs[i] = prediction.SafetyPoint.computeExpectedIndicator(cz)
631
2d1d33ae1c69 major work on pPET and pet, issues remain for pPET computed with predicted trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 630
diff changeset
234 self.addIndicator(indicators.SeverityIndicator(Interaction.indicatorNames[9], pPETs, mostSevereIsMax=False))
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
235 # TODO add probability of collision, and probability of successful evasive action
631
2d1d33ae1c69 major work on pPET and pet, issues remain for pPET computed with predicted trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 630
diff changeset
236
2d1d33ae1c69 major work on pPET and pet, issues remain for pPET computed with predicted trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 630
diff changeset
237 def computePET(self, collisionDistanceThreshold):
2d1d33ae1c69 major work on pPET and pet, issues remain for pPET computed with predicted trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 630
diff changeset
238 # TODO add crossing zone
2d1d33ae1c69 major work on pPET and pet, issues remain for pPET computed with predicted trajectories
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 630
diff changeset
239 self.pet = moving.MovingObject.computePET(self.roadUser1, self.roadUser2, collisionDistanceThreshold)
619
dc2d0a0d7fe1 merged code from Mohamed Gomaa Mohamed for the use of points of interests in mation pattern learning and motion prediction (TRB 2015)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 613
diff changeset
240
664
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
241 def setCollision(self, collision):
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
242 '''indicates if it is a collision: argument should be boolean'''
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
243 self.collision = collision
310
f7ca78a11ea6 add functions to add videofilename and interaction type in Interaction class
Mohamed Gomaa
parents: 306
diff changeset
244
664
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
245 def isCollision(self):
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
246 if hasattr(self, 'collision'):
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
247 return self.collision
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
248 else:
455f9b93819c added capability to set a videofilename to movingobject and interaction, renames interactiontype to collision in interaction
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 662
diff changeset
249 return None
661
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
250
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
251 def getCrossingZones(self, predictionMethodName):
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
252 if self.crossingZones is not None:
661
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
253 return self.crossingZones[predictionMethodName]
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
254 else:
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
255 return None
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
256
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
257 def getCollisionPoints(self, predictionMethodName):
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
258 if self.collisionPoints is not None:
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
259 return self.collisionPoints[predictionMethodName]
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
260 else:
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
261 return None
dc70d9e711f5 some method name change and new methods for features in objects (MovingObject) and methods to access indicator values in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 636
diff changeset
262
451
cd342a774806 Point/CurvilinearTrajectory/Interaction utiles
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 436
diff changeset
263
487
e04b22ce2fcd generalized createInteractions to 2 lists of objects (for cars and pedestrians for example)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 454
diff changeset
264 def createInteractions(objects, _others = None):
e04b22ce2fcd generalized createInteractions to 2 lists of objects (for cars and pedestrians for example)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 454
diff changeset
265 '''Create all interactions of two co-existing road users'''
636
3058e00887bc removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 632
diff changeset
266 if _others is not None:
487
e04b22ce2fcd generalized createInteractions to 2 lists of objects (for cars and pedestrians for example)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 454
diff changeset
267 others = _others
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
268
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
269 interactions = []
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
270 num = 0
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
271 for i in xrange(len(objects)):
636
3058e00887bc removed all issues because of tests with None, using is instead of == or !=
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 632
diff changeset
272 if _others is None:
487
e04b22ce2fcd generalized createInteractions to 2 lists of objects (for cars and pedestrians for example)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 454
diff changeset
273 others = objects[:i]
e04b22ce2fcd generalized createInteractions to 2 lists of objects (for cars and pedestrians for example)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 454
diff changeset
274 for j in xrange(len(others)):
489
000bddf84ad0 corrected bugs in safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 487
diff changeset
275 commonTimeInterval = objects[i].commonTimeInterval(others[j])
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
276 if not commonTimeInterval.empty():
489
000bddf84ad0 corrected bugs in safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 487
diff changeset
277 interactions.append(Interaction(num, commonTimeInterval, objects[i].num, others[j].num, objects[i], others[j]))
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
278 num += 1
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
279 return interactions
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
280
628
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
281 def findInteraction(interactions, roadUserNum1, roadUserNum2):
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
282 'Returns the right interaction in the set'
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
283 i=0
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
284 while i<len(interactions) and set([roadUserNum1, roadUserNum2]) != interactions[i].getRoadUserNumbers():
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
285 i+=1
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
286 if i<len(interactions):
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
287 return interactions[i]
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
288 else:
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
289 return None
977407c9f815 corrected bugs in loading interactions (index shifted) and added functionalities to play/plot interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 627
diff changeset
290
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
291 def aggregateSafetyPoints(interactions, predictionMethodName = None, pointType = 'collision'):
632
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
292 '''Put all collision points or crossing zones in a list for display'''
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
293 if predictionMethodName is None and len(interactions)>0:
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
294 predictionMethodName = interactions[0].collisionPoints.keys()[0]
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
295
632
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
296 allPoints = []
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
297 if pointType == 'collision':
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
298 for i in interactions:
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
299 for points in i.collisionPoints[predictionMethodName].values():
632
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
300 allPoints += points
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
301 elif pointType == 'crossing':
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
302 for i in interactions:
662
72174e66aba5 corrected bug that increased TTC by 1 frame and structure to store collision points and crossing zones
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 661
diff changeset
303 for points in i.crossingZones[predictionMethodName].values():
632
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
304 allPoints += points
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
305 else:
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
306 print('unknown type of point '+pointType)
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
307 return allPoints
2f1a583bfd20 added utility for safety points
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 631
diff changeset
308
430
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
309 def prototypeCluster(interactions, similarityMatrix, alignmentMatrix, indicatorName, minSimilarity):
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
310 '''Finds exemplar indicator time series for all interactions
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
311 Returns the prototype indices (in the interaction list) and the label of each indicator (interaction)
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
312
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
313 if an indicator profile (time series) is different enough (<minSimilarity),
452
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
314 it will become a new prototype.
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
315 Non-prototype interactions will be assigned to an existing prototype'''
430
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
316
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
317 # sort indicators based on length
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
318 indices = range(similarityMatrix.shape[0])
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
319 def compare(i, j):
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
320 if len(interactions[i].getIndicator(indicatorName)) > len(interactions[j].getIndicator(indicatorName)):
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
321 return -1
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
322 elif len(interactions[i].getIndicator(indicatorName)) == len(interactions[j].getIndicator(indicatorName)):
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
323 return 0
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
324 else:
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
325 return 1
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
326 indices.sort(compare)
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
327 # go through all indicators
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
328 prototypeIndices = [indices[0]]
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
329 for i in indices[1:]:
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
330 if similarityMatrix[i][prototypeIndices].max() < minSimilarity:
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
331 prototypeIndices.append(i)
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
332
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
333 # assignment
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
334 labels = [-1]*similarityMatrix.shape[0]
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
335 indices = [i for i in range(similarityMatrix.shape[0]) if i not in prototypeIndices]
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
336 for i in prototypeIndices:
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
337 labels[i] = i
436
b64ff7fe7b45 corrected clustering bug (in indicator assignment)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 430
diff changeset
338 for i in indices:
430
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
339 prototypeIndex = similarityMatrix[i][prototypeIndices].argmax()
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
340 labels[i] = prototypeIndices[prototypeIndex]
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
341
fb3654a9127d integrating indicator clustering code
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 408
diff changeset
342 return prototypeIndices, labels
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
343
452
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
344 def prototypeMultivariateCluster(interactions, similarityMatrics, indicatorNames, minSimilarities, minClusterSize):
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
345 '''Finds exmaple indicator time series (several indicators) for all interactions
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
346
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
347 if any interaction indicator time series is different enough (<minSimilarity),
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
348 it will become a new prototype.
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
349 Non-prototype interactions will be assigned to an existing prototype if all indicators are similar enough'''
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
350 pass
c59a47ce0209 reorganized interactioninterval (in compute indicators) and comments
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 451
diff changeset
351
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
352 # TODO:
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
353 #http://stackoverflow.com/questions/3288595/multiprocessing-using-pool-map-on-a-function-defined-in-a-class
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
354 #http://www.rueckstiess.net/research/snippets/show/ca1d7d90
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
355 def calculateIndicatorPipe(pairs, predParam, timeHorizon=75,collisionDistanceThreshold=1.8):
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
356 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(pairs.roadUser1, pairs.roadUser2, predParam, collisionDistanceThreshold, timeHorizon)
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
357 #print pairs.num
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
358 # Ignore empty collision points
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
359 empty = 1
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
360 for i in collisionPoints:
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
361 if(collisionPoints[i] != []):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
362 empty = 0
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
363 if(empty == 1):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
364 pairs.hasCP = 0
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
365 else:
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
366 pairs.hasCP = 1
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
367 pairs.CP = collisionPoints
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
368
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
369 # Ignore empty crossing zones
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
370 empty = 1
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
371 for i in crossingZones:
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
372 if(crossingZones[i] != []):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
373 empty = 0
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
374 if(empty == 1):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
375 pairs.hasCZ = 0
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
376 else:
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
377 pairs.hasCZ = 1
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
378 pairs.CZ = crossingZones
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
379 return pairs
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
380
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
381 def calculateIndicatorPipe_star(a_b):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
382 """Convert `f([1,2])` to `f(1,2)` call."""
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
383 return calculateIndicatorPipe(*a_b)
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
384
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
385 class VehPairs():
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
386 '''Create a veh-pairs object from objects list'''
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
387 def __init__(self,objects):
293
ee3302528cdc rearranged new code by Paul (works now)
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 292
diff changeset
388 self.pairs = createInteractions(objects)
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
389 self.interactionCount = 0
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
390 self.CPcount = 0
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
391 self.CZcount = 0
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
392
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
393 # Process indicator calculation with support for multi-threading
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
394 def calculateIndicators(self,predParam,threads=1,timeHorizon=75,collisionDistanceThreshold=1.8):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
395 if(threads > 1):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
396 pool = multiprocessing.Pool(threads)
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
397 self.pairs = pool.map(calculateIndicatorPipe_star, itertools.izip(self.pairs, itertools.repeat(predParam)))
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
398 pool.close()
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
399 else:
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
400 #prog = Tools.ProgressBar(0, len(self.pairs), 77) #Removed in traffic-intelligenc port
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
401 for j in xrange(len(self.pairs)):
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
402 #prog.updateAmount(j) #Removed in traffic-intelligenc port
320
419f30491a4b renamed fields movingObject to roadUser, etc
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 317
diff changeset
403 collisionPoints, crossingZones = prediction.computeCrossingsCollisions(self.pairs[j].roadUser1, self.pairs[j].roadUser2, predParam, collisionDistanceThreshold, timeHorizon)
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
404
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
405 # Ignore empty collision points
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
406 empty = 1
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
407 for i in collisionPoints:
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
408 if(collisionPoints[i] != []):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
409 empty = 0
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
410 if(empty == 1):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
411 self.pairs[j].hasCP = 0
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
412 else:
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
413 self.pairs[j].hasCP = 1
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
414 self.pairs[j].CP = collisionPoints
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
415
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
416 # Ignore empty crossing zones
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
417 empty = 1
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
418 for i in crossingZones:
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
419 if(crossingZones[i] != []):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
420 empty = 0
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
421 if(empty == 1):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
422 self.pairs[j].hasCZ = 0
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
423 else:
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
424 self.pairs[j].hasCZ = 1
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
425 self.pairs[j].CZ = crossingZones
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
426
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
427 for j in self.pairs:
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
428 self.interactionCount = self.interactionCount + len(j.CP)
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
429 self.CPcount = len(self.getCPlist())
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
430 self.Czcount = len(self.getCZlist())
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
431
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
432
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
433 def getPairsWCP(self):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
434 lists = []
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
435 for j in self.pairs:
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
436 if(j.hasCP):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
437 lists.append(j.num)
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
438 return lists
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
439
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
440 def getPairsWCZ(self):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
441 lists = []
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
442 for j in self.pairs:
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
443 if(j.hasCZ):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
444 lists.append(j.num)
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
445 return lists
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
446
526
21bdeb29f855 corrected bug in initialization of lists and loading trajectories from vissim files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 489
diff changeset
447 def getCPlist(self,indicatorThreshold=float('Inf')):
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
448 lists = []
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
449 for j in self.pairs:
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
450 if(j.hasCP):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
451 for k in j.CP:
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
452 if(j.CP[k] != [] and j.CP[k][0].indicator < indicatorThreshold):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
453 lists.append([k,j.CP[k][0]])
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
454 return lists
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
455
526
21bdeb29f855 corrected bug in initialization of lists and loading trajectories from vissim files
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 489
diff changeset
456 def getCZlist(self,indicatorThreshold=float('Inf')):
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
457 lists = []
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
458 for j in self.pairs:
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
459 if(j.hasCZ):
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
460 for k in j.CZ:
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
461 if(j.CZ[k] != [] and j.CZ[k][0].indicator < indicatorThreshold):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
462 lists.append([k,j.CZ[k][0]])
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
463 return lists
292
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
464
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
465 def genIndicatorHistogram(self, CPlist=False, bins=range(0,100,1)):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
466 if(not CPlist):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
467 CPlist = self.getCPlist()
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
468 if(not CPlist):
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
469 return False
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
470 TTC_list = []
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
471 for i in CPlist:
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
472 TTC_list.append(i[1].indicator)
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
473 histo = np.histogram(TTC_list,bins=bins)
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
474 histo += (histo[0].astype(float)/np.sum(histo[0]),)
8b2c8a4015f1 class VehPairs updated. Now supports primitive multithreading.
Paul@BEAST-III
parents: 291
diff changeset
475 return histo
291
9f81218e497a class VehPairs subsumes createInteractions(objects); legacy code remains
Paul@BEAST-III
parents: 283
diff changeset
476
59
f955e83da499 developed indicators in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 56
diff changeset
477 class Crossing(moving.STObject):
56
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
478 '''Class for the event of a street crossing
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
479
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
480 TODO: detecter passage sur la chaussee
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
481 identifier origines et destination (ou uniquement chaussee dans FOV)
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
482 carac traversee
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
483 detecter proximite veh (retirer si trop similaire simultanement
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
484 carac interaction'''
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
485
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
486 def __init__(self, roaduserNum = None, num = None, timeInterval = None):
59
f955e83da499 developed indicators in interactions
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 56
diff changeset
487 moving.STObject.__init__(self, num, timeInterval)
56
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
488 self.roaduserNum = roaduserNum
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
489
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
490
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
491
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
492 if __name__ == "__main__":
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
493 import doctest
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
494 import unittest
489
000bddf84ad0 corrected bugs in safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 487
diff changeset
495 suite = doctest.DocFileSuite('tests/events.txt')
000bddf84ad0 corrected bugs in safety analysis
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents: 487
diff changeset
496 #suite = doctest.DocTestSuite()
56
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
497 unittest.TextTestRunner().run(suite)
61fe73df2d36 created new package, moved Interaction class and created Crossing class
Nicolas Saunier <nicolas.saunier@polymtl.ca>
parents:
diff changeset
498