From a7148b7b157d2671e0730ba698680b4ceec7b737 Mon Sep 17 00:00:00 2001 From: simei94 Date: Fri, 22 Mar 2024 17:56:07 -0600 Subject: [PATCH] scale counts to model scale --- Makefile | 3 + .../org/matsim/prepare/AdaptCountsScale.java | 66 +++++++++++++++++++ .../org/matsim/run/RunMexicoCityScenario.java | 2 +- 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/matsim/prepare/AdaptCountsScale.java diff --git a/Makefile b/Makefile index cd1cfcd..f57c56f 100644 --- a/Makefile +++ b/Makefile @@ -176,6 +176,9 @@ input/mexico-city-v1.0.counts_car.2017.xml: ../../public-svn/matsim/scenarios/co --manual-matched-counts input/manualLinkAssignment.csv\ --year 2017 + $(sc) prepare scale-counts\ + --input $@ + # create first scenario specific config input/mexico-city-v1.0-1pct.input.config.xml: ./input/v1.0 ./input $(sc) prepare config\ diff --git a/src/main/java/org/matsim/prepare/AdaptCountsScale.java b/src/main/java/org/matsim/prepare/AdaptCountsScale.java new file mode 100644 index 0000000..c1f10f8 --- /dev/null +++ b/src/main/java/org/matsim/prepare/AdaptCountsScale.java @@ -0,0 +1,66 @@ +package org.matsim.prepare; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.matsim.api.core.v01.TransportMode; +import org.matsim.api.core.v01.network.Link; +import org.matsim.application.MATSimAppCommand; +import org.matsim.counts.*; +import picocli.CommandLine; + +import java.nio.file.Path; +import java.util.OptionalDouble; + +@CommandLine.Command(name = "scale-counts", description = "Set MATSim count to the wished scale.") +public class AdaptCountsScale implements MATSimAppCommand { + private Logger log = LogManager.getLogger(AdaptCountsScale.class); + + @CommandLine.Option(names = "--input", description = "input counts file", required = true) + Path input; + @CommandLine.Option(names = "--output", description = "output counts file") + Path output; + @CommandLine.Option(names = "--scale", description = "scale to be applied to count values.", defaultValue = "1") + double scale; + @CommandLine.Option(names = "--mode", description = "Transport mode of counts.", defaultValue = TransportMode.car) + String mode; + + + public static void main(String[] args) { + new AdaptCountsScale().execute(args); + } + + @Override + public Integer call() throws Exception { + + Counts counts = new Counts<>(); + + MatsimCountsReader reader = new MatsimCountsReader(counts); + reader.readFile(input.toString()); + + for (MeasurementLocation loc : counts.getMeasureLocations().values()) { + for (int i = 0; i < 24; i++) { + OptionalDouble volume = loc.getVolumesForMode(mode).getAtHour(i); + double hourlyVolume; + if (volume.isPresent()) { + hourlyVolume = volume.getAsDouble(); + } else { + return 2; + } + loc.getVolumesForMode(mode).setAtHour(i, hourlyVolume * scale / 100); + } + } + + counts.setDescription(counts.getDescription() + ". A scale of " + scale + "% was applied to the hourly count values."); + + String outputPath = input.toString(); + if (MexicoCityUtils.isDefined(output)) { + outputPath = output.toString(); + } + + new CountsWriter(counts).write(outputPath); + + log.info("Counts with an applied scale of {} % were written to {}.", scale, outputPath); + + return 0; + } +} diff --git a/src/main/java/org/matsim/run/RunMexicoCityScenario.java b/src/main/java/org/matsim/run/RunMexicoCityScenario.java index 4239180..08ba822 100644 --- a/src/main/java/org/matsim/run/RunMexicoCityScenario.java +++ b/src/main/java/org/matsim/run/RunMexicoCityScenario.java @@ -52,7 +52,7 @@ @CommandLine.Command(header = ":: Open Mexico-City Scenario ::", version = RunMexicoCityScenario.VERSION, mixinStandardHelpOptions = true) @MATSimApplication.Prepare({ - AdjustActivityToLinkDistances.class, ChangeFacilities.class, ChangeModeNames.class, CheckActivityFacilities.class, CheckCarAvailability.class, CleanNetwork.class, CorrectPtVehicleTypes.class, + AdaptCountsScale.class, AdjustActivityToLinkDistances.class, ChangeFacilities.class, ChangeModeNames.class, CheckActivityFacilities.class, CheckCarAvailability.class, CleanNetwork.class, CorrectPtVehicleTypes.class, CreateCommuterRelations.class, CreateCountsFromDatosVialesPortal.class, CreateLandUseShp.class, CreateMATSimFacilities.class, CreateMetropolitanAreaPopulation.class, CreateMexicoCityPopulation.class, CreateMexicoCityScenarioConfig.class, CreateMexicoCityNetworkFromSumo.class, CreateTransitScheduleFromGtfs.class, CreateVehicleTypes.class, DownSamplePopulation.class, ExtractHomeCoordinates.class, FixSubtourModes.class, GenerateShortDistanceTrips.class, InitLocationChoice.class, MergePopulations.class,