# imperialchepi/healthgps architecture

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

- Interactive diagram: https://gitdiagram.com/imperialchepi/healthgps
- Repository: https://github.com/imperialchepi/healthgps

## Overview

Health-GPS is a C++ microsimulation for evaluating health and economic effects of policy scenarios. A user supplies configuration and project data; the console host parses and validates inputs, assembles model input, runs baseline or intervention trials, and writes result files. The documented simulation stages cover demographics, socioeconomic factors, risk factors, and disease outcomes. The tree and excerpts support the host, input, repository, and output layers; several domain connections are documented in the README rather than visible in sampled implementations.

Main entry points: [`src/HealthGPS.Console/program.cpp`](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Console/program.cpp) (Console host), [`src/HealthGPS/simulation.cpp`](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/simulation.cpp) (Simulation engine), [`src/HealthGPS/event_bus.cpp`](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/event_bus.cpp) (Event bus), [`src/HealthGPS/runner.cpp`](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/runner.cpp) (Trial runner)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_host["Host and orchestration"]
  node_console["Console host<br/>[program.cpp]"]
  node_runner["Trial runner<br/>[runner.cpp]"]
  node_simulation["Simulation engine<br/>[simulation.cpp]"]
end

subgraph group_inputs["Configuration and data"]
  node_config["Configuration<br/>[configuration.cpp]"]
  node_parser["Model parser<br/>[model_parser.cpp]"]
  node_data_manager["Data manager<br/>[datamanager.cpp]"]
  node_repository[("Cached repository<br/>[repository.cpp]")]
  node_model_input["Model input<br/>[modelinput.h]"]
end

subgraph group_simulation["Simulation domains"]
  node_demographics["Demographics<br/>[demographic.cpp]"]
  node_socioeconomic["Socioeconomic factors"]
  node_risk_factors["Risk factors<br/>[riskfactor.cpp]"]
  node_disease["Disease outcomes<br/>[disease.cpp]"]
  node_scenarios["Policy scenarios"]
  node_analysis["Analysis"]
end

subgraph group_results["Events and results"]
  node_event_bus["Event bus<br/>[event_bus.cpp]"]
  node_monitor["Event monitor<br/>[event_monitor.cpp]"]
  node_writer["Result writer"]
  node_files["Result files"]
end

node_researcher(("Researcher"))

node_researcher -.->|"starts run"| node_console
node_console -->|"loads configuration"| node_config
node_console -->|"parses models"| node_parser
node_console -->|"assembles inputs"| node_model_input
node_parser -.->|"loads data"| node_data_manager
node_repository -->|"fetches data"| node_data_manager
node_console -->|"runs trials"| node_runner
node_runner -.->|"executes trials"| node_simulation
node_simulation -->|"simulates population"| node_demographics
node_demographics -->|"feeds"| node_socioeconomic
node_socioeconomic -->|"feeds"| node_risk_factors
node_risk_factors -->|"feeds"| node_disease
node_scenarios -.->|"configures policy"| node_simulation
node_simulation -.->|"analyzes outcomes"| node_analysis
node_console -->|"sets up events"| node_event_bus
node_event_bus -.->|"delivers events"| node_monitor
node_event_bus -.->|"delivers results"| node_writer
node_writer -->|"writes files"| node_files

click node_console "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Console/program.cpp"
click node_config "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Input/configuration.cpp"
click node_parser "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Input/model_parser.cpp"
click node_data_manager "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Input/datamanager.cpp"
click node_repository "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/repository.cpp"
click node_model_input "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/modelinput.h"
click node_runner "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/runner.cpp"
click node_simulation "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/simulation.cpp"
click node_demographics "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/demographic.cpp"
click node_socioeconomic "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/ses_noise_module.cpp"
click node_risk_factors "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/riskfactor.cpp"
click node_disease "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/disease.cpp"
click node_scenarios "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/intervention_scenario.h"
click node_analysis "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/analysis_module.cpp"
click node_event_bus "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/event_bus.cpp"
click node_monitor "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Console/event_monitor.cpp"
click node_writer "https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Console/result_file_writer.cpp"

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_console,node_runner,node_simulation toneBlue
class node_config,node_parser,node_data_manager,node_repository,node_model_input toneAmber
class node_demographics,node_socioeconomic,node_risk_factors,node_disease,node_scenarios,node_analysis toneMint
class node_event_bus,node_monitor,node_writer,node_files toneRose
class node_researcher toneIndigo
```

## Components

### Host and orchestration

- [Console host](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Console/program.cpp): `src/HealthGPS.Console/program.cpp`
- [Trial runner](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/runner.cpp): `src/HealthGPS/runner.cpp`
- [Simulation engine](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/simulation.cpp): `src/HealthGPS/simulation.cpp`

### Configuration and data

- [Configuration](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Input/configuration.cpp): `src/HealthGPS.Input/configuration.cpp`
- [Model parser](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Input/model_parser.cpp): `src/HealthGPS.Input/model_parser.cpp`
- [Data manager](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Input/datamanager.cpp): `src/HealthGPS.Input/datamanager.cpp`
- [Cached repository](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/repository.cpp): `src/HealthGPS/repository.cpp`
- [Model input](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/modelinput.h): `src/HealthGPS/modelinput.h`

### Simulation domains

- [Demographics](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/demographic.cpp): `src/HealthGPS/demographic.cpp`
- [Socioeconomic factors](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/ses_noise_module.cpp): `src/HealthGPS/ses_noise_module.cpp`
- [Risk factors](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/riskfactor.cpp): `src/HealthGPS/riskfactor.cpp`
- [Disease outcomes](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/disease.cpp): `src/HealthGPS/disease.cpp`
- [Policy scenarios](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/intervention_scenario.h): `src/HealthGPS/intervention_scenario.h`
- [Analysis](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/analysis_module.cpp): `src/HealthGPS/analysis_module.cpp`

### Events and results

- [Event bus](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS/event_bus.cpp): `src/HealthGPS/event_bus.cpp`
- [Event monitor](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Console/event_monitor.cpp): `src/HealthGPS.Console/event_monitor.cpp`
- [Result writer](https://github.com/imperialchepi/healthgps/blob/main/src/HealthGPS.Console/result_file_writer.cpp): `src/HealthGPS.Console/result_file_writer.cpp`
- **Result files**

### Other components

- **Researcher**

## Connections

- Researcher → Console host: starts run
- Console host → Configuration: loads configuration (evidence: `src/HealthGPS.Console/program.cpp`)
- Console host → Model parser: parses models (evidence: `src/HealthGPS.Console/program.cpp`)
- Console host → Model input: assembles inputs (evidence: `src/HealthGPS.Console/program.cpp`)
- Model parser → Data manager: loads data
- Cached repository → Data manager: fetches data (evidence: `src/HealthGPS/repository.cpp`)
- Console host → Trial runner: runs trials (evidence: `src/HealthGPS.Console/program.cpp`)
- Trial runner → Simulation engine: executes trials
- Simulation engine → Demographics: simulates population
- Demographics → Socioeconomic factors: feeds
- Socioeconomic factors → Risk factors: feeds
- Risk factors → Disease outcomes: feeds
- Policy scenarios → Simulation engine: configures policy
- Simulation engine → Analysis: analyzes outcomes
- Console host → Event bus: sets up events (evidence: `src/HealthGPS.Console/program.cpp`)
- Event bus → Event monitor: delivers events
- Event bus → Result writer: delivers results
- Result writer → Result files: writes files
