Beispiel #1
0
    def NOtest_rounding(self):
        """
        This method writes histograms of the input demand and can be
        used to check the differences of the row and column sums
        for two matrices
        """
        projectFolder = "/Users/michalis/Documents/sfcta/testNetworks"
        projectFolder = "/Users/michalis/Documents/sfcta/05252012/"
        prefix = "sfCounty_lisa"
        prefix = "SF_Test_wSig_5_100pct_NetworkReview"
        scenario = DynameqScenario(Time(0, 0), Time(12, 0))
        scenario.read(projectFolder, prefix)

        net = DynameqNetwork(scenario)
        net.read(projectFolder, prefix)

        file1 = "/Users/michalis/Documents/sfcta/05252012/car_notoll_matx.dqt"
        demand1 = Demand.readDynameqTable(net, file1)
        _npyArray1 = demand1._demandTable.getNumpyArray() * 3
        file2 = "/Users/michalis/Documents/sfcta/05252012/vehcountorig_Car_NoToll_matx.dqt"
        demand2 = Demand.readDynameqTable(net, file2)
        pdb.set_trace()
        _npyArray1 = _npyArray1.sum(0)
        _npyArray2 = demand2._demandTable.getNumpyArray().sum(0)

        pdb.set_trace()

        plotTripHistogram(_npyArray1, "carNoTollHistogram1")
        plotTripHistogram(_npyArray2, "carNoTollHistogram2")
Beispiel #2
0
def test_paths(projectFolder, prefix, path_list):

    scenario = dta.DynameqScenario(Time(0, 0), Time(12, 0))
    scenario.read(projectFolder, prefix)
    net = dta.DynameqNetwork(scenario)
    net.read(projectFolder, prefix)

    TEST_PATHS = {
        "geary": [],
        "downtown": [{
            "name": "Mission St from 8th St to 1st St",
            "street": "3rd St",
            "from": "Folsom St",
            "to": "Mission St",
            "answer": [2150, 9001847, 9001848, 9001871, 9001872, 2214]
        }],
    }

    TEST_PATHS["sf"] = TEST_PATHS["geary"] + TEST_PATHS["downtown"]

    paths = TEST_PATHS[path_list]

    for p in paths:
        intersection_list = [[p["street"].upper(), p["from"].upper()],
                             [p["street"].upper(), p["to"].upper()]]

        testPath = Path.createPath(net, p["name"], intersection_list)
        testPathLinkList = [l.getId() for l in testPath.iterLinks()]
        print "CODE GOT :", testPathLinkList
        print "ANSWER IS:", p['answer']
        assert p['answer'] == testPathLinkList
Beispiel #3
0
    def test_1iterPlanInfo(self):

        net = getSimpleNet()
        net.addPlanCollectionInfo(Time(7, 0), Time(9, 0), "test1", "test1")
        net.addPlanCollectionInfo(Time(6, 0), Time(8, 0), "test2", "test2")

        for pInfo in net.iterPlanCollectionInfo():
            pInfo
Beispiel #4
0
def getTestScenario(): 

    
    prefix = 'smallTestNet' 

    scenario = DynameqScenario(Time(0,0), Time(12,0))
    scenario.read(projectFolder, prefix) 

    return scenario
Beispiel #5
0
def getTestScenario():

    projectFolder = os.path.join(mainFolder, 'dynameqNetwork_gearySubset')
    prefix = 'smallTestNet'

    scenario = DynameqScenario(Time(0, 0), Time(12, 0))
    scenario.read(projectFolder, prefix)

    return scenario
Beispiel #6
0
    def readDynameqTable(cls, net, fileName):
        """
        Read the dynameq demand stored in the *fileName* that pertains to *net*, a :py:class:`Network` instance.
        This method reads only rectangular demand tables. 
        """
        DYNAMEQ_FORMAT_FULL = "FORMAT:full"

        input = open(fileName, "rb")

        input.next()  # <DYNAMEQ>
        input.next()  # <VERSION>
        input.next()  # <MATRIX_FILE>
        input.next()  # * comment
        line = input.next().strip()
        if line != DYNAMEQ_FORMAT_FULL:
            raise DtaError("I cannot read a demand format other than %s" %
                           Demand.FORMAT_FULL)
        input.next()  # VEH_CLASS
        line = input.next().strip()

        vehClassName = line
        input.next()  #DATA
        line = input.next().strip()

        startTime = Time.readFromString(line)
        line = input.next().strip()
        endTime = Time.readFromString(line)

        line = input.next().strip()  #SLICE
        assert line == "SLICE"
        line = input.next().strip()  # first time slice

        timeSlice1 = Time.readFromString(line)

        timeStep = timeSlice1 - startTime
        if timeStep.getMinutes() == 0:
            raise DtaError(
                "The time step defined by the first slice cannot be zero")

        demand = Demand(net, vehClassName, startTime, endTime, timeStep)
        _npyArray = demand._demandTable.getNumpyArray()

        timeStepInMin = timeStep.getMinutes()

        for i, timePeriod in enumerate(demand.iterTimePeriods()):
            if timePeriod != demand.startTime + demand.timeStep:
                line = input.next().strip()
                assert line == "SLICE"
                line = input.next().strip()
            destinations = map(int, input.next().strip().split())
            for j, origin in enumerate(range(net.getNumCentroids())):
                fields = map(float, input.next().strip().split())
                #_npyArray[i,j,:] = np.array(fields[1:]) / ( 60.0 / timeStepInMin)
                _npyArray[i, j, :] = np.array(fields[1:])

        return demand
Beispiel #7
0
    def test_cmp(self):

        t1 = Time(7, 30)
        t2 = Time(7, 45)
        t3 = Time(7, 30)

        assert t1 < t2
        assert not t1 < t3
        assert t1 == t3
        assert t1 != t2
Beispiel #8
0
    def test_getPlanInfo(self):

        net = getSimpleNet()
        net.addPlanCollectionInfo(Time(7, 0), Time(9, 0), "test1", "test1")

        pi = net.getPlanCollectionInfo(Time(7, 0), Time(9, 0))

        start, end = pi.getTimePeriod()
        assert start.getMinutes() == 7 * 60
        assert end.getMinutes() == 9 * 60
Beispiel #9
0
    def test_1getTimePeriods(self):

        net = getTestNet()

        startTime = Time(8, 30)
        endTime = Time(9, 30)
        timeStep = Time(0, 15)
        demand = Demand(net, "Default", startTime, endTime, timeStep)

        print[tp for tp in demand.iterTimePeriods()]
Beispiel #10
0
def getDowntownSF():

    projectFolder = os.path.join(mainFolder, 'dynameqNetwork_downtownSF')
    prefix = 'sfDowntown'

    scenario = DynameqScenario(Time(0, 0), Time(12, 0))
    scenario.read(projectFolder, prefix)
    net = DynameqNetwork(scenario)
    net.read(projectFolder, prefix)

    return net
Beispiel #11
0
    def test_hash(self):

        t1 = Time(7, 30)
        t2 = t1 + Time(0, 15)
        t3 = Time(7, 30)

        result = {}
        result[t1] = 1
        result[t2] = 2
        result[t3] = 3

        print result
Beispiel #12
0
    def test_readScenario(self):

        net = getGearySubNet()
        projectFolder = os.path.join(mainFolder, 'dynameqNetwork_gearySubset')

        prefix = 'smallTestNet'
        sc = DynameqScenario(Time(0, 0), Time(12, 0))
        sc.read(projectFolder, prefix)

        assert 'All' in sc.vehicleClassGroups.keys()
        assert 'Transit' in sc.vehicleClassGroups.keys()
        assert 'Prohibited' in sc.vehicleClassGroups.keys()
Beispiel #13
0
def getCubeSubarea():

    projectFolder = os.path.join(mainFolder,
                                 'cubeSubarea_downtownSF/dynameqNetwork')
    prefix = 'sf'

    scenario = DynameqScenario(Time(0, 0), Time(12, 0))
    scenario.read(projectFolder, prefix)
    net = DynameqNetwork(scenario)
    net.read(projectFolder, prefix)

    return net
Beispiel #14
0
    def test_readCubeDemand(self):

        fileName = os.path.join(os.path.dirname(__file__), '..', 'testdata',
                                'dynameqNetwork_gearySubset',
                                'cubeTestDemand.txt')

        net = getTestNet()

        demand = Demand.readCubeODTable(fileName, net, "AUTO", Time(7, 0),
                                        Time(8, 0))

        assert demand.getValue(Time(8, 0), 2, 6) == 1000
        assert demand.getValue(Time(8, 0), 6, 2) == 4000
Beispiel #15
0
    def NOtest_applyTimeOfDayFactors(self):

        fileName = os.path.join(os.path.dirname(__file__), '..', 'testdata',
                                'dynameqNetwork_gearySubset',
                                'cubeTestDemand.txt')

        net = getTestNet()
        demand = Demand.readCubeODTable(fileName, net, "AUTO", Time(7, 0),
                                        Time(8, 0))

        d2 = demand.applyTimeOfDayFactors([0.5, 0.5])

        assert d2.getValue(730, 2, 6) == 500
        assert d2.getValue(800, 2, 6) == 500
Beispiel #16
0
    def getVolumesAlongCorridor(self, startTimeInMin, endTimeInMin):
        """Generator method that returns the edge, leftTurn and right turn
        volumes for all the links on the route
        """
        linkOutVolumes = []
        linkInVolumes = []
        leftTurnVolumes = []
        rightTurnVolumes = []
        thruCapacities = []

        start = Time(startTimeInMin / 60, startTimeInMin % 60)
        end = Time(endTimeInMin / 60, endTimeInMin % 60)
        if self._net.hasPlanCollectionInfo(start, end):
            planInfo = self._net.getPlanCollectionInfo(start, end)
        else:
            planInfo = None

        for edge in self._path.iterLinks():
            edgeVolume = edge.getSimOutVolume(startTimeInMin, endTimeInMin)
            edgeInVolume = edge.getSimInVolume(startTimeInMin, endTimeInMin)
            leftTurnVolume = 0
            rightTurnVolume = 0
            if edge.hasLeftTurn():
                leftTurn = edge.getLeftTurn()
                leftTurnVolume = leftTurn.getSimOutVolume(
                    startTimeInMin, endTimeInMin)
            else:
                leftTurn = 0
            if edge.hasRightTurn():
                rightTurn = edge.getRightTurn()
                rightTurnVolume = rightTurn.getSimOutVolume(
                    startTimeInMin, endTimeInMin)
            else:
                rightTurn = 0
            if edge.hasThruTurn() and planInfo:
                thruTurn = edge.getThruTurn()
                try:
                    thruCapacity = thruTurn.getCapacity(planInfo=planInfo)
                except DtaError, e:
                    thruCapacity = 0
            else:
                thruCapacity = 0

            linkOutVolumes.append(edgeVolume)
            linkInVolumes.append(edgeInVolume)
            leftTurnVolumes.append(leftTurnVolume)
            rightTurnVolumes.append(rightTurnVolume)
            thruCapacities.append(thruCapacity)
Beispiel #17
0
    def test_readWrite(self):

        projectFolder = os.path.join(os.path.dirname(__file__), '..', "test")
        prefix = 'test'

        scenario = DynameqScenario(Time(0, 0), Time(12, 0))
        scenario.read(projectFolder, prefix)

        net = DynameqNetwork(scenario)
        net.read(projectFolder, prefix)

        net.write("test", "crossHair")

        net.moveCentroidConnectorsFromIntersectionsToMidblocks()

        net.write("test", "crossHair3")
Beispiel #18
0
def getTestNet():

    projectFolder = os.path.join(os.path.dirname(__file__), '..', 'testdata',
                                 'dynameqNetwork_gearySubset')
    prefix = 'smallTestNet'

    scenario = DynameqScenario(Time(0, 0), Time(12, 0))
    scenario.read(projectFolder, prefix)
    #nose.tools.set_trace()

    dta.VehicleType.LENGTH_UNITS = "feet"
    dta.Node.COORDINATE_UNITS = "feet"
    dta.RoadLink.LENGTH_UNITS = "miles"

    net = DynameqNetwork(scenario)
    net.read(projectFolder, prefix)
    return net
Beispiel #19
0
    def test_addAndSubstract(self):

        t1 = Time(7, 30)
        t2 = t1 + Time(0, 15)
        assert t2 == Time(7, 45)
        t3 = t2 + Time(0, 15)
        assert t3 == Time(8, 0)
        assert t2 == t3 - Time(0, 15)

        assert t1.getMinutes() == 7 * 60 + 30
Beispiel #20
0
    def _getTimePeriods(self, startTime, endTime, timeStep):
        """
        Return the time labels of the different time slices as a list of :py:class:`dta.Utils.Time` instances.
        Each time in the list is the *end* of the time slice.
        """
        if ((endTime - startTime) % timeStep) != 0:
            raise DtaError(
                "Demand interval is not divisible by the demand time step")

        result = []
        #TODO: this is interesting. The following line fails
        #time = copy.deepcopy(startTime)
        time = Time(startTime.hour, startTime.minute)
        while time != endTime:
            time += timeStep
            result.append(time)

        return result
Beispiel #21
0
    def test_plotHistogram(self):

        fileName = os.path.join(os.path.dirname(__file__), '..', 'testdata',
                                'dynameqNetwork_gearySubset',
                                'gearysubnet_matx.dqt')

        net = getTestNet()
        demand = Demand.readDynameqTable(net, fileName)

        for startTime in range(0, 45, 15):
            for o in net.iterCentroids():
                for d in net.iterCentroids():
                    demand.setValue(Time(0, startTime + 15), o.getId(),
                                    d.getId(),
                                    random.random() * 10)

        _npyArray = demand._demandTable.getNumpyArray()

        plotTripHistogram(_npyArray, "tripHistogram")
Beispiel #22
0
    def applyTimeOfDayFactors(self, factorsInAList):
        """
        Apply the given time of day factors to the existing 
        demand object and return a new demand object with as many 
        time slices as the number of factors. Each time slice is 
        the result of the original table multiplied by a factor 
        in the list. 
        """
        #raise Exception("This is not the correct implementation. Change it")
        if self.getNumSlices() != 1:
            raise DtaError(
                "Time of day factors can be applied only to a demand that has only"
                " one time slice")
        for i in range(0, len(factorsInAList)):
            factorsInAList[i] = float(factorsInAList[i])

        if abs(sum(factorsInAList) - 1.) > 0.0000001:
            raise DtaError(
                "The input time of day factors should sum up to 1.0.  Factors are %s"
                % factorsInAList)

        newTimeStepInMin = self.timeStep.getMinutes() / len(factorsInAList)
        newTimeStep = Time.fromMinutes(newTimeStepInMin)

        newDemand = Demand(self._net, self.vehClassName, self.startTime,
                           self.endTime, newTimeStep)
        #timeSpan = (newDemand.endTime - newDemand.startTime).getMinutes()/60.0
        oldDemand = 0
        sliceDemand = []
        for k, timeSlice in enumerate(newDemand._timePeriods):
            sliceDemand.append(0)
        for origin in self._centroidIds:
            for destination in self._centroidIds:
                tripsOD_Old = self.getValue(self.endTime, origin,
                                            destination) * len(factorsInAList)
                for k, timeSlice in enumerate(newDemand._timePeriods):
                    tripsOD = factorsInAList[k] * tripsOD_Old
                    newDemand.setValue(timeSlice, origin, destination, tripsOD)

        return newDemand
Beispiel #23
0
    def test_1read(self):

        fileName = os.path.join(os.path.dirname(__file__), '..', 'testdata',
                                'dynameqNetwork_gearySubset',
                                'gearysubnet_matx.dqt')

        net = getTestNet()

        demand = Demand.readDynameqTable(net, fileName)
        assert demand.getNumSlices() == 4

        assert demand.getValue(Time(0, 15), 56, 8) == 4000
        assert demand.getValue(Time(0, 45), 8, 2) == 34

        demand.setValue(Time(0, 45), 8, 2, 35)
        assert demand.getValue(Time(0, 45), 8, 2) == 35

        demand.setValue(Time(0, 15), 56, 8, 4001)
        assert not demand.getValue(Time(0, 15), 56, 8) == 4000
        assert demand.getValue(Time(0, 15), 56, 8) == 4001
Beispiel #24
0
    def test_volumes(self):

        net = getGearySubNet()
        
        net.addPlanCollectionInfo(Time(7, 0), Time(9, 0), "test1", "test1")
        pi = net.getPlanCollectionInfo(Time(7, 0), Time(9, 0))

        node = net.getNodeForId(25956)
                
        for link in node.iterIncomingLinks():
            for mov in link.iterOutgoingMovements(): 
                if mov.isUTurn():
                    link.prohibitOutgoingMovement(mov) 
                    
                
        tp = dta.TimePlan(node, 0, pi)
        p1 = dta.Phase(tp, 40, 3, 2)
        p1Movs = [mov for mov in net.getLinkForId(101674).iterOutgoingMovements()]
        p1Movs.extend([mov for mov in net.getLinkForId(14597).iterOutgoingMovements()])

        for mov in p1Movs:
            
            pMov = PhaseMovement(mov, 1)
            if pMov.getMovement().isUTurn():
                continue
            if mov.isLeftTurn():
                pMov.setPermitted() 
            p1.addPhaseMovement(pMov)

        p2 = dta.Phase(tp, 40, 3, 2) 
        p2Movs = [mov for mov in net.getLinkForId(14620).iterOutgoingMovements()]
        p2Movs.extend([mov for mov in net.getLinkForId(14582).iterOutgoingMovements()])

        for mov in p2Movs:
            pMov = PhaseMovement(mov, 1)
            if pMov.getMovement().isUTurn():
                continue 
            if mov.isLeftTurn():
                pMov.setPermitted()
            p2.addPhaseMovement(pMov)


        tp.addPhase(p1)
        tp.addPhase(p2)

        node.addTimePlan(tp)

        mov = net.getLinkForId(101674).getOutgoingMovement(25958)
        mov.getProtectedCapacity(planInfo=pi) 
        
        net.writeLinksToShp("gearySubnet_links")
        net.writeNodesToShp("gearySubnet_nodes")
        
        link1 = net.getLinkForId(14834)
        link2 = net.getLinkForId(14539)
        
        pathLinks = dta.Algorithms.ShortestPaths.getShortestPathBetweenLinks(net, link1, link2, runSP=True)

        path = dta.Path(net, "test", pathLinks)
        print [link.getId() for link in pathLinks]
        volumesVsCounts = dta.CorridorPlots.CountsVsVolumes(net, path, False)
        #VC = VolumesVsCounts(net, path, False)

        names = volumesVsCounts.getIntersectionNames()
        locations = volumesVsCounts.getIntersectionLocations()
        volumes = volumesVsCounts.getVolumesAlongCorridor(0, 60)

        volumes2 = volumesVsCounts.getMovementVolumesCrossingCorridor(0, 60)

        print volumes2
        
        print "names=", volumesVsCounts.getIntersectionNames()
        print "locations=", volumesVsCounts.getIntersectionLocations()

        print "volumes=", volumesVsCounts.getVolumesAlongCorridor(0, 60)
        volumesVsCounts.writeVolumesVsCounts(0, 60, 'testplot2')
Beispiel #25
0
    def test_mod(self):

        t1 = Time(7, 30)

        assert t1 % Time(0, 15) == 0
        assert not t1 % Time(0, 16) == 0
Beispiel #26
0
    #magic numbers here. This information may (or may not) be somewhere in the .dqt files 
    simStartTime = 14 * 60 + 30
    simEndTime = 21 * 60 + 30
    simTimeStep = 5
    net.readSimResults(simStartTime, simEndTime, 5)

    DtaLogger.info("Reading 15-minute link counts")
    net.readObsLinkCounts(COUNT_DIR + "/" + LINK_COUNT_FILE_15MIN)
    DtaLogger.info("Reading 15-minute movement counts")
    net.readObsMovementCounts(COUNT_DIR + "/" + MOVEMENT_COUNT_FILE_15MIN)
    DtaLogger.info("Reading 5-minute movement counts")
    net.readObsMovementCounts(COUNT_DIR + "/" + MOVEMENT_COUNT_FILE_5MIN)
    

    reportStartTime = Time.readFromString(REPORTING_START_TIME).getMinutes()
    reportEndTime = Time.readFromString(REPORTING_END_TIME).getMinutes()

    routeTTOuput = open(REPORTS_ROUTE_TRAVEL_TIME_FILE, "w") 

    routeTTOuput.write("%s,%s,%s,%s,%s\n" % ("RouteName", "SimTravelTimeInMin", "ObsTravelTimeInMin", "SimRouteLengthInMiles", "ObsRouteLengthInMiles"))

    allRoutes = []
    for record in csv.DictReader(open(ROUTE_DEFINITION_FILE, "r")):
        streetNames = []

        name = record["RouteName"].strip()
        regex = re.compile(r",| AND|\&|\@|\ AT|\/")
        streetNames = regex.split(name)
        #streetNames_cleaned = [net.cleanStreetName(nm) for nm in streetNames]
Beispiel #27
0
        if not (link.hasCountInfo() or link.hasMovementCountInfo()):
            continue

        # writes once every specified interval minutes interval, aggregating  to specified min intervals
        for sTime in range(simStartTime, simEndTime - 1, simTimeStep):
            if sTime + reportingTimeStep >= simEndTime:
                continue

            # first try writing any link counts
            if link.hasObsCount(sTime, sTime + reportingTimeStep):
                outputStream.write("%d," % link.getId())
                outputStream.write("%s," % link.getLabel())
                outputStream.write("%d," % link.getFacilityType())
                outputStream.write("%d," % link.getFreeFlowSpeedInMPH())
                outputStream.write("%d," % link.getNumLanes())
                outputStream.write("%s," % Time.fromMinutes(sTime))
                outputStream.write("%s," %
                                   Time.fromMinutes(sTime + reportingTimeStep))
                outputStream.write(
                    "%d," % link.getObsCount(sTime, sTime + reportingTimeStep))
                outputStream.write(
                    "%d\n" %
                    link.getSimOutVolume(sTime, sTime + reportingTimeStep))
            # then try summing the movement counts
            elif link.hasAllMovementCounts(sTime, sTime + reportingTimeStep):
                outputStream.write("%d," % link.getId())
                outputStream.write("%s," % link.getLabel())
                outputStream.write("%d," % link.getFacilityType())
                outputStream.write("%d," % link.getFreeFlowSpeedInMPH())
                outputStream.write("%d," % link.getNumLanes())
                outputStream.write("%s," % Time.fromMinutes(sTime))