Outputs
For each simulation day, the simulator writes compartment totals and subgroup details. For multiple simulations it writes CSV files; for a single simulation it can write JSON and a plot. Running more than one simulation is preferable, because stochastic models and the travel model inject noise into outcomes. You will want to visualize a range of possibilities (spaghetti plots) in the Shiny dashboard.
Each output run also includes metadata describing:
The input data files
Disease, travel, NPI, vaccine, and antiviral model parameters
Runtime attributes derived from the parameters
A scenario hash
Git commit and dirty-state information when available
Random seed strategy
This metadata is important for reproducibility. When sharing results, include the metadata file with the daily outputs.
Scenario And Batch Identity
With "output_dir_path": "GENERATE", outputs are written to:
<STATE>_<SCENARIO_HASH>/
The full SHA-256 scenario hash groups semantically equivalent configurations.
It is based on normalized data paths, model identities and runtime attributes,
initial exposures, and NPIs. Output location, tags, batch identifier, random seed,
and superficial numeric differences such as 1 versus 1.0 do not create a
new scenario hash.
With "batch_num": "GENERATE", each execution receives a UUIDv7. The batch UUID
appears in every output filename and in the metadata. A rerun of the same
scenario therefore has the same scenario hash and a new batch UUID.
This two-level identity is used by scripts/7a_process_output_to_db.R:
sim_data/<scenario_hash>/<batch_uuid>/
├── network.parquet
├── nodes.parquet
└── simulation_times.parquet
The pair (scenario_hash, batch_num) is the ingestion and deduplication key.
The dashboard in scripts/7b_sim_dashboard_app.R uses the same structure to
compare scenarios, inspect individual batches, and visualize simulation
trajectories.