Context
Email thread with Craig Mount + Will Warnock (WLRS) and Simon Norris. Simon's question:
Should the default model for all of BC presume that DV/BT are the same thing for the purposes of access modelling, or is this a regional quirk?
Current state of the BT observation override (parameters_fresh.csv):
| bundle |
observation_species |
threshold |
observation_date_min |
| bcfishpass |
BT;CH;CO;SK;PK;CM;ST |
1 |
1900-01-01 (no filter) |
| default |
BT;DV |
1 |
none |
So our default adds DV but drops salmon; bcfp keeps salmon and has no DV. Neither is obviously right, and we've never written down why either set was chosen.
Correction (verified 2026-08-06): an earlier version of this issue said we already model DV as its own species. We do not. DV has a row in the default bundle's dimensions.csv and parameters_fresh.csv, and presence flags in 194 of 246 WSGs — but it is skipped at rules-build time: lnk_rules_build() prints Skipping DV: no thresholds in fresh CSV, because fresh's parameters_habitat_thresholds.csv covers only BT, CH, CM, CO, GR, KO, PK, RB, SK, ST, WCT. Same for CT.
So rules.yaml has 11 species, no mapping_code_dv column is produced, and a PINE run resolves species = {BT, RB, GR}.
Prerequisite for the empirical work below: adding DV (and CT) thresholds to fresh's parameters_habitat_thresholds.csv — a fresh-side change. Until then DV can only act as evidence for BT's override (which is what observation_species = BT;DV already does), not be modelled independently.
Why this is genuinely ambiguous (not just a config preference)
DV and BT are hard to separate, so the observation records themselves are noisy. From the provincial field key (McPhail & Carveth 1993, Field Key to the Freshwater Fishes of British Columbia, Appendix pp. 218-219, 223):
- Adults key out on branchiostegal ray counts — DV 19-24, BT 24-29 — which overlap at 24 — plus snout profile and spot size/spacing.
- Juveniles: "The young of these species can not be reliably identified except biochemically."
- "Where they coexist, Dolly Varden and bull trout usually show some hybridization."
So a meaningful share of provincial DV/BT records are effectively "a char", assigned by locality convention or observer expectation. This is an argument for treating DV as BT evidence where both occur — and an argument for caution where only DV occurs, since there the record is more likely to be a true DV.
Questions
-
Where does DV-as-BT evidence hold? From the presence table, 54 of 246 WSGs have DV present and BT absent — almost entirely coastal and far north (ALBN, BELA, KNIG, HOLB, NIMP, OWIK, TOBA, SEYM, COMX, VICT, KITL, KHTZ, NEVI, STIR ... plus LRDO, MUSK, USTK, ATLL, TATR, NAHR). Working hypothesis: the override is sound where DV and BT co-occur, and over-credits in those 54. Quantify the access delta in both settings and map it.
-
Should the override be multiple rules per species? We want "BT;DV, 1 fish, any date" and "salmon, 5 fish since 1990" simultaneously — different evidence, different confidence. lnk_barrier_overrides reads one rule row per species today (R/lnk_barrier_overrides.R:141-148), so both cannot be expressed. Relates to bcfp's own split (residents no date filter, anadromous/ST post-1990).
-
Is DV access_gradient_max = 0.25 defensible? Currently identical to BT — inherited, not researched. Confirm via literature / local knowledge, or set it separately.
-
Should rules be watershed-group scoped? If DV-as-BT is regional, the config needs a WSG axis, not just a species axis. Keep it trackable in config files rather than code.
Deliverables
Related
Context
Email thread with Craig Mount + Will Warnock (WLRS) and Simon Norris. Simon's question:
Current state of the BT observation override (
parameters_fresh.csv):observation_speciesobservation_date_minBT;CH;CO;SK;PK;CM;STBT;DVSo our default adds DV but drops salmon; bcfp keeps salmon and has no DV. Neither is obviously right, and we've never written down why either set was chosen.
Correction (verified 2026-08-06): an earlier version of this issue said we already model DV as its own species. We do not. DV has a row in the default bundle's
dimensions.csvandparameters_fresh.csv, and presence flags in 194 of 246 WSGs — but it is skipped at rules-build time:lnk_rules_build()printsSkipping DV: no thresholds in fresh CSV, because fresh'sparameters_habitat_thresholds.csvcovers only BT, CH, CM, CO, GR, KO, PK, RB, SK, ST, WCT. Same for CT.So
rules.yamlhas 11 species, nomapping_code_dvcolumn is produced, and a PINE run resolvesspecies = {BT, RB, GR}.Prerequisite for the empirical work below: adding DV (and CT) thresholds to fresh's
parameters_habitat_thresholds.csv— a fresh-side change. Until then DV can only act as evidence for BT's override (which is whatobservation_species = BT;DValready does), not be modelled independently.Why this is genuinely ambiguous (not just a config preference)
DV and BT are hard to separate, so the observation records themselves are noisy. From the provincial field key (McPhail & Carveth 1993, Field Key to the Freshwater Fishes of British Columbia, Appendix pp. 218-219, 223):
So a meaningful share of provincial DV/BT records are effectively "a char", assigned by locality convention or observer expectation. This is an argument for treating DV as BT evidence where both occur — and an argument for caution where only DV occurs, since there the record is more likely to be a true DV.
Questions
Where does DV-as-BT evidence hold? From the presence table, 54 of 246 WSGs have DV present and BT absent — almost entirely coastal and far north (ALBN, BELA, KNIG, HOLB, NIMP, OWIK, TOBA, SEYM, COMX, VICT, KITL, KHTZ, NEVI, STIR ... plus LRDO, MUSK, USTK, ATLL, TATR, NAHR). Working hypothesis: the override is sound where DV and BT co-occur, and over-credits in those 54. Quantify the access delta in both settings and map it.
Should the override be multiple rules per species? We want "BT;DV, 1 fish, any date" and "salmon, 5 fish since 1990" simultaneously — different evidence, different confidence.
lnk_barrier_overridesreads one rule row per species today (R/lnk_barrier_overrides.R:141-148), so both cannot be expressed. Relates to bcfp's own split (residents no date filter, anadromous/ST post-1990).Is DV
access_gradient_max= 0.25 defensible? Currently identical to BT — inherited, not researched. Confirm via literature / local knowledge, or set it separately.Should rules be watershed-group scoped? If DV-as-BT is regional, the config needs a WSG axis, not just a species axis. Keep it trackable in config files rather than code.
Deliverables
parameters_fresh.csvcolumns (we have one for dimensions, not for parameters — relates to dimensions_columns.csv as source-of-truth: auto-gen README + lnk_rules_build validation #75)Related
observation_date_min: dropped the 1990 filter for bcfp parity (the date-discrepancy precedent)dimensions.csv(sea-run cutthroat, Dolly Varden)blocks_species: carry barrier ingredients, classify access late + per-context