changeset 1112:956a66096e91

removed code now available in simulation project, and issue with deprecated find function in matplotlib
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 05 Jun 2019 13:12:10 -0400
parents 345cd9cd62d8
children 19581a4caf90
files trafficintelligence/cvutils.py trafficintelligence/indicators.py trafficintelligence/moving.py trafficintelligence/pavement.py
diffstat 4 files changed, 4 insertions(+), 73 deletions(-) [+]
line wrap: on
line diff
--- a/trafficintelligence/cvutils.py	Mon May 06 17:13:13 2019 -0400
+++ b/trafficintelligence/cvutils.py	Wed Jun 05 13:12:10 2019 -0400
@@ -7,9 +7,8 @@
 from math import floor, log10, ceil
 from time import time
 
-from numpy import dot, array, append, float32, loadtxt, savetxt, append, zeros, ones, identity, abs as npabs, logical_and, unravel_index, sum as npsum, isnan, mgrid, median, floor as npfloor, ceil as npceil
+from numpy import dot, array, append, float32, loadtxt, savetxt, append, zeros, ones, identity, abs as npabs, logical_and, unravel_index, sum as npsum, isnan, mgrid, median, floor as npfloor, ceil as npceil, nonzero
 from numpy.linalg import inv
-from matplotlib.mlab import find
 from matplotlib.pyplot import imread, imsave, imshow, figure, subplot
 
 try:
@@ -428,7 +427,7 @@
         distx = npabs(map1-x)
         disty = npabs(map2-y)
         indices = logical_and(distx<maxDistance, disty<maxDistance)
-        closeCoordinates = unravel_index(find(indices), distx.shape) # returns i,j, ie y,x
+        closeCoordinates = unravel_index(nonzero(indices), distx.shape) # returns i,j, ie y,x
         xWeights = 1-distx[indices]
         yWeights = 1-disty[indices]
         return dot(xWeights, closeCoordinates[1])/npsum(xWeights), dot(yWeights, closeCoordinates[0])/npsum(yWeights)
--- a/trafficintelligence/indicators.py	Mon May 06 17:13:13 2019 -0400
+++ b/trafficintelligence/indicators.py	Wed Jun 05 13:12:10 2019 -0400
@@ -2,7 +2,6 @@
 '''Class for indicators, temporal indicators, and safety indicators'''
 
 from matplotlib.pyplot import plot, ylim
-from matplotlib.pylab import find
 from numpy import array, arange, mean, floor, mean
 from scipy import percentile
 
--- a/trafficintelligence/moving.py	Mon May 06 17:13:13 2019 -0400
+++ b/trafficintelligence/moving.py	Wed Jun 05 13:12:10 2019 -0400
@@ -1293,71 +1293,6 @@
     def updatePositions(self):
         inter, self.positions, self.velocities = MovingObject.aggregateTrajectories(self.features, self.getTimeInterval())
 
-    def addNewellAttributes(self, desiredSpeed, tau, d, initialCumulatedHeadway, initialAlignmentIdx):
-        '''adds attributes necessary for Newell car following model
-        using curvilinear trajectories'''
-        # Newell model parameters
-        self.desiredSpeed = desiredSpeed
-        self.tau = tau
-        self.d = d
-        self.leader = None
-        # other attributes necessary for computation
-        self.initialCumulatedHeadway = initialCumulatedHeadway
-        self.initialAlignmentIdx = initialAlignmentIdx
-        self.timeAtS0 = None # time at which the vehicle's position is s=0 on the alignment
-
-    def updateCurvilinearPositions(self, method, instant, timeStep, _nextAlignmentIdx = None, maxSpeed = None, acceleration = None):
-        '''Update curvilinear position of user at new instant'''
-        # TODO changer nextAlignmentIdx pour l'alignment en cours, reflechir pour des control devices
-
-        if method == 'newell':
-            if self.curvilinearPositions is None: # vehicle without positions
-                if self.timeAtS0 is None:
-                    if self.leader is None:
-                        self.timeAtS0 = self.initialCumulatedHeadway
-                    elif self.leader.curvilinearPositions is not None and self.leader.curvilinearPositions.getSCoordAt(-1) > self.d and len(self.leader.curvilinearPositions) >=2:
-                        firstInstantAfterD = self.leader.getLastInstant()
-                        while self.leader.existsAtInstant(firstInstantAfterD) and self.leader.getCurvilinearPositionAtInstant(firstInstantAfterD-1)[0] > self.d:# find first instant after d
-                            firstInstantAfterD -= 1 # if not recorded position before self.d, we extrapolate linearly from first known position
-                        leaderSpeed = self.leader.getCurvilinearVelocityAtInstant(firstInstantAfterD-1)[0]
-                        self.timeAtS0 = self.tau + firstInstantAfterD*timeStep - (self.leader.getCurvilinearPositionAtInstant(firstInstantAfterD)[0]-self.d)*timeStep/leaderSpeed # second part is the time at which leader is at self.d
-                        if self.timeAtS0 < self.initialCumulatedHeadway: #obj appears at instant initialCumulatedHeadway at x=0 with desiredSpeed
-                            self.timeAtS0 = self.initialCumulatedHeadway
-                elif instant*timeStep > self.timeAtS0:
-                    #firstInstant = int(ceil(self.timeAtS0/timeStep))# this first instant is instant by definition
-                    leaderInstant = instant-self.tau/timeStep
-                    if self.leader is None:
-                        s = (timeStep*instant-self.timeAtS0)*self.desiredSpeed
-                        self.timeInterval = TimeInterval(instant, instant)
-                        self.curvilinearPositions = CurvilinearTrajectory([s], [0.], [self.initialAlignmentIdx])
-                        self.curvilinearVelocities = CurvilinearTrajectory()
-                    elif self.leader.existsAtInstant(leaderInstant):
-                        self.timeInterval = TimeInterval(instant, instant)
-                        freeFlowCoord = (instant*timeStep - self.timeAtS0)*self.desiredSpeed
-                        # constrainedCoord at instant = xn-1(t = instant*timeStep-self.tau)-self.d
-                        constrainedCoord = self.leader.interpolateCurvilinearPositions(leaderInstant)[0]-self.d
-                        self.curvilinearPositions = CurvilinearTrajectory([min(freeFlowCoord, constrainedCoord)], [0.], [self.initialAlignmentIdx])
-                        self.curvilinearVelocities = CurvilinearTrajectory()
-            else:
-                if _nextAlignmentIdx is not None:
-                    laneChange = (self.curvilinearPositions.getLaneAt(-1), _nextAlignmentIdx)
-                    nextAlignmentIdx = _nextAlignmentIdx
-                else:
-                    laneChange = None
-                    nextAlignmentIdx = self.curvilinearPositions.getLaneAt(-1)
-                s1 = self.curvilinearPositions.getSCoordAt(-1)
-                freeFlowCoord = s1 + self.desiredSpeed*timeStep
-                if self.leader is None:
-                    if self.getLastInstant() < instant:
-                        s2 = freeFlowCoord
-                        self.curvilinearPositions.addPositionSYL(freeFlowCoord, 0., nextAlignmentIdx)
-                else:
-                    constrainedCoord = self.leader.interpolateCurvilinearPositions(instant-self.tau/timeStep)[0]-self.d
-                    s2 = min(freeFlowCoord, constrainedCoord)
-                    self.curvilinearPositions.addPositionSYL(s2, 0., nextAlignmentIdx)
-                self.setLastInstant(instant)
-                self.curvilinearVelocities.addPositionSYL(s2-s1, 0., laneChange)
-
     @staticmethod
     def concatenate(obj1, obj2, num = None, newFeatureNum = None, computePositions = False):
         '''Concatenates two objects, whether overlapping temporally or not
--- a/trafficintelligence/pavement.py	Mon May 06 17:13:13 2019 -0400
+++ b/trafficintelligence/pavement.py	Wed Jun 05 13:12:10 2019 -0400
@@ -143,13 +143,12 @@
 
     weatherDataType is to indicate Environnement Canada data ('ec') or else MTQ
     minProportionMeasures is proportion of measures necessary to consider the indicators'''
-    from matplotlib.mlab import find
     nbre_jours_T_negatif,nbre_jours_gel_degel,pluie_tot,neige_tot,ecart_type_T = 0,0,0,0,0
     compteur,nbre_jours_gel_consecutifs=0,0
     tmoys = []
     seuils_T = [20,15,10,5]
     deltas_T = [0,0,0,0]
-    startIndex = find(data['date'] == startDate)
+    startIndex = np.nonzero(data['date'] == startDate)
     nDays = int((endDate - startDate).days)+1
     if len(startIndex) > 0 and startIndex+nDays <= len(data):
         startIndex = startIndex[0]
@@ -202,13 +201,12 @@
 
 def mtqWeatherIndicators(data, startDate, endDate,tmax,tmin,tmoy):
     print("Deprecated, use weatherIndicators")
-    from matplotlib.mlab import find
     nbre_jours_T_negatif,nbre_jours_gel_degel,ecart_type_T = 0,0,0
     compteur,nbre_jours_gel_consecutifs=0,0
     tmoys = []
     seuils_T = [20,15,10,5]
     deltas_T = [0,0,0,0]
-    startIndex = find(data['date'] == startDate)
+    startIndex = np.nonzero(data['date'] == startDate)
     nDays = (endDate - startDate).days+1
     for i in range(startIndex, startIndex+nDays):
         if tmax[i] < 0: