# matsim-scenarios/matsim-berlin architecture

> Architecture diagram of the GitHub repository matsim-scenarios/matsim-berlin, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/matsim-scenarios/matsim-berlin
- Repository: https://github.com/matsim-scenarios/matsim-berlin

## Overview

This repository provides the Open Berlin transport scenario for MATSim. Its central workflow is to prepare scenario inputs, run a configured transport simulation, then inspect and calibrate results against traffic counts, modal split and trip-distance distributions. The tree also shows population, network and facility preparation, specialized DRT and accessibility runs, and analysis dashboards. The README documents the main run entry point and calibration goals; sampled code confirms some analysis and DRT details, but not the wiring of most preparation or calibration modules.

Main entry points: [`src/main/java/org/matsim/run/RunOpenBerlinScenario.java`](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/RunOpenBerlinScenario.java) (Scenario runner), [`src/main/java/org/matsim/run/OpenBerlinDrtScenario.java`](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/OpenBerlinDrtScenario.java) (DRT scenario runner), [`src/main/java/org/matsim/run/scoring/AdvancedScoringModule.java`](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/scoring/AdvancedScoringModule.java) (Advanced scoring), [`src/main/java/org/matsim/legacy/run/accessibility/RunBerlinScenarioWithAccessibilities.java`](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/legacy/run/accessibility/RunBerlinScenarioWithAccessibilities.java) (Accessibility run)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_prep["Scenario preparation"]
  node_prep_data["Population preparation"]
  node_network["Network preparation<br/>[ModifyNetwork.java]"]
  node_facilities["Facility preparation"]
  node_counts["Count preparation"]
end

subgraph group_simulation["Simulation"]
  node_run["Scenario runner"]
  node_scenario["Scenario configuration"]
  node_matsim{{"MATSim simulation"}}
  node_drt_run["DRT scenario runner"]
  node_scoring["Advanced scoring"]
  node_accessibility["Accessibility run"]
end

subgraph group_calibration["Calibration"]
  node_count_opt["Count optimization"]
  node_plan_choices["Plan choice tools"]
  node_trip_choices["Trip choice tools"]
  node_python_models["Choice estimation"]
end

subgraph group_analysis["Analysis"]
  node_dtv["Traffic analysis<br/>[DTVAnalysis.java]"]
  node_travel_time["Travel-time analysis"]
  node_emissions["Emissions analysis"]
  node_emission_handler["Link emission aggregation"]
  node_dashboard["DTV dashboard"]
end

node_user(("Scenario user"))

node_user -->|"starts run"| node_run
node_run -->|"configures"| node_scenario
node_run -->|"runs simulation"| node_matsim
node_drt_run -->|"runs DRT"| node_matsim
node_accessibility -->|"runs scenario"| node_matsim
node_scoring -->|"scores plans"| node_matsim
node_emission_handler -->|"aggregates events"| node_emissions
node_dtv -.->|"supplies comparison"| node_dashboard

click node_prep_data "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/population/CreateBerlinPopulation.java"
click node_network "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/network/ModifyNetwork.java"
click node_facilities "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/facilities/CreateMATSimFacilities.java"
click node_counts "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/counts/CreateCountsFromVMZ.java"
click node_run "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/RunOpenBerlinScenario.java"
click node_scenario "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/OpenBerlinScenario.java"
click node_drt_run "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/OpenBerlinDrtScenario.java"
click node_scoring "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/scoring/AdvancedScoringModule.java"
click node_count_opt "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/opt/RunCountOptimization.java"
click node_plan_choices "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/choices/ComputePlanChoices.java"
click node_trip_choices "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/choices/ComputeTripChoices.java"
click node_python_models "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/python/choicemodels/estimate_mixed_plan_choice.py"
click node_dtv "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/analysis/DTVAnalysis.java"
click node_travel_time "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/analysis/TravelTimeComparison.java"
click node_emissions "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/legacy/analysis/emissions/RunOfflineAirPollutionAnalysisByEngineInformation.java"
click node_emission_handler "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/legacy/analysis/emissions/EmissionsOnLinkHandler.java"
click node_dashboard "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/dashboard/DTVComparisonDashboard.java"
click node_accessibility "https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/legacy/run/accessibility/RunBerlinScenarioWithAccessibilities.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_prep_data,node_network,node_facilities,node_counts,node_user toneBlue
class node_run,node_scenario,node_matsim,node_drt_run,node_scoring,node_accessibility toneAmber
class node_count_opt,node_plan_choices,node_trip_choices,node_python_models toneMint
class node_dtv,node_travel_time,node_emissions,node_emission_handler,node_dashboard toneRose
```

## Components

### Scenario preparation

- [Population preparation](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/population/CreateBerlinPopulation.java): `src/main/java/org/matsim/prepare/population/CreateBerlinPopulation.java`
- [Network preparation](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/network/ModifyNetwork.java): `src/main/java/org/matsim/prepare/network/ModifyNetwork.java`
- [Facility preparation](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/facilities/CreateMATSimFacilities.java): `src/main/java/org/matsim/prepare/facilities/CreateMATSimFacilities.java`
- [Count preparation](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/counts/CreateCountsFromVMZ.java): `src/main/java/org/matsim/prepare/counts/CreateCountsFromVMZ.java`

### Simulation

- [Scenario runner](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/RunOpenBerlinScenario.java): `src/main/java/org/matsim/run/RunOpenBerlinScenario.java`
- [Scenario configuration](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/OpenBerlinScenario.java): `src/main/java/org/matsim/run/OpenBerlinScenario.java`
- **MATSim simulation**
- [DRT scenario runner](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/OpenBerlinDrtScenario.java): `src/main/java/org/matsim/run/OpenBerlinDrtScenario.java`
- [Advanced scoring](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/run/scoring/AdvancedScoringModule.java): `src/main/java/org/matsim/run/scoring/AdvancedScoringModule.java`
- [Accessibility run](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/legacy/run/accessibility/RunBerlinScenarioWithAccessibilities.java): `src/main/java/org/matsim/legacy/run/accessibility/RunBerlinScenarioWithAccessibilities.java`

### Calibration

- [Count optimization](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/opt/RunCountOptimization.java): `src/main/java/org/matsim/prepare/opt/RunCountOptimization.java`
- [Plan choice tools](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/choices/ComputePlanChoices.java): `src/main/java/org/matsim/prepare/choices/ComputePlanChoices.java`
- [Trip choice tools](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/prepare/choices/ComputeTripChoices.java): `src/main/java/org/matsim/prepare/choices/ComputeTripChoices.java`
- [Choice estimation](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/python/choicemodels/estimate_mixed_plan_choice.py): `src/main/python/choicemodels/estimate_mixed_plan_choice.py`

### Analysis

- [Traffic analysis](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/analysis/DTVAnalysis.java): `src/main/java/org/matsim/analysis/DTVAnalysis.java`
- [Travel-time analysis](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/analysis/TravelTimeComparison.java): `src/main/java/org/matsim/analysis/TravelTimeComparison.java`
- [Emissions analysis](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/legacy/analysis/emissions/RunOfflineAirPollutionAnalysisByEngineInformation.java): `src/main/java/org/matsim/legacy/analysis/emissions/RunOfflineAirPollutionAnalysisByEngineInformation.java`
- [Link emission aggregation](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/legacy/analysis/emissions/EmissionsOnLinkHandler.java): `src/main/java/org/matsim/legacy/analysis/emissions/EmissionsOnLinkHandler.java`
- [DTV dashboard](https://github.com/matsim-scenarios/matsim-berlin/blob/release/v6/src/main/java/org/matsim/dashboard/DTVComparisonDashboard.java): `src/main/java/org/matsim/dashboard/DTVComparisonDashboard.java`

### Other components

- **Scenario user**

## Connections

- Scenario user → Scenario runner: starts run
- Scenario runner → Scenario configuration: configures
- Scenario runner → MATSim simulation: runs simulation
- DRT scenario runner → MATSim simulation: runs DRT
- Accessibility run → MATSim simulation: runs scenario
- Advanced scoring → MATSim simulation: scores plans
- Link emission aggregation → Emissions analysis: aggregates events
- Traffic analysis → DTV dashboard: supplies comparison
