# Emissions
Three observation channels are sampled per household per step, conditional on
$S_{i,t}$ (and, for displacement, on the auxiliary `evac_path` and `tir`).
Defaults live on `EmissionParams`.
## Departure indicator (Bernoulli)
The noisy departure indicator is on roughly when the household is en route:
| State | $p_s = P(D_{i,t}=1 \mid S_{i,t}=s)$ |
|-------|--------------------------------------|
| UA | 0.03 |
| AW | 0.03 |
| PR | 0.03 |
| ER | 0.95 |
| SH | 0.03 |
This is the noisy version (not the deterministic indicator) — useful for
demonstrating that the IO-HMM fit can recover the latent state from imperfect
proxies.
## Displacement (km)
```
S = UA, AW, PR : X ~ |N(0, 0.5²)|
S = ER : X = min(tir · v_eff, dest_i) + N(0, 1)
with v_eff = 40 · (1 − 0.6 · c_t)
S = SH, evac_path=AWAY: X ~ N(dest_i, 0.5²)
S = SH, evac_path=HOME: X ~ |N(0, 0.5²)|
```
The half-normal pre-route displacement keeps the value non-negative without
introducing additional parameters. The ER branch is the only one that
explicitly uses `tir` and the congestion feedback `c_t`: under heavy
congestion the effective speed `v_eff` drops, which slows displacement.
## Communication count (Poisson)
| State | $\lambda_s$ |
|-------|--------------|
| UA | 0.2 |
| AW | 1.5 |
| PR | 4.0 |
| ER | 2.0 |
| SH | 0.5 |
Communication peaks during preparation (calling family, coordinating
logistics) and tapers once en route or sheltered.
## Vectorization
`sample_emissions` samples Bernoulli and Poisson channels in one shot for the
entire cohort, then branches on state for displacement (each branch is a
masked NumPy assignment). The branches are cheap because most steps have
zero or near-zero population in some states (e.g., very few households are in
ER early on).