# triangle-modeling-and-analytics/trmg2 architecture

> Architecture diagram of the GitHub repository triangle-modeling-and-analytics/trmg2, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/triangle-modeling-and-analytics/trmg2
- Repository: https://github.com/triangle-modeling-and-analytics/trmg2

## Overview

#### Purpose and Entry Points
TRMG2 is the Triangle Regional Model’s second-generation regional travel-demand model. Its executable workflow is a sequenced set of Caliper/TransCAD-style resource scripts, compiled through `src/_TRMCompile.lst`, with model/scenario definitions in `trmg2.model` and `trmg2.scenarios`. The published technical documentation is rendered under `docs/`, notably `docs/index.Rmd` and `docs/index.html`.

#### Scenario, Network, and Socioeconomic Foundation
Scenario creation establishes a model-year network and inputs from baseline master data plus project lists. `src/01 - CreateScenario.rsc` consumes year-specific roadway/transit changes under `scenarios/2035/` (and corresponding model years) and network assets under `master/networks/`. Socioeconomic data and TAZ geography are versioned separately in `master/sedata/` and `master/tazs/`; these are core boundaries between scenario inputs, geography, and demand modeling.

#### Supply Preparation and Accessibility
Network calculations and accessibility prepare the impedance and land-use measures required by downstream demand models. `src/02 - Network Calculations.rsc` precedes `src/03 - Accessibility.rsc`; accessibility parameters and outputs are represented in `master/accessibility/accessibilities.csv` and `master/accessibility/attraction_rates.csv`. Skimming is an explicit later supply-demand feedback boundary in `src/10 - Skimming.rsc`, producing travel impedances after network conditions are available.

#### Resident Travel Demand Pipeline
The resident model follows a conventional person/household-to-trip pipeline: synthetic population, productions, nonmotorized processing, aggregation, time-of-day, parking, mode choice, and destination choice. Principal stages are `src/04 - PopulationSynthesis.rsc`, `src/05 - Resident Productions.rsc`, `src/08 - Time of Day.rsc`, `src/12 - Mode Choice.rsc`, and `src/13 - Destination Choice.rsc`. Their calibrated model inputs are versioned by purpose under `master/resident/`, including population seeds, generation rates, mode coefficients, destination-choice size terms, and time-of-day factors.

#### Specialized Demand Submodels
Separate scripts add demand not handled by the resident home-based pipeline: non-home-based travel (`src/14 - NHB Models.rsc`), airport trips (`src/Airport.rsc`), commercial vehicles (`src/Commercial Vehicles.rsc`), external/internal-external travel (`src/External Models.rsc`), and university travel (`src/University.rsc`). These models maintain distinct calibration/configuration boundaries in `master/airport/`, `master/cv/`, `master/external/`, and `master/university/`, while their R-based estimation/preprocessing artifacts and validation outputs reside in `docs/R/` and `docs/data/output/`.

#### Assignment and Feedback Outputs
Demand is converted into assignment-ready matrices by `src/16 - Create Assignment Matrices.rsc`, then loaded onto roadway and transit networks by `src/17 - Roadway Assignment.rsc` and `src/18 - Transit Assignment.rsc`. `src/19 - Summaries.rsc` is the terminal reporting stage. Assignment depends on Caliper binary network, route, matrix, and scenario formats in `master/networks/`, rather than a database or web service.

#### R Documentation and Calibration Boundary
R is used primarily for data preparation, estimation, calibration, and static documentation—not as the runtime orchestrator. Scripts such as `docs/R/create_dc_est_tables.R`, `docs/R/estimate_nhb.R`, and `docs/R/university_productions.R` transform survey, census, GIS, and observed-count inputs under `docs/data/input/` into calibrated tables and diagnostic outputs under `docs/data/output/`. The R environment is pinned with `docs/renv.lock`; rendered HTML documentation is deployable as a static site.

Main entry points: [`src/01 - CreateScenario.rsc`](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/01%20-%20CreateScenario.rsc) (Create Scenario), [`docs/R/estimate_nhb.R`](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/docs/R/estimate_nhb.R) (R Calibration & Preparation), [`src/16 - Create Assignment Matrices.rsc`](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/16%20-%20Create%20Assignment%20Matrices.rsc) (Create Assignment Matrices), [`src/04 - PopulationSynthesis.rsc`](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/04%20-%20PopulationSynthesis.rsc) (Population Synthesis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orchestration["Model Orchestration"]
  node_compile["Resource Script Build<br/>Caliper compiler list<br/>[_TRMCompile.lst]"]
  node_model_defs["Model &amp; Scenario Definitions<br/>model definitions<br/>[trmg2.model]"]
  node_assignment_matrices["Create Assignment Matrices<br/>Caliper resource script"]
  node_roadway_assignment["Roadway Assignment<br/>Caliper resource script"]
  node_transit_assignment["Transit Assignment<br/>Caliper resource script"]
  node_summaries["Summaries<br/>Caliper resource script<br/>[19 - Summaries.rsc]"]
end

subgraph group_foundation["Scenario &amp; Supply Inputs"]
  node_scenario_create["Create Scenario<br/>Caliper resource script"]
  node_scenario_changes["Year-Specific Projects<br/>scenario inputs"]
  node_network_assets[("Network Assets<br/>Caliper network data")]
  node_sedata[("Socioeconomic Data<br/>demand inputs")]
  node_tazs[("TAZ Geography<br/>zone geography")]
  node_network_calcs["Network Calculations<br/>Caliper resource script"]
  node_accessibility["Accessibility<br/>Caliper resource script"]
  node_access_params["Accessibility Parameters<br/>accessibility tables"]
  node_skimming["Skimming<br/>Caliper resource script<br/>[10 - Skimming.rsc]"]
end

subgraph group_resident["Resident Demand"]
  node_population["Population Synthesis<br/>Caliper resource script"]
  node_productions["Resident Productions<br/>Caliper resource script"]
  node_resident_models[("Resident Model Parameters<br/>calibrated demand inputs")]
  node_time_of_day["Time of Day<br/>Caliper resource script"]
  node_mode_choice["Mode Choice<br/>Caliper resource script"]
  node_destination_choice["Destination Choice<br/>Caliper resource script"]
end

subgraph group_specialized["Specialized Demand"]
  node_specialized_models["Specialized Demand Models<br/>Caliper resource scripts"]
  node_specialized_inputs[("Specialized Model Inputs<br/>calibrated demand inputs")]
end

subgraph group_calibration["Calibration &amp; Documentation"]
  node_r_calibration["R Calibration &amp; Preparation<br/>R scripts<br/>[estimate_nhb.R]"]
  node_calibration_inputs[("Observed &amp; Survey Inputs<br/>calibration data")]
  node_calibration_outputs[("Calibration Outputs<br/>diagnostic outputs")]
  node_documentation["Technical Documentation<br/>static documentation<br/>[index.Rmd]"]
end

node_compile -->|"executes"| node_scenario_create
node_model_defs -->|"defines"| node_scenario_create
node_scenario_changes -->|"project changes"| node_scenario_create
node_network_assets -->|"baseline network"| node_scenario_create
node_scenario_create -->|"scenario network"| node_network_calcs
node_network_calcs -->|"network measures"| node_accessibility
node_access_params -->|"parameters"| node_accessibility
node_sedata -->|"household controls"| node_population
node_tazs -->|"zone geography"| node_population
node_resident_models -->|"population seeds"| node_population
node_population -->|"synthetic households"| node_productions
node_resident_models -->|"generation rates"| node_productions
node_productions -->|"resident trips"| node_time_of_day
node_resident_models -->|"period factors"| node_time_of_day
node_time_of_day -->|"timed trips"| node_mode_choice
node_skimming -.->|"impedances"| node_mode_choice
node_mode_choice -->|"mode trips"| node_destination_choice
node_accessibility -->|"land-use measures"| node_destination_choice
node_skimming -.->|"impedances"| node_destination_choice
node_network_calcs -->|"network conditions"| node_skimming
node_specialized_inputs -->|"calibrations"| node_specialized_models
node_destination_choice -->|"resident demand"| node_assignment_matrices
node_specialized_models -->|"nonresident demand"| node_assignment_matrices
node_assignment_matrices -->|"roadway matrices"| node_roadway_assignment
node_assignment_matrices -->|"transit matrices"| node_transit_assignment
node_network_assets -->|"road network"| node_roadway_assignment
node_network_assets -->|"transit network"| node_transit_assignment
node_roadway_assignment -->|"assignment results"| node_summaries
node_transit_assignment -->|"assignment results"| node_summaries
node_calibration_inputs -->|"observations"| node_r_calibration
node_r_calibration -->|"diagnostics"| node_calibration_outputs
node_r_calibration -.->|"estimated tables"| node_resident_models
node_r_calibration -.->|"estimated inputs"| node_specialized_inputs
node_calibration_outputs -->|"validation exhibits"| node_documentation

click node_compile "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/_TRMCompile.lst"
click node_model_defs "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/trmg2.model"
click node_scenario_create "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/01%20-%20CreateScenario.rsc"
click node_network_calcs "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/02%20-%20Network%20Calculations.rsc"
click node_accessibility "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/03%20-%20Accessibility.rsc"
click node_access_params "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/master/accessibility/accessibilities.csv"
click node_population "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/04%20-%20PopulationSynthesis.rsc"
click node_productions "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/05%20-%20Resident%20Productions.rsc"
click node_time_of_day "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/08%20-%20Time%20of%20Day.rsc"
click node_mode_choice "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/12%20-%20Mode%20Choice.rsc"
click node_destination_choice "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/13%20-%20Destination%20Choice.rsc"
click node_skimming "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/10%20-%20Skimming.rsc"
click node_specialized_models "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/14%20-%20NHB%20Models.rsc"
click node_assignment_matrices "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/16%20-%20Create%20Assignment%20Matrices.rsc"
click node_roadway_assignment "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/17%20-%20Roadway%20Assignment.rsc"
click node_transit_assignment "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/18%20-%20Transit%20Assignment.rsc"
click node_summaries "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/19%20-%20Summaries.rsc"
click node_r_calibration "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/docs/R/estimate_nhb.R"
click node_documentation "https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/docs/index.Rmd"

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_compile,node_model_defs,node_assignment_matrices,node_roadway_assignment,node_transit_assignment,node_summaries toneBlue
class node_scenario_create,node_scenario_changes,node_network_assets,node_sedata,node_tazs,node_network_calcs,node_accessibility,node_access_params,node_skimming toneAmber
class node_population,node_productions,node_resident_models,node_time_of_day,node_mode_choice,node_destination_choice toneMint
class node_specialized_models,node_specialized_inputs toneRose
class node_r_calibration,node_calibration_inputs,node_calibration_outputs,node_documentation toneIndigo
```

## Components

### Model Orchestration

- [Resource Script Build](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/_TRMCompile.lst): Caliper compiler list · Defines the executable script sequence. · `src/_TRMCompile.lst`
- [Model & Scenario Definitions](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/trmg2.model): model definitions · `trmg2.model`
- [Create Assignment Matrices](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/16%20-%20Create%20Assignment%20Matrices.rsc): Caliper resource script · `src/16 - Create Assignment Matrices.rsc`
- [Roadway Assignment](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/17%20-%20Roadway%20Assignment.rsc): Caliper resource script · `src/17 - Roadway Assignment.rsc`
- [Transit Assignment](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/18%20-%20Transit%20Assignment.rsc): Caliper resource script · `src/18 - Transit Assignment.rsc`
- [Summaries](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/19%20-%20Summaries.rsc): Caliper resource script · Terminal model reporting. · `src/19 - Summaries.rsc`

### Scenario & Supply Inputs

- [Create Scenario](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/01%20-%20CreateScenario.rsc): Caliper resource script · `src/01 - CreateScenario.rsc`
- **Year-Specific Projects**: scenario inputs
- **Network Assets**: Caliper network data · Binary networks, routes, matrices, and scenarios.
- **Socioeconomic Data**: demand inputs
- **TAZ Geography**: zone geography
- [Network Calculations](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/02%20-%20Network%20Calculations.rsc): Caliper resource script · `src/02 - Network Calculations.rsc`
- [Accessibility](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/03%20-%20Accessibility.rsc): Caliper resource script · `src/03 - Accessibility.rsc`
- [Accessibility Parameters](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/master/accessibility/accessibilities.csv): accessibility tables · `master/accessibility/accessibilities.csv`
- [Skimming](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/10%20-%20Skimming.rsc): Caliper resource script · Produces travel impedances for demand feedback. · `src/10 - Skimming.rsc`

### Resident Demand

- [Population Synthesis](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/04%20-%20PopulationSynthesis.rsc): Caliper resource script · `src/04 - PopulationSynthesis.rsc`
- [Resident Productions](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/05%20-%20Resident%20Productions.rsc): Caliper resource script · `src/05 - Resident Productions.rsc`
- **Resident Model Parameters**: calibrated demand inputs · Purpose-specific generation, mode, destination, and time-of-day inputs.
- [Time of Day](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/08%20-%20Time%20of%20Day.rsc): Caliper resource script · `src/08 - Time of Day.rsc`
- [Mode Choice](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/12%20-%20Mode%20Choice.rsc): Caliper resource script · `src/12 - Mode Choice.rsc`
- [Destination Choice](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/13%20-%20Destination%20Choice.rsc): Caliper resource script · `src/13 - Destination Choice.rsc`

### Specialized Demand

- [Specialized Demand Models](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/src/14%20-%20NHB%20Models.rsc): Caliper resource scripts · NHB, airport, commercial vehicle, external, and university demand. · `src/14 - NHB Models.rsc`
- **Specialized Model Inputs**: calibrated demand inputs · Airport, commercial vehicle, external, and university model data.

### Calibration & Documentation

- [R Calibration & Preparation](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/docs/R/estimate_nhb.R): R scripts · Estimates models and prepares diagnostic data. · `docs/R/estimate_nhb.R`
- **Observed & Survey Inputs**: calibration data
- **Calibration Outputs**: diagnostic outputs
- [Technical Documentation](https://github.com/triangle-modeling-and-analytics/trmg2/blob/main/docs/index.Rmd): static documentation · Rendered, deployable model documentation. · `docs/index.Rmd`

## Connections

- Resource Script Build → Create Scenario: executes
- Model & Scenario Definitions → Create Scenario: defines
- Year-Specific Projects → Create Scenario: project changes
- Network Assets → Create Scenario: baseline network
- Create Scenario → Network Calculations: scenario network
- Network Calculations → Accessibility: network measures
- Accessibility Parameters → Accessibility: parameters
- Socioeconomic Data → Population Synthesis: household controls
- TAZ Geography → Population Synthesis: zone geography
- Resident Model Parameters → Population Synthesis: population seeds
- Population Synthesis → Resident Productions: synthetic households
- Resident Model Parameters → Resident Productions: generation rates
- Resident Productions → Time of Day: resident trips
- Resident Model Parameters → Time of Day: period factors
- Time of Day → Mode Choice: timed trips
- Skimming → Mode Choice: impedances
- Mode Choice → Destination Choice: mode trips
- Accessibility → Destination Choice: land-use measures
- Skimming → Destination Choice: impedances
- Network Calculations → Skimming: network conditions
- Specialized Model Inputs → Specialized Demand Models: calibrations
- Destination Choice → Create Assignment Matrices: resident demand
- Specialized Demand Models → Create Assignment Matrices: nonresident demand
- Create Assignment Matrices → Roadway Assignment: roadway matrices
- Create Assignment Matrices → Transit Assignment: transit matrices
- Network Assets → Roadway Assignment: road network
- Network Assets → Transit Assignment: transit network
- Roadway Assignment → Summaries: assignment results
- Transit Assignment → Summaries: assignment results
- Observed & Survey Inputs → R Calibration & Preparation: observations
- R Calibration & Preparation → Calibration Outputs: diagnostics
- R Calibration & Preparation → Resident Model Parameters: estimated tables
- R Calibration & Preparation → Specialized Model Inputs: estimated inputs
- Calibration Outputs → Technical Documentation: validation exhibits
