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")
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
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
def getTestScenario(): prefix = 'smallTestNet' scenario = DynameqScenario(Time(0,0), Time(12,0)) scenario.read(projectFolder, prefix) return scenario
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
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
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
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
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()]
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
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
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()
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
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
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
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)
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")
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
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
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
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")
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
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
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')
def test_mod(self): t1 = Time(7, 30) assert t1 % Time(0, 15) == 0 assert not t1 % Time(0, 16) == 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]
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))