Skip to content

Understand bcfp dam_dnstr_ind propagation: 33% of PARS (reservoir-inflow sub-basins) flagged dam-free #224

Description

@NewGraphEnvironment

Summary

While validating #223 on PARS, we found that the tunnel-free bcfp reference
(fresh.streams_vw_bcfp) flags only 67% of PARS as dam-downstream
(dam_dnstr_ind = TRUE), not 100% — even though the entire Parsnip watershed group
drains to Williston Reservoir and out through the W.A.C. Bennett / Peace Canyon dams.
link faithfully reproduces this (66.2%), so it is a characteristic of the bcfp
reference data, not a link defect. We do not yet understand the exact propagation
rule, and this issue records what we know so it isn't lost.

This does NOT affect #223. PARS BT accessible_km is exact vs bcfp (−0.01%),
mapping-code matched, and the link-vs-bcfp dam_dnstr_ind difference is a tiny
second-order segmentation effect (−1.25%), not a missed dam.

The numbers (bcfp reference, fresh.streams_vw_bcfp, PARS)

metric km % of total
total stream 13,867.5 100%
dam_dnstr_ind = TRUE (bcfp) 9,293.3 67.0%
dam_dnstr_ind = TRUE (link) 9,176.7 66.2%
dam-free (FALSE) 4,574.2 33.0%

dam_hydro_dnstr_ind is identical to dam_dnstr_ind here (67%), i.e. the relevant
dams are the hydro dams.

Separately, the mapping-code ;DAM token is even narrower — only ~4,299 km
(31%) of segments carry ;DAM in mapping_code_bt, i.e. ;DAM-in-code ≠
dam_dnstr_ind. 4,995 km have a dam downstream but no ;DAM label. So the map's
"dam" symbology and the dam_dnstr_ind boolean are two different things.

What the dam-free 33% is — hypotheses tested and RULED OUT

  1. Isolated / wetland reaches — NO. 93% (4,270 of 4,574 km) are edge_type 1000
    (ordinary single-line streams), not connectors or wetland reaches.
  2. Broken network / doesn't connect to the mainstem — NO.
    whse_basemapping.fwa_downstream confirms the dammed Parsnip mainstem
    (blk 359567332) IS downstream of a sampled dam-free tributary (blk 359564429),
    and the tributary's wscode nests cleanly under the mainstem's
    (200.948755.936902.347759.954138 <@ 200.948755.936902). They connect.
  3. Headwaters only — PARTIAL. Dam-free is concentrated in low order (order 1:
    3,194 km) and there are zero dam-free segments at order ≥ 5 — but orders 1–4
    are a mix of dam-free and dam-ds, so order alone doesn't explain it.
  4. Inaccessible network (above barriers) — NO. Dam-free splits ~evenly across
    accessible (2,521 km) and blocked/absent (2,053 km); blocked streams are if
    anything more likely to be dam-ds (4,992 km). Uncorrelated with access_bt.

What it appears to be

Whole contiguous sub-basins draining toward Williston Reservoir. The dammed
"Parsnip mainstem" (blk 359567332) is actually a 199 km reservoir reach
(waterbody_key 329725048, edge_type 1250), entirely dam-ds. The dam flag propagates
along the main channels + reservoir but not up into certain whole tributary
sub-basins
that feed the reservoir. The spatial pattern is clearly contiguous
sub-basins (map rendered in-session: purple = dam-ds, orange = dam-free), not
scattered segments — which points at a topological rule in bcfp's dam-downstream
propagation, likely at the stream→reservoir interface.

Next step to get the definitive mechanism

Read smnorris/bcfishpass's dam-downstream computation (the SQL that populates
barriers_dams_dnstr / dam_dnstr_ind) at the pinned reference version
smnorris/bcfishpass@v0.7.15-41-g2917790 (head_sha 29177906, date_completed
2026-07-01) — the source of truth for why those specific sub-basins are unflagged.
Inferring further from the output is circular. If confirmed as an under-flag of
reservoir-inflow tributaries, raise upstream with Simon (fish in those tributaries
would in fact hit the dam going downstream, so dam_dnstr = false looks wrong).

References / repro

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions