|
32 | 32 | "train": ("HSL-juna-2", "muu_juna", "HSL-juna-1", "HSL-juna-3"), |
33 | 33 | "tram": ("ratikka", "pikaratikk"), |
34 | 34 | } |
| 35 | +TRANSIT_AGGREGATIONS_FALLBACK = { |
| 36 | + "bus": ("HSL-bussi", "ValluVakio", "ValluPika"), |
| 37 | + "trunk": ("HSL-runkob", ), |
| 38 | + "train": ("HSL-juna", "muu_juna"), |
| 39 | + "tram": ("ratikka", "pikaratikk"), |
| 40 | +} |
35 | 41 |
|
36 | 42 | TRANSLATIONS = { |
37 | 43 | "car_work": "ha_tyo", |
@@ -209,13 +215,18 @@ def run_cost_benefit_analysis(scenario_0, scenario_1, year, workbook): |
209 | 215 | noise_diff = read(NOISE_FILE, scenario_1) - read(NOISE_FILE, scenario_0) |
210 | 216 | ws[CELL_INDICES["noise"][year]] = sum(noise_diff["population"]) |
211 | 217 |
|
| 218 | + transit_vehicle_kms_tables = [read(TRANSIT_KMS_FILE, scenario_0), read(TRANSIT_KMS_FILE, scenario_1)] |
| 219 | + for transit_vehicle_kms in transit_vehicle_kms_tables: |
| 220 | + if all(submode in transit_vehicle_kms.index for submodes in TRANSIT_AGGREGATIONS.values() for submode in submodes): |
| 221 | + transit_aggs = TRANSIT_AGGREGATIONS |
| 222 | + else: |
| 223 | + transit_aggs = TRANSIT_AGGREGATIONS_FALLBACK |
| 224 | + for mode in transit_aggs: |
| 225 | + transit_vehicle_kms.loc[mode] = 0 # Change aggregated mode to 0 |
| 226 | + for submode in transit_aggs[mode]: # Go through the submodes and add their values to the aggregated mode |
| 227 | + transit_vehicle_kms.loc[mode] += transit_vehicle_kms.loc[submode] |
212 | 228 | # Calculate transit mile differences |
213 | | - transit_mile_diff = (read(TRANSIT_KMS_FILE, scenario_1) |
214 | | - - read(TRANSIT_KMS_FILE, scenario_0)) |
215 | | - for mode in TRANSIT_AGGREGATIONS: |
216 | | - transit_mile_diff.loc[mode] = 0 |
217 | | - for submode in TRANSIT_AGGREGATIONS[mode]: |
218 | | - transit_mile_diff.loc[mode] += transit_mile_diff.loc[submode] |
| 229 | + transit_mile_diff = transit_vehicle_kms_tables[1] - transit_vehicle_kms_tables[0] |
219 | 230 | ws = workbook["Tuottajahyodyt"] |
220 | 231 | cols = CELL_INDICES["transit_miles"]["cols"] |
221 | 232 | rows = CELL_INDICES["transit_miles"]["rows"][year] |
@@ -419,6 +430,13 @@ def calc_revenue(demands, costs): |
419 | 430 | help="Path to Results directory.") |
420 | 431 | args = parser.parse_args() |
421 | 432 | log.initialize(args) |
| 433 | + |
| 434 | + matching_vehicle_kms_cols = list(read(VEHICLE_KMS_FILE, args.baseline_scenario).columns) == list(read(VEHICLE_KMS_FILE, args.projected_scenario).columns) |
| 435 | + matching_transit_kms_rows = list(read(TRANSIT_KMS_FILE, args.baseline_scenario).index) == list(read(TRANSIT_KMS_FILE, args.projected_scenario).index) |
| 436 | + if not (matching_vehicle_kms_cols and matching_transit_kms_rows): |
| 437 | + msg = "The data structure of transit_kms.txt or vehicle_kms_vdf.txt is different between scenarios. Check the results folders of scenarios being compared." |
| 438 | + log.error(msg) |
| 439 | + raise KeyError(msg) |
422 | 440 | wb = load_workbook(os.path.join(SCRIPT_DIR, "CBA_kehikko.xlsx")) |
423 | 441 | results = run_cost_benefit_analysis( |
424 | 442 | args.baseline_scenario, args.projected_scenario, 1, wb) |
|
0 commit comments