From f5c9eb9a18c2dc54cd343bad6b0819cf0aea01f8 Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 12:02:51 -0700 Subject: [PATCH 01/10] Initialize PWF baseline for #283 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- planning/active/findings.md | 26 ++++++++ planning/active/progress.md | 9 +++ planning/active/task_plan.md | 117 +++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 planning/active/findings.md create mode 100644 planning/active/progress.md create mode 100644 planning/active/task_plan.md diff --git a/planning/active/findings.md b/planning/active/findings.md new file mode 100644 index 00000000..197da429 --- /dev/null +++ b/planning/active/findings.md @@ -0,0 +1,26 @@ +# Findings — Validate modelled habitat against fish observations (#283) + +## Issue context + +**If we do it:** "is this threshold set better?" gets a number per species and watershed group, so candidate CH/BT thresholds can be compared rather than eyeballed. **If we never do:** threshold changes are judged against bcfishpass parity, which measures agreement with a model rather than with fish. + +## Problem + +link compares its output with bcfishpass (`compare_*`, `wsg_compare.R`, `parity_crosssection.R`) but never with fish observations. The only observation-vs-model comparison is the Babine SK work in `research/default_vs_bcfishpass.md` §6-7, done by hand for one species against `user_habitat_classification`. + +## Proposed Solution + +A function (working name `lnk_habitat_validate()`) and a driver that, for a run schema, species set and WSG set, report: + +- **Capture:** share of observations (after `observation_exclusions`, releases removed) on or within a buffer of modelled spawning / rearing / accessible segments, split by life stage where known. +- **Cost:** km of modelled spawning and rearing, so capture can't be raised by just calling everything habitat. +- **Misses:** gradient, channel width and edge type of the segments under observations that fell outside modelled habitat. This is the direct evidence for which threshold is binding. +- **Absences (optional input):** sites sampled with no fish captured (FISS no-fish-captured records), used as a false-positive check. + +Output is a tidy table per bundle × species × WSG, so two bundles can be diffed. Use the per-WSG schemas; `fresh.streams_habitat_*` in the local snapshot is duplicated per group (fresh#218). + +Known biases to report alongside the numbers, not correct silently: +- observation points often sit at the downstream end of a sampling site; +- sampling clusters near road access; +- observations exist only where fish have access, so observed gradients are cut off at the access limit. + diff --git a/planning/active/progress.md b/planning/active/progress.md new file mode 100644 index 00000000..cd3224d4 --- /dev/null +++ b/planning/active/progress.md @@ -0,0 +1,9 @@ +# Progress — Validate modelled habitat against fish observations (#283) + +## Session 2026-09-26 + +- Plan-mode exploration — phases approved by user; decisions: read-only baseline + (no model runs; default_tuned scoring stays #284 step 5), access = `streams_access` +- Created branch `283-validate-modelled-habitat-against-fish` off origin/main +- Scaffolded PWF baseline from issue #283 with approved phases +- Next: Phase 1 diff --git a/planning/active/task_plan.md b/planning/active/task_plan.md new file mode 100644 index 00000000..122ed665 --- /dev/null +++ b/planning/active/task_plan.md @@ -0,0 +1,117 @@ +# Task: Validate modelled habitat against fish observations per species and watershed group (#283) + +link compares its output with bcfishpass but never with fish observations. The only +observation-vs-model comparison is the Babine SK work (by hand, one species). #284 set +calibrated CH/BT thresholds in `default_tuned` and left them unscored pending this validator. + +## Context +link scores itself only against bcfishpass (a model), never against fish. #284 just set +calibrated CH/BT thresholds in `default_tuned` and left them **unscored** — its step 5 +waits on this validator. #284 also already wrote the hard SQL, one-off, in +`data-raw/query_habitat_thresholds_obs.R` (observation → segment the model tests, exclusion / +release / presence / match-type ledger, DV pooled with BT, stage from activity/life_stage). +#283 turns that into a package function plus a driver that emit a tidy +bundle × species × WSG table, so two bundles can be diffed. + +**Measured during exploration (changes the issue body):** +- **fresh#218 is a join artifact, not duplication.** `fresh.streams_habitat_ch` is + 2,329,201 rows = 2,329,201 distinct `(id_segment, watershed_group_code)`; Naver Creek + joins 187 rows on the full PK and 4,301 on bare `id_segment` (#203). The issue's + "use the per-WSG schemas" guidance is unnecessary — the persist schemas are correct + when joined on the full PK. Issue body gets corrected in Phase 1; fresh#218 gets a + comment/edit offered separately (not in this PR). +- **Accessible capture is partly circular.** Observations are pipeline inputs: they lift + barriers (`observation_threshold` BT 1, CH 5), are break points, and + `user_habitat_classification` forces habitat. Report that, don't hide it: capture on + spawning/rearing is the meaningful score; accessible capture is a sanity check, and + observations on *inaccessible* segments are reported as access misses. +- `fresh_default` (55 WSGs) and `fresh` (bcfishpass config, 59 WSGs with access) share + 51 WSGs, both with `streams_access`. `fresh_default_tuned` does not exist yet. + FISS snapshot WSGs in `fresh_default`: COTR, PINE, UPCE. + +## Design +- **`lnk_habitat_validate(conn, aoi, cfg, loaded, species, schema = cfg$pipeline$schema, + observations = "bcfishobs.observations", species_obs = list(BT = c("BT", "DV")), + match_types = c("A", "B"), buffer_m = 0, absences = NULL)`** — noun_verb, issue's + working name, `@family compare`. `aoi` is a vector of WSG codes. +- Returns `list(summary, observations)`: + - `summary`: one row per `wsg × species × stage` (`any`, `spawn`, `rear`) with + `n_obs`, `n_accessible`, `n_spawning`, `n_rearing`, `n_habitat` (spawn|rear), + `share_*`, `n_inaccessible`, `n_in_uhc`, cost `accessible_km`, `spawning_km`, + `rearing_km` (via existing `lnk_rollup_wsg()`), plus absence columns + (`n_absence`, `n_absence_spawning`, `n_absence_rearing`) when `absences` is given, + and `schema`, `config_name`, `buffer_m` so bundles stack. + - `observations`: one row per retained location with segment `gradient`, + `channel_width`, `channel_width_source`, `edge_type`, `waterbody_type`, flags, and a + diagnostic `miss_reason` (`not_accessible`, `fails_gradient`, `fails_width`, + `width_null`, `waterbody`, `connectivity` = passes predicate but not habitat) computed + against the bundle's `parameters_habitat_thresholds.csv`. Labelled diagnostic: it + approximates `rules.yaml`, it is not the rules. +- **Access = `streams_access.access_ IN (1, 2)`**, same definition as + `lnk_rollup_wsg()`'s `accessible_km`, so capture and cost agree. Fail loud when a WSG + has no `streams_access` rows. (#284 used `streams_habitat.accessible`; the difference is + noted in research.) +- **Segment attach = #284's rule** (segment starting within 1 m, i.e. upstream; else the + containing one), all joins on the full PK. **`buffer_m`** extends capture upstream along + the same `blue_line_key` (observation points sit at the downstream end of sites); + default 0, the driver reports 0 and 100 as the sensitivity for that bias. +- Filters reuse the pipeline's logic: exclusions as `.lnk_pipeline_prep_observations()`, + presence via `.lnk_wsg_species_present()`; `species_obs` admits DV only where BT is + present (operator decision in #284). Stage regex moves from the #284 script into + `.lnk_obs_stage()`. +- `absences`: generic frame `(watershed_group_code, blue_line_key, + downstream_route_measure, species_code)`; the caller locates them. FISS parsing stays in + the driver because `knowledge` is private — only aggregates are committed. + +## Phases +### Phase 1: Correct the frame +- [ ] Edit #283 body: fresh#218 finding (full-PK join is correct), circularity of + accessible capture, the decided output shape +- [ ] Record the fresh#218 measurement in `findings.md` + +### Phase 2: Tests first +- [ ] `tests/testthat/test-lnk_habitat_validate.R`: arg validation; `.lnk_obs_stage()` + on activity/life_stage fixtures; `miss_reason` classification; summary shares +- [ ] DB integration test (`skip_if_no_db()`) on a fixture schema `zz_lnk_validate_probe` + with `streams`, `streams_habitat_bt`, `streams_access`, and a fixture observations + table: two WSGs sharing `id_segment` values (full-PK guard — restore a bare join and + watch it fail), an excluded key, a release, a DV record in a no-BT WSG, a buffer case, + one absence + +### Phase 3: `lnk_habitat_validate()` +- [ ] `R/lnk_habitat_validate.R`: exported function + internal SQL builders / helpers + (temp tables, parameterised; species alpha-validated as in `lnk_rollup_wsg()`) +- [ ] Runnable-by-design `@examples` (`\dontrun{}`, DB required — same as siblings) +- [ ] `devtools::document()`, tests green, `lintr::lint_package()` clean + +### Phase 4: Driver + baseline run +- [ ] `data-raw/habitat_validate.R` (`--schemas=`, `--wsgs=`, `--species=`, + `--buffers=0,100`, optional `LNK_KNOWLEDGE_DIR` for FISS absences via + `lnk_points_snap()`), writes `data-raw/logs/habitat_validate_283/`: `summary.csv`, + `misses_binned.csv` (gradient / width / edge-type bins, aggregates only), + `diff.csv` (bundle A vs B per species × WSG × stage), `stamp.txt` +- [ ] Run read-only: `fresh_default` vs `fresh` on their 51 shared WSGs, CH + BT +- [ ] Sanity: summary obs counts reconcile with #284's ledger for `fresh_default` + +### Phase 5: Record +- [ ] `research/habitat_validation.md` (method, biases incl. circularity, baseline + numbers); index in `research/README.md`; point `research/habitat_thresholds.md` + step 5 at it +- [ ] CLAUDE.md status above the marker; NEWS entry + +## Out of scope +Running `default_tuned` / candidate thresholds — that is #284 step 5 and needs its own +run decisions (config, schema, closure, `dams`, `mapping_code`) stated at launch. + +## Validation +- [ ] Tests pass (incl. DB fixture test), `devtools::check()` / lintr clean +- [ ] `/code-check` clean on each commit +- [ ] PWF checkboxes match landed work +- [ ] `/planning-archive` on completion + +## Verification +`Rscript -e 'devtools::test(filter = "habitat_validate")'`; then +`Rscript data-raw/habitat_validate.R --schemas=fresh_default,fresh --species=CH,BT` +and check `summary.csv` n_obs for `fresh_default` against +`data-raw/logs/habitat_thresholds_284/obs_ledger.csv` step 7 (same filters, access +definition aside). From fc856d8533110d94431327ebce7908a6b718e8df Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 12:03:22 -0700 Subject: [PATCH 02/10] Correct #283's frame: fresh#218 is a join artifact; record circularity Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- planning/active/findings.md | 27 +++++++++++++++++++++++++++ planning/active/task_plan.md | 4 ++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/planning/active/findings.md b/planning/active/findings.md index 197da429..9b7cc9cf 100644 --- a/planning/active/findings.md +++ b/planning/active/findings.md @@ -24,3 +24,30 @@ Known biases to report alongside the numbers, not correct silently: - sampling clusters near road access; - observations exist only where fish have access, so observed gradients are cut off at the access limit. + +## fresh#218 is a bare-`id_segment` join artifact (measured 2026-09-26) + +Docker fwapg :5432. + +| query | rows | +|---|---| +| `fresh.streams_habitat_ch` total / distinct `(id_segment, watershed_group_code)` | 2,329,201 / 2,329,201 | +| `fresh_default.streams_habitat_ch` total / distinct full PK | 786,317 / 786,317 | +| Naver Creek (blk 356363814, COTR) `streams ⋈ streams_habitat_ch` on full PK | 187 | +| same on bare `id_segment` | 4,301 | + +Naver's `id_segment` range is 35796–35982; those integers are other segments in other +WSGs (#203). No duplication. #283 body corrected. fresh#218 itself (a fresh-repo issue) +is left for the user — offered in the PR report. + +## Circularity + +Observations feed the model: barrier overrides (`observation_threshold` BT 1, CH 5, +`observation_species` BT `BT;DV`, CH `CH;CM;CO;PK;SK`), observation break points, and +`user_habitat_classification` (field-confirmed habitat). So accessible capture partly +reads the model's own input. Spawning/rearing capture is the score. + +## Coverage for the baseline + +`fresh_default` 55 WSGs (all with `streams_access`); `fresh` 59 WSGs with access; 51 shared. +`fresh_default_tuned` does not exist. FISS snapshot WSGs in `fresh_default`: COTR, PINE, UPCE. diff --git a/planning/active/task_plan.md b/planning/active/task_plan.md index 122ed665..bf986af8 100644 --- a/planning/active/task_plan.md +++ b/planning/active/task_plan.md @@ -65,9 +65,9 @@ bundle × species × WSG table, so two bundles can be diffed. ## Phases ### Phase 1: Correct the frame -- [ ] Edit #283 body: fresh#218 finding (full-PK join is correct), circularity of +- [x] Edit #283 body: fresh#218 finding (full-PK join is correct), circularity of accessible capture, the decided output shape -- [ ] Record the fresh#218 measurement in `findings.md` +- [x] Record the fresh#218 measurement in `findings.md` ### Phase 2: Tests first - [ ] `tests/testthat/test-lnk_habitat_validate.R`: arg validation; `.lnk_obs_stage()` From aa4d6ae56db4b59befb974294fe7b49a69ddcfaa Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 13:08:07 -0700 Subject: [PATCH 03/10] Add lnk_habitat_validate() and its driver (#283) Scores a persisted run against fish observations: capture on accessible, spawning and rearing segments, cost in km, miss reasons from the bundle's own habitat predicates with gradient and width relaxed, and optional absences. All joins on the full (id_segment, watershed_group_code) key. schema is required: default's pipeline.schema names the schema bcfishpass builds. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- NAMESPACE | 1 + R/lnk_habitat_validate.R | 832 +++++++++++++++++++++ data-raw/habitat_validate.R | 399 ++++++++++ man/lnk_access.Rd | 1 + man/lnk_compare_mapping_code.Rd | 1 + man/lnk_compare_rollup.Rd | 1 + man/lnk_compare_wsg.Rd | 1 + man/lnk_habitat_validate.Rd | 233 ++++++ man/lnk_log_read.Rd | 1 + man/lnk_mapping_code.Rd | 1 + man/lnk_parity_annotate.Rd | 1 + man/lnk_rollup_wsg.Rd | 1 + planning/active/progress.md | 17 + planning/active/review-plan.md | 22 + planning/active/review-round1.md | 79 ++ planning/active/review-round2.md | 119 +++ planning/active/review-round3.md | 192 +++++ planning/active/review-round4.md | 175 +++++ planning/active/task_plan.md | 22 +- tests/testthat/test-lnk_habitat_validate.R | 363 +++++++++ 20 files changed, 2457 insertions(+), 5 deletions(-) create mode 100644 R/lnk_habitat_validate.R create mode 100644 data-raw/habitat_validate.R create mode 100644 man/lnk_habitat_validate.Rd create mode 100644 planning/active/review-plan.md create mode 100644 planning/active/review-round1.md create mode 100644 planning/active/review-round2.md create mode 100644 planning/active/review-round3.md create mode 100644 planning/active/review-round4.md create mode 100644 tests/testthat/test-lnk_habitat_validate.R diff --git a/NAMESPACE b/NAMESPACE index 37a19407..23ff364f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -21,6 +21,7 @@ export(lnk_config) export(lnk_config_verify) export(lnk_db_conn) export(lnk_fanout_judge) +export(lnk_habitat_validate) export(lnk_inputs_verify) export(lnk_load) export(lnk_load_overrides) diff --git a/R/lnk_habitat_validate.R b/R/lnk_habitat_validate.R new file mode 100644 index 00000000..889504f8 --- /dev/null +++ b/R/lnk_habitat_validate.R @@ -0,0 +1,832 @@ +#' Validate modelled habitat against fish observations +#' +#' Scores a persisted run against fish observations rather than against +#' another model. For each watershed group and species it reports how many +#' observations land on modelled accessible, spawning and rearing segments +#' (**capture**), how much habitat the run models to achieve that (**cost**, +#' so capture cannot be bought by calling everything habitat), and, for each +#' observation outside modelled habitat, what excluded its segment +#' (**misses** — the direct evidence for which threshold is binding). Sites +#' sampled with the species not caught can be supplied as **absences**, a +#' false-positive check. +#' +#' Runs over two persist schemas (two config bundles) stack row-wise, so +#' bundles can be diffed on the same observations. +#' +#' @section Which observations count: +#' From `observations` (a `bcfishobs.observations`-shaped table), keeping: +#' - records not flagged `data_error` or `release_exclude` in +#' `loaded$observation_exclusions` (the pipeline's own filter), and not +#' from the `Releases Database` source (stocked fish are not evidence of +#' habitat use); +#' - observation species admitted for the model species by `species_obs`, +#' and only in WSGs where `loaded$wsg_species_presence` marks the model +#' species present (so DV records count as BT only where BT is present); +#' - `match_type` classes in `match_types` (default A/B: matched to a +#' stream within 100 m; C, 100-500 m from a stream, and the D/E +#' waterbody matches are left out); +#' - one per species x `blue_line_key` x metre (repeat visits are one +#' location; a location is spawn- or rear-staged if any record there is). +#' +#' Pass a different `observations` table to score a held-out subset (by +#' project, date or WSG). +#' +#' @section Which segment an observation is on: +#' The pipeline breaks streams at observations, so most points sit on a +#' segment boundary. The segment **starting** within 1 m of the point (the +#' upstream one) is used, else the one containing it. A location with no +#' segment is counted in `n_unattached` and nowhere else. All joins between +#' `streams`, `streams_access` and `streams_habitat_` are on the full key +#' `(id_segment, watershed_group_code)`: `id_segment` repeats across groups. +#' +#' `buffer_m > 0` also counts an observation as captured when modelled +#' habitat starts within `buffer_m` metres **upstream** along the same +#' `blue_line_key` and WSG, because observation points often mark the +#' downstream end of a sampled site. It follows the mainstem only (never a +#' tributary), stops at the WSG boundary, and is measured along the stream, +#' so it does not depend on segmentation. Accessibility is always the point's +#' own segment. Near lakes the buffer reaches connector flow lines, which +#' are rearing without any threshold test, so buffered rearing capture there +#' says nothing about thresholds. +#' +#' @section Reading the numbers: +#' - **Accessible** is `streams_access.access_ IN (1, 2)`, the definition +#' [lnk_rollup_wsg()]'s `accessible_km` uses, so capture and cost agree. +#' The spawning and rearing flags are gated by the pipeline's own +#' `streams_habitat.accessible`, which differs slightly, so +#' `share_spawning` is not strictly a subset of `share_accessible`. +#' - **Accessible capture is partly circular.** Observations are pipeline +#' inputs: they lift barriers (`observation_threshold` in +#' `parameters_fresh.csv`), they are break points, and where +#' `apply_habitat_overlay` is on, `user_habitat_classification` forces +#' habitat. Spawning and rearing capture is the score. +#' `n_in_uhc_spawn` / `n_in_uhc_rear` count locations inside a +#' `user_habitat_classification` reach confirming that habitat type for the +#' species (indicator 1); with `overlay_applied` TRUE the segments wholly +#' inside such a reach are forced to habitat, so most of those locations are +#' captured by construction. +#' - **Thresholds set from these observations score in-sample.** A cutoff +#' calibrated on the same records (e.g. a use quantile) is partly +#' guaranteed its capture; hold records out to score it fairly. +#' - `rearing` is stream rearing, the flag thresholds govern and that +#' `rearing_km` costs. `rearing_any` adds lake and wetland rearing. +#' - Known biases, reported rather than corrected: observation points often +#' sit at the downstream end of a site (see `buffer_m`); sampling clusters +#' near road access; and fish are only observed where they have access, so +#' observed gradients are cut off at the access limit. +#' +#' @section Miss reasons: +#' `miss_reason_spawn` keys on `spawning` and `miss_reason_rear` on +#' `rearing_any`, so a location on lake or wetland rearing is captured for +#' the rear reason (compare them with `n_rearing_any`, not `n_rearing`). +#' Both re-evaluate the bundle's own +#' habitat predicates ([fresh::frs_habitat_predicates()] over `cfg$rules` +#' and its thresholds CSV, channel-width model) on the segment, then again +#' with the gradient and the channel width each moved to the stage's +#' minimum: +#' - `NA` — captured; `no_segment` — the location attaches to no segment; +#' - `not_accessible` — the segment's `access_` is not 1 or 2; +#' - `fails_gradient` / `fails_width` / `width_null` — passes once that one +#' value is relaxed (`width_null` when the width is NULL); +#' `gradient_below_min` when the gradient fails by sitting below the +#' window (a negative gradient), not above it; +#' - `fails_gradient_or_width` — either relaxation alone passes (through +#' different branches of the rule); +#' - `fails_gradient_and_width` — passes only with both relaxed; +#' - `rule_excludes` — fails even then: edge type, waterbody or lake size; +#' - `post_predicate` — passes the predicate but is not habitat: removed by +#' clustering (connectivity to spawning) or access gating. +#' +#' @param conn A [DBI::DBIConnection-class] object (from [lnk_db_conn()]). +#' @param aoi Character vector of watershed group codes. Each must be +#' persisted in `schema`, with `streams_access` built (fails loud +#' otherwise). +#' @param cfg An `lnk_config` object from [lnk_config()]: the bundle that +#' produced `schema`. Supplies the rules and thresholds for the miss +#' reasons. Where `.log` records a WSG's run, its `config_name` +#' must be `cfg$name`. +#' @param loaded Named list from [lnk_load_overrides()]. Uses +#' `observation_exclusions`, `wsg_species_presence`, `parameters_fresh` +#' and (when present) `user_habitat_classification`. +#' @param species Character vector of model species codes (e.g. +#' `c("CH", "BT")`). Each must name `.streams_habitat_` and +#' `.streams_access.access_`. +#' @param schema Persist schema to score. Required: a bundle's +#' `pipeline.schema` is not a reliable guide to which schema it built +#' (`default` declares `fresh`, which the `bcfishpass` bundle writes). +#' @param observations Schema-qualified observations table. Default +#' `"bcfishobs.observations"`. Needs `observation_key`, `species_code`, +#' `watershed_group_code`, `blue_line_key`, `downstream_route_measure`, +#' `match_type`, `activity_code`, `activity`, `life_stage`, `source`. +#' @param species_obs Named list mapping a model species to the observation +#' species codes that count as it. Species not named map to themselves. +#' Default pools DV records with BT (`list(BT = c("BT", "DV"))`). +#' @param match_types Character vector of `match_type` classes (first +#' letter) to keep. Default `c("A", "B")`. +#' @param buffer_m Numeric scalar >= 0. Upstream distance within which +#' modelled habitat still captures an observation. Default 0. +#' @param absences Optional data frame of sites sampled with the species +#' not caught: `watershed_group_code`, `blue_line_key`, +#' `downstream_route_measure`, `species_code` (model species). The caller +#' locates them on the network. Rows for a species not present in the WSG +#' are dropped. Absences are captured the same way observations are, +#' `buffer_m` included, so the two rates stay comparable. A WSG x species +#' with no rows in `absences` reports `NA` (not assessed), so pass only +#' sites from the areas that were surveyed. Default `NULL`. +#' +#' @return A list of two data frames: +#' - `summary`: one row per `watershed_group_code` x `species_code` x +#' `stage` (`any`, `spawn`, `rear`), with `schema`, `config_name`, +#' `buffer_m`, `overlay_applied`, `run_logged` (whether `.log` +#' records the WSG), `n_obs` (locations on a segment), `n_unattached`, +#' `n_accessible`, `n_inaccessible`, `n_spawning`, `n_rearing`, +#' `n_rearing_any`, `n_habitat` (spawning or any rearing), the matching +#' `share_*` (of `n_obs`; `NA` when `n_obs` is 0), `n_in_uhc_spawn`, +#' `n_in_uhc_rear`, and cost +#' `accessible_km`, `spawning_km`, `rearing_km` from [lnk_rollup_wsg()]. +#' With `absences`, also `n_absence`, `n_absence_accessible`, +#' `n_absence_spawning`, `n_absence_rearing` (stream) and +#' `n_absence_rearing_any` (the same on every stage). +#' - `observations`: one row per retained location, with its segment's +#' `gradient`, `channel_width`, `channel_width_source`, `edge_type`, +#' `stream_order`, `waterbody_type`, `access`, the capture flags, +#' `in_uhc_spawn`, `in_uhc_rear`, the predicate results, and the two miss +#' reasons. +#' +#' @examples +#' \dontrun{ +#' conn <- lnk_db_conn(dbname = "fwapg", host = "localhost", port = 5432L, +#' user = "postgres", password = "postgres") +#' cfg <- lnk_config("default") +#' loaded <- lnk_load_overrides(cfg) +#' +#' # How many CH and BT observations in Morice sit on modelled habitat in +#' # the `default` bundle's schema, and at what cost in km? +#' v <- lnk_habitat_validate(conn, aoi = "MORR", cfg = cfg, loaded = loaded, +#' species = c("CH", "BT"), +#' schema = "fresh_default") +#' v$summary[v$summary$stage == "rear", +#' c("species_code", "n_obs", "share_rearing_any", "rearing_km")] +#' +#' # What keeps the rearing misses out of habitat? +#' table(v$observations$miss_reason_rear, useNA = "ifany") +#' } +#' +#' @family compare +#' @seealso [lnk_rollup_wsg()], [lnk_compare_rollup()] +#' @export +# nolint start: indentation_linter +lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, + observations = "bcfishobs.observations", + species_obs = list(BT = c("BT", "DV")), + match_types = c("A", "B"), + buffer_m = 0, + absences = NULL) { + stopifnot( + inherits(conn, "DBIConnection"), + inherits(cfg, "lnk_config"), + is.list(loaded), + is.character(aoi), length(aoi) >= 1L, !anyNA(aoi), + all(grepl("^[A-Z]{3,5}$", aoi)), + is.character(species), length(species) >= 1L, !anyNA(species), + # Interpolated into `streams_habitat_` / `access_`. + all(grepl("^[A-Za-z]+$", species)), + is.character(schema), length(schema) == 1L, !is.na(schema), + grepl("^[a-z_][a-z0-9_]*$", schema), + is.list(species_obs), + length(species_obs) == 0L || !is.null(names(species_obs)), + all(vapply(species_obs, is.character, logical(1))), + is.character(match_types), length(match_types) >= 1L, + all(grepl("^[A-Z]$", match_types)), + is.numeric(buffer_m), length(buffer_m) == 1L, !is.na(buffer_m), + buffer_m >= 0, is.finite(buffer_m), + is.null(absences) || is.data.frame(absences) + ) + .lnk_validate_identifier(observations, "observations table") + for (nm in c("wsg_species_presence", "parameters_fresh")) { + if (is.null(loaded[[nm]])) { + stop("loaded$", nm, " is required", call. = FALSE) + } + } + aoi <- unique(aoi) + species <- unique(toupper(species)) + species_obs <- lapply(species_obs, toupper) + names(species_obs) <- toupper(names(species_obs)) + + .lnk_hv_check_schema(conn, schema, aoi, species) + logged <- .lnk_hv_check_log(conn, schema, aoi, cfg) + + spec <- .lnk_hv_spec(loaded$wsg_species_presence, aoi, species, + species_obs) + obs <- .lnk_hv_obs(conn, schema, observations, spec, loaded, species, + match_types, buffer_m) + obs <- .lnk_hv_dedup(obs) + obs <- .lnk_hv_predicates(conn, schema, obs, cfg, loaded, species) + obs <- .lnk_hv_reasons(obs) + + cost <- do.call(rbind, lapply(aoi, function(w) { + lnk_rollup_wsg(conn, aoi = w, species = species, schema = schema) + })) + names(cost)[names(cost) == "wsg"] <- "watershed_group_code" + names(cost)[names(cost) == "species"] <- "species_code" + + abs_sum <- NULL + if (!is.null(absences)) { + abs_sum <- .lnk_hv_absences(conn, schema, absences, spec, aoi, species, + buffer_m) + } + + summary <- .lnk_hv_summary(obs, cost, abs_sum, aoi, species) + summary$run_logged <- summary$watershed_group_code %in% logged + summary <- cbind( + data.frame( + schema = schema, config_name = cfg$name %||% NA_character_, + buffer_m = buffer_m, + overlay_applied = !is.null(loaded$user_habitat_classification) && + isTRUE(cfg$pipeline$apply_habitat_overlay %||% TRUE), + stringsAsFactors = FALSE), + summary) + rownames(obs) <- NULL + list(summary = summary, observations = obs) +} + + +# --------------------------------------------------------------------------- +# Internal helpers +# --------------------------------------------------------------------------- + +#' Fail loud on WSGs or species the schema cannot score. +#' @noRd +.lnk_hv_check_schema <- function(conn, schema, aoi, species) { + aoi_arr <- paste0("{", paste(aoi, collapse = ","), "}") + have <- DBI::dbGetQuery(conn, sprintf( + "SELECT 'streams' AS tbl, watershed_group_code + FROM (SELECT DISTINCT watershed_group_code FROM %1$s.streams + WHERE watershed_group_code = ANY($1)) s + UNION ALL + SELECT 'streams_access', watershed_group_code + FROM (SELECT DISTINCT watershed_group_code FROM %1$s.streams_access + WHERE watershed_group_code = ANY($1)) a", schema), + params = list(aoi_arr)) + miss_streams <- setdiff(aoi, have$watershed_group_code[have$tbl == "streams"]) + if (length(miss_streams) > 0L) { + stop("not persisted in ", schema, ".streams: ", + paste(miss_streams, collapse = ", "), call. = FALSE) + } + miss_access <- setdiff( + aoi, have$watershed_group_code[have$tbl == "streams_access"]) + if (length(miss_access) > 0L) { + stop("no ", schema, ".streams_access rows for: ", + paste(miss_access, collapse = ", "), + " (build access with lnk_pipeline_run(mapping_code = TRUE))", + call. = FALSE) + } + for (sp in species) { + tbl <- paste0("streams_habitat_", tolower(sp)) + if (!DBI::dbExistsTable(conn, DBI::Id(schema = schema, table = tbl))) { + stop(schema, ".", tbl, " does not exist", call. = FALSE) + } + } + invisible(NULL) +} + +#' WSGs whose latest logged run is recorded, after checking the config. +#' +#' A schema is scored with `cfg`'s rules, so a WSG logged as built by a +#' different config is an error. WSGs with no log row (built before the log +#' existed) are allowed and returned as unlogged. +#' @noRd +.lnk_hv_check_log <- function(conn, schema, aoi, cfg) { + if (!DBI::dbExistsTable(conn, DBI::Id(schema = schema, table = "log"))) { + return(character(0)) + } + lg <- DBI::dbGetQuery(conn, sprintf( + "SELECT DISTINCT ON (watershed_group_code) + watershed_group_code, config_name + FROM %s.log + WHERE watershed_group_code = ANY($1) + ORDER BY watershed_group_code, date_start DESC", schema), + params = list(paste0("{", paste(aoi, collapse = ","), "}"))) + bad <- lg[!is.na(lg$config_name) & lg$config_name != cfg$name, , + drop = FALSE] + if (nrow(bad) > 0L) { + stop(schema, ".log records these WSGs as built by another config than '", + cfg$name, "': ", + paste(sprintf("%s (%s)", bad$watershed_group_code, bad$config_name), + collapse = ", "), + call. = FALSE) + } + lg$watershed_group_code +} + +#' Admitted (WSG, model species, observation species) triples. +#' +#' An observation species counts for a model species only in WSGs where +#' the model species is present. +#' @noRd +.lnk_hv_spec <- function(presence, aoi, species, species_obs) { + rows <- lapply(aoi, function(w) { + row <- presence[presence$watershed_group_code == w, , drop = FALSE] + if (nrow(row) == 0L) return(NULL) + present <- intersect(species, .lnk_wsg_species_present(row[1, ])) + if (length(present) == 0L) return(NULL) + do.call(rbind, lapply(present, function(sp) { + data.frame(watershed_group_code = w, species_code = sp, + obs_species = unique(species_obs[[sp]] %||% sp), + stringsAsFactors = FALSE) + })) + }) + out <- do.call(rbind, rows) + if (is.null(out)) { + out <- data.frame(watershed_group_code = character(0), + species_code = character(0), + obs_species = character(0), stringsAsFactors = FALSE) + } + out +} + +#' Spawn / rear stage from bcfishobs activity and life stage. +#' +#' Spawning from activity; rearing from activity or a juvenile life stage. +#' Adult, holding, migrating and plain "observed" records carry no stage. +#' @noRd +.lnk_obs_stage <- function(activity_code, activity, life_stage) { + act <- paste(activity_code, activity) + list( + is_spawn = grepl("\\bSPL\\b|\\bSPM\\b|\\bS\\b|Spawning", act), + is_rear = grepl("\\bR\\b|\\bREA\\b|Rearing", act) | + grepl("Fry|Parr|Juvenile", life_stage) + ) +} + +#' SQL for "this flag, or the flag on habitat starting within the buffer". +#' @noRd +.lnk_hv_buffered <- function(schema, sp, flag_sql, buf) { + sprintf( + "(coalesce(%3$s, false) OR EXISTS ( + SELECT 1 FROM %1$s.streams s2 + JOIN %1$s.streams_habitat_%2$s h + ON h.id_segment = s2.id_segment + AND h.watershed_group_code = s2.watershed_group_code + WHERE s2.blue_line_key = a.blue_line_key + AND s2.watershed_group_code = a.watershed_group_code + AND s2.downstream_route_measure >= a.seg_drm + AND s2.downstream_route_measure < a.m + %4$s + AND (%3$s)))", + schema, sp, flag_sql, buf) +} + +#' Drop a session temp table if present (a bare DROP IF EXISTS NOTICEs). +#' @noRd +.lnk_hv_drop_temp <- function(conn, name) { + hit <- DBI::dbGetQuery(conn, "SELECT to_regclass($1) IS NOT NULL AS x", + params = list(paste0("pg_temp.", name)))$x + if (isTRUE(hit)) .lnk_db_execute(conn, paste0("DROP TABLE pg_temp.", name)) + invisible(NULL) +} + +#' Filter observations, attach each to its segment, and flag capture. +#' @noRd +.lnk_hv_obs <- function(conn, schema, observations, spec, loaded, species, + match_types, buffer_m) { + excl <- loaded$observation_exclusions + keys <- character(0) + if (!is.null(excl) && nrow(excl) > 0L) { + keys <- excl$observation_key[excl$data_error %in% c(TRUE, "t") | + excl$release_exclude %in% c(TRUE, "t")] + } + DBI::dbWriteTable(conn, "lnk_vd_excl", + data.frame(observation_key = as.character(keys)), + temporary = TRUE, overwrite = TRUE) + DBI::dbWriteTable(conn, "lnk_vd_spec", spec, + temporary = TRUE, overwrite = TRUE) + uhc <- loaded$user_habitat_classification + uhc <- if (is.null(uhc) || nrow(uhc) == 0L) { + data.frame(species_code = character(0), blue_line_key = integer(0), + downstream_route_measure = numeric(0), + upstream_route_measure = numeric(0), + spawning = integer(0), rearing = integer(0)) + } else { + # Indicator 1 is confirmed habitat, the only value the overlay forces; + # -1 / -4 are confirmed non-habitat. + as.data.frame(uhc)[, c("species_code", "blue_line_key", + "downstream_route_measure", + "upstream_route_measure", "spawning", "rearing")] + } + DBI::dbWriteTable(conn, "lnk_vd_uhc", uhc, temporary = TRUE, + overwrite = TRUE) + + .lnk_hv_drop_temp(conn, "lnk_vd_obs") + DBI::dbExecute(conn, sprintf( + "CREATE TEMP TABLE lnk_vd_obs AS + SELECT o.observation_key, sp.species_code, + o.species_code AS obs_species, + o.watershed_group_code, o.blue_line_key, + o.downstream_route_measure AS m, + left(o.match_type, 1) AS match_class, + o.activity_code, o.activity, o.life_stage + FROM %s o + JOIN pg_temp.lnk_vd_spec sp + ON sp.watershed_group_code = o.watershed_group_code + AND sp.obs_species = o.species_code + WHERE NOT EXISTS (SELECT 1 FROM pg_temp.lnk_vd_excl e + WHERE e.observation_key = o.observation_key) + AND coalesce(o.source, '') NOT LIKE 'Releases Database%%' + AND left(o.match_type, 1) = ANY($1)", observations), + params = list(paste0("{", paste(match_types, collapse = ","), "}"))) + + # The segment the model tests: the one STARTING within 1 m (upstream), + # else the one containing the point. n_cand > 1 is the expected case of + # a point just below a break. + .lnk_hv_drop_temp(conn, "lnk_vd_att") + .lnk_db_execute(conn, sprintf( + "CREATE TEMP TABLE lnk_vd_att AS + SELECT o.*, s.id_segment, s.n_cand, s.seg_drm, s.gradient, + s.channel_width, s.channel_width_source, s.edge_type, + s.stream_order, s.waterbody_key + FROM pg_temp.lnk_vd_obs o + LEFT JOIN LATERAL ( + SELECT s.id_segment, s.downstream_route_measure AS seg_drm, + s.gradient, s.channel_width, s.channel_width_source, + s.edge_type, s.stream_order, s.waterbody_key, + count(*) OVER ()::int AS n_cand + FROM %s.streams s + WHERE s.blue_line_key = o.blue_line_key + AND s.watershed_group_code = o.watershed_group_code + AND (abs(s.downstream_route_measure - o.m) < 1 + OR (s.downstream_route_measure <= o.m + AND o.m < s.upstream_route_measure)) + ORDER BY (abs(s.downstream_route_measure - o.m) < 1) DESC, + s.downstream_route_measure DESC + LIMIT 1) s ON true", schema)) + + buf <- format(buffer_m, scientific = FALSE) + per_species <- paste(vapply(species, function(sp) { + spl <- tolower(sp) + sprintf( + "SELECT a.*, wb.waterbody_type, + x.access_%1$s AS access, + coalesce(x.access_%1$s IN (1, 2), false) AS accessible, + %3$s AS spawning, + %4$s AS rearing, + %5$s AS rearing_any, + EXISTS ( + SELECT 1 FROM pg_temp.lnk_vd_uhc u + WHERE u.species_code = a.species_code + AND u.blue_line_key = a.blue_line_key + AND u.spawning = 1 + AND a.m BETWEEN u.downstream_route_measure + AND u.upstream_route_measure) AS in_uhc_spawn, + EXISTS ( + SELECT 1 FROM pg_temp.lnk_vd_uhc u + WHERE u.species_code = a.species_code + AND u.blue_line_key = a.blue_line_key + AND u.rearing = 1 + AND a.m BETWEEN u.downstream_route_measure + AND u.upstream_route_measure) AS in_uhc_rear + FROM pg_temp.lnk_vd_att a + LEFT JOIN %2$s.streams_access x + ON x.id_segment = a.id_segment + AND x.watershed_group_code = a.watershed_group_code + LEFT JOIN %2$s.streams_habitat_%1$s h + ON h.id_segment = a.id_segment + AND h.watershed_group_code = a.watershed_group_code + LEFT JOIN whse_basemapping.fwa_waterbodies wb + ON wb.waterbody_key = a.waterbody_key + WHERE a.species_code = %6$s", + spl, schema, + .lnk_hv_buffered(schema, spl, "h.spawning", buf), + .lnk_hv_buffered(schema, spl, "h.rearing", buf), + .lnk_hv_buffered(schema, spl, + "h.rearing OR h.lake_rearing OR h.wetland_rearing", + buf), + .lnk_quote_literal(sp)) + }, character(1)), collapse = "\n UNION ALL\n ") + + out <- DBI::dbGetQuery(conn, paste(per_species, + "ORDER BY species_code, observation_key")) + # A location with no segment has no habitat to test. + none <- is.na(out$id_segment) + out$accessible[none] <- NA + out$spawning[none] <- NA + out$rearing[none] <- NA + out$rearing_any[none] <- NA + out +} + +#' One row per species x blue_line_key x metre. +#' +#' Stage flags are OR-ed across the records at a location; the first +#' record (by observation_key) supplies everything else. +#' @noRd +.lnk_hv_dedup <- function(obs) { + st <- .lnk_obs_stage(obs$activity_code, obs$activity, obs$life_stage) + obs$is_spawn <- st$is_spawn + obs$is_rear <- st$is_rear + obs$n_records <- rep(1L, nrow(obs)) + if (nrow(obs) == 0L) return(obs) + loc <- paste(obs$species_code, obs$blue_line_key, round(obs$m)) + ord <- order(loc, obs$observation_key) + obs <- obs[ord, , drop = FALSE] + loc <- loc[ord] + any_spawn <- tapply(obs$is_spawn, loc, any) + any_rear <- tapply(obs$is_rear, loc, any) + n_rec <- tapply(obs$observation_key, loc, length) + sp_rec <- tapply(obs$obs_species, loc, + function(x) paste(sort(unique(x)), collapse = ";")) + keep <- !duplicated(loc) + out <- obs[keep, , drop = FALSE] + k <- loc[keep] + out$is_spawn <- unname(any_spawn[k]) + out$is_rear <- unname(any_rear[k]) + out$n_records <- as.integer(unname(n_rec[k])) + out$obs_species <- unname(sp_rec[k]) + out +} + +#' One species' predicate inputs, assembled as frs_habitat_classify() does. +#' @noRd +.lnk_hv_sp_params <- function(params, params_fresh, sp) { + ps <- params[[sp]] + fp <- params_fresh[params_fresh$species_code == sp, , drop = FALSE] + if (is.null(ps) || nrow(fp) == 0L) { + stop("no habitat parameters for species ", sp, " in the bundle", + call. = FALSE) + } + gmin <- fp$spawn_gradient_min[1] + list(species_code = sp, + spawn_gradient_max = ps$spawn_gradient_max, + spawn_gradient_min = if (is.null(gmin) || is.na(gmin)) 0 else gmin, + params_sp = ps) +} + +#' The stage minimums the predicates test against, from the same inputs. +#' +#' Spawning's gradient floor is `spawn_gradient_min` (parameters_fresh), +#' which fresh's spawn predicate uses directly; rearing's is the literal 0 +#' fresh writes into the rear predicate (`c(0, rear_g[2])`). Widths are the +#' `ranges$$channel_width` minimums both predicates inherit. No +#' bundled rules.yaml sets a rule-level gradient, and the rule-level +#' `channel_width: [0, 9999]` on river polygons contains every minimum. +#' @noRd +.lnk_hv_stage_min <- function(spp) { + rng <- spp$params_sp$ranges + list( + spawn = c(gradient = spp$spawn_gradient_min, + width = rng$spawn$channel_width[1] %||% 0), + rear = c(gradient = 0, + width = rng$rear$channel_width[1] %||% 0)) +} + +#' A predicate with s.gradient and/or s.channel_width fixed to a value. +#' @noRd +.lnk_hv_relax <- function(pred, gradient = NULL, width = NULL) { + if (!is.null(gradient)) { + pred <- gsub("\\bs\\.gradient\\b", + sprintf("(%s::double precision)", format(gradient, scientific = FALSE)), + pred, perl = TRUE) + } + if (!is.null(width)) { + pred <- gsub("\\bs\\.channel_width\\b", + sprintf("(%s::double precision)", format(width, scientific = FALSE)), + pred, perl = TRUE) + } + pred +} + +#' Evaluate the bundle's habitat predicates on each observation's segment. +#' +#' Adds pred_, pred__g (gradient relaxed), pred__w +#' (width relaxed) and pred__gw. The rear stage ORs stream, lake and +#' wetland rearing, as `rearing_any` does. +#' @noRd +.lnk_hv_predicates <- function(conn, schema, obs, cfg, loaded, species) { + cols <- paste0("pred_", rep(c("spawn", "rear"), each = 4L), + c("", "_g", "_w", "_gw")) + for (cl in cols) obs[[cl]] <- rep(NA, nrow(obs)) + obs$gradient_min_spawn <- rep(NA_real_, nrow(obs)) + obs$gradient_min_rear <- rep(NA_real_, nrow(obs)) + att <- obs[!is.na(obs$id_segment), , drop = FALSE] + if (nrow(att) == 0L) return(obs) + + params <- fresh::frs_params(csv = .lnk_habitat_thresholds_csv(cfg), + rules_yaml = cfg$rules) + seg <- unique(att[, c("species_code", "id_segment", + "watershed_group_code")]) + DBI::dbWriteTable(conn, "lnk_vd_seg", seg, temporary = TRUE, + overwrite = TRUE) + + for (sp in species) { + mins <- .lnk_hv_stage_min( + .lnk_hv_sp_params(params, loaded$parameters_fresh, sp)) + is_sp <- obs$species_code == sp + obs$gradient_min_spawn[is_sp] <- mins$spawn[["gradient"]] + obs$gradient_min_rear[is_sp] <- mins$rear[["gradient"]] + } + + res <- lapply(species, function(sp) { + if (!any(seg$species_code == sp)) return(NULL) + spp <- .lnk_hv_sp_params(params, loaded$parameters_fresh, sp) + pr <- fresh::frs_habitat_predicates(spp, model = "cw") + mins <- .lnk_hv_stage_min(spp) + stage_pred <- list( + spawn = pr$spawn, + rear = sprintf("(%s) OR (%s) OR (%s)", pr$rear, pr$lake_rear, + pr$wetland_rear)) + exprs <- unlist(lapply(c("spawn", "rear"), function(st) { + g <- mins[[st]][["gradient"]] + w <- mins[[st]][["width"]] + p <- stage_pred[[st]] + v <- c(p, + .lnk_hv_relax(p, gradient = g), + .lnk_hv_relax(p, width = w), + .lnk_hv_relax(p, gradient = g, width = w)) + sprintf("coalesce((%s), false) AS pred_%s%s", v, st, + c("", "_g", "_w", "_gw")) + })) + DBI::dbGetQuery(conn, sprintf( + "SELECT %s AS species_code, s.id_segment, s.watershed_group_code, + %s + FROM %s.streams s + JOIN pg_temp.lnk_vd_seg k + ON k.id_segment = s.id_segment + AND k.watershed_group_code = s.watershed_group_code + AND k.species_code = %s", + .lnk_quote_literal(sp), paste(exprs, collapse = ",\n "), + schema, .lnk_quote_literal(sp))) + }) + res <- do.call(rbind, res) + key_o <- paste(obs$species_code, obs$id_segment, obs$watershed_group_code) + key_r <- paste(res$species_code, res$id_segment, res$watershed_group_code) + i <- match(key_o, key_r) + hit <- !is.na(obs$id_segment) & !is.na(i) + for (cl in cols) obs[[cl]][hit] <- res[[cl]][i[hit]] + obs +} + +#' Miss reason for one stage from its capture flag and predicate results. +#' @noRd +.lnk_habitat_miss_reason <- function(captured, accessible, channel_width, + p, p_g, p_w, p_gw, + gradient = NA_real_, + gradient_min = NA_real_) { + below <- gradient < gradient_min + out <- rep(NA_character_, length(captured)) + out[is.na(captured)] <- "no_segment" + miss <- captured %in% FALSE + set <- function(cond, why) { + idx <- miss & is.na(out) & (cond %in% TRUE) + out[idx] <<- why + } + set(!accessible, "not_accessible") + set(p, "post_predicate") + set(p_g & !p_w & below, "gradient_below_min") + set(p_g & !p_w, "fails_gradient") + set(p_w & !p_g & is.na(channel_width), "width_null") + set(p_w & !p_g, "fails_width") + # Either relaxation alone passes (different OR-branches of the rule). + set(p_g & p_w, "fails_gradient_or_width") + set(p_gw, "fails_gradient_and_width") + set(rep(TRUE, length(out)), "rule_excludes") + out +} + +#' Add miss_reason_spawn / miss_reason_rear. +#' @noRd +.lnk_hv_reasons <- function(obs) { + obs$miss_reason_spawn <- .lnk_habitat_miss_reason( + obs$spawning, obs$accessible, obs$channel_width, obs$pred_spawn, + obs$pred_spawn_g, obs$pred_spawn_w, obs$pred_spawn_gw, + obs$gradient, obs$gradient_min_spawn) + obs$miss_reason_rear <- .lnk_habitat_miss_reason( + obs$rearing_any, obs$accessible, obs$channel_width, obs$pred_rear, + obs$pred_rear_g, obs$pred_rear_w, obs$pred_rear_gw, + obs$gradient, obs$gradient_min_rear) + obs +} + +#' Attach absence sites to their segment and count capture. +#' @noRd +.lnk_hv_absences <- function(conn, schema, absences, spec, aoi, species, + buffer_m) { + cols <- c("watershed_group_code", "blue_line_key", + "downstream_route_measure", "species_code") + miss <- setdiff(cols, names(absences)) + if (length(miss) > 0L) { + stop("absences is missing columns: ", paste(miss, collapse = ", "), + call. = FALSE) + } + a <- as.data.frame(absences)[, cols] + a$species_code <- toupper(a$species_code) + present <- paste(spec$watershed_group_code, spec$species_code) + a <- a[paste(a$watershed_group_code, a$species_code) %in% present, , + drop = FALSE] + DBI::dbWriteTable(conn, "lnk_vd_abs", a, temporary = TRUE, + overwrite = TRUE) + buf <- format(buffer_m, scientific = FALSE) + per_species <- paste(vapply(species, function(sp) { + spl <- tolower(sp) + sprintf( + "SELECT a.watershed_group_code, a.species_code, + a.id_segment IS NOT NULL AS attached, + coalesce(x.access_%1$s IN (1, 2), false) AS accessible, + %4$s AS spawning, + %5$s AS rearing, + %6$s AS rearing_any + FROM ( + SELECT b.watershed_group_code, b.species_code, b.blue_line_key, + b.downstream_route_measure AS m, s.id_segment, s.seg_drm + FROM pg_temp.lnk_vd_abs b + LEFT JOIN LATERAL ( + SELECT s.id_segment, s.downstream_route_measure AS seg_drm + FROM %2$s.streams s + WHERE s.blue_line_key = b.blue_line_key + AND s.watershed_group_code = b.watershed_group_code + AND (abs(s.downstream_route_measure + - b.downstream_route_measure) < 1 + OR (s.downstream_route_measure <= b.downstream_route_measure + AND b.downstream_route_measure < s.upstream_route_measure)) + ORDER BY (abs(s.downstream_route_measure + - b.downstream_route_measure) < 1) DESC, + s.downstream_route_measure DESC + LIMIT 1) s ON true + WHERE b.species_code = %3$s) a + LEFT JOIN %2$s.streams_access x + ON x.id_segment = a.id_segment + AND x.watershed_group_code = a.watershed_group_code + LEFT JOIN %2$s.streams_habitat_%1$s h + ON h.id_segment = a.id_segment + AND h.watershed_group_code = a.watershed_group_code", + spl, schema, .lnk_quote_literal(sp), + .lnk_hv_buffered(schema, spl, "h.spawning", buf), + .lnk_hv_buffered(schema, spl, "h.rearing", buf), + .lnk_hv_buffered(schema, spl, + "h.rearing OR h.lake_rearing OR h.wetland_rearing", + buf)) + }, character(1)), collapse = "\n UNION ALL\n ") + d <- DBI::dbGetQuery(conn, per_species) + d <- d[d$attached, , drop = FALSE] + grid <- expand.grid(watershed_group_code = aoi, species_code = species, + stringsAsFactors = FALSE) + key_d <- factor(paste(d$watershed_group_code, d$species_code), + levels = paste(grid$watershed_group_code, grid$species_code)) + # A WSG x species with no absence rows was not assessed: NA, not 0. + count_by <- function(flag) { + n <- tapply(flag, key_d, sum) + as.integer(ifelse(is.na(n), NA_integer_, n)) + } + grid$n_absence <- count_by(rep(TRUE, nrow(d))) + grid$n_absence_accessible <- count_by(d$accessible) + grid$n_absence_spawning <- count_by(d$spawning) + grid$n_absence_rearing <- count_by(d$rearing) + grid$n_absence_rearing_any <- count_by(d$rearing_any) + grid +} + +#' Per WSG x species x stage capture table, joined to cost and absences. +#' @noRd +.lnk_hv_summary <- function(obs, cost, abs_sum, aoi, species) { + stages <- c("any", "spawn", "rear") + grid <- expand.grid(stage = stages, species_code = species, + watershed_group_code = aoi, stringsAsFactors = FALSE) + grid <- grid[, c("watershed_group_code", "species_code", "stage")] + rows <- lapply(seq_len(nrow(grid)), function(i) { + g <- grid[i, ] + d <- obs[obs$watershed_group_code == g$watershed_group_code & + obs$species_code == g$species_code, , drop = FALSE] + if (g$stage == "spawn") d <- d[d$is_spawn, , drop = FALSE] + if (g$stage == "rear") d <- d[d$is_rear, , drop = FALSE] + un <- is.na(d$id_segment) + n_un <- sum(un) + d <- d[!un, , drop = FALSE] + n <- nrow(d) + share <- function(k) if (n == 0L) NA_real_ else k / n + n_acc <- sum(d$accessible) + n_sp <- sum(d$spawning) + n_re <- sum(d$rearing) + n_ra <- sum(d$rearing_any) + n_hab <- sum(d$spawning | d$rearing_any) + data.frame( + n_obs = n, n_unattached = n_un, + n_accessible = n_acc, n_inaccessible = n - n_acc, + n_spawning = n_sp, n_rearing = n_re, n_rearing_any = n_ra, + n_habitat = n_hab, + share_accessible = share(n_acc), share_spawning = share(n_sp), + share_rearing = share(n_re), share_rearing_any = share(n_ra), + share_habitat = share(n_hab), + n_in_uhc_spawn = sum(d$in_uhc_spawn), + n_in_uhc_rear = sum(d$in_uhc_rear)) + }) + out <- cbind(grid, do.call(rbind, rows)) + out <- merge(out, cost, by = c("watershed_group_code", "species_code"), + all.x = TRUE, sort = FALSE) + if (!is.null(abs_sum)) { + out <- merge(out, abs_sum, by = c("watershed_group_code", "species_code"), + all.x = TRUE, sort = FALSE) + } + out <- out[order(out$watershed_group_code, out$species_code, + match(out$stage, stages)), , drop = FALSE] + rownames(out) <- NULL + out +} +# nolint end: indentation_linter diff --git a/data-raw/habitat_validate.R b/data-raw/habitat_validate.R new file mode 100644 index 00000000..d29e6b7e --- /dev/null +++ b/data-raw/habitat_validate.R @@ -0,0 +1,399 @@ +#!/usr/bin/env Rscript +# habitat_validate.R — score persisted runs against fish observations (link#283). +# +# For each bundle:schema pair, runs lnk_habitat_validate() over every WSG the +# schema has `streams_access` for (or --wsgs=), at each buffer, and writes +# aggregates only. With two bundles, it diffs them on the WSGs both hold, after +# asserting both retained the same observations. +# +# Read-only against docker fwapg (:5432): session temp tables only. +# +# Rscript data-raw/habitat_validate.R \ +# --bundles=default:fresh_default,bcfishpass:fresh \ +# [--wsgs=MORR,BULK] [--species=CH,BT] [--buffers=0,100] [--out=] +# +# Absences (optional): with LNK_KNOWLEDGE_DIR pointing at the private +# `knowledge` repo, FISS data-submission sites that were sampled (effort +# recorded or no-fish-captured) become absences of a species when either +# - no fish were caught (`nfc`) and no species is listed, or +# - species are listed, none is the species (BT: Bull Trout or Dolly +# Varden, pooled as the observations are), and none is a taxon that could +# be it (`Unidentified Species`; `Salmon (General)` for CH; +# `Unidentifiable Trout` for BT). +# A site that caught fish but listed no species (most sites with an empty +# list) says nothing about which species were absent, and is left out. +# Sites snap to the nearest FWA stream within 100 m, the distance bcfishobs +# A/B matches (the observations kept) use. `knowledge` is private and link is public, so no site row is +# written here, only counts. +# +# Writes to data-raw/logs/habitat_validate_283/ (or --out): +# summary.csv lnk_habitat_validate()$summary, all bundles x buffers +# totals.csv summed over each bundle's WSGs, per species x stage x buffer +# totals_shared.csv the same over the WSGs both bundles hold (two bundles) +# misses.csv miss-reason counts per bundle x species x stage (buffer 0) +# misses_binned.csv missed locations by gradient x width bin (buffer 0) +# diff.csv bundle A vs B per WSG x species x stage x buffer +# stamp.txt environment stamp, including per-schema run-log coverage + +suppressPackageStartupMessages({ + pkgload::load_all(quiet = TRUE) + library(DBI) +}) + +opt <- function(name, default = NULL) { + a <- grep(paste0("^--", name, "="), commandArgs(trailingOnly = TRUE), + value = TRUE) + if (length(a) == 0L) return(default) + sub(paste0("^--", name, "="), "", a[length(a)]) +} +split_csv <- function(x) { + if (is.null(x)) return(NULL) + v <- trimws(strsplit(x, ",")[[1]]) + v[nzchar(v)] +} + +bundles_arg <- opt("bundles") +if (is.null(bundles_arg)) { + stop("--bundles=:[,:] is required: a ", + "bundle's pipeline.schema does not say which schema it built", + call. = FALSE) +} +bundles <- do.call(rbind, lapply(split_csv(bundles_arg), function(b) { + p <- strsplit(b, ":", fixed = TRUE)[[1]] + if (length(p) != 2L || !all(nzchar(p))) { + stop("bad --bundles entry '", b, "': want :", call. = FALSE) + } + data.frame(config = p[1], schema = p[2], stringsAsFactors = FALSE) +})) +if (nrow(bundles) > 2L) stop("at most two bundles", call. = FALSE) +if (anyDuplicated(bundles$schema)) { + stop("the two bundles name the same schema", call. = FALSE) +} +species <- toupper(split_csv(opt("species", "CH,BT"))) +if (length(species) == 0L) stop("--species is empty", call. = FALSE) +buffers <- as.numeric(split_csv(opt("buffers", "0,100"))) +if (anyNA(buffers) || !0 %in% buffers) { + stop("--buffers must be numbers and include 0 (the misses are buffer 0)", + call. = FALSE) +} +wsgs_arg <- toupper(split_csv(opt("wsgs"))) +dir_out <- opt("out", file.path("data-raw", "logs", "habitat_validate_283")) +fs::dir_create(dir_out) +# Clear this script's outputs first, so a partial or one-bundle run cannot +# leave an older stamp or diff beside new CSVs. +outputs <- c("summary.csv", "totals.csv", "totals_shared.csv", "misses.csv", + "misses_binned.csv", "diff.csv", "stamp.txt") +unlink(file.path(dir_out, outputs)) + +conn <- lnk_db_conn(dbname = "fwapg", host = "localhost", port = 5432L, + user = "postgres", password = "postgres") + +# -- WSGs per bundle: those with access built --------------------------------- +bundle_wsgs <- lapply(seq_len(nrow(bundles)), function(i) { + w <- dbGetQuery(conn, sprintf( + "SELECT DISTINCT watershed_group_code FROM %s.streams_access + ORDER BY 1", bundles$schema[i]))$watershed_group_code + # toupper(NULL) is character(0), so test length, not NULL. + if (length(wsgs_arg) > 0L) { + miss <- setdiff(wsgs_arg, w) + if (length(miss) > 0L) { + stop(bundles$schema[i], " has no access for: ", + paste(miss, collapse = ", "), call. = FALSE) + } + w <- wsgs_arg + } + w +}) +if (nrow(bundles) == 2L && + length(intersect(bundle_wsgs[[1]], bundle_wsgs[[2]])) == 0L) { + stop("the two bundles share no WSGs", call. = FALSE) +} + +# -- absences from FISS sites (optional) -------------------------------------- +fiss_absences <- function() { + dir_k <- Sys.getenv("LNK_KNOWLEDGE_DIR", "") + if (!nzchar(dir_k)) return(NULL) + files <- Sys.glob(file.path(dir_k, "data", "*", "fiss_sites_*_all.csv")) + if (length(files) == 0L) { + stop("LNK_KNOWLEDGE_DIR set but no fiss_sites_*_all.csv under ", dir_k, + call. = FALSE) + } + num <- function(x) suppressWarnings(as.numeric(x)) + sites <- do.call(rbind, lapply(files, function(f) { + d <- utils::read.csv(f, colClasses = "character", na.strings = c("", "NA")) + data.frame(site_key = d$site_key, + utm_zone = num(d$utm_zone), utm_easting = num(d$utm_easting), + utm_northing = num(d$utm_northing), + sampled = d$effort_recorded %in% "TRUE" | d$nfc %in% "TRUE", + nfc = d$nfc %in% "TRUE", + species_list = ifelse(is.na(d$species_list), "", + d$species_list), + stringsAsFactors = FALSE) + })) + sites <- sites[sites$sampled & !is.na(sites$utm_zone) & + !is.na(sites$utm_easting) & !is.na(sites$utm_northing), ] + # A report spanning two groups appears in both snapshots under one key. + sites <- sites[!duplicated(sites$site_key), ] + dbWriteTable(conn, "hv_fiss", sites[, c("site_key", "utm_zone", + "utm_easting", "utm_northing")], + temporary = TRUE, overwrite = TRUE) + snap <- dbGetQuery(conn, " + WITH p AS ( + SELECT site_key, + st_transform(st_setsrid(st_makepoint(utm_easting, utm_northing), + 26900 + utm_zone::int), 3005) AS geom + FROM pg_temp.hv_fiss) + SELECT p.site_key, f.watershed_group_code, f.blue_line_key, + f.downstream_route_measure + + st_linelocatepoint(st_force2d(f.geom), p.geom) * f.length_metre + AS downstream_route_measure + FROM p + JOIN LATERAL ( + SELECT f.watershed_group_code, f.blue_line_key, + f.downstream_route_measure, f.length_metre, f.geom + FROM whse_basemapping.fwa_stream_networks_sp f + WHERE st_dwithin(f.geom, p.geom, 100) + AND f.edge_type <> 1425 + ORDER BY f.geom <-> p.geom + LIMIT 1) f ON true") + sites <- merge(sites, snap, by = "site_key") + # Only the snapshot WSGs were surveyed; a site snapping across a boundary + # would give its neighbour a partial count that reads as coverage. + covered <- toupper(basename(dirname(files))) + sites <- sites[sites$watershed_group_code %in% covered, ] + listed <- nzchar(trimws(sites$species_list)) + no_fish <- sites$nfc & !listed + caught <- list( + CH = grepl("Chinook", sites$species_list, ignore.case = TRUE), + BT = grepl("Bull Trout|Dolly Varden", sites$species_list, + ignore.case = TRUE)) + maybe <- list( + CH = grepl("Unidentified|Salmon \\(General\\)", sites$species_list, + ignore.case = TRUE), + BT = grepl("Unidentified|Unidentifiable Trout", sites$species_list, + ignore.case = TRUE)) + sp_abs <- intersect(species, names(caught)) + if (length(setdiff(species, sp_abs)) > 0L) { + message("no FISS absence rule for: ", + paste(setdiff(species, sp_abs), collapse = ", "), + "; not assessed") + } + if (length(sp_abs) == 0L) { + return(structure(list(), reason = "no FISS absence rule for the species")) + } + is_abs_of <- function(sp) no_fish | (listed & !caught[[sp]] & !maybe[[sp]]) + n_abs <- vapply(sp_abs, function(sp) sum(is_abs_of(sp)), integer(1)) + out <- do.call(rbind, lapply(sp_abs, function(sp) { + s <- sites[is_abs_of(sp), ] + data.frame(watershed_group_code = s$watershed_group_code, + blue_line_key = s$blue_line_key, + downstream_route_measure = s$downstream_route_measure, + species_code = rep(sp, nrow(s)), stringsAsFactors = FALSE) + })) + attr(out, "n_sites_sampled") <- nrow(sites) + attr(out, "n_absence_sites") <- n_abs + attr(out, "covered") <- sort(unique(covered)) + sha <- suppressWarnings(tryCatch( + system2("git", c("-C", shQuote(dir_k), "rev-parse", "--short", "HEAD"), + stdout = TRUE, stderr = FALSE), + error = function(e) character(0))) + attr(out, "knowledge_sha") <- if (length(sha) == 1L) sha else "not a git repo" + out +} +absences <- fiss_absences() +abs_note <- attr(absences, "reason") +if (!is.null(abs_note)) absences <- NULL + +# -- validate ------------------------------------------------------------------ +runs <- list() +for (i in seq_len(nrow(bundles))) { + cfg <- lnk_config(bundles$config[i]) + loaded <- suppressWarnings(lnk_load_overrides(cfg)) + for (b in buffers) { + message(sprintf("validating %s:%s, %d WSGs, buffer %s m", + bundles$config[i], bundles$schema[i], + length(bundle_wsgs[[i]]), b)) + runs[[length(runs) + 1L]] <- c( + lnk_habitat_validate(conn, aoi = bundle_wsgs[[i]], cfg = cfg, + loaded = loaded, species = species, + schema = bundles$schema[i], buffer_m = b, + absences = absences), + list(bundle = paste0(bundles$config[i], ":", bundles$schema[i]))) + } +} + +summary <- do.call(rbind, lapply(runs, `[[`, "summary")) +utils::write.csv(summary, file.path(dir_out, "summary.csv"), row.names = FALSE, + na = "") + +# -- totals over WSGs ------------------------------------------------------------ +cols_n <- grep("^n_", names(summary), value = TRUE) +cols_km <- c("accessible_km", "spawning_km", "rearing_km") +key <- c("schema", "config_name", "buffer_m", "species_code", "stage") +make_totals <- function(s) { + grp <- interaction(s[key], drop = TRUE, lex.order = TRUE) + out <- do.call(rbind, lapply(split(s, grp), function(d) { + # Absence columns stay NA when not assessed; everything else sums. + sums <- lapply(d[c(cols_n, cols_km)], function(x) { + if (all(is.na(x))) NA_real_ else sum(x, na.rm = TRUE) + }) + cbind(d[1, key], as.data.frame(sums), n_wsg = nrow(d), + n_wsg_logged = sum(d$run_logged)) + })) + for (k in c("accessible", "spawning", "rearing", "rearing_any", "habitat")) { + out[[paste0("share_", k)]] <- ifelse( + out$n_obs > 0, out[[paste0("n_", k)]] / out$n_obs, NA_real_) + } + rownames(out) <- NULL + out +} +utils::write.csv(make_totals(summary), file.path(dir_out, "totals.csv"), + row.names = FALSE, na = "") +shared <- Reduce(intersect, bundle_wsgs) +if (nrow(bundles) == 2L) { + # Each bundle's own totals are over different WSG sets; compare these. + utils::write.csv( + make_totals(summary[summary$watershed_group_code %in% shared, ]), + file.path(dir_out, "totals_shared.csv"), row.names = FALSE, na = "") +} + +# -- misses (buffer 0) ------------------------------------------------------------- +# `any` is captured when the location is spawning or any rearing, matching +# totals' n_habitat; its reason is then the rear reason. +stage_rows <- function(obs) { + base <- data.frame( + species_code = obs$species_code, gradient = obs$gradient, + channel_width = obs$channel_width, edge_type = obs$edge_type, + is_spawn = obs$is_spawn, is_rear = obs$is_rear, + reason_any = ifelse(obs$spawning %in% TRUE, NA_character_, + obs$miss_reason_rear), + reason_spawn = obs$miss_reason_spawn, + reason_rear = obs$miss_reason_rear, stringsAsFactors = FALSE) + pick <- function(d, stage, col) { + cbind(data.frame(stage = rep(stage, nrow(d))), d[, c("species_code", + "gradient", "channel_width", "edge_type")], reason = d[[col]]) + } + rbind(pick(base, "any", "reason_any"), + pick(base[base$is_spawn, , drop = FALSE], "spawn", "reason_spawn"), + pick(base[base$is_rear, , drop = FALSE], "rear", "reason_rear")) +} +breaks_g <- c(-Inf, 0.0025, 0.01, 0.02, 0.03, 0.045, 0.055, 0.07, 0.105, + 0.135, 0.15, 0.20, 0.25, Inf) +breaks_w <- c(0, 1.5, 2, 3, 4, 6, 10, 20, Inf) +misses <- list() +binned <- list() +for (r in runs[vapply(runs, function(r) r$summary$buffer_m[1] == 0, TRUE)]) { + d <- stage_rows(r$observations) + d$reason[is.na(d$reason)] <- "captured" + tab <- as.data.frame(table(stage = d$stage, species_code = d$species_code, + reason = d$reason), stringsAsFactors = FALSE) + tab <- tab[tab$Freq > 0, ] + names(tab)[names(tab) == "Freq"] <- "n" + misses[[length(misses) + 1L]] <- cbind( + data.frame(bundle = rep(r$bundle, nrow(tab))), tab) + m <- d[!d$reason %in% c("captured", "no_segment"), ] + m$gradient_bin <- as.character(cut(m$gradient, breaks_g, right = TRUE)) + m$width_bin <- ifelse(is.na(m$channel_width), "NULL", + as.character(cut(m$channel_width, breaks_w, + right = FALSE))) + b <- as.data.frame(table(stage = m$stage, species_code = m$species_code, + reason = m$reason, gradient_bin = m$gradient_bin, + width_bin = m$width_bin, useNA = "ifany"), + stringsAsFactors = FALSE) + b <- b[b$Freq > 0, ] + names(b)[names(b) == "Freq"] <- "n" + binned[[length(binned) + 1L]] <- cbind( + data.frame(bundle = rep(r$bundle, nrow(b))), b) +} +utils::write.csv(do.call(rbind, misses), file.path(dir_out, "misses.csv"), + row.names = FALSE, na = "") +utils::write.csv(do.call(rbind, binned), file.path(dir_out, "misses_binned.csv"), + row.names = FALSE, na = "") + +# -- diff (two bundles, shared WSGs) -------------------------------------------------- +if (nrow(bundles) == 2L) { + # Both bundles must be scored on the same observations, or the diff mixes + # a filter difference into a model difference. + keys <- lapply(runs[vapply(runs, function(r) r$summary$buffer_m[1] == 0, + TRUE)], function(r) { + o <- r$observations[r$observations$watershed_group_code %in% shared, ] + sort(paste(o$species_code, o$watershed_group_code, o$observation_key)) + }) + if (!identical(keys[[1]], keys[[2]])) { + stop("the two bundles retained different observations on shared WSGs (", + length(setdiff(keys[[1]], keys[[2]])), " only in A, ", + length(setdiff(keys[[2]], keys[[1]])), " only in B)", call. = FALSE) + } + cols_cmp <- c("n_obs", "n_accessible", "n_spawning", "n_rearing", + "n_rearing_any", "share_accessible", "share_spawning", + "share_rearing", "share_rearing_any", "accessible_km", + "spawning_km", "rearing_km") + by <- c("watershed_group_code", "species_code", "stage", "buffer_m") + a <- summary[summary$schema == bundles$schema[1] & + summary$watershed_group_code %in% shared, c(by, cols_cmp)] + b <- summary[summary$schema == bundles$schema[2] & + summary$watershed_group_code %in% shared, c(by, cols_cmp)] + d <- merge(a, b, by = by, suffixes = c("_a", "_b")) + for (cl in setdiff(cols_cmp, "n_obs")) { + d[[paste0(cl, "_delta")]] <- d[[paste0(cl, "_b")]] - d[[paste0(cl, "_a")]] + } + d <- cbind(data.frame( + bundle_a = rep(paste0(bundles$config[1], ":", bundles$schema[1]), nrow(d)), + bundle_b = rep(paste0(bundles$config[2], ":", bundles$schema[2]), nrow(d))), + d) + d <- d[order(d$buffer_m, d$species_code, d$stage, d$watershed_group_code), ] + utils::write.csv(d, file.path(dir_out, "diff.csv"), row.names = FALSE, + na = "") +} + +# -- stamp --------------------------------------------------------------------------- +fresh_sha <- .lnk_pkg_git_sha("fresh") +link_dirty <- length(system(paste( + "git status --porcelain -- R inst/extdata/configs", + "data-raw/habitat_validate.R"), intern = TRUE)) > 0L +log_lines <- vapply(seq_len(nrow(bundles)), function(i) { + s <- bundles$schema[i] + w <- bundle_wsgs[[i]] + if (!dbExistsTable(conn, Id(schema = s, table = "log"))) { + return(sprintf("bundle %s:%s — %d WSGs scored; no run log", + bundles$config[i], s, length(w))) + } + lg <- dbGetQuery(conn, sprintf( + "SELECT count(DISTINCT watershed_group_code) AS n_wsg, + string_agg(DISTINCT coalesce(fresh_version, 'NA'), ', ') AS fresh, + min(date_start)::date AS first, max(date_start)::date AS last + FROM %s.log WHERE watershed_group_code = ANY($1)", s), + params = list(paste0("{", paste(w, collapse = ","), "}"))) + sprintf(paste("bundle %s:%s — %d WSGs scored; %d with a run-log row", + "(fresh %s, %s to %s); the rest predate the log"), + bundles$config[i], s, length(w), as.integer(lg$n_wsg), + lg$fresh, lg$first, lg$last) +}, character(1)) +stamp <- c( + sprintf("date: %s", format(Sys.time(), "%Y-%m-%d %H:%M %Z")), + sprintf("link: %s @ %s%s", utils::packageVersion("link"), + system("git rev-parse --short HEAD", intern = TRUE), + if (link_dirty) " (dirty)" else ""), + sprintf("fresh installed (builds the miss-reason predicates): %s @ %s", + utils::packageVersion("fresh"), + if (is.na(fresh_sha)) "no recorded sha" else fresh_sha), + "db: docker fwapg localhost:5432", + log_lines, + sprintf("species: %s; buffers: %s m", paste(species, collapse = ","), + paste(buffers, collapse = ",")), + sprintf("bcfishobs.observations rows: %s", + dbGetQuery(conn, "SELECT count(*) FROM bcfishobs.observations")[[1]]), + if (!is.null(abs_note)) sprintf("absences: none (%s)", abs_note) else + if (is.null(absences)) "absences: none (LNK_KNOWLEDGE_DIR unset)" else + sprintf(paste("absences: %d sampled FISS sites snapped within the", + "snapshot WSGs (%s); usable as absences, before presence:", + "%s; other WSGs report NA; knowledge @ %s"), + attr(absences, "n_sites_sampled"), + paste(attr(absences, "covered"), collapse = ","), + paste(names(attr(absences, "n_absence_sites")), + attr(absences, "n_absence_sites"), collapse = ", "), + attr(absences, "knowledge_sha"))) +writeLines(stamp, file.path(dir_out, "stamp.txt")) + +dbDisconnect(conn) +message("wrote ", dir_out) diff --git a/man/lnk_access.Rd b/man/lnk_access.Rd index a7a5fe97..8e579a21 100644 --- a/man/lnk_access.Rd +++ b/man/lnk_access.Rd @@ -139,6 +139,7 @@ Other compare: \code{\link{lnk_compare_mapping_code}()}, \code{\link{lnk_compare_rollup}()}, \code{\link{lnk_compare_wsg}()}, +\code{\link{lnk_habitat_validate}()}, \code{\link{lnk_log_read}()}, \code{\link{lnk_mapping_code}()}, \code{\link{lnk_parity_annotate}()}, diff --git a/man/lnk_compare_mapping_code.Rd b/man/lnk_compare_mapping_code.Rd index a4785d05..564042da 100644 --- a/man/lnk_compare_mapping_code.Rd +++ b/man/lnk_compare_mapping_code.Rd @@ -102,6 +102,7 @@ Other compare: \code{\link{lnk_access}()}, \code{\link{lnk_compare_rollup}()}, \code{\link{lnk_compare_wsg}()}, +\code{\link{lnk_habitat_validate}()}, \code{\link{lnk_log_read}()}, \code{\link{lnk_mapping_code}()}, \code{\link{lnk_parity_annotate}()}, diff --git a/man/lnk_compare_rollup.Rd b/man/lnk_compare_rollup.Rd index f3ee6214..5389d5b9 100644 --- a/man/lnk_compare_rollup.Rd +++ b/man/lnk_compare_rollup.Rd @@ -96,6 +96,7 @@ Other compare: \code{\link{lnk_access}()}, \code{\link{lnk_compare_mapping_code}()}, \code{\link{lnk_compare_wsg}()}, +\code{\link{lnk_habitat_validate}()}, \code{\link{lnk_log_read}()}, \code{\link{lnk_mapping_code}()}, \code{\link{lnk_parity_annotate}()}, diff --git a/man/lnk_compare_wsg.Rd b/man/lnk_compare_wsg.Rd index 49542890..0f5c2338 100644 --- a/man/lnk_compare_wsg.Rd +++ b/man/lnk_compare_wsg.Rd @@ -152,6 +152,7 @@ Other compare: \code{\link{lnk_access}()}, \code{\link{lnk_compare_mapping_code}()}, \code{\link{lnk_compare_rollup}()}, +\code{\link{lnk_habitat_validate}()}, \code{\link{lnk_log_read}()}, \code{\link{lnk_mapping_code}()}, \code{\link{lnk_parity_annotate}()}, diff --git a/man/lnk_habitat_validate.Rd b/man/lnk_habitat_validate.Rd new file mode 100644 index 00000000..b06ca676 --- /dev/null +++ b/man/lnk_habitat_validate.Rd @@ -0,0 +1,233 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/lnk_habitat_validate.R +\name{lnk_habitat_validate} +\alias{lnk_habitat_validate} +\title{Validate modelled habitat against fish observations} +\usage{ +lnk_habitat_validate( + conn, + aoi, + cfg, + loaded, + species, + schema, + observations = "bcfishobs.observations", + species_obs = list(BT = c("BT", "DV")), + match_types = c("A", "B"), + buffer_m = 0, + absences = NULL +) +} +\arguments{ +\item{conn}{A \link[DBI:DBIConnection-class]{DBI::DBIConnection} object (from \code{\link[=lnk_db_conn]{lnk_db_conn()}}).} + +\item{aoi}{Character vector of watershed group codes. Each must be +persisted in \code{schema}, with \code{streams_access} built (fails loud +otherwise).} + +\item{cfg}{An \code{lnk_config} object from \code{\link[=lnk_config]{lnk_config()}}: the bundle that +produced \code{schema}. Supplies the rules and thresholds for the miss +reasons. Where \verb{.log} records a WSG's run, its \code{config_name} +must be \code{cfg$name}.} + +\item{loaded}{Named list from \code{\link[=lnk_load_overrides]{lnk_load_overrides()}}. Uses +\code{observation_exclusions}, \code{wsg_species_presence}, \code{parameters_fresh} +and (when present) \code{user_habitat_classification}.} + +\item{species}{Character vector of model species codes (e.g. +\code{c("CH", "BT")}). Each must name \verb{.streams_habitat_} and +\verb{.streams_access.access_}.} + +\item{schema}{Persist schema to score. Required: a bundle's +\code{pipeline.schema} is not a reliable guide to which schema it built +(\code{default} declares \code{fresh}, which the \code{bcfishpass} bundle writes).} + +\item{observations}{Schema-qualified observations table. Default +\code{"bcfishobs.observations"}. Needs \code{observation_key}, \code{species_code}, +\code{watershed_group_code}, \code{blue_line_key}, \code{downstream_route_measure}, +\code{match_type}, \code{activity_code}, \code{activity}, \code{life_stage}, \code{source}.} + +\item{species_obs}{Named list mapping a model species to the observation +species codes that count as it. Species not named map to themselves. +Default pools DV records with BT (\code{list(BT = c("BT", "DV"))}).} + +\item{match_types}{Character vector of \code{match_type} classes (first +letter) to keep. Default \code{c("A", "B")}.} + +\item{buffer_m}{Numeric scalar >= 0. Upstream distance within which +modelled habitat still captures an observation. Default 0.} + +\item{absences}{Optional data frame of sites sampled with the species +not caught: \code{watershed_group_code}, \code{blue_line_key}, +\code{downstream_route_measure}, \code{species_code} (model species). The caller +locates them on the network. Rows for a species not present in the WSG +are dropped. Default \code{NULL}.} +} +\value{ +A list of two data frames: +\itemize{ +\item \code{summary}: one row per \code{watershed_group_code} x \code{species_code} x +\code{stage} (\code{any}, \code{spawn}, \code{rear}), with \code{schema}, \code{config_name}, +\code{buffer_m}, \code{overlay_applied}, \code{run_logged} (whether \verb{.log} +records the WSG), \code{n_obs} (locations on a segment), \code{n_unattached}, +\code{n_accessible}, \code{n_inaccessible}, \code{n_spawning}, \code{n_rearing}, +\code{n_rearing_any}, \code{n_habitat} (spawning or any rearing), the matching +\verb{share_*} (of \code{n_obs}; \code{NA} when \code{n_obs} is 0), \code{n_in_uhc_spawn}, +\code{n_in_uhc_rear}, and cost +\code{accessible_km}, \code{spawning_km}, \code{rearing_km} from \code{\link[=lnk_rollup_wsg]{lnk_rollup_wsg()}}. +With \code{absences}, also \code{n_absence}, \code{n_absence_accessible}, +\code{n_absence_spawning}, \code{n_absence_rearing} (stream) and +\code{n_absence_rearing_any} (the same on every stage). +\item \code{observations}: one row per retained location, with its segment's +\code{gradient}, \code{channel_width}, \code{channel_width_source}, \code{edge_type}, +\code{stream_order}, \code{waterbody_type}, \code{access}, the capture flags, +\code{in_uhc_spawn}, \code{in_uhc_rear}, the predicate results, and the two miss +reasons. +} +} +\description{ +Scores a persisted run against fish observations rather than against +another model. For each watershed group and species it reports how many +observations land on modelled accessible, spawning and rearing segments +(\strong{capture}), how much habitat the run models to achieve that (\strong{cost}, +so capture cannot be bought by calling everything habitat), and, for each +observation outside modelled habitat, what excluded its segment +(\strong{misses} — the direct evidence for which threshold is binding). Sites +sampled with the species not caught can be supplied as \strong{absences}, a +false-positive check. +} +\details{ +Runs over two persist schemas (two config bundles) stack row-wise, so +bundles can be diffed on the same observations. +} +\section{Which observations count}{ + +From \code{observations} (a \code{bcfishobs.observations}-shaped table), keeping: +\itemize{ +\item records not flagged \code{data_error} or \code{release_exclude} in +\code{loaded$observation_exclusions} (the pipeline's own filter), and not +from the \verb{Releases Database} source (stocked fish are not evidence of +habitat use); +\item observation species admitted for the model species by \code{species_obs}, +and only in WSGs where \code{loaded$wsg_species_presence} marks the model +species present (so DV records count as BT only where BT is present); +\item \code{match_type} classes in \code{match_types} (default A/B: matched to a +stream within 100 m; the C-E waterbody matches are left out); +\item one per species x \code{blue_line_key} x metre (repeat visits are one +location; a location is spawn- or rear-staged if any record there is). +} + +Pass a different \code{observations} table to score a held-out subset (by +project, date or WSG). +} + +\section{Which segment an observation is on}{ + +The pipeline breaks streams at observations, so most points sit on a +segment boundary. The segment \strong{starting} within 1 m of the point (the +upstream one) is used, else the one containing it. A location with no +segment is counted in \code{n_unattached} and nowhere else. All joins between +\code{streams}, \code{streams_access} and \verb{streams_habitat_} are on the full key +\verb{(id_segment, watershed_group_code)}: \code{id_segment} repeats across groups. + +\code{buffer_m > 0} also counts an observation as captured when modelled +habitat starts within \code{buffer_m} metres \strong{upstream} along the same +\code{blue_line_key} and WSG, because observation points often mark the +downstream end of a sampled site. It follows the mainstem only (never a +tributary), stops at the WSG boundary, and is measured along the stream, +so it does not depend on segmentation. Accessibility is always the point's +own segment. Near lakes the buffer reaches connector flow lines, which +are rearing without any threshold test, so buffered rearing capture there +says nothing about thresholds. +} + +\section{Reading the numbers}{ + +\itemize{ +\item \strong{Accessible} is \verb{streams_access.access_ IN (1, 2)}, the definition +\code{\link[=lnk_rollup_wsg]{lnk_rollup_wsg()}}'s \code{accessible_km} uses, so capture and cost agree. +The spawning and rearing flags are gated by the pipeline's own +\code{streams_habitat.accessible}, which differs slightly, so +\code{share_spawning} is not strictly a subset of \code{share_accessible}. +\item \strong{Accessible capture is partly circular.} Observations are pipeline +inputs: they lift barriers (\code{observation_threshold} in +\code{parameters_fresh.csv}), they are break points, and where +\code{apply_habitat_overlay} is on, \code{user_habitat_classification} forces +habitat. Spawning and rearing capture is the score. +\code{n_in_uhc_spawn} / \code{n_in_uhc_rear} count locations inside a +\code{user_habitat_classification} reach confirming that habitat type for the +species (indicator 1); with \code{overlay_applied} TRUE the segments wholly +inside such a reach are forced to habitat, so most of those locations are +captured by construction. +\item \strong{Thresholds set from these observations score in-sample.} A cutoff +calibrated on the same records (e.g. a use quantile) is partly +guaranteed its capture; hold records out to score it fairly. +\item \code{rearing} is stream rearing, the flag thresholds govern and that +\code{rearing_km} costs. \code{rearing_any} adds lake and wetland rearing. +\item Known biases, reported rather than corrected: observation points often +sit at the downstream end of a site (see \code{buffer_m}); sampling clusters +near road access; and fish are only observed where they have access, so +observed gradients are cut off at the access limit. +} +} + +\section{Miss reasons}{ + +\code{miss_reason_spawn} keys on \code{spawning} and \code{miss_reason_rear} on +\code{rearing_any}, so a location on lake or wetland rearing is captured for +the rear reason (compare them with \code{n_rearing_any}, not \code{n_rearing}). +Both re-evaluate the bundle's own +habitat predicates (\code{\link[fresh:frs_habitat_predicates]{fresh::frs_habitat_predicates()}} over \code{cfg$rules} +and its thresholds CSV, channel-width model) on the segment, then again +with the gradient and the channel width each moved to the stage's +minimum: +\itemize{ +\item \code{NA} — captured; \code{no_segment} — the location attaches to no segment; +\item \code{not_accessible} — the segment's \verb{access_} is not 1 or 2; +\item \code{fails_gradient} / \code{fails_width} / \code{width_null} — passes once that one +value is relaxed (\code{width_null} when the width is NULL); +\code{gradient_below_min} when the gradient fails by sitting below the +window (a negative gradient), not above it; +\item \code{fails_gradient_or_width} — either relaxation alone passes (through +different branches of the rule); +\item \code{fails_gradient_and_width} — passes only with both relaxed; +\item \code{rule_excludes} — fails even then: edge type, waterbody or lake size; +\item \code{post_predicate} — passes the predicate but is not habitat: removed by +clustering (connectivity to spawning) or access gating. +} +} + +\examples{ +\dontrun{ +conn <- lnk_db_conn(dbname = "fwapg", host = "localhost", port = 5432L, + user = "postgres", password = "postgres") +cfg <- lnk_config("default") +loaded <- lnk_load_overrides(cfg) + +# How many CH and BT observations in Morice sit on modelled habitat in +# the `default` bundle's schema, and at what cost in km? +v <- lnk_habitat_validate(conn, aoi = "MORR", cfg = cfg, loaded = loaded, + species = c("CH", "BT"), + schema = "fresh_default") +v$summary[v$summary$stage == "rear", + c("species_code", "n_obs", "share_rearing_any", "rearing_km")] + +# What keeps the rearing misses out of habitat? +table(v$observations$miss_reason_rear, useNA = "ifany") +} + +} +\seealso{ +\code{\link[=lnk_rollup_wsg]{lnk_rollup_wsg()}}, \code{\link[=lnk_compare_rollup]{lnk_compare_rollup()}} + +Other compare: +\code{\link{lnk_access}()}, +\code{\link{lnk_compare_mapping_code}()}, +\code{\link{lnk_compare_rollup}()}, +\code{\link{lnk_compare_wsg}()}, +\code{\link{lnk_log_read}()}, +\code{\link{lnk_mapping_code}()}, +\code{\link{lnk_parity_annotate}()}, +\code{\link{lnk_rollup_wsg}()} +} +\concept{compare} diff --git a/man/lnk_log_read.Rd b/man/lnk_log_read.Rd index ead2fd3f..90226d02 100644 --- a/man/lnk_log_read.Rd +++ b/man/lnk_log_read.Rd @@ -77,6 +77,7 @@ Other compare: \code{\link{lnk_compare_mapping_code}()}, \code{\link{lnk_compare_rollup}()}, \code{\link{lnk_compare_wsg}()}, +\code{\link{lnk_habitat_validate}()}, \code{\link{lnk_mapping_code}()}, \code{\link{lnk_parity_annotate}()}, \code{\link{lnk_rollup_wsg}()} diff --git a/man/lnk_mapping_code.Rd b/man/lnk_mapping_code.Rd index 084b9164..c48c0d8d 100644 --- a/man/lnk_mapping_code.Rd +++ b/man/lnk_mapping_code.Rd @@ -125,6 +125,7 @@ Other compare: \code{\link{lnk_compare_mapping_code}()}, \code{\link{lnk_compare_rollup}()}, \code{\link{lnk_compare_wsg}()}, +\code{\link{lnk_habitat_validate}()}, \code{\link{lnk_log_read}()}, \code{\link{lnk_parity_annotate}()}, \code{\link{lnk_rollup_wsg}()} diff --git a/man/lnk_parity_annotate.Rd b/man/lnk_parity_annotate.Rd index 99c698e8..1d3c5d52 100644 --- a/man/lnk_parity_annotate.Rd +++ b/man/lnk_parity_annotate.Rd @@ -64,6 +64,7 @@ Other compare: \code{\link{lnk_compare_mapping_code}()}, \code{\link{lnk_compare_rollup}()}, \code{\link{lnk_compare_wsg}()}, +\code{\link{lnk_habitat_validate}()}, \code{\link{lnk_log_read}()}, \code{\link{lnk_mapping_code}()}, \code{\link{lnk_rollup_wsg}()} diff --git a/man/lnk_rollup_wsg.Rd b/man/lnk_rollup_wsg.Rd index 3f8d253b..416f61d7 100644 --- a/man/lnk_rollup_wsg.Rd +++ b/man/lnk_rollup_wsg.Rd @@ -105,6 +105,7 @@ Other compare: \code{\link{lnk_compare_mapping_code}()}, \code{\link{lnk_compare_rollup}()}, \code{\link{lnk_compare_wsg}()}, +\code{\link{lnk_habitat_validate}()}, \code{\link{lnk_log_read}()}, \code{\link{lnk_mapping_code}()}, \code{\link{lnk_parity_annotate}()} diff --git a/planning/active/progress.md b/planning/active/progress.md index cd3224d4..b8e3fa9e 100644 --- a/planning/active/progress.md +++ b/planning/active/progress.md @@ -7,3 +7,20 @@ - Created branch `283-validate-modelled-habitat-against-fish` off origin/main - Scaffolded PWF baseline from issue #283 with approved phases - Next: Phase 1 +- Phase 1: #283 body corrected (fresh#218 join artifact, circularity, scope); commit fc856d8 +- Plan review (Plan agent) returned 1 blocker + 4 gaps + 6 assumptions; verified B1 (default's + pipeline.schema is `fresh`, 65 bcfishpass log rows), G1 (fresh exports frs_params / + frs_habitat_predicates), folded in — see task_plan "Design changes"; review saved to + review-plan.md +- Phases 2-3: lnk_habitat_validate() + 71 tests incl. DB fixture; mutation check — bare + id_segment habitat join fails 6 tests; lint clean. MORR/BULK smoke run in ~3 s. +- /code-check: 4 rounds (review-round1..4.md). R1 4 findings (UHC indicator, integer64, + absence rearing definition, negative gradient label); R2 6 (FISS "caught fish, no species" + counted as absences — 63% of BT absences in the probe; zero-row crash; `any`-stage reason; + spawn gradient floor derived twice — inside an R1 fix; unbuffered absences; stale outputs); + R3 named 3 mechanisms and enumerated 59 rows, 6 inconsistent; R4 re-walked the + enumeration, 2 left (absence silent-zero on the WSG axis; stamp wording) — fixed. + Found by running the driver, not by review: `toupper(NULL)` is character(0), so an absent + --wsgs selected zero WSGs. +- Reconciliation (AC1): `fresh_default` retains BT+DV 5,104 and CH 1,745 locations, exactly + #284's pooled counts. diff --git a/planning/active/review-plan.md b/planning/active/review-plan.md new file mode 100644 index 00000000..841dd8cc --- /dev/null +++ b/planning/active/review-plan.md @@ -0,0 +1,22 @@ +# Plan review — #283 (Plan agent, 2026-09-26) + +Returned as reply text (the Plan agent has no Write tool); recorded here with the +disposition of each finding. Claims marked *verified* were re-probed before acting. + +| ID | Finding | Disposition | +|---|---|---| +| B1 | `schema = cfg$pipeline$schema` default scores the wrong bundle: `default` declares `fresh`, which bcfishpass builds (65 `bcfishpass` log rows) | *verified*; `schema` now required; `.log` config_name must match `cfg$name` where logged | +| G1 | Miss reasons from the thresholds CSV + #284 `pred_set` cannot match `rules.yaml` (stream rear rule has no `in_waterbody: false`; lake/wetland rules skip thresholds; 1050/1150 `thresholds: false`; bcfishpass BT `rear: []` is open on any edge) | *verified* (predicates printed for both bundles); reasons now re-evaluate `fresh::frs_habitat_predicates()` with gradient / width relaxed | +| G2 | Unattached observations counted as inaccessible (8 in `fresh_default`) | `n_unattached`, reason `no_segment` | +| G3 | Lake / wetland rearing unscored (16,651 BT segments `lake_rearing` and not `rearing`); A/B match drops D/E waterbody matches | `rearing_any` added; A/B documented as stream matches | +| G4 | `lnk_points_snap()` writes a permanent table and returns no WSG; FISS absence rule unstated; 3 WSGs only | driver snaps in a temp table; absence = sampled site where the species was not caught; stated not decision-grade | +| A1 | Scoring `default_tuned` against the observations that set BT 0.1349 is in-sample | documented in roxygen + research; `observations` arg takes any table for hold-outs | +| A2 | Access circularity checked; codes 0/1/2 only in persisted WSGs | noted | +| A3 | spawning/rearing gated on `streams_habitat.accessible`, not `streams_access` | documented (`share_spawning` not a strict subset of `share_accessible`) | +| A4 | Baseline diff conflates config with build vintage (50/51 shared WSGs unlogged in `fresh_default`) | `run_logged` column; driver stamps per-WSG log state; diff not read as a pure config effect | +| A5 | `n_in_uhc` differs by bundle (`apply_habitat_overlay: no` in bcfishpass) | `overlay_applied` column | +| A6 | Assert identical observation sets across bundles | driver asserts per WSG x species | +| AC1 | Sanity check against #284 must use the pooled 5,104 over 55 WSGs | driver runs `fresh_default` on all 55 | +| AC2 | Baseline compares bundles, not thresholds | scope decided by the user (read-only); stated in PR | +| — | `buffer_m` semantics (mainstem only, WSG-bounded, lake connectors) | documented | +| — | unqualified temp-table DROP | `pg_temp.` prefix | diff --git a/planning/active/review-round1.md b/planning/active/review-round1.md new file mode 100644 index 00000000..39bafcf0 --- /dev/null +++ b/planning/active/review-round1.md @@ -0,0 +1,79 @@ +# Code-check round 1 — lnk_habitat_validate() (#283) + +Reviewer: subagent, 2026-09-26. Diff: `diff_r1.patch` (R/lnk_habitat_validate.R, +tests/testthat/test-lnk_habitat_validate.R). Tests run from a copy of the repo with the +fixture schema renamed (`zz_lnk_validate_rev1`): `[ FAIL 0 | PASS 71 ]`. Live read-only +run: `aoi = c("MORR","BULK")`, `species = c("CH","BT","CO")`, `schema = "fresh_default"`, +cfg `default` (13 s). + +Checked and clean: the full-key joins (all three persist tables carry a unique +`(id_segment, watershed_group_code)` index; `fwa_waterbodies.waterbody_key` is unique, so +the waterbody join cannot fan out); the tiebreaks in the attach LATERAL (no two segments share +`(blue_line_key, watershed_group_code, downstream_route_measure)` in `fresh` or +`fresh_default`); the predicate re-evaluation against the pipeline (0 rows with +`rearing_any` TRUE and `pred_rear` FALSE; spawning TRUE with `pred_spawn` FALSE only on +UHC-forced rows); relaxation to the stage minimum (min gradient is 0 and min widths are +2 / 1.5 / 4 / 2.1 for every species in both bundles, so no rule branch rejects the relaxed +value); the Releases filter (every release source starts `Releases Database`); the exclusion +filter matching `.lnk_pipeline_prep_observations`; SQL interpolation (all identifiers and +literals validated or quoted); and the zero-row paths. + +## Findings + +- **[bug — silently wrong number]** `R/lnk_habitat_validate.R:444-449` (the `in_uhc` EXISTS) + and `:732` (`n_in_uhc`), against the roxygen at `:61-63`. `in_uhc` is TRUE for any + `user_habitat_classification` row of the species whose range contains the point. It + ignores the row's `spawning` / `rearing` indicator values and which habitat type the stage is + about. `fresh::frs_habitat_overlay()` forces a flag only where that type's indicator is + `1` (`lower(trim(k.::text)) IN ('true','t','1')`), and it forces whole segments contained + in the range, not points. The docs say "with `overlay_applied` TRUE those are captured by + construction", and `n_in_uhc` sits beside `n_spawning`, `n_rearing` and `n_rearing_any` on + every stage row, so a reader will subtract it to get out-of-sample capture. For rearing that + subtraction is almost entirely wrong. The bundled UHC (15,696 rows) has `rearing` NA on + 15,033 rows, and it also carries confirmed non-habitat rows (`-1` / `-4`; 546 rows with no + `1` in either column). Measured: + - Live MORR+BULK run: 123 `in_uhc` locations. 122 are spawning-only reaches and 1 is + rearing-only. BULK CO `stage == "rear"` reports `n_in_uhc = 10`, but only 1 of those 10 + locations is in a reach that forces rearing. + - Province-wide, A/B records by species: 20,415 fall inside a UHC reach. For 20,149 (98.7%) + no containing row has `rearing = 1`. For 68, no containing row has a `1` in either column: + these are confirmed non-habitat, and they are counted as "captured by construction". + - The fixture's UHC frame has no `spawning` / `rearing` columns, so the tests cannot reach + this. + + Fix: compute per-type flags (for example `in_uhc_spawn` from `spawning` = 1, and + `in_uhc_rear` from `rearing` = 1) and count the one that matches each capture column. + Alternatively, restrict to rows with an indicator of 1 and reword the doc. To match the + overlay exactly, test the segment range, not the point. + +- **[fragile]** `R/lnk_habitat_validate.R:423` (`count(*) OVER () AS n_cand`). Postgres + `count()` is `bigint`, so RPostgres returns `n_cand` as `bit64::integer64`. That type is + inconsistent with every other integer column in the returned `observations` frame + (`id_segment`, `access` and `edge_type` are all `integer`). It computes correctly only while + bit64's S3 methods are registered. After `saveRDS()`/`readRDS()` in a session that has not + loaded bit64, the values read as denormal doubles: measured `sum(o$n_cand)` = `6.59e-321`, + `max()` = `9.88e-324`. `ifelse()`, `c()` with doubles, and most serializers strip or corrupt + it the same way. Fix: `count(*) OVER ()::int AS n_cand`. + +- **[fragile — inconsistent definition under one name]** `R/lnk_habitat_validate.R:660-661` + and `:697`. `n_absence_rearing` counts + `h.rearing OR h.lake_rearing OR h.wetland_rearing`, which is the *any*-rearing definition. + The capture columns it will be compared against name that `rearing_any`, and keep + `n_rearing` / `share_rearing` for stream rearing (`:442`, `:67-68` of the docs). So a + false-positive rate built from `n_absence_rearing` and a capture rate built from + `share_rearing` measure different things with no signal. The same split affects the miss + reasons: `miss_reason_rear` keys on `rearing_any` (`:632`), so the rear misses in + `table(miss_reason_rear)` — the `@examples` pairs it with `share_rearing` — do not add up to + `n_obs - n_rearing`. Lake- and wetland-rearing locations are `NA` (captured) there while + counting as misses in `share_rearing`. Fix: either name it `n_absence_rearing_any` (and say in + the Miss reasons section that "captured" means `rearing_any`), or count stream `rearing` there. + +- **[minor — mislabel]** `R/lnk_habitat_validate.R:572-578` with `:615`. Gradient is relaxed + to the stage minimum (0), but 7,122 `fresh_default.streams` segments have + `gradient < 0`. On those segments `BETWEEN 0 AND max` fails for being *below* the window, + relaxing to 0 passes, and the miss is reported as `fails_gradient`, the label that is read as + "the max gradient threshold is binding". Raising that threshold would not capture them. + Measured: 46 A/B records sit on negative-gradient segments province-wide, all on waterbody + or non-stream edge types (none in MORR/BULK). The effect is small, but it points the + calibration evidence (#284) the wrong way. Fix: attribute `gradient < 0` separately, or + relax to `max(value, min)` only when the value is above the window. diff --git a/planning/active/review-round2.md b/planning/active/review-round2.md new file mode 100644 index 00000000..4553da01 --- /dev/null +++ b/planning/active/review-round2.md @@ -0,0 +1,119 @@ +# Code-check round 2 — lnk_habitat_validate() + data-raw/habitat_validate.R (#283) + +Reviewer: subagent, 2026-09-26. Diff: `diff_r2.patch`. Tests run from a copy of the repo with the +fixture schema renamed (`zz_lnk_validate_rev2`): `[ FAIL 0 | WARN 0 | SKIP 0 | PASS 75 ]`. +Live runs from the copy, output to scratch only: +`--bundles=default:fresh_default,bcfishpass:fresh --wsgs=MORR,BULK,PINE,COTR,UPCE` with +`LNK_KNOWLEDGE_DIR=~/Projects/repo/knowledge` (39 s), plus one single-WSG run (below). + +Round-1 fixes checked: +- (1) `in_uhc_spawn` / `in_uhc_rear`: complete. The loaded UHC `spawning` / `rearing` are `int` + (values -4 / -1 / 1 / NA) in both bundles, so `u.spawning = 1` is a valid comparison and selects + exactly what the overlay forces. +- (2) `n_cand::int`: complete. The other count the driver reads (`n_wsg` in the stamp) is wrapped + in `as.integer()`. +- (3) `n_absence_rearing` (stream) and `n_absence_rearing_any`: complete as named. A related + asymmetry remains (see the buffer finding below). +- (4) `gradient_below_min`: correct for today's bundles, but the min it tests against comes from + a different source than the predicate's lower bound (see below). It is also only attributed on + the `p_g & !p_w` arm, so a below-window gradient that also needs a width relaxation still reads + `fails_gradient_and_width`. That is minor. + +## Findings + +- **[bug — silently wrong numbers]** `data-raw/habitat_validate.R:97-107, 135-145`: FISS sites that + caught fish but recorded no species are counted as absences of every species. + - The driver treats a site as "not caught" whenever `species_list` lacks the species name. In + the knowledge snapshots `species_list` is empty for 5,303 of the 8,301 driver-sampled unique + sites. + - Only 1,022 of those are no-fish-caught. For 3,378 of the snapped sites `total_fish > 0` and + `fish_counted` is TRUE: fish were caught and counted, but the Step-2 species cell was blank + (`knowledge/scripts/0220-fiss-xls-parse-nfc.R:354` builds `species_list` from non-NA species + only). A further 407 have effort recorded but no count entered at all. + - Measured on the live run, `fresh_default` BT, MORR+BULK+PINE+COTR+UPCE: `n_absence` = 3,095. + Of those, **1,948 (63%)** come from "fish caught, no species" sites and 88 from "effort, no + count". Only 739 come from sites with a species list and 320 from no-fish-caught sites. + - The false-positive columns (`n_absence_spawning` 1,772 of the 1,948) are dominated by sites + that are not evidence of absence. + - Same class, smaller: `Salmon (General)` (13 sites), `Unidentified Species` (50) and + `Unidentifiable Trout - only fry` (7) are read as "did not catch CH/BT". None of them can rule + the species out. This is knowledge#18's lesson: classify against the source's code table. + - Fix: count a site as an absence only when `nfc` is TRUE, or when `species_list` is non-empty + and names no generic or unidentified taxon that could be the species. Stop or report on any + other shape. + +- **[bug — crash]** `data-raw/habitat_validate.R:196-211` (`stage_rows`): + `data.frame(stage = "spawn", species_code = obs$species_code[obs$is_spawn], ...)` raises + *"arguments imply differing number of rows: 1, 0"* whenever a subset is empty. The scalar `stage` + cannot recycle against a zero-length column. + - Reproduced: `--bundles=default:fresh_default --wsgs=UPCE --species=CH --buffers=0` dies in + `stage_rows` after `summary.csv` and `totals.csv` are written, with no `misses*.csv` and no + `stamp.txt`. + - It fires for any run where a species has no spawn-staged (or no rear-staged, or no) locations. + In the live 5-WSG set that covers COTR BT spawn, PINE CH spawn, UPCE BT/CH, so every held-out, + single-WSG or single-species run is exposed. + - Fix: `rep(stage, n)` or return a typed 0-row frame. + +- **[bug — mislabel, silently wrong number]** `data-raw/habitat_validate.R:198-200`: `misses.csv` + stage `any` counts `miss_reason_rear`, which keys on `rearing_any`. + - The summary and totals `any` stage define capture as `n_habitat = spawning | rearing_any`, so a + spawning-only location is "captured" in `totals.csv` and a miss in `misses.csv` under the same + stage label. + - Measured: `default` CH `any` has `n_habitat` 224 in totals but 222 `captured` in misses.csv. + The 2 spawning-only locations appear there with a rear miss reason, as if the model missed + them. + - Fix: label that block `rear_all` (or similar), or derive the `any` reason as NA when either + stage captured. + +- **[fragile — one fact derived twice]** `R/lnk_habitat_validate.R:550-554` vs `:599-600, :613-619, :649`: + the spawn predicate's lower gradient bound comes from `parameters_fresh$spawn_gradient_min` + (`.lnk_hv_sp_params` → `frs_habitat_predicates()`, `sprintf("s.gradient >= %s", spawn_gradient_min)`). + - The relaxation value and `gradient_min_spawn` (used for `gradient_below_min`) come from + `rng$spawn$gradient[1]`, which `frs_params()` hardcodes to `0` (`fresh/R/frs_params.R:489`, + `ranges$gradient <- c(0, gradient_max)`). + - Today every `spawn_gradient_min` in both bundles is 0, so the two agree by coincidence. + - Once a bundle sets a positive `spawn_gradient_min`, which is a live fresh-owned parameter and + the kind #284 calibrates, the following go wrong silently: + - relaxing gradient to 0 still fails the predicate, so `pred_spawn_g` / `_gw` are FALSE; + - every spawn gradient miss (above max or below min) falls through to `rule_excludes` or + `fails_width`; + - `gradient_below_min` never fires for gradients in `[0, min)`. + - Fix: take the spawn relax and below-min value from `spawn_gradient_min` (the value the + predicate uses). + +- **[fragile — inconsistent pair under one row]** `R/lnk_habitat_validate.R:701-731` vs `:458-497`: + capture flags are buffered (`buffer_m` extends spawning / rearing upstream), but the absence + counts are always evaluated on the point's own segment. + - The `buffer_m = 100` summary rows therefore pair a buffered capture rate with an unbuffered + false-positive count. + - The driver writes both side by side for each buffer (summary.csv, totals.csv). A precision and + recall read at buffer 100 flatters the buffer: capture rises, and the absence false-positive + rate cannot. + - Same shape as round-1 finding 3 (paired columns with different definitions). + - Fix: buffer the absence flags the same way, or blank `n_absence_*` on `buffer_m > 0` rows and + say so in the docs. + +- **[fragile — stale artifacts beside fresh ones]** `data-raw/habitat_validate.R:66-67, 244-276, 314`: + the default output directory is fixed (`data-raw/logs/habitat_validate_283/`, a committed-log + location) and nothing is cleared before writing. + - A one-bundle rerun never rewrites `diff.csv`, so the previous two-bundle diff survives beside + the new `summary.csv` and a `stamp.txt` describing only one bundle. + - A run that dies before the stamp leaves the previous run's `stamp.txt` describing new CSVs. + Examples are the `stage_rows` crash above, or `--buffers` without 0, where `keys[[1]]` is out + of bounds. + - `--buffers` without 0 also writes `misses.csv` / `misses_binned.csv` as the single line `""` + (`write.csv(NULL)`). + - Fix: delete the known outputs at start (or write to a fresh subdirectory), and require 0 in + `--buffers` when misses or the diff are produced. + +Checked and clean: +- the `in_uhc` indicator types; +- log table shape in both schemas (`config_name`, `date_start` never NULL, `fresh_version`); +- the diff guard (fires on differing retained keys; identical here); +- `n_cand` type; +- SQL interpolation (schema regex in the function; driver schema is operator input); +- temp-table reuse across the four in-session runs; +- dedup naming via `tapply` name lookup (locale-safe); +- totals grouping (`config_name` never NA). + +/Users/airvine/Projects/repo/link/planning/active/review-round2.md diff --git a/planning/active/review-round3.md b/planning/active/review-round3.md new file mode 100644 index 00000000..8c989d19 --- /dev/null +++ b/planning/active/review-round3.md @@ -0,0 +1,192 @@ +# Code-check round 3 — lnk_habitat_validate() + data-raw/habitat_validate.R (#283) + +Reviewer: subagent, 2026-09-26. Diff: `diff_r3.patch`. Everything run from a copy of the repo +(`scratchpad/linkcopy3`, fixture schema renamed `zz_lnk_validate_rev3`): + +- `NOT_CRAN=true devtools::test(filter = "habitat_validate")`: `[ FAIL 0 | WARN 0 | SKIP 0 | PASS 81 ]`. +- Driver, `--bundles=default:fresh_default,bcfishpass:fresh --wsgs=MORR,BULK,COTR` with + `LNK_KNOWLEDGE_DIR` set, output to scratch. Cross-checked `misses.csv` against `totals.csv` + (buffer 0) for all 12 bundle x species x stage rows. Captured counts agree exactly + (`any` = `n_habitat`, `spawn` = `n_spawning`, `rear` = `n_rearing_any`). So do the non-`no_segment` + totals (= `n_obs`) and `no_segment` (= `n_unattached`). `not_accessible` is below + `n_inaccessible` only where an inaccessible location is captured, which is the accepted + habitat-vs-access gate difference. +- Driver, `--species=CO --wsgs=MORR` with `LNK_KNOWLEDGE_DIR` set: crashes (finding 1). + +## The mechanisms + +Rounds 1 and 2 found instances of three mechanisms. + +**M1. One definition, re-implemented per consumer.** Each derived fact is computed separately by +every consumer, and nothing but coincidence kept the copies in step. The facts: *captured*, +*accessible*, *attached*, *stage*, *stage minimum*, *species identity*, *bundle identity*, and +*population* (which WSGs, and which points count as on the network). The consumers: the +observation SQL, the absence SQL, the predicate relaxation, the miss labels, the summary, and the +driver's totals, misses and diff. +- R1: `in_uhc` ignored the indicator the overlay uses; `n_absence_rearing` did not match `n_rearing`. +- R2: the misses `any` stage did not match the totals `any` stage; the spawn floor was taken from + two sources; absences were unbuffered while observations were buffered. + +The fixes that held replaced a copy with a single source that both consumers read +(`.lnk_hv_buffered()`, `.lnk_hv_stage_min()`). Findings 2, 3 and 4 below are copies that still +exist: the network distance, the bundle key, and the WSG population. + +**M2. A value normalised at one end only.** `integer64` from the DB was treated as integer, and +`toupper(NULL)` was treated as `NULL`. Finding 5 is the same thing: species codes are uppercased +on three paths and not on a fourth. + +**M3. The shape of "nothing" differs by constructor.** A scalar cannot recycle into a 0-row frame, +`do.call(rbind, list())` returns `NULL`, and `sprintf()` or `paste0()` given a zero-length +argument returns `character(0)`. The code also treats NA, 0, `NULL` and `character(0)` as the +same thing in places. Finding 1 and part of finding 6 are this. + +## Findings + +- **[bug — crash]** `data-raw/habitat_validate.R:169-177`: when none of `--species` has a FISS + rule, `out <- do.call(rbind, lapply(sp_abs, ...))` is `NULL` and `attr(out, ...) <-` aborts. + - Reproduced: `--species=CO` with `LNK_KNOWLEDGE_DIR` set dies with *"attempt to set an + attribute on NULL"* in `fiss_absences()`. The output directory is left empty, because the + outputs were unlinked at start. + - Same mechanism, silent form. With `--species=CH,CO`, CO has no rule, yet it gets + `n_absence*` = **0** in summary, totals and diff (`.lnk_hv_absences()` zero-fills the grid). + That 0 means "not assessed" and reads as "no absence sites". Only a `message()` says otherwise. + - Fix: return `NULL` when `sp_abs` is empty. Set `n_absence*` to `NA` for species outside + `sp_abs` after the call, or pass absences only for those species and NA-fill the rest. + +- **[fragile — two definitions of "on the network"]** `data-raw/habitat_validate.R:146`: absence + sites snap to the nearest FWA stream within **150 m**. Observations are kept only for + `match_type` A/B, which bcfishobs defines as *"stream; within 100m"*. + - Measured on the knowledge snapshots: of 7,236 sampled sites that snap, **1,247 (17%)** are + 100–150 m from their stream. That is outside the distance at which an observation would be + admitted. + - These are the sites most likely to sit on an unmapped tributary, where the snapped segment + belongs to another stream. So they inflate `n_absence_spawning` / `_rearing` (the + false-positive check) with points the observation side would have refused. + - Fix: snap within 100 m to match A/B (or state the asymmetry in the stamp). + +- **[fragile — bundle identity keyed two ways]** `data-raw/habitat_validate.R:200, 259, 272`: each + file keys a bundle differently. + - `runs[[..]]$bundle` is the **config name** only, and `misses.csv` / `misses_binned.csv` are + keyed on it. + - `summary.csv` / `totals.csv` key on `schema` + `config_name`, and `diff.csv` on + `config:schema`. + - Two bundles sharing a config therefore write identically labelled, inseparable rows to both + misses files. Example: `default:fresh_default,default:`, which the log + check allows and which is the natural #284 before/after comparison. + - Fix: `bundle = paste0(config, ":", schema)`, as `diff.csv` does. + +- **[fragile — totals and diff over different populations]** `data-raw/habitat_validate.R:87-101, + 209-217`: each bundle is scored over its **own** WSGs, and `totals.csv` sums over them. Only + `diff.csv` is restricted to the shared set. + - In the default no-`--wsgs` run the sets differ: `fresh_default` has 55 access WSGs and `fresh` + has 59, with 51 shared. + - Only in `fresh_default`: ADMS, KOTL, LARL, SLOC. + - Only in `fresh`: BOWR, ELKR, KOTR, LNTH, MCGR, THOM, UNTH, UTRE. + - The two bundles' totals rows are therefore different populations: different `n_obs`, km and + absences. They read as a bundle comparison, and `n_wsg` is the only tell. + - Fix: with two bundles, score both on the intersection (or also write shared-only totals). + +- **[fragile — silent zero]** `R/lnk_habitat_validate.R:209-210, 331`: the code uppercases + `species`, `names(species_obs)` and `absences$species_code`, but not the **values** of + `species_obs`. + - `species_obs = list(BT = c("bt", "dv"))` passes `stopifnot`, joins against bcfishobs' uppercase + `species_code` (`sp.obs_species = o.species_code`), and retains zero observations with no error. + - The summary then reports `n_obs` 0, which reads as "no observations". + - Fix: `species_obs <- lapply(species_obs, toupper)`. + +- **[fragile — stamp]** `data-raw/habitat_validate.R:322-356`: two paths can lose the stamp. + - The stamp queries `.log` unconditionally, while `lnk_habitat_validate()` explicitly + accepts a schema with no `log` table (`.lnk_hv_check_log` returns `character(0)`). So such a + schema scores, writes every CSV, and then dies before `stamp.txt`, leaving outputs with no + stamp. + - `attr(absences, "knowledge_sha")` comes from `system2(..., stdout = TRUE)`. On a + `LNK_KNOWLEDGE_DIR` that is not a git checkout, that returns `character(0)` with a *warning*, + which `tryCatch(error = )` does not catch. `sprintf()` given a zero-length argument then + returns `character(0)`, and the whole absences line vanishes from `stamp.txt` silently. + - Neither fires today: both schemas have a `log` and knowledge is a git repo. + - Fix: guard the log query with `dbExistsTable`, and `if (!length(sha)) NA` the sha. + +Notes (not findings): +- The roxygen says the default A/B filter leaves out "the C-E waterbody matches". C is + *"matched - stream; 100-500m; lookup"* (31,551 rows), a stream match beyond 100 m, not a + waterbody match. The code is right; the sentence is wrong. +- `fresh installed ... @ no recorded sha` appeared in the stamp on this machine. That is + `.lnk_pkg_git_sha()` against a local install, not this diff. + +## Enumeration + +Every fact derived in more than one place, every possibly-empty constructor, and every value the +relaxation or labels take from outside the predicate. ✓ = consistent (measured where marked). + +### M1 — one fact, several derivations + +| Fact | Where it is derived | Consistent? | +|---|---|---| +| accessible | obs SQL `coalesce(access IN (1,2), false)`, NA if unattached (:465, :506); absence SQL, same expression, unattached dropped (:728, :764); `lnk_rollup_wsg` `accessible_km` `access IN (1,2)`; miss label `!accessible` | ✓. Rollup's inner join to habitat vs obs' left join to access: measured 0 segments lacking a habitat or access row in either schema | +| spawning capture | obs + absences via `.lnk_hv_buffered(h.spawning)`; `spawning_km` on `h.spawning`; `miss_reason_spawn` keys on `obs$spawning` | ✓ (one helper) | +| rearing (stream) | obs + absences `h.rearing` (buffered helper); `rearing_km` on `h.rearing` | ✓ | +| rearing_any | obs + absences `h.rearing OR h.lake_rearing OR h.wetland_rearing`; `miss_reason_rear` keys on it; predicate rear stage ORs `pr$rear`, `pr$lake_rear`, `pr$wetland_rear` | ✓. `streams_habitat_` has exactly those three rearing columns | +| habitat (`any`) | summary `n_habitat = spawning \| rearing_any`; totals `share_habitat`; misses `any` = NA if spawning else rear reason | ✓ measured, 12/12 rows | +| attached / n_obs | summary `!is.na(id_segment)`; absences `id_segment IS NOT NULL`; `no_segment` ⇔ captured NA ⇔ id_segment NA | ✓ measured (`no_segment` = `n_unattached`) | +| attach rule | obs LATERAL (:444-457) and absence LATERAL (:736-748): two copies of one SQL | ✓ identical predicates and ORDER BY | +| buffer window | obs and absences share `.lnk_hv_buffered`; accessibility is always own segment | ✓ | +| stage | `.lnk_obs_stage` → dedup OR → summary and misses both read `is_spawn` / `is_rear`; absences stage-less, same value on every stage (documented) | ✓ | +| species admission | obs: `spec` (presence ∩ species) × `species_obs`; absences: filtered on the same `spec` (WSG, species) | ✓ | +| species pooling (BT = BT+DV) | function: `species_obs` default; driver FISS rule: regex `Bull Trout\|Dolly Varden` | ✓ today. Two lists that agree because the driver never overrides `species_obs` | +| species case | `species`, `names(species_obs)`, `absences$species_code` uppercased; `species_obs` values not | ✗ **finding 5** | +| on-network distance | obs: bcfishobs A/B ≤ 100 m; absences: nearest FWA ≤ 150 m | ✗ **finding 2** | +| counting unit | obs: one per species × blk × metre; absences: one per site | differs, but each rate is within its own set. Not a finding | +| spawn gradient floor (relax + `gradient_below_min`) | `.lnk_hv_stage_min` ← `.lnk_hv_sp_params` `spawn_gradient_min` (NA/NULL → 0), the same assembly as `frs_habitat_classify` → `frs_habitat_predicates` | ✓ single source (R2 fix) | +| rear gradient floor | link literal `0`; fresh literal `c(0, rear_g[2])` on the rules path; CSV path has no lower bound (relaxing is harmless there) | ✓. Tracks the predicate, not `parameters_fresh$rear_gradient_min` (0 in both bundles, read by no fresh code). That is correct: fresh would ignore a non-zero value, and so should the relaxation | +| stage width floor | `ranges$$channel_width[1]`; predicate inherits the same range on the rules path, the CSV path and `lake_rear` / `wetland_rear` (`size_rear`) | ✓. Every rule-level `channel_width` in both bundles' `rules.yaml` is `[0, 9999]` (18 + 12), and none sets a rule-level `gradient` | +| inclusive bounds | predicate `BETWEEN` / `>=`; relaxation sets the value to the bound | ✓ | +| `width_null` label | `is.na(channel_width)`, the column the predicate reads | ✓. NULL gradient: 0 rows in both schemas, so no gradient analogue is needed | +| UHC indicator | validate `u.spawning = 1`; overlay `lower(trim(x::text)) IN ('true','t','1')` | ✓. Loaded values are int {-4,-1,1,NA} in both bundles | +| `overlay_applied` | same expression as `lnk_pipeline_classify` | ✓ | +| obs exclusions | `%in% c(TRUE, "t")` on `data_error` / `release_exclude`, same as `.lnk_pipeline_prep_observations` | ✓ (the Releases Database drop is extra and documented) | +| config check vs run_logged vs stamp count | check: latest row per WSG; `run_logged` and stamp: any row | ✓. No NULL `date_start` rows (measured), so `DESC` NULLS FIRST cannot pick a null | +| log existence | function tolerates a missing log; stamp does not | ✗ **finding 6** | +| cost where species absent | `n_obs` 0 by `spec`; cost from habitat rows | ✓ measured: no `streams_habitat_ch/bt` rows in any species-absent WSG in either schema (24 CH, 3 BT WSGs) | +| present but unmodelled | presence says present, no habitat rows → flags FALSE | ✓ measured: none in either schema (unguarded) | +| bundle identity | summary/totals: schema + config_name; diff: config:schema; misses: config | ✗ **finding 3** | +| WSG population | totals: per-bundle WSGs; diff: shared WSGs | ✗ **finding 4** | +| observations identical across bundles | diff guard on species + WSG + observation_key, buffer 0 | ✓. Dedup representative uses locale-dependent `order()`, same session for both | +| misses population | buffer-0 runs only; `stage_rows` uses the same `is_spawn` / `is_rear` | ✓ | +| bins vs bounds | gradient bins `(a,b]` match `<= max`; width bins `[a,b)` match `>= min` | ✓ (display only) | + +### M3 — "nothing" shapes + +| Site | Empty input | Result | +|---|---|---| +| `.lnk_hv_spec` `do.call(rbind, ...)` | no present species | typed 0-row frame ✓ | +| `.lnk_hv_spec` `obs_species = unique(species_obs[[sp]] %\|\|% sp)` | `species_obs = list(BT = character(0))` (passes `stopifnot`) | `data.frame` errors 1 vs 0 rows: loud, not silent | +| `lnk_vd_excl` `data.frame(observation_key = as.character(keys))` | no exclusions | 0-row ✓ | +| UHC | NULL or 0-row | typed 0-row ✓ | +| `.lnk_hv_dedup` | 0 rows | early return, columns added ✓ | +| `.lnk_hv_predicates` `rep(NA, nrow(obs))` / `res` NULL | nothing attached | NA columns; `paste(NULL...)` → `character(0)` → no match ✓ | +| `.lnk_habitat_miss_reason` scalar `gradient` default | length 0 | recycles to 0 ✓ | +| `.lnk_hv_absences` `count_by` | 0 attached absences | tapply NA → 0 ✓ (tested) | +| `.lnk_hv_summary` per-cell `data.frame(scalars)` | empty cell | 1-row, `share` NA ✓ | +| outer `cbind(data.frame(schema = scalar, ...), summary)` | summary has ≥ 3 rows by construction | ✓ | +| driver `split_csv(NULL)` / `toupper(NULL)` | no `--wsgs` | `length()` test ✓ | +| driver `--bundles=` (empty) | `do.call(rbind, list())` → NULL, `nrow(NULL) > 2L` → `if (logical(0))` | loud but opaque error. Not a finding | +| driver `--buffers=` (empty) | `numeric(0)` → `!0 %in%` stop ✓ | | +| `fiss_absences` `do.call(rbind, lapply(sp_abs, ...))` | no species with a rule | NULL → `attr<-` crash ✗ **finding 1** | +| `fiss_absences` per-species frame | species with 0 absence sites | `rep(sp, nrow(s))` ✓ | +| `.lnk_hv_absences` zero-fill | species with no rule | 0 instead of NA ✗ **finding 1** | +| `stage_rows` `pick` | empty spawn/rear subset | `rep(stage, nrow(d))` ✓ (R2 fix) | +| misses/binned `ifelse` / `cut` on 0 rows | no misses | 0-length columns into a 0-row frame ✓ | +| stamp `sprintf(..., knowledge_sha)` | `system2` → `character(0)` | line dropped silently ✗ **finding 6** | +| stamp log query | no `log` table | error after CSVs are written ✗ **finding 6** | + +### Values the relaxation and labels take from outside the predicate's own input + +| Value | Source | Same as the predicate? | +|---|---|---| +| spawn gradient relax / `gradient_min_spawn` | `spawn_gradient_min` via `.lnk_hv_sp_params` | ✓ | +| rear gradient relax / `gradient_min_rear` | literal 0 | ✓ (fresh's literal 0) | +| spawn / rear width relax | `ranges$$channel_width[1]` | ✓ | +| `width_null` | segment `channel_width` | ✓ | +| `not_accessible` | `streams_access` | differs from the habitat gate: accepted tradeoff | +| model | cw only | accepted tradeoff | +| `format(x, scientific = FALSE)` (7 significant digits) vs predicate `%.10g` | shipped minimums (0, 0.0025, 1.5, 2, 4) are exact under both | ✓ today; a minimum with more than 7 significant digits could round below the bound | diff --git a/planning/active/review-round4.md b/planning/active/review-round4.md new file mode 100644 index 00000000..36a01560 --- /dev/null +++ b/planning/active/review-round4.md @@ -0,0 +1,175 @@ +# Code-check round 4 — terminal verification of the round-3 fixes (#283) + +Reviewer: subagent, 2026-09-26. Diff: `diff_r4.patch`. Everything was run from a copy +(`scratchpad/linkcopy4`, fixture schema renamed `zz_lnk_validate_rev4`). The repo was not touched, +apart from this file. + +What was run: +- `NOT_CRAN=true devtools::test(filter = "habitat_validate")`: `[ FAIL 0 | WARN 0 | SKIP 0 | PASS 82 ]`. +- Mutation: with `species_obs <- lapply(species_obs, toupper)` removed, the new case test fails + (`test-lnk_habitat_validate.R:281`, FAIL 1). The guard fires. +- Driver, all exit 0, outputs in `scratchpad/r4out/{A..E}`: + - **A**: two bundles, `--wsgs=COTR,MORR --buffers=0,100`, knowledge set. + - **B**: one bundle, the same WSGs, knowledge unset. No `totals_shared.csv` or `diff.csv` is + written, and no error is raised. + - **C**: two bundles, `--species=CH,CO`, knowledge set. + - **D**: one bundle, `--species=CO`, knowledge set. This is the round-3 crash case, and it no + longer crashes. + - **E**: one bundle, knowledge copied into a directory that is not a git repo. The stamp reads + `knowledge @ not a git repo`. +- Cross-checks on A: + - `totals.csv` equals the per-group sums of `summary.csv` for `n_obs`, `n_habitat` and + `n_absence`. + - `misses.csv` `captured` equals `n_habitat` / `n_spawning` / `n_rearing_any` in 12 of 12 rows. + - `misses.csv` row totals equal `n_obs + n_unattached` in 12 of 12 rows. + - `totals_shared.csv` is identical to `totals.csv`, as it must be when `--wsgs` is given. + - Both misses files are labelled `default:fresh_default` / `bcfishpass:fresh`. +- On C, CO carries `n_absence*` = NA through `summary.csv`, `totals.csv` and `totals_shared.csv`. + CH carries its counts. `diff.csv` has no absence columns, so NA cannot reach it. + +## Findings + +- **[fragile — silent zero, WSG axis]** `R/lnk_habitat_validate.R:767-780`, `data-raw/habitat_validate.R:109, 377-383`. + This is round 3's M3 mechanism, finding 1, moved from the species axis to the WSG axis. + - The FISS snapshots cover **5** WSGs: `knowledge/data/{cotr,lnth,pine,unth,upce}/fiss_sites_*_all.csv`. + - After snapping, absence rows land in **50** WSGs, mostly as edge spillover (for example PARS + 148 and LPCE 607). MORR receives 0. + - `.lnk_hv_absences()` zero-fills the whole `aoi × species` grid. So every WSG outside the + snapshots reports `n_absence = 0`, and a partly covered WSG reports a partial count. Run A + shows MORR CH `n_absence 0` beside COTR CH `68`. That 0 means "not in the FISS snapshot" and + reads as "sampled, no absence sites". + - Pooled rates in `totals` are unaffected, because 0/0 WSGs add nothing. Per-WSG rows, `n_wsg` + and any per-WSG absence rate are affected. + - Nothing records the covered set. The stamp says only "all WSGs, before presence". + - Fix: record the snapshot WSGs (from the file names) in the stamp. Then either NA `n_absence*` + in `summary.csv` for WSGs outside that set, or state in the header that n_absence is 0 there + and should not be read. +- **[minor — stamp states a falsehood]** `data-raw/habitat_validate.R:170, 377`. Fix 1 made + `fiss_absences()` return `NULL` when no requested species has a rule. The stamp then treats + `is.null(absences)` as `"absences: none (LNK_KNOWLEDGE_DIR unset)"`. + - Reproduced in run D (`--species=CO` with `LNK_KNOWLEDGE_DIR` set). The stamp claims the + variable was unset. + - In the same situation, `summary.csv` has no `n_absence*` columns at all (D), while run C has + them as NA. "Not assessed" therefore arrives in two shapes, depending on whether any other + species had a rule. + - Fix: branch the stamp on `nzchar(Sys.getenv("LNK_KNOWLEDGE_DIR"))`, and say "no requested + species has a FISS absence rule". +- **[minor — exported function keeps the species-axis zero]** `R/lnk_habitat_validate.R:767-773`, + roxygen `:128-133`. The driver now NAs species without a rule. `lnk_habitat_validate()` itself + still returns `n_absence*` = 0 for any `species` that has no rows in `absences`. + - A direct caller who passes CH-only absences with `species = c("CH", "CO")` gets CO = 0. + - The function cannot tell "assessed, none found" from "not assessed". The roxygen should say + that a species absent from `absences` is reported as 0, not NA, and that the caller must NA it. + The alternative is to NA-fill species with no rows and accept that "assessed, zero sites" also + becomes NA. + +Notes (not findings): +- `data-raw/habitat_validate.R:244`: the "share no WSGs" `stop()` moved up from the diff block. It + still fires after `summary.csv` / `totals.csv` are written and before `stamp.txt`. The diff-block + observation-identity `stop()` (:313) fires after the misses files. Both are loud, but both leave + outputs without a stamp, which is the shape round 3's finding 6 closed for the log. + `bundle_wsgs` is known before any scoring, so the disjointness check could run there. +- `data-raw/habitat_validate.R:323-326`: `diff.csv` selects each side by `schema` only, while its + labels are `config:schema`. Two bundles on one schema, for example + `default:fresh_default,bcfishpass:fresh_default` over unlogged WSGs, which the log check allows, + give 4 rows per key. + - The deltas are all 0. That is correct: capture is a function of the schema, not the config. + - So the rows are duplicated but not wrong. A guard that the two schemas differ would close it. +- The stamp for a log table with no rows for the scored WSGs prints `(fresh NA, NA to NA)`. That + happens for `fresh_default` over COTR,MORR. It is cosmetic, because the preceding "0 with a + run-log row" is correct. +- Two edge cases in `knowledge_sha`. A `LNK_KNOWLEDGE_DIR` nested inside a different git checkout + would report that checkout's sha. A missing `git` binary reads as "not a git repo". +- `make_totals` now returns NA for a column that is all-NA within a group. That applies to km too, + where the old code summed with `na.rm` to 0. km is NA only where a species has no habitat rows + in any WSG of the group. That was measured: no WSG × species in either schema has habitat rows + with zero spawning. So NA means "not modelled", which matches the per-WSG summary. This is + consistent, not a regression. + +## Enumeration, re-walked against the current code + +### M1: one fact, several derivations + +| Fact | Now | Consistent? | +|---|---|---| +| accessible | obs `:467`, NA if unattached `:508`; absences `:730`, unattached dropped `:766`; rollup `access IN (1,2)` | y | +| spawning capture | `.lnk_hv_buffered(h.spawning)` in obs and absences | y | +| rearing (stream) | `.lnk_hv_buffered(h.rearing)` in obs and absences | y | +| rearing_any | obs `:498`, absences `:761`, predicate rear stage `:632`, `miss_reason_rear` `:700` | y | +| habitat (`any`) | summary `:805`; misses `reason_any` `:259`. Measured 12/12 | y | +| attached / n_obs | summary `:796`; absences `:729`; `no_segment` ⇔ NA. Measured totals = n_obs + n_unattached | y | +| attach rule | obs LATERAL `:446-459` and absence LATERAL `:738-750`: identical predicate and ORDER BY | y | +| buffer window | one helper `:362`; accessibility is the own segment | y | +| stage | `.lnk_obs_stage` → dedup → summary + `stage_rows` | y | +| species admission | `spec` shared by obs `:427` and absences `:719` | y | +| species pooling (BT = BT+DV) | function default `species_obs`; driver regex `Bull Trout\|Dolly Varden` | y (still two lists that agree; the driver never overrides `species_obs`) | +| species case | `species` `:210`, `species_obs` values `:211` (fix 5), names `:212`, `absences$species_code` `:718`; driver `toupper` `:69`. Mutation-tested | **y (fixed)** | +| on-network distance | obs A/B ≤ 100 m; absences `st_dwithin(..., 100)` `:148` | **y (fixed)** | +| counting unit | per-location vs per-site, each rate within its own set | y (not a finding) | +| spawn gradient floor | `.lnk_hv_stage_min` ← `.lnk_hv_sp_params` | y | +| rear gradient floor | literal 0 `:575` | y | +| stage width floor | `ranges$$channel_width[1]` | y | +| inclusive bounds | relax to the bound; `BETWEEN` / `>=` | y | +| `width_null` label | `is.na(channel_width)` `:683` | y | +| UHC indicator | `u.spawning = 1` / `u.rearing = 1` | y | +| `overlay_applied` | `:243-244` | y | +| obs exclusions | `%in% c(TRUE, "t")` `:393-394` | y | +| config check vs run_logged vs stamp count | check: latest per WSG; `run_logged` and stamp: any row | y | +| log existence | function `:298`; stamp `:348` (fix 6) | **y (fixed)** | +| cost where species absent | NA km per WSG; totals NA if all-NA in the group | y (see note) | +| present but unmodelled | none in either schema (from round 3) | y (unguarded, unchanged) | +| bundle identity | summary/totals: schema + config_name; misses `:205` config:schema (fix 3); diff labels config:schema but selects by schema `:323-326` | **y (fixed)**, residual in notes | +| WSG population | totals: per-bundle; `totals_shared.csv` and diff: the same `shared` `:242` (fix 4) | **y (fixed)** | +| observations identical across bundles | guard `:308-317` over `shared` | y | +| misses population | buffer-0 runs, same `is_spawn` / `is_rear` | y | +| bins vs bounds | display only | y | +| absence "assessed" (new fact) | driver: `names(attr(absences, "n_absence_sites"))` `:213`; function: zero-fill `:767-773` | **n** — species axis fixed in the driver only (finding 3); WSG axis not handled (finding 1) | + +### M3: shapes of "nothing" + +| Site | Empty input | Result now | +|---|---|---| +| `.lnk_hv_spec` rbind | no present species | typed 0-row, y | +| `.lnk_hv_spec` `species_obs[[sp]]` = `character(0)` | `list(BT = character(0))` | loud `data.frame` error, y (unchanged) | +| `lnk_vd_excl` | no exclusions | 0-row, y | +| UHC | NULL / 0-row | typed 0-row, y | +| `.lnk_hv_dedup` | 0 rows | early return, y | +| `.lnk_hv_predicates` | nothing attached | NA columns, y | +| `.lnk_habitat_miss_reason` scalar default | length 0 | recycles, y | +| `.lnk_hv_absences` `count_by` | 0 attached | 0, y (tested) | +| `.lnk_hv_summary` per cell | empty cell | 1-row, share NA, y | +| outer `cbind` | ≥ 3 rows | y | +| driver `split_csv(NULL)` / `toupper(NULL)` | no `--wsgs` | `length()` test, y | +| driver `--bundles=` empty | NULL → opaque error | loud, not a finding (unchanged) | +| driver `--buffers=` empty | stop, y | | +| `fiss_absences` rbind, no species with a rule | now `return(NULL)` `:170` | **y (fixed; run D exits 0)**, but see finding 2 on how the stamp reads the NULL | +| `fiss_absences` per-species frame | 0 sites | `rep(sp, 0)`, y | +| zero-fill for a species with no rule | driver NAs it `:211-215`; NA survives summary, totals, totals_shared (run C) | **y (fixed in the driver)**; the function still returns 0 (finding 3) | +| zero-fill for a WSG outside the FISS snapshots | 0 | **n** (finding 1) | +| `make_totals` all-NA column | NA (was 0) | y | +| `shared` with one bundle | `Reduce(intersect, list(w))` = w; only used when there are 2 bundles | y | +| `stage_rows` `pick` | empty subset | y | +| misses / binned on 0 rows | 0-row frame | y | +| stamp `knowledge_sha` | `character(0)` → `"not a git repo"` `:186` | **y (fixed; run E)** | +| stamp log query | no `log` → "no run log" `:348` | **y (fixed)** | +| stamp log, zero matching rows | `string_agg` NULL → "NA" | y (cosmetic) | +| stamp `absences` NULL | knowledge set but no rule → "LNK_KNOWLEDGE_DIR unset" | **n** (finding 2) | + +### Values the relaxation and labels take from outside the predicate + +| Value | Source | Same as the predicate? | +|---|---|---| +| spawn gradient relax / `gradient_min_spawn` | `spawn_gradient_min` via `.lnk_hv_sp_params` | y | +| rear gradient relax / `gradient_min_rear` | literal 0 | y | +| spawn / rear width relax | `ranges$$channel_width[1]` | y | +| `width_null` | segment `channel_width` | y | +| `not_accessible` | `streams_access` | accepted tradeoff | +| model | cw only | accepted tradeoff | +| `format(x, scientific = FALSE)` vs `%.10g` | shipped minimums are exact | y (unchanged; a minimum with more than 7 significant digits would round) | + +## Verdict + +The six round-3 fixes hold and none regressed. Totals, totals_shared, diff and misses agree with +each other and with the summary on the measured runs. The remaining defect is the same "not +assessed reads as 0" mechanism on the WSG axis (finding 1), plus the stamp and API wording that go +with it (findings 2 and 3). diff --git a/planning/active/task_plan.md b/planning/active/task_plan.md index bf986af8..12890eba 100644 --- a/planning/active/task_plan.md +++ b/planning/active/task_plan.md @@ -63,6 +63,18 @@ bundle × species × WSG table, so two bundles can be diffed. downstream_route_measure, species_code)`; the caller locates them. FISS parsing stays in the driver because `knowledge` is private — only aggregates are committed. +## Design changes from the plan review (review-plan.md, 2026-09-26) + +- `schema` is **required** (B1): `default` declares `pipeline.schema: fresh`, which the + bcfishpass bundle writes. Where `.log` records a WSG, its `config_name` must + equal `cfg$name`; unlogged WSGs pass and are flagged `run_logged = FALSE`. +- Miss reasons re-evaluate the bundle's own predicates (`fresh::frs_habitat_predicates()` + over `cfg$rules` + thresholds) with gradient / width relaxed (G1), instead of + re-implementing the rules from the thresholds CSV. +- Unattached locations counted as `n_unattached`, not as inaccessible (G2). +- `rearing_any` (stream + lake + wetland) reported beside stream `rearing` (G3). +- `pg_temp.` on temp-table drops. + ## Phases ### Phase 1: Correct the frame - [x] Edit #283 body: fresh#218 finding (full-PK join is correct), circularity of @@ -70,19 +82,19 @@ bundle × species × WSG table, so two bundles can be diffed. - [x] Record the fresh#218 measurement in `findings.md` ### Phase 2: Tests first -- [ ] `tests/testthat/test-lnk_habitat_validate.R`: arg validation; `.lnk_obs_stage()` +- [x] `tests/testthat/test-lnk_habitat_validate.R`: arg validation; `.lnk_obs_stage()` on activity/life_stage fixtures; `miss_reason` classification; summary shares -- [ ] DB integration test (`skip_if_no_db()`) on a fixture schema `zz_lnk_validate_probe` +- [x] DB integration test (`skip_if_no_db()`) on a fixture schema `zz_lnk_validate_probe` with `streams`, `streams_habitat_bt`, `streams_access`, and a fixture observations table: two WSGs sharing `id_segment` values (full-PK guard — restore a bare join and watch it fail), an excluded key, a release, a DV record in a no-BT WSG, a buffer case, one absence ### Phase 3: `lnk_habitat_validate()` -- [ ] `R/lnk_habitat_validate.R`: exported function + internal SQL builders / helpers +- [x] `R/lnk_habitat_validate.R`: exported function + internal SQL builders / helpers (temp tables, parameterised; species alpha-validated as in `lnk_rollup_wsg()`) -- [ ] Runnable-by-design `@examples` (`\dontrun{}`, DB required — same as siblings) -- [ ] `devtools::document()`, tests green, `lintr::lint_package()` clean +- [x] Runnable-by-design `@examples` (`\dontrun{}`, DB required — same as siblings) +- [x] `devtools::document()`, tests green, `lintr::lint_package()` clean ### Phase 4: Driver + baseline run - [ ] `data-raw/habitat_validate.R` (`--schemas=`, `--wsgs=`, `--species=`, diff --git a/tests/testthat/test-lnk_habitat_validate.R b/tests/testthat/test-lnk_habitat_validate.R new file mode 100644 index 00000000..ee6f930a --- /dev/null +++ b/tests/testthat/test-lnk_habitat_validate.R @@ -0,0 +1,363 @@ +# lnk_habitat_validate() — observation-based scoring of a persisted run. +# Closing parens sit on the last argument line, as in the other test files. +# nolint start: indentation_linter + +test_that(".lnk_obs_stage reads spawning from activity and rearing from activity or juvenile stage", { + st <- link:::.lnk_obs_stage( + activity_code = c("SPL", "R", NA, "OBS", "S", "M"), + activity = c("Spawning - live", "Rearing", NA, "Observed", NA, "Migrating"), + life_stage = c("Adult", NA, "Fry", "Adult", NA, "Juvenile")) + expect_identical(st$is_spawn, c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE)) + expect_identical(st$is_rear, c(FALSE, TRUE, TRUE, FALSE, FALSE, TRUE)) +}) + +test_that(".lnk_obs_stage does not read NA activity as a stage", { + st <- link:::.lnk_obs_stage(NA_character_, NA_character_, NA_character_) + expect_false(st$is_spawn) + expect_false(st$is_rear) +}) + +test_that(".lnk_habitat_miss_reason attributes each miss once, in order", { + r <- link:::.lnk_habitat_miss_reason( + captured = c(TRUE, NA, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), + accessible = c(TRUE, NA, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE), + channel_width = c(5, NA, 5, 5, 5, NA, 5, 5, 5, 5), + p = c(TRUE, NA, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), + p_g = c(TRUE, NA, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE), + p_w = c(TRUE, NA, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE), + p_gw = c(TRUE, NA, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE)) + expect_identical(r, c(NA, "no_segment", "not_accessible", "post_predicate", + "fails_gradient", "width_null", "fails_width", + "fails_gradient_or_width", "fails_gradient_and_width", + "rule_excludes")) +}) + +test_that(".lnk_habitat_miss_reason separates a gradient below the window from one above it", { + r <- link:::.lnk_habitat_miss_reason( + captured = c(FALSE, FALSE), accessible = c(TRUE, TRUE), + channel_width = c(5, 5), p = c(FALSE, FALSE), p_g = c(TRUE, TRUE), + p_w = c(FALSE, FALSE), p_gw = c(TRUE, TRUE), + gradient = c(-0.02, 0.2), gradient_min = c(0, 0)) + expect_identical(r, c("gradient_below_min", "fails_gradient")) +}) + +test_that(".lnk_hv_relax fixes gradient and width without touching lookalike columns", { + p <- "s.gradient BETWEEN 0 AND 0.05 AND s.channel_width >= 2 AND s.gradient_x > 1" + r <- link:::.lnk_hv_relax(p, gradient = 0, width = 2) + expect_false(grepl("s\\.gradient ", r)) + expect_false(grepl("s\\.channel_width", r)) + expect_true(grepl("s.gradient_x", r, fixed = TRUE)) + expect_identical(link:::.lnk_hv_relax(p), p) +}) + +test_that(".lnk_hv_stage_min takes the spawn gradient floor from parameters_fresh", { + spp <- list(spawn_gradient_min = 0.0025, + params_sp = list(ranges = list( + spawn = list(gradient = c(0, 0.05), channel_width = c(4, 9999)), + rear = list(gradient = c(0, 0.1), channel_width = c(1.5, 9999))))) + m <- link:::.lnk_hv_stage_min(spp) + expect_identical(m$spawn[["gradient"]], 0.0025) + expect_identical(m$spawn[["width"]], 4) + expect_identical(m$rear[["gradient"]], 0) + expect_identical(m$rear[["width"]], 1.5) +}) + +test_that(".lnk_hv_spec admits observation species only where the model species is present", { + presence <- data.frame( + watershed_group_code = c("AAAA", "BBBB"), + bt = c("t", ""), ch = c("t", "t"), notes = c("", ""), + stringsAsFactors = FALSE) + s <- link:::.lnk_hv_spec( + presence, aoi = c("AAAA", "BBBB", "CCCC"), species = c("BT", "CH"), + species_obs = list(BT = c("BT", "DV"))) + got <- paste(s$watershed_group_code, s$species_code, s$obs_species) + expect_setequal(got, c("AAAA BT BT", "AAAA BT DV", "AAAA CH CH", + "BBBB CH CH")) +}) + +test_that(".lnk_hv_spec returns a typed empty frame when nothing is present", { + presence <- data.frame(watershed_group_code = "AAAA", bt = "", + stringsAsFactors = FALSE) + s <- link:::.lnk_hv_spec(presence, "AAAA", "BT", list()) + expect_identical(nrow(s), 0L) + expect_named(s, c("watershed_group_code", "species_code", "obs_species")) +}) + +test_that(".lnk_hv_dedup merges records at one location and ORs their stages", { + obs <- data.frame( + observation_key = c("b", "a", "c"), + species_code = "BT", obs_species = c("BT", "DV", "BT"), + blue_line_key = 1L, m = c(50.2, 50, 120), + activity_code = c("S", NA, NA), activity = c("Spawning", NA, NA), + life_stage = c(NA, "Fry", NA), stringsAsFactors = FALSE) + d <- link:::.lnk_hv_dedup(obs) + expect_identical(nrow(d), 2L) + loc50 <- d[round(d$m) == 50, ] + expect_identical(loc50$observation_key, "a") + expect_true(loc50$is_spawn) + expect_true(loc50$is_rear) + expect_identical(loc50$n_records, 2L) + expect_identical(loc50$obs_species, "BT;DV") +}) + +test_that("lnk_habitat_validate validates its arguments before touching the DB", { + cfg <- lnk_config("default") + conn <- structure(list(), class = c("PqConnection", "DBIConnection")) + expect_error(lnk_habitat_validate(conn, "MORR", cfg, list(), "BT"), + "schema") + expect_error(lnk_habitat_validate(conn, "morr", cfg, list(), "BT", "s")) + expect_error(lnk_habitat_validate(conn, "MORR", cfg, list(), "B;T", "s")) + expect_error(lnk_habitat_validate(conn, "MORR", cfg, list(), "BT", "s", + buffer_m = -1)) + expect_error(lnk_habitat_validate(conn, "MORR", cfg, list(), "BT", "s", + match_types = "A'")) + expect_error(lnk_habitat_validate(conn, "MORR", cfg, list(), "BT", "s", + observations = "x; drop"), + "disallowed") + expect_error(lnk_habitat_validate(conn, "MORR", cfg, list(), "BT", "s"), + "wsg_species_presence") +}) + + +# -- DB fixture -------------------------------------------------------------- +# Two WSGs share id_segment values, so a bare id_segment join would attach +# BBBB's spawning segment to an AAAA observation. BT is present in AAAA +# only, so BBBB's DV and BT records must not count. +# +# AAAA, blue_line_key 1: +# seg 1 0-100 gradient 0.01 width 5 access 1 rearing +# seg 2 100-200 gradient 0.08 width 5 access 0 - +# seg 3 200-300 gradient 0.01 width 5 access 1 spawning, rearing +# seg 4 300-400 gradient 0.20 width 5 access 1 - +# seg 5 400-500 gradient 0.01 width NULL access 1 - +local_validate_fixture <- function(conn, env = parent.frame()) { + s <- "zz_lnk_validate_probe" + DBI::dbExecute(conn, sprintf("DROP SCHEMA IF EXISTS %s CASCADE", s)) + DBI::dbExecute(conn, sprintf("CREATE SCHEMA %s", s)) + withr::defer( + try(DBI::dbExecute(conn, sprintf("DROP SCHEMA %s CASCADE", s)), + silent = TRUE), envir = env) + wsg <- c(rep("AAAA", 5), "BBBB", "BBBB") + ids <- c(1:5, 1L, 2L) + DBI::dbWriteTable(conn, DBI::Id(schema = s, table = "streams"), data.frame( + id_segment = ids, watershed_group_code = wsg, + blue_line_key = c(rep(1L, 5), 2L, 2L), + downstream_route_measure = c(0, 100, 200, 300, 400, 0, 100), + upstream_route_measure = c(100, 200, 300, 400, 500, 100, 200), + length_metre = 100, + gradient = c(0.01, 0.08, 0.01, 0.20, 0.01, 0.01, 0.01), + channel_width = c(5, 5, 5, 5, NA, 5, 5), + channel_width_source = "MODELLED", + edge_type = 1000L, stream_order = 3L, + waterbody_key = NA_integer_)) + DBI::dbWriteTable(conn, DBI::Id(schema = s, table = "streams_access"), + data.frame( + id_segment = ids, watershed_group_code = wsg, + access_bt = c(1L, 0L, 1L, 1L, 1L, 1L, 1L))) + DBI::dbWriteTable(conn, DBI::Id(schema = s, table = "streams_habitat_bt"), + data.frame( + id_segment = ids, watershed_group_code = wsg, + accessible = TRUE, + spawning = c(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE), + rearing = c(TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE), + lake_rearing = FALSE, wetland_rearing = FALSE)) + DBI::dbWriteTable(conn, DBI::Id(schema = s, table = "observations"), + data.frame( + observation_key = paste0("o", 1:11), + species_code = c("BT", "DV", "BT", "BT", "DV", "BT", "BT", "BT", + "BT", "BT", "BT"), + watershed_group_code = c("AAAA", "AAAA", "AAAA", "AAAA", "BBBB", + "AAAA", "AAAA", "BBBB", "AAAA", "AAAA", "AAAA"), + blue_line_key = c(1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L), + downstream_route_measure = c(100, 50, 50, 60, 50, 150, 50.2, 150, + 300, 400, 600), + match_type = c("A. matched", "B. matched", "A.", "A.", "A.", + "C. not matched", "A.", "A.", "A.", "A.", "A."), + activity_code = c("R", NA, NA, NA, NA, NA, "S", NA, NA, NA, NA), + activity = c("Rearing", NA, NA, NA, NA, NA, "Spawning", NA, NA, NA, NA), + life_stage = c(NA, "Fry", NA, NA, NA, NA, NA, NA, NA, NA, NA), + source = c("FISS", "FISS", "FISS", "Releases Database (x)", + rep("FISS", 7)))) + s +} + +validate_loaded <- function() { + list( + wsg_species_presence = data.frame( + watershed_group_code = c("AAAA", "BBBB"), bt = c("t", ""), + notes = "", stringsAsFactors = FALSE), + parameters_fresh = utils::read.csv( + lnk_config("default")$files$parameters_fresh$path, + stringsAsFactors = FALSE), + observation_exclusions = data.frame( + observation_key = "o3", data_error = "t", release_exclude = "", + stringsAsFactors = FALSE), + # A spawning-only reach and a confirmed non-habitat reach, both over o2. + user_habitat_classification = data.frame( + species_code = "BT", blue_line_key = 1L, + downstream_route_measure = c(0, 40), upstream_route_measure = c(60, 70), + spawning = c(1L, -1L), rearing = c(NA, -4L))) +} + +validate_conn <- function(env = parent.frame()) { + skip_if_no_db() + conn <- lnk_db_conn(dbname = "fwapg", host = "localhost", port = 5432L, + user = "postgres", password = "postgres") + withr::defer(DBI::dbDisconnect(conn), envir = env) + conn +} + +run_validate <- function(conn, s, aoi = c("AAAA", "BBBB"), ...) { + lnk_habitat_validate( + conn, aoi = aoi, cfg = lnk_config("default"), + loaded = validate_loaded(), species = "BT", schema = s, + observations = paste0(s, ".observations"), ...) +} + +test_that("lnk_habitat_validate scores a fixture run on the full key", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + v <- run_validate(conn, s) + + # o3 excluded, o4 a release, o5 DV where BT is absent, o6 match C, + # o8 BT where BT is absent; o2 and o7 are one location. + obs <- v$observations + expect_setequal(obs$observation_key, c("o1", "o2", "o9", "o10", "o11")) + + o <- function(k) obs[obs$observation_key == k, ] + # Starts at 100 -> segment 2 of AAAA, not the containing segment 1, and + # not BBBB's segment 2 (spawning). + expect_identical(o("o1")$id_segment, 2L) + expect_false(o("o1")$spawning) + expect_false(o("o1")$accessible) + expect_identical(o("o1")$miss_reason_rear, "not_accessible") + + expect_true(o("o2")$rearing) + expect_true(o("o2")$in_uhc_spawn) + expect_false(o("o2")$in_uhc_rear) + expect_identical(o("o2")$obs_species, "BT;DV") + expect_true(is.na(o("o2")$miss_reason_rear)) + # Passes the spawning predicate but is not spawning: clustering. + expect_identical(o("o2")$miss_reason_spawn, "post_predicate") + + expect_identical(o("o9")$miss_reason_spawn, "fails_gradient") + expect_identical(o("o9")$miss_reason_rear, "fails_gradient") + expect_identical(o("o10")$miss_reason_spawn, "width_null") + expect_identical(o("o10")$miss_reason_rear, "width_null") + expect_true(is.na(o("o11")$id_segment)) + expect_identical(o("o11")$miss_reason_rear, "no_segment") + + sm <- v$summary + a_any <- sm[sm$watershed_group_code == "AAAA" & sm$stage == "any", ] + expect_identical(a_any$n_obs, 4L) + expect_identical(a_any$n_unattached, 1L) + expect_identical(a_any$n_accessible, 3L) + expect_identical(a_any$n_inaccessible, 1L) + expect_identical(a_any$n_rearing, 1L) + expect_identical(a_any$n_spawning, 0L) + expect_equal(a_any$share_rearing, 0.25) + expect_identical(a_any$n_in_uhc_spawn, 1L) + expect_identical(a_any$n_in_uhc_rear, 0L) + expect_true(is.integer(obs$n_cand)) + expect_equal(a_any$spawning_km, 0.1) + expect_identical(sm$n_obs[sm$watershed_group_code == "AAAA" & + sm$stage == "spawn"], 1L) + expect_identical(sm$n_obs[sm$watershed_group_code == "AAAA" & + sm$stage == "rear"], 2L) + b <- sm[sm$watershed_group_code == "BBBB", ] + expect_identical(nrow(b), 3L) + expect_true(all(b$n_obs == 0L)) + expect_true(all(is.na(b$share_rearing))) + expect_identical(unique(sm$schema), s) + expect_identical(unique(sm$config_name), "default") + expect_identical(unique(sm$buffer_m), 0) + expect_false(any(sm$run_logged)) +}) + +test_that("species_obs values are case-insensitive", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + v <- run_validate(conn, s, aoi = "AAAA", species_obs = list(bt = c("bt", "dv"))) + expect_identical(v$summary$n_obs[v$summary$stage == "any"], 4L) +}) + +test_that("buffer_m captures habitat upstream along the same stream", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + o1 <- function(b) { + v <- run_validate(conn, s, aoi = "AAAA", buffer_m = b) + v$observations[v$observations$observation_key == "o1", ] + } + # Segment 3 (spawning) starts 100 m above o1. + expect_false(o1(99)$spawning) + expect_true(o1(101)$spawning) + # Accessibility stays the point's own segment. + expect_false(o1(101)$accessible) +}) + +test_that("absences are counted against the segment containing them", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + v <- run_validate(conn, s, absences = data.frame( + watershed_group_code = c("AAAA", "AAAA", "BBBB"), + blue_line_key = c(1L, 1L, 2L), + downstream_route_measure = c(250, 150, 50), + species_code = "bt")) + a <- v$summary[v$summary$watershed_group_code == "AAAA" & + v$summary$stage == "any", ] + expect_identical(a$n_absence, 2L) + expect_identical(a$n_absence_spawning, 1L) + expect_identical(a$n_absence_accessible, 1L) + # BT is absent from BBBB, so its absence row is dropped and BBBB was not + # assessed: NA, not 0. + expect_true(all(is.na( + v$summary$n_absence[v$summary$watershed_group_code == "BBBB"]))) +}) + +test_that("absences are buffered like observations", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + n_spawn <- function(b) { + v <- run_validate(conn, s, aoi = "AAAA", buffer_m = b, + absences = data.frame(watershed_group_code = "AAAA", blue_line_key = 1L, + downstream_route_measure = 150, + species_code = "BT")) + v$summary$n_absence_spawning[1] + } + # Segment 3 (spawning) starts at 200, above the segment 2 start at 100. + expect_identical(n_spawn(0), 0L) + expect_identical(n_spawn(51), 1L) +}) + +test_that("lnk_habitat_validate fails loud on a WSG the schema cannot score", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + expect_error(run_validate(conn, s, aoi = c("AAAA", "ZZZZ")), + "not persisted.*ZZZZ") + DBI::dbExecute(conn, sprintf( + "DELETE FROM %s.streams_access WHERE watershed_group_code = 'BBBB'", s)) + expect_error(run_validate(conn, s), "streams_access rows for: BBBB") +}) + +test_that("lnk_habitat_validate refuses a schema logged as another config's", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + DBI::dbExecute(conn, sprintf( + "CREATE TABLE %s.log (watershed_group_code text, config_name text, + date_start timestamptz)", s)) + DBI::dbExecute(conn, sprintf( + "INSERT INTO %s.log VALUES + ('AAAA', 'default', '2026-01-01'), ('AAAA', 'bcfishpass', '2026-02-01')", + s)) + expect_error(run_validate(conn, s), "AAAA \\(bcfishpass\\)") + DBI::dbExecute(conn, sprintf( + "UPDATE %s.log SET config_name = 'default'", s)) + v <- run_validate(conn, s) + expect_identical( + unique(v$summary$run_logged[v$summary$watershed_group_code == "AAAA"]), + TRUE) + expect_identical( + unique(v$summary$run_logged[v$summary$watershed_group_code == "BBBB"]), + FALSE) +}) +# nolint end: indentation_linter From 9a4c191bd25931067d016fade5dca01825455260 Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 13:19:00 -0700 Subject: [PATCH 04/10] Report capture outside user_habitat_classification reaches (#283) With the overlay on, 237 of 245 spawn-staged CH locations in the 51 shared WSGs sit in reaches default forces to spawning, so the headline capture is mostly decided by construction. The *_outside_uhc shares are the rest. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- R/lnk_habitat_validate.R | 20 +++++++++++++++++--- data-raw/habitat_validate.R | 11 +++++++++-- man/lnk_habitat_validate.Rd | 14 ++++++++++---- tests/testthat/test-lnk_habitat_validate.R | 5 +++++ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/R/lnk_habitat_validate.R b/R/lnk_habitat_validate.R index 889504f8..e48103ad 100644 --- a/R/lnk_habitat_validate.R +++ b/R/lnk_habitat_validate.R @@ -64,7 +64,9 @@ #' `user_habitat_classification` reach confirming that habitat type for the #' species (indicator 1); with `overlay_applied` TRUE the segments wholly #' inside such a reach are forced to habitat, so most of those locations are -#' captured by construction. +#' captured by construction. `share_spawning_outside_uhc` and +#' `share_rearing_any_outside_uhc` repeat the capture without them, which is +#' the part of the score the observations did not decide. #' - **Thresholds set from these observations score in-sample.** A cutoff #' calibrated on the same records (e.g. a use quantile) is partly #' guaranteed its capture; hold records out to score it fairly. @@ -142,7 +144,7 @@ #' `n_accessible`, `n_inaccessible`, `n_spawning`, `n_rearing`, #' `n_rearing_any`, `n_habitat` (spawning or any rearing), the matching #' `share_*` (of `n_obs`; `NA` when `n_obs` is 0), `n_in_uhc_spawn`, -#' `n_in_uhc_rear`, and cost +#' `n_in_uhc_rear`, the `*_outside_uhc` counts and shares, and cost #' `accessible_km`, `spawning_km`, `rearing_km` from [lnk_rollup_wsg()]. #' With `absences`, also `n_absence`, `n_absence_accessible`, #' `n_absence_spawning`, `n_absence_rearing` (stream) and @@ -815,9 +817,21 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, share_rearing = share(n_re), share_rearing_any = share(n_ra), share_habitat = share(n_hab), n_in_uhc_spawn = sum(d$in_uhc_spawn), - n_in_uhc_rear = sum(d$in_uhc_rear)) + n_in_uhc_rear = sum(d$in_uhc_rear), + # The same capture with the overlay's reaches taken out: the part of + # the score the observations did not decide by construction. + n_obs_outside_uhc_spawn = sum(!d$in_uhc_spawn), + n_spawning_outside_uhc = sum(d$spawning & !d$in_uhc_spawn), + n_obs_outside_uhc_rear = sum(!d$in_uhc_rear), + n_rearing_any_outside_uhc = sum(d$rearing_any & !d$in_uhc_rear)) }) out <- cbind(grid, do.call(rbind, rows)) + out$share_spawning_outside_uhc <- ifelse( + out$n_obs_outside_uhc_spawn > 0, + out$n_spawning_outside_uhc / out$n_obs_outside_uhc_spawn, NA_real_) + out$share_rearing_any_outside_uhc <- ifelse( + out$n_obs_outside_uhc_rear > 0, + out$n_rearing_any_outside_uhc / out$n_obs_outside_uhc_rear, NA_real_) out <- merge(out, cost, by = c("watershed_group_code", "species_code"), all.x = TRUE, sort = FALSE) if (!is.null(abs_sum)) { diff --git a/data-raw/habitat_validate.R b/data-raw/habitat_validate.R index d29e6b7e..3391e918 100644 --- a/data-raw/habitat_validate.R +++ b/data-raw/habitat_validate.R @@ -244,6 +244,12 @@ make_totals <- function(s) { out[[paste0("share_", k)]] <- ifelse( out$n_obs > 0, out[[paste0("n_", k)]] / out$n_obs, NA_real_) } + out$share_spawning_outside_uhc <- ifelse( + out$n_obs_outside_uhc_spawn > 0, + out$n_spawning_outside_uhc / out$n_obs_outside_uhc_spawn, NA_real_) + out$share_rearing_any_outside_uhc <- ifelse( + out$n_obs_outside_uhc_rear > 0, + out$n_rearing_any_outside_uhc / out$n_obs_outside_uhc_rear, NA_real_) rownames(out) <- NULL out } @@ -326,8 +332,9 @@ if (nrow(bundles) == 2L) { } cols_cmp <- c("n_obs", "n_accessible", "n_spawning", "n_rearing", "n_rearing_any", "share_accessible", "share_spawning", - "share_rearing", "share_rearing_any", "accessible_km", - "spawning_km", "rearing_km") + "share_rearing", "share_rearing_any", + "share_spawning_outside_uhc", "share_rearing_any_outside_uhc", + "accessible_km", "spawning_km", "rearing_km") by <- c("watershed_group_code", "species_code", "stage", "buffer_m") a <- summary[summary$schema == bundles$schema[1] & summary$watershed_group_code %in% shared, c(by, cols_cmp)] diff --git a/man/lnk_habitat_validate.Rd b/man/lnk_habitat_validate.Rd index b06ca676..f28d6a53 100644 --- a/man/lnk_habitat_validate.Rd +++ b/man/lnk_habitat_validate.Rd @@ -61,7 +61,10 @@ modelled habitat still captures an observation. Default 0.} not caught: \code{watershed_group_code}, \code{blue_line_key}, \code{downstream_route_measure}, \code{species_code} (model species). The caller locates them on the network. Rows for a species not present in the WSG -are dropped. Default \code{NULL}.} +are dropped. Absences are captured the same way observations are, +\code{buffer_m} included, so the two rates stay comparable. A WSG x species +with no rows in \code{absences} reports \code{NA} (not assessed), so pass only +sites from the areas that were surveyed. Default \code{NULL}.} } \value{ A list of two data frames: @@ -73,7 +76,7 @@ records the WSG), \code{n_obs} (locations on a segment), \code{n_unattached}, \code{n_accessible}, \code{n_inaccessible}, \code{n_spawning}, \code{n_rearing}, \code{n_rearing_any}, \code{n_habitat} (spawning or any rearing), the matching \verb{share_*} (of \code{n_obs}; \code{NA} when \code{n_obs} is 0), \code{n_in_uhc_spawn}, -\code{n_in_uhc_rear}, and cost +\code{n_in_uhc_rear}, the \verb{*_outside_uhc} counts and shares, and cost \code{accessible_km}, \code{spawning_km}, \code{rearing_km} from \code{\link[=lnk_rollup_wsg]{lnk_rollup_wsg()}}. With \code{absences}, also \code{n_absence}, \code{n_absence_accessible}, \code{n_absence_spawning}, \code{n_absence_rearing} (stream) and @@ -112,7 +115,8 @@ habitat use); and only in WSGs where \code{loaded$wsg_species_presence} marks the model species present (so DV records count as BT only where BT is present); \item \code{match_type} classes in \code{match_types} (default A/B: matched to a -stream within 100 m; the C-E waterbody matches are left out); +stream within 100 m; C, 100-500 m from a stream, and the D/E +waterbody matches are left out); \item one per species x \code{blue_line_key} x metre (repeat visits are one location; a location is spawn- or rear-staged if any record there is). } @@ -158,7 +162,9 @@ habitat. Spawning and rearing capture is the score. \code{user_habitat_classification} reach confirming that habitat type for the species (indicator 1); with \code{overlay_applied} TRUE the segments wholly inside such a reach are forced to habitat, so most of those locations are -captured by construction. +captured by construction. \code{share_spawning_outside_uhc} and +\code{share_rearing_any_outside_uhc} repeat the capture without them, which is +the part of the score the observations did not decide. \item \strong{Thresholds set from these observations score in-sample.} A cutoff calibrated on the same records (e.g. a use quantile) is partly guaranteed its capture; hold records out to score it fairly. diff --git a/tests/testthat/test-lnk_habitat_validate.R b/tests/testthat/test-lnk_habitat_validate.R index ee6f930a..147dffd8 100644 --- a/tests/testthat/test-lnk_habitat_validate.R +++ b/tests/testthat/test-lnk_habitat_validate.R @@ -258,6 +258,11 @@ test_that("lnk_habitat_validate scores a fixture run on the full key", { expect_equal(a_any$share_rearing, 0.25) expect_identical(a_any$n_in_uhc_spawn, 1L) expect_identical(a_any$n_in_uhc_rear, 0L) + # o2 (loc 50) is the only location in a spawning UHC reach. + expect_identical(a_any$n_obs_outside_uhc_spawn, 3L) + expect_identical(a_any$n_spawning_outside_uhc, 0L) + expect_equal(a_any$share_spawning_outside_uhc, 0) + expect_equal(a_any$share_rearing_any_outside_uhc, 0.25) expect_true(is.integer(obs$n_cand)) expect_equal(a_any$spawning_km, 0.1) expect_identical(sm$n_obs[sm$watershed_group_code == "AAAA" & From 0c19e0a39e0fd1708f4d3400e3a258706fb293b8 Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 13:30:01 -0700 Subject: [PATCH 05/10] Test UHC reaches against the window capture reads (#283) With buffer_m > 0 capture credits habitat upstream of the point, so a UHC reach just above an observation forced its capture while the point tested as outside UHC. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- R/lnk_habitat_validate.R | 16 ++++--- man/lnk_habitat_validate.Rd | 4 +- planning/active/review-round5.md | 52 ++++++++++++++++++++++ tests/testthat/test-lnk_habitat_validate.R | 11 +++-- 4 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 planning/active/review-round5.md diff --git a/R/lnk_habitat_validate.R b/R/lnk_habitat_validate.R index e48103ad..51f95873 100644 --- a/R/lnk_habitat_validate.R +++ b/R/lnk_habitat_validate.R @@ -62,7 +62,9 @@ #' habitat. Spawning and rearing capture is the score. #' `n_in_uhc_spawn` / `n_in_uhc_rear` count locations inside a #' `user_habitat_classification` reach confirming that habitat type for the -#' species (indicator 1); with `overlay_applied` TRUE the segments wholly +#' species (indicator 1) anywhere in the window capture reads (the +#' point's segment up to `buffer_m` upstream); with `overlay_applied` TRUE the +#' segments wholly #' inside such a reach are forced to habitat, so most of those locations are #' captured by construction. `share_spawning_outside_uhc` and #' `share_rearing_any_outside_uhc` repeat the capture without them, which is @@ -477,15 +479,17 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, WHERE u.species_code = a.species_code AND u.blue_line_key = a.blue_line_key AND u.spawning = 1 - AND a.m BETWEEN u.downstream_route_measure - AND u.upstream_route_measure) AS in_uhc_spawn, + AND u.upstream_route_measure >= least(a.m, a.seg_drm) + AND u.downstream_route_measure + <= greatest(a.m, a.seg_drm) + %7$s) AS in_uhc_spawn, EXISTS ( SELECT 1 FROM pg_temp.lnk_vd_uhc u WHERE u.species_code = a.species_code AND u.blue_line_key = a.blue_line_key AND u.rearing = 1 - AND a.m BETWEEN u.downstream_route_measure - AND u.upstream_route_measure) AS in_uhc_rear + AND u.upstream_route_measure >= least(a.m, a.seg_drm) + AND u.downstream_route_measure + <= greatest(a.m, a.seg_drm) + %7$s) AS in_uhc_rear FROM pg_temp.lnk_vd_att a LEFT JOIN %2$s.streams_access x ON x.id_segment = a.id_segment @@ -502,7 +506,7 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, .lnk_hv_buffered(schema, spl, "h.rearing OR h.lake_rearing OR h.wetland_rearing", buf), - .lnk_quote_literal(sp)) + .lnk_quote_literal(sp), buf) }, character(1)), collapse = "\n UNION ALL\n ") out <- DBI::dbGetQuery(conn, paste(per_species, diff --git a/man/lnk_habitat_validate.Rd b/man/lnk_habitat_validate.Rd index f28d6a53..30d2b820 100644 --- a/man/lnk_habitat_validate.Rd +++ b/man/lnk_habitat_validate.Rd @@ -160,7 +160,9 @@ inputs: they lift barriers (\code{observation_threshold} in habitat. Spawning and rearing capture is the score. \code{n_in_uhc_spawn} / \code{n_in_uhc_rear} count locations inside a \code{user_habitat_classification} reach confirming that habitat type for the -species (indicator 1); with \code{overlay_applied} TRUE the segments wholly +species (indicator 1) anywhere in the window capture reads (the +point's segment up to \code{buffer_m} upstream); with \code{overlay_applied} TRUE the +segments wholly inside such a reach are forced to habitat, so most of those locations are captured by construction. \code{share_spawning_outside_uhc} and \code{share_rearing_any_outside_uhc} repeat the capture without them, which is diff --git a/planning/active/review-round5.md b/planning/active/review-round5.md new file mode 100644 index 00000000..17ad8ee9 --- /dev/null +++ b/planning/active/review-round5.md @@ -0,0 +1,52 @@ +# Review round 5 — `*_outside_uhc` counts (commit 9a4c191) + +Scope: `.lnk_hv_summary()` new counts/shares, driver `make_totals()` and `diff.csv`. +Tests from a copy (fixture schema renamed `zz_lnk_validate_r5`): +`NOT_CRAN=true devtools::test(filter="habitat_validate")` -> FAIL 0 | PASS 86. + +## Checked and consistent (no finding) + +- **Pairs with existing counts.** `n_obs_outside_uhc_spawn = n_obs - n_in_uhc_spawn` and + `_rear` likewise, by construction: the same `d` (stage-subset, unattached rows already + dropped at `d <- d[!un, ]`) feeds all of them. `in_uhc_*` are SQL `EXISTS`, so never NULL; + `spawning` / `rearing_any` are NA only on unattached rows, which are removed first. +- **UHC semantics.** `in_uhc_*` tests indicator `= 1` on species + `blue_line_key`, which is + what `fresh::frs_habitat_overlay()` forces (`lower(trim(k.::text)) IN ('true','t','1')`, + keyed on `blue_line_key`, `SET spawning/rearing = TRUE`). Forced `rearing` is inside + `rearing_any`, so pairing `rearing_any` with `in_uhc_rear` is right. +- **Zero-row groups.** `sum(!logical(0))` is `0L`; the share `ifelse(0 > 0, ..)` gives `NA`, + matching the `share()` convention for `n_obs == 0`. +- **make_totals.** The new `n_*` columns match `^n_` so they are summed; they are never NA, so + the all-NA branch cannot misfire; shares are recomputed from summed counts, not averaged. +- **diff.csv across bundles.** Both bundles load byte-identical + `overrides/user_habitat_classification.csv` (cmp), so the outside-UHC denominators are the + same observation set on both sides; with `bcfishpass` at `apply_habitat_overlay: no` the + delta is a like-for-like comparison on the non-overlay population, as intended. + +## Finding 1 (real, moderate): at `buffer_m > 0` the outside-UHC share still includes overlay-forced capture + +`in_uhc_*` tests the **point** (`a.m BETWEEN u.drm AND u.urm`), but at `buffer_m > 0` +`.lnk_hv_buffered()` also credits habitat on any segment starting in `[a.seg_drm, a.m + buf)`. +An observation just **below** a UHC reach is therefore counted as outside UHC, yet is captured +by the overlay-forced segment inside the reach. The doc added in this commit says the share is +"the part of the score the observations did not decide" — at buffer 100 that is not true. + +Size (read-only probe on docker fwapg, bcfishobs A/B, province-wide, not yet filtered to +presence or modelled WSGs): CH locations inside a UHC spawning reach 1764; CH locations +**outside** one but with a UHC spawning reach starting < 100 m upstream on the same +`blue_line_key`: **52**. Rearing: 22 inside, 2 below. BT: no UHC rows. So up to ~52 CH +locations per the full run can move into `n_spawning_outside_uhc` at buffer 100 by +construction — only in the overlay-on bundle, so it also lands in +`share_spawning_outside_uhc_delta` in diff.csv as an apparent model difference. + +Same mechanism, smaller, at buffer 0: the attach rule picks a segment **starting within 1 m +upstream** of the point, so a point < 1 m below a UHC start (both are break points) attaches +to a forced segment while `a.m` tests outside. + +Fix options: (a) test the reach against the range capture actually reads, e.g. +`u.upstream_route_measure >= a.m AND u.downstream_route_measure <= greatest(a.m, a.seg_drm) + ` +(strict `<` for `buf > 0` to mirror `.lnk_hv_buffered`), accepting that `n_in_uhc_*` then +varies with `buffer_m`; or (b) keep the point test and state in the roxygen that the +outside-UHC share is exact only at `buffer_m = 0`. + +Nothing else found. diff --git a/tests/testthat/test-lnk_habitat_validate.R b/tests/testthat/test-lnk_habitat_validate.R index 147dffd8..cdd5ed38 100644 --- a/tests/testthat/test-lnk_habitat_validate.R +++ b/tests/testthat/test-lnk_habitat_validate.R @@ -192,11 +192,13 @@ validate_loaded <- function() { observation_exclusions = data.frame( observation_key = "o3", data_error = "t", release_exclude = "", stringsAsFactors = FALSE), - # A spawning-only reach and a confirmed non-habitat reach, both over o2. + # A spawning-only reach and a confirmed non-habitat reach, both over o2, + # and a spawning reach 50 m above o1. user_habitat_classification = data.frame( species_code = "BT", blue_line_key = 1L, - downstream_route_measure = c(0, 40), upstream_route_measure = c(60, 70), - spawning = c(1L, -1L), rearing = c(NA, -4L))) + downstream_route_measure = c(0, 40, 150), + upstream_route_measure = c(60, 70, 160), + spawning = c(1L, -1L, 1L), rearing = c(NA, -4L, NA))) } validate_conn <- function(env = parent.frame()) { @@ -298,6 +300,9 @@ test_that("buffer_m captures habitat upstream along the same stream", { expect_true(o1(101)$spawning) # Accessibility stays the point's own segment. expect_false(o1(101)$accessible) + # The UHC reach 50 m up is inside the buffered window, not the point's. + expect_false(o1(0)$in_uhc_spawn) + expect_true(o1(51)$in_uhc_spawn) }) test_that("absences are counted against the segment containing them", { From 13f76a86667ad05ca331a16855df34bfab5ff9ef Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 13:41:09 -0700 Subject: [PATCH 06/10] Record the observation-validation baseline and method (#283) default vs bcfishpass on 51 shared WSGs at 0c19e0a. CH spawn-staged capture is mostly the user_habitat_classification overlay (237 of 245); BT's 0.1349 would score in-sample. research/habitat_validation.md carries the method, caveats and the #284 step-5 command. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- CLAUDE.md | 24 + data-raw/logs/habitat_validate_283/diff.csv | 613 ++++++++ data-raw/logs/habitat_validate_283/misses.csv | 89 ++ .../habitat_validate_283/misses_binned.csv | 853 ++++++++++ data-raw/logs/habitat_validate_283/stamp.txt | 9 + .../logs/habitat_validate_283/summary.csv | 1369 +++++++++++++++++ data-raw/logs/habitat_validate_283/totals.csv | 25 + .../habitat_validate_283/totals_shared.csv | 25 + planning/active/progress.md | 4 + planning/active/task_plan.md | 14 +- research/README.md | 1 + research/habitat_thresholds.md | 13 +- research/habitat_validation.md | 130 ++ 13 files changed, 3161 insertions(+), 8 deletions(-) create mode 100644 data-raw/logs/habitat_validate_283/diff.csv create mode 100644 data-raw/logs/habitat_validate_283/misses.csv create mode 100644 data-raw/logs/habitat_validate_283/misses_binned.csv create mode 100644 data-raw/logs/habitat_validate_283/stamp.txt create mode 100644 data-raw/logs/habitat_validate_283/summary.csv create mode 100644 data-raw/logs/habitat_validate_283/totals.csv create mode 100644 data-raw/logs/habitat_validate_283/totals_shared.csv create mode 100644 research/habitat_validation.md diff --git a/CLAUDE.md b/CLAUDE.md index bcbab3ec..39600cc9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,6 +11,30 @@ Experimental package — breaking all the time and loving the learning curve. St **Prefix:** `lnk_` **Branch:** `main` (v0.49.0 as of 2026-09-01) +## Status (2026-09-26, late) — observation validation (#283) + +**`lnk_habitat_validate()` scores a run against fish, not against bcfishpass.** +Capture on accessible / spawning / rearing, cost in km, miss reasons from the +bundle's own predicates with gradient and width relaxed, and FISS absences. +Driver: `data-raw/habitat_validate.R --bundles=:,...`. Method, +baseline and the step-5 command: `research/habitat_validation.md`. + +**Facts not worth re-deriving:** +- **fresh#218 is a join artifact, not duplication.** Every persist table is unique + on `(id_segment, watershed_group_code)`; a bare `id_segment` join fans out 22x + (#203). Join on the full key and the persist schemas are fine. +- **`default`'s `pipeline.schema` is `fresh`, which the bcfishpass bundle writes.** + So `schema` is required, and the function stops if `.log` records a WSG + under another config. `fresh_default` was built by overriding the schema. +- **CH spawn-staged capture is the overlay.** 237 of 245 locations sit in + `user_habitat_classification` spawning reaches that `default` forces. Read + `share_*_outside_uhc`. +- **BT rearing 0.1349 scores in-sample** (it is the P95 of the same locations); + hold records out via the `observations` argument. +- A FISS site that caught fish but listed no species is **not** an absence. That was + 63 % of BT absences in the first draft. `toupper(NULL)` is `character(0)`, which + made an absent `--wsgs` select zero WSGs, and only running the driver found it. + ## Status (2026-09-25) — per-bundle habitat thresholds (#282); #284 parked **Thresholds now live in the bundle.** Every bundle declares diff --git a/data-raw/logs/habitat_validate_283/diff.csv b/data-raw/logs/habitat_validate_283/diff.csv new file mode 100644 index 00000000..f2af53a1 --- /dev/null +++ b/data-raw/logs/habitat_validate_283/diff.csv @@ -0,0 +1,613 @@ +"bundle_a","bundle_b","watershed_group_code","species_code","stage","buffer_m","n_obs_a","n_accessible_a","n_spawning_a","n_rearing_a","n_rearing_any_a","share_accessible_a","share_spawning_a","share_rearing_a","share_rearing_any_a","share_spawning_outside_uhc_a","share_rearing_any_outside_uhc_a","accessible_km_a","spawning_km_a","rearing_km_a","n_obs_b","n_accessible_b","n_spawning_b","n_rearing_b","n_rearing_any_b","share_accessible_b","share_spawning_b","share_rearing_b","share_rearing_any_b","share_spawning_outside_uhc_b","share_rearing_any_outside_uhc_b","accessible_km_b","spawning_km_b","rearing_km_b","n_accessible_delta","n_spawning_delta","n_rearing_delta","n_rearing_any_delta","share_accessible_delta","share_spawning_delta","share_rearing_delta","share_rearing_any_delta","share_spawning_outside_uhc_delta","share_rearing_any_outside_uhc_delta","accessible_km_delta","spawning_km_delta","rearing_km_delta" +"default:fresh_default","bcfishpass:fresh","BBAR","BT","any",0,16,16,10,13,13,1,0.625,0.8125,0.8125,0.625,0.8125,1761.57,329.41,560.67,16,16,10,13,13,1,0.625,0.8125,0.8125,0.625,0.8125,1262.45,296.02,478.21,0,0,0,0,0,0,0,0,0,0,-499.12,-33.39,-82.46 +"default:fresh_default","bcfishpass:fresh","BULK","BT","any",0,468,464,231,334,334,0.991452991452991,0.493589743589744,0.713675213675214,0.713675213675214,0.493589743589744,0.713675213675214,7713.98,1852.11,3012.7,468,443,222,327,327,0.946581196581197,0.474358974358974,0.698717948717949,0.698717948717949,0.474358974358974,0.698717948717949,7676.5,1866.31,3021.51,-21,-9,-7,-7,-0.0448717948717949,-0.0192307692307693,-0.014957264957265,-0.014957264957265,-0.0192307692307693,-0.014957264957265,-37.4799999999996,14.2,8.8100000000004 +"default:fresh_default","bcfishpass:fresh","CARP","BT","any",0,6,6,4,4,6,1,0.666666666666667,0.666666666666667,1,0.666666666666667,1,4420.57,502.37,1026.27,6,6,4,6,6,1,0.666666666666667,1,1,0.666666666666667,1,4296.5,497.07,1072.63,0,0,2,0,0,0,0.333333333333333,0,0,0,-124.07,-5.30000000000001,46.3600000000001 +"default:fresh_default","bcfishpass:fresh","CHES","BT","any",0,3,3,3,3,3,1,1,1,1,1,1,2904.74,376.85,796.72,3,1,1,1,1,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,901.21,145.45,336.47,-2,-2,-2,-2,-0.666666666666667,-0.666666666666667,-0.666666666666667,-0.666666666666667,-0.666666666666667,-0.666666666666667,-2003.53,-231.4,-460.25 +"default:fresh_default","bcfishpass:fresh","CHWK","BT","any",0,62,62,34,45,52,1,0.548387096774194,0.725806451612903,0.838709677419355,0.548387096774194,0.838709677419355,793.94,310.02,353.48,62,62,34,53,53,1,0.548387096774194,0.854838709677419,0.854838709677419,0.548387096774194,0.854838709677419,822.24,316.56,418.39,0,0,8,1,0,0,0.129032258064516,0.0161290322580645,0,0.0161290322580645,28.3,6.54000000000002,64.91 +"default:fresh_default","bcfishpass:fresh","COTR","BT","any",0,85,84,45,68,68,0.988235294117647,0.529411764705882,0.8,0.8,0.529411764705882,0.8,6856.99,1480.88,2433.36,85,84,46,68,68,0.988235294117647,0.541176470588235,0.8,0.8,0.541176470588235,0.8,6878.95,1490.06,2340.71,0,1,0,0,0,0.0117647058823529,0,0,0.0117647058823529,0,21.96,9.17999999999984,-92.6500000000001 +"default:fresh_default","bcfishpass:fresh","CRKD","BT","any",0,4,4,4,4,4,1,1,1,1,1,1,5115.69,695.8,1448.76,4,4,4,4,4,1,1,1,1,1,1,5051.55,695.63,1448.44,0,0,0,0,0,0,0,0,0,0,-64.1399999999994,-0.169999999999959,-0.319999999999936 +"default:fresh_default","bcfishpass:fresh","DOGC","BT","any",0,17,17,13,17,17,1,0.764705882352941,1,1,0.764705882352941,1,1260.46,286.17,502.72,17,17,13,17,17,1,0.764705882352941,1,1,0.764705882352941,1,1251.04,288.83,481.5,0,0,0,0,0,0,0,0,0,0,-9.42000000000007,2.65999999999997,-21.22 +"default:fresh_default","bcfishpass:fresh","FINA","BT","any",0,107,107,89,97,105,1,0.831775700934579,0.906542056074766,0.981308411214953,0.831775700934579,0.981308411214953,7889.87,1325.37,2218.78,107,107,89,105,105,1,0.831775700934579,0.981308411214953,0.981308411214953,0.831775700934579,0.981308411214953,6084.04,1277.62,2845.63,0,0,8,0,0,0,0.0747663551401869,0,0,0,-1805.83,-47.75,626.85 +"default:fresh_default","bcfishpass:fresh","FINL","BT","any",0,32,32,25,29,29,1,0.78125,0.90625,0.90625,0.78125,0.90625,4515.86,1365.64,2107.58,32,32,25,29,29,1,0.78125,0.90625,0.90625,0.78125,0.90625,4480.99,1365.64,2085.7,0,0,0,0,0,0,0,0,0,0,-34.8699999999999,0,-21.8800000000001 +"default:fresh_default","bcfishpass:fresh","FIRE","BT","any",0,172,172,128,151,157,1,0.744186046511628,0.877906976744186,0.912790697674419,0.744186046511628,0.912790697674419,6663.44,1012.79,1911.07,172,172,128,155,155,1,0.744186046511628,0.901162790697674,0.901162790697674,0.744186046511628,0.901162790697674,6589.52,1012.26,2016.75,0,0,4,-2,0,0,0.0232558139534884,-0.0116279069767441,0,-0.0116279069767441,-73.9199999999992,-0.529999999999973,105.68 +"default:fresh_default","bcfishpass:fresh","FOXR","BT","any",0,33,33,26,31,31,1,0.787878787878788,0.93939393939394,0.93939393939394,0.787878787878788,0.93939393939394,3665.56,928.18,1525.02,33,33,26,31,31,1,0.787878787878788,0.93939393939394,0.93939393939394,0.787878787878788,0.93939393939394,3587.54,922.1,1511.59,0,0,0,0,0,0,0,0,0,0,-78.02,-6.07999999999993,-13.4300000000001 +"default:fresh_default","bcfishpass:fresh","FRAN","BT","any",0,102,102,48,71,73,1,0.470588235294118,0.696078431372549,0.715686274509804,0.470588235294118,0.715686274509804,9078.53,1120.86,2355.24,102,100,47,71,71,0.980392156862745,0.46078431372549,0.696078431372549,0.696078431372549,0.46078431372549,0.696078431372549,9265.93,1150.92,2834.02,-2,-1,0,-2,-0.0196078431372549,-0.00980392156862747,0,-0.0196078431372549,-0.00980392156862747,-0.0196078431372549,187.4,30.0600000000002,478.78 +"default:fresh_default","bcfishpass:fresh","FRCN","BT","any",0,95,95,50,88,89,1,0.526315789473684,0.926315789473684,0.936842105263158,0.526315789473684,0.936842105263158,1504.38,663.33,889.13,95,94,50,88,88,0.989473684210526,0.526315789473684,0.926315789473684,0.926315789473684,0.526315789473684,0.926315789473684,1502.48,691.1,964.06,-1,0,0,-1,-0.0105263157894737,0,0,-0.0105263157894737,0,-0.0105263157894737,-1.90000000000009,27.77,74.93 +"default:fresh_default","bcfishpass:fresh","HARR","BT","any",0,43,42,22,32,36,0.976744186046512,0.511627906976744,0.744186046511628,0.837209302325581,0.511627906976744,0.837209302325581,1619.34,470.27,588.62,43,38,19,33,33,0.883720930232558,0.441860465116279,0.767441860465116,0.767441860465116,0.441860465116279,0.767441860465116,1561.45,468.9,827.82,-4,-3,1,-3,-0.0930232558139534,-0.0697674418604651,0.0232558139534884,-0.0697674418604651,-0.0697674418604651,-0.0697674418604651,-57.8899999999999,-1.37,239.2 +"default:fresh_default","bcfishpass:fresh","INGR","BT","any",0,27,27,23,26,26,1,0.851851851851852,0.962962962962963,0.962962962962963,0.851851851851852,0.962962962962963,3925.58,1111.41,1736.58,27,27,23,26,26,1,0.851851851851852,0.962962962962963,0.962962962962963,0.851851851851852,0.962962962962963,3907.56,1111.41,1783.68,0,0,0,0,0,0,0,0,0,0,-18.02,0,47.1000000000001 +"default:fresh_default","bcfishpass:fresh","KISP","BT","any",0,195,192,122,159,162,0.984615384615385,0.625641025641026,0.815384615384615,0.830769230769231,0.625641025641026,0.830769230769231,4529.14,1258.71,1894.95,195,187,120,161,161,0.958974358974359,0.615384615384615,0.825641025641026,0.825641025641026,0.615384615384615,0.825641025641026,4475.39,1261.15,1962.71,-5,-2,2,-1,-0.0256410256410257,-0.0102564102564102,0.0102564102564102,-0.00512820512820522,-0.0102564102564102,-0.00512820512820522,-53.75,2.44000000000005,67.76 +"default:fresh_default","bcfishpass:fresh","KLUM","BT","any",0,314,302,194,243,244,0.961783439490446,0.617834394904459,0.773885350318471,0.777070063694268,0.617834394904459,0.777070063694268,2173.93,929.96,1229.04,314,275,183,232,232,0.875796178343949,0.582802547770701,0.738853503184713,0.738853503184713,0.582802547770701,0.738853503184713,1930.45,894.45,1189.16,-27,-11,-11,-12,-0.0859872611464968,-0.035031847133758,-0.0350318471337581,-0.0382165605095542,-0.035031847133758,-0.0382165605095542,-243.48,-35.51,-39.8799999999999 +"default:fresh_default","bcfishpass:fresh","LBTN","BT","any",0,2,2,2,2,2,1,1,1,1,1,1,9061.71,2027.4,2961.53,2,2,2,2,2,1,1,1,1,1,1,8647.79,2026.94,2189.51,0,0,0,0,0,0,0,0,0,0,-413.919999999998,-0.460000000000036,-772.02 +"default:fresh_default","bcfishpass:fresh","LCHL","BT","any",0,6,6,5,6,6,1,0.833333333333333,1,1,0.833333333333333,1,5533.57,908.41,1581.55,6,6,5,6,6,1,0.833333333333333,1,1,0.833333333333333,1,5236.61,896.14,1550.64,0,0,0,0,0,0,0,0,0,0,-296.96,-12.27,-30.9099999999999 +"default:fresh_default","bcfishpass:fresh","LFRA","BT","any",0,78,78,57,64,69,1,0.730769230769231,0.82051282051282,0.884615384615385,0.730769230769231,0.884615384615385,3569.06,1241.71,1516.52,78,78,58,70,70,1,0.743589743589744,0.897435897435897,0.897435897435897,0.743589743589744,0.897435897435897,3415.8,1284.59,1805.62,0,1,6,1,0,0.0128205128205129,0.076923076923077,0.0128205128205129,0.0128205128205129,0.0128205128205129,-153.26,42.8799999999999,289.1 +"default:fresh_default","bcfishpass:fresh","LKEL","BT","any",0,63,63,36,45,48,1,0.571428571428571,0.714285714285714,0.761904761904762,0.571428571428571,0.761904761904762,405.16,144.67,218.77,63,63,36,48,48,1,0.571428571428571,0.761904761904762,0.761904761904762,0.571428571428571,0.761904761904762,401.02,144.74,222.78,0,0,3,0,0,0,0.0476190476190476,0,0,0,-4.14000000000004,0.0700000000000216,4.00999999999999 +"default:fresh_default","bcfishpass:fresh","LOMI","BT","any",0,27,26,20,25,25,0.962962962962963,0.740740740740741,0.925925925925926,0.925925925925926,0.740740740740741,0.925925925925926,3639.43,1004.03,1513.07,27,26,20,25,25,0.962962962962963,0.740740740740741,0.925925925925926,0.925925925925926,0.740740740740741,0.925925925925926,3436.23,967.82,1517.42,0,0,0,0,0,0,0,0,0,0,-203.2,-36.2099999999999,4.35000000000014 +"default:fresh_default","bcfishpass:fresh","LPCE","BT","any",0,55,53,42,42,42,0.963636363636364,0.763636363636364,0.763636363636364,0.763636363636364,0.763636363636364,0.763636363636364,3571.54,1000.37,1386.86,55,53,42,40,40,0.963636363636364,0.763636363636364,0.727272727272727,0.727272727272727,0.763636363636364,0.727272727272727,3130.17,918.71,1261.4,0,0,-2,-2,0,0,-0.0363636363636364,-0.0363636363636364,0,-0.0363636363636364,-441.37,-81.66,-125.46 +"default:fresh_default","bcfishpass:fresh","LSAL","BT","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSKE","BT","any",0,230,227,168,193,193,0.98695652173913,0.730434782608696,0.839130434782609,0.839130434782609,0.730434782608696,0.839130434782609,3075.25,1326.45,1709.47,230,216,163,186,186,0.939130434782609,0.708695652173913,0.808695652173913,0.808695652173913,0.708695652173913,0.808695652173913,2884.31,1315.64,1751.5,-11,-5,-7,-7,-0.0478260869565217,-0.0217391304347826,-0.0304347826086957,-0.0304347826086957,-0.0217391304347826,-0.0304347826086957,-190.94,-10.8099999999999,42.03 +"default:fresh_default","bcfishpass:fresh","MESI","BT","any",0,64,64,50,60,60,1,0.78125,0.9375,0.9375,0.78125,0.9375,2825.32,691.09,1077.07,64,64,50,60,60,1,0.78125,0.9375,0.9375,0.78125,0.9375,2767.09,685.99,1126.99,0,0,0,0,0,0,0,0,0,0,-58.23,-5.10000000000002,49.9200000000001 +"default:fresh_default","bcfishpass:fresh","MFRA","BT","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MORK","BT","any",0,79,79,70,72,73,1,0.886075949367089,0.911392405063291,0.924050632911392,0.886075949367089,0.924050632911392,7202.59,2148.8,3077.39,79,79,70,73,73,1,0.886075949367089,0.924050632911392,0.924050632911392,0.886075949367089,0.924050632911392,8075.86,2434.23,3397.59,0,0,1,0,0,0,0.0126582278481013,0,0,0,873.27,285.43,320.2 +"default:fresh_default","bcfishpass:fresh","MORR","BT","any",0,357,357,154,258,265,1,0.431372549019608,0.722689075630252,0.742296918767507,0.431372549019608,0.742296918767507,4865.96,960.8,1685.2,357,349,151,258,258,0.977591036414566,0.42296918767507,0.722689075630252,0.722689075630252,0.42296918767507,0.722689075630252,4765.64,952.61,1829.89,-8,-3,0,-7,-0.0224089635854342,-0.00840336134453784,0,-0.0196078431372549,-0.00840336134453784,-0.0196078431372549,-100.32,-8.18999999999994,144.69 +"default:fresh_default","bcfishpass:fresh","MSKE","BT","any",0,69,68,46,51,51,0.985507246376812,0.666666666666667,0.739130434782609,0.739130434782609,0.666666666666667,0.739130434782609,2691.58,922.19,1383.97,69,62,46,51,51,0.898550724637681,0.666666666666667,0.739130434782609,0.739130434782609,0.666666666666667,0.739130434782609,2667.19,921.62,1383.52,-6,0,0,0,-0.0869565217391305,0,0,0,0,0,-24.3899999999999,-0.57000000000005,-0.450000000000045 +"default:fresh_default","bcfishpass:fresh","NARC","BT","any",0,7,7,7,7,7,1,1,1,1,1,1,4336.98,873.49,1703.68,7,7,7,7,7,1,1,1,1,1,1,2994.54,633.18,1162.09,0,0,0,0,0,0,0,0,0,0,-1342.44,-240.31,-541.59 +"default:fresh_default","bcfishpass:fresh","NATR","BT","any",0,57,57,37,47,48,1,0.649122807017544,0.824561403508772,0.842105263157895,0.649122807017544,0.842105263157895,9819.51,1803.66,3496.13,57,53,33,44,44,0.929824561403509,0.578947368421053,0.771929824561403,0.771929824561403,0.578947368421053,0.771929824561403,8011.09,1516.19,3071.31,-4,-4,-3,-4,-0.0701754385964912,-0.0701754385964912,-0.0526315789473685,-0.0701754385964912,-0.0701754385964912,-0.0701754385964912,-1808.42,-287.47,-424.82 +"default:fresh_default","bcfishpass:fresh","NECR","BT","any",0,12,12,12,12,12,1,1,1,1,1,1,6329.74,991.14,1943.82,12,12,12,12,12,1,1,1,1,1,1,6156.77,989.82,1875.61,0,0,0,0,0,0,0,0,0,0,-172.969999999999,-1.31999999999994,-68.21 +"default:fresh_default","bcfishpass:fresh","OSPK","BT","any",0,12,12,10,12,12,1,0.833333333333333,1,1,0.833333333333333,1,1882.44,594.62,877.22,12,12,10,12,12,1,0.833333333333333,1,1,0.833333333333333,1,1881.19,594.62,866.44,0,0,0,0,0,0,0,0,0,0,-1.25,0,-10.78 +"default:fresh_default","bcfishpass:fresh","PARA","BT","any",0,77,77,60,67,70,1,0.779220779220779,0.87012987012987,0.909090909090909,0.779220779220779,0.909090909090909,4400.24,720.29,1330.46,77,77,60,70,70,1,0.779220779220779,0.909090909090909,0.909090909090909,0.779220779220779,0.909090909090909,4256.87,718.23,1769.82,0,0,3,0,0,0,0.038961038961039,0,0,0,-143.37,-2.05999999999995,439.36 +"default:fresh_default","bcfishpass:fresh","PARS","BT","any",0,281,281,231,259,259,1,0.822064056939502,0.921708185053381,0.921708185053381,0.822064056939502,0.921708185053381,6883.03,1685.38,2635.01,281,280,231,259,259,0.99644128113879,0.822064056939502,0.921708185053381,0.921708185053381,0.822064056939502,0.921708185053381,6822.47,1683.36,2575.08,-1,0,0,0,-0.00355871886120995,0,0,0,0,0,-60.5599999999995,-2.02000000000021,-59.9300000000003 +"default:fresh_default","bcfishpass:fresh","PCEA","BT","any",0,176,176,134,151,161,1,0.761363636363636,0.857954545454545,0.914772727272727,0.761363636363636,0.914772727272727,7091.82,921.92,1489.72,176,176,135,163,163,1,0.767045454545455,0.926136363636364,0.926136363636364,0.767045454545455,0.926136363636364,5002.96,925.72,2023.48,0,1,12,2,0,0.00568181818181823,0.0681818181818182,0.0113636363636364,0.00568181818181823,0.0113636363636364,-2088.86,3.80000000000007,533.76 +"default:fresh_default","bcfishpass:fresh","PINE","BT","any",0,249,249,225,240,240,1,0.903614457831325,0.963855421686747,0.963855421686747,0.903614457831325,0.963855421686747,5539.06,1645.08,2409.65,249,249,225,241,241,1,0.903614457831325,0.967871485943775,0.967871485943775,0.903614457831325,0.967871485943775,5425.97,1643.51,2376.18,0,0,1,1,0,0,0.00401606425702816,0.00401606425702816,0,0.00401606425702816,-113.09,-1.56999999999994,-33.4700000000003 +"default:fresh_default","bcfishpass:fresh","SALR","BT","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SETN","BT","any",0,180,177,115,143,150,0.983333333333333,0.638888888888889,0.794444444444444,0.833333333333333,0.638888888888889,0.833333333333333,3258.86,851.7,1239.78,180,175,115,151,151,0.972222222222222,0.638888888888889,0.838888888888889,0.838888888888889,0.638888888888889,0.838888888888889,2844.64,816.05,1339.7,-2,0,8,1,-0.0111111111111111,0,0.0444444444444445,0.00555555555555554,0,0.00555555555555554,-414.22,-35.6500000000001,99.9200000000001 +"default:fresh_default","bcfishpass:fresh","TABR","BT","any",0,10,10,4,4,4,1,0.4,0.4,0.4,0.4,0.4,3402.26,678.31,1061,10,10,4,4,4,1,0.4,0.4,0.4,0.4,0.4,3305.18,677.05,1035.42,0,0,0,0,0,0,0,0,0,0,-97.0800000000004,-1.25999999999999,-25.5799999999999 +"default:fresh_default","bcfishpass:fresh","TOOD","BT","any",0,36,36,31,34,34,1,0.861111111111111,0.944444444444444,0.944444444444444,0.861111111111111,0.944444444444444,4697.77,1131.97,1815.93,36,36,31,34,34,1,0.861111111111111,0.944444444444444,0.944444444444444,0.861111111111111,0.944444444444444,4466.1,1118.51,1850.91,0,0,0,0,0,0,0,0,0,0,-231.67,-13.46,34.98 +"default:fresh_default","bcfishpass:fresh","TWAC","BT","any",0,2,2,2,2,2,1,1,1,1,1,1,1060.41,227.23,402.55,2,2,2,2,2,1,1,1,1,1,1,1002.12,226.3,393.93,0,0,0,0,0,0,0,0,0,0,-58.2900000000001,-0.929999999999978,-8.62 +"default:fresh_default","bcfishpass:fresh","UFRA","BT","any",0,87,87,44,58,58,1,0.505747126436782,0.666666666666667,0.666666666666667,0.505747126436782,0.666666666666667,2752.86,948.12,1217.11,87,87,45,59,59,1,0.517241379310345,0.67816091954023,0.67816091954023,0.517241379310345,0.67816091954023,2107.1,952.9,1239.84,0,1,1,1,0,0.0114942528735632,0.0114942528735632,0.0114942528735632,0.0114942528735632,0.0114942528735632,-645.76,4.77999999999997,22.73 +"default:fresh_default","bcfishpass:fresh","UNRS","BT","any",0,2,2,0,2,2,1,0,1,1,0,1,7487.48,645.96,1280.54,2,2,0,2,2,1,0,1,1,0,1,7431.77,644.82,1864.53,0,0,0,0,0,0,0,0,0,0,-55.7099999999991,-1.13999999999999,583.99 +"default:fresh_default","bcfishpass:fresh","UOMI","BT","any",0,82,82,42,50,51,1,0.51219512195122,0.609756097560976,0.621951219512195,0.51219512195122,0.621951219512195,3764.77,911.83,1451.62,82,82,42,54,54,1,0.51219512195122,0.658536585365854,0.658536585365854,0.51219512195122,0.658536585365854,3703.16,907.88,1459.1,0,0,4,3,0,0,0.0487804878048781,0.0365853658536586,0,0.0365853658536586,-61.6100000000001,-3.95000000000005,7.48000000000002 +"default:fresh_default","bcfishpass:fresh","UPCE","BT","any",0,153,152,138,138,138,0.993464052287582,0.901960784313726,0.901960784313726,0.901960784313726,0.901960784313726,0.901960784313726,5689.87,1682.32,2340.3,153,152,138,139,139,0.993464052287582,0.901960784313726,0.908496732026144,0.908496732026144,0.901960784313726,0.908496732026144,5261.16,1657.29,2320.94,0,0,1,1,0,0,0.00653594771241828,0.00653594771241828,0,0.00653594771241828,-428.71,-25.03,-19.3600000000001 +"default:fresh_default","bcfishpass:fresh","USKE","BT","any",0,32,32,28,31,31,1,0.875,0.96875,0.96875,0.875,0.96875,2969.07,739.68,1264.94,32,32,28,31,31,1,0.875,0.96875,0.96875,0.875,0.96875,3451.92,878.03,1438.52,0,0,0,0,0,0,0,0,0,0,482.85,138.35,173.58 +"default:fresh_default","bcfishpass:fresh","WILL","BT","any",0,54,54,39,51,51,1,0.722222222222222,0.944444444444444,0.944444444444444,0.722222222222222,0.944444444444444,4562.41,1055.35,1720.76,54,54,39,50,50,1,0.722222222222222,0.925925925925926,0.925925925925926,0.722222222222222,0.925925925925926,4515.45,1052.18,1690.35,0,0,-1,-1,0,0,-0.0185185185185185,-0.0185185185185185,0,-0.0185185185185185,-46.96,-3.16999999999985,-30.4100000000001 +"default:fresh_default","bcfishpass:fresh","ZYMO","BT","any",0,280,276,129,188,196,0.985714285714286,0.460714285714286,0.671428571428571,0.7,0.460714285714286,0.7,2058.68,594.73,897.89,280,244,122,186,186,0.871428571428571,0.435714285714286,0.664285714285714,0.664285714285714,0.435714285714286,0.664285714285714,1840.06,575.42,863.2,-32,-7,-2,-10,-0.114285714285714,-0.025,-0.00714285714285712,-0.0357142857142857,-0.025,-0.0357142857142857,-218.62,-19.3100000000001,-34.6899999999999 +"default:fresh_default","bcfishpass:fresh","BBAR","BT","rear",0,0,0,0,0,0,,,,,,,1761.57,329.41,560.67,0,0,0,0,0,,,,,,,1262.45,296.02,478.21,0,0,0,0,,,,,,,-499.12,-33.39,-82.46 +"default:fresh_default","bcfishpass:fresh","BULK","BT","rear",0,255,252,92,157,157,0.988235294117647,0.36078431372549,0.615686274509804,0.615686274509804,0.36078431372549,0.615686274509804,7713.98,1852.11,3012.7,255,232,83,150,150,0.909803921568627,0.325490196078431,0.588235294117647,0.588235294117647,0.325490196078431,0.588235294117647,7676.5,1866.31,3021.51,-20,-9,-7,-7,-0.0784313725490197,-0.0352941176470588,-0.0274509803921569,-0.0274509803921569,-0.0352941176470588,-0.0274509803921569,-37.4799999999996,14.2,8.8100000000004 +"default:fresh_default","bcfishpass:fresh","CARP","BT","rear",0,0,0,0,0,0,,,,,,,4420.57,502.37,1026.27,0,0,0,0,0,,,,,,,4296.5,497.07,1072.63,0,0,0,0,,,,,,,-124.07,-5.30000000000001,46.3600000000001 +"default:fresh_default","bcfishpass:fresh","CHES","BT","rear",0,0,0,0,0,0,,,,,,,2904.74,376.85,796.72,0,0,0,0,0,,,,,,,901.21,145.45,336.47,0,0,0,0,,,,,,,-2003.53,-231.4,-460.25 +"default:fresh_default","bcfishpass:fresh","CHWK","BT","rear",0,5,5,4,4,4,1,0.8,0.8,0.8,0.8,0.8,793.94,310.02,353.48,5,5,4,4,4,1,0.8,0.8,0.8,0.8,0.8,822.24,316.56,418.39,0,0,0,0,0,0,0,0,0,0,28.3,6.54000000000002,64.91 +"default:fresh_default","bcfishpass:fresh","COTR","BT","rear",0,0,0,0,0,0,,,,,,,6856.99,1480.88,2433.36,0,0,0,0,0,,,,,,,6878.95,1490.06,2340.71,0,0,0,0,,,,,,,21.96,9.17999999999984,-92.6500000000001 +"default:fresh_default","bcfishpass:fresh","CRKD","BT","rear",0,0,0,0,0,0,,,,,,,5115.69,695.8,1448.76,0,0,0,0,0,,,,,,,5051.55,695.63,1448.44,0,0,0,0,,,,,,,-64.1399999999994,-0.169999999999959,-0.319999999999936 +"default:fresh_default","bcfishpass:fresh","DOGC","BT","rear",0,0,0,0,0,0,,,,,,,1260.46,286.17,502.72,0,0,0,0,0,,,,,,,1251.04,288.83,481.5,0,0,0,0,,,,,,,-9.42000000000007,2.65999999999997,-21.22 +"default:fresh_default","bcfishpass:fresh","FINA","BT","rear",0,0,0,0,0,0,,,,,,,7889.87,1325.37,2218.78,0,0,0,0,0,,,,,,,6084.04,1277.62,2845.63,0,0,0,0,,,,,,,-1805.83,-47.75,626.85 +"default:fresh_default","bcfishpass:fresh","FINL","BT","rear",0,0,0,0,0,0,,,,,,,4515.86,1365.64,2107.58,0,0,0,0,0,,,,,,,4480.99,1365.64,2085.7,0,0,0,0,,,,,,,-34.8699999999999,0,-21.8800000000001 +"default:fresh_default","bcfishpass:fresh","FIRE","BT","rear",0,66,66,57,62,62,1,0.863636363636364,0.93939393939394,0.93939393939394,0.863636363636364,0.93939393939394,6663.44,1012.79,1911.07,66,66,57,62,62,1,0.863636363636364,0.93939393939394,0.93939393939394,0.863636363636364,0.93939393939394,6589.52,1012.26,2016.75,0,0,0,0,0,0,0,0,0,0,-73.9199999999992,-0.529999999999973,105.68 +"default:fresh_default","bcfishpass:fresh","FOXR","BT","rear",0,0,0,0,0,0,,,,,,,3665.56,928.18,1525.02,0,0,0,0,0,,,,,,,3587.54,922.1,1511.59,0,0,0,0,,,,,,,-78.02,-6.07999999999993,-13.4300000000001 +"default:fresh_default","bcfishpass:fresh","FRAN","BT","rear",0,90,90,41,62,62,1,0.455555555555556,0.688888888888889,0.688888888888889,0.455555555555556,0.688888888888889,9078.53,1120.86,2355.24,90,88,40,60,60,0.977777777777778,0.444444444444444,0.666666666666667,0.666666666666667,0.444444444444444,0.666666666666667,9265.93,1150.92,2834.02,-2,-1,-2,-2,-0.0222222222222223,-0.0111111111111111,-0.0222222222222223,-0.0222222222222223,-0.0111111111111111,-0.0222222222222223,187.4,30.0600000000002,478.78 +"default:fresh_default","bcfishpass:fresh","FRCN","BT","rear",0,5,5,2,4,4,1,0.4,0.8,0.8,0.4,0.8,1504.38,663.33,889.13,5,5,2,4,4,1,0.4,0.8,0.8,0.4,0.8,1502.48,691.1,964.06,0,0,0,0,0,0,0,0,0,0,-1.90000000000009,27.77,74.93 +"default:fresh_default","bcfishpass:fresh","HARR","BT","rear",0,7,7,3,6,6,1,0.428571428571429,0.857142857142857,0.857142857142857,0.428571428571429,0.857142857142857,1619.34,470.27,588.62,7,7,3,6,6,1,0.428571428571429,0.857142857142857,0.857142857142857,0.428571428571429,0.857142857142857,1561.45,468.9,827.82,0,0,0,0,0,0,0,0,0,0,-57.8899999999999,-1.37,239.2 +"default:fresh_default","bcfishpass:fresh","INGR","BT","rear",0,0,0,0,0,0,,,,,,,3925.58,1111.41,1736.58,0,0,0,0,0,,,,,,,3907.56,1111.41,1783.68,0,0,0,0,,,,,,,-18.02,0,47.1000000000001 +"default:fresh_default","bcfishpass:fresh","KISP","BT","rear",0,56,53,27,37,37,0.946428571428571,0.482142857142857,0.660714285714286,0.660714285714286,0.482142857142857,0.660714285714286,4529.14,1258.71,1894.95,56,51,26,37,37,0.910714285714286,0.464285714285714,0.660714285714286,0.660714285714286,0.464285714285714,0.660714285714286,4475.39,1261.15,1962.71,-2,-1,0,0,-0.0357142857142857,-0.0178571428571428,0,0,-0.0178571428571428,0,-53.75,2.44000000000005,67.76 +"default:fresh_default","bcfishpass:fresh","KLUM","BT","rear",0,141,137,66,95,96,0.971631205673759,0.468085106382979,0.673758865248227,0.680851063829787,0.468085106382979,0.680851063829787,2173.93,929.96,1229.04,141,121,61,90,90,0.858156028368794,0.432624113475177,0.638297872340426,0.638297872340426,0.432624113475177,0.638297872340426,1930.45,894.45,1189.16,-16,-5,-5,-6,-0.113475177304964,-0.0354609929078014,-0.0354609929078014,-0.0425531914893617,-0.0354609929078014,-0.0425531914893617,-243.48,-35.51,-39.8799999999999 +"default:fresh_default","bcfishpass:fresh","LBTN","BT","rear",0,0,0,0,0,0,,,,,,,9061.71,2027.4,2961.53,0,0,0,0,0,,,,,,,8647.79,2026.94,2189.51,0,0,0,0,,,,,,,-413.919999999998,-0.460000000000036,-772.02 +"default:fresh_default","bcfishpass:fresh","LCHL","BT","rear",0,0,0,0,0,0,,,,,,,5533.57,908.41,1581.55,0,0,0,0,0,,,,,,,5236.61,896.14,1550.64,0,0,0,0,,,,,,,-296.96,-12.27,-30.9099999999999 +"default:fresh_default","bcfishpass:fresh","LFRA","BT","rear",0,2,2,2,2,2,1,1,1,1,1,1,3569.06,1241.71,1516.52,2,2,2,2,2,1,1,1,1,1,1,3415.8,1284.59,1805.62,0,0,0,0,0,0,0,0,0,0,-153.26,42.8799999999999,289.1 +"default:fresh_default","bcfishpass:fresh","LKEL","BT","rear",0,26,26,11,16,16,1,0.423076923076923,0.615384615384615,0.615384615384615,0.423076923076923,0.615384615384615,405.16,144.67,218.77,26,26,11,16,16,1,0.423076923076923,0.615384615384615,0.615384615384615,0.423076923076923,0.615384615384615,401.02,144.74,222.78,0,0,0,0,0,0,0,0,0,0,-4.14000000000004,0.0700000000000216,4.00999999999999 +"default:fresh_default","bcfishpass:fresh","LOMI","BT","rear",0,0,0,0,0,0,,,,,,,3639.43,1004.03,1513.07,0,0,0,0,0,,,,,,,3436.23,967.82,1517.42,0,0,0,0,,,,,,,-203.2,-36.2099999999999,4.35000000000014 +"default:fresh_default","bcfishpass:fresh","LPCE","BT","rear",0,0,0,0,0,0,,,,,,,3571.54,1000.37,1386.86,0,0,0,0,0,,,,,,,3130.17,918.71,1261.4,0,0,0,0,,,,,,,-441.37,-81.66,-125.46 +"default:fresh_default","bcfishpass:fresh","LSAL","BT","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSKE","BT","rear",0,111,109,69,85,85,0.981981981981982,0.621621621621622,0.765765765765766,0.765765765765766,0.621621621621622,0.765765765765766,3075.25,1326.45,1709.47,111,102,66,81,81,0.918918918918919,0.594594594594595,0.72972972972973,0.72972972972973,0.594594594594595,0.72972972972973,2884.31,1315.64,1751.5,-7,-3,-4,-4,-0.063063063063063,-0.027027027027027,-0.036036036036036,-0.036036036036036,-0.027027027027027,-0.036036036036036,-190.94,-10.8099999999999,42.03 +"default:fresh_default","bcfishpass:fresh","MESI","BT","rear",0,0,0,0,0,0,,,,,,,2825.32,691.09,1077.07,0,0,0,0,0,,,,,,,2767.09,685.99,1126.99,0,0,0,0,,,,,,,-58.23,-5.10000000000002,49.9200000000001 +"default:fresh_default","bcfishpass:fresh","MFRA","BT","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MORK","BT","rear",0,0,0,0,0,0,,,,,,,7202.59,2148.8,3077.39,0,0,0,0,0,,,,,,,8075.86,2434.23,3397.59,0,0,0,0,,,,,,,873.27,285.43,320.2 +"default:fresh_default","bcfishpass:fresh","MORR","BT","rear",0,106,106,28,63,65,1,0.264150943396226,0.594339622641509,0.613207547169811,0.264150943396226,0.613207547169811,4865.96,960.8,1685.2,106,102,27,63,63,0.962264150943396,0.254716981132075,0.594339622641509,0.594339622641509,0.254716981132075,0.594339622641509,4765.64,952.61,1829.89,-4,-1,0,-2,-0.0377358490566038,-0.00943396226415094,0,-0.0188679245283019,-0.00943396226415094,-0.0188679245283019,-100.32,-8.18999999999994,144.69 +"default:fresh_default","bcfishpass:fresh","MSKE","BT","rear",0,5,4,0,0,0,0.8,0,0,0,0,0,2691.58,922.19,1383.97,5,3,0,0,0,0.6,0,0,0,0,0,2667.19,921.62,1383.52,-1,0,0,0,-0.2,0,0,0,0,0,-24.3899999999999,-0.57000000000005,-0.450000000000045 +"default:fresh_default","bcfishpass:fresh","NARC","BT","rear",0,0,0,0,0,0,,,,,,,4336.98,873.49,1703.68,0,0,0,0,0,,,,,,,2994.54,633.18,1162.09,0,0,0,0,,,,,,,-1342.44,-240.31,-541.59 +"default:fresh_default","bcfishpass:fresh","NATR","BT","rear",0,0,0,0,0,0,,,,,,,9819.51,1803.66,3496.13,0,0,0,0,0,,,,,,,8011.09,1516.19,3071.31,0,0,0,0,,,,,,,-1808.42,-287.47,-424.82 +"default:fresh_default","bcfishpass:fresh","NECR","BT","rear",0,0,0,0,0,0,,,,,,,6329.74,991.14,1943.82,0,0,0,0,0,,,,,,,6156.77,989.82,1875.61,0,0,0,0,,,,,,,-172.969999999999,-1.31999999999994,-68.21 +"default:fresh_default","bcfishpass:fresh","OSPK","BT","rear",0,0,0,0,0,0,,,,,,,1882.44,594.62,877.22,0,0,0,0,0,,,,,,,1881.19,594.62,866.44,0,0,0,0,,,,,,,-1.25,0,-10.78 +"default:fresh_default","bcfishpass:fresh","PARA","BT","rear",0,0,0,0,0,0,,,,,,,4400.24,720.29,1330.46,0,0,0,0,0,,,,,,,4256.87,718.23,1769.82,0,0,0,0,,,,,,,-143.37,-2.05999999999995,439.36 +"default:fresh_default","bcfishpass:fresh","PARS","BT","rear",0,0,0,0,0,0,,,,,,,6883.03,1685.38,2635.01,0,0,0,0,0,,,,,,,6822.47,1683.36,2575.08,0,0,0,0,,,,,,,-60.5599999999995,-2.02000000000021,-59.9300000000003 +"default:fresh_default","bcfishpass:fresh","PCEA","BT","rear",0,0,0,0,0,0,,,,,,,7091.82,921.92,1489.72,0,0,0,0,0,,,,,,,5002.96,925.72,2023.48,0,0,0,0,,,,,,,-2088.86,3.80000000000007,533.76 +"default:fresh_default","bcfishpass:fresh","PINE","BT","rear",0,0,0,0,0,0,,,,,,,5539.06,1645.08,2409.65,0,0,0,0,0,,,,,,,5425.97,1643.51,2376.18,0,0,0,0,,,,,,,-113.09,-1.56999999999994,-33.4700000000003 +"default:fresh_default","bcfishpass:fresh","SALR","BT","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SETN","BT","rear",0,1,1,1,1,1,1,1,1,1,1,1,3258.86,851.7,1239.78,1,1,1,1,1,1,1,1,1,1,1,2844.64,816.05,1339.7,0,0,0,0,0,0,0,0,0,0,-414.22,-35.6500000000001,99.9200000000001 +"default:fresh_default","bcfishpass:fresh","TABR","BT","rear",0,0,0,0,0,0,,,,,,,3402.26,678.31,1061,0,0,0,0,0,,,,,,,3305.18,677.05,1035.42,0,0,0,0,,,,,,,-97.0800000000004,-1.25999999999999,-25.5799999999999 +"default:fresh_default","bcfishpass:fresh","TOOD","BT","rear",0,0,0,0,0,0,,,,,,,4697.77,1131.97,1815.93,0,0,0,0,0,,,,,,,4466.1,1118.51,1850.91,0,0,0,0,,,,,,,-231.67,-13.46,34.98 +"default:fresh_default","bcfishpass:fresh","TWAC","BT","rear",0,1,1,1,1,1,1,1,1,1,1,1,1060.41,227.23,402.55,1,1,1,1,1,1,1,1,1,1,1,1002.12,226.3,393.93,0,0,0,0,0,0,0,0,0,0,-58.2900000000001,-0.929999999999978,-8.62 +"default:fresh_default","bcfishpass:fresh","UFRA","BT","rear",0,0,0,0,0,0,,,,,,,2752.86,948.12,1217.11,0,0,0,0,0,,,,,,,2107.1,952.9,1239.84,0,0,0,0,,,,,,,-645.76,4.77999999999997,22.73 +"default:fresh_default","bcfishpass:fresh","UNRS","BT","rear",0,0,0,0,0,0,,,,,,,7487.48,645.96,1280.54,0,0,0,0,0,,,,,,,7431.77,644.82,1864.53,0,0,0,0,,,,,,,-55.7099999999991,-1.13999999999999,583.99 +"default:fresh_default","bcfishpass:fresh","UOMI","BT","rear",0,22,22,6,8,9,1,0.272727272727273,0.363636363636364,0.409090909090909,0.272727272727273,0.409090909090909,3764.77,911.83,1451.62,22,22,6,10,10,1,0.272727272727273,0.454545454545455,0.454545454545455,0.272727272727273,0.454545454545455,3703.16,907.88,1459.1,0,0,2,1,0,0,0.0909090909090909,0.0454545454545454,0,0.0454545454545454,-61.6100000000001,-3.95000000000005,7.48000000000002 +"default:fresh_default","bcfishpass:fresh","UPCE","BT","rear",0,0,0,0,0,0,,,,,,,5689.87,1682.32,2340.3,0,0,0,0,0,,,,,,,5261.16,1657.29,2320.94,0,0,0,0,,,,,,,-428.71,-25.03,-19.3600000000001 +"default:fresh_default","bcfishpass:fresh","USKE","BT","rear",0,1,1,1,1,1,1,1,1,1,1,1,2969.07,739.68,1264.94,1,1,1,1,1,1,1,1,1,1,1,3451.92,878.03,1438.52,0,0,0,0,0,0,0,0,0,0,482.85,138.35,173.58 +"default:fresh_default","bcfishpass:fresh","WILL","BT","rear",0,0,0,0,0,0,,,,,,,4562.41,1055.35,1720.76,0,0,0,0,0,,,,,,,4515.45,1052.18,1690.35,0,0,0,0,,,,,,,-46.96,-3.16999999999985,-30.4100000000001 +"default:fresh_default","bcfishpass:fresh","ZYMO","BT","rear",0,147,147,53,86,88,1,0.360544217687075,0.585034013605442,0.598639455782313,0.360544217687075,0.598639455782313,2058.68,594.73,897.89,147,123,47,78,78,0.836734693877551,0.319727891156463,0.530612244897959,0.530612244897959,0.319727891156463,0.530612244897959,1840.06,575.42,863.2,-24,-6,-8,-10,-0.163265306122449,-0.0408163265306122,-0.0544217687074829,-0.0680272108843537,-0.0408163265306122,-0.0680272108843537,-218.62,-19.3100000000001,-34.6899999999999 +"default:fresh_default","bcfishpass:fresh","BBAR","BT","spawn",0,0,0,0,0,0,,,,,,,1761.57,329.41,560.67,0,0,0,0,0,,,,,,,1262.45,296.02,478.21,0,0,0,0,,,,,,,-499.12,-33.39,-82.46 +"default:fresh_default","bcfishpass:fresh","BULK","BT","spawn",0,12,12,4,9,9,1,0.333333333333333,0.75,0.75,0.333333333333333,0.75,7713.98,1852.11,3012.7,12,11,4,9,9,0.916666666666667,0.333333333333333,0.75,0.75,0.333333333333333,0.75,7676.5,1866.31,3021.51,-1,0,0,0,-0.0833333333333334,0,0,0,0,0,-37.4799999999996,14.2,8.8100000000004 +"default:fresh_default","bcfishpass:fresh","CARP","BT","spawn",0,0,0,0,0,0,,,,,,,4420.57,502.37,1026.27,0,0,0,0,0,,,,,,,4296.5,497.07,1072.63,0,0,0,0,,,,,,,-124.07,-5.30000000000001,46.3600000000001 +"default:fresh_default","bcfishpass:fresh","CHES","BT","spawn",0,0,0,0,0,0,,,,,,,2904.74,376.85,796.72,0,0,0,0,0,,,,,,,901.21,145.45,336.47,0,0,0,0,,,,,,,-2003.53,-231.4,-460.25 +"default:fresh_default","bcfishpass:fresh","CHWK","BT","spawn",0,5,5,4,4,5,1,0.8,0.8,1,0.8,1,793.94,310.02,353.48,5,5,4,5,5,1,0.8,1,1,0.8,1,822.24,316.56,418.39,0,0,1,0,0,0,0.2,0,0,0,28.3,6.54000000000002,64.91 +"default:fresh_default","bcfishpass:fresh","COTR","BT","spawn",0,0,0,0,0,0,,,,,,,6856.99,1480.88,2433.36,0,0,0,0,0,,,,,,,6878.95,1490.06,2340.71,0,0,0,0,,,,,,,21.96,9.17999999999984,-92.6500000000001 +"default:fresh_default","bcfishpass:fresh","CRKD","BT","spawn",0,0,0,0,0,0,,,,,,,5115.69,695.8,1448.76,0,0,0,0,0,,,,,,,5051.55,695.63,1448.44,0,0,0,0,,,,,,,-64.1399999999994,-0.169999999999959,-0.319999999999936 +"default:fresh_default","bcfishpass:fresh","DOGC","BT","spawn",0,0,0,0,0,0,,,,,,,1260.46,286.17,502.72,0,0,0,0,0,,,,,,,1251.04,288.83,481.5,0,0,0,0,,,,,,,-9.42000000000007,2.65999999999997,-21.22 +"default:fresh_default","bcfishpass:fresh","FINA","BT","spawn",0,0,0,0,0,0,,,,,,,7889.87,1325.37,2218.78,0,0,0,0,0,,,,,,,6084.04,1277.62,2845.63,0,0,0,0,,,,,,,-1805.83,-47.75,626.85 +"default:fresh_default","bcfishpass:fresh","FINL","BT","spawn",0,0,0,0,0,0,,,,,,,4515.86,1365.64,2107.58,0,0,0,0,0,,,,,,,4480.99,1365.64,2085.7,0,0,0,0,,,,,,,-34.8699999999999,0,-21.8800000000001 +"default:fresh_default","bcfishpass:fresh","FIRE","BT","spawn",0,4,4,1,3,3,1,0.25,0.75,0.75,0.25,0.75,6663.44,1012.79,1911.07,4,4,1,2,2,1,0.25,0.5,0.5,0.25,0.5,6589.52,1012.26,2016.75,0,0,-1,-1,0,0,-0.25,-0.25,0,-0.25,-73.9199999999992,-0.529999999999973,105.68 +"default:fresh_default","bcfishpass:fresh","FOXR","BT","spawn",0,0,0,0,0,0,,,,,,,3665.56,928.18,1525.02,0,0,0,0,0,,,,,,,3587.54,922.1,1511.59,0,0,0,0,,,,,,,-78.02,-6.07999999999993,-13.4300000000001 +"default:fresh_default","bcfishpass:fresh","FRAN","BT","spawn",0,1,1,0,1,1,1,0,1,1,0,1,9078.53,1120.86,2355.24,1,1,0,1,1,1,0,1,1,0,1,9265.93,1150.92,2834.02,0,0,0,0,0,0,0,0,0,0,187.4,30.0600000000002,478.78 +"default:fresh_default","bcfishpass:fresh","FRCN","BT","spawn",0,1,1,1,1,1,1,1,1,1,1,1,1504.38,663.33,889.13,1,1,1,1,1,1,1,1,1,1,1,1502.48,691.1,964.06,0,0,0,0,0,0,0,0,0,0,-1.90000000000009,27.77,74.93 +"default:fresh_default","bcfishpass:fresh","HARR","BT","spawn",0,0,0,0,0,0,,,,,,,1619.34,470.27,588.62,0,0,0,0,0,,,,,,,1561.45,468.9,827.82,0,0,0,0,,,,,,,-57.8899999999999,-1.37,239.2 +"default:fresh_default","bcfishpass:fresh","INGR","BT","spawn",0,0,0,0,0,0,,,,,,,3925.58,1111.41,1736.58,0,0,0,0,0,,,,,,,3907.56,1111.41,1783.68,0,0,0,0,,,,,,,-18.02,0,47.1000000000001 +"default:fresh_default","bcfishpass:fresh","KISP","BT","spawn",0,5,5,2,3,3,1,0.4,0.6,0.6,0.4,0.6,4529.14,1258.71,1894.95,5,5,2,3,3,1,0.4,0.6,0.6,0.4,0.6,4475.39,1261.15,1962.71,0,0,0,0,0,0,0,0,0,0,-53.75,2.44000000000005,67.76 +"default:fresh_default","bcfishpass:fresh","KLUM","BT","spawn",0,0,0,0,0,0,,,,,,,2173.93,929.96,1229.04,0,0,0,0,0,,,,,,,1930.45,894.45,1189.16,0,0,0,0,,,,,,,-243.48,-35.51,-39.8799999999999 +"default:fresh_default","bcfishpass:fresh","LBTN","BT","spawn",0,0,0,0,0,0,,,,,,,9061.71,2027.4,2961.53,0,0,0,0,0,,,,,,,8647.79,2026.94,2189.51,0,0,0,0,,,,,,,-413.919999999998,-0.460000000000036,-772.02 +"default:fresh_default","bcfishpass:fresh","LCHL","BT","spawn",0,0,0,0,0,0,,,,,,,5533.57,908.41,1581.55,0,0,0,0,0,,,,,,,5236.61,896.14,1550.64,0,0,0,0,,,,,,,-296.96,-12.27,-30.9099999999999 +"default:fresh_default","bcfishpass:fresh","LFRA","BT","spawn",0,1,1,1,1,1,1,1,1,1,1,1,3569.06,1241.71,1516.52,1,1,1,1,1,1,1,1,1,1,1,3415.8,1284.59,1805.62,0,0,0,0,0,0,0,0,0,0,-153.26,42.8799999999999,289.1 +"default:fresh_default","bcfishpass:fresh","LKEL","BT","spawn",0,0,0,0,0,0,,,,,,,405.16,144.67,218.77,0,0,0,0,0,,,,,,,401.02,144.74,222.78,0,0,0,0,,,,,,,-4.14000000000004,0.0700000000000216,4.00999999999999 +"default:fresh_default","bcfishpass:fresh","LOMI","BT","spawn",0,0,0,0,0,0,,,,,,,3639.43,1004.03,1513.07,0,0,0,0,0,,,,,,,3436.23,967.82,1517.42,0,0,0,0,,,,,,,-203.2,-36.2099999999999,4.35000000000014 +"default:fresh_default","bcfishpass:fresh","LPCE","BT","spawn",0,0,0,0,0,0,,,,,,,3571.54,1000.37,1386.86,0,0,0,0,0,,,,,,,3130.17,918.71,1261.4,0,0,0,0,,,,,,,-441.37,-81.66,-125.46 +"default:fresh_default","bcfishpass:fresh","LSAL","BT","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSKE","BT","spawn",0,3,3,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,3075.25,1326.45,1709.47,3,3,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2884.31,1315.64,1751.5,0,0,0,0,0,0,0,0,0,0,-190.94,-10.8099999999999,42.03 +"default:fresh_default","bcfishpass:fresh","MESI","BT","spawn",0,0,0,0,0,0,,,,,,,2825.32,691.09,1077.07,0,0,0,0,0,,,,,,,2767.09,685.99,1126.99,0,0,0,0,,,,,,,-58.23,-5.10000000000002,49.9200000000001 +"default:fresh_default","bcfishpass:fresh","MFRA","BT","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MORK","BT","spawn",0,0,0,0,0,0,,,,,,,7202.59,2148.8,3077.39,0,0,0,0,0,,,,,,,8075.86,2434.23,3397.59,0,0,0,0,,,,,,,873.27,285.43,320.2 +"default:fresh_default","bcfishpass:fresh","MORR","BT","spawn",0,23,23,7,15,15,1,0.304347826086957,0.652173913043478,0.652173913043478,0.304347826086957,0.652173913043478,4865.96,960.8,1685.2,23,23,7,15,15,1,0.304347826086957,0.652173913043478,0.652173913043478,0.304347826086957,0.652173913043478,4765.64,952.61,1829.89,0,0,0,0,0,0,0,0,0,0,-100.32,-8.18999999999994,144.69 +"default:fresh_default","bcfishpass:fresh","MSKE","BT","spawn",0,4,4,2,2,2,1,0.5,0.5,0.5,0.5,0.5,2691.58,922.19,1383.97,4,3,2,2,2,0.75,0.5,0.5,0.5,0.5,0.5,2667.19,921.62,1383.52,-1,0,0,0,-0.25,0,0,0,0,0,-24.3899999999999,-0.57000000000005,-0.450000000000045 +"default:fresh_default","bcfishpass:fresh","NARC","BT","spawn",0,0,0,0,0,0,,,,,,,4336.98,873.49,1703.68,0,0,0,0,0,,,,,,,2994.54,633.18,1162.09,0,0,0,0,,,,,,,-1342.44,-240.31,-541.59 +"default:fresh_default","bcfishpass:fresh","NATR","BT","spawn",0,0,0,0,0,0,,,,,,,9819.51,1803.66,3496.13,0,0,0,0,0,,,,,,,8011.09,1516.19,3071.31,0,0,0,0,,,,,,,-1808.42,-287.47,-424.82 +"default:fresh_default","bcfishpass:fresh","NECR","BT","spawn",0,0,0,0,0,0,,,,,,,6329.74,991.14,1943.82,0,0,0,0,0,,,,,,,6156.77,989.82,1875.61,0,0,0,0,,,,,,,-172.969999999999,-1.31999999999994,-68.21 +"default:fresh_default","bcfishpass:fresh","OSPK","BT","spawn",0,0,0,0,0,0,,,,,,,1882.44,594.62,877.22,0,0,0,0,0,,,,,,,1881.19,594.62,866.44,0,0,0,0,,,,,,,-1.25,0,-10.78 +"default:fresh_default","bcfishpass:fresh","PARA","BT","spawn",0,0,0,0,0,0,,,,,,,4400.24,720.29,1330.46,0,0,0,0,0,,,,,,,4256.87,718.23,1769.82,0,0,0,0,,,,,,,-143.37,-2.05999999999995,439.36 +"default:fresh_default","bcfishpass:fresh","PARS","BT","spawn",0,0,0,0,0,0,,,,,,,6883.03,1685.38,2635.01,0,0,0,0,0,,,,,,,6822.47,1683.36,2575.08,0,0,0,0,,,,,,,-60.5599999999995,-2.02000000000021,-59.9300000000003 +"default:fresh_default","bcfishpass:fresh","PCEA","BT","spawn",0,1,1,0,0,1,1,0,0,1,0,1,7091.82,921.92,1489.72,1,1,0,1,1,1,0,1,1,0,1,5002.96,925.72,2023.48,0,0,1,0,0,0,1,0,0,0,-2088.86,3.80000000000007,533.76 +"default:fresh_default","bcfishpass:fresh","PINE","BT","spawn",0,3,3,3,3,3,1,1,1,1,1,1,5539.06,1645.08,2409.65,3,3,3,3,3,1,1,1,1,1,1,5425.97,1643.51,2376.18,0,0,0,0,0,0,0,0,0,0,-113.09,-1.56999999999994,-33.4700000000003 +"default:fresh_default","bcfishpass:fresh","SALR","BT","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SETN","BT","spawn",0,3,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,3258.86,851.7,1239.78,3,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2844.64,816.05,1339.7,0,0,0,0,0,0,0,0,0,0,-414.22,-35.6500000000001,99.9200000000001 +"default:fresh_default","bcfishpass:fresh","TABR","BT","spawn",0,0,0,0,0,0,,,,,,,3402.26,678.31,1061,0,0,0,0,0,,,,,,,3305.18,677.05,1035.42,0,0,0,0,,,,,,,-97.0800000000004,-1.25999999999999,-25.5799999999999 +"default:fresh_default","bcfishpass:fresh","TOOD","BT","spawn",0,0,0,0,0,0,,,,,,,4697.77,1131.97,1815.93,0,0,0,0,0,,,,,,,4466.1,1118.51,1850.91,0,0,0,0,,,,,,,-231.67,-13.46,34.98 +"default:fresh_default","bcfishpass:fresh","TWAC","BT","spawn",0,0,0,0,0,0,,,,,,,1060.41,227.23,402.55,0,0,0,0,0,,,,,,,1002.12,226.3,393.93,0,0,0,0,,,,,,,-58.2900000000001,-0.929999999999978,-8.62 +"default:fresh_default","bcfishpass:fresh","UFRA","BT","spawn",0,0,0,0,0,0,,,,,,,2752.86,948.12,1217.11,0,0,0,0,0,,,,,,,2107.1,952.9,1239.84,0,0,0,0,,,,,,,-645.76,4.77999999999997,22.73 +"default:fresh_default","bcfishpass:fresh","UNRS","BT","spawn",0,0,0,0,0,0,,,,,,,7487.48,645.96,1280.54,0,0,0,0,0,,,,,,,7431.77,644.82,1864.53,0,0,0,0,,,,,,,-55.7099999999991,-1.13999999999999,583.99 +"default:fresh_default","bcfishpass:fresh","UOMI","BT","spawn",0,0,0,0,0,0,,,,,,,3764.77,911.83,1451.62,0,0,0,0,0,,,,,,,3703.16,907.88,1459.1,0,0,0,0,,,,,,,-61.6100000000001,-3.95000000000005,7.48000000000002 +"default:fresh_default","bcfishpass:fresh","UPCE","BT","spawn",0,1,1,1,1,1,1,1,1,1,1,1,5689.87,1682.32,2340.3,1,1,1,1,1,1,1,1,1,1,1,5261.16,1657.29,2320.94,0,0,0,0,0,0,0,0,0,0,-428.71,-25.03,-19.3600000000001 +"default:fresh_default","bcfishpass:fresh","USKE","BT","spawn",0,0,0,0,0,0,,,,,,,2969.07,739.68,1264.94,0,0,0,0,0,,,,,,,3451.92,878.03,1438.52,0,0,0,0,,,,,,,482.85,138.35,173.58 +"default:fresh_default","bcfishpass:fresh","WILL","BT","spawn",0,0,0,0,0,0,,,,,,,4562.41,1055.35,1720.76,0,0,0,0,0,,,,,,,4515.45,1052.18,1690.35,0,0,0,0,,,,,,,-46.96,-3.16999999999985,-30.4100000000001 +"default:fresh_default","bcfishpass:fresh","ZYMO","BT","spawn",0,14,14,7,10,10,1,0.5,0.714285714285714,0.714285714285714,0.5,0.714285714285714,2058.68,594.73,897.89,14,12,7,9,9,0.857142857142857,0.5,0.642857142857143,0.642857142857143,0.5,0.642857142857143,1840.06,575.42,863.2,-2,0,-1,-1,-0.142857142857143,0,-0.0714285714285714,-0.0714285714285714,0,-0.0714285714285714,-218.62,-19.3100000000001,-34.6899999999999 +"default:fresh_default","bcfishpass:fresh","BBAR","CH","any",0,5,3,1,1,1,0.6,0.2,0.2,0.2,0.2,0.2,275.36,160.2,169.06,5,3,1,1,1,0.6,0.2,0.2,0.2,0.2,0.2,269.11,160.2,167.83,0,0,0,0,0,0,0,0,0,0,-6.25,0,-1.22999999999999 +"default:fresh_default","bcfishpass:fresh","BULK","CH","any",0,110,110,104,107,107,1,0.945454545454545,0.972727272727273,0.972727272727273,0.934782608695652,0.972727272727273,5178.19,1264.07,2038.12,110,110,102,107,107,1,0.927272727272727,0.972727272727273,0.972727272727273,0.934782608695652,0.972727272727273,5089.63,1260.25,1730.12,0,-2,0,0,0,-0.0181818181818182,0,0,0,0,-88.5599999999995,-3.81999999999994,-308 +"default:fresh_default","bcfishpass:fresh","CARP","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","CHES","CH","any",0,87,85,80,81,82,0.977011494252874,0.919540229885057,0.931034482758621,0.942528735632184,0.883333333333333,0.942528735632184,780.54,88.26,258.88,87,85,80,81,81,0.977011494252874,0.919540229885057,0.931034482758621,0.931034482758621,0.883333333333333,0.931034482758621,750.66,88.26,149.77,0,0,0,-1,0,0,0,-0.0114942528735632,0,-0.0114942528735632,-29.88,0,-109.11 +"default:fresh_default","bcfishpass:fresh","CHWK","CH","any",0,21,21,15,14,17,1,0.714285714285714,0.666666666666667,0.80952380952381,0.68421052631579,0.80952380952381,698.92,257.8,310.79,21,19,12,12,12,0.904761904761905,0.571428571428571,0.571428571428571,0.571428571428571,0.578947368421053,0.571428571428571,662.37,253.93,301.07,-2,-3,-2,-5,-0.0952380952380952,-0.142857142857143,-0.0952380952380952,-0.238095238095238,-0.105263157894737,-0.238095238095238,-36.55,-3.87,-9.72000000000003 +"default:fresh_default","bcfishpass:fresh","COTR","CH","any",0,100,95,70,77,77,0.95,0.7,0.77,0.77,0.508196721311475,0.77,4143.01,702.76,1364.58,100,95,67,71,71,0.95,0.67,0.71,0.71,0.508196721311475,0.71,4119.15,694.8,1033.8,0,-3,-6,-6,0,-0.0299999999999999,-0.06,-0.06,0,-0.06,-23.8600000000006,-7.96000000000004,-330.78 +"default:fresh_default","bcfishpass:fresh","CRKD","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","DOGC","CH","any",0,5,5,5,5,5,1,1,1,1,1,1,358.78,162,196.9,5,5,5,5,5,1,1,1,1,1,1,358.45,162,180.33,0,0,0,0,0,0,0,0,0,0,-0.329999999999984,0,-16.57 +"default:fresh_default","bcfishpass:fresh","FINA","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FINL","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FIRE","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FOXR","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FRAN","CH","any",0,23,23,21,20,21,1,0.91304347826087,0.869565217391304,0.91304347826087,0.833333333333333,0.91304347826087,7351.32,597.53,1631.89,23,23,17,17,17,1,0.739130434782609,0.739130434782609,0.739130434782609,0.833333333333333,0.739130434782609,7176.56,540.43,971.87,0,-4,-3,-4,0,-0.173913043478261,-0.130434782608696,-0.173913043478261,0,-0.173913043478261,-174.759999999999,-57.1,-660.02 +"default:fresh_default","bcfishpass:fresh","FRCN","CH","any",0,31,30,26,27,27,0.967741935483871,0.838709677419355,0.870967741935484,0.870967741935484,0.722222222222222,0.870967741935484,749.15,451.01,481.99,31,30,21,27,27,0.967741935483871,0.67741935483871,0.870967741935484,0.870967741935484,0.722222222222222,0.870967741935484,716.2,428.99,474.71,0,-5,0,0,0,-0.161290322580645,0,0,0,0,-32.9499999999999,-22.02,-7.28000000000003 +"default:fresh_default","bcfishpass:fresh","HARR","CH","any",0,118,116,110,109,111,0.983050847457627,0.932203389830508,0.923728813559322,0.940677966101695,0.927272727272727,0.940677966101695,1148.93,329.59,385.83,118,116,109,109,109,0.983050847457627,0.923728813559322,0.923728813559322,0.923728813559322,0.927272727272727,0.923728813559322,1126.73,327.72,377.22,0,-1,0,-2,0,-0.00847457627118642,0,-0.0169491525423729,0,-0.0169491525423729,-22.2,-1.86999999999995,-8.60999999999996 +"default:fresh_default","bcfishpass:fresh","INGR","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","KISP","CH","any",0,89,89,82,76,79,1,0.921348314606742,0.853932584269663,0.887640449438202,0.865384615384615,0.887640449438202,2841.44,862.28,1178.83,89,89,75,76,76,1,0.842696629213483,0.853932584269663,0.853932584269663,0.865384615384615,0.853932584269663,2786.73,860.45,1050.59,0,-7,0,-3,0,-0.0786516853932585,0,-0.0337078651685393,0,-0.0337078651685393,-54.71,-1.82999999999993,-128.24 +"default:fresh_default","bcfishpass:fresh","KLUM","CH","any",0,104,99,87,88,90,0.951923076923077,0.836538461538462,0.846153846153846,0.865384615384615,0.776315789473684,0.865384615384615,1523.16,708.12,905.48,104,99,84,87,87,0.951923076923077,0.807692307692308,0.836538461538462,0.836538461538462,0.776315789473684,0.836538461538462,1481.08,707.93,830.68,0,-3,-1,-3,0,-0.0288461538461539,-0.00961538461538458,-0.0288461538461539,0,-0.0288461538461539,-42.0800000000002,-0.190000000000055,-74.8000000000001 +"default:fresh_default","bcfishpass:fresh","LBTN","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LCHL","CH","any",0,38,38,35,34,34,1,0.921052631578947,0.894736842105263,0.894736842105263,0.892857142857143,0.894736842105263,4358.83,468.47,1153.83,38,38,32,34,34,1,0.842105263157895,0.894736842105263,0.894736842105263,0.892857142857143,0.894736842105263,4159.73,464.81,826.81,0,-3,0,0,0,-0.0789473684210527,0,0,0,0,-199.1,-3.66000000000003,-327.02 +"default:fresh_default","bcfishpass:fresh","LFRA","CH","any",0,165,161,105,132,133,0.975757575757576,0.636363636363636,0.8,0.806060606060606,0.589041095890411,0.806060606060606,3074.38,826.28,1254.99,165,159,104,132,132,0.963636363636364,0.63030303030303,0.8,0.8,0.589041095890411,0.8,2754.05,820.43,1176.68,-2,-1,0,-1,-0.0121212121212121,-0.0060606060606061,0,-0.00606060606060599,0,-0.00606060606060599,-320.33,-5.85000000000002,-78.31 +"default:fresh_default","bcfishpass:fresh","LKEL","CH","any",0,14,14,12,11,12,1,0.857142857142857,0.785714285714286,0.857142857142857,0.777777777777778,0.857142857142857,332.18,106.7,162.87,14,14,10,11,11,1,0.714285714285714,0.785714285714286,0.785714285714286,0.777777777777778,0.785714285714286,328.21,106.49,123.85,0,-2,0,-1,0,-0.142857142857143,0,-0.0714285714285714,0,-0.0714285714285714,-3.97000000000003,-0.210000000000008,-39.02 +"default:fresh_default","bcfishpass:fresh","LOMI","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LPCE","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSAL","CH","any",0,17,17,17,17,17,1,1,1,1,1,1,3029.07,317.62,1060.92,17,17,17,17,17,1,1,1,1,1,1,2968.08,312.6,617.6,0,0,0,0,0,0,0,0,0,0,-60.9900000000002,-5.01999999999998,-443.32 +"default:fresh_default","bcfishpass:fresh","LSKE","CH","any",0,122,119,106,106,106,0.975409836065574,0.868852459016393,0.868852459016393,0.868852459016393,0.804878048780488,0.868852459016393,2101.75,1052.46,1308.55,122,119,99,106,106,0.975409836065574,0.811475409836066,0.868852459016393,0.868852459016393,0.804878048780488,0.868852459016393,2086.32,1049.22,1167.34,0,-7,0,0,0,-0.0573770491803278,0,0,0,0,-15.4299999999998,-3.24000000000001,-141.21 +"default:fresh_default","bcfishpass:fresh","MESI","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MFRA","CH","any",0,2,1,0,0,0,0.5,0,0,0,0,0,277.46,100.9,121.94,2,1,0,0,0,0.5,0,0,0,0,0,231.06,96.92,104.06,0,0,0,0,0,0,0,0,0,0,-46.4,-3.98,-17.88 +"default:fresh_default","bcfishpass:fresh","MORK","CH","any",0,156,155,145,145,146,0.993589743589744,0.92948717948718,0.92948717948718,0.935897435897436,0.828125,0.935897435897436,5953.1,1577.65,2499.11,156,155,140,143,143,0.993589743589744,0.897435897435897,0.916666666666667,0.916666666666667,0.828125,0.916666666666667,5705.82,1556.47,2225.04,0,-5,-2,-3,0,-0.032051282051282,-0.0128205128205129,-0.0192307692307693,0,-0.0192307692307693,-247.280000000001,-21.1800000000001,-274.07 +"default:fresh_default","bcfishpass:fresh","MORR","CH","any",0,41,41,33,35,38,1,0.804878048780488,0.853658536585366,0.926829268292683,0.588235294117647,0.926829268292683,3341.35,646.28,1171.33,41,41,31,33,33,1,0.75609756097561,0.804878048780488,0.804878048780488,0.588235294117647,0.804878048780488,3328.25,644.81,880.69,0,-2,-2,-5,0,-0.0487804878048781,-0.048780487804878,-0.121951219512195,0,-0.121951219512195,-13.0999999999999,-1.47000000000003,-290.64 +"default:fresh_default","bcfishpass:fresh","MSKE","CH","any",0,42,40,36,38,38,0.952380952380952,0.857142857142857,0.904761904761905,0.904761904761905,0.833333333333333,0.904761904761905,1516.21,676.83,856.12,42,40,34,36,36,0.952380952380952,0.80952380952381,0.857142857142857,0.857142857142857,0.833333333333333,0.857142857142857,1506.83,676.03,779.76,0,-2,-2,-2,0,-0.0476190476190476,-0.0476190476190477,-0.0476190476190477,0,-0.0476190476190477,-9.38000000000011,-0.800000000000068,-76.36 +"default:fresh_default","bcfishpass:fresh","NARC","CH","any",0,22,22,21,20,20,1,0.954545454545455,0.909090909090909,0.909090909090909,0.75,0.909090909090909,3563.45,506.51,1327.21,22,22,19,20,20,1,0.863636363636364,0.909090909090909,0.909090909090909,0.75,0.909090909090909,2335,387.57,563.65,0,-2,0,0,0,-0.0909090909090909,0,0,0,0,-1228.45,-118.94,-763.56 +"default:fresh_default","bcfishpass:fresh","NATR","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","NECR","CH","any",0,101,101,93,97,97,1,0.920792079207921,0.96039603960396,0.96039603960396,0.88235294117647,0.96039603960396,5608.47,516.15,1649.24,101,101,93,96,96,1,0.920792079207921,0.95049504950495,0.95049504950495,0.88235294117647,0.95049504950495,5489.42,515.99,1079.18,0,0,-1,-1,0,0,-0.00990099009900991,-0.00990099009900991,0,-0.00990099009900991,-119.05,-0.159999999999968,-570.06 +"default:fresh_default","bcfishpass:fresh","OSPK","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARA","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARS","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PCEA","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PINE","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SALR","CH","any",0,7,7,6,6,6,1,0.857142857142857,0.857142857142857,0.857142857142857,0.5,0.857142857142857,3174.7,234.92,966.25,7,7,6,6,6,1,0.857142857142857,0.857142857142857,0.857142857142857,0.5,0.857142857142857,3134.03,206.59,442.55,0,0,0,0,0,0,0,0,0,0,-40.6699999999996,-28.33,-523.7 +"default:fresh_default","bcfishpass:fresh","SETN","CH","any",0,117,116,111,111,112,0.991452991452991,0.948717948717949,0.948717948717949,0.957264957264957,0.5,0.957264957264957,1500.97,543.88,663.52,117,116,111,111,111,0.991452991452991,0.948717948717949,0.948717948717949,0.948717948717949,0.5,0.948717948717949,1497.15,537.97,609.35,0,0,0,-1,0,0,0,-0.00854700854700863,0,-0.00854700854700863,-3.81999999999994,-5.90999999999997,-54.17 +"default:fresh_default","bcfishpass:fresh","TABR","CH","any",0,50,48,29,32,32,0.96,0.58,0.64,0.64,0.543478260869565,0.64,2633.55,410.85,789.94,50,48,29,32,32,0.96,0.58,0.64,0.64,0.543478260869565,0.64,2566.6,410.27,642.88,0,0,0,0,0,0,0,0,0,0,-66.9500000000003,-0.580000000000041,-147.06 +"default:fresh_default","bcfishpass:fresh","TOOD","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","TWAC","CH","any",0,9,9,8,9,9,1,0.888888888888889,1,1,0.888888888888889,1,705.9,144.23,228.3,9,9,8,9,9,1,0.888888888888889,1,1,0.888888888888889,1,689.03,144.23,173.02,0,0,0,0,0,0,0,0,0,0,-16.87,0,-55.28 +"default:fresh_default","bcfishpass:fresh","UFRA","CH","any",0,51,51,45,45,45,1,0.88235294117647,0.88235294117647,0.88235294117647,0.727272727272727,0.88235294117647,1487.28,642.83,764.56,51,51,44,45,45,1,0.862745098039216,0.88235294117647,0.88235294117647,0.727272727272727,0.88235294117647,1243.66,632.76,726.73,0,-1,0,0,0,-0.0196078431372548,0,0,0,0,-243.62,-10.07,-37.8299999999999 +"default:fresh_default","bcfishpass:fresh","UNRS","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UOMI","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UPCE","CH","any",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","USKE","CH","any",0,8,8,8,8,8,1,1,1,1,1,1,1528.86,498.83,733.99,8,8,8,8,8,1,1,1,1,1,1,1518.35,498.83,593.41,0,0,0,0,0,0,0,0,0,0,-10.51,0,-140.58 +"default:fresh_default","bcfishpass:fresh","WILL","CH","any",0,58,58,53,53,53,1,0.913793103448276,0.913793103448276,0.913793103448276,0.722222222222222,0.913793103448276,3601.38,640.69,1364.26,58,58,52,53,53,1,0.896551724137931,0.913793103448276,0.913793103448276,0.722222222222222,0.913793103448276,3537.67,630.48,1029.73,0,-1,0,0,0,-0.0172413793103449,0,0,0,0,-63.71,-10.21,-334.53 +"default:fresh_default","bcfishpass:fresh","ZYMO","CH","any",0,21,19,14,16,16,0.904761904761905,0.666666666666667,0.761904761904762,0.761904761904762,0.461538461538462,0.761904761904762,1211.06,463.12,602.24,21,19,13,16,16,0.904761904761905,0.619047619047619,0.761904761904762,0.761904761904762,0.461538461538462,0.761904761904762,1200.73,462.91,539.94,0,-1,0,0,0,-0.0476190476190476,0,0,0,0,-10.3299999999999,-0.20999999999998,-62.3 +"default:fresh_default","bcfishpass:fresh","BBAR","CH","rear",0,0,0,0,0,0,,,,,,,275.36,160.2,169.06,0,0,0,0,0,,,,,,,269.11,160.2,167.83,0,0,0,0,,,,,,,-6.25,0,-1.22999999999999 +"default:fresh_default","bcfishpass:fresh","BULK","CH","rear",0,11,11,6,9,9,1,0.545454545454545,0.818181818181818,0.818181818181818,0.545454545454545,0.818181818181818,5178.19,1264.07,2038.12,11,11,6,9,9,1,0.545454545454545,0.818181818181818,0.818181818181818,0.545454545454545,0.818181818181818,5089.63,1260.25,1730.12,0,0,0,0,0,0,0,0,0,0,-88.5599999999995,-3.81999999999994,-308 +"default:fresh_default","bcfishpass:fresh","CARP","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","CHES","CH","rear",0,1,1,1,1,1,1,1,1,1,1,1,780.54,88.26,258.88,1,1,1,1,1,1,1,1,1,1,1,750.66,88.26,149.77,0,0,0,0,0,0,0,0,0,0,-29.88,0,-109.11 +"default:fresh_default","bcfishpass:fresh","CHWK","CH","rear",0,4,4,3,3,3,1,0.75,0.75,0.75,0.75,0.75,698.92,257.8,310.79,4,4,3,3,3,1,0.75,0.75,0.75,0.75,0.75,662.37,253.93,301.07,0,0,0,0,0,0,0,0,0,0,-36.55,-3.87,-9.72000000000003 +"default:fresh_default","bcfishpass:fresh","COTR","CH","rear",0,48,45,28,33,33,0.9375,0.583333333333333,0.6875,0.6875,0.444444444444444,0.6875,4143.01,702.76,1364.58,48,45,28,31,31,0.9375,0.583333333333333,0.645833333333333,0.645833333333333,0.444444444444444,0.645833333333333,4119.15,694.8,1033.8,0,0,-2,-2,0,0,-0.0416666666666666,-0.0416666666666666,0,-0.0416666666666666,-23.8600000000006,-7.96000000000004,-330.78 +"default:fresh_default","bcfishpass:fresh","CRKD","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","DOGC","CH","rear",0,0,0,0,0,0,,,,,,,358.78,162,196.9,0,0,0,0,0,,,,,,,358.45,162,180.33,0,0,0,0,,,,,,,-0.329999999999984,0,-16.57 +"default:fresh_default","bcfishpass:fresh","FINA","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FINL","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FIRE","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FOXR","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FRAN","CH","rear",0,4,4,2,2,2,1,0.5,0.5,0.5,0.5,0.5,7351.32,597.53,1631.89,4,4,2,2,2,1,0.5,0.5,0.5,0.5,0.5,7176.56,540.43,971.87,0,0,0,0,0,0,0,0,0,0,-174.759999999999,-57.1,-660.02 +"default:fresh_default","bcfishpass:fresh","FRCN","CH","rear",0,13,13,10,13,13,1,0.769230769230769,1,1,0.727272727272727,1,749.15,451.01,481.99,13,13,10,13,13,1,0.769230769230769,1,1,0.727272727272727,1,716.2,428.99,474.71,0,0,0,0,0,0,0,0,0,0,-32.9499999999999,-22.02,-7.28000000000003 +"default:fresh_default","bcfishpass:fresh","HARR","CH","rear",0,46,45,44,44,44,0.978260869565217,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,1148.93,329.59,385.83,46,45,44,44,44,0.978260869565217,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,1126.73,327.72,377.22,0,0,0,0,0,0,0,0,0,0,-22.2,-1.86999999999995,-8.60999999999996 +"default:fresh_default","bcfishpass:fresh","INGR","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","KISP","CH","rear",0,12,12,10,10,10,1,0.833333333333333,0.833333333333333,0.833333333333333,0.818181818181818,0.833333333333333,2841.44,862.28,1178.83,12,12,10,10,10,1,0.833333333333333,0.833333333333333,0.833333333333333,0.818181818181818,0.833333333333333,2786.73,860.45,1050.59,0,0,0,0,0,0,0,0,0,0,-54.71,-1.82999999999993,-128.24 +"default:fresh_default","bcfishpass:fresh","KLUM","CH","rear",0,19,19,14,16,16,1,0.736842105263158,0.842105263157895,0.842105263157895,0.666666666666667,0.842105263157895,1523.16,708.12,905.48,19,19,14,15,15,1,0.736842105263158,0.789473684210526,0.789473684210526,0.666666666666667,0.789473684210526,1481.08,707.93,830.68,0,0,-1,-1,0,0,-0.0526315789473684,-0.0526315789473684,0,-0.0526315789473684,-42.0800000000002,-0.190000000000055,-74.8000000000001 +"default:fresh_default","bcfishpass:fresh","LBTN","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LCHL","CH","rear",0,23,23,20,19,19,1,0.869565217391304,0.826086956521739,0.826086956521739,0.823529411764706,0.826086956521739,4358.83,468.47,1153.83,23,23,17,19,19,1,0.739130434782609,0.826086956521739,0.826086956521739,0.823529411764706,0.826086956521739,4159.73,464.81,826.81,0,-3,0,0,0,-0.130434782608696,0,0,0,0,-199.1,-3.66000000000003,-327.02 +"default:fresh_default","bcfishpass:fresh","LFRA","CH","rear",0,66,65,39,54,54,0.984848484848485,0.590909090909091,0.818181818181818,0.818181818181818,0.55,0.818181818181818,3074.38,826.28,1254.99,66,63,39,54,54,0.954545454545455,0.590909090909091,0.818181818181818,0.818181818181818,0.55,0.818181818181818,2754.05,820.43,1176.68,-2,0,0,0,-0.0303030303030303,0,0,0,0,0,-320.33,-5.85000000000002,-78.31 +"default:fresh_default","bcfishpass:fresh","LKEL","CH","rear",0,2,2,1,2,2,1,0.5,1,1,0.5,1,332.18,106.7,162.87,2,2,1,2,2,1,0.5,1,1,0.5,1,328.21,106.49,123.85,0,0,0,0,0,0,0,0,0,0,-3.97000000000003,-0.210000000000008,-39.02 +"default:fresh_default","bcfishpass:fresh","LOMI","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LPCE","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSAL","CH","rear",0,4,4,4,4,4,1,1,1,1,1,1,3029.07,317.62,1060.92,4,4,4,4,4,1,1,1,1,1,1,2968.08,312.6,617.6,0,0,0,0,0,0,0,0,0,0,-60.9900000000002,-5.01999999999998,-443.32 +"default:fresh_default","bcfishpass:fresh","LSKE","CH","rear",0,35,35,26,29,29,1,0.742857142857143,0.828571428571429,0.828571428571429,0.71875,0.828571428571429,2101.75,1052.46,1308.55,35,35,25,29,29,1,0.714285714285714,0.828571428571429,0.828571428571429,0.71875,0.828571428571429,2086.32,1049.22,1167.34,0,-1,0,0,0,-0.0285714285714286,0,0,0,0,-15.4299999999998,-3.24000000000001,-141.21 +"default:fresh_default","bcfishpass:fresh","MESI","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MFRA","CH","rear",0,2,1,0,0,0,0.5,0,0,0,0,0,277.46,100.9,121.94,2,1,0,0,0,0.5,0,0,0,0,0,231.06,96.92,104.06,0,0,0,0,0,0,0,0,0,0,-46.4,-3.98,-17.88 +"default:fresh_default","bcfishpass:fresh","MORK","CH","rear",0,32,31,24,25,25,0.96875,0.75,0.78125,0.78125,0.529411764705882,0.78125,5953.1,1577.65,2499.11,32,31,24,25,25,0.96875,0.75,0.78125,0.78125,0.529411764705882,0.78125,5705.82,1556.47,2225.04,0,0,0,0,0,0,0,0,0,0,-247.280000000001,-21.1800000000001,-274.07 +"default:fresh_default","bcfishpass:fresh","MORR","CH","rear",0,2,2,1,2,2,1,0.5,1,1,0.5,1,3341.35,646.28,1171.33,2,2,1,2,2,1,0.5,1,1,0.5,1,3328.25,644.81,880.69,0,0,0,0,0,0,0,0,0,0,-13.0999999999999,-1.47000000000003,-290.64 +"default:fresh_default","bcfishpass:fresh","MSKE","CH","rear",0,2,1,1,1,1,0.5,0.5,0.5,0.5,0,0.5,1516.21,676.83,856.12,2,1,1,1,1,0.5,0.5,0.5,0.5,0,0.5,1506.83,676.03,779.76,0,0,0,0,0,0,0,0,0,0,-9.38000000000011,-0.800000000000068,-76.36 +"default:fresh_default","bcfishpass:fresh","NARC","CH","rear",0,6,6,6,5,5,1,1,0.833333333333333,0.833333333333333,1,0.833333333333333,3563.45,506.51,1327.21,6,6,5,5,5,1,0.833333333333333,0.833333333333333,0.833333333333333,1,0.833333333333333,2335,387.57,563.65,0,-1,0,0,0,-0.166666666666667,0,0,0,0,-1228.45,-118.94,-763.56 +"default:fresh_default","bcfishpass:fresh","NATR","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","NECR","CH","rear",0,6,6,4,6,6,1,0.666666666666667,1,1,0.6,1,5608.47,516.15,1649.24,6,6,4,6,6,1,0.666666666666667,1,1,0.6,1,5489.42,515.99,1079.18,0,0,0,0,0,0,0,0,0,0,-119.05,-0.159999999999968,-570.06 +"default:fresh_default","bcfishpass:fresh","OSPK","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARA","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARS","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PCEA","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PINE","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SALR","CH","rear",0,2,2,1,1,1,1,0.5,0.5,0.5,0.5,0.5,3174.7,234.92,966.25,2,2,1,1,1,1,0.5,0.5,0.5,0.5,0.5,3134.03,206.59,442.55,0,0,0,0,0,0,0,0,0,0,-40.6699999999996,-28.33,-523.7 +"default:fresh_default","bcfishpass:fresh","SETN","CH","rear",0,85,85,85,85,85,1,1,1,1,1,1,1500.97,543.88,663.52,85,85,85,85,85,1,1,1,1,1,1,1497.15,537.97,609.35,0,0,0,0,0,0,0,0,0,0,-3.81999999999994,-5.90999999999997,-54.17 +"default:fresh_default","bcfishpass:fresh","TABR","CH","rear",0,25,24,17,18,18,0.96,0.68,0.72,0.72,0.636363636363636,0.72,2633.55,410.85,789.94,25,24,17,18,18,0.96,0.68,0.72,0.72,0.636363636363636,0.72,2566.6,410.27,642.88,0,0,0,0,0,0,0,0,0,0,-66.9500000000003,-0.580000000000041,-147.06 +"default:fresh_default","bcfishpass:fresh","TOOD","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","TWAC","CH","rear",0,7,7,7,7,7,1,1,1,1,1,1,705.9,144.23,228.3,7,7,7,7,7,1,1,1,1,1,1,689.03,144.23,173.02,0,0,0,0,0,0,0,0,0,0,-16.87,0,-55.28 +"default:fresh_default","bcfishpass:fresh","UFRA","CH","rear",0,6,6,3,3,3,1,0.5,0.5,0.5,0.25,0.5,1487.28,642.83,764.56,6,6,3,3,3,1,0.5,0.5,0.5,0.25,0.5,1243.66,632.76,726.73,0,0,0,0,0,0,0,0,0,0,-243.62,-10.07,-37.8299999999999 +"default:fresh_default","bcfishpass:fresh","UNRS","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UOMI","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UPCE","CH","rear",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","USKE","CH","rear",0,0,0,0,0,0,,,,,,,1528.86,498.83,733.99,0,0,0,0,0,,,,,,,1518.35,498.83,593.41,0,0,0,0,,,,,,,-10.51,0,-140.58 +"default:fresh_default","bcfishpass:fresh","WILL","CH","rear",0,42,42,38,39,39,1,0.904761904761905,0.928571428571429,0.928571428571429,0.666666666666667,0.928571428571429,3601.38,640.69,1364.26,42,42,38,39,39,1,0.904761904761905,0.928571428571429,0.928571428571429,0.666666666666667,0.928571428571429,3537.67,630.48,1029.73,0,0,0,0,0,0,0,0,0,0,-63.71,-10.21,-334.53 +"default:fresh_default","bcfishpass:fresh","ZYMO","CH","rear",0,5,4,0,1,1,0.8,0,0.2,0.2,0,0.2,1211.06,463.12,602.24,5,4,0,1,1,0.8,0,0.2,0.2,0,0.2,1200.73,462.91,539.94,0,0,0,0,0,0,0,0,0,0,-10.3299999999999,-0.20999999999998,-62.3 +"default:fresh_default","bcfishpass:fresh","BBAR","CH","spawn",0,0,0,0,0,0,,,,,,,275.36,160.2,169.06,0,0,0,0,0,,,,,,,269.11,160.2,167.83,0,0,0,0,,,,,,,-6.25,0,-1.22999999999999 +"default:fresh_default","bcfishpass:fresh","BULK","CH","spawn",0,16,16,16,15,15,1,1,0.9375,0.9375,,0.9375,5178.19,1264.07,2038.12,16,16,15,15,15,1,0.9375,0.9375,0.9375,,0.9375,5089.63,1260.25,1730.12,0,-1,0,0,0,-0.0625,0,0,,0,-88.5599999999995,-3.81999999999994,-308 +"default:fresh_default","bcfishpass:fresh","CARP","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","CHES","CH","spawn",0,3,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0.666666666666667,780.54,88.26,258.88,3,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0.666666666666667,750.66,88.26,149.77,0,0,0,0,0,0,0,0,0,0,-29.88,0,-109.11 +"default:fresh_default","bcfishpass:fresh","CHWK","CH","spawn",0,8,8,6,5,7,1,0.75,0.625,0.875,0.666666666666667,0.875,698.92,257.8,310.79,8,8,5,5,5,1,0.625,0.625,0.625,0.666666666666667,0.625,662.37,253.93,301.07,0,-1,0,-2,0,-0.125,0,-0.25,0,-0.25,-36.55,-3.87,-9.72000000000003 +"default:fresh_default","bcfishpass:fresh","COTR","CH","spawn",0,15,14,15,14,14,0.933333333333333,1,0.933333333333333,0.933333333333333,,0.933333333333333,4143.01,702.76,1364.58,15,14,12,12,12,0.933333333333333,0.8,0.8,0.8,,0.8,4119.15,694.8,1033.8,0,-3,-2,-2,0,-0.2,-0.133333333333333,-0.133333333333333,,-0.133333333333333,-23.8600000000006,-7.96000000000004,-330.78 +"default:fresh_default","bcfishpass:fresh","CRKD","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","DOGC","CH","spawn",0,2,2,2,2,2,1,1,1,1,,1,358.78,162,196.9,2,2,2,2,2,1,1,1,1,,1,358.45,162,180.33,0,0,0,0,0,0,0,0,,0,-0.329999999999984,0,-16.57 +"default:fresh_default","bcfishpass:fresh","FINA","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FINL","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FIRE","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FOXR","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FRAN","CH","spawn",0,4,4,4,3,4,1,1,0.75,1,,1,7351.32,597.53,1631.89,4,4,3,3,3,1,0.75,0.75,0.75,,0.75,7176.56,540.43,971.87,0,-1,0,-1,0,-0.25,0,-0.25,,-0.25,-174.759999999999,-57.1,-660.02 +"default:fresh_default","bcfishpass:fresh","FRCN","CH","spawn",0,5,5,5,3,3,1,1,0.6,0.6,,0.6,749.15,451.01,481.99,5,5,2,3,3,1,0.4,0.6,0.6,,0.6,716.2,428.99,474.71,0,-3,0,0,0,-0.6,0,0,,0,-32.9499999999999,-22.02,-7.28000000000003 +"default:fresh_default","bcfishpass:fresh","HARR","CH","spawn",0,4,4,4,3,3,1,1,0.75,0.75,,0.75,1148.93,329.59,385.83,4,4,3,3,3,1,0.75,0.75,0.75,,0.75,1126.73,327.72,377.22,0,-1,0,0,0,-0.25,0,0,,0,-22.2,-1.86999999999995,-8.60999999999996 +"default:fresh_default","bcfishpass:fresh","INGR","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","KISP","CH","spawn",0,30,30,30,25,26,1,1,0.833333333333333,0.866666666666667,,0.866666666666667,2841.44,862.28,1178.83,30,30,25,25,25,1,0.833333333333333,0.833333333333333,0.833333333333333,,0.833333333333333,2786.73,860.45,1050.59,0,-5,0,-1,0,-0.166666666666667,0,-0.0333333333333333,,-0.0333333333333333,-54.71,-1.82999999999993,-128.24 +"default:fresh_default","bcfishpass:fresh","KLUM","CH","spawn",0,20,19,20,18,19,0.95,1,0.9,0.95,,0.95,1523.16,708.12,905.48,20,19,17,18,18,0.95,0.85,0.9,0.9,,0.9,1481.08,707.93,830.68,0,-3,0,-1,0,-0.15,0,-0.0499999999999999,,-0.0499999999999999,-42.0800000000002,-0.190000000000055,-74.8000000000001 +"default:fresh_default","bcfishpass:fresh","LBTN","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LCHL","CH","spawn",0,2,2,2,2,2,1,1,1,1,,1,4358.83,468.47,1153.83,2,2,2,2,2,1,1,1,1,,1,4159.73,464.81,826.81,0,0,0,0,0,0,0,0,,0,-199.1,-3.66000000000003,-327.02 +"default:fresh_default","bcfishpass:fresh","LFRA","CH","spawn",0,10,10,10,10,10,1,1,1,1,,1,3074.38,826.28,1254.99,10,10,9,10,10,1,0.9,1,1,,1,2754.05,820.43,1176.68,0,-1,0,0,0,-0.1,0,0,,0,-320.33,-5.85000000000002,-78.31 +"default:fresh_default","bcfishpass:fresh","LKEL","CH","spawn",0,3,3,3,2,2,1,1,0.666666666666667,0.666666666666667,,0.666666666666667,332.18,106.7,162.87,3,3,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,,0.666666666666667,328.21,106.49,123.85,0,-1,0,0,0,-0.333333333333333,0,0,,0,-3.97000000000003,-0.210000000000008,-39.02 +"default:fresh_default","bcfishpass:fresh","LOMI","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LPCE","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSAL","CH","spawn",0,0,0,0,0,0,,,,,,,3029.07,317.62,1060.92,0,0,0,0,0,,,,,,,2968.08,312.6,617.6,0,0,0,0,,,,,,,-60.9900000000002,-5.01999999999998,-443.32 +"default:fresh_default","bcfishpass:fresh","LSKE","CH","spawn",0,24,23,24,22,22,0.958333333333333,1,0.916666666666667,0.916666666666667,,0.916666666666667,2101.75,1052.46,1308.55,24,23,21,22,22,0.958333333333333,0.875,0.916666666666667,0.916666666666667,,0.916666666666667,2086.32,1049.22,1167.34,0,-3,0,0,0,-0.125,0,0,,0,-15.4299999999998,-3.24000000000001,-141.21 +"default:fresh_default","bcfishpass:fresh","MESI","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MFRA","CH","spawn",0,0,0,0,0,0,,,,,,,277.46,100.9,121.94,0,0,0,0,0,,,,,,,231.06,96.92,104.06,0,0,0,0,,,,,,,-46.4,-3.98,-17.88 +"default:fresh_default","bcfishpass:fresh","MORK","CH","spawn",0,25,25,25,23,24,1,1,0.92,0.96,,0.96,5953.1,1577.65,2499.11,25,25,22,22,22,1,0.88,0.88,0.88,,0.88,5705.82,1556.47,2225.04,0,-3,-1,-2,0,-0.12,-0.04,-0.08,,-0.08,-247.280000000001,-21.1800000000001,-274.07 +"default:fresh_default","bcfishpass:fresh","MORR","CH","spawn",0,9,9,9,7,9,1,1,0.777777777777778,1,,1,3341.35,646.28,1171.33,9,9,7,7,7,1,0.777777777777778,0.777777777777778,0.777777777777778,,0.777777777777778,3328.25,644.81,880.69,0,-2,0,-2,0,-0.222222222222222,0,-0.222222222222222,,-0.222222222222222,-13.0999999999999,-1.47000000000003,-290.64 +"default:fresh_default","bcfishpass:fresh","MSKE","CH","spawn",0,4,3,4,3,3,0.75,1,0.75,0.75,,0.75,1516.21,676.83,856.12,4,3,2,2,2,0.75,0.5,0.5,0.5,,0.5,1506.83,676.03,779.76,0,-2,-1,-1,0,-0.5,-0.25,-0.25,,-0.25,-9.38000000000011,-0.800000000000068,-76.36 +"default:fresh_default","bcfishpass:fresh","NARC","CH","spawn",0,9,9,9,8,8,1,1,0.888888888888889,0.888888888888889,,0.888888888888889,3563.45,506.51,1327.21,9,9,8,8,8,1,0.888888888888889,0.888888888888889,0.888888888888889,,0.888888888888889,2335,387.57,563.65,0,-1,0,0,0,-0.111111111111111,0,0,,0,-1228.45,-118.94,-763.56 +"default:fresh_default","bcfishpass:fresh","NATR","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","NECR","CH","spawn",0,9,9,9,9,9,1,1,1,1,,1,5608.47,516.15,1649.24,9,9,9,9,9,1,1,1,1,,1,5489.42,515.99,1079.18,0,0,0,0,0,0,0,0,,0,-119.05,-0.159999999999968,-570.06 +"default:fresh_default","bcfishpass:fresh","OSPK","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARA","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARS","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PCEA","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PINE","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SALR","CH","spawn",0,4,4,4,4,4,1,1,1,1,,1,3174.7,234.92,966.25,4,4,4,4,4,1,1,1,1,,1,3134.03,206.59,442.55,0,0,0,0,0,0,0,0,,0,-40.6699999999996,-28.33,-523.7 +"default:fresh_default","bcfishpass:fresh","SETN","CH","spawn",0,17,17,16,16,16,1,0.941176470588235,0.941176470588235,0.941176470588235,0,0.941176470588235,1500.97,543.88,663.52,17,17,16,16,16,1,0.941176470588235,0.941176470588235,0.941176470588235,0,0.941176470588235,1497.15,537.97,609.35,0,0,0,0,0,0,0,0,0,0,-3.81999999999994,-5.90999999999997,-54.17 +"default:fresh_default","bcfishpass:fresh","TABR","CH","spawn",0,0,0,0,0,0,,,,,,,2633.55,410.85,789.94,0,0,0,0,0,,,,,,,2566.6,410.27,642.88,0,0,0,0,,,,,,,-66.9500000000003,-0.580000000000041,-147.06 +"default:fresh_default","bcfishpass:fresh","TOOD","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","TWAC","CH","spawn",0,0,0,0,0,0,,,,,,,705.9,144.23,228.3,0,0,0,0,0,,,,,,,689.03,144.23,173.02,0,0,0,0,,,,,,,-16.87,0,-55.28 +"default:fresh_default","bcfishpass:fresh","UFRA","CH","spawn",0,11,11,11,11,11,1,1,1,1,,1,1487.28,642.83,764.56,11,11,10,11,11,1,0.909090909090909,1,1,,1,1243.66,632.76,726.73,0,-1,0,0,0,-0.0909090909090909,0,0,,0,-243.62,-10.07,-37.8299999999999 +"default:fresh_default","bcfishpass:fresh","UNRS","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UOMI","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UPCE","CH","spawn",0,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","USKE","CH","spawn",0,0,0,0,0,0,,,,,,,1528.86,498.83,733.99,0,0,0,0,0,,,,,,,1518.35,498.83,593.41,0,0,0,0,,,,,,,-10.51,0,-140.58 +"default:fresh_default","bcfishpass:fresh","WILL","CH","spawn",0,3,3,3,2,2,1,1,0.666666666666667,0.666666666666667,,0.666666666666667,3601.38,640.69,1364.26,3,3,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,,0.666666666666667,3537.67,630.48,1029.73,0,-1,0,0,0,-0.333333333333333,0,0,,0,-63.71,-10.21,-334.53 +"default:fresh_default","bcfishpass:fresh","ZYMO","CH","spawn",0,8,7,8,7,7,0.875,1,0.875,0.875,,0.875,1211.06,463.12,602.24,8,7,7,7,7,0.875,0.875,0.875,0.875,,0.875,1200.73,462.91,539.94,0,-1,0,0,0,-0.125,0,0,,0,-10.3299999999999,-0.20999999999998,-62.3 +"default:fresh_default","bcfishpass:fresh","BBAR","BT","any",100,16,16,10,14,14,1,0.625,0.875,0.875,0.625,0.875,1761.57,329.41,560.67,16,16,10,14,14,1,0.625,0.875,0.875,0.625,0.875,1262.45,296.02,478.21,0,0,0,0,0,0,0,0,0,0,-499.12,-33.39,-82.46 +"default:fresh_default","bcfishpass:fresh","BULK","BT","any",100,468,464,239,338,338,0.991452991452991,0.510683760683761,0.722222222222222,0.722222222222222,0.510683760683761,0.722222222222222,7713.98,1852.11,3012.7,468,443,230,329,329,0.946581196581197,0.491452991452991,0.702991452991453,0.702991452991453,0.491452991452991,0.702991452991453,7676.5,1866.31,3021.51,-21,-9,-9,-9,-0.0448717948717949,-0.0192307692307692,-0.0192307692307693,-0.0192307692307693,-0.0192307692307692,-0.0192307692307693,-37.4799999999996,14.2,8.8100000000004 +"default:fresh_default","bcfishpass:fresh","CARP","BT","any",100,6,6,4,4,6,1,0.666666666666667,0.666666666666667,1,0.666666666666667,1,4420.57,502.37,1026.27,6,6,4,6,6,1,0.666666666666667,1,1,0.666666666666667,1,4296.5,497.07,1072.63,0,0,2,0,0,0,0.333333333333333,0,0,0,-124.07,-5.30000000000001,46.3600000000001 +"default:fresh_default","bcfishpass:fresh","CHES","BT","any",100,3,3,3,3,3,1,1,1,1,1,1,2904.74,376.85,796.72,3,1,1,1,1,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,901.21,145.45,336.47,-2,-2,-2,-2,-0.666666666666667,-0.666666666666667,-0.666666666666667,-0.666666666666667,-0.666666666666667,-0.666666666666667,-2003.53,-231.4,-460.25 +"default:fresh_default","bcfishpass:fresh","CHWK","BT","any",100,62,62,41,52,56,1,0.661290322580645,0.838709677419355,0.903225806451613,0.661290322580645,0.903225806451613,793.94,310.02,353.48,62,62,41,57,57,1,0.661290322580645,0.919354838709677,0.919354838709677,0.661290322580645,0.919354838709677,822.24,316.56,418.39,0,0,5,1,0,0,0.0806451612903225,0.0161290322580645,0,0.0161290322580645,28.3,6.54000000000002,64.91 +"default:fresh_default","bcfishpass:fresh","COTR","BT","any",100,85,84,47,69,69,0.988235294117647,0.552941176470588,0.811764705882353,0.811764705882353,0.552941176470588,0.811764705882353,6856.99,1480.88,2433.36,85,84,48,69,69,0.988235294117647,0.564705882352941,0.811764705882353,0.811764705882353,0.564705882352941,0.811764705882353,6878.95,1490.06,2340.71,0,1,0,0,0,0.0117647058823529,0,0,0.0117647058823529,0,21.96,9.17999999999984,-92.6500000000001 +"default:fresh_default","bcfishpass:fresh","CRKD","BT","any",100,4,4,4,4,4,1,1,1,1,1,1,5115.69,695.8,1448.76,4,4,4,4,4,1,1,1,1,1,1,5051.55,695.63,1448.44,0,0,0,0,0,0,0,0,0,0,-64.1399999999994,-0.169999999999959,-0.319999999999936 +"default:fresh_default","bcfishpass:fresh","DOGC","BT","any",100,17,17,13,17,17,1,0.764705882352941,1,1,0.764705882352941,1,1260.46,286.17,502.72,17,17,13,17,17,1,0.764705882352941,1,1,0.764705882352941,1,1251.04,288.83,481.5,0,0,0,0,0,0,0,0,0,0,-9.42000000000007,2.65999999999997,-21.22 +"default:fresh_default","bcfishpass:fresh","FINA","BT","any",100,107,107,96,99,105,1,0.897196261682243,0.925233644859813,0.981308411214953,0.897196261682243,0.981308411214953,7889.87,1325.37,2218.78,107,107,96,105,105,1,0.897196261682243,0.981308411214953,0.981308411214953,0.897196261682243,0.981308411214953,6084.04,1277.62,2845.63,0,0,6,0,0,0,0.0560747663551402,0,0,0,-1805.83,-47.75,626.85 +"default:fresh_default","bcfishpass:fresh","FINL","BT","any",100,32,32,25,29,29,1,0.78125,0.90625,0.90625,0.78125,0.90625,4515.86,1365.64,2107.58,32,32,25,29,29,1,0.78125,0.90625,0.90625,0.78125,0.90625,4480.99,1365.64,2085.7,0,0,0,0,0,0,0,0,0,0,-34.8699999999999,0,-21.8800000000001 +"default:fresh_default","bcfishpass:fresh","FIRE","BT","any",100,172,172,135,155,157,1,0.784883720930233,0.901162790697674,0.912790697674419,0.784883720930233,0.912790697674419,6663.44,1012.79,1911.07,172,172,135,155,155,1,0.784883720930233,0.901162790697674,0.901162790697674,0.784883720930233,0.901162790697674,6589.52,1012.26,2016.75,0,0,0,-2,0,0,0,-0.0116279069767441,0,-0.0116279069767441,-73.9199999999992,-0.529999999999973,105.68 +"default:fresh_default","bcfishpass:fresh","FOXR","BT","any",100,33,33,26,31,31,1,0.787878787878788,0.93939393939394,0.93939393939394,0.787878787878788,0.93939393939394,3665.56,928.18,1525.02,33,33,26,31,31,1,0.787878787878788,0.93939393939394,0.93939393939394,0.787878787878788,0.93939393939394,3587.54,922.1,1511.59,0,0,0,0,0,0,0,0,0,0,-78.02,-6.07999999999993,-13.4300000000001 +"default:fresh_default","bcfishpass:fresh","FRAN","BT","any",100,102,102,55,74,74,1,0.53921568627451,0.725490196078431,0.725490196078431,0.53921568627451,0.725490196078431,9078.53,1120.86,2355.24,102,100,54,71,71,0.980392156862745,0.529411764705882,0.696078431372549,0.696078431372549,0.529411764705882,0.696078431372549,9265.93,1150.92,2834.02,-2,-1,-3,-3,-0.0196078431372549,-0.00980392156862742,-0.0294117647058824,-0.0294117647058824,-0.00980392156862742,-0.0294117647058824,187.4,30.0600000000002,478.78 +"default:fresh_default","bcfishpass:fresh","FRCN","BT","any",100,95,95,54,91,92,1,0.568421052631579,0.957894736842105,0.968421052631579,0.568421052631579,0.968421052631579,1504.38,663.33,889.13,95,94,54,91,91,0.989473684210526,0.568421052631579,0.957894736842105,0.957894736842105,0.568421052631579,0.957894736842105,1502.48,691.1,964.06,-1,0,0,-1,-0.0105263157894737,0,0,-0.0105263157894737,0,-0.0105263157894737,-1.90000000000009,27.77,74.93 +"default:fresh_default","bcfishpass:fresh","HARR","BT","any",100,43,42,24,35,38,0.976744186046512,0.558139534883721,0.813953488372093,0.883720930232558,0.558139534883721,0.883720930232558,1619.34,470.27,588.62,43,38,21,35,35,0.883720930232558,0.488372093023256,0.813953488372093,0.813953488372093,0.488372093023256,0.813953488372093,1561.45,468.9,827.82,-4,-3,0,-3,-0.0930232558139534,-0.0697674418604651,0,-0.0697674418604651,-0.0697674418604651,-0.0697674418604651,-57.8899999999999,-1.37,239.2 +"default:fresh_default","bcfishpass:fresh","INGR","BT","any",100,27,27,23,26,26,1,0.851851851851852,0.962962962962963,0.962962962962963,0.851851851851852,0.962962962962963,3925.58,1111.41,1736.58,27,27,23,26,26,1,0.851851851851852,0.962962962962963,0.962962962962963,0.851851851851852,0.962962962962963,3907.56,1111.41,1783.68,0,0,0,0,0,0,0,0,0,0,-18.02,0,47.1000000000001 +"default:fresh_default","bcfishpass:fresh","KISP","BT","any",100,195,192,128,162,165,0.984615384615385,0.656410256410256,0.830769230769231,0.846153846153846,0.656410256410256,0.846153846153846,4529.14,1258.71,1894.95,195,187,125,162,162,0.958974358974359,0.641025641025641,0.830769230769231,0.830769230769231,0.641025641025641,0.830769230769231,4475.39,1261.15,1962.71,-5,-3,0,-3,-0.0256410256410257,-0.0153846153846153,0,-0.0153846153846153,-0.0153846153846153,-0.0153846153846153,-53.75,2.44000000000005,67.76 +"default:fresh_default","bcfishpass:fresh","KLUM","BT","any",100,314,302,203,248,248,0.961783439490446,0.646496815286624,0.789808917197452,0.789808917197452,0.646496815286624,0.789808917197452,2173.93,929.96,1229.04,314,275,191,235,235,0.875796178343949,0.60828025477707,0.748407643312102,0.748407643312102,0.60828025477707,0.748407643312102,1930.45,894.45,1189.16,-27,-12,-13,-13,-0.0859872611464968,-0.0382165605095541,-0.0414012738853504,-0.0414012738853504,-0.0382165605095541,-0.0414012738853504,-243.48,-35.51,-39.8799999999999 +"default:fresh_default","bcfishpass:fresh","LBTN","BT","any",100,2,2,2,2,2,1,1,1,1,1,1,9061.71,2027.4,2961.53,2,2,2,2,2,1,1,1,1,1,1,8647.79,2026.94,2189.51,0,0,0,0,0,0,0,0,0,0,-413.919999999998,-0.460000000000036,-772.02 +"default:fresh_default","bcfishpass:fresh","LCHL","BT","any",100,6,6,6,6,6,1,1,1,1,1,1,5533.57,908.41,1581.55,6,6,6,6,6,1,1,1,1,1,1,5236.61,896.14,1550.64,0,0,0,0,0,0,0,0,0,0,-296.96,-12.27,-30.9099999999999 +"default:fresh_default","bcfishpass:fresh","LFRA","BT","any",100,78,78,60,66,70,1,0.769230769230769,0.846153846153846,0.897435897435897,0.769230769230769,0.897435897435897,3569.06,1241.71,1516.52,78,78,61,70,70,1,0.782051282051282,0.897435897435897,0.897435897435897,0.782051282051282,0.897435897435897,3415.8,1284.59,1805.62,0,1,4,0,0,0.0128205128205128,0.0512820512820513,0,0.0128205128205128,0,-153.26,42.8799999999999,289.1 +"default:fresh_default","bcfishpass:fresh","LKEL","BT","any",100,63,63,37,48,50,1,0.587301587301587,0.761904761904762,0.793650793650794,0.587301587301587,0.793650793650794,405.16,144.67,218.77,63,63,37,49,49,1,0.587301587301587,0.777777777777778,0.777777777777778,0.587301587301587,0.777777777777778,401.02,144.74,222.78,0,0,1,-1,0,0,0.0158730158730159,-0.0158730158730158,0,-0.0158730158730158,-4.14000000000004,0.0700000000000216,4.00999999999999 +"default:fresh_default","bcfishpass:fresh","LOMI","BT","any",100,27,26,20,25,25,0.962962962962963,0.740740740740741,0.925925925925926,0.925925925925926,0.740740740740741,0.925925925925926,3639.43,1004.03,1513.07,27,26,20,25,25,0.962962962962963,0.740740740740741,0.925925925925926,0.925925925925926,0.740740740740741,0.925925925925926,3436.23,967.82,1517.42,0,0,0,0,0,0,0,0,0,0,-203.2,-36.2099999999999,4.35000000000014 +"default:fresh_default","bcfishpass:fresh","LPCE","BT","any",100,55,53,42,42,42,0.963636363636364,0.763636363636364,0.763636363636364,0.763636363636364,0.763636363636364,0.763636363636364,3571.54,1000.37,1386.86,55,53,42,40,40,0.963636363636364,0.763636363636364,0.727272727272727,0.727272727272727,0.763636363636364,0.727272727272727,3130.17,918.71,1261.4,0,0,-2,-2,0,0,-0.0363636363636364,-0.0363636363636364,0,-0.0363636363636364,-441.37,-81.66,-125.46 +"default:fresh_default","bcfishpass:fresh","LSAL","BT","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSKE","BT","any",100,230,227,177,195,195,0.98695652173913,0.769565217391304,0.847826086956522,0.847826086956522,0.769565217391304,0.847826086956522,3075.25,1326.45,1709.47,230,216,171,187,187,0.939130434782609,0.743478260869565,0.81304347826087,0.81304347826087,0.743478260869565,0.81304347826087,2884.31,1315.64,1751.5,-11,-6,-8,-8,-0.0478260869565217,-0.0260869565217391,-0.0347826086956522,-0.0347826086956522,-0.0260869565217391,-0.0347826086956522,-190.94,-10.8099999999999,42.03 +"default:fresh_default","bcfishpass:fresh","MESI","BT","any",100,64,64,51,60,60,1,0.796875,0.9375,0.9375,0.796875,0.9375,2825.32,691.09,1077.07,64,64,51,60,60,1,0.796875,0.9375,0.9375,0.796875,0.9375,2767.09,685.99,1126.99,0,0,0,0,0,0,0,0,0,0,-58.23,-5.10000000000002,49.9200000000001 +"default:fresh_default","bcfishpass:fresh","MFRA","BT","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MORK","BT","any",100,79,79,70,72,73,1,0.886075949367089,0.911392405063291,0.924050632911392,0.886075949367089,0.924050632911392,7202.59,2148.8,3077.39,79,79,70,73,73,1,0.886075949367089,0.924050632911392,0.924050632911392,0.886075949367089,0.924050632911392,8075.86,2434.23,3397.59,0,0,1,0,0,0,0.0126582278481013,0,0,0,873.27,285.43,320.2 +"default:fresh_default","bcfishpass:fresh","MORR","BT","any",100,357,357,162,260,267,1,0.453781512605042,0.728291316526611,0.747899159663866,0.453781512605042,0.747899159663866,4865.96,960.8,1685.2,357,349,159,260,260,0.977591036414566,0.445378151260504,0.728291316526611,0.728291316526611,0.445378151260504,0.728291316526611,4765.64,952.61,1829.89,-8,-3,0,-7,-0.0224089635854342,-0.00840336134453779,0,-0.0196078431372549,-0.00840336134453779,-0.0196078431372549,-100.32,-8.18999999999994,144.69 +"default:fresh_default","bcfishpass:fresh","MSKE","BT","any",100,69,68,46,52,52,0.985507246376812,0.666666666666667,0.753623188405797,0.753623188405797,0.666666666666667,0.753623188405797,2691.58,922.19,1383.97,69,62,46,52,52,0.898550724637681,0.666666666666667,0.753623188405797,0.753623188405797,0.666666666666667,0.753623188405797,2667.19,921.62,1383.52,-6,0,0,0,-0.0869565217391305,0,0,0,0,0,-24.3899999999999,-0.57000000000005,-0.450000000000045 +"default:fresh_default","bcfishpass:fresh","NARC","BT","any",100,7,7,7,7,7,1,1,1,1,1,1,4336.98,873.49,1703.68,7,7,7,7,7,1,1,1,1,1,1,2994.54,633.18,1162.09,0,0,0,0,0,0,0,0,0,0,-1342.44,-240.31,-541.59 +"default:fresh_default","bcfishpass:fresh","NATR","BT","any",100,57,57,39,47,48,1,0.68421052631579,0.824561403508772,0.842105263157895,0.68421052631579,0.842105263157895,9819.51,1803.66,3496.13,57,53,35,44,44,0.929824561403509,0.614035087719298,0.771929824561403,0.771929824561403,0.614035087719298,0.771929824561403,8011.09,1516.19,3071.31,-4,-4,-3,-4,-0.0701754385964912,-0.0701754385964912,-0.0526315789473685,-0.0701754385964912,-0.0701754385964912,-0.0701754385964912,-1808.42,-287.47,-424.82 +"default:fresh_default","bcfishpass:fresh","NECR","BT","any",100,12,12,12,12,12,1,1,1,1,1,1,6329.74,991.14,1943.82,12,12,12,12,12,1,1,1,1,1,1,6156.77,989.82,1875.61,0,0,0,0,0,0,0,0,0,0,-172.969999999999,-1.31999999999994,-68.21 +"default:fresh_default","bcfishpass:fresh","OSPK","BT","any",100,12,12,10,12,12,1,0.833333333333333,1,1,0.833333333333333,1,1882.44,594.62,877.22,12,12,10,12,12,1,0.833333333333333,1,1,0.833333333333333,1,1881.19,594.62,866.44,0,0,0,0,0,0,0,0,0,0,-1.25,0,-10.78 +"default:fresh_default","bcfishpass:fresh","PARA","BT","any",100,77,77,62,68,70,1,0.805194805194805,0.883116883116883,0.909090909090909,0.805194805194805,0.909090909090909,4400.24,720.29,1330.46,77,77,62,70,70,1,0.805194805194805,0.909090909090909,0.909090909090909,0.805194805194805,0.909090909090909,4256.87,718.23,1769.82,0,0,2,0,0,0,0.025974025974026,0,0,0,-143.37,-2.05999999999995,439.36 +"default:fresh_default","bcfishpass:fresh","PARS","BT","any",100,281,281,233,262,262,1,0.829181494661922,0.932384341637011,0.932384341637011,0.829181494661922,0.932384341637011,6883.03,1685.38,2635.01,281,280,233,262,262,0.99644128113879,0.829181494661922,0.932384341637011,0.932384341637011,0.829181494661922,0.932384341637011,6822.47,1683.36,2575.08,-1,0,0,0,-0.00355871886120995,0,0,0,0,0,-60.5599999999995,-2.02000000000021,-59.9300000000003 +"default:fresh_default","bcfishpass:fresh","PCEA","BT","any",100,176,176,140,154,161,1,0.795454545454545,0.875,0.914772727272727,0.795454545454545,0.914772727272727,7091.82,921.92,1489.72,176,176,141,163,163,1,0.801136363636364,0.926136363636364,0.926136363636364,0.801136363636364,0.926136363636364,5002.96,925.72,2023.48,0,1,9,2,0,0.00568181818181823,0.0511363636363636,0.0113636363636364,0.00568181818181823,0.0113636363636364,-2088.86,3.80000000000007,533.76 +"default:fresh_default","bcfishpass:fresh","PINE","BT","any",100,249,249,227,241,241,1,0.911646586345382,0.967871485943775,0.967871485943775,0.911646586345382,0.967871485943775,5539.06,1645.08,2409.65,249,249,227,242,242,1,0.911646586345382,0.971887550200803,0.971887550200803,0.911646586345382,0.971887550200803,5425.97,1643.51,2376.18,0,0,1,1,0,0,0.00401606425702805,0.00401606425702805,0,0.00401606425702805,-113.09,-1.56999999999994,-33.4700000000003 +"default:fresh_default","bcfishpass:fresh","SALR","BT","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SETN","BT","any",100,180,177,122,149,154,0.983333333333333,0.677777777777778,0.827777777777778,0.855555555555556,0.677777777777778,0.855555555555556,3258.86,851.7,1239.78,180,175,122,155,155,0.972222222222222,0.677777777777778,0.861111111111111,0.861111111111111,0.677777777777778,0.861111111111111,2844.64,816.05,1339.7,-2,0,6,1,-0.0111111111111111,0,0.0333333333333334,0.00555555555555565,0,0.00555555555555565,-414.22,-35.6500000000001,99.9200000000001 +"default:fresh_default","bcfishpass:fresh","TABR","BT","any",100,10,10,4,4,4,1,0.4,0.4,0.4,0.4,0.4,3402.26,678.31,1061,10,10,4,4,4,1,0.4,0.4,0.4,0.4,0.4,3305.18,677.05,1035.42,0,0,0,0,0,0,0,0,0,0,-97.0800000000004,-1.25999999999999,-25.5799999999999 +"default:fresh_default","bcfishpass:fresh","TOOD","BT","any",100,36,36,31,35,35,1,0.861111111111111,0.972222222222222,0.972222222222222,0.861111111111111,0.972222222222222,4697.77,1131.97,1815.93,36,36,31,35,35,1,0.861111111111111,0.972222222222222,0.972222222222222,0.861111111111111,0.972222222222222,4466.1,1118.51,1850.91,0,0,0,0,0,0,0,0,0,0,-231.67,-13.46,34.98 +"default:fresh_default","bcfishpass:fresh","TWAC","BT","any",100,2,2,2,2,2,1,1,1,1,1,1,1060.41,227.23,402.55,2,2,2,2,2,1,1,1,1,1,1,1002.12,226.3,393.93,0,0,0,0,0,0,0,0,0,0,-58.2900000000001,-0.929999999999978,-8.62 +"default:fresh_default","bcfishpass:fresh","UFRA","BT","any",100,87,87,46,58,58,1,0.528735632183908,0.666666666666667,0.666666666666667,0.528735632183908,0.666666666666667,2752.86,948.12,1217.11,87,87,47,59,59,1,0.540229885057471,0.67816091954023,0.67816091954023,0.540229885057471,0.67816091954023,2107.1,952.9,1239.84,0,1,1,1,0,0.0114942528735632,0.0114942528735632,0.0114942528735632,0.0114942528735632,0.0114942528735632,-645.76,4.77999999999997,22.73 +"default:fresh_default","bcfishpass:fresh","UNRS","BT","any",100,2,2,2,2,2,1,1,1,1,1,1,7487.48,645.96,1280.54,2,2,2,2,2,1,1,1,1,1,1,7431.77,644.82,1864.53,0,0,0,0,0,0,0,0,0,0,-55.7099999999991,-1.13999999999999,583.99 +"default:fresh_default","bcfishpass:fresh","UOMI","BT","any",100,82,82,46,53,53,1,0.560975609756098,0.646341463414634,0.646341463414634,0.560975609756098,0.646341463414634,3764.77,911.83,1451.62,82,82,46,54,54,1,0.560975609756098,0.658536585365854,0.658536585365854,0.560975609756098,0.658536585365854,3703.16,907.88,1459.1,0,0,1,1,0,0,0.0121951219512195,0.0121951219512195,0,0.0121951219512195,-61.6100000000001,-3.95000000000005,7.48000000000002 +"default:fresh_default","bcfishpass:fresh","UPCE","BT","any",100,153,152,138,138,138,0.993464052287582,0.901960784313726,0.901960784313726,0.901960784313726,0.901960784313726,0.901960784313726,5689.87,1682.32,2340.3,153,152,138,139,139,0.993464052287582,0.901960784313726,0.908496732026144,0.908496732026144,0.901960784313726,0.908496732026144,5261.16,1657.29,2320.94,0,0,1,1,0,0,0.00653594771241828,0.00653594771241828,0,0.00653594771241828,-428.71,-25.03,-19.3600000000001 +"default:fresh_default","bcfishpass:fresh","USKE","BT","any",100,32,32,29,31,31,1,0.90625,0.96875,0.96875,0.90625,0.96875,2969.07,739.68,1264.94,32,32,30,31,31,1,0.9375,0.96875,0.96875,0.9375,0.96875,3451.92,878.03,1438.52,0,1,0,0,0,0.03125,0,0,0.03125,0,482.85,138.35,173.58 +"default:fresh_default","bcfishpass:fresh","WILL","BT","any",100,54,54,41,51,51,1,0.759259259259259,0.944444444444444,0.944444444444444,0.759259259259259,0.944444444444444,4562.41,1055.35,1720.76,54,54,41,50,50,1,0.759259259259259,0.925925925925926,0.925925925925926,0.759259259259259,0.925925925925926,4515.45,1052.18,1690.35,0,0,-1,-1,0,0,-0.0185185185185185,-0.0185185185185185,0,-0.0185185185185185,-46.96,-3.16999999999985,-30.4100000000001 +"default:fresh_default","bcfishpass:fresh","ZYMO","BT","any",100,280,276,135,193,200,0.985714285714286,0.482142857142857,0.689285714285714,0.714285714285714,0.482142857142857,0.714285714285714,2058.68,594.73,897.89,280,244,128,188,188,0.871428571428571,0.457142857142857,0.671428571428571,0.671428571428571,0.457142857142857,0.671428571428571,1840.06,575.42,863.2,-32,-7,-5,-12,-0.114285714285714,-0.025,-0.0178571428571429,-0.0428571428571429,-0.025,-0.0428571428571429,-218.62,-19.3100000000001,-34.6899999999999 +"default:fresh_default","bcfishpass:fresh","BBAR","BT","rear",100,0,0,0,0,0,,,,,,,1761.57,329.41,560.67,0,0,0,0,0,,,,,,,1262.45,296.02,478.21,0,0,0,0,,,,,,,-499.12,-33.39,-82.46 +"default:fresh_default","bcfishpass:fresh","BULK","BT","rear",100,255,252,95,159,159,0.988235294117647,0.372549019607843,0.623529411764706,0.623529411764706,0.372549019607843,0.623529411764706,7713.98,1852.11,3012.7,255,232,86,151,151,0.909803921568627,0.337254901960784,0.592156862745098,0.592156862745098,0.337254901960784,0.592156862745098,7676.5,1866.31,3021.51,-20,-9,-8,-8,-0.0784313725490197,-0.0352941176470588,-0.0313725490196078,-0.0313725490196078,-0.0352941176470588,-0.0313725490196078,-37.4799999999996,14.2,8.8100000000004 +"default:fresh_default","bcfishpass:fresh","CARP","BT","rear",100,0,0,0,0,0,,,,,,,4420.57,502.37,1026.27,0,0,0,0,0,,,,,,,4296.5,497.07,1072.63,0,0,0,0,,,,,,,-124.07,-5.30000000000001,46.3600000000001 +"default:fresh_default","bcfishpass:fresh","CHES","BT","rear",100,0,0,0,0,0,,,,,,,2904.74,376.85,796.72,0,0,0,0,0,,,,,,,901.21,145.45,336.47,0,0,0,0,,,,,,,-2003.53,-231.4,-460.25 +"default:fresh_default","bcfishpass:fresh","CHWK","BT","rear",100,5,5,4,4,4,1,0.8,0.8,0.8,0.8,0.8,793.94,310.02,353.48,5,5,4,4,4,1,0.8,0.8,0.8,0.8,0.8,822.24,316.56,418.39,0,0,0,0,0,0,0,0,0,0,28.3,6.54000000000002,64.91 +"default:fresh_default","bcfishpass:fresh","COTR","BT","rear",100,0,0,0,0,0,,,,,,,6856.99,1480.88,2433.36,0,0,0,0,0,,,,,,,6878.95,1490.06,2340.71,0,0,0,0,,,,,,,21.96,9.17999999999984,-92.6500000000001 +"default:fresh_default","bcfishpass:fresh","CRKD","BT","rear",100,0,0,0,0,0,,,,,,,5115.69,695.8,1448.76,0,0,0,0,0,,,,,,,5051.55,695.63,1448.44,0,0,0,0,,,,,,,-64.1399999999994,-0.169999999999959,-0.319999999999936 +"default:fresh_default","bcfishpass:fresh","DOGC","BT","rear",100,0,0,0,0,0,,,,,,,1260.46,286.17,502.72,0,0,0,0,0,,,,,,,1251.04,288.83,481.5,0,0,0,0,,,,,,,-9.42000000000007,2.65999999999997,-21.22 +"default:fresh_default","bcfishpass:fresh","FINA","BT","rear",100,0,0,0,0,0,,,,,,,7889.87,1325.37,2218.78,0,0,0,0,0,,,,,,,6084.04,1277.62,2845.63,0,0,0,0,,,,,,,-1805.83,-47.75,626.85 +"default:fresh_default","bcfishpass:fresh","FINL","BT","rear",100,0,0,0,0,0,,,,,,,4515.86,1365.64,2107.58,0,0,0,0,0,,,,,,,4480.99,1365.64,2085.7,0,0,0,0,,,,,,,-34.8699999999999,0,-21.8800000000001 +"default:fresh_default","bcfishpass:fresh","FIRE","BT","rear",100,66,66,57,62,62,1,0.863636363636364,0.93939393939394,0.93939393939394,0.863636363636364,0.93939393939394,6663.44,1012.79,1911.07,66,66,57,62,62,1,0.863636363636364,0.93939393939394,0.93939393939394,0.863636363636364,0.93939393939394,6589.52,1012.26,2016.75,0,0,0,0,0,0,0,0,0,0,-73.9199999999992,-0.529999999999973,105.68 +"default:fresh_default","bcfishpass:fresh","FOXR","BT","rear",100,0,0,0,0,0,,,,,,,3665.56,928.18,1525.02,0,0,0,0,0,,,,,,,3587.54,922.1,1511.59,0,0,0,0,,,,,,,-78.02,-6.07999999999993,-13.4300000000001 +"default:fresh_default","bcfishpass:fresh","FRAN","BT","rear",100,90,90,45,63,63,1,0.5,0.7,0.7,0.5,0.7,9078.53,1120.86,2355.24,90,88,44,60,60,0.977777777777778,0.488888888888889,0.666666666666667,0.666666666666667,0.488888888888889,0.666666666666667,9265.93,1150.92,2834.02,-2,-1,-3,-3,-0.0222222222222223,-0.0111111111111111,-0.0333333333333333,-0.0333333333333333,-0.0111111111111111,-0.0333333333333333,187.4,30.0600000000002,478.78 +"default:fresh_default","bcfishpass:fresh","FRCN","BT","rear",100,5,5,2,5,5,1,0.4,1,1,0.4,1,1504.38,663.33,889.13,5,5,2,5,5,1,0.4,1,1,0.4,1,1502.48,691.1,964.06,0,0,0,0,0,0,0,0,0,0,-1.90000000000009,27.77,74.93 +"default:fresh_default","bcfishpass:fresh","HARR","BT","rear",100,7,7,4,7,7,1,0.571428571428571,1,1,0.571428571428571,1,1619.34,470.27,588.62,7,7,4,7,7,1,0.571428571428571,1,1,0.571428571428571,1,1561.45,468.9,827.82,0,0,0,0,0,0,0,0,0,0,-57.8899999999999,-1.37,239.2 +"default:fresh_default","bcfishpass:fresh","INGR","BT","rear",100,0,0,0,0,0,,,,,,,3925.58,1111.41,1736.58,0,0,0,0,0,,,,,,,3907.56,1111.41,1783.68,0,0,0,0,,,,,,,-18.02,0,47.1000000000001 +"default:fresh_default","bcfishpass:fresh","KISP","BT","rear",100,56,53,28,38,38,0.946428571428571,0.5,0.678571428571429,0.678571428571429,0.5,0.678571428571429,4529.14,1258.71,1894.95,56,51,27,37,37,0.910714285714286,0.482142857142857,0.660714285714286,0.660714285714286,0.482142857142857,0.660714285714286,4475.39,1261.15,1962.71,-2,-1,-1,-1,-0.0357142857142857,-0.0178571428571428,-0.0178571428571429,-0.0178571428571429,-0.0178571428571428,-0.0178571428571429,-53.75,2.44000000000005,67.76 +"default:fresh_default","bcfishpass:fresh","KLUM","BT","rear",100,141,137,72,98,98,0.971631205673759,0.51063829787234,0.695035460992908,0.695035460992908,0.51063829787234,0.695035460992908,2173.93,929.96,1229.04,141,121,66,92,92,0.858156028368794,0.468085106382979,0.652482269503546,0.652482269503546,0.468085106382979,0.652482269503546,1930.45,894.45,1189.16,-16,-6,-6,-6,-0.113475177304964,-0.0425531914893617,-0.0425531914893617,-0.0425531914893617,-0.0425531914893617,-0.0425531914893617,-243.48,-35.51,-39.8799999999999 +"default:fresh_default","bcfishpass:fresh","LBTN","BT","rear",100,0,0,0,0,0,,,,,,,9061.71,2027.4,2961.53,0,0,0,0,0,,,,,,,8647.79,2026.94,2189.51,0,0,0,0,,,,,,,-413.919999999998,-0.460000000000036,-772.02 +"default:fresh_default","bcfishpass:fresh","LCHL","BT","rear",100,0,0,0,0,0,,,,,,,5533.57,908.41,1581.55,0,0,0,0,0,,,,,,,5236.61,896.14,1550.64,0,0,0,0,,,,,,,-296.96,-12.27,-30.9099999999999 +"default:fresh_default","bcfishpass:fresh","LFRA","BT","rear",100,2,2,2,2,2,1,1,1,1,1,1,3569.06,1241.71,1516.52,2,2,2,2,2,1,1,1,1,1,1,3415.8,1284.59,1805.62,0,0,0,0,0,0,0,0,0,0,-153.26,42.8799999999999,289.1 +"default:fresh_default","bcfishpass:fresh","LKEL","BT","rear",100,26,26,12,18,18,1,0.461538461538462,0.692307692307692,0.692307692307692,0.461538461538462,0.692307692307692,405.16,144.67,218.77,26,26,12,17,17,1,0.461538461538462,0.653846153846154,0.653846153846154,0.461538461538462,0.653846153846154,401.02,144.74,222.78,0,0,-1,-1,0,0,-0.0384615384615384,-0.0384615384615384,0,-0.0384615384615384,-4.14000000000004,0.0700000000000216,4.00999999999999 +"default:fresh_default","bcfishpass:fresh","LOMI","BT","rear",100,0,0,0,0,0,,,,,,,3639.43,1004.03,1513.07,0,0,0,0,0,,,,,,,3436.23,967.82,1517.42,0,0,0,0,,,,,,,-203.2,-36.2099999999999,4.35000000000014 +"default:fresh_default","bcfishpass:fresh","LPCE","BT","rear",100,0,0,0,0,0,,,,,,,3571.54,1000.37,1386.86,0,0,0,0,0,,,,,,,3130.17,918.71,1261.4,0,0,0,0,,,,,,,-441.37,-81.66,-125.46 +"default:fresh_default","bcfishpass:fresh","LSAL","BT","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSKE","BT","rear",100,111,109,74,87,87,0.981981981981982,0.666666666666667,0.783783783783784,0.783783783783784,0.666666666666667,0.783783783783784,3075.25,1326.45,1709.47,111,102,70,82,82,0.918918918918919,0.630630630630631,0.738738738738739,0.738738738738739,0.630630630630631,0.738738738738739,2884.31,1315.64,1751.5,-7,-4,-5,-5,-0.063063063063063,-0.036036036036036,-0.045045045045045,-0.045045045045045,-0.036036036036036,-0.045045045045045,-190.94,-10.8099999999999,42.03 +"default:fresh_default","bcfishpass:fresh","MESI","BT","rear",100,0,0,0,0,0,,,,,,,2825.32,691.09,1077.07,0,0,0,0,0,,,,,,,2767.09,685.99,1126.99,0,0,0,0,,,,,,,-58.23,-5.10000000000002,49.9200000000001 +"default:fresh_default","bcfishpass:fresh","MFRA","BT","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MORK","BT","rear",100,0,0,0,0,0,,,,,,,7202.59,2148.8,3077.39,0,0,0,0,0,,,,,,,8075.86,2434.23,3397.59,0,0,0,0,,,,,,,873.27,285.43,320.2 +"default:fresh_default","bcfishpass:fresh","MORR","BT","rear",100,106,106,32,64,66,1,0.30188679245283,0.60377358490566,0.622641509433962,0.30188679245283,0.622641509433962,4865.96,960.8,1685.2,106,102,31,64,64,0.962264150943396,0.292452830188679,0.60377358490566,0.60377358490566,0.292452830188679,0.60377358490566,4765.64,952.61,1829.89,-4,-1,0,-2,-0.0377358490566038,-0.00943396226415094,0,-0.0188679245283019,-0.00943396226415094,-0.0188679245283019,-100.32,-8.18999999999994,144.69 +"default:fresh_default","bcfishpass:fresh","MSKE","BT","rear",100,5,4,0,0,0,0.8,0,0,0,0,0,2691.58,922.19,1383.97,5,3,0,0,0,0.6,0,0,0,0,0,2667.19,921.62,1383.52,-1,0,0,0,-0.2,0,0,0,0,0,-24.3899999999999,-0.57000000000005,-0.450000000000045 +"default:fresh_default","bcfishpass:fresh","NARC","BT","rear",100,0,0,0,0,0,,,,,,,4336.98,873.49,1703.68,0,0,0,0,0,,,,,,,2994.54,633.18,1162.09,0,0,0,0,,,,,,,-1342.44,-240.31,-541.59 +"default:fresh_default","bcfishpass:fresh","NATR","BT","rear",100,0,0,0,0,0,,,,,,,9819.51,1803.66,3496.13,0,0,0,0,0,,,,,,,8011.09,1516.19,3071.31,0,0,0,0,,,,,,,-1808.42,-287.47,-424.82 +"default:fresh_default","bcfishpass:fresh","NECR","BT","rear",100,0,0,0,0,0,,,,,,,6329.74,991.14,1943.82,0,0,0,0,0,,,,,,,6156.77,989.82,1875.61,0,0,0,0,,,,,,,-172.969999999999,-1.31999999999994,-68.21 +"default:fresh_default","bcfishpass:fresh","OSPK","BT","rear",100,0,0,0,0,0,,,,,,,1882.44,594.62,877.22,0,0,0,0,0,,,,,,,1881.19,594.62,866.44,0,0,0,0,,,,,,,-1.25,0,-10.78 +"default:fresh_default","bcfishpass:fresh","PARA","BT","rear",100,0,0,0,0,0,,,,,,,4400.24,720.29,1330.46,0,0,0,0,0,,,,,,,4256.87,718.23,1769.82,0,0,0,0,,,,,,,-143.37,-2.05999999999995,439.36 +"default:fresh_default","bcfishpass:fresh","PARS","BT","rear",100,0,0,0,0,0,,,,,,,6883.03,1685.38,2635.01,0,0,0,0,0,,,,,,,6822.47,1683.36,2575.08,0,0,0,0,,,,,,,-60.5599999999995,-2.02000000000021,-59.9300000000003 +"default:fresh_default","bcfishpass:fresh","PCEA","BT","rear",100,0,0,0,0,0,,,,,,,7091.82,921.92,1489.72,0,0,0,0,0,,,,,,,5002.96,925.72,2023.48,0,0,0,0,,,,,,,-2088.86,3.80000000000007,533.76 +"default:fresh_default","bcfishpass:fresh","PINE","BT","rear",100,0,0,0,0,0,,,,,,,5539.06,1645.08,2409.65,0,0,0,0,0,,,,,,,5425.97,1643.51,2376.18,0,0,0,0,,,,,,,-113.09,-1.56999999999994,-33.4700000000003 +"default:fresh_default","bcfishpass:fresh","SALR","BT","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SETN","BT","rear",100,1,1,1,1,1,1,1,1,1,1,1,3258.86,851.7,1239.78,1,1,1,1,1,1,1,1,1,1,1,2844.64,816.05,1339.7,0,0,0,0,0,0,0,0,0,0,-414.22,-35.6500000000001,99.9200000000001 +"default:fresh_default","bcfishpass:fresh","TABR","BT","rear",100,0,0,0,0,0,,,,,,,3402.26,678.31,1061,0,0,0,0,0,,,,,,,3305.18,677.05,1035.42,0,0,0,0,,,,,,,-97.0800000000004,-1.25999999999999,-25.5799999999999 +"default:fresh_default","bcfishpass:fresh","TOOD","BT","rear",100,0,0,0,0,0,,,,,,,4697.77,1131.97,1815.93,0,0,0,0,0,,,,,,,4466.1,1118.51,1850.91,0,0,0,0,,,,,,,-231.67,-13.46,34.98 +"default:fresh_default","bcfishpass:fresh","TWAC","BT","rear",100,1,1,1,1,1,1,1,1,1,1,1,1060.41,227.23,402.55,1,1,1,1,1,1,1,1,1,1,1,1002.12,226.3,393.93,0,0,0,0,0,0,0,0,0,0,-58.2900000000001,-0.929999999999978,-8.62 +"default:fresh_default","bcfishpass:fresh","UFRA","BT","rear",100,0,0,0,0,0,,,,,,,2752.86,948.12,1217.11,0,0,0,0,0,,,,,,,2107.1,952.9,1239.84,0,0,0,0,,,,,,,-645.76,4.77999999999997,22.73 +"default:fresh_default","bcfishpass:fresh","UNRS","BT","rear",100,0,0,0,0,0,,,,,,,7487.48,645.96,1280.54,0,0,0,0,0,,,,,,,7431.77,644.82,1864.53,0,0,0,0,,,,,,,-55.7099999999991,-1.13999999999999,583.99 +"default:fresh_default","bcfishpass:fresh","UOMI","BT","rear",100,22,22,8,9,9,1,0.363636363636364,0.409090909090909,0.409090909090909,0.363636363636364,0.409090909090909,3764.77,911.83,1451.62,22,22,8,10,10,1,0.363636363636364,0.454545454545455,0.454545454545455,0.363636363636364,0.454545454545455,3703.16,907.88,1459.1,0,0,1,1,0,0,0.0454545454545454,0.0454545454545454,0,0.0454545454545454,-61.6100000000001,-3.95000000000005,7.48000000000002 +"default:fresh_default","bcfishpass:fresh","UPCE","BT","rear",100,0,0,0,0,0,,,,,,,5689.87,1682.32,2340.3,0,0,0,0,0,,,,,,,5261.16,1657.29,2320.94,0,0,0,0,,,,,,,-428.71,-25.03,-19.3600000000001 +"default:fresh_default","bcfishpass:fresh","USKE","BT","rear",100,1,1,1,1,1,1,1,1,1,1,1,2969.07,739.68,1264.94,1,1,1,1,1,1,1,1,1,1,1,3451.92,878.03,1438.52,0,0,0,0,0,0,0,0,0,0,482.85,138.35,173.58 +"default:fresh_default","bcfishpass:fresh","WILL","BT","rear",100,0,0,0,0,0,,,,,,,4562.41,1055.35,1720.76,0,0,0,0,0,,,,,,,4515.45,1052.18,1690.35,0,0,0,0,,,,,,,-46.96,-3.16999999999985,-30.4100000000001 +"default:fresh_default","bcfishpass:fresh","ZYMO","BT","rear",100,147,147,55,88,90,1,0.374149659863946,0.598639455782313,0.612244897959184,0.374149659863946,0.612244897959184,2058.68,594.73,897.89,147,123,49,79,79,0.836734693877551,0.333333333333333,0.537414965986395,0.537414965986395,0.333333333333333,0.537414965986395,1840.06,575.42,863.2,-24,-6,-9,-11,-0.163265306122449,-0.0408163265306123,-0.0612244897959183,-0.0748299319727891,-0.0408163265306123,-0.0748299319727891,-218.62,-19.3100000000001,-34.6899999999999 +"default:fresh_default","bcfishpass:fresh","BBAR","BT","spawn",100,0,0,0,0,0,,,,,,,1761.57,329.41,560.67,0,0,0,0,0,,,,,,,1262.45,296.02,478.21,0,0,0,0,,,,,,,-499.12,-33.39,-82.46 +"default:fresh_default","bcfishpass:fresh","BULK","BT","spawn",100,12,12,4,9,9,1,0.333333333333333,0.75,0.75,0.333333333333333,0.75,7713.98,1852.11,3012.7,12,11,4,9,9,0.916666666666667,0.333333333333333,0.75,0.75,0.333333333333333,0.75,7676.5,1866.31,3021.51,-1,0,0,0,-0.0833333333333334,0,0,0,0,0,-37.4799999999996,14.2,8.8100000000004 +"default:fresh_default","bcfishpass:fresh","CARP","BT","spawn",100,0,0,0,0,0,,,,,,,4420.57,502.37,1026.27,0,0,0,0,0,,,,,,,4296.5,497.07,1072.63,0,0,0,0,,,,,,,-124.07,-5.30000000000001,46.3600000000001 +"default:fresh_default","bcfishpass:fresh","CHES","BT","spawn",100,0,0,0,0,0,,,,,,,2904.74,376.85,796.72,0,0,0,0,0,,,,,,,901.21,145.45,336.47,0,0,0,0,,,,,,,-2003.53,-231.4,-460.25 +"default:fresh_default","bcfishpass:fresh","CHWK","BT","spawn",100,5,5,4,4,5,1,0.8,0.8,1,0.8,1,793.94,310.02,353.48,5,5,4,5,5,1,0.8,1,1,0.8,1,822.24,316.56,418.39,0,0,1,0,0,0,0.2,0,0,0,28.3,6.54000000000002,64.91 +"default:fresh_default","bcfishpass:fresh","COTR","BT","spawn",100,0,0,0,0,0,,,,,,,6856.99,1480.88,2433.36,0,0,0,0,0,,,,,,,6878.95,1490.06,2340.71,0,0,0,0,,,,,,,21.96,9.17999999999984,-92.6500000000001 +"default:fresh_default","bcfishpass:fresh","CRKD","BT","spawn",100,0,0,0,0,0,,,,,,,5115.69,695.8,1448.76,0,0,0,0,0,,,,,,,5051.55,695.63,1448.44,0,0,0,0,,,,,,,-64.1399999999994,-0.169999999999959,-0.319999999999936 +"default:fresh_default","bcfishpass:fresh","DOGC","BT","spawn",100,0,0,0,0,0,,,,,,,1260.46,286.17,502.72,0,0,0,0,0,,,,,,,1251.04,288.83,481.5,0,0,0,0,,,,,,,-9.42000000000007,2.65999999999997,-21.22 +"default:fresh_default","bcfishpass:fresh","FINA","BT","spawn",100,0,0,0,0,0,,,,,,,7889.87,1325.37,2218.78,0,0,0,0,0,,,,,,,6084.04,1277.62,2845.63,0,0,0,0,,,,,,,-1805.83,-47.75,626.85 +"default:fresh_default","bcfishpass:fresh","FINL","BT","spawn",100,0,0,0,0,0,,,,,,,4515.86,1365.64,2107.58,0,0,0,0,0,,,,,,,4480.99,1365.64,2085.7,0,0,0,0,,,,,,,-34.8699999999999,0,-21.8800000000001 +"default:fresh_default","bcfishpass:fresh","FIRE","BT","spawn",100,4,4,2,3,3,1,0.5,0.75,0.75,0.5,0.75,6663.44,1012.79,1911.07,4,4,2,2,2,1,0.5,0.5,0.5,0.5,0.5,6589.52,1012.26,2016.75,0,0,-1,-1,0,0,-0.25,-0.25,0,-0.25,-73.9199999999992,-0.529999999999973,105.68 +"default:fresh_default","bcfishpass:fresh","FOXR","BT","spawn",100,0,0,0,0,0,,,,,,,3665.56,928.18,1525.02,0,0,0,0,0,,,,,,,3587.54,922.1,1511.59,0,0,0,0,,,,,,,-78.02,-6.07999999999993,-13.4300000000001 +"default:fresh_default","bcfishpass:fresh","FRAN","BT","spawn",100,1,1,0,1,1,1,0,1,1,0,1,9078.53,1120.86,2355.24,1,1,0,1,1,1,0,1,1,0,1,9265.93,1150.92,2834.02,0,0,0,0,0,0,0,0,0,0,187.4,30.0600000000002,478.78 +"default:fresh_default","bcfishpass:fresh","FRCN","BT","spawn",100,1,1,1,1,1,1,1,1,1,1,1,1504.38,663.33,889.13,1,1,1,1,1,1,1,1,1,1,1,1502.48,691.1,964.06,0,0,0,0,0,0,0,0,0,0,-1.90000000000009,27.77,74.93 +"default:fresh_default","bcfishpass:fresh","HARR","BT","spawn",100,0,0,0,0,0,,,,,,,1619.34,470.27,588.62,0,0,0,0,0,,,,,,,1561.45,468.9,827.82,0,0,0,0,,,,,,,-57.8899999999999,-1.37,239.2 +"default:fresh_default","bcfishpass:fresh","INGR","BT","spawn",100,0,0,0,0,0,,,,,,,3925.58,1111.41,1736.58,0,0,0,0,0,,,,,,,3907.56,1111.41,1783.68,0,0,0,0,,,,,,,-18.02,0,47.1000000000001 +"default:fresh_default","bcfishpass:fresh","KISP","BT","spawn",100,5,5,2,3,3,1,0.4,0.6,0.6,0.4,0.6,4529.14,1258.71,1894.95,5,5,2,3,3,1,0.4,0.6,0.6,0.4,0.6,4475.39,1261.15,1962.71,0,0,0,0,0,0,0,0,0,0,-53.75,2.44000000000005,67.76 +"default:fresh_default","bcfishpass:fresh","KLUM","BT","spawn",100,0,0,0,0,0,,,,,,,2173.93,929.96,1229.04,0,0,0,0,0,,,,,,,1930.45,894.45,1189.16,0,0,0,0,,,,,,,-243.48,-35.51,-39.8799999999999 +"default:fresh_default","bcfishpass:fresh","LBTN","BT","spawn",100,0,0,0,0,0,,,,,,,9061.71,2027.4,2961.53,0,0,0,0,0,,,,,,,8647.79,2026.94,2189.51,0,0,0,0,,,,,,,-413.919999999998,-0.460000000000036,-772.02 +"default:fresh_default","bcfishpass:fresh","LCHL","BT","spawn",100,0,0,0,0,0,,,,,,,5533.57,908.41,1581.55,0,0,0,0,0,,,,,,,5236.61,896.14,1550.64,0,0,0,0,,,,,,,-296.96,-12.27,-30.9099999999999 +"default:fresh_default","bcfishpass:fresh","LFRA","BT","spawn",100,1,1,1,1,1,1,1,1,1,1,1,3569.06,1241.71,1516.52,1,1,1,1,1,1,1,1,1,1,1,3415.8,1284.59,1805.62,0,0,0,0,0,0,0,0,0,0,-153.26,42.8799999999999,289.1 +"default:fresh_default","bcfishpass:fresh","LKEL","BT","spawn",100,0,0,0,0,0,,,,,,,405.16,144.67,218.77,0,0,0,0,0,,,,,,,401.02,144.74,222.78,0,0,0,0,,,,,,,-4.14000000000004,0.0700000000000216,4.00999999999999 +"default:fresh_default","bcfishpass:fresh","LOMI","BT","spawn",100,0,0,0,0,0,,,,,,,3639.43,1004.03,1513.07,0,0,0,0,0,,,,,,,3436.23,967.82,1517.42,0,0,0,0,,,,,,,-203.2,-36.2099999999999,4.35000000000014 +"default:fresh_default","bcfishpass:fresh","LPCE","BT","spawn",100,0,0,0,0,0,,,,,,,3571.54,1000.37,1386.86,0,0,0,0,0,,,,,,,3130.17,918.71,1261.4,0,0,0,0,,,,,,,-441.37,-81.66,-125.46 +"default:fresh_default","bcfishpass:fresh","LSAL","BT","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSKE","BT","spawn",100,3,3,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,3075.25,1326.45,1709.47,3,3,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2884.31,1315.64,1751.5,0,0,0,0,0,0,0,0,0,0,-190.94,-10.8099999999999,42.03 +"default:fresh_default","bcfishpass:fresh","MESI","BT","spawn",100,0,0,0,0,0,,,,,,,2825.32,691.09,1077.07,0,0,0,0,0,,,,,,,2767.09,685.99,1126.99,0,0,0,0,,,,,,,-58.23,-5.10000000000002,49.9200000000001 +"default:fresh_default","bcfishpass:fresh","MFRA","BT","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MORK","BT","spawn",100,0,0,0,0,0,,,,,,,7202.59,2148.8,3077.39,0,0,0,0,0,,,,,,,8075.86,2434.23,3397.59,0,0,0,0,,,,,,,873.27,285.43,320.2 +"default:fresh_default","bcfishpass:fresh","MORR","BT","spawn",100,23,23,8,15,15,1,0.347826086956522,0.652173913043478,0.652173913043478,0.347826086956522,0.652173913043478,4865.96,960.8,1685.2,23,23,8,15,15,1,0.347826086956522,0.652173913043478,0.652173913043478,0.347826086956522,0.652173913043478,4765.64,952.61,1829.89,0,0,0,0,0,0,0,0,0,0,-100.32,-8.18999999999994,144.69 +"default:fresh_default","bcfishpass:fresh","MSKE","BT","spawn",100,4,4,2,2,2,1,0.5,0.5,0.5,0.5,0.5,2691.58,922.19,1383.97,4,3,2,2,2,0.75,0.5,0.5,0.5,0.5,0.5,2667.19,921.62,1383.52,-1,0,0,0,-0.25,0,0,0,0,0,-24.3899999999999,-0.57000000000005,-0.450000000000045 +"default:fresh_default","bcfishpass:fresh","NARC","BT","spawn",100,0,0,0,0,0,,,,,,,4336.98,873.49,1703.68,0,0,0,0,0,,,,,,,2994.54,633.18,1162.09,0,0,0,0,,,,,,,-1342.44,-240.31,-541.59 +"default:fresh_default","bcfishpass:fresh","NATR","BT","spawn",100,0,0,0,0,0,,,,,,,9819.51,1803.66,3496.13,0,0,0,0,0,,,,,,,8011.09,1516.19,3071.31,0,0,0,0,,,,,,,-1808.42,-287.47,-424.82 +"default:fresh_default","bcfishpass:fresh","NECR","BT","spawn",100,0,0,0,0,0,,,,,,,6329.74,991.14,1943.82,0,0,0,0,0,,,,,,,6156.77,989.82,1875.61,0,0,0,0,,,,,,,-172.969999999999,-1.31999999999994,-68.21 +"default:fresh_default","bcfishpass:fresh","OSPK","BT","spawn",100,0,0,0,0,0,,,,,,,1882.44,594.62,877.22,0,0,0,0,0,,,,,,,1881.19,594.62,866.44,0,0,0,0,,,,,,,-1.25,0,-10.78 +"default:fresh_default","bcfishpass:fresh","PARA","BT","spawn",100,0,0,0,0,0,,,,,,,4400.24,720.29,1330.46,0,0,0,0,0,,,,,,,4256.87,718.23,1769.82,0,0,0,0,,,,,,,-143.37,-2.05999999999995,439.36 +"default:fresh_default","bcfishpass:fresh","PARS","BT","spawn",100,0,0,0,0,0,,,,,,,6883.03,1685.38,2635.01,0,0,0,0,0,,,,,,,6822.47,1683.36,2575.08,0,0,0,0,,,,,,,-60.5599999999995,-2.02000000000021,-59.9300000000003 +"default:fresh_default","bcfishpass:fresh","PCEA","BT","spawn",100,1,1,0,0,1,1,0,0,1,0,1,7091.82,921.92,1489.72,1,1,0,1,1,1,0,1,1,0,1,5002.96,925.72,2023.48,0,0,1,0,0,0,1,0,0,0,-2088.86,3.80000000000007,533.76 +"default:fresh_default","bcfishpass:fresh","PINE","BT","spawn",100,3,3,3,3,3,1,1,1,1,1,1,5539.06,1645.08,2409.65,3,3,3,3,3,1,1,1,1,1,1,5425.97,1643.51,2376.18,0,0,0,0,0,0,0,0,0,0,-113.09,-1.56999999999994,-33.4700000000003 +"default:fresh_default","bcfishpass:fresh","SALR","BT","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SETN","BT","spawn",100,3,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,3258.86,851.7,1239.78,3,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2844.64,816.05,1339.7,0,0,0,0,0,0,0,0,0,0,-414.22,-35.6500000000001,99.9200000000001 +"default:fresh_default","bcfishpass:fresh","TABR","BT","spawn",100,0,0,0,0,0,,,,,,,3402.26,678.31,1061,0,0,0,0,0,,,,,,,3305.18,677.05,1035.42,0,0,0,0,,,,,,,-97.0800000000004,-1.25999999999999,-25.5799999999999 +"default:fresh_default","bcfishpass:fresh","TOOD","BT","spawn",100,0,0,0,0,0,,,,,,,4697.77,1131.97,1815.93,0,0,0,0,0,,,,,,,4466.1,1118.51,1850.91,0,0,0,0,,,,,,,-231.67,-13.46,34.98 +"default:fresh_default","bcfishpass:fresh","TWAC","BT","spawn",100,0,0,0,0,0,,,,,,,1060.41,227.23,402.55,0,0,0,0,0,,,,,,,1002.12,226.3,393.93,0,0,0,0,,,,,,,-58.2900000000001,-0.929999999999978,-8.62 +"default:fresh_default","bcfishpass:fresh","UFRA","BT","spawn",100,0,0,0,0,0,,,,,,,2752.86,948.12,1217.11,0,0,0,0,0,,,,,,,2107.1,952.9,1239.84,0,0,0,0,,,,,,,-645.76,4.77999999999997,22.73 +"default:fresh_default","bcfishpass:fresh","UNRS","BT","spawn",100,0,0,0,0,0,,,,,,,7487.48,645.96,1280.54,0,0,0,0,0,,,,,,,7431.77,644.82,1864.53,0,0,0,0,,,,,,,-55.7099999999991,-1.13999999999999,583.99 +"default:fresh_default","bcfishpass:fresh","UOMI","BT","spawn",100,0,0,0,0,0,,,,,,,3764.77,911.83,1451.62,0,0,0,0,0,,,,,,,3703.16,907.88,1459.1,0,0,0,0,,,,,,,-61.6100000000001,-3.95000000000005,7.48000000000002 +"default:fresh_default","bcfishpass:fresh","UPCE","BT","spawn",100,1,1,1,1,1,1,1,1,1,1,1,5689.87,1682.32,2340.3,1,1,1,1,1,1,1,1,1,1,1,5261.16,1657.29,2320.94,0,0,0,0,0,0,0,0,0,0,-428.71,-25.03,-19.3600000000001 +"default:fresh_default","bcfishpass:fresh","USKE","BT","spawn",100,0,0,0,0,0,,,,,,,2969.07,739.68,1264.94,0,0,0,0,0,,,,,,,3451.92,878.03,1438.52,0,0,0,0,,,,,,,482.85,138.35,173.58 +"default:fresh_default","bcfishpass:fresh","WILL","BT","spawn",100,0,0,0,0,0,,,,,,,4562.41,1055.35,1720.76,0,0,0,0,0,,,,,,,4515.45,1052.18,1690.35,0,0,0,0,,,,,,,-46.96,-3.16999999999985,-30.4100000000001 +"default:fresh_default","bcfishpass:fresh","ZYMO","BT","spawn",100,14,14,7,11,11,1,0.5,0.785714285714286,0.785714285714286,0.5,0.785714285714286,2058.68,594.73,897.89,14,12,7,9,9,0.857142857142857,0.5,0.642857142857143,0.642857142857143,0.5,0.642857142857143,1840.06,575.42,863.2,-2,0,-2,-2,-0.142857142857143,0,-0.142857142857143,-0.142857142857143,0,-0.142857142857143,-218.62,-19.3100000000001,-34.6899999999999 +"default:fresh_default","bcfishpass:fresh","BBAR","CH","any",100,5,3,1,1,1,0.6,0.2,0.2,0.2,0.2,0.2,275.36,160.2,169.06,5,3,1,1,1,0.6,0.2,0.2,0.2,0.2,0.2,269.11,160.2,167.83,0,0,0,0,0,0,0,0,0,0,-6.25,0,-1.22999999999999 +"default:fresh_default","bcfishpass:fresh","BULK","CH","any",100,110,110,105,108,108,1,0.954545454545455,0.981818181818182,0.981818181818182,0.945054945054945,0.981818181818182,5178.19,1264.07,2038.12,110,110,105,108,108,1,0.954545454545455,0.981818181818182,0.981818181818182,0.945054945054945,0.981818181818182,5089.63,1260.25,1730.12,0,0,0,0,0,0,0,0,0,0,-88.5599999999995,-3.81999999999994,-308 +"default:fresh_default","bcfishpass:fresh","CARP","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","CHES","CH","any",100,87,85,81,82,83,0.977011494252874,0.931034482758621,0.942528735632184,0.954022988505747,0.915254237288136,0.954022988505747,780.54,88.26,258.88,87,85,81,82,82,0.977011494252874,0.931034482758621,0.942528735632184,0.942528735632184,0.915254237288136,0.942528735632184,750.66,88.26,149.77,0,0,0,-1,0,0,0,-0.0114942528735632,0,-0.0114942528735632,-29.88,0,-109.11 +"default:fresh_default","bcfishpass:fresh","CHWK","CH","any",100,21,21,17,16,19,1,0.80952380952381,0.761904761904762,0.904761904761905,0.789473684210526,0.904761904761905,698.92,257.8,310.79,21,19,14,14,14,0.904761904761905,0.666666666666667,0.666666666666667,0.666666666666667,0.68421052631579,0.666666666666667,662.37,253.93,301.07,-2,-3,-2,-5,-0.0952380952380952,-0.142857142857143,-0.0952380952380952,-0.238095238095238,-0.105263157894737,-0.238095238095238,-36.55,-3.87,-9.72000000000003 +"default:fresh_default","bcfishpass:fresh","COTR","CH","any",100,100,95,72,77,78,0.95,0.72,0.77,0.78,0.533333333333333,0.78,4143.01,702.76,1364.58,100,95,70,73,73,0.95,0.7,0.73,0.73,0.533333333333333,0.73,4119.15,694.8,1033.8,0,-2,-4,-5,0,-0.02,-0.04,-0.05,0,-0.05,-23.8600000000006,-7.96000000000004,-330.78 +"default:fresh_default","bcfishpass:fresh","CRKD","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","DOGC","CH","any",100,5,5,5,5,5,1,1,1,1,1,1,358.78,162,196.9,5,5,5,5,5,1,1,1,1,1,1,358.45,162,180.33,0,0,0,0,0,0,0,0,0,0,-0.329999999999984,0,-16.57 +"default:fresh_default","bcfishpass:fresh","FINA","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FINL","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FIRE","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FOXR","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FRAN","CH","any",100,23,23,21,20,21,1,0.91304347826087,0.869565217391304,0.91304347826087,0.833333333333333,0.91304347826087,7351.32,597.53,1631.89,23,23,17,17,17,1,0.739130434782609,0.739130434782609,0.739130434782609,0.833333333333333,0.739130434782609,7176.56,540.43,971.87,0,-4,-3,-4,0,-0.173913043478261,-0.130434782608696,-0.173913043478261,0,-0.173913043478261,-174.759999999999,-57.1,-660.02 +"default:fresh_default","bcfishpass:fresh","FRCN","CH","any",100,31,30,26,27,27,0.967741935483871,0.838709677419355,0.870967741935484,0.870967741935484,0.722222222222222,0.870967741935484,749.15,451.01,481.99,31,30,22,27,27,0.967741935483871,0.709677419354839,0.870967741935484,0.870967741935484,0.722222222222222,0.870967741935484,716.2,428.99,474.71,0,-4,0,0,0,-0.129032258064516,0,0,0,0,-32.9499999999999,-22.02,-7.28000000000003 +"default:fresh_default","bcfishpass:fresh","HARR","CH","any",100,118,116,110,109,111,0.983050847457627,0.932203389830508,0.923728813559322,0.940677966101695,0.927272727272727,0.940677966101695,1148.93,329.59,385.83,118,116,109,109,109,0.983050847457627,0.923728813559322,0.923728813559322,0.923728813559322,0.927272727272727,0.923728813559322,1126.73,327.72,377.22,0,-1,0,-2,0,-0.00847457627118642,0,-0.0169491525423729,0,-0.0169491525423729,-22.2,-1.86999999999995,-8.60999999999996 +"default:fresh_default","bcfishpass:fresh","INGR","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","KISP","CH","any",100,89,89,84,78,81,1,0.943820224719101,0.876404494382023,0.910112359550562,0.901960784313726,0.910112359550562,2841.44,862.28,1178.83,89,89,77,78,78,1,0.865168539325843,0.876404494382023,0.876404494382023,0.901960784313726,0.876404494382023,2786.73,860.45,1050.59,0,-7,0,-3,0,-0.0786516853932584,0,-0.0337078651685393,0,-0.0337078651685393,-54.71,-1.82999999999993,-128.24 +"default:fresh_default","bcfishpass:fresh","KLUM","CH","any",100,104,99,88,88,90,0.951923076923077,0.846153846153846,0.846153846153846,0.865384615384615,0.789473684210526,0.865384615384615,1523.16,708.12,905.48,104,99,85,87,87,0.951923076923077,0.817307692307692,0.836538461538462,0.836538461538462,0.789473684210526,0.836538461538462,1481.08,707.93,830.68,0,-3,-1,-3,0,-0.0288461538461539,-0.00961538461538458,-0.0288461538461539,0,-0.0288461538461539,-42.0800000000002,-0.190000000000055,-74.8000000000001 +"default:fresh_default","bcfishpass:fresh","LBTN","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LCHL","CH","any",100,38,38,36,36,36,1,0.947368421052632,0.947368421052632,0.947368421052632,0.916666666666667,0.947368421052632,4358.83,468.47,1153.83,38,38,32,36,36,1,0.842105263157895,0.947368421052632,0.947368421052632,0.916666666666667,0.947368421052632,4159.73,464.81,826.81,0,-4,0,0,0,-0.105263157894737,0,0,0,0,-199.1,-3.66000000000003,-327.02 +"default:fresh_default","bcfishpass:fresh","LFRA","CH","any",100,165,161,108,135,136,0.975757575757576,0.654545454545455,0.818181818181818,0.824242424242424,0.60958904109589,0.824242424242424,3074.38,826.28,1254.99,165,159,107,135,135,0.963636363636364,0.648484848484848,0.818181818181818,0.818181818181818,0.60958904109589,0.818181818181818,2754.05,820.43,1176.68,-2,-1,0,-1,-0.0121212121212121,-0.0060606060606061,0,-0.00606060606060599,0,-0.00606060606060599,-320.33,-5.85000000000002,-78.31 +"default:fresh_default","bcfishpass:fresh","LKEL","CH","any",100,14,14,13,12,12,1,0.928571428571429,0.857142857142857,0.857142857142857,0.888888888888889,0.857142857142857,332.18,106.7,162.87,14,14,11,11,11,1,0.785714285714286,0.785714285714286,0.785714285714286,0.888888888888889,0.785714285714286,328.21,106.49,123.85,0,-2,-1,-1,0,-0.142857142857143,-0.0714285714285714,-0.0714285714285714,0,-0.0714285714285714,-3.97000000000003,-0.210000000000008,-39.02 +"default:fresh_default","bcfishpass:fresh","LOMI","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LPCE","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSAL","CH","any",100,17,17,17,17,17,1,1,1,1,1,1,3029.07,317.62,1060.92,17,17,17,17,17,1,1,1,1,1,1,2968.08,312.6,617.6,0,0,0,0,0,0,0,0,0,0,-60.9900000000002,-5.01999999999998,-443.32 +"default:fresh_default","bcfishpass:fresh","LSKE","CH","any",100,122,119,109,110,110,0.975409836065574,0.89344262295082,0.901639344262295,0.901639344262295,0.839506172839506,0.901639344262295,2101.75,1052.46,1308.55,122,119,103,110,110,0.975409836065574,0.844262295081967,0.901639344262295,0.901639344262295,0.839506172839506,0.901639344262295,2086.32,1049.22,1167.34,0,-6,0,0,0,-0.0491803278688524,0,0,0,0,-15.4299999999998,-3.24000000000001,-141.21 +"default:fresh_default","bcfishpass:fresh","MESI","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MFRA","CH","any",100,2,1,0,0,0,0.5,0,0,0,0,0,277.46,100.9,121.94,2,1,0,0,0,0.5,0,0,0,0,0,231.06,96.92,104.06,0,0,0,0,0,0,0,0,0,0,-46.4,-3.98,-17.88 +"default:fresh_default","bcfishpass:fresh","MORK","CH","any",100,156,155,145,145,146,0.993589743589744,0.92948717948718,0.92948717948718,0.935897435897436,0.816666666666667,0.935897435897436,5953.1,1577.65,2499.11,156,155,141,144,144,0.993589743589744,0.903846153846154,0.923076923076923,0.923076923076923,0.816666666666667,0.923076923076923,5705.82,1556.47,2225.04,0,-4,-1,-2,0,-0.0256410256410257,-0.00641025641025639,-0.0128205128205128,0,-0.0128205128205128,-247.280000000001,-21.1800000000001,-274.07 +"default:fresh_default","bcfishpass:fresh","MORR","CH","any",100,41,41,33,35,38,1,0.804878048780488,0.853658536585366,0.926829268292683,0.5625,0.926829268292683,3341.35,646.28,1171.33,41,41,31,34,34,1,0.75609756097561,0.829268292682927,0.829268292682927,0.5625,0.829268292682927,3328.25,644.81,880.69,0,-2,-1,-4,0,-0.0487804878048781,-0.024390243902439,-0.0975609756097562,0,-0.0975609756097562,-13.0999999999999,-1.47000000000003,-290.64 +"default:fresh_default","bcfishpass:fresh","MSKE","CH","any",100,42,40,38,38,38,0.952380952380952,0.904761904761905,0.904761904761905,0.904761904761905,0.88235294117647,0.904761904761905,1516.21,676.83,856.12,42,40,34,36,36,0.952380952380952,0.80952380952381,0.857142857142857,0.857142857142857,0.88235294117647,0.857142857142857,1506.83,676.03,779.76,0,-4,-2,-2,0,-0.0952380952380952,-0.0476190476190477,-0.0476190476190477,0,-0.0476190476190477,-9.38000000000011,-0.800000000000068,-76.36 +"default:fresh_default","bcfishpass:fresh","NARC","CH","any",100,22,22,21,21,21,1,0.954545454545455,0.954545454545455,0.954545454545455,0.75,0.954545454545455,3563.45,506.51,1327.21,22,22,20,21,21,1,0.909090909090909,0.954545454545455,0.954545454545455,0.75,0.954545454545455,2335,387.57,563.65,0,-1,0,0,0,-0.0454545454545455,0,0,0,0,-1228.45,-118.94,-763.56 +"default:fresh_default","bcfishpass:fresh","NATR","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","NECR","CH","any",100,101,101,93,97,97,1,0.920792079207921,0.96039603960396,0.96039603960396,0.88235294117647,0.96039603960396,5608.47,516.15,1649.24,101,101,93,96,96,1,0.920792079207921,0.95049504950495,0.95049504950495,0.88235294117647,0.95049504950495,5489.42,515.99,1079.18,0,0,-1,-1,0,0,-0.00990099009900991,-0.00990099009900991,0,-0.00990099009900991,-119.05,-0.159999999999968,-570.06 +"default:fresh_default","bcfishpass:fresh","OSPK","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARA","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARS","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PCEA","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PINE","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SALR","CH","any",100,7,7,6,6,6,1,0.857142857142857,0.857142857142857,0.857142857142857,0.5,0.857142857142857,3174.7,234.92,966.25,7,7,6,6,6,1,0.857142857142857,0.857142857142857,0.857142857142857,0.5,0.857142857142857,3134.03,206.59,442.55,0,0,0,0,0,0,0,0,0,0,-40.6699999999996,-28.33,-523.7 +"default:fresh_default","bcfishpass:fresh","SETN","CH","any",100,117,116,111,112,113,0.991452991452991,0.948717948717949,0.957264957264957,0.965811965811966,0.454545454545455,0.965811965811966,1500.97,543.88,663.52,117,116,111,112,112,0.991452991452991,0.948717948717949,0.957264957264957,0.957264957264957,0.454545454545455,0.957264957264957,1497.15,537.97,609.35,0,0,0,-1,0,0,0,-0.00854700854700852,0,-0.00854700854700852,-3.81999999999994,-5.90999999999997,-54.17 +"default:fresh_default","bcfishpass:fresh","TABR","CH","any",100,50,48,32,33,33,0.96,0.64,0.66,0.66,0.622222222222222,0.66,2633.55,410.85,789.94,50,48,32,33,33,0.96,0.64,0.66,0.66,0.622222222222222,0.66,2566.6,410.27,642.88,0,0,0,0,0,0,0,0,0,0,-66.9500000000003,-0.580000000000041,-147.06 +"default:fresh_default","bcfishpass:fresh","TOOD","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","TWAC","CH","any",100,9,9,8,9,9,1,0.888888888888889,1,1,0.888888888888889,1,705.9,144.23,228.3,9,9,8,9,9,1,0.888888888888889,1,1,0.888888888888889,1,689.03,144.23,173.02,0,0,0,0,0,0,0,0,0,0,-16.87,0,-55.28 +"default:fresh_default","bcfishpass:fresh","UFRA","CH","any",100,51,51,45,46,46,1,0.88235294117647,0.901960784313726,0.901960784313726,0.727272727272727,0.901960784313726,1487.28,642.83,764.56,51,51,45,46,46,1,0.88235294117647,0.901960784313726,0.901960784313726,0.727272727272727,0.901960784313726,1243.66,632.76,726.73,0,0,0,0,0,0,0,0,0,0,-243.62,-10.07,-37.8299999999999 +"default:fresh_default","bcfishpass:fresh","UNRS","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UOMI","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UPCE","CH","any",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","USKE","CH","any",100,8,8,8,8,8,1,1,1,1,1,1,1528.86,498.83,733.99,8,8,8,8,8,1,1,1,1,1,1,1518.35,498.83,593.41,0,0,0,0,0,0,0,0,0,0,-10.51,0,-140.58 +"default:fresh_default","bcfishpass:fresh","WILL","CH","any",100,58,58,55,55,55,1,0.948275862068966,0.948275862068966,0.948275862068966,0.833333333333333,0.948275862068966,3601.38,640.69,1364.26,58,58,54,55,55,1,0.931034482758621,0.948275862068966,0.948275862068966,0.833333333333333,0.948275862068966,3537.67,630.48,1029.73,0,-1,0,0,0,-0.0172413793103449,0,0,0,0,-63.71,-10.21,-334.53 +"default:fresh_default","bcfishpass:fresh","ZYMO","CH","any",100,21,19,15,16,16,0.904761904761905,0.714285714285714,0.761904761904762,0.761904761904762,0.538461538461538,0.761904761904762,1211.06,463.12,602.24,21,19,14,16,16,0.904761904761905,0.666666666666667,0.761904761904762,0.761904761904762,0.538461538461538,0.761904761904762,1200.73,462.91,539.94,0,-1,0,0,0,-0.0476190476190477,0,0,0,0,-10.3299999999999,-0.20999999999998,-62.3 +"default:fresh_default","bcfishpass:fresh","BBAR","CH","rear",100,0,0,0,0,0,,,,,,,275.36,160.2,169.06,0,0,0,0,0,,,,,,,269.11,160.2,167.83,0,0,0,0,,,,,,,-6.25,0,-1.22999999999999 +"default:fresh_default","bcfishpass:fresh","BULK","CH","rear",100,11,11,6,9,9,1,0.545454545454545,0.818181818181818,0.818181818181818,0.545454545454545,0.818181818181818,5178.19,1264.07,2038.12,11,11,6,9,9,1,0.545454545454545,0.818181818181818,0.818181818181818,0.545454545454545,0.818181818181818,5089.63,1260.25,1730.12,0,0,0,0,0,0,0,0,0,0,-88.5599999999995,-3.81999999999994,-308 +"default:fresh_default","bcfishpass:fresh","CARP","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","CHES","CH","rear",100,1,1,1,1,1,1,1,1,1,1,1,780.54,88.26,258.88,1,1,1,1,1,1,1,1,1,1,1,750.66,88.26,149.77,0,0,0,0,0,0,0,0,0,0,-29.88,0,-109.11 +"default:fresh_default","bcfishpass:fresh","CHWK","CH","rear",100,4,4,4,4,4,1,1,1,1,1,1,698.92,257.8,310.79,4,4,4,4,4,1,1,1,1,1,1,662.37,253.93,301.07,0,0,0,0,0,0,0,0,0,0,-36.55,-3.87,-9.72000000000003 +"default:fresh_default","bcfishpass:fresh","COTR","CH","rear",100,48,45,29,33,33,0.9375,0.604166666666667,0.6875,0.6875,0.472222222222222,0.6875,4143.01,702.76,1364.58,48,45,29,31,31,0.9375,0.604166666666667,0.645833333333333,0.645833333333333,0.472222222222222,0.645833333333333,4119.15,694.8,1033.8,0,0,-2,-2,0,0,-0.0416666666666666,-0.0416666666666666,0,-0.0416666666666666,-23.8600000000006,-7.96000000000004,-330.78 +"default:fresh_default","bcfishpass:fresh","CRKD","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","DOGC","CH","rear",100,0,0,0,0,0,,,,,,,358.78,162,196.9,0,0,0,0,0,,,,,,,358.45,162,180.33,0,0,0,0,,,,,,,-0.329999999999984,0,-16.57 +"default:fresh_default","bcfishpass:fresh","FINA","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FINL","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FIRE","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FOXR","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FRAN","CH","rear",100,4,4,2,2,2,1,0.5,0.5,0.5,0.5,0.5,7351.32,597.53,1631.89,4,4,2,2,2,1,0.5,0.5,0.5,0.5,0.5,7176.56,540.43,971.87,0,0,0,0,0,0,0,0,0,0,-174.759999999999,-57.1,-660.02 +"default:fresh_default","bcfishpass:fresh","FRCN","CH","rear",100,13,13,10,13,13,1,0.769230769230769,1,1,0.727272727272727,1,749.15,451.01,481.99,13,13,10,13,13,1,0.769230769230769,1,1,0.727272727272727,1,716.2,428.99,474.71,0,0,0,0,0,0,0,0,0,0,-32.9499999999999,-22.02,-7.28000000000003 +"default:fresh_default","bcfishpass:fresh","HARR","CH","rear",100,46,45,44,44,44,0.978260869565217,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,1148.93,329.59,385.83,46,45,44,44,44,0.978260869565217,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,1126.73,327.72,377.22,0,0,0,0,0,0,0,0,0,0,-22.2,-1.86999999999995,-8.60999999999996 +"default:fresh_default","bcfishpass:fresh","INGR","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","KISP","CH","rear",100,12,12,10,10,10,1,0.833333333333333,0.833333333333333,0.833333333333333,0.818181818181818,0.833333333333333,2841.44,862.28,1178.83,12,12,10,10,10,1,0.833333333333333,0.833333333333333,0.833333333333333,0.818181818181818,0.833333333333333,2786.73,860.45,1050.59,0,0,0,0,0,0,0,0,0,0,-54.71,-1.82999999999993,-128.24 +"default:fresh_default","bcfishpass:fresh","KLUM","CH","rear",100,19,19,14,16,16,1,0.736842105263158,0.842105263157895,0.842105263157895,0.666666666666667,0.842105263157895,1523.16,708.12,905.48,19,19,14,15,15,1,0.736842105263158,0.789473684210526,0.789473684210526,0.666666666666667,0.789473684210526,1481.08,707.93,830.68,0,0,-1,-1,0,0,-0.0526315789473684,-0.0526315789473684,0,-0.0526315789473684,-42.0800000000002,-0.190000000000055,-74.8000000000001 +"default:fresh_default","bcfishpass:fresh","LBTN","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LCHL","CH","rear",100,23,23,21,21,21,1,0.91304347826087,0.91304347826087,0.91304347826087,0.846153846153846,0.91304347826087,4358.83,468.47,1153.83,23,23,17,21,21,1,0.739130434782609,0.91304347826087,0.91304347826087,0.846153846153846,0.91304347826087,4159.73,464.81,826.81,0,-4,0,0,0,-0.173913043478261,0,0,0,0,-199.1,-3.66000000000003,-327.02 +"default:fresh_default","bcfishpass:fresh","LFRA","CH","rear",100,66,65,40,55,55,0.984848484848485,0.606060606060606,0.833333333333333,0.833333333333333,0.566666666666667,0.833333333333333,3074.38,826.28,1254.99,66,63,40,55,55,0.954545454545455,0.606060606060606,0.833333333333333,0.833333333333333,0.566666666666667,0.833333333333333,2754.05,820.43,1176.68,-2,0,0,0,-0.0303030303030303,0,0,0,0,0,-320.33,-5.85000000000002,-78.31 +"default:fresh_default","bcfishpass:fresh","LKEL","CH","rear",100,2,2,2,2,2,1,1,1,1,1,1,332.18,106.7,162.87,2,2,2,2,2,1,1,1,1,1,1,328.21,106.49,123.85,0,0,0,0,0,0,0,0,0,0,-3.97000000000003,-0.210000000000008,-39.02 +"default:fresh_default","bcfishpass:fresh","LOMI","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LPCE","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSAL","CH","rear",100,4,4,4,4,4,1,1,1,1,1,1,3029.07,317.62,1060.92,4,4,4,4,4,1,1,1,1,1,1,2968.08,312.6,617.6,0,0,0,0,0,0,0,0,0,0,-60.9900000000002,-5.01999999999998,-443.32 +"default:fresh_default","bcfishpass:fresh","LSKE","CH","rear",100,35,35,27,30,30,1,0.771428571428571,0.857142857142857,0.857142857142857,0.75,0.857142857142857,2101.75,1052.46,1308.55,35,35,26,30,30,1,0.742857142857143,0.857142857142857,0.857142857142857,0.75,0.857142857142857,2086.32,1049.22,1167.34,0,-1,0,0,0,-0.0285714285714286,0,0,0,0,-15.4299999999998,-3.24000000000001,-141.21 +"default:fresh_default","bcfishpass:fresh","MESI","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MFRA","CH","rear",100,2,1,0,0,0,0.5,0,0,0,0,0,277.46,100.9,121.94,2,1,0,0,0,0.5,0,0,0,0,0,231.06,96.92,104.06,0,0,0,0,0,0,0,0,0,0,-46.4,-3.98,-17.88 +"default:fresh_default","bcfishpass:fresh","MORK","CH","rear",100,32,31,24,25,25,0.96875,0.75,0.78125,0.78125,0.529411764705882,0.78125,5953.1,1577.65,2499.11,32,31,24,25,25,0.96875,0.75,0.78125,0.78125,0.529411764705882,0.78125,5705.82,1556.47,2225.04,0,0,0,0,0,0,0,0,0,0,-247.280000000001,-21.1800000000001,-274.07 +"default:fresh_default","bcfishpass:fresh","MORR","CH","rear",100,2,2,1,2,2,1,0.5,1,1,0.5,1,3341.35,646.28,1171.33,2,2,1,2,2,1,0.5,1,1,0.5,1,3328.25,644.81,880.69,0,0,0,0,0,0,0,0,0,0,-13.0999999999999,-1.47000000000003,-290.64 +"default:fresh_default","bcfishpass:fresh","MSKE","CH","rear",100,2,1,2,1,1,0.5,1,0.5,0.5,,0.5,1516.21,676.83,856.12,2,1,1,1,1,0.5,0.5,0.5,0.5,,0.5,1506.83,676.03,779.76,0,-1,0,0,0,-0.5,0,0,,0,-9.38000000000011,-0.800000000000068,-76.36 +"default:fresh_default","bcfishpass:fresh","NARC","CH","rear",100,6,6,6,5,5,1,1,0.833333333333333,0.833333333333333,1,0.833333333333333,3563.45,506.51,1327.21,6,6,5,5,5,1,0.833333333333333,0.833333333333333,0.833333333333333,1,0.833333333333333,2335,387.57,563.65,0,-1,0,0,0,-0.166666666666667,0,0,0,0,-1228.45,-118.94,-763.56 +"default:fresh_default","bcfishpass:fresh","NATR","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","NECR","CH","rear",100,6,6,4,6,6,1,0.666666666666667,1,1,0.6,1,5608.47,516.15,1649.24,6,6,4,6,6,1,0.666666666666667,1,1,0.6,1,5489.42,515.99,1079.18,0,0,0,0,0,0,0,0,0,0,-119.05,-0.159999999999968,-570.06 +"default:fresh_default","bcfishpass:fresh","OSPK","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARA","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARS","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PCEA","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PINE","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SALR","CH","rear",100,2,2,1,1,1,1,0.5,0.5,0.5,0.5,0.5,3174.7,234.92,966.25,2,2,1,1,1,1,0.5,0.5,0.5,0.5,0.5,3134.03,206.59,442.55,0,0,0,0,0,0,0,0,0,0,-40.6699999999996,-28.33,-523.7 +"default:fresh_default","bcfishpass:fresh","SETN","CH","rear",100,85,85,85,85,85,1,1,1,1,1,1,1500.97,543.88,663.52,85,85,85,85,85,1,1,1,1,1,1,1497.15,537.97,609.35,0,0,0,0,0,0,0,0,0,0,-3.81999999999994,-5.90999999999997,-54.17 +"default:fresh_default","bcfishpass:fresh","TABR","CH","rear",100,25,24,18,18,18,0.96,0.72,0.72,0.72,0.681818181818182,0.72,2633.55,410.85,789.94,25,24,18,18,18,0.96,0.72,0.72,0.72,0.681818181818182,0.72,2566.6,410.27,642.88,0,0,0,0,0,0,0,0,0,0,-66.9500000000003,-0.580000000000041,-147.06 +"default:fresh_default","bcfishpass:fresh","TOOD","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","TWAC","CH","rear",100,7,7,7,7,7,1,1,1,1,1,1,705.9,144.23,228.3,7,7,7,7,7,1,1,1,1,1,1,689.03,144.23,173.02,0,0,0,0,0,0,0,0,0,0,-16.87,0,-55.28 +"default:fresh_default","bcfishpass:fresh","UFRA","CH","rear",100,6,6,3,3,3,1,0.5,0.5,0.5,0.25,0.5,1487.28,642.83,764.56,6,6,3,3,3,1,0.5,0.5,0.5,0.25,0.5,1243.66,632.76,726.73,0,0,0,0,0,0,0,0,0,0,-243.62,-10.07,-37.8299999999999 +"default:fresh_default","bcfishpass:fresh","UNRS","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UOMI","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UPCE","CH","rear",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","USKE","CH","rear",100,0,0,0,0,0,,,,,,,1528.86,498.83,733.99,0,0,0,0,0,,,,,,,1518.35,498.83,593.41,0,0,0,0,,,,,,,-10.51,0,-140.58 +"default:fresh_default","bcfishpass:fresh","WILL","CH","rear",100,42,42,40,41,41,1,0.952380952380952,0.976190476190476,0.976190476190476,0.833333333333333,0.976190476190476,3601.38,640.69,1364.26,42,42,40,41,41,1,0.952380952380952,0.976190476190476,0.976190476190476,0.833333333333333,0.976190476190476,3537.67,630.48,1029.73,0,0,0,0,0,0,0,0,0,0,-63.71,-10.21,-334.53 +"default:fresh_default","bcfishpass:fresh","ZYMO","CH","rear",100,5,4,0,1,1,0.8,0,0.2,0.2,0,0.2,1211.06,463.12,602.24,5,4,0,1,1,0.8,0,0.2,0.2,0,0.2,1200.73,462.91,539.94,0,0,0,0,0,0,0,0,0,0,-10.3299999999999,-0.20999999999998,-62.3 +"default:fresh_default","bcfishpass:fresh","BBAR","CH","spawn",100,0,0,0,0,0,,,,,,,275.36,160.2,169.06,0,0,0,0,0,,,,,,,269.11,160.2,167.83,0,0,0,0,,,,,,,-6.25,0,-1.22999999999999 +"default:fresh_default","bcfishpass:fresh","BULK","CH","spawn",100,16,16,16,16,16,1,1,1,1,,1,5178.19,1264.07,2038.12,16,16,16,16,16,1,1,1,1,,1,5089.63,1260.25,1730.12,0,0,0,0,0,0,0,0,,0,-88.5599999999995,-3.81999999999994,-308 +"default:fresh_default","bcfishpass:fresh","CARP","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","CHES","CH","spawn",100,3,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0.666666666666667,780.54,88.26,258.88,3,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0.666666666666667,750.66,88.26,149.77,0,0,0,0,0,0,0,0,0,0,-29.88,0,-109.11 +"default:fresh_default","bcfishpass:fresh","CHWK","CH","spawn",100,8,8,7,6,8,1,0.875,0.75,1,0.833333333333333,1,698.92,257.8,310.79,8,8,6,6,6,1,0.75,0.75,0.75,0.833333333333333,0.75,662.37,253.93,301.07,0,-1,0,-2,0,-0.125,0,-0.25,0,-0.25,-36.55,-3.87,-9.72000000000003 +"default:fresh_default","bcfishpass:fresh","COTR","CH","spawn",100,15,14,15,14,14,0.933333333333333,1,0.933333333333333,0.933333333333333,,0.933333333333333,4143.01,702.76,1364.58,15,14,13,13,13,0.933333333333333,0.866666666666667,0.866666666666667,0.866666666666667,,0.866666666666667,4119.15,694.8,1033.8,0,-2,-1,-1,0,-0.133333333333333,-0.0666666666666667,-0.0666666666666667,,-0.0666666666666667,-23.8600000000006,-7.96000000000004,-330.78 +"default:fresh_default","bcfishpass:fresh","CRKD","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","DOGC","CH","spawn",100,2,2,2,2,2,1,1,1,1,,1,358.78,162,196.9,2,2,2,2,2,1,1,1,1,,1,358.45,162,180.33,0,0,0,0,0,0,0,0,,0,-0.329999999999984,0,-16.57 +"default:fresh_default","bcfishpass:fresh","FINA","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FINL","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FIRE","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FOXR","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","FRAN","CH","spawn",100,4,4,4,3,4,1,1,0.75,1,,1,7351.32,597.53,1631.89,4,4,3,3,3,1,0.75,0.75,0.75,,0.75,7176.56,540.43,971.87,0,-1,0,-1,0,-0.25,0,-0.25,,-0.25,-174.759999999999,-57.1,-660.02 +"default:fresh_default","bcfishpass:fresh","FRCN","CH","spawn",100,5,5,5,3,3,1,1,0.6,0.6,,0.6,749.15,451.01,481.99,5,5,3,3,3,1,0.6,0.6,0.6,,0.6,716.2,428.99,474.71,0,-2,0,0,0,-0.4,0,0,,0,-32.9499999999999,-22.02,-7.28000000000003 +"default:fresh_default","bcfishpass:fresh","HARR","CH","spawn",100,4,4,4,3,3,1,1,0.75,0.75,,0.75,1148.93,329.59,385.83,4,4,3,3,3,1,0.75,0.75,0.75,,0.75,1126.73,327.72,377.22,0,-1,0,0,0,-0.25,0,0,,0,-22.2,-1.86999999999995,-8.60999999999996 +"default:fresh_default","bcfishpass:fresh","INGR","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","KISP","CH","spawn",100,30,30,30,25,26,1,1,0.833333333333333,0.866666666666667,,0.866666666666667,2841.44,862.28,1178.83,30,30,25,25,25,1,0.833333333333333,0.833333333333333,0.833333333333333,,0.833333333333333,2786.73,860.45,1050.59,0,-5,0,-1,0,-0.166666666666667,0,-0.0333333333333333,,-0.0333333333333333,-54.71,-1.82999999999993,-128.24 +"default:fresh_default","bcfishpass:fresh","KLUM","CH","spawn",100,20,19,20,18,19,0.95,1,0.9,0.95,,0.95,1523.16,708.12,905.48,20,19,17,18,18,0.95,0.85,0.9,0.9,,0.9,1481.08,707.93,830.68,0,-3,0,-1,0,-0.15,0,-0.0499999999999999,,-0.0499999999999999,-42.0800000000002,-0.190000000000055,-74.8000000000001 +"default:fresh_default","bcfishpass:fresh","LBTN","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LCHL","CH","spawn",100,2,2,2,2,2,1,1,1,1,,1,4358.83,468.47,1153.83,2,2,2,2,2,1,1,1,1,,1,4159.73,464.81,826.81,0,0,0,0,0,0,0,0,,0,-199.1,-3.66000000000003,-327.02 +"default:fresh_default","bcfishpass:fresh","LFRA","CH","spawn",100,10,10,10,10,10,1,1,1,1,,1,3074.38,826.28,1254.99,10,10,9,10,10,1,0.9,1,1,,1,2754.05,820.43,1176.68,0,-1,0,0,0,-0.1,0,0,,0,-320.33,-5.85000000000002,-78.31 +"default:fresh_default","bcfishpass:fresh","LKEL","CH","spawn",100,3,3,3,2,2,1,1,0.666666666666667,0.666666666666667,,0.666666666666667,332.18,106.7,162.87,3,3,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,,0.666666666666667,328.21,106.49,123.85,0,-1,0,0,0,-0.333333333333333,0,0,,0,-3.97000000000003,-0.210000000000008,-39.02 +"default:fresh_default","bcfishpass:fresh","LOMI","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LPCE","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","LSAL","CH","spawn",100,0,0,0,0,0,,,,,,,3029.07,317.62,1060.92,0,0,0,0,0,,,,,,,2968.08,312.6,617.6,0,0,0,0,,,,,,,-60.9900000000002,-5.01999999999998,-443.32 +"default:fresh_default","bcfishpass:fresh","LSKE","CH","spawn",100,24,23,24,22,22,0.958333333333333,1,0.916666666666667,0.916666666666667,,0.916666666666667,2101.75,1052.46,1308.55,24,23,21,22,22,0.958333333333333,0.875,0.916666666666667,0.916666666666667,,0.916666666666667,2086.32,1049.22,1167.34,0,-3,0,0,0,-0.125,0,0,,0,-15.4299999999998,-3.24000000000001,-141.21 +"default:fresh_default","bcfishpass:fresh","MESI","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","MFRA","CH","spawn",100,0,0,0,0,0,,,,,,,277.46,100.9,121.94,0,0,0,0,0,,,,,,,231.06,96.92,104.06,0,0,0,0,,,,,,,-46.4,-3.98,-17.88 +"default:fresh_default","bcfishpass:fresh","MORK","CH","spawn",100,25,25,25,23,24,1,1,0.92,0.96,,0.96,5953.1,1577.65,2499.11,25,25,22,22,22,1,0.88,0.88,0.88,,0.88,5705.82,1556.47,2225.04,0,-3,-1,-2,0,-0.12,-0.04,-0.08,,-0.08,-247.280000000001,-21.1800000000001,-274.07 +"default:fresh_default","bcfishpass:fresh","MORR","CH","spawn",100,9,9,9,7,9,1,1,0.777777777777778,1,,1,3341.35,646.28,1171.33,9,9,7,7,7,1,0.777777777777778,0.777777777777778,0.777777777777778,,0.777777777777778,3328.25,644.81,880.69,0,-2,0,-2,0,-0.222222222222222,0,-0.222222222222222,,-0.222222222222222,-13.0999999999999,-1.47000000000003,-290.64 +"default:fresh_default","bcfishpass:fresh","MSKE","CH","spawn",100,4,3,4,3,3,0.75,1,0.75,0.75,,0.75,1516.21,676.83,856.12,4,3,2,2,2,0.75,0.5,0.5,0.5,,0.5,1506.83,676.03,779.76,0,-2,-1,-1,0,-0.5,-0.25,-0.25,,-0.25,-9.38000000000011,-0.800000000000068,-76.36 +"default:fresh_default","bcfishpass:fresh","NARC","CH","spawn",100,9,9,9,9,9,1,1,1,1,,1,3563.45,506.51,1327.21,9,9,9,9,9,1,1,1,1,,1,2335,387.57,563.65,0,0,0,0,0,0,0,0,,0,-1228.45,-118.94,-763.56 +"default:fresh_default","bcfishpass:fresh","NATR","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","NECR","CH","spawn",100,9,9,9,9,9,1,1,1,1,,1,5608.47,516.15,1649.24,9,9,9,9,9,1,1,1,1,,1,5489.42,515.99,1079.18,0,0,0,0,0,0,0,0,,0,-119.05,-0.159999999999968,-570.06 +"default:fresh_default","bcfishpass:fresh","OSPK","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARA","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PARS","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PCEA","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","PINE","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","SALR","CH","spawn",100,4,4,4,4,4,1,1,1,1,,1,3174.7,234.92,966.25,4,4,4,4,4,1,1,1,1,,1,3134.03,206.59,442.55,0,0,0,0,0,0,0,0,,0,-40.6699999999996,-28.33,-523.7 +"default:fresh_default","bcfishpass:fresh","SETN","CH","spawn",100,17,17,16,16,16,1,0.941176470588235,0.941176470588235,0.941176470588235,0,0.941176470588235,1500.97,543.88,663.52,17,17,16,16,16,1,0.941176470588235,0.941176470588235,0.941176470588235,0,0.941176470588235,1497.15,537.97,609.35,0,0,0,0,0,0,0,0,0,0,-3.81999999999994,-5.90999999999997,-54.17 +"default:fresh_default","bcfishpass:fresh","TABR","CH","spawn",100,0,0,0,0,0,,,,,,,2633.55,410.85,789.94,0,0,0,0,0,,,,,,,2566.6,410.27,642.88,0,0,0,0,,,,,,,-66.9500000000003,-0.580000000000041,-147.06 +"default:fresh_default","bcfishpass:fresh","TOOD","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","TWAC","CH","spawn",100,0,0,0,0,0,,,,,,,705.9,144.23,228.3,0,0,0,0,0,,,,,,,689.03,144.23,173.02,0,0,0,0,,,,,,,-16.87,0,-55.28 +"default:fresh_default","bcfishpass:fresh","UFRA","CH","spawn",100,11,11,11,11,11,1,1,1,1,,1,1487.28,642.83,764.56,11,11,11,11,11,1,1,1,1,,1,1243.66,632.76,726.73,0,0,0,0,0,0,0,0,,0,-243.62,-10.07,-37.8299999999999 +"default:fresh_default","bcfishpass:fresh","UNRS","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UOMI","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","UPCE","CH","spawn",100,0,0,0,0,0,,,,,,,,,,0,0,0,0,0,,,,,,,,,,0,0,0,0,,,,,,,,, +"default:fresh_default","bcfishpass:fresh","USKE","CH","spawn",100,0,0,0,0,0,,,,,,,1528.86,498.83,733.99,0,0,0,0,0,,,,,,,1518.35,498.83,593.41,0,0,0,0,,,,,,,-10.51,0,-140.58 +"default:fresh_default","bcfishpass:fresh","WILL","CH","spawn",100,3,3,3,2,2,1,1,0.666666666666667,0.666666666666667,,0.666666666666667,3601.38,640.69,1364.26,3,3,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,,0.666666666666667,3537.67,630.48,1029.73,0,-1,0,0,0,-0.333333333333333,0,0,,0,-63.71,-10.21,-334.53 +"default:fresh_default","bcfishpass:fresh","ZYMO","CH","spawn",100,8,7,8,7,7,0.875,1,0.875,0.875,,0.875,1211.06,463.12,602.24,8,7,7,7,7,0.875,0.875,0.875,0.875,,0.875,1200.73,462.91,539.94,0,-1,0,0,0,-0.125,0,0,,0,-10.3299999999999,-0.20999999999998,-62.3 diff --git a/data-raw/logs/habitat_validate_283/misses.csv b/data-raw/logs/habitat_validate_283/misses.csv new file mode 100644 index 00000000..4136ee86 --- /dev/null +++ b/data-raw/logs/habitat_validate_283/misses.csv @@ -0,0 +1,89 @@ +"bundle","stage","species_code","reason","n" +"default:fresh_default","any","BT","captured",4207 +"default:fresh_default","rear","BT","captured",700 +"default:fresh_default","spawn","BT","captured",38 +"default:fresh_default","any","CH","captured",1577 +"default:fresh_default","rear","CH","captured",434 +"default:fresh_default","spawn","CH","captured",246 +"default:fresh_default","any","BT","fails_gradient",344 +"default:fresh_default","rear","BT","fails_gradient",123 +"default:fresh_default","spawn","BT","fails_gradient",21 +"default:fresh_default","any","CH","fails_gradient",51 +"default:fresh_default","rear","CH","fails_gradient",25 +"default:fresh_default","spawn","CH","fails_gradient",1 +"default:fresh_default","any","BT","fails_gradient_and_width",100 +"default:fresh_default","rear","BT","fails_gradient_and_width",37 +"default:fresh_default","spawn","BT","fails_gradient_and_width",6 +"default:fresh_default","any","CH","fails_gradient_and_width",8 +"default:fresh_default","rear","CH","fails_gradient_and_width",7 +"default:fresh_default","any","BT","fails_width",126 +"default:fresh_default","rear","BT","fails_width",61 +"default:fresh_default","spawn","BT","fails_width",5 +"default:fresh_default","any","CH","fails_width",10 +"default:fresh_default","rear","CH","fails_width",5 +"default:fresh_default","any","BT","not_accessible",42 +"default:fresh_default","rear","BT","not_accessible",13 +"default:fresh_default","spawn","BT","not_accessible",1 +"default:fresh_default","any","CH","not_accessible",27 +"default:fresh_default","rear","CH","not_accessible",10 +"default:fresh_default","spawn","CH","not_accessible",1 +"default:fresh_default","any","BT","post_predicate",89 +"default:fresh_default","rear","BT","post_predicate",47 +"default:fresh_default","any","CH","post_predicate",14 +"default:fresh_default","rear","CH","post_predicate",6 +"default:fresh_default","any","BT","rule_excludes",36 +"default:fresh_default","rear","BT","rule_excludes",11 +"default:fresh_default","spawn","BT","rule_excludes",6 +"default:fresh_default","any","CH","rule_excludes",11 +"default:fresh_default","rear","CH","rule_excludes",2 +"default:fresh_default","spawn","CH","rule_excludes",1 +"default:fresh_default","any","BT","width_null",160 +"default:fresh_default","rear","BT","width_null",61 +"default:fresh_default","spawn","BT","width_null",5 +"default:fresh_default","any","CH","width_null",47 +"default:fresh_default","rear","CH","width_null",23 +"default:fresh_default","spawn","CH","width_null",1 +"bcfishpass:fresh","any","BT","captured",4786 +"bcfishpass:fresh","rear","BT","captured",670 +"bcfishpass:fresh","spawn","BT","captured",41 +"bcfishpass:fresh","any","CH","captured",1722 +"bcfishpass:fresh","rear","CH","captured",519 +"bcfishpass:fresh","spawn","CH","captured",274 +"bcfishpass:fresh","any","BT","fails_gradient",276 +"bcfishpass:fresh","rear","BT","fails_gradient",101 +"bcfishpass:fresh","spawn","BT","fails_gradient",18 +"bcfishpass:fresh","any","CH","fails_gradient",75 +"bcfishpass:fresh","rear","CH","fails_gradient",28 +"bcfishpass:fresh","spawn","CH","fails_gradient",11 +"bcfishpass:fresh","any","BT","fails_gradient_and_width",74 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width",28 +"bcfishpass:fresh","spawn","BT","fails_gradient_and_width",5 +"bcfishpass:fresh","any","CH","fails_gradient_and_width",8 +"bcfishpass:fresh","rear","CH","fails_gradient_and_width",7 +"bcfishpass:fresh","spawn","CH","fails_gradient_and_width",1 +"bcfishpass:fresh","any","BT","fails_width",131 +"bcfishpass:fresh","rear","BT","fails_width",62 +"bcfishpass:fresh","spawn","BT","fails_width",5 +"bcfishpass:fresh","any","CH","fails_width",12 +"bcfishpass:fresh","rear","CH","fails_width",6 +"bcfishpass:fresh","spawn","CH","fails_width",2 +"bcfishpass:fresh","any","BT","not_accessible",181 +"bcfishpass:fresh","rear","BT","not_accessible",89 +"bcfishpass:fresh","spawn","BT","not_accessible",6 +"bcfishpass:fresh","any","CH","not_accessible",48 +"bcfishpass:fresh","rear","CH","not_accessible",15 +"bcfishpass:fresh","spawn","CH","not_accessible",7 +"bcfishpass:fresh","any","BT","post_predicate",71 +"bcfishpass:fresh","rear","BT","post_predicate",38 +"bcfishpass:fresh","any","CH","post_predicate",16 +"bcfishpass:fresh","rear","CH","post_predicate",7 +"bcfishpass:fresh","spawn","BT","rule_excludes",6 +"bcfishpass:fresh","any","CH","rule_excludes",66 +"bcfishpass:fresh","rear","CH","rule_excludes",7 +"bcfishpass:fresh","spawn","CH","rule_excludes",25 +"bcfishpass:fresh","any","BT","width_null",189 +"bcfishpass:fresh","rear","BT","width_null",64 +"bcfishpass:fresh","spawn","BT","width_null",5 +"bcfishpass:fresh","any","CH","width_null",52 +"bcfishpass:fresh","rear","CH","width_null",26 +"bcfishpass:fresh","spawn","CH","width_null",2 diff --git a/data-raw/logs/habitat_validate_283/misses_binned.csv b/data-raw/logs/habitat_validate_283/misses_binned.csv new file mode 100644 index 00000000..59b5958d --- /dev/null +++ b/data-raw/logs/habitat_validate_283/misses_binned.csv @@ -0,0 +1,853 @@ +"bundle","stage","species_code","reason","gradient_bin","width_bin","n" +"default:fresh_default","any","BT","fails_width","(-Inf,0.0025]","[0,1.5)",7 +"default:fresh_default","rear","BT","fails_width","(-Inf,0.0025]","[0,1.5)",3 +"default:fresh_default","any","CH","fails_width","(-Inf,0.0025]","[0,1.5)",4 +"default:fresh_default","rear","CH","fails_width","(-Inf,0.0025]","[0,1.5)",1 +"default:fresh_default","any","BT","rule_excludes","(-Inf,0.0025]","[0,1.5)",2 +"default:fresh_default","any","BT","fails_width","(0.0025,0.01]","[0,1.5)",2 +"default:fresh_default","any","CH","fails_width","(0.0025,0.01]","[0,1.5)",1 +"default:fresh_default","rear","CH","fails_width","(0.0025,0.01]","[0,1.5)",1 +"default:fresh_default","any","BT","post_predicate","(0.0025,0.01]","[0,1.5)",1 +"default:fresh_default","rear","BT","post_predicate","(0.0025,0.01]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_width","(0.01,0.02]","[0,1.5)",12 +"default:fresh_default","rear","BT","fails_width","(0.01,0.02]","[0,1.5)",5 +"default:fresh_default","spawn","BT","fails_width","(0.01,0.02]","[0,1.5)",1 +"default:fresh_default","any","CH","fails_width","(0.01,0.02]","[0,1.5)",3 +"default:fresh_default","rear","CH","fails_width","(0.01,0.02]","[0,1.5)",1 +"default:fresh_default","any","BT","post_predicate","(0.01,0.02]","[0,1.5)",1 +"default:fresh_default","rear","BT","post_predicate","(0.01,0.02]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_width","(0.02,0.03]","[0,1.5)",15 +"default:fresh_default","rear","BT","fails_width","(0.02,0.03]","[0,1.5)",5 +"default:fresh_default","any","CH","fails_width","(0.02,0.03]","[0,1.5)",1 +"default:fresh_default","rear","CH","fails_width","(0.02,0.03]","[0,1.5)",1 +"default:fresh_default","any","BT","rule_excludes","(0.02,0.03]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_width","(0.03,0.045]","[0,1.5)",28 +"default:fresh_default","rear","BT","fails_width","(0.03,0.045]","[0,1.5)",17 +"default:fresh_default","spawn","BT","fails_width","(0.03,0.045]","[0,1.5)",1 +"default:fresh_default","any","CH","fails_width","(0.03,0.045]","[0,1.5)",1 +"default:fresh_default","rear","CH","fails_width","(0.03,0.045]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_width","(0.045,0.055]","[0,1.5)",13 +"default:fresh_default","rear","BT","fails_width","(0.045,0.055]","[0,1.5)",8 +"default:fresh_default","spawn","BT","fails_gradient_and_width","(0.055,0.07]","[0,1.5)",1 +"default:fresh_default","any","CH","fails_gradient_and_width","(0.055,0.07]","[0,1.5)",2 +"default:fresh_default","rear","CH","fails_gradient_and_width","(0.055,0.07]","[0,1.5)",2 +"default:fresh_default","any","BT","fails_width","(0.055,0.07]","[0,1.5)",15 +"default:fresh_default","rear","BT","fails_width","(0.055,0.07]","[0,1.5)",4 +"default:fresh_default","spawn","BT","fails_gradient_and_width","(0.07,0.105]","[0,1.5)",2 +"default:fresh_default","any","CH","fails_gradient_and_width","(0.07,0.105]","[0,1.5)",1 +"default:fresh_default","rear","CH","fails_gradient_and_width","(0.07,0.105]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_width","(0.07,0.105]","[0,1.5)",34 +"default:fresh_default","rear","BT","fails_width","(0.07,0.105]","[0,1.5)",19 +"default:fresh_default","any","CH","not_accessible","(0.07,0.105]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.105,0.135]","[0,1.5)",12 +"default:fresh_default","rear","BT","fails_gradient_and_width","(0.105,0.135]","[0,1.5)",7 +"default:fresh_default","any","CH","fails_gradient_and_width","(0.105,0.135]","[0,1.5)",1 +"default:fresh_default","rear","CH","fails_gradient_and_width","(0.105,0.135]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.135,0.15]","[0,1.5)",6 +"default:fresh_default","rear","BT","fails_gradient_and_width","(0.135,0.15]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.15,0.2]","[0,1.5)",6 +"default:fresh_default","rear","BT","fails_gradient_and_width","(0.15,0.2]","[0,1.5)",3 +"default:fresh_default","spawn","BT","fails_gradient_and_width","(0.15,0.2]","[0,1.5)",1 +"default:fresh_default","any","BT","not_accessible","(0.15,0.2]","[0,1.5)",3 +"default:fresh_default","any","BT","post_predicate","(0.15,0.2]","[0,1.5)",1 +"default:fresh_default","rear","BT","post_predicate","(0.15,0.2]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.2,0.25]","[0,1.5)",4 +"default:fresh_default","spawn","BT","fails_gradient_and_width","(0.2,0.25]","[0,1.5)",1 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.25, Inf]","[0,1.5)",5 +"default:fresh_default","any","BT","rule_excludes","(-Inf,0.0025]","[1.5,2)",6 +"default:fresh_default","rear","BT","rule_excludes","(-Inf,0.0025]","[1.5,2)",2 +"default:fresh_default","spawn","BT","rule_excludes","(-Inf,0.0025]","[1.5,2)",1 +"default:fresh_default","any","CH","rule_excludes","(-Inf,0.0025]","[1.5,2)",1 +"default:fresh_default","any","CH","post_predicate","(0.0025,0.01]","[1.5,2)",1 +"default:fresh_default","rear","CH","post_predicate","(0.0025,0.01]","[1.5,2)",1 +"default:fresh_default","spawn","BT","fails_width","(0.01,0.02]","[1.5,2)",1 +"default:fresh_default","any","BT","post_predicate","(0.01,0.02]","[1.5,2)",3 +"default:fresh_default","rear","BT","post_predicate","(0.01,0.02]","[1.5,2)",2 +"default:fresh_default","spawn","BT","rule_excludes","(0.02,0.03]","[1.5,2)",1 +"default:fresh_default","spawn","BT","fails_width","(0.03,0.045]","[1.5,2)",1 +"default:fresh_default","any","BT","post_predicate","(0.03,0.045]","[1.5,2)",1 +"default:fresh_default","rear","BT","post_predicate","(0.03,0.045]","[1.5,2)",1 +"default:fresh_default","any","CH","post_predicate","(0.03,0.045]","[1.5,2)",1 +"default:fresh_default","spawn","BT","fails_width","(0.045,0.055]","[1.5,2)",1 +"default:fresh_default","any","CH","fails_gradient","(0.055,0.07]","[1.5,2)",2 +"default:fresh_default","rear","CH","fails_gradient","(0.055,0.07]","[1.5,2)",2 +"default:fresh_default","any","CH","not_accessible","(0.055,0.07]","[1.5,2)",1 +"default:fresh_default","rear","CH","not_accessible","(0.055,0.07]","[1.5,2)",1 +"default:fresh_default","any","BT","post_predicate","(0.055,0.07]","[1.5,2)",1 +"default:fresh_default","any","CH","fails_gradient","(0.07,0.105]","[1.5,2)",2 +"default:fresh_default","rear","CH","fails_gradient","(0.07,0.105]","[1.5,2)",2 +"default:fresh_default","spawn","BT","fails_gradient_and_width","(0.07,0.105]","[1.5,2)",1 +"default:fresh_default","any","BT","post_predicate","(0.07,0.105]","[1.5,2)",8 +"default:fresh_default","rear","BT","post_predicate","(0.07,0.105]","[1.5,2)",5 +"default:fresh_default","any","BT","fails_gradient","(0.105,0.135]","[1.5,2)",15 +"default:fresh_default","rear","BT","fails_gradient","(0.105,0.135]","[1.5,2)",8 +"default:fresh_default","any","BT","fails_gradient","(0.135,0.15]","[1.5,2)",3 +"default:fresh_default","rear","BT","fails_gradient","(0.135,0.15]","[1.5,2)",2 +"default:fresh_default","any","BT","fails_gradient","(0.15,0.2]","[1.5,2)",6 +"default:fresh_default","rear","BT","fails_gradient","(0.15,0.2]","[1.5,2)",4 +"default:fresh_default","any","BT","not_accessible","(0.15,0.2]","[1.5,2)",1 +"default:fresh_default","rear","BT","not_accessible","(0.15,0.2]","[1.5,2)",1 +"default:fresh_default","any","BT","fails_gradient","(0.2,0.25]","[1.5,2)",3 +"default:fresh_default","rear","BT","fails_gradient","(0.2,0.25]","[1.5,2)",2 +"default:fresh_default","any","BT","rule_excludes","(0.2,0.25]","[1.5,2)",1 +"default:fresh_default","any","BT","fails_gradient","(0.25, Inf]","[1.5,2)",4 +"default:fresh_default","rear","BT","fails_gradient","(0.25, Inf]","[1.5,2)",1 +"default:fresh_default","any","BT","not_accessible","(0.25, Inf]","[1.5,2)",1 +"default:fresh_default","rear","BT","not_accessible","(0.25, Inf]","[1.5,2)",1 +"default:fresh_default","any","BT","rule_excludes","(-Inf,0.0025]","[10,20)",3 +"default:fresh_default","rear","BT","rule_excludes","(-Inf,0.0025]","[10,20)",1 +"default:fresh_default","spawn","CH","rule_excludes","(-Inf,0.0025]","[10,20)",1 +"default:fresh_default","any","CH","not_accessible","(0.03,0.045]","[10,20)",2 +"default:fresh_default","any","BT","not_accessible","(0.045,0.055]","[10,20)",1 +"default:fresh_default","spawn","BT","fails_gradient","(0.055,0.07]","[10,20)",1 +"default:fresh_default","any","CH","fails_gradient","(0.055,0.07]","[10,20)",7 +"default:fresh_default","rear","CH","fails_gradient","(0.055,0.07]","[10,20)",1 +"default:fresh_default","any","BT","not_accessible","(0.055,0.07]","[10,20)",1 +"default:fresh_default","any","CH","fails_gradient","(0.07,0.105]","[10,20)",6 +"default:fresh_default","rear","CH","fails_gradient","(0.07,0.105]","[10,20)",1 +"default:fresh_default","any","CH","not_accessible","(0.07,0.105]","[10,20)",1 +"default:fresh_default","any","BT","post_predicate","(0.07,0.105]","[10,20)",4 +"default:fresh_default","rear","BT","post_predicate","(0.07,0.105]","[10,20)",2 +"default:fresh_default","any","BT","fails_gradient","(0.105,0.135]","[10,20)",21 +"default:fresh_default","rear","BT","fails_gradient","(0.105,0.135]","[10,20)",4 +"default:fresh_default","any","BT","not_accessible","(0.105,0.135]","[10,20)",1 +"default:fresh_default","any","CH","not_accessible","(0.105,0.135]","[10,20)",1 +"default:fresh_default","any","BT","fails_gradient","(0.135,0.15]","[10,20)",5 +"default:fresh_default","rear","BT","fails_gradient","(0.135,0.15]","[10,20)",2 +"default:fresh_default","any","CH","fails_gradient","(0.135,0.15]","[10,20)",1 +"default:fresh_default","rear","CH","fails_gradient","(0.135,0.15]","[10,20)",1 +"default:fresh_default","any","BT","not_accessible","(0.135,0.15]","[10,20)",1 +"default:fresh_default","spawn","BT","not_accessible","(0.135,0.15]","[10,20)",1 +"default:fresh_default","any","BT","fails_gradient","(0.15,0.2]","[10,20)",6 +"default:fresh_default","rear","BT","fails_gradient","(0.15,0.2]","[10,20)",1 +"default:fresh_default","any","BT","fails_gradient","(0.2,0.25]","[10,20)",1 +"default:fresh_default","any","BT","not_accessible","(0.2,0.25]","[10,20)",1 +"default:fresh_default","any","BT","fails_gradient","(0.25, Inf]","[10,20)",5 +"default:fresh_default","rear","BT","fails_gradient","(0.25, Inf]","[10,20)",3 +"default:fresh_default","any","BT","not_accessible","(0.25, Inf]","[10,20)",1 +"default:fresh_default","any","CH","not_accessible","(0.25, Inf]","[10,20)",1 +"default:fresh_default","rear","CH","not_accessible","(0.25, Inf]","[10,20)",1 +"default:fresh_default","any","BT","rule_excludes","(-Inf,0.0025]","[2,3)",6 +"default:fresh_default","rear","BT","rule_excludes","(-Inf,0.0025]","[2,3)",1 +"default:fresh_default","any","CH","rule_excludes","(-Inf,0.0025]","[2,3)",1 +"default:fresh_default","any","CH","post_predicate","(0.01,0.02]","[2,3)",2 +"default:fresh_default","any","CH","not_accessible","(0.02,0.03]","[2,3)",1 +"default:fresh_default","any","CH","post_predicate","(0.02,0.03]","[2,3)",4 +"default:fresh_default","rear","CH","post_predicate","(0.02,0.03]","[2,3)",3 +"default:fresh_default","spawn","BT","rule_excludes","(0.02,0.03]","[2,3)",1 +"default:fresh_default","any","CH","not_accessible","(0.03,0.045]","[2,3)",1 +"default:fresh_default","rear","CH","not_accessible","(0.03,0.045]","[2,3)",1 +"default:fresh_default","any","CH","post_predicate","(0.03,0.045]","[2,3)",1 +"default:fresh_default","rear","CH","post_predicate","(0.03,0.045]","[2,3)",1 +"default:fresh_default","any","CH","post_predicate","(0.045,0.055]","[2,3)",1 +"default:fresh_default","rear","CH","post_predicate","(0.045,0.055]","[2,3)",1 +"default:fresh_default","spawn","BT","fails_gradient","(0.055,0.07]","[2,3)",1 +"default:fresh_default","any","CH","fails_gradient","(0.055,0.07]","[2,3)",4 +"default:fresh_default","rear","CH","fails_gradient","(0.055,0.07]","[2,3)",3 +"default:fresh_default","any","BT","post_predicate","(0.055,0.07]","[2,3)",4 +"default:fresh_default","rear","BT","post_predicate","(0.055,0.07]","[2,3)",1 +"default:fresh_default","spawn","BT","fails_gradient","(0.07,0.105]","[2,3)",3 +"default:fresh_default","any","CH","fails_gradient","(0.07,0.105]","[2,3)",4 +"default:fresh_default","rear","CH","fails_gradient","(0.07,0.105]","[2,3)",4 +"default:fresh_default","any","BT","post_predicate","(0.07,0.105]","[2,3)",17 +"default:fresh_default","rear","BT","post_predicate","(0.07,0.105]","[2,3)",7 +"default:fresh_default","any","BT","fails_gradient","(0.105,0.135]","[2,3)",33 +"default:fresh_default","rear","BT","fails_gradient","(0.105,0.135]","[2,3)",23 +"default:fresh_default","spawn","BT","fails_gradient","(0.105,0.135]","[2,3)",3 +"default:fresh_default","any","CH","fails_gradient","(0.105,0.135]","[2,3)",1 +"default:fresh_default","any","BT","not_accessible","(0.105,0.135]","[2,3)",1 +"default:fresh_default","rear","BT","not_accessible","(0.105,0.135]","[2,3)",1 +"default:fresh_default","any","BT","fails_gradient","(0.135,0.15]","[2,3)",4 +"default:fresh_default","rear","BT","fails_gradient","(0.135,0.15]","[2,3)",2 +"default:fresh_default","any","BT","fails_gradient","(0.15,0.2]","[2,3)",10 +"default:fresh_default","rear","BT","fails_gradient","(0.15,0.2]","[2,3)",7 +"default:fresh_default","spawn","BT","fails_gradient","(0.15,0.2]","[2,3)",1 +"default:fresh_default","any","CH","fails_gradient","(0.15,0.2]","[2,3)",1 +"default:fresh_default","rear","CH","fails_gradient","(0.15,0.2]","[2,3)",1 +"default:fresh_default","any","BT","not_accessible","(0.15,0.2]","[2,3)",1 +"default:fresh_default","any","CH","not_accessible","(0.15,0.2]","[2,3)",1 +"default:fresh_default","rear","CH","not_accessible","(0.15,0.2]","[2,3)",1 +"default:fresh_default","any","BT","fails_gradient","(0.2,0.25]","[2,3)",3 +"default:fresh_default","rear","BT","fails_gradient","(0.2,0.25]","[2,3)",1 +"default:fresh_default","any","BT","not_accessible","(0.2,0.25]","[2,3)",1 +"default:fresh_default","rear","BT","not_accessible","(0.2,0.25]","[2,3)",1 +"default:fresh_default","any","BT","fails_gradient","(0.25, Inf]","[2,3)",6 +"default:fresh_default","rear","BT","fails_gradient","(0.25, Inf]","[2,3)",2 +"default:fresh_default","any","BT","not_accessible","(0.25, Inf]","[2,3)",4 +"default:fresh_default","rear","BT","not_accessible","(0.25, Inf]","[2,3)",1 +"default:fresh_default","any","CH","not_accessible","(-Inf,0.0025]","[20,Inf)",1 +"default:fresh_default","any","BT","rule_excludes","(-Inf,0.0025]","[20,Inf)",1 +"default:fresh_default","spawn","BT","rule_excludes","(-Inf,0.0025]","[20,Inf)",1 +"default:fresh_default","any","CH","rule_excludes","(-Inf,0.0025]","[20,Inf)",4 +"default:fresh_default","rear","CH","rule_excludes","(-Inf,0.0025]","[20,Inf)",2 +"default:fresh_default","any","CH","not_accessible","(0.01,0.02]","[20,Inf)",1 +"default:fresh_default","any","CH","fails_gradient","(0.055,0.07]","[20,Inf)",2 +"default:fresh_default","any","BT","post_predicate","(0.055,0.07]","[20,Inf)",2 +"default:fresh_default","rear","BT","post_predicate","(0.055,0.07]","[20,Inf)",1 +"default:fresh_default","any","CH","fails_gradient","(0.07,0.105]","[20,Inf)",2 +"default:fresh_default","any","CH","not_accessible","(0.07,0.105]","[20,Inf)",1 +"default:fresh_default","spawn","CH","not_accessible","(0.07,0.105]","[20,Inf)",1 +"default:fresh_default","any","BT","fails_gradient","(0.105,0.135]","[20,Inf)",2 +"default:fresh_default","rear","BT","fails_gradient","(0.105,0.135]","[20,Inf)",1 +"default:fresh_default","any","BT","not_accessible","(0.105,0.135]","[20,Inf)",1 +"default:fresh_default","any","BT","fails_gradient","(0.135,0.15]","[20,Inf)",2 +"default:fresh_default","any","BT","not_accessible","(0.135,0.15]","[20,Inf)",1 +"default:fresh_default","any","CH","not_accessible","(0.135,0.15]","[20,Inf)",1 +"default:fresh_default","any","BT","fails_gradient","(0.15,0.2]","[20,Inf)",1 +"default:fresh_default","rear","BT","fails_gradient","(0.15,0.2]","[20,Inf)",1 +"default:fresh_default","any","CH","fails_gradient","(0.15,0.2]","[20,Inf)",1 +"default:fresh_default","spawn","CH","fails_gradient","(0.15,0.2]","[20,Inf)",1 +"default:fresh_default","any","CH","not_accessible","(0.15,0.2]","[20,Inf)",1 +"default:fresh_default","rear","CH","fails_gradient","(0.2,0.25]","[20,Inf)",1 +"default:fresh_default","any","BT","fails_gradient","(0.25, Inf]","[20,Inf)",1 +"default:fresh_default","any","CH","not_accessible","(-Inf,0.0025]","[3,4)",1 +"default:fresh_default","any","BT","rule_excludes","(-Inf,0.0025]","[3,4)",1 +"default:fresh_default","any","CH","rule_excludes","(-Inf,0.0025]","[3,4)",1 +"default:fresh_default","any","CH","post_predicate","(0.0025,0.01]","[3,4)",1 +"default:fresh_default","any","CH","post_predicate","(0.01,0.02]","[3,4)",2 +"default:fresh_default","spawn","BT","fails_gradient","(0.055,0.07]","[3,4)",1 +"default:fresh_default","any","CH","fails_gradient","(0.055,0.07]","[3,4)",1 +"default:fresh_default","rear","CH","fails_gradient","(0.055,0.07]","[3,4)",1 +"default:fresh_default","any","BT","post_predicate","(0.055,0.07]","[3,4)",2 +"default:fresh_default","rear","BT","post_predicate","(0.055,0.07]","[3,4)",2 +"default:fresh_default","any","BT","fails_gradient","(0.07,0.105]","[3,4)",1 +"default:fresh_default","spawn","BT","fails_gradient","(0.07,0.105]","[3,4)",2 +"default:fresh_default","any","BT","post_predicate","(0.07,0.105]","[3,4)",10 +"default:fresh_default","rear","BT","post_predicate","(0.07,0.105]","[3,4)",5 +"default:fresh_default","any","BT","fails_gradient","(0.105,0.135]","[3,4)",31 +"default:fresh_default","rear","BT","fails_gradient","(0.105,0.135]","[3,4)",10 +"default:fresh_default","any","BT","fails_gradient","(0.135,0.15]","[3,4)",6 +"default:fresh_default","rear","BT","fails_gradient","(0.135,0.15]","[3,4)",3 +"default:fresh_default","any","BT","fails_gradient","(0.15,0.2]","[3,4)",10 +"default:fresh_default","rear","BT","fails_gradient","(0.15,0.2]","[3,4)",3 +"default:fresh_default","any","CH","not_accessible","(0.15,0.2]","[3,4)",1 +"default:fresh_default","rear","CH","not_accessible","(0.15,0.2]","[3,4)",1 +"default:fresh_default","any","BT","fails_gradient","(0.2,0.25]","[3,4)",2 +"default:fresh_default","spawn","BT","fails_gradient","(0.2,0.25]","[3,4)",1 +"default:fresh_default","any","BT","not_accessible","(0.2,0.25]","[3,4)",1 +"default:fresh_default","rear","BT","not_accessible","(0.2,0.25]","[3,4)",1 +"default:fresh_default","any","BT","fails_gradient","(0.25, Inf]","[3,4)",5 +"default:fresh_default","any","CH","fails_gradient","(0.25, Inf]","[3,4)",1 +"default:fresh_default","any","BT","rule_excludes","(-Inf,0.0025]","[4,6)",2 +"default:fresh_default","rear","BT","rule_excludes","(-Inf,0.0025]","[4,6)",1 +"default:fresh_default","spawn","BT","rule_excludes","(-Inf,0.0025]","[4,6)",1 +"default:fresh_default","any","CH","rule_excludes","(-Inf,0.0025]","[4,6)",1 +"default:fresh_default","any","CH","not_accessible","(0.0025,0.01]","[4,6)",1 +"default:fresh_default","rear","CH","not_accessible","(0.0025,0.01]","[4,6)",1 +"default:fresh_default","any","BT","not_accessible","(0.03,0.045]","[4,6)",1 +"default:fresh_default","spawn","BT","fails_gradient","(0.055,0.07]","[4,6)",2 +"default:fresh_default","any","CH","fails_gradient","(0.055,0.07]","[4,6)",1 +"default:fresh_default","rear","CH","fails_gradient","(0.055,0.07]","[4,6)",1 +"default:fresh_default","any","BT","not_accessible","(0.055,0.07]","[4,6)",1 +"default:fresh_default","any","BT","post_predicate","(0.055,0.07]","[4,6)",4 +"default:fresh_default","spawn","BT","fails_gradient","(0.07,0.105]","[4,6)",1 +"default:fresh_default","any","CH","fails_gradient","(0.07,0.105]","[4,6)",2 +"default:fresh_default","rear","CH","fails_gradient","(0.07,0.105]","[4,6)",1 +"default:fresh_default","any","BT","post_predicate","(0.07,0.105]","[4,6)",7 +"default:fresh_default","rear","BT","post_predicate","(0.07,0.105]","[4,6)",4 +"default:fresh_default","any","BT","fails_gradient","(0.105,0.135]","[4,6)",27 +"default:fresh_default","rear","BT","fails_gradient","(0.105,0.135]","[4,6)",7 +"default:fresh_default","spawn","BT","fails_gradient","(0.105,0.135]","[4,6)",2 +"default:fresh_default","any","CH","fails_gradient","(0.105,0.135]","[4,6)",1 +"default:fresh_default","any","BT","fails_gradient","(0.135,0.15]","[4,6)",9 +"default:fresh_default","rear","BT","fails_gradient","(0.135,0.15]","[4,6)",3 +"default:fresh_default","any","BT","fails_gradient","(0.15,0.2]","[4,6)",8 +"default:fresh_default","rear","BT","fails_gradient","(0.15,0.2]","[4,6)",3 +"default:fresh_default","any","BT","fails_gradient","(0.2,0.25]","[4,6)",6 +"default:fresh_default","rear","BT","fails_gradient","(0.2,0.25]","[4,6)",1 +"default:fresh_default","any","BT","fails_gradient","(0.25, Inf]","[4,6)",5 +"default:fresh_default","rear","BT","fails_gradient","(0.25, Inf]","[4,6)",1 +"default:fresh_default","any","BT","not_accessible","(0.25, Inf]","[4,6)",5 +"default:fresh_default","rear","BT","not_accessible","(0.25, Inf]","[4,6)",1 +"default:fresh_default","any","CH","not_accessible","(-Inf,0.0025]","[6,10)",1 +"default:fresh_default","rear","CH","not_accessible","(-Inf,0.0025]","[6,10)",1 +"default:fresh_default","any","CH","rule_excludes","(-Inf,0.0025]","[6,10)",1 +"default:fresh_default","any","CH","not_accessible","(0.02,0.03]","[6,10)",1 +"default:fresh_default","any","CH","post_predicate","(0.045,0.055]","[6,10)",1 +"default:fresh_default","any","CH","fails_gradient","(0.055,0.07]","[6,10)",5 +"default:fresh_default","rear","CH","fails_gradient","(0.055,0.07]","[6,10)",4 +"default:fresh_default","any","BT","not_accessible","(0.055,0.07]","[6,10)",2 +"default:fresh_default","any","BT","post_predicate","(0.055,0.07]","[6,10)",5 +"default:fresh_default","rear","BT","post_predicate","(0.055,0.07]","[6,10)",2 +"default:fresh_default","any","BT","fails_gradient","(0.07,0.105]","[6,10)",1 +"default:fresh_default","rear","BT","fails_gradient","(0.07,0.105]","[6,10)",1 +"default:fresh_default","spawn","BT","fails_gradient","(0.07,0.105]","[6,10)",1 +"default:fresh_default","any","CH","fails_gradient","(0.07,0.105]","[6,10)",7 +"default:fresh_default","rear","CH","fails_gradient","(0.07,0.105]","[6,10)",2 +"default:fresh_default","any","BT","not_accessible","(0.07,0.105]","[6,10)",1 +"default:fresh_default","any","BT","post_predicate","(0.07,0.105]","[6,10)",17 +"default:fresh_default","rear","BT","post_predicate","(0.07,0.105]","[6,10)",11 +"default:fresh_default","any","BT","fails_gradient","(0.105,0.135]","[6,10)",48 +"default:fresh_default","rear","BT","fails_gradient","(0.105,0.135]","[6,10)",15 +"default:fresh_default","any","BT","fails_gradient","(0.135,0.15]","[6,10)",12 +"default:fresh_default","rear","BT","fails_gradient","(0.135,0.15]","[6,10)",1 +"default:fresh_default","any","BT","fails_gradient","(0.15,0.2]","[6,10)",24 +"default:fresh_default","rear","BT","fails_gradient","(0.15,0.2]","[6,10)",6 +"default:fresh_default","any","BT","not_accessible","(0.15,0.2]","[6,10)",2 +"default:fresh_default","rear","BT","not_accessible","(0.15,0.2]","[6,10)",1 +"default:fresh_default","any","CH","not_accessible","(0.15,0.2]","[6,10)",1 +"default:fresh_default","any","BT","fails_gradient","(0.2,0.25]","[6,10)",10 +"default:fresh_default","rear","BT","fails_gradient","(0.2,0.25]","[6,10)",3 +"default:fresh_default","spawn","BT","fails_gradient","(0.2,0.25]","[6,10)",2 +"default:fresh_default","any","BT","fails_gradient","(0.25, Inf]","[6,10)",8 +"default:fresh_default","rear","BT","fails_gradient","(0.25, Inf]","[6,10)",2 +"default:fresh_default","any","BT","not_accessible","(0.25, Inf]","[6,10)",2 +"default:fresh_default","any","CH","not_accessible","(0.25, Inf]","[6,10)",1 +"default:fresh_default","any","CH","not_accessible","(-Inf,0.0025]","NULL",1 +"default:fresh_default","rear","CH","not_accessible","(-Inf,0.0025]","NULL",1 +"default:fresh_default","any","BT","rule_excludes","(-Inf,0.0025]","NULL",10 +"default:fresh_default","rear","BT","rule_excludes","(-Inf,0.0025]","NULL",6 +"default:fresh_default","spawn","BT","rule_excludes","(-Inf,0.0025]","NULL",1 +"default:fresh_default","any","CH","rule_excludes","(-Inf,0.0025]","NULL",2 +"default:fresh_default","any","BT","width_null","(-Inf,0.0025]","NULL",34 +"default:fresh_default","rear","BT","width_null","(-Inf,0.0025]","NULL",5 +"default:fresh_default","spawn","BT","width_null","(-Inf,0.0025]","NULL",1 +"default:fresh_default","any","CH","width_null","(-Inf,0.0025]","NULL",24 +"default:fresh_default","rear","CH","width_null","(-Inf,0.0025]","NULL",10 +"default:fresh_default","any","BT","width_null","(0.0025,0.01]","NULL",21 +"default:fresh_default","rear","BT","width_null","(0.0025,0.01]","NULL",3 +"default:fresh_default","any","CH","width_null","(0.0025,0.01]","NULL",6 +"default:fresh_default","rear","CH","width_null","(0.0025,0.01]","NULL",4 +"default:fresh_default","any","BT","width_null","(0.01,0.02]","NULL",16 +"default:fresh_default","rear","BT","width_null","(0.01,0.02]","NULL",5 +"default:fresh_default","spawn","BT","width_null","(0.01,0.02]","NULL",3 +"default:fresh_default","any","CH","width_null","(0.01,0.02]","NULL",7 +"default:fresh_default","rear","CH","width_null","(0.01,0.02]","NULL",2 +"default:fresh_default","spawn","CH","width_null","(0.01,0.02]","NULL",1 +"default:fresh_default","any","BT","width_null","(0.02,0.03]","NULL",11 +"default:fresh_default","rear","BT","width_null","(0.02,0.03]","NULL",9 +"default:fresh_default","any","CH","width_null","(0.02,0.03]","NULL",4 +"default:fresh_default","rear","CH","width_null","(0.02,0.03]","NULL",3 +"default:fresh_default","any","BT","rule_excludes","(0.03,0.045]","NULL",1 +"default:fresh_default","any","BT","width_null","(0.03,0.045]","NULL",19 +"default:fresh_default","rear","BT","width_null","(0.03,0.045]","NULL",10 +"default:fresh_default","spawn","BT","width_null","(0.03,0.045]","NULL",1 +"default:fresh_default","any","CH","width_null","(0.03,0.045]","NULL",5 +"default:fresh_default","rear","CH","width_null","(0.03,0.045]","NULL",3 +"default:fresh_default","any","BT","post_predicate","(0.045,0.055]","NULL",1 +"default:fresh_default","rear","BT","post_predicate","(0.045,0.055]","NULL",1 +"default:fresh_default","any","BT","rule_excludes","(0.045,0.055]","NULL",2 +"default:fresh_default","any","BT","width_null","(0.045,0.055]","NULL",10 +"default:fresh_default","rear","BT","width_null","(0.045,0.055]","NULL",4 +"default:fresh_default","any","CH","width_null","(0.045,0.055]","NULL",1 +"default:fresh_default","rear","CH","width_null","(0.045,0.055]","NULL",1 +"default:fresh_default","any","CH","fails_gradient_and_width","(0.055,0.07]","NULL",4 +"default:fresh_default","rear","CH","fails_gradient_and_width","(0.055,0.07]","NULL",3 +"default:fresh_default","any","CH","not_accessible","(0.055,0.07]","NULL",1 +"default:fresh_default","rear","CH","not_accessible","(0.055,0.07]","NULL",1 +"default:fresh_default","any","BT","width_null","(0.055,0.07]","NULL",14 +"default:fresh_default","rear","BT","width_null","(0.055,0.07]","NULL",8 +"default:fresh_default","any","CH","not_accessible","(0.07,0.105]","NULL",1 +"default:fresh_default","rear","CH","not_accessible","(0.07,0.105]","NULL",1 +"default:fresh_default","any","BT","width_null","(0.07,0.105]","NULL",35 +"default:fresh_default","rear","BT","width_null","(0.07,0.105]","NULL",17 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.105,0.135]","NULL",19 +"default:fresh_default","rear","BT","fails_gradient_and_width","(0.105,0.135]","NULL",6 +"default:fresh_default","any","BT","not_accessible","(0.105,0.135]","NULL",1 +"default:fresh_default","rear","BT","not_accessible","(0.105,0.135]","NULL",1 +"default:fresh_default","any","CH","not_accessible","(0.105,0.135]","NULL",1 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.135,0.15]","NULL",9 +"default:fresh_default","rear","BT","fails_gradient_and_width","(0.135,0.15]","NULL",3 +"default:fresh_default","any","BT","not_accessible","(0.135,0.15]","NULL",1 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.15,0.2]","NULL",12 +"default:fresh_default","rear","BT","fails_gradient_and_width","(0.15,0.2]","NULL",4 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.2,0.25]","NULL",5 +"default:fresh_default","rear","BT","fails_gradient_and_width","(0.2,0.25]","NULL",3 +"default:fresh_default","any","BT","not_accessible","(0.2,0.25]","NULL",1 +"default:fresh_default","rear","BT","not_accessible","(0.2,0.25]","NULL",1 +"default:fresh_default","any","BT","fails_gradient_and_width","(0.25, Inf]","NULL",22 +"default:fresh_default","rear","BT","fails_gradient_and_width","(0.25, Inf]","NULL",10 +"default:fresh_default","any","BT","not_accessible","(0.25, Inf]","NULL",4 +"default:fresh_default","rear","BT","not_accessible","(0.25, Inf]","NULL",3 +"default:fresh_default","any","CH","not_accessible","(0.25, Inf]","NULL",1 +"bcfishpass:fresh","any","BT","fails_width","(-Inf,0.0025]","[0,1.5)",14 +"bcfishpass:fresh","rear","BT","fails_width","(-Inf,0.0025]","[0,1.5)",5 +"bcfishpass:fresh","any","CH","fails_width","(-Inf,0.0025]","[0,1.5)",4 +"bcfishpass:fresh","rear","CH","fails_width","(-Inf,0.0025]","[0,1.5)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","[0,1.5)",4 +"bcfishpass:fresh","rear","CH","rule_excludes","(-Inf,0.0025]","[0,1.5)",1 +"bcfishpass:fresh","spawn","CH","rule_excludes","(-Inf,0.0025]","[0,1.5)",2 +"bcfishpass:fresh","any","BT","fails_width","(0.0025,0.01]","[0,1.5)",5 +"bcfishpass:fresh","rear","BT","fails_width","(0.0025,0.01]","[0,1.5)",1 +"bcfishpass:fresh","any","CH","fails_width","(0.0025,0.01]","[0,1.5)",1 +"bcfishpass:fresh","rear","CH","fails_width","(0.0025,0.01]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","fails_width","(0.01,0.02]","[0,1.5)",16 +"bcfishpass:fresh","rear","BT","fails_width","(0.01,0.02]","[0,1.5)",7 +"bcfishpass:fresh","spawn","BT","fails_width","(0.01,0.02]","[0,1.5)",1 +"bcfishpass:fresh","any","CH","fails_width","(0.01,0.02]","[0,1.5)",4 +"bcfishpass:fresh","rear","CH","fails_width","(0.01,0.02]","[0,1.5)",2 +"bcfishpass:fresh","any","BT","fails_width","(0.02,0.03]","[0,1.5)",14 +"bcfishpass:fresh","rear","BT","fails_width","(0.02,0.03]","[0,1.5)",5 +"bcfishpass:fresh","any","CH","fails_width","(0.02,0.03]","[0,1.5)",1 +"bcfishpass:fresh","rear","CH","fails_width","(0.02,0.03]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","fails_width","(0.03,0.045]","[0,1.5)",23 +"bcfishpass:fresh","rear","BT","fails_width","(0.03,0.045]","[0,1.5)",15 +"bcfishpass:fresh","spawn","BT","fails_width","(0.03,0.045]","[0,1.5)",1 +"bcfishpass:fresh","any","CH","fails_width","(0.03,0.045]","[0,1.5)",2 +"bcfishpass:fresh","rear","CH","fails_width","(0.03,0.045]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.03,0.045]","[0,1.5)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.03,0.045]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","fails_width","(0.045,0.055]","[0,1.5)",12 +"bcfishpass:fresh","rear","BT","fails_width","(0.045,0.055]","[0,1.5)",8 +"bcfishpass:fresh","spawn","BT","fails_gradient_and_width","(0.055,0.07]","[0,1.5)",1 +"bcfishpass:fresh","any","CH","fails_gradient_and_width","(0.055,0.07]","[0,1.5)",2 +"bcfishpass:fresh","rear","CH","fails_gradient_and_width","(0.055,0.07]","[0,1.5)",2 +"bcfishpass:fresh","any","BT","fails_width","(0.055,0.07]","[0,1.5)",14 +"bcfishpass:fresh","rear","BT","fails_width","(0.055,0.07]","[0,1.5)",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.055,0.07]","[0,1.5)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.055,0.07]","[0,1.5)",1 +"bcfishpass:fresh","spawn","BT","fails_gradient_and_width","(0.07,0.105]","[0,1.5)",2 +"bcfishpass:fresh","any","CH","fails_gradient_and_width","(0.07,0.105]","[0,1.5)",1 +"bcfishpass:fresh","rear","CH","fails_gradient_and_width","(0.07,0.105]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","fails_width","(0.07,0.105]","[0,1.5)",33 +"bcfishpass:fresh","rear","BT","fails_width","(0.07,0.105]","[0,1.5)",18 +"bcfishpass:fresh","any","BT","not_accessible","(0.07,0.105]","[0,1.5)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.07,0.105]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.105,0.135]","[0,1.5)",10 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width","(0.105,0.135]","[0,1.5)",7 +"bcfishpass:fresh","any","CH","fails_gradient_and_width","(0.105,0.135]","[0,1.5)",1 +"bcfishpass:fresh","rear","CH","fails_gradient_and_width","(0.105,0.135]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.135,0.15]","[0,1.5)",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.135,0.15]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.15,0.2]","[0,1.5)",5 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width","(0.15,0.2]","[0,1.5)",3 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.2,0.25]","[0,1.5)",2 +"bcfishpass:fresh","spawn","BT","fails_gradient_and_width","(0.2,0.25]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.2,0.25]","[0,1.5)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.2,0.25]","[0,1.5)",1 +"bcfishpass:fresh","spawn","BT","not_accessible","(0.2,0.25]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.25, Inf]","[0,1.5)",3 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width","(0.25, Inf]","[0,1.5)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.25, Inf]","[0,1.5)",2 +"bcfishpass:fresh","any","BT","not_accessible","(-Inf,0.0025]","[1.5,2)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(-Inf,0.0025]","[1.5,2)",2 +"bcfishpass:fresh","any","BT","post_predicate","(-Inf,0.0025]","[1.5,2)",1 +"bcfishpass:fresh","rear","BT","post_predicate","(-Inf,0.0025]","[1.5,2)",1 +"bcfishpass:fresh","spawn","BT","rule_excludes","(-Inf,0.0025]","[1.5,2)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","[1.5,2)",3 +"bcfishpass:fresh","rear","CH","rule_excludes","(-Inf,0.0025]","[1.5,2)",1 +"bcfishpass:fresh","spawn","CH","rule_excludes","(-Inf,0.0025]","[1.5,2)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.0025,0.01]","[1.5,2)",1 +"bcfishpass:fresh","rear","CH","post_predicate","(0.0025,0.01]","[1.5,2)",1 +"bcfishpass:fresh","spawn","BT","fails_width","(0.01,0.02]","[1.5,2)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.01,0.02]","[1.5,2)",3 +"bcfishpass:fresh","rear","BT","post_predicate","(0.01,0.02]","[1.5,2)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.02,0.03]","[1.5,2)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.02,0.03]","[1.5,2)",1 +"bcfishpass:fresh","spawn","BT","rule_excludes","(0.02,0.03]","[1.5,2)",1 +"bcfishpass:fresh","spawn","BT","fails_width","(0.03,0.045]","[1.5,2)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.03,0.045]","[1.5,2)",1 +"bcfishpass:fresh","spawn","BT","fails_width","(0.045,0.055]","[1.5,2)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.045,0.055]","[1.5,2)",1 +"bcfishpass:fresh","rear","BT","post_predicate","(0.045,0.055]","[1.5,2)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.055,0.07]","[1.5,2)",2 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.055,0.07]","[1.5,2)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.055,0.07]","[1.5,2)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.055,0.07]","[1.5,2)",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.055,0.07]","[1.5,2)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.055,0.07]","[1.5,2)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.07,0.105]","[1.5,2)",3 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.07,0.105]","[1.5,2)",3 +"bcfishpass:fresh","spawn","BT","fails_gradient_and_width","(0.07,0.105]","[1.5,2)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.07,0.105]","[1.5,2)",3 +"bcfishpass:fresh","rear","BT","not_accessible","(0.07,0.105]","[1.5,2)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.07,0.105]","[1.5,2)",7 +"bcfishpass:fresh","rear","BT","post_predicate","(0.07,0.105]","[1.5,2)",4 +"bcfishpass:fresh","any","BT","fails_gradient","(0.105,0.135]","[1.5,2)",13 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.105,0.135]","[1.5,2)",9 +"bcfishpass:fresh","any","BT","fails_gradient","(0.135,0.15]","[1.5,2)",3 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.135,0.15]","[1.5,2)",2 +"bcfishpass:fresh","any","BT","fails_gradient","(0.15,0.2]","[1.5,2)",5 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.15,0.2]","[1.5,2)",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.15,0.2]","[1.5,2)",5 +"bcfishpass:fresh","rear","BT","not_accessible","(0.15,0.2]","[1.5,2)",4 +"bcfishpass:fresh","any","BT","fails_gradient","(0.2,0.25]","[1.5,2)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.2,0.25]","[1.5,2)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.2,0.25]","[1.5,2)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.25, Inf]","[1.5,2)",2 +"bcfishpass:fresh","any","BT","not_accessible","(-Inf,0.0025]","[10,20)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","[10,20)",16 +"bcfishpass:fresh","spawn","CH","rule_excludes","(-Inf,0.0025]","[10,20)",8 +"bcfishpass:fresh","any","BT","not_accessible","(0.0025,0.01]","[10,20)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.0025,0.01]","[10,20)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(0.0025,0.01]","[10,20)",3 +"bcfishpass:fresh","spawn","CH","rule_excludes","(0.0025,0.01]","[10,20)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.01,0.02]","[10,20)",4 +"bcfishpass:fresh","rear","BT","not_accessible","(0.01,0.02]","[10,20)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.01,0.02]","[10,20)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.02,0.03]","[10,20)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.03,0.045]","[10,20)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.03,0.045]","[10,20)",3 +"bcfishpass:fresh","any","CH","rule_excludes","(0.03,0.045]","[10,20)",1 +"bcfishpass:fresh","spawn","CH","rule_excludes","(0.03,0.045]","[10,20)",1 +"bcfishpass:fresh","spawn","CH","fails_gradient","(0.045,0.055]","[10,20)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.045,0.055]","[10,20)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.045,0.055]","[10,20)",1 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.055,0.07]","[10,20)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.055,0.07]","[10,20)",10 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.055,0.07]","[10,20)",1 +"bcfishpass:fresh","spawn","CH","fails_gradient","(0.055,0.07]","[10,20)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.055,0.07]","[10,20)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.07,0.105]","[10,20)",7 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.07,0.105]","[10,20)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.07,0.105]","[10,20)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.07,0.105]","[10,20)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.07,0.105]","[10,20)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.07,0.105]","[10,20)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.105,0.135]","[10,20)",16 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.105,0.135]","[10,20)",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.105,0.135]","[10,20)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.105,0.135]","[10,20)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.105,0.135]","[10,20)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.135,0.15]","[10,20)",4 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.135,0.15]","[10,20)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.135,0.15]","[10,20)",1 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.135,0.15]","[10,20)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.15,0.2]","[10,20)",4 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.15,0.2]","[10,20)",2 +"bcfishpass:fresh","any","CH","fails_gradient","(0.15,0.2]","[10,20)",1 +"bcfishpass:fresh","spawn","CH","fails_gradient","(0.15,0.2]","[10,20)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.15,0.2]","[10,20)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.2,0.25]","[10,20)",3 +"bcfishpass:fresh","any","CH","fails_gradient","(0.2,0.25]","[10,20)",2 +"bcfishpass:fresh","spawn","CH","fails_gradient","(0.2,0.25]","[10,20)",2 +"bcfishpass:fresh","any","BT","fails_gradient","(0.25, Inf]","[10,20)",3 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.25, Inf]","[10,20)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.25, Inf]","[10,20)",5 +"bcfishpass:fresh","rear","BT","not_accessible","(0.25, Inf]","[10,20)",2 +"bcfishpass:fresh","spawn","BT","not_accessible","(0.25, Inf]","[10,20)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.25, Inf]","[10,20)",2 +"bcfishpass:fresh","rear","CH","not_accessible","(0.25, Inf]","[10,20)",1 +"bcfishpass:fresh","any","BT","not_accessible","(-Inf,0.0025]","[2,3)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(-Inf,0.0025]","[2,3)",2 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","[2,3)",1 +"bcfishpass:fresh","spawn","CH","fails_width","(0.0025,0.01]","[2,3)",1 +"bcfishpass:fresh","spawn","CH","fails_width","(0.01,0.02]","[2,3)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.01,0.02]","[2,3)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.01,0.02]","[2,3)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.01,0.02]","[2,3)",2 +"bcfishpass:fresh","any","CH","rule_excludes","(0.01,0.02]","[2,3)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.02,0.03]","[2,3)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.02,0.03]","[2,3)",2 +"bcfishpass:fresh","any","CH","not_accessible","(0.02,0.03]","[2,3)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.02,0.03]","[2,3)",4 +"bcfishpass:fresh","rear","CH","post_predicate","(0.02,0.03]","[2,3)",3 +"bcfishpass:fresh","spawn","BT","rule_excludes","(0.02,0.03]","[2,3)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.03,0.045]","[2,3)",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.03,0.045]","[2,3)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.03,0.045]","[2,3)",1 +"bcfishpass:fresh","rear","CH","post_predicate","(0.03,0.045]","[2,3)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.045,0.055]","[2,3)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.045,0.055]","[2,3)",1 +"bcfishpass:fresh","rear","CH","post_predicate","(0.045,0.055]","[2,3)",1 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.055,0.07]","[2,3)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.055,0.07]","[2,3)",4 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.055,0.07]","[2,3)",3 +"bcfishpass:fresh","any","BT","post_predicate","(0.055,0.07]","[2,3)",5 +"bcfishpass:fresh","rear","BT","post_predicate","(0.055,0.07]","[2,3)",2 +"bcfishpass:fresh","any","BT","fails_gradient","(0.07,0.105]","[2,3)",1 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.07,0.105]","[2,3)",1 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.07,0.105]","[2,3)",2 +"bcfishpass:fresh","any","CH","fails_gradient","(0.07,0.105]","[2,3)",4 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.07,0.105]","[2,3)",4 +"bcfishpass:fresh","any","BT","not_accessible","(0.07,0.105]","[2,3)",7 +"bcfishpass:fresh","rear","BT","not_accessible","(0.07,0.105]","[2,3)",5 +"bcfishpass:fresh","spawn","BT","not_accessible","(0.07,0.105]","[2,3)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.07,0.105]","[2,3)",13 +"bcfishpass:fresh","rear","BT","post_predicate","(0.07,0.105]","[2,3)",5 +"bcfishpass:fresh","any","BT","fails_gradient","(0.105,0.135]","[2,3)",31 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.105,0.135]","[2,3)",21 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.105,0.135]","[2,3)",3 +"bcfishpass:fresh","any","CH","fails_gradient","(0.105,0.135]","[2,3)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.105,0.135]","[2,3)",6 +"bcfishpass:fresh","rear","BT","not_accessible","(0.105,0.135]","[2,3)",4 +"bcfishpass:fresh","any","BT","fails_gradient","(0.135,0.15]","[2,3)",4 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.135,0.15]","[2,3)",2 +"bcfishpass:fresh","any","BT","fails_gradient","(0.15,0.2]","[2,3)",9 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.15,0.2]","[2,3)",5 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.15,0.2]","[2,3)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.15,0.2]","[2,3)",1 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.15,0.2]","[2,3)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.2,0.25]","[2,3)",3 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.2,0.25]","[2,3)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.2,0.25]","[2,3)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.2,0.25]","[2,3)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.2,0.25]","[2,3)",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.2,0.25]","[2,3)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.25, Inf]","[2,3)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.25, Inf]","[2,3)",7 +"bcfishpass:fresh","rear","BT","not_accessible","(0.25, Inf]","[2,3)",3 +"bcfishpass:fresh","any","CH","not_accessible","(-Inf,0.0025]","[20,Inf)",1 +"bcfishpass:fresh","spawn","BT","rule_excludes","(-Inf,0.0025]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","[20,Inf)",17 +"bcfishpass:fresh","rear","CH","rule_excludes","(-Inf,0.0025]","[20,Inf)",2 +"bcfishpass:fresh","spawn","CH","rule_excludes","(-Inf,0.0025]","[20,Inf)",6 +"bcfishpass:fresh","any","CH","rule_excludes","(0.0025,0.01]","[20,Inf)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.01,0.02]","[20,Inf)",2 +"bcfishpass:fresh","any","CH","not_accessible","(0.01,0.02]","[20,Inf)",2 +"bcfishpass:fresh","spawn","CH","not_accessible","(0.01,0.02]","[20,Inf)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.02,0.03]","[20,Inf)",3 +"bcfishpass:fresh","rear","BT","not_accessible","(0.02,0.03]","[20,Inf)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.03,0.045]","[20,Inf)",2 +"bcfishpass:fresh","any","CH","not_accessible","(0.03,0.045]","[20,Inf)",1 +"bcfishpass:fresh","spawn","CH","fails_gradient","(0.045,0.055]","[20,Inf)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.045,0.055]","[20,Inf)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.045,0.055]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.055,0.07]","[20,Inf)",3 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.055,0.07]","[20,Inf)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.055,0.07]","[20,Inf)",2 +"bcfishpass:fresh","rear","BT","post_predicate","(0.055,0.07]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.07,0.105]","[20,Inf)",4 +"bcfishpass:fresh","spawn","CH","fails_gradient","(0.07,0.105]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.07,0.105]","[20,Inf)",1 +"bcfishpass:fresh","spawn","CH","not_accessible","(0.07,0.105]","[20,Inf)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.105,0.135]","[20,Inf)",3 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.105,0.135]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.105,0.135]","[20,Inf)",1 +"bcfishpass:fresh","spawn","CH","fails_gradient","(0.105,0.135]","[20,Inf)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.105,0.135]","[20,Inf)",2 +"bcfishpass:fresh","any","BT","fails_gradient","(0.135,0.15]","[20,Inf)",2 +"bcfishpass:fresh","any","CH","fails_gradient","(0.135,0.15]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.135,0.15]","[20,Inf)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.15,0.2]","[20,Inf)",1 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.15,0.2]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.15,0.2]","[20,Inf)",1 +"bcfishpass:fresh","spawn","CH","fails_gradient","(0.15,0.2]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.15,0.2]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.2,0.25]","[20,Inf)",1 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.2,0.25]","[20,Inf)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.25, Inf]","[20,Inf)",2 +"bcfishpass:fresh","spawn","CH","not_accessible","(0.25, Inf]","[20,Inf)",1 +"bcfishpass:fresh","any","BT","not_accessible","(-Inf,0.0025]","[3,4)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(-Inf,0.0025]","[3,4)",1 +"bcfishpass:fresh","any","CH","not_accessible","(-Inf,0.0025]","[3,4)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","[3,4)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.0025,0.01]","[3,4)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.01,0.02]","[3,4)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.01,0.02]","[3,4)",2 +"bcfishpass:fresh","any","CH","post_predicate","(0.01,0.02]","[3,4)",2 +"bcfishpass:fresh","any","CH","rule_excludes","(0.01,0.02]","[3,4)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.02,0.03]","[3,4)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.02,0.03]","[3,4)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.02,0.03]","[3,4)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.03,0.045]","[3,4)",3 +"bcfishpass:fresh","rear","BT","not_accessible","(0.03,0.045]","[3,4)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(0.03,0.045]","[3,4)",1 +"bcfishpass:fresh","rear","CH","rule_excludes","(0.03,0.045]","[3,4)",1 +"bcfishpass:fresh","spawn","CH","rule_excludes","(0.03,0.045]","[3,4)",1 +"bcfishpass:fresh","spawn","CH","fails_gradient_and_width","(0.045,0.055]","[3,4)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.045,0.055]","[3,4)",1 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.055,0.07]","[3,4)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.055,0.07]","[3,4)",1 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.055,0.07]","[3,4)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.055,0.07]","[3,4)",2 +"bcfishpass:fresh","rear","BT","post_predicate","(0.055,0.07]","[3,4)",2 +"bcfishpass:fresh","any","BT","fails_gradient","(0.07,0.105]","[3,4)",1 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.07,0.105]","[3,4)",2 +"bcfishpass:fresh","any","CH","fails_gradient","(0.07,0.105]","[3,4)",1 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.07,0.105]","[3,4)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.07,0.105]","[3,4)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.07,0.105]","[3,4)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.07,0.105]","[3,4)",8 +"bcfishpass:fresh","rear","BT","post_predicate","(0.07,0.105]","[3,4)",4 +"bcfishpass:fresh","any","BT","fails_gradient","(0.105,0.135]","[3,4)",33 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.105,0.135]","[3,4)",8 +"bcfishpass:fresh","any","BT","not_accessible","(0.105,0.135]","[3,4)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.105,0.135]","[3,4)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.135,0.15]","[3,4)",6 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.135,0.15]","[3,4)",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.135,0.15]","[3,4)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.15,0.2]","[3,4)",12 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.15,0.2]","[3,4)",4 +"bcfishpass:fresh","any","BT","fails_gradient","(0.2,0.25]","[3,4)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.2,0.25]","[3,4)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.2,0.25]","[3,4)",1 +"bcfishpass:fresh","spawn","BT","not_accessible","(0.2,0.25]","[3,4)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.25, Inf]","[3,4)",3 +"bcfishpass:fresh","any","CH","fails_gradient","(0.25, Inf]","[3,4)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.25, Inf]","[3,4)",2 +"bcfishpass:fresh","any","CH","not_accessible","(0.25, Inf]","[3,4)",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.25, Inf]","[3,4)",1 +"bcfishpass:fresh","any","BT","not_accessible","(-Inf,0.0025]","[4,6)",3 +"bcfishpass:fresh","rear","BT","not_accessible","(-Inf,0.0025]","[4,6)",1 +"bcfishpass:fresh","any","CH","not_accessible","(-Inf,0.0025]","[4,6)",2 +"bcfishpass:fresh","spawn","BT","rule_excludes","(-Inf,0.0025]","[4,6)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","[4,6)",5 +"bcfishpass:fresh","rear","CH","rule_excludes","(-Inf,0.0025]","[4,6)",1 +"bcfishpass:fresh","spawn","CH","rule_excludes","(-Inf,0.0025]","[4,6)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.0025,0.01]","[4,6)",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.0025,0.01]","[4,6)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.01,0.02]","[4,6)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.01,0.02]","[4,6)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.02,0.03]","[4,6)",4 +"bcfishpass:fresh","rear","BT","not_accessible","(0.02,0.03]","[4,6)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.02,0.03]","[4,6)",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.02,0.03]","[4,6)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.03,0.045]","[4,6)",8 +"bcfishpass:fresh","rear","BT","not_accessible","(0.03,0.045]","[4,6)",4 +"bcfishpass:fresh","any","BT","not_accessible","(0.045,0.055]","[4,6)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.045,0.055]","[4,6)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.045,0.055]","[4,6)",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.045,0.055]","[4,6)",1 +"bcfishpass:fresh","any","CH","post_predicate","(0.045,0.055]","[4,6)",1 +"bcfishpass:fresh","rear","CH","post_predicate","(0.045,0.055]","[4,6)",1 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.055,0.07]","[4,6)",2 +"bcfishpass:fresh","any","CH","fails_gradient","(0.055,0.07]","[4,6)",1 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.055,0.07]","[4,6)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.055,0.07]","[4,6)",4 +"bcfishpass:fresh","rear","BT","not_accessible","(0.055,0.07]","[4,6)",2 +"bcfishpass:fresh","any","BT","post_predicate","(0.055,0.07]","[4,6)",4 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.07,0.105]","[4,6)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.07,0.105]","[4,6)",2 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.07,0.105]","[4,6)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.07,0.105]","[4,6)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.07,0.105]","[4,6)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.07,0.105]","[4,6)",4 +"bcfishpass:fresh","rear","BT","post_predicate","(0.07,0.105]","[4,6)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.105,0.135]","[4,6)",19 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.105,0.135]","[4,6)",6 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.105,0.135]","[4,6)",2 +"bcfishpass:fresh","any","CH","fails_gradient","(0.105,0.135]","[4,6)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.105,0.135]","[4,6)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.135,0.15]","[4,6)",6 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.135,0.15]","[4,6)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.15,0.2]","[4,6)",9 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.15,0.2]","[4,6)",4 +"bcfishpass:fresh","any","BT","not_accessible","(0.2,0.25]","[4,6)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.25, Inf]","[4,6)",4 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.25, Inf]","[4,6)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.25, Inf]","[4,6)",3 +"bcfishpass:fresh","rear","BT","not_accessible","(0.25, Inf]","[4,6)",1 +"bcfishpass:fresh","any","CH","not_accessible","(-Inf,0.0025]","[6,10)",1 +"bcfishpass:fresh","rear","CH","not_accessible","(-Inf,0.0025]","[6,10)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","[6,10)",4 +"bcfishpass:fresh","spawn","CH","rule_excludes","(-Inf,0.0025]","[6,10)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.0025,0.01]","[6,10)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(0.0025,0.01]","[6,10)",1 +"bcfishpass:fresh","spawn","CH","rule_excludes","(0.0025,0.01]","[6,10)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.01,0.02]","[6,10)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.01,0.02]","[6,10)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.01,0.02]","[6,10)",2 +"bcfishpass:fresh","rear","CH","not_accessible","(0.01,0.02]","[6,10)",1 +"bcfishpass:fresh","spawn","CH","not_accessible","(0.01,0.02]","[6,10)",1 +"bcfishpass:fresh","any","CH","rule_excludes","(0.01,0.02]","[6,10)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.02,0.03]","[6,10)",3 +"bcfishpass:fresh","rear","BT","not_accessible","(0.02,0.03]","[6,10)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.02,0.03]","[6,10)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.03,0.045]","[6,10)",6 +"bcfishpass:fresh","rear","BT","not_accessible","(0.03,0.045]","[6,10)",3 +"bcfishpass:fresh","any","CH","not_accessible","(0.03,0.045]","[6,10)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.045,0.055]","[6,10)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.045,0.055]","[6,10)",2 +"bcfishpass:fresh","any","CH","post_predicate","(0.045,0.055]","[6,10)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.055,0.07]","[6,10)",11 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.055,0.07]","[6,10)",4 +"bcfishpass:fresh","any","BT","not_accessible","(0.055,0.07]","[6,10)",6 +"bcfishpass:fresh","spawn","BT","not_accessible","(0.055,0.07]","[6,10)",1 +"bcfishpass:fresh","any","BT","post_predicate","(0.055,0.07]","[6,10)",4 +"bcfishpass:fresh","rear","BT","post_predicate","(0.055,0.07]","[6,10)",2 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.07,0.105]","[6,10)",1 +"bcfishpass:fresh","any","CH","fails_gradient","(0.07,0.105]","[6,10)",7 +"bcfishpass:fresh","rear","CH","fails_gradient","(0.07,0.105]","[6,10)",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.07,0.105]","[6,10)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.07,0.105]","[6,10)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.07,0.105]","[6,10)",3 +"bcfishpass:fresh","spawn","CH","not_accessible","(0.07,0.105]","[6,10)",2 +"bcfishpass:fresh","any","BT","post_predicate","(0.07,0.105]","[6,10)",15 +"bcfishpass:fresh","rear","BT","post_predicate","(0.07,0.105]","[6,10)",13 +"bcfishpass:fresh","any","BT","fails_gradient","(0.105,0.135]","[6,10)",40 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.105,0.135]","[6,10)",13 +"bcfishpass:fresh","any","CH","fails_gradient","(0.105,0.135]","[6,10)",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.105,0.135]","[6,10)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.135,0.15]","[6,10)",9 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.135,0.15]","[6,10)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.135,0.15]","[6,10)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.135,0.15]","[6,10)",1 +"bcfishpass:fresh","spawn","BT","not_accessible","(0.135,0.15]","[6,10)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.15,0.2]","[6,10)",11 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.15,0.2]","[6,10)",5 +"bcfishpass:fresh","any","BT","not_accessible","(0.15,0.2]","[6,10)",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.15,0.2]","[6,10)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.15,0.2]","[6,10)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.2,0.25]","[6,10)",6 +"bcfishpass:fresh","rear","BT","fails_gradient","(0.2,0.25]","[6,10)",2 +"bcfishpass:fresh","spawn","BT","fails_gradient","(0.2,0.25]","[6,10)",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.2,0.25]","[6,10)",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.2,0.25]","[6,10)",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.2,0.25]","[6,10)",1 +"bcfishpass:fresh","any","BT","fails_gradient","(0.25, Inf]","[6,10)",7 +"bcfishpass:fresh","any","BT","not_accessible","(0.25, Inf]","[6,10)",4 +"bcfishpass:fresh","rear","BT","not_accessible","(0.25, Inf]","[6,10)",1 +"bcfishpass:fresh","any","CH","not_accessible","(-Inf,0.0025]","NULL",3 +"bcfishpass:fresh","rear","CH","not_accessible","(-Inf,0.0025]","NULL",3 +"bcfishpass:fresh","spawn","BT","rule_excludes","(-Inf,0.0025]","NULL",1 +"bcfishpass:fresh","any","CH","rule_excludes","(-Inf,0.0025]","NULL",4 +"bcfishpass:fresh","rear","CH","rule_excludes","(-Inf,0.0025]","NULL",1 +"bcfishpass:fresh","any","BT","width_null","(-Inf,0.0025]","NULL",51 +"bcfishpass:fresh","rear","BT","width_null","(-Inf,0.0025]","NULL",11 +"bcfishpass:fresh","spawn","BT","width_null","(-Inf,0.0025]","NULL",1 +"bcfishpass:fresh","any","CH","width_null","(-Inf,0.0025]","NULL",27 +"bcfishpass:fresh","rear","CH","width_null","(-Inf,0.0025]","NULL",11 +"bcfishpass:fresh","spawn","CH","width_null","(-Inf,0.0025]","NULL",1 +"bcfishpass:fresh","any","BT","width_null","(0.0025,0.01]","NULL",25 +"bcfishpass:fresh","rear","BT","width_null","(0.0025,0.01]","NULL",3 +"bcfishpass:fresh","any","CH","width_null","(0.0025,0.01]","NULL",7 +"bcfishpass:fresh","rear","CH","width_null","(0.0025,0.01]","NULL",5 +"bcfishpass:fresh","any","BT","width_null","(0.01,0.02]","NULL",18 +"bcfishpass:fresh","rear","BT","width_null","(0.01,0.02]","NULL",5 +"bcfishpass:fresh","spawn","BT","width_null","(0.01,0.02]","NULL",3 +"bcfishpass:fresh","any","CH","width_null","(0.01,0.02]","NULL",7 +"bcfishpass:fresh","rear","CH","width_null","(0.01,0.02]","NULL",2 +"bcfishpass:fresh","spawn","CH","width_null","(0.01,0.02]","NULL",1 +"bcfishpass:fresh","any","BT","width_null","(0.02,0.03]","NULL",13 +"bcfishpass:fresh","rear","BT","width_null","(0.02,0.03]","NULL",9 +"bcfishpass:fresh","any","CH","width_null","(0.02,0.03]","NULL",4 +"bcfishpass:fresh","rear","CH","width_null","(0.02,0.03]","NULL",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.03,0.045]","NULL",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.03,0.045]","NULL",2 +"bcfishpass:fresh","any","CH","rule_excludes","(0.03,0.045]","NULL",1 +"bcfishpass:fresh","any","BT","width_null","(0.03,0.045]","NULL",20 +"bcfishpass:fresh","rear","BT","width_null","(0.03,0.045]","NULL",8 +"bcfishpass:fresh","spawn","BT","width_null","(0.03,0.045]","NULL",1 +"bcfishpass:fresh","any","CH","width_null","(0.03,0.045]","NULL",6 +"bcfishpass:fresh","rear","CH","width_null","(0.03,0.045]","NULL",4 +"bcfishpass:fresh","any","BT","not_accessible","(0.045,0.055]","NULL",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.045,0.055]","NULL",1 +"bcfishpass:fresh","any","BT","width_null","(0.045,0.055]","NULL",11 +"bcfishpass:fresh","rear","BT","width_null","(0.045,0.055]","NULL",4 +"bcfishpass:fresh","any","CH","width_null","(0.045,0.055]","NULL",1 +"bcfishpass:fresh","rear","CH","width_null","(0.045,0.055]","NULL",1 +"bcfishpass:fresh","any","CH","fails_gradient_and_width","(0.055,0.07]","NULL",4 +"bcfishpass:fresh","rear","CH","fails_gradient_and_width","(0.055,0.07]","NULL",3 +"bcfishpass:fresh","any","CH","not_accessible","(0.055,0.07]","NULL",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.055,0.07]","NULL",1 +"bcfishpass:fresh","any","BT","width_null","(0.055,0.07]","NULL",14 +"bcfishpass:fresh","rear","BT","width_null","(0.055,0.07]","NULL",8 +"bcfishpass:fresh","any","BT","not_accessible","(0.07,0.105]","NULL",4 +"bcfishpass:fresh","rear","BT","not_accessible","(0.07,0.105]","NULL",3 +"bcfishpass:fresh","any","CH","not_accessible","(0.07,0.105]","NULL",1 +"bcfishpass:fresh","rear","CH","not_accessible","(0.07,0.105]","NULL",1 +"bcfishpass:fresh","any","BT","width_null","(0.07,0.105]","NULL",37 +"bcfishpass:fresh","rear","BT","width_null","(0.07,0.105]","NULL",16 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.105,0.135]","NULL",20 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width","(0.105,0.135]","NULL",8 +"bcfishpass:fresh","any","CH","not_accessible","(0.105,0.135]","NULL",1 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.135,0.15]","NULL",8 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width","(0.135,0.15]","NULL",1 +"bcfishpass:fresh","any","BT","not_accessible","(0.135,0.15]","NULL",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.135,0.15]","NULL",1 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.15,0.2]","NULL",6 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width","(0.15,0.2]","NULL",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.15,0.2]","NULL",2 +"bcfishpass:fresh","rear","BT","not_accessible","(0.15,0.2]","NULL",1 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.2,0.25]","NULL",5 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width","(0.2,0.25]","NULL",2 +"bcfishpass:fresh","any","BT","not_accessible","(0.2,0.25]","NULL",1 +"bcfishpass:fresh","rear","BT","not_accessible","(0.2,0.25]","NULL",1 +"bcfishpass:fresh","any","CH","not_accessible","(0.2,0.25]","NULL",1 +"bcfishpass:fresh","spawn","CH","not_accessible","(0.2,0.25]","NULL",1 +"bcfishpass:fresh","any","BT","fails_gradient_and_width","(0.25, Inf]","NULL",12 +"bcfishpass:fresh","rear","BT","fails_gradient_and_width","(0.25, Inf]","NULL",3 +"bcfishpass:fresh","any","BT","not_accessible","(0.25, Inf]","NULL",13 +"bcfishpass:fresh","rear","BT","not_accessible","(0.25, Inf]","NULL",9 +"bcfishpass:fresh","any","CH","not_accessible","(0.25, Inf]","NULL",1 diff --git a/data-raw/logs/habitat_validate_283/stamp.txt b/data-raw/logs/habitat_validate_283/stamp.txt new file mode 100644 index 00000000..94129d1c --- /dev/null +++ b/data-raw/logs/habitat_validate_283/stamp.txt @@ -0,0 +1,9 @@ +date: 2026-09-26 13:39 PDT +link: 0.51.1 @ 0c19e0a +fresh installed (builds the miss-reason predicates): 0.34.0 @ no recorded sha +db: docker fwapg localhost:5432 +bundle default:fresh_default — 55 WSGs scored; 4 with a run-log row (fresh 0.32.0, 0.33.0, 2026-08-06 to 2026-08-27); the rest predate the log +bundle bcfishpass:fresh — 59 WSGs scored; 39 with a run-log row (fresh 0.33.0, 2026-08-31 to 2026-09-26); the rest predate the log +species: CH,BT; buffers: 0,100 m +bcfishobs.observations rows: 373050 +absences: 4174 sampled FISS sites snapped within the snapshot WSGs (COTR,LNTH,PINE,UNTH,UPCE); usable as absences, before presence: CH 1906, BT 1535; other WSGs report NA; knowledge @ 508bf44 diff --git a/data-raw/logs/habitat_validate_283/summary.csv b/data-raw/logs/habitat_validate_283/summary.csv new file mode 100644 index 00000000..abae60e1 --- /dev/null +++ b/data-raw/logs/habitat_validate_283/summary.csv @@ -0,0 +1,1369 @@ +"schema","config_name","buffer_m","overlay_applied","watershed_group_code","species_code","stage","n_obs","n_unattached","n_accessible","n_inaccessible","n_spawning","n_rearing","n_rearing_any","n_habitat","share_accessible","share_spawning","share_rearing","share_rearing_any","share_habitat","n_in_uhc_spawn","n_in_uhc_rear","n_obs_outside_uhc_spawn","n_spawning_outside_uhc","n_obs_outside_uhc_rear","n_rearing_any_outside_uhc","share_spawning_outside_uhc","share_rearing_any_outside_uhc","accessible_km","spawning_km","rearing_km","n_absence","n_absence_accessible","n_absence_spawning","n_absence_rearing","n_absence_rearing_any","run_logged" +"fresh_default","default",0,TRUE,"ADMS","BT","any",37,0,37,0,24,27,29,29,1,0.648648648648649,0.72972972972973,0.783783783783784,0.783783783783784,0,0,37,24,37,29,0.648648648648649,0.783783783783784,1332.83,360.42,526.17,,,,,,FALSE +"fresh_default","default",0,TRUE,"ADMS","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1332.83,360.42,526.17,,,,,,FALSE +"fresh_default","default",0,TRUE,"ADMS","BT","rear",6,0,6,0,3,4,4,4,1,0.5,0.666666666666667,0.666666666666667,0.666666666666667,0,0,6,3,6,4,0.5,0.666666666666667,1332.83,360.42,526.17,,,,,,FALSE +"fresh_default","default",0,TRUE,"ADMS","CH","any",11,0,11,0,9,8,10,10,1,0.818181818181818,0.727272727272727,0.909090909090909,0.909090909090909,7,0,4,2,11,10,0.5,0.909090909090909,842.06,277.53,351.69,,,,,,FALSE +"fresh_default","default",0,TRUE,"ADMS","CH","spawn",5,0,5,0,5,4,5,5,1,1,0.8,1,1,5,0,0,0,5,5,,1,842.06,277.53,351.69,,,,,,FALSE +"fresh_default","default",0,TRUE,"ADMS","CH","rear",2,0,2,0,2,2,2,2,1,1,1,1,1,1,0,1,1,2,2,1,1,842.06,277.53,351.69,,,,,,FALSE +"fresh_default","default",0,TRUE,"BBAR","BT","any",16,0,16,0,10,13,13,13,1,0.625,0.8125,0.8125,0.8125,0,0,16,10,16,13,0.625,0.8125,1761.57,329.41,560.67,,,,,,FALSE +"fresh_default","default",0,TRUE,"BBAR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1761.57,329.41,560.67,,,,,,FALSE +"fresh_default","default",0,TRUE,"BBAR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1761.57,329.41,560.67,,,,,,FALSE +"fresh_default","default",0,TRUE,"BBAR","CH","any",5,0,3,2,1,1,1,1,0.6,0.2,0.2,0.2,0.2,0,0,5,1,5,1,0.2,0.2,275.36,160.2,169.06,,,,,,FALSE +"fresh_default","default",0,TRUE,"BBAR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,275.36,160.2,169.06,,,,,,FALSE +"fresh_default","default",0,TRUE,"BBAR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,275.36,160.2,169.06,,,,,,FALSE +"fresh_default","default",0,TRUE,"BULK","BT","any",468,0,464,4,231,334,334,334,0.991452991452991,0.493589743589744,0.713675213675214,0.713675213675214,0.713675213675214,0,0,468,231,468,334,0.493589743589744,0.713675213675214,7713.98,1852.11,3012.7,,,,,,FALSE +"fresh_default","default",0,TRUE,"BULK","BT","spawn",12,0,12,0,4,9,9,9,1,0.333333333333333,0.75,0.75,0.75,0,0,12,4,12,9,0.333333333333333,0.75,7713.98,1852.11,3012.7,,,,,,FALSE +"fresh_default","default",0,TRUE,"BULK","BT","rear",255,0,252,3,92,157,157,157,0.988235294117647,0.36078431372549,0.615686274509804,0.615686274509804,0.615686274509804,0,0,255,92,255,157,0.36078431372549,0.615686274509804,7713.98,1852.11,3012.7,,,,,,FALSE +"fresh_default","default",0,TRUE,"BULK","CH","any",110,0,110,0,104,107,107,108,1,0.945454545454545,0.972727272727273,0.972727272727273,0.981818181818182,18,0,92,86,110,107,0.934782608695652,0.972727272727273,5178.19,1264.07,2038.12,,,,,,FALSE +"fresh_default","default",0,TRUE,"BULK","CH","spawn",16,0,16,0,16,15,15,16,1,1,0.9375,0.9375,1,16,0,0,0,16,15,,0.9375,5178.19,1264.07,2038.12,,,,,,FALSE +"fresh_default","default",0,TRUE,"BULK","CH","rear",11,0,11,0,6,9,9,9,1,0.545454545454545,0.818181818181818,0.818181818181818,0.818181818181818,0,0,11,6,11,9,0.545454545454545,0.818181818181818,5178.19,1264.07,2038.12,,,,,,FALSE +"fresh_default","default",0,TRUE,"CARP","BT","any",6,0,6,0,4,4,6,6,1,0.666666666666667,0.666666666666667,1,1,0,0,6,4,6,6,0.666666666666667,1,4420.57,502.37,1026.27,,,,,,FALSE +"fresh_default","default",0,TRUE,"CARP","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4420.57,502.37,1026.27,,,,,,FALSE +"fresh_default","default",0,TRUE,"CARP","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4420.57,502.37,1026.27,,,,,,FALSE +"fresh_default","default",0,TRUE,"CARP","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"CARP","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"CARP","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHES","BT","any",3,0,3,0,3,3,3,3,1,1,1,1,1,0,0,3,3,3,3,1,1,2904.74,376.85,796.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHES","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2904.74,376.85,796.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHES","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2904.74,376.85,796.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHES","CH","any",87,0,85,2,80,81,82,82,0.977011494252874,0.919540229885057,0.931034482758621,0.942528735632184,0.942528735632184,27,0,60,53,87,82,0.883333333333333,0.942528735632184,780.54,88.26,258.88,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHES","CH","spawn",3,0,2,1,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2,0,1,0,3,2,0,0.666666666666667,780.54,88.26,258.88,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHES","CH","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,780.54,88.26,258.88,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHWK","BT","any",62,0,62,0,34,45,52,52,1,0.548387096774194,0.725806451612903,0.838709677419355,0.838709677419355,0,0,62,34,62,52,0.548387096774194,0.838709677419355,793.94,310.02,353.48,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHWK","BT","spawn",5,0,5,0,4,4,5,5,1,0.8,0.8,1,1,0,0,5,4,5,5,0.8,1,793.94,310.02,353.48,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHWK","BT","rear",5,0,5,0,4,4,4,4,1,0.8,0.8,0.8,0.8,0,0,5,4,5,4,0.8,0.8,793.94,310.02,353.48,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHWK","CH","any",21,0,21,0,15,14,17,17,1,0.714285714285714,0.666666666666667,0.80952380952381,0.80952380952381,2,0,19,13,21,17,0.68421052631579,0.80952380952381,698.92,257.8,310.79,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHWK","CH","spawn",8,0,8,0,6,5,7,7,1,0.75,0.625,0.875,0.875,2,0,6,4,8,7,0.666666666666667,0.875,698.92,257.8,310.79,,,,,,FALSE +"fresh_default","default",0,TRUE,"CHWK","CH","rear",4,0,4,0,3,3,3,3,1,0.75,0.75,0.75,0.75,0,0,4,3,4,3,0.75,0.75,698.92,257.8,310.79,,,,,,FALSE +"fresh_default","default",0,TRUE,"COTR","BT","any",85,0,84,1,45,68,68,68,0.988235294117647,0.529411764705882,0.8,0.8,0.8,0,0,85,45,85,68,0.529411764705882,0.8,6856.99,1480.88,2433.36,75,65,31,38,40,FALSE +"fresh_default","default",0,TRUE,"COTR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6856.99,1480.88,2433.36,75,65,31,38,40,FALSE +"fresh_default","default",0,TRUE,"COTR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6856.99,1480.88,2433.36,75,65,31,38,40,FALSE +"fresh_default","default",0,TRUE,"COTR","CH","any",100,0,95,5,70,77,77,78,0.95,0.7,0.77,0.77,0.78,39,0,61,31,100,77,0.508196721311475,0.77,4143.01,702.76,1364.58,68,25,11,13,15,FALSE +"fresh_default","default",0,TRUE,"COTR","CH","spawn",15,0,14,1,15,14,14,15,0.933333333333333,1,0.933333333333333,0.933333333333333,1,15,0,0,0,15,14,,0.933333333333333,4143.01,702.76,1364.58,68,25,11,13,15,FALSE +"fresh_default","default",0,TRUE,"COTR","CH","rear",48,0,45,3,28,33,33,33,0.9375,0.583333333333333,0.6875,0.6875,0.6875,12,0,36,16,48,33,0.444444444444444,0.6875,4143.01,702.76,1364.58,68,25,11,13,15,FALSE +"fresh_default","default",0,TRUE,"CRKD","BT","any",4,0,4,0,4,4,4,4,1,1,1,1,1,0,0,4,4,4,4,1,1,5115.69,695.8,1448.76,,,,,,FALSE +"fresh_default","default",0,TRUE,"CRKD","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5115.69,695.8,1448.76,,,,,,FALSE +"fresh_default","default",0,TRUE,"CRKD","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5115.69,695.8,1448.76,,,,,,FALSE +"fresh_default","default",0,TRUE,"CRKD","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"CRKD","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"CRKD","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"DOGC","BT","any",17,0,17,0,13,17,17,17,1,0.764705882352941,1,1,1,0,0,17,13,17,17,0.764705882352941,1,1260.46,286.17,502.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"DOGC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1260.46,286.17,502.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"DOGC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1260.46,286.17,502.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"DOGC","CH","any",5,0,5,0,5,5,5,5,1,1,1,1,1,2,0,3,3,5,5,1,1,358.78,162,196.9,,,,,,FALSE +"fresh_default","default",0,TRUE,"DOGC","CH","spawn",2,0,2,0,2,2,2,2,1,1,1,1,1,2,0,0,0,2,2,,1,358.78,162,196.9,,,,,,FALSE +"fresh_default","default",0,TRUE,"DOGC","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,358.78,162,196.9,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINA","BT","any",107,0,107,0,89,97,105,105,1,0.831775700934579,0.906542056074766,0.981308411214953,0.981308411214953,0,0,107,89,107,105,0.831775700934579,0.981308411214953,7889.87,1325.37,2218.78,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7889.87,1325.37,2218.78,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7889.87,1325.37,2218.78,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINL","BT","any",32,0,32,0,25,29,29,29,1,0.78125,0.90625,0.90625,0.90625,0,0,32,25,32,29,0.78125,0.90625,4515.86,1365.64,2107.58,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4515.86,1365.64,2107.58,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4515.86,1365.64,2107.58,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINL","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FINL","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FIRE","BT","any",172,0,172,0,128,151,157,157,1,0.744186046511628,0.877906976744186,0.912790697674419,0.912790697674419,0,0,172,128,172,157,0.744186046511628,0.912790697674419,6663.44,1012.79,1911.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"FIRE","BT","spawn",4,0,4,0,1,3,3,3,1,0.25,0.75,0.75,0.75,0,0,4,1,4,3,0.25,0.75,6663.44,1012.79,1911.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"FIRE","BT","rear",66,0,66,0,57,62,62,62,1,0.863636363636364,0.93939393939394,0.93939393939394,0.93939393939394,0,0,66,57,66,62,0.863636363636364,0.93939393939394,6663.44,1012.79,1911.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"FIRE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FIRE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FIRE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FOXR","BT","any",33,0,33,0,26,31,31,31,1,0.787878787878788,0.93939393939394,0.93939393939394,0.93939393939394,0,0,33,26,33,31,0.787878787878788,0.93939393939394,3665.56,928.18,1525.02,,,,,,FALSE +"fresh_default","default",0,TRUE,"FOXR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3665.56,928.18,1525.02,,,,,,FALSE +"fresh_default","default",0,TRUE,"FOXR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3665.56,928.18,1525.02,,,,,,FALSE +"fresh_default","default",0,TRUE,"FOXR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FOXR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FOXR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRAN","BT","any",102,0,102,0,48,71,73,73,1,0.470588235294118,0.696078431372549,0.715686274509804,0.715686274509804,0,0,102,48,102,73,0.470588235294118,0.715686274509804,9078.53,1120.86,2355.24,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRAN","BT","spawn",1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,9078.53,1120.86,2355.24,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRAN","BT","rear",90,0,90,0,41,62,62,62,1,0.455555555555556,0.688888888888889,0.688888888888889,0.688888888888889,0,0,90,41,90,62,0.455555555555556,0.688888888888889,9078.53,1120.86,2355.24,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRAN","CH","any",23,0,23,0,21,20,21,21,1,0.91304347826087,0.869565217391304,0.91304347826087,0.91304347826087,11,0,12,10,23,21,0.833333333333333,0.91304347826087,7351.32,597.53,1631.89,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRAN","CH","spawn",4,0,4,0,4,3,4,4,1,1,0.75,1,1,4,0,0,0,4,4,,1,7351.32,597.53,1631.89,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRAN","CH","rear",4,0,4,0,2,2,2,2,1,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,7351.32,597.53,1631.89,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRCN","BT","any",95,0,95,0,50,88,89,89,1,0.526315789473684,0.926315789473684,0.936842105263158,0.936842105263158,0,0,95,50,95,89,0.526315789473684,0.936842105263158,1504.38,663.33,889.13,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRCN","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1504.38,663.33,889.13,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRCN","BT","rear",5,0,5,0,2,4,4,4,1,0.4,0.8,0.8,0.8,0,0,5,2,5,4,0.4,0.8,1504.38,663.33,889.13,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRCN","CH","any",31,0,30,1,26,27,27,30,0.967741935483871,0.838709677419355,0.870967741935484,0.870967741935484,0.967741935483871,13,0,18,13,31,27,0.722222222222222,0.870967741935484,749.15,451.01,481.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRCN","CH","spawn",5,0,5,0,5,3,3,5,1,1,0.6,0.6,1,5,0,0,0,5,3,,0.6,749.15,451.01,481.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"FRCN","CH","rear",13,0,13,0,10,13,13,13,1,0.769230769230769,1,1,1,2,0,11,8,13,13,0.727272727272727,1,749.15,451.01,481.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"HARR","BT","any",43,0,42,1,22,32,36,36,0.976744186046512,0.511627906976744,0.744186046511628,0.837209302325581,0.837209302325581,0,0,43,22,43,36,0.511627906976744,0.837209302325581,1619.34,470.27,588.62,,,,,,FALSE +"fresh_default","default",0,TRUE,"HARR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1619.34,470.27,588.62,,,,,,FALSE +"fresh_default","default",0,TRUE,"HARR","BT","rear",7,0,7,0,3,6,6,6,1,0.428571428571429,0.857142857142857,0.857142857142857,0.857142857142857,0,0,7,3,7,6,0.428571428571429,0.857142857142857,1619.34,470.27,588.62,,,,,,FALSE +"fresh_default","default",0,TRUE,"HARR","CH","any",118,0,116,2,110,109,111,112,0.983050847457627,0.932203389830508,0.923728813559322,0.940677966101695,0.949152542372881,8,0,110,102,118,111,0.927272727272727,0.940677966101695,1148.93,329.59,385.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"HARR","CH","spawn",4,0,4,0,4,3,3,4,1,1,0.75,0.75,1,4,0,0,0,4,3,,0.75,1148.93,329.59,385.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"HARR","CH","rear",46,0,45,1,44,44,44,44,0.978260869565217,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,0,0,46,44,46,44,0.956521739130435,0.956521739130435,1148.93,329.59,385.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"INGR","BT","any",27,0,27,0,23,26,26,26,1,0.851851851851852,0.962962962962963,0.962962962962963,0.962962962962963,0,0,27,23,27,26,0.851851851851852,0.962962962962963,3925.58,1111.41,1736.58,,,,,,FALSE +"fresh_default","default",0,TRUE,"INGR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3925.58,1111.41,1736.58,,,,,,FALSE +"fresh_default","default",0,TRUE,"INGR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3925.58,1111.41,1736.58,,,,,,FALSE +"fresh_default","default",0,TRUE,"INGR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"INGR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"INGR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"KISP","BT","any",195,0,192,3,122,159,162,162,0.984615384615385,0.625641025641026,0.815384615384615,0.830769230769231,0.830769230769231,0,0,195,122,195,162,0.625641025641026,0.830769230769231,4529.14,1258.71,1894.95,,,,,,FALSE +"fresh_default","default",0,TRUE,"KISP","BT","spawn",5,0,5,0,2,3,3,3,1,0.4,0.6,0.6,0.6,0,0,5,2,5,3,0.4,0.6,4529.14,1258.71,1894.95,,,,,,FALSE +"fresh_default","default",0,TRUE,"KISP","BT","rear",56,0,53,3,27,37,37,37,0.946428571428571,0.482142857142857,0.660714285714286,0.660714285714286,0.660714285714286,0,0,56,27,56,37,0.482142857142857,0.660714285714286,4529.14,1258.71,1894.95,,,,,,FALSE +"fresh_default","default",0,TRUE,"KISP","CH","any",89,0,89,0,82,76,79,83,1,0.921348314606742,0.853932584269663,0.887640449438202,0.932584269662921,37,0,52,45,89,79,0.865384615384615,0.887640449438202,2841.44,862.28,1178.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"KISP","CH","spawn",30,0,30,0,30,25,26,30,1,1,0.833333333333333,0.866666666666667,1,30,0,0,0,30,26,,0.866666666666667,2841.44,862.28,1178.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"KISP","CH","rear",12,0,12,0,10,10,10,10,1,0.833333333333333,0.833333333333333,0.833333333333333,0.833333333333333,1,0,11,9,12,10,0.818181818181818,0.833333333333333,2841.44,862.28,1178.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"KLUM","BT","any",314,0,302,12,194,243,244,244,0.961783439490446,0.617834394904459,0.773885350318471,0.777070063694268,0.777070063694268,0,0,314,194,314,244,0.617834394904459,0.777070063694268,2173.93,929.96,1229.04,,,,,,FALSE +"fresh_default","default",0,TRUE,"KLUM","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2173.93,929.96,1229.04,,,,,,FALSE +"fresh_default","default",0,TRUE,"KLUM","BT","rear",141,0,137,4,66,95,96,96,0.971631205673759,0.468085106382979,0.673758865248227,0.680851063829787,0.680851063829787,0,0,141,66,141,96,0.468085106382979,0.680851063829787,2173.93,929.96,1229.04,,,,,,FALSE +"fresh_default","default",0,TRUE,"KLUM","CH","any",104,0,99,5,87,88,90,91,0.951923076923077,0.836538461538462,0.846153846153846,0.865384615384615,0.875,28,0,76,59,104,90,0.776315789473684,0.865384615384615,1523.16,708.12,905.48,,,,,,FALSE +"fresh_default","default",0,TRUE,"KLUM","CH","spawn",20,0,19,1,20,18,19,20,0.95,1,0.9,0.95,1,20,0,0,0,20,19,,0.95,1523.16,708.12,905.48,,,,,,FALSE +"fresh_default","default",0,TRUE,"KLUM","CH","rear",19,0,19,0,14,16,16,16,1,0.736842105263158,0.842105263157895,0.842105263157895,0.842105263157895,4,0,15,10,19,16,0.666666666666667,0.842105263157895,1523.16,708.12,905.48,,,,,,FALSE +"fresh_default","default",0,TRUE,"KOTL","BT","any",206,0,203,3,116,164,173,173,0.985436893203884,0.563106796116505,0.796116504854369,0.839805825242718,0.839805825242718,0,0,206,116,206,173,0.563106796116505,0.839805825242718,3619.68,1035.15,1599.21,,,,,,TRUE +"fresh_default","default",0,TRUE,"KOTL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3619.68,1035.15,1599.21,,,,,,TRUE +"fresh_default","default",0,TRUE,"KOTL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3619.68,1035.15,1599.21,,,,,,TRUE +"fresh_default","default",0,TRUE,"KOTL","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"KOTL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"KOTL","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"LARL","BT","any",165,0,164,1,99,128,134,134,0.993939393939394,0.6,0.775757575757576,0.812121212121212,0.812121212121212,0,0,165,99,165,134,0.6,0.812121212121212,2242.72,563.88,845.5,,,,,,TRUE +"fresh_default","default",0,TRUE,"LARL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2242.72,563.88,845.5,,,,,,TRUE +"fresh_default","default",0,TRUE,"LARL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2242.72,563.88,845.5,,,,,,TRUE +"fresh_default","default",0,TRUE,"LARL","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"LARL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"LARL","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"LBTN","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,9061.71,2027.4,2961.53,,,,,,FALSE +"fresh_default","default",0,TRUE,"LBTN","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,9061.71,2027.4,2961.53,,,,,,FALSE +"fresh_default","default",0,TRUE,"LBTN","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,9061.71,2027.4,2961.53,,,,,,FALSE +"fresh_default","default",0,TRUE,"LBTN","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LBTN","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LBTN","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LCHL","BT","any",6,0,6,0,5,6,6,6,1,0.833333333333333,1,1,1,0,0,6,5,6,6,0.833333333333333,1,5533.57,908.41,1581.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"LCHL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5533.57,908.41,1581.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"LCHL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5533.57,908.41,1581.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"LCHL","CH","any",38,0,38,0,35,34,34,37,1,0.921052631578947,0.894736842105263,0.894736842105263,0.973684210526316,10,0,28,25,38,34,0.892857142857143,0.894736842105263,4358.83,468.47,1153.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"LCHL","CH","spawn",2,0,2,0,2,2,2,2,1,1,1,1,1,2,0,0,0,2,2,,1,4358.83,468.47,1153.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"LCHL","CH","rear",23,0,23,0,20,19,19,22,1,0.869565217391304,0.826086956521739,0.826086956521739,0.956521739130435,6,0,17,14,23,19,0.823529411764706,0.826086956521739,4358.83,468.47,1153.83,,,,,,FALSE +"fresh_default","default",0,TRUE,"LFRA","BT","any",78,0,78,0,57,64,69,69,1,0.730769230769231,0.82051282051282,0.884615384615385,0.884615384615385,0,0,78,57,78,69,0.730769230769231,0.884615384615385,3569.06,1241.71,1516.52,,,,,,FALSE +"fresh_default","default",0,TRUE,"LFRA","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3569.06,1241.71,1516.52,,,,,,FALSE +"fresh_default","default",0,TRUE,"LFRA","BT","rear",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,3569.06,1241.71,1516.52,,,,,,FALSE +"fresh_default","default",0,TRUE,"LFRA","CH","any",165,0,161,4,105,132,133,133,0.975757575757576,0.636363636363636,0.8,0.806060606060606,0.806060606060606,19,0,146,86,165,133,0.589041095890411,0.806060606060606,3074.38,826.28,1254.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"LFRA","CH","spawn",10,0,10,0,10,10,10,10,1,1,1,1,1,10,0,0,0,10,10,,1,3074.38,826.28,1254.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"LFRA","CH","rear",66,0,65,1,39,54,54,54,0.984848484848485,0.590909090909091,0.818181818181818,0.818181818181818,0.818181818181818,6,0,60,33,66,54,0.55,0.818181818181818,3074.38,826.28,1254.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"LKEL","BT","any",63,0,63,0,36,45,48,48,1,0.571428571428571,0.714285714285714,0.761904761904762,0.761904761904762,0,0,63,36,63,48,0.571428571428571,0.761904761904762,405.16,144.67,218.77,,,,,,FALSE +"fresh_default","default",0,TRUE,"LKEL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,405.16,144.67,218.77,,,,,,FALSE +"fresh_default","default",0,TRUE,"LKEL","BT","rear",26,0,26,0,11,16,16,16,1,0.423076923076923,0.615384615384615,0.615384615384615,0.615384615384615,0,0,26,11,26,16,0.423076923076923,0.615384615384615,405.16,144.67,218.77,,,,,,FALSE +"fresh_default","default",0,TRUE,"LKEL","CH","any",14,0,14,0,12,11,12,14,1,0.857142857142857,0.785714285714286,0.857142857142857,1,5,0,9,7,14,12,0.777777777777778,0.857142857142857,332.18,106.7,162.87,,,,,,FALSE +"fresh_default","default",0,TRUE,"LKEL","CH","spawn",3,0,3,0,3,2,2,3,1,1,0.666666666666667,0.666666666666667,1,3,0,0,0,3,2,,0.666666666666667,332.18,106.7,162.87,,,,,,FALSE +"fresh_default","default",0,TRUE,"LKEL","CH","rear",2,0,2,0,1,2,2,2,1,0.5,1,1,1,0,0,2,1,2,2,0.5,1,332.18,106.7,162.87,,,,,,FALSE +"fresh_default","default",0,TRUE,"LOMI","BT","any",27,0,26,1,20,25,25,25,0.962962962962963,0.740740740740741,0.925925925925926,0.925925925925926,0.925925925925926,0,0,27,20,27,25,0.740740740740741,0.925925925925926,3639.43,1004.03,1513.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"LOMI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3639.43,1004.03,1513.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"LOMI","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3639.43,1004.03,1513.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"LOMI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LOMI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LOMI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LPCE","BT","any",55,0,53,2,42,42,42,42,0.963636363636364,0.763636363636364,0.763636363636364,0.763636363636364,0.763636363636364,0,0,55,42,55,42,0.763636363636364,0.763636363636364,3571.54,1000.37,1386.86,,,,,,FALSE +"fresh_default","default",0,TRUE,"LPCE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3571.54,1000.37,1386.86,,,,,,FALSE +"fresh_default","default",0,TRUE,"LPCE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3571.54,1000.37,1386.86,,,,,,FALSE +"fresh_default","default",0,TRUE,"LPCE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LPCE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LPCE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSAL","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSAL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSAL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSAL","CH","any",17,0,17,0,17,17,17,17,1,1,1,1,1,6,0,11,11,17,17,1,1,3029.07,317.62,1060.92,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSAL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3029.07,317.62,1060.92,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSAL","CH","rear",4,0,4,0,4,4,4,4,1,1,1,1,1,2,0,2,2,4,4,1,1,3029.07,317.62,1060.92,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSKE","BT","any",230,0,227,3,168,193,193,193,0.98695652173913,0.730434782608696,0.839130434782609,0.839130434782609,0.839130434782609,0,0,230,168,230,193,0.730434782608696,0.839130434782609,3075.25,1326.45,1709.47,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSKE","BT","spawn",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0,3,2,3,2,0.666666666666667,0.666666666666667,3075.25,1326.45,1709.47,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSKE","BT","rear",111,0,109,2,69,85,85,85,0.981981981981982,0.621621621621622,0.765765765765766,0.765765765765766,0.765765765765766,0,0,111,69,111,85,0.621621621621622,0.765765765765766,3075.25,1326.45,1709.47,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSKE","CH","any",122,0,119,3,106,106,106,111,0.975409836065574,0.868852459016393,0.868852459016393,0.868852459016393,0.90983606557377,40,0,82,66,122,106,0.804878048780488,0.868852459016393,2101.75,1052.46,1308.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSKE","CH","spawn",24,0,23,1,24,22,22,24,0.958333333333333,1,0.916666666666667,0.916666666666667,1,24,0,0,0,24,22,,0.916666666666667,2101.75,1052.46,1308.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"LSKE","CH","rear",35,0,35,0,26,29,29,30,1,0.742857142857143,0.828571428571429,0.828571428571429,0.857142857142857,3,0,32,23,35,29,0.71875,0.828571428571429,2101.75,1052.46,1308.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"MESI","BT","any",64,0,64,0,50,60,60,60,1,0.78125,0.9375,0.9375,0.9375,0,0,64,50,64,60,0.78125,0.9375,2825.32,691.09,1077.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"MESI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2825.32,691.09,1077.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"MESI","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2825.32,691.09,1077.07,,,,,,FALSE +"fresh_default","default",0,TRUE,"MESI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"MESI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"MESI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"MFRA","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"MFRA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"MFRA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"MFRA","CH","any",2,0,1,1,0,0,0,0,0.5,0,0,0,0,0,0,2,0,2,0,0,0,277.46,100.9,121.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"MFRA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,277.46,100.9,121.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"MFRA","CH","rear",2,0,1,1,0,0,0,0,0.5,0,0,0,0,0,0,2,0,2,0,0,0,277.46,100.9,121.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORK","BT","any",79,0,79,0,70,72,73,73,1,0.886075949367089,0.911392405063291,0.924050632911392,0.924050632911392,0,0,79,70,79,73,0.886075949367089,0.924050632911392,7202.59,2148.8,3077.39,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORK","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7202.59,2148.8,3077.39,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORK","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7202.59,2148.8,3077.39,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORK","CH","any",156,0,155,1,145,145,146,148,0.993589743589744,0.92948717948718,0.92948717948718,0.935897435897436,0.948717948717949,92,0,64,53,156,146,0.828125,0.935897435897436,5953.1,1577.65,2499.11,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORK","CH","spawn",25,0,25,0,25,23,24,25,1,1,0.92,0.96,1,25,0,0,0,25,24,,0.96,5953.1,1577.65,2499.11,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORK","CH","rear",32,0,31,1,24,25,25,25,0.96875,0.75,0.78125,0.78125,0.78125,15,0,17,9,32,25,0.529411764705882,0.78125,5953.1,1577.65,2499.11,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORR","BT","any",357,0,357,0,154,258,265,265,1,0.431372549019608,0.722689075630252,0.742296918767507,0.742296918767507,0,0,357,154,357,265,0.431372549019608,0.742296918767507,4865.96,960.8,1685.2,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORR","BT","spawn",23,0,23,0,7,15,15,15,1,0.304347826086957,0.652173913043478,0.652173913043478,0.652173913043478,0,0,23,7,23,15,0.304347826086957,0.652173913043478,4865.96,960.8,1685.2,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORR","BT","rear",106,0,106,0,28,63,65,65,1,0.264150943396226,0.594339622641509,0.613207547169811,0.613207547169811,0,0,106,28,106,65,0.264150943396226,0.613207547169811,4865.96,960.8,1685.2,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORR","CH","any",41,0,41,0,33,35,38,38,1,0.804878048780488,0.853658536585366,0.926829268292683,0.926829268292683,24,0,17,10,41,38,0.588235294117647,0.926829268292683,3341.35,646.28,1171.33,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORR","CH","spawn",9,0,9,0,9,7,9,9,1,1,0.777777777777778,1,1,9,0,0,0,9,9,,1,3341.35,646.28,1171.33,,,,,,FALSE +"fresh_default","default",0,TRUE,"MORR","CH","rear",2,0,2,0,1,2,2,2,1,0.5,1,1,1,0,0,2,1,2,2,0.5,1,3341.35,646.28,1171.33,,,,,,FALSE +"fresh_default","default",0,TRUE,"MSKE","BT","any",69,0,68,1,46,51,51,51,0.985507246376812,0.666666666666667,0.739130434782609,0.739130434782609,0.739130434782609,0,0,69,46,69,51,0.666666666666667,0.739130434782609,2691.58,922.19,1383.97,,,,,,FALSE +"fresh_default","default",0,TRUE,"MSKE","BT","spawn",4,0,4,0,2,2,2,2,1,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,2691.58,922.19,1383.97,,,,,,FALSE +"fresh_default","default",0,TRUE,"MSKE","BT","rear",5,0,4,1,0,0,0,0,0.8,0,0,0,0,0,0,5,0,5,0,0,0,2691.58,922.19,1383.97,,,,,,FALSE +"fresh_default","default",0,TRUE,"MSKE","CH","any",42,0,40,2,36,38,38,39,0.952380952380952,0.857142857142857,0.904761904761905,0.904761904761905,0.928571428571429,6,0,36,30,42,38,0.833333333333333,0.904761904761905,1516.21,676.83,856.12,,,,,,FALSE +"fresh_default","default",0,TRUE,"MSKE","CH","spawn",4,0,3,1,4,3,3,4,0.75,1,0.75,0.75,1,4,0,0,0,4,3,,0.75,1516.21,676.83,856.12,,,,,,FALSE +"fresh_default","default",0,TRUE,"MSKE","CH","rear",2,0,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,1,0,1,0,2,1,0,0.5,1516.21,676.83,856.12,,,,,,FALSE +"fresh_default","default",0,TRUE,"NARC","BT","any",7,0,7,0,7,7,7,7,1,1,1,1,1,0,0,7,7,7,7,1,1,4336.98,873.49,1703.68,,,,,,FALSE +"fresh_default","default",0,TRUE,"NARC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4336.98,873.49,1703.68,,,,,,FALSE +"fresh_default","default",0,TRUE,"NARC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4336.98,873.49,1703.68,,,,,,FALSE +"fresh_default","default",0,TRUE,"NARC","CH","any",22,0,22,0,21,20,20,22,1,0.954545454545455,0.909090909090909,0.909090909090909,1,18,0,4,3,22,20,0.75,0.909090909090909,3563.45,506.51,1327.21,,,,,,FALSE +"fresh_default","default",0,TRUE,"NARC","CH","spawn",9,0,9,0,9,8,8,9,1,1,0.888888888888889,0.888888888888889,1,9,0,0,0,9,8,,0.888888888888889,3563.45,506.51,1327.21,,,,,,FALSE +"fresh_default","default",0,TRUE,"NARC","CH","rear",6,0,6,0,6,5,5,6,1,1,0.833333333333333,0.833333333333333,1,5,0,1,1,6,5,1,0.833333333333333,3563.45,506.51,1327.21,,,,,,FALSE +"fresh_default","default",0,TRUE,"NATR","BT","any",57,0,57,0,37,47,48,48,1,0.649122807017544,0.824561403508772,0.842105263157895,0.842105263157895,0,0,57,37,57,48,0.649122807017544,0.842105263157895,9819.51,1803.66,3496.13,,,,,,FALSE +"fresh_default","default",0,TRUE,"NATR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,9819.51,1803.66,3496.13,,,,,,FALSE +"fresh_default","default",0,TRUE,"NATR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,9819.51,1803.66,3496.13,,,,,,FALSE +"fresh_default","default",0,TRUE,"NATR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"NATR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"NATR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"NECR","BT","any",12,0,12,0,12,12,12,12,1,1,1,1,1,0,0,12,12,12,12,1,1,6329.74,991.14,1943.82,,,,,,FALSE +"fresh_default","default",0,TRUE,"NECR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6329.74,991.14,1943.82,,,,,,FALSE +"fresh_default","default",0,TRUE,"NECR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6329.74,991.14,1943.82,,,,,,FALSE +"fresh_default","default",0,TRUE,"NECR","CH","any",101,0,101,0,93,97,97,97,1,0.920792079207921,0.96039603960396,0.96039603960396,0.96039603960396,33,0,68,60,101,97,0.88235294117647,0.96039603960396,5608.47,516.15,1649.24,,,,,,FALSE +"fresh_default","default",0,TRUE,"NECR","CH","spawn",9,0,9,0,9,9,9,9,1,1,1,1,1,9,0,0,0,9,9,,1,5608.47,516.15,1649.24,,,,,,FALSE +"fresh_default","default",0,TRUE,"NECR","CH","rear",6,0,6,0,4,6,6,6,1,0.666666666666667,1,1,1,1,0,5,3,6,6,0.6,1,5608.47,516.15,1649.24,,,,,,FALSE +"fresh_default","default",0,TRUE,"OSPK","BT","any",12,0,12,0,10,12,12,12,1,0.833333333333333,1,1,1,0,0,12,10,12,12,0.833333333333333,1,1882.44,594.62,877.22,,,,,,FALSE +"fresh_default","default",0,TRUE,"OSPK","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1882.44,594.62,877.22,,,,,,FALSE +"fresh_default","default",0,TRUE,"OSPK","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1882.44,594.62,877.22,,,,,,FALSE +"fresh_default","default",0,TRUE,"OSPK","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"OSPK","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"OSPK","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARA","BT","any",77,0,77,0,60,67,70,70,1,0.779220779220779,0.87012987012987,0.909090909090909,0.909090909090909,0,0,77,60,77,70,0.779220779220779,0.909090909090909,4400.24,720.29,1330.46,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4400.24,720.29,1330.46,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4400.24,720.29,1330.46,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARS","BT","any",281,0,281,0,231,259,259,259,1,0.822064056939502,0.921708185053381,0.921708185053381,0.921708185053381,0,0,281,231,281,259,0.822064056939502,0.921708185053381,6883.03,1685.38,2635.01,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARS","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6883.03,1685.38,2635.01,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARS","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6883.03,1685.38,2635.01,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARS","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARS","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PARS","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PCEA","BT","any",176,0,176,0,134,151,161,161,1,0.761363636363636,0.857954545454545,0.914772727272727,0.914772727272727,0,0,176,134,176,161,0.761363636363636,0.914772727272727,7091.82,921.92,1489.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"PCEA","BT","spawn",1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,7091.82,921.92,1489.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"PCEA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7091.82,921.92,1489.72,,,,,,FALSE +"fresh_default","default",0,TRUE,"PCEA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PCEA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PCEA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"PINE","BT","any",249,0,249,0,225,240,240,240,1,0.903614457831325,0.963855421686747,0.963855421686747,0.963855421686747,0,0,249,225,249,240,0.903614457831325,0.963855421686747,5539.06,1645.08,2409.65,213,193,115,153,153,TRUE +"fresh_default","default",0,TRUE,"PINE","BT","spawn",3,0,3,0,3,3,3,3,1,1,1,1,1,0,0,3,3,3,3,1,1,5539.06,1645.08,2409.65,213,193,115,153,153,TRUE +"fresh_default","default",0,TRUE,"PINE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5539.06,1645.08,2409.65,213,193,115,153,153,TRUE +"fresh_default","default",0,TRUE,"PINE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"PINE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"PINE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"SALR","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"SALR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"SALR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"SALR","CH","any",7,0,7,0,6,6,6,6,1,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,5,0,2,1,7,6,0.5,0.857142857142857,3174.7,234.92,966.25,,,,,,FALSE +"fresh_default","default",0,TRUE,"SALR","CH","spawn",4,0,4,0,4,4,4,4,1,1,1,1,1,4,0,0,0,4,4,,1,3174.7,234.92,966.25,,,,,,FALSE +"fresh_default","default",0,TRUE,"SALR","CH","rear",2,0,2,0,1,1,1,1,1,0.5,0.5,0.5,0.5,0,0,2,1,2,1,0.5,0.5,3174.7,234.92,966.25,,,,,,FALSE +"fresh_default","default",0,TRUE,"SETN","BT","any",180,0,177,3,115,143,150,150,0.983333333333333,0.638888888888889,0.794444444444444,0.833333333333333,0.833333333333333,0,0,180,115,180,150,0.638888888888889,0.833333333333333,3258.86,851.7,1239.78,,,,,,FALSE +"fresh_default","default",0,TRUE,"SETN","BT","spawn",3,0,2,1,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0,3,2,3,2,0.666666666666667,0.666666666666667,3258.86,851.7,1239.78,,,,,,FALSE +"fresh_default","default",0,TRUE,"SETN","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3258.86,851.7,1239.78,,,,,,FALSE +"fresh_default","default",0,TRUE,"SETN","CH","any",117,0,116,1,111,111,112,112,0.991452991452991,0.948717948717949,0.948717948717949,0.957264957264957,0.957264957264957,105,0,12,6,117,112,0.5,0.957264957264957,1500.97,543.88,663.52,,,,,,FALSE +"fresh_default","default",0,TRUE,"SETN","CH","spawn",17,0,17,0,16,16,16,16,1,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,16,0,1,0,17,16,0,0.941176470588235,1500.97,543.88,663.52,,,,,,FALSE +"fresh_default","default",0,TRUE,"SETN","CH","rear",85,0,85,0,85,85,85,85,1,1,1,1,1,82,0,3,3,85,85,1,1,1500.97,543.88,663.52,,,,,,FALSE +"fresh_default","default",0,TRUE,"SLOC","BT","any",96,0,93,3,39,59,62,62,0.96875,0.40625,0.614583333333333,0.645833333333333,0.645833333333333,0,0,96,39,96,62,0.40625,0.645833333333333,1117.37,395.66,574.02,,,,,,TRUE +"fresh_default","default",0,TRUE,"SLOC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1117.37,395.66,574.02,,,,,,TRUE +"fresh_default","default",0,TRUE,"SLOC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1117.37,395.66,574.02,,,,,,TRUE +"fresh_default","default",0,TRUE,"SLOC","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"SLOC","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"SLOC","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",0,TRUE,"TABR","BT","any",10,0,10,0,4,4,4,4,1,0.4,0.4,0.4,0.4,0,0,10,4,10,4,0.4,0.4,3402.26,678.31,1061,,,,,,FALSE +"fresh_default","default",0,TRUE,"TABR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3402.26,678.31,1061,,,,,,FALSE +"fresh_default","default",0,TRUE,"TABR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3402.26,678.31,1061,,,,,,FALSE +"fresh_default","default",0,TRUE,"TABR","CH","any",50,0,48,2,29,32,32,32,0.96,0.58,0.64,0.64,0.64,4,0,46,25,50,32,0.543478260869565,0.64,2633.55,410.85,789.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"TABR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2633.55,410.85,789.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"TABR","CH","rear",25,0,24,1,17,18,18,18,0.96,0.68,0.72,0.72,0.72,3,0,22,14,25,18,0.636363636363636,0.72,2633.55,410.85,789.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"TOOD","BT","any",36,0,36,0,31,34,34,34,1,0.861111111111111,0.944444444444444,0.944444444444444,0.944444444444444,0,0,36,31,36,34,0.861111111111111,0.944444444444444,4697.77,1131.97,1815.93,,,,,,FALSE +"fresh_default","default",0,TRUE,"TOOD","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4697.77,1131.97,1815.93,,,,,,FALSE +"fresh_default","default",0,TRUE,"TOOD","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4697.77,1131.97,1815.93,,,,,,FALSE +"fresh_default","default",0,TRUE,"TOOD","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"TOOD","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"TOOD","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"TWAC","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,1060.41,227.23,402.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"TWAC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1060.41,227.23,402.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"TWAC","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1060.41,227.23,402.55,,,,,,FALSE +"fresh_default","default",0,TRUE,"TWAC","CH","any",9,0,9,0,8,9,9,9,1,0.888888888888889,1,1,1,0,0,9,8,9,9,0.888888888888889,1,705.9,144.23,228.3,,,,,,FALSE +"fresh_default","default",0,TRUE,"TWAC","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,705.9,144.23,228.3,,,,,,FALSE +"fresh_default","default",0,TRUE,"TWAC","CH","rear",7,0,7,0,7,7,7,7,1,1,1,1,1,0,0,7,7,7,7,1,1,705.9,144.23,228.3,,,,,,FALSE +"fresh_default","default",0,TRUE,"UFRA","BT","any",87,0,87,0,44,58,58,58,1,0.505747126436782,0.666666666666667,0.666666666666667,0.666666666666667,0,0,87,44,87,58,0.505747126436782,0.666666666666667,2752.86,948.12,1217.11,,,,,,FALSE +"fresh_default","default",0,TRUE,"UFRA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2752.86,948.12,1217.11,,,,,,FALSE +"fresh_default","default",0,TRUE,"UFRA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2752.86,948.12,1217.11,,,,,,FALSE +"fresh_default","default",0,TRUE,"UFRA","CH","any",51,0,51,0,45,45,45,45,1,0.88235294117647,0.88235294117647,0.88235294117647,0.88235294117647,29,0,22,16,51,45,0.727272727272727,0.88235294117647,1487.28,642.83,764.56,,,,,,FALSE +"fresh_default","default",0,TRUE,"UFRA","CH","spawn",11,0,11,0,11,11,11,11,1,1,1,1,1,11,0,0,0,11,11,,1,1487.28,642.83,764.56,,,,,,FALSE +"fresh_default","default",0,TRUE,"UFRA","CH","rear",6,0,6,0,3,3,3,3,1,0.5,0.5,0.5,0.5,2,0,4,1,6,3,0.25,0.5,1487.28,642.83,764.56,,,,,,FALSE +"fresh_default","default",0,TRUE,"UNRS","BT","any",2,0,2,0,0,2,2,2,1,0,1,1,1,0,0,2,0,2,2,0,1,7487.48,645.96,1280.54,,,,,,FALSE +"fresh_default","default",0,TRUE,"UNRS","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7487.48,645.96,1280.54,,,,,,FALSE +"fresh_default","default",0,TRUE,"UNRS","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7487.48,645.96,1280.54,,,,,,FALSE +"fresh_default","default",0,TRUE,"UNRS","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"UNRS","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"UNRS","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"UOMI","BT","any",82,0,82,0,42,50,51,51,1,0.51219512195122,0.609756097560976,0.621951219512195,0.621951219512195,0,0,82,42,82,51,0.51219512195122,0.621951219512195,3764.77,911.83,1451.62,,,,,,FALSE +"fresh_default","default",0,TRUE,"UOMI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3764.77,911.83,1451.62,,,,,,FALSE +"fresh_default","default",0,TRUE,"UOMI","BT","rear",22,0,22,0,6,8,9,9,1,0.272727272727273,0.363636363636364,0.409090909090909,0.409090909090909,0,0,22,6,22,9,0.272727272727273,0.409090909090909,3764.77,911.83,1451.62,,,,,,FALSE +"fresh_default","default",0,TRUE,"UOMI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"UOMI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"UOMI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"UPCE","BT","any",153,0,152,1,138,138,138,138,0.993464052287582,0.901960784313726,0.901960784313726,0.901960784313726,0.901960784313726,0,0,153,138,153,138,0.901960784313726,0.901960784313726,5689.87,1682.32,2340.3,570,556,441,444,493,FALSE +"fresh_default","default",0,TRUE,"UPCE","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,5689.87,1682.32,2340.3,570,556,441,444,493,FALSE +"fresh_default","default",0,TRUE,"UPCE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5689.87,1682.32,2340.3,570,556,441,444,493,FALSE +"fresh_default","default",0,TRUE,"UPCE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"UPCE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"UPCE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",0,TRUE,"USKE","BT","any",32,0,32,0,28,31,31,31,1,0.875,0.96875,0.96875,0.96875,0,0,32,28,32,31,0.875,0.96875,2969.07,739.68,1264.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"USKE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2969.07,739.68,1264.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"USKE","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,2969.07,739.68,1264.94,,,,,,FALSE +"fresh_default","default",0,TRUE,"USKE","CH","any",8,0,8,0,8,8,8,8,1,1,1,1,1,0,0,8,8,8,8,1,1,1528.86,498.83,733.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"USKE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1528.86,498.83,733.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"USKE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1528.86,498.83,733.99,,,,,,FALSE +"fresh_default","default",0,TRUE,"WILL","BT","any",54,0,54,0,39,51,51,51,1,0.722222222222222,0.944444444444444,0.944444444444444,0.944444444444444,0,0,54,39,54,51,0.722222222222222,0.944444444444444,4562.41,1055.35,1720.76,,,,,,FALSE +"fresh_default","default",0,TRUE,"WILL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4562.41,1055.35,1720.76,,,,,,FALSE +"fresh_default","default",0,TRUE,"WILL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4562.41,1055.35,1720.76,,,,,,FALSE +"fresh_default","default",0,TRUE,"WILL","CH","any",58,0,58,0,53,53,53,54,1,0.913793103448276,0.913793103448276,0.913793103448276,0.931034482758621,40,0,18,13,58,53,0.722222222222222,0.913793103448276,3601.38,640.69,1364.26,,,,,,FALSE +"fresh_default","default",0,TRUE,"WILL","CH","spawn",3,0,3,0,3,2,2,3,1,1,0.666666666666667,0.666666666666667,1,3,0,0,0,3,2,,0.666666666666667,3601.38,640.69,1364.26,,,,,,FALSE +"fresh_default","default",0,TRUE,"WILL","CH","rear",42,0,42,0,38,39,39,39,1,0.904761904761905,0.928571428571429,0.928571428571429,0.928571428571429,30,0,12,8,42,39,0.666666666666667,0.928571428571429,3601.38,640.69,1364.26,,,,,,FALSE +"fresh_default","default",0,TRUE,"ZYMO","BT","any",280,0,276,4,129,188,196,196,0.985714285714286,0.460714285714286,0.671428571428571,0.7,0.7,0,0,280,129,280,196,0.460714285714286,0.7,2058.68,594.73,897.89,,,,,,FALSE +"fresh_default","default",0,TRUE,"ZYMO","BT","spawn",14,0,14,0,7,10,10,10,1,0.5,0.714285714285714,0.714285714285714,0.714285714285714,0,0,14,7,14,10,0.5,0.714285714285714,2058.68,594.73,897.89,,,,,,FALSE +"fresh_default","default",0,TRUE,"ZYMO","BT","rear",147,0,147,0,53,86,88,88,1,0.360544217687075,0.585034013605442,0.598639455782313,0.598639455782313,0,0,147,53,147,88,0.360544217687075,0.598639455782313,2058.68,594.73,897.89,,,,,,FALSE +"fresh_default","default",0,TRUE,"ZYMO","CH","any",21,0,19,2,14,16,16,17,0.904761904761905,0.666666666666667,0.761904761904762,0.761904761904762,0.80952380952381,8,0,13,6,21,16,0.461538461538462,0.761904761904762,1211.06,463.12,602.24,,,,,,FALSE +"fresh_default","default",0,TRUE,"ZYMO","CH","spawn",8,0,7,1,8,7,7,8,0.875,1,0.875,0.875,1,8,0,0,0,8,7,,0.875,1211.06,463.12,602.24,,,,,,FALSE +"fresh_default","default",0,TRUE,"ZYMO","CH","rear",5,0,4,1,0,1,1,1,0.8,0,0.2,0.2,0.2,0,0,5,0,5,1,0,0.2,1211.06,463.12,602.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"ADMS","BT","any",37,0,37,0,25,28,29,29,1,0.675675675675676,0.756756756756757,0.783783783783784,0.783783783783784,0,0,37,25,37,29,0.675675675675676,0.783783783783784,1332.83,360.42,526.17,,,,,,FALSE +"fresh_default","default",100,TRUE,"ADMS","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1332.83,360.42,526.17,,,,,,FALSE +"fresh_default","default",100,TRUE,"ADMS","BT","rear",6,0,6,0,3,4,4,4,1,0.5,0.666666666666667,0.666666666666667,0.666666666666667,0,0,6,3,6,4,0.5,0.666666666666667,1332.83,360.42,526.17,,,,,,FALSE +"fresh_default","default",100,TRUE,"ADMS","CH","any",11,0,11,0,10,9,10,10,1,0.909090909090909,0.818181818181818,0.909090909090909,0.909090909090909,7,0,4,3,11,10,0.75,0.909090909090909,842.06,277.53,351.69,,,,,,FALSE +"fresh_default","default",100,TRUE,"ADMS","CH","spawn",5,0,5,0,5,4,5,5,1,1,0.8,1,1,5,0,0,0,5,5,,1,842.06,277.53,351.69,,,,,,FALSE +"fresh_default","default",100,TRUE,"ADMS","CH","rear",2,0,2,0,2,2,2,2,1,1,1,1,1,1,0,1,1,2,2,1,1,842.06,277.53,351.69,,,,,,FALSE +"fresh_default","default",100,TRUE,"BBAR","BT","any",16,0,16,0,10,14,14,14,1,0.625,0.875,0.875,0.875,0,0,16,10,16,14,0.625,0.875,1761.57,329.41,560.67,,,,,,FALSE +"fresh_default","default",100,TRUE,"BBAR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1761.57,329.41,560.67,,,,,,FALSE +"fresh_default","default",100,TRUE,"BBAR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1761.57,329.41,560.67,,,,,,FALSE +"fresh_default","default",100,TRUE,"BBAR","CH","any",5,0,3,2,1,1,1,1,0.6,0.2,0.2,0.2,0.2,0,0,5,1,5,1,0.2,0.2,275.36,160.2,169.06,,,,,,FALSE +"fresh_default","default",100,TRUE,"BBAR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,275.36,160.2,169.06,,,,,,FALSE +"fresh_default","default",100,TRUE,"BBAR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,275.36,160.2,169.06,,,,,,FALSE +"fresh_default","default",100,TRUE,"BULK","BT","any",468,0,464,4,239,338,338,338,0.991452991452991,0.510683760683761,0.722222222222222,0.722222222222222,0.722222222222222,0,0,468,239,468,338,0.510683760683761,0.722222222222222,7713.98,1852.11,3012.7,,,,,,FALSE +"fresh_default","default",100,TRUE,"BULK","BT","spawn",12,0,12,0,4,9,9,9,1,0.333333333333333,0.75,0.75,0.75,0,0,12,4,12,9,0.333333333333333,0.75,7713.98,1852.11,3012.7,,,,,,FALSE +"fresh_default","default",100,TRUE,"BULK","BT","rear",255,0,252,3,95,159,159,159,0.988235294117647,0.372549019607843,0.623529411764706,0.623529411764706,0.623529411764706,0,0,255,95,255,159,0.372549019607843,0.623529411764706,7713.98,1852.11,3012.7,,,,,,FALSE +"fresh_default","default",100,TRUE,"BULK","CH","any",110,0,110,0,105,108,108,108,1,0.954545454545455,0.981818181818182,0.981818181818182,0.981818181818182,19,0,91,86,110,108,0.945054945054945,0.981818181818182,5178.19,1264.07,2038.12,,,,,,FALSE +"fresh_default","default",100,TRUE,"BULK","CH","spawn",16,0,16,0,16,16,16,16,1,1,1,1,1,16,0,0,0,16,16,,1,5178.19,1264.07,2038.12,,,,,,FALSE +"fresh_default","default",100,TRUE,"BULK","CH","rear",11,0,11,0,6,9,9,9,1,0.545454545454545,0.818181818181818,0.818181818181818,0.818181818181818,0,0,11,6,11,9,0.545454545454545,0.818181818181818,5178.19,1264.07,2038.12,,,,,,FALSE +"fresh_default","default",100,TRUE,"CARP","BT","any",6,0,6,0,4,4,6,6,1,0.666666666666667,0.666666666666667,1,1,0,0,6,4,6,6,0.666666666666667,1,4420.57,502.37,1026.27,,,,,,FALSE +"fresh_default","default",100,TRUE,"CARP","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4420.57,502.37,1026.27,,,,,,FALSE +"fresh_default","default",100,TRUE,"CARP","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4420.57,502.37,1026.27,,,,,,FALSE +"fresh_default","default",100,TRUE,"CARP","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"CARP","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"CARP","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHES","BT","any",3,0,3,0,3,3,3,3,1,1,1,1,1,0,0,3,3,3,3,1,1,2904.74,376.85,796.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHES","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2904.74,376.85,796.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHES","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2904.74,376.85,796.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHES","CH","any",87,0,85,2,81,82,83,83,0.977011494252874,0.931034482758621,0.942528735632184,0.954022988505747,0.954022988505747,28,0,59,54,87,83,0.915254237288136,0.954022988505747,780.54,88.26,258.88,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHES","CH","spawn",3,0,2,1,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2,0,1,0,3,2,0,0.666666666666667,780.54,88.26,258.88,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHES","CH","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,780.54,88.26,258.88,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHWK","BT","any",62,0,62,0,41,52,56,56,1,0.661290322580645,0.838709677419355,0.903225806451613,0.903225806451613,0,0,62,41,62,56,0.661290322580645,0.903225806451613,793.94,310.02,353.48,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHWK","BT","spawn",5,0,5,0,4,4,5,5,1,0.8,0.8,1,1,0,0,5,4,5,5,0.8,1,793.94,310.02,353.48,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHWK","BT","rear",5,0,5,0,4,4,4,4,1,0.8,0.8,0.8,0.8,0,0,5,4,5,4,0.8,0.8,793.94,310.02,353.48,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHWK","CH","any",21,0,21,0,17,16,19,19,1,0.80952380952381,0.761904761904762,0.904761904761905,0.904761904761905,2,0,19,15,21,19,0.789473684210526,0.904761904761905,698.92,257.8,310.79,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHWK","CH","spawn",8,0,8,0,7,6,8,8,1,0.875,0.75,1,1,2,0,6,5,8,8,0.833333333333333,1,698.92,257.8,310.79,,,,,,FALSE +"fresh_default","default",100,TRUE,"CHWK","CH","rear",4,0,4,0,4,4,4,4,1,1,1,1,1,0,0,4,4,4,4,1,1,698.92,257.8,310.79,,,,,,FALSE +"fresh_default","default",100,TRUE,"COTR","BT","any",85,0,84,1,47,69,69,69,0.988235294117647,0.552941176470588,0.811764705882353,0.811764705882353,0.811764705882353,0,0,85,47,85,69,0.552941176470588,0.811764705882353,6856.99,1480.88,2433.36,75,65,31,38,40,FALSE +"fresh_default","default",100,TRUE,"COTR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6856.99,1480.88,2433.36,75,65,31,38,40,FALSE +"fresh_default","default",100,TRUE,"COTR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6856.99,1480.88,2433.36,75,65,31,38,40,FALSE +"fresh_default","default",100,TRUE,"COTR","CH","any",100,0,95,5,72,77,78,79,0.95,0.72,0.77,0.78,0.79,40,0,60,32,100,78,0.533333333333333,0.78,4143.01,702.76,1364.58,68,25,11,13,15,FALSE +"fresh_default","default",100,TRUE,"COTR","CH","spawn",15,0,14,1,15,14,14,15,0.933333333333333,1,0.933333333333333,0.933333333333333,1,15,0,0,0,15,14,,0.933333333333333,4143.01,702.76,1364.58,68,25,11,13,15,FALSE +"fresh_default","default",100,TRUE,"COTR","CH","rear",48,0,45,3,29,33,33,33,0.9375,0.604166666666667,0.6875,0.6875,0.6875,12,0,36,17,48,33,0.472222222222222,0.6875,4143.01,702.76,1364.58,68,25,11,13,15,FALSE +"fresh_default","default",100,TRUE,"CRKD","BT","any",4,0,4,0,4,4,4,4,1,1,1,1,1,0,0,4,4,4,4,1,1,5115.69,695.8,1448.76,,,,,,FALSE +"fresh_default","default",100,TRUE,"CRKD","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5115.69,695.8,1448.76,,,,,,FALSE +"fresh_default","default",100,TRUE,"CRKD","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5115.69,695.8,1448.76,,,,,,FALSE +"fresh_default","default",100,TRUE,"CRKD","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"CRKD","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"CRKD","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"DOGC","BT","any",17,0,17,0,13,17,17,17,1,0.764705882352941,1,1,1,0,0,17,13,17,17,0.764705882352941,1,1260.46,286.17,502.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"DOGC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1260.46,286.17,502.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"DOGC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1260.46,286.17,502.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"DOGC","CH","any",5,0,5,0,5,5,5,5,1,1,1,1,1,2,0,3,3,5,5,1,1,358.78,162,196.9,,,,,,FALSE +"fresh_default","default",100,TRUE,"DOGC","CH","spawn",2,0,2,0,2,2,2,2,1,1,1,1,1,2,0,0,0,2,2,,1,358.78,162,196.9,,,,,,FALSE +"fresh_default","default",100,TRUE,"DOGC","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,358.78,162,196.9,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINA","BT","any",107,0,107,0,96,99,105,105,1,0.897196261682243,0.925233644859813,0.981308411214953,0.981308411214953,0,0,107,96,107,105,0.897196261682243,0.981308411214953,7889.87,1325.37,2218.78,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7889.87,1325.37,2218.78,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7889.87,1325.37,2218.78,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINL","BT","any",32,0,32,0,25,29,29,29,1,0.78125,0.90625,0.90625,0.90625,0,0,32,25,32,29,0.78125,0.90625,4515.86,1365.64,2107.58,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4515.86,1365.64,2107.58,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4515.86,1365.64,2107.58,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINL","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FINL","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FIRE","BT","any",172,0,172,0,135,155,157,157,1,0.784883720930233,0.901162790697674,0.912790697674419,0.912790697674419,0,0,172,135,172,157,0.784883720930233,0.912790697674419,6663.44,1012.79,1911.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"FIRE","BT","spawn",4,0,4,0,2,3,3,3,1,0.5,0.75,0.75,0.75,0,0,4,2,4,3,0.5,0.75,6663.44,1012.79,1911.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"FIRE","BT","rear",66,0,66,0,57,62,62,62,1,0.863636363636364,0.93939393939394,0.93939393939394,0.93939393939394,0,0,66,57,66,62,0.863636363636364,0.93939393939394,6663.44,1012.79,1911.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"FIRE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FIRE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FIRE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FOXR","BT","any",33,0,33,0,26,31,31,31,1,0.787878787878788,0.93939393939394,0.93939393939394,0.93939393939394,0,0,33,26,33,31,0.787878787878788,0.93939393939394,3665.56,928.18,1525.02,,,,,,FALSE +"fresh_default","default",100,TRUE,"FOXR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3665.56,928.18,1525.02,,,,,,FALSE +"fresh_default","default",100,TRUE,"FOXR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3665.56,928.18,1525.02,,,,,,FALSE +"fresh_default","default",100,TRUE,"FOXR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FOXR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FOXR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRAN","BT","any",102,0,102,0,55,74,74,74,1,0.53921568627451,0.725490196078431,0.725490196078431,0.725490196078431,0,0,102,55,102,74,0.53921568627451,0.725490196078431,9078.53,1120.86,2355.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRAN","BT","spawn",1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,9078.53,1120.86,2355.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRAN","BT","rear",90,0,90,0,45,63,63,63,1,0.5,0.7,0.7,0.7,0,0,90,45,90,63,0.5,0.7,9078.53,1120.86,2355.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRAN","CH","any",23,0,23,0,21,20,21,21,1,0.91304347826087,0.869565217391304,0.91304347826087,0.91304347826087,11,0,12,10,23,21,0.833333333333333,0.91304347826087,7351.32,597.53,1631.89,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRAN","CH","spawn",4,0,4,0,4,3,4,4,1,1,0.75,1,1,4,0,0,0,4,4,,1,7351.32,597.53,1631.89,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRAN","CH","rear",4,0,4,0,2,2,2,2,1,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,7351.32,597.53,1631.89,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRCN","BT","any",95,0,95,0,54,91,92,92,1,0.568421052631579,0.957894736842105,0.968421052631579,0.968421052631579,0,0,95,54,95,92,0.568421052631579,0.968421052631579,1504.38,663.33,889.13,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRCN","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1504.38,663.33,889.13,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRCN","BT","rear",5,0,5,0,2,5,5,5,1,0.4,1,1,1,0,0,5,2,5,5,0.4,1,1504.38,663.33,889.13,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRCN","CH","any",31,0,30,1,26,27,27,30,0.967741935483871,0.838709677419355,0.870967741935484,0.870967741935484,0.967741935483871,13,0,18,13,31,27,0.722222222222222,0.870967741935484,749.15,451.01,481.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRCN","CH","spawn",5,0,5,0,5,3,3,5,1,1,0.6,0.6,1,5,0,0,0,5,3,,0.6,749.15,451.01,481.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"FRCN","CH","rear",13,0,13,0,10,13,13,13,1,0.769230769230769,1,1,1,2,0,11,8,13,13,0.727272727272727,1,749.15,451.01,481.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"HARR","BT","any",43,0,42,1,24,35,38,38,0.976744186046512,0.558139534883721,0.813953488372093,0.883720930232558,0.883720930232558,0,0,43,24,43,38,0.558139534883721,0.883720930232558,1619.34,470.27,588.62,,,,,,FALSE +"fresh_default","default",100,TRUE,"HARR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1619.34,470.27,588.62,,,,,,FALSE +"fresh_default","default",100,TRUE,"HARR","BT","rear",7,0,7,0,4,7,7,7,1,0.571428571428571,1,1,1,0,0,7,4,7,7,0.571428571428571,1,1619.34,470.27,588.62,,,,,,FALSE +"fresh_default","default",100,TRUE,"HARR","CH","any",118,0,116,2,110,109,111,112,0.983050847457627,0.932203389830508,0.923728813559322,0.940677966101695,0.949152542372881,8,0,110,102,118,111,0.927272727272727,0.940677966101695,1148.93,329.59,385.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"HARR","CH","spawn",4,0,4,0,4,3,3,4,1,1,0.75,0.75,1,4,0,0,0,4,3,,0.75,1148.93,329.59,385.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"HARR","CH","rear",46,0,45,1,44,44,44,44,0.978260869565217,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,0,0,46,44,46,44,0.956521739130435,0.956521739130435,1148.93,329.59,385.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"INGR","BT","any",27,0,27,0,23,26,26,26,1,0.851851851851852,0.962962962962963,0.962962962962963,0.962962962962963,0,0,27,23,27,26,0.851851851851852,0.962962962962963,3925.58,1111.41,1736.58,,,,,,FALSE +"fresh_default","default",100,TRUE,"INGR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3925.58,1111.41,1736.58,,,,,,FALSE +"fresh_default","default",100,TRUE,"INGR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3925.58,1111.41,1736.58,,,,,,FALSE +"fresh_default","default",100,TRUE,"INGR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"INGR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"INGR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"KISP","BT","any",195,0,192,3,128,162,165,165,0.984615384615385,0.656410256410256,0.830769230769231,0.846153846153846,0.846153846153846,0,0,195,128,195,165,0.656410256410256,0.846153846153846,4529.14,1258.71,1894.95,,,,,,FALSE +"fresh_default","default",100,TRUE,"KISP","BT","spawn",5,0,5,0,2,3,3,3,1,0.4,0.6,0.6,0.6,0,0,5,2,5,3,0.4,0.6,4529.14,1258.71,1894.95,,,,,,FALSE +"fresh_default","default",100,TRUE,"KISP","BT","rear",56,0,53,3,28,38,38,38,0.946428571428571,0.5,0.678571428571429,0.678571428571429,0.678571428571429,0,0,56,28,56,38,0.5,0.678571428571429,4529.14,1258.71,1894.95,,,,,,FALSE +"fresh_default","default",100,TRUE,"KISP","CH","any",89,0,89,0,84,78,81,85,1,0.943820224719101,0.876404494382023,0.910112359550562,0.955056179775281,38,0,51,46,89,81,0.901960784313726,0.910112359550562,2841.44,862.28,1178.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"KISP","CH","spawn",30,0,30,0,30,25,26,30,1,1,0.833333333333333,0.866666666666667,1,30,0,0,0,30,26,,0.866666666666667,2841.44,862.28,1178.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"KISP","CH","rear",12,0,12,0,10,10,10,10,1,0.833333333333333,0.833333333333333,0.833333333333333,0.833333333333333,1,0,11,9,12,10,0.818181818181818,0.833333333333333,2841.44,862.28,1178.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"KLUM","BT","any",314,0,302,12,203,248,248,248,0.961783439490446,0.646496815286624,0.789808917197452,0.789808917197452,0.789808917197452,0,0,314,203,314,248,0.646496815286624,0.789808917197452,2173.93,929.96,1229.04,,,,,,FALSE +"fresh_default","default",100,TRUE,"KLUM","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2173.93,929.96,1229.04,,,,,,FALSE +"fresh_default","default",100,TRUE,"KLUM","BT","rear",141,0,137,4,72,98,98,98,0.971631205673759,0.51063829787234,0.695035460992908,0.695035460992908,0.695035460992908,0,0,141,72,141,98,0.51063829787234,0.695035460992908,2173.93,929.96,1229.04,,,,,,FALSE +"fresh_default","default",100,TRUE,"KLUM","CH","any",104,0,99,5,88,88,90,91,0.951923076923077,0.846153846153846,0.846153846153846,0.865384615384615,0.875,28,0,76,60,104,90,0.789473684210526,0.865384615384615,1523.16,708.12,905.48,,,,,,FALSE +"fresh_default","default",100,TRUE,"KLUM","CH","spawn",20,0,19,1,20,18,19,20,0.95,1,0.9,0.95,1,20,0,0,0,20,19,,0.95,1523.16,708.12,905.48,,,,,,FALSE +"fresh_default","default",100,TRUE,"KLUM","CH","rear",19,0,19,0,14,16,16,16,1,0.736842105263158,0.842105263157895,0.842105263157895,0.842105263157895,4,0,15,10,19,16,0.666666666666667,0.842105263157895,1523.16,708.12,905.48,,,,,,FALSE +"fresh_default","default",100,TRUE,"KOTL","BT","any",206,0,203,3,127,169,174,174,0.985436893203884,0.616504854368932,0.820388349514563,0.844660194174757,0.844660194174757,0,0,206,127,206,174,0.616504854368932,0.844660194174757,3619.68,1035.15,1599.21,,,,,,TRUE +"fresh_default","default",100,TRUE,"KOTL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3619.68,1035.15,1599.21,,,,,,TRUE +"fresh_default","default",100,TRUE,"KOTL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3619.68,1035.15,1599.21,,,,,,TRUE +"fresh_default","default",100,TRUE,"KOTL","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"KOTL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"KOTL","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"LARL","BT","any",165,0,164,1,102,133,140,140,0.993939393939394,0.618181818181818,0.806060606060606,0.848484848484849,0.848484848484849,0,0,165,102,165,140,0.618181818181818,0.848484848484849,2242.72,563.88,845.5,,,,,,TRUE +"fresh_default","default",100,TRUE,"LARL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2242.72,563.88,845.5,,,,,,TRUE +"fresh_default","default",100,TRUE,"LARL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2242.72,563.88,845.5,,,,,,TRUE +"fresh_default","default",100,TRUE,"LARL","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"LARL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"LARL","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"LBTN","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,9061.71,2027.4,2961.53,,,,,,FALSE +"fresh_default","default",100,TRUE,"LBTN","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,9061.71,2027.4,2961.53,,,,,,FALSE +"fresh_default","default",100,TRUE,"LBTN","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,9061.71,2027.4,2961.53,,,,,,FALSE +"fresh_default","default",100,TRUE,"LBTN","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LBTN","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LBTN","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LCHL","BT","any",6,0,6,0,6,6,6,6,1,1,1,1,1,0,0,6,6,6,6,1,1,5533.57,908.41,1581.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"LCHL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5533.57,908.41,1581.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"LCHL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5533.57,908.41,1581.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"LCHL","CH","any",38,0,38,0,36,36,36,37,1,0.947368421052632,0.947368421052632,0.947368421052632,0.973684210526316,14,0,24,22,38,36,0.916666666666667,0.947368421052632,4358.83,468.47,1153.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"LCHL","CH","spawn",2,0,2,0,2,2,2,2,1,1,1,1,1,2,0,0,0,2,2,,1,4358.83,468.47,1153.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"LCHL","CH","rear",23,0,23,0,21,21,21,22,1,0.91304347826087,0.91304347826087,0.91304347826087,0.956521739130435,10,0,13,11,23,21,0.846153846153846,0.91304347826087,4358.83,468.47,1153.83,,,,,,FALSE +"fresh_default","default",100,TRUE,"LFRA","BT","any",78,0,78,0,60,66,70,70,1,0.769230769230769,0.846153846153846,0.897435897435897,0.897435897435897,0,0,78,60,78,70,0.769230769230769,0.897435897435897,3569.06,1241.71,1516.52,,,,,,FALSE +"fresh_default","default",100,TRUE,"LFRA","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3569.06,1241.71,1516.52,,,,,,FALSE +"fresh_default","default",100,TRUE,"LFRA","BT","rear",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,3569.06,1241.71,1516.52,,,,,,FALSE +"fresh_default","default",100,TRUE,"LFRA","CH","any",165,0,161,4,108,135,136,136,0.975757575757576,0.654545454545455,0.818181818181818,0.824242424242424,0.824242424242424,19,0,146,89,165,136,0.60958904109589,0.824242424242424,3074.38,826.28,1254.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"LFRA","CH","spawn",10,0,10,0,10,10,10,10,1,1,1,1,1,10,0,0,0,10,10,,1,3074.38,826.28,1254.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"LFRA","CH","rear",66,0,65,1,40,55,55,55,0.984848484848485,0.606060606060606,0.833333333333333,0.833333333333333,0.833333333333333,6,0,60,34,66,55,0.566666666666667,0.833333333333333,3074.38,826.28,1254.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"LKEL","BT","any",63,0,63,0,37,48,50,50,1,0.587301587301587,0.761904761904762,0.793650793650794,0.793650793650794,0,0,63,37,63,50,0.587301587301587,0.793650793650794,405.16,144.67,218.77,,,,,,FALSE +"fresh_default","default",100,TRUE,"LKEL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,405.16,144.67,218.77,,,,,,FALSE +"fresh_default","default",100,TRUE,"LKEL","BT","rear",26,0,26,0,12,18,18,18,1,0.461538461538462,0.692307692307692,0.692307692307692,0.692307692307692,0,0,26,12,26,18,0.461538461538462,0.692307692307692,405.16,144.67,218.77,,,,,,FALSE +"fresh_default","default",100,TRUE,"LKEL","CH","any",14,0,14,0,13,12,12,14,1,0.928571428571429,0.857142857142857,0.857142857142857,1,5,0,9,8,14,12,0.888888888888889,0.857142857142857,332.18,106.7,162.87,,,,,,FALSE +"fresh_default","default",100,TRUE,"LKEL","CH","spawn",3,0,3,0,3,2,2,3,1,1,0.666666666666667,0.666666666666667,1,3,0,0,0,3,2,,0.666666666666667,332.18,106.7,162.87,,,,,,FALSE +"fresh_default","default",100,TRUE,"LKEL","CH","rear",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,332.18,106.7,162.87,,,,,,FALSE +"fresh_default","default",100,TRUE,"LOMI","BT","any",27,0,26,1,20,25,25,25,0.962962962962963,0.740740740740741,0.925925925925926,0.925925925925926,0.925925925925926,0,0,27,20,27,25,0.740740740740741,0.925925925925926,3639.43,1004.03,1513.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"LOMI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3639.43,1004.03,1513.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"LOMI","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3639.43,1004.03,1513.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"LOMI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LOMI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LOMI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LPCE","BT","any",55,0,53,2,42,42,42,42,0.963636363636364,0.763636363636364,0.763636363636364,0.763636363636364,0.763636363636364,0,0,55,42,55,42,0.763636363636364,0.763636363636364,3571.54,1000.37,1386.86,,,,,,FALSE +"fresh_default","default",100,TRUE,"LPCE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3571.54,1000.37,1386.86,,,,,,FALSE +"fresh_default","default",100,TRUE,"LPCE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3571.54,1000.37,1386.86,,,,,,FALSE +"fresh_default","default",100,TRUE,"LPCE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LPCE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LPCE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSAL","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSAL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSAL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSAL","CH","any",17,0,17,0,17,17,17,17,1,1,1,1,1,6,0,11,11,17,17,1,1,3029.07,317.62,1060.92,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSAL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3029.07,317.62,1060.92,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSAL","CH","rear",4,0,4,0,4,4,4,4,1,1,1,1,1,2,0,2,2,4,4,1,1,3029.07,317.62,1060.92,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSKE","BT","any",230,0,227,3,177,195,195,195,0.98695652173913,0.769565217391304,0.847826086956522,0.847826086956522,0.847826086956522,0,0,230,177,230,195,0.769565217391304,0.847826086956522,3075.25,1326.45,1709.47,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSKE","BT","spawn",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0,3,2,3,2,0.666666666666667,0.666666666666667,3075.25,1326.45,1709.47,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSKE","BT","rear",111,0,109,2,74,87,87,87,0.981981981981982,0.666666666666667,0.783783783783784,0.783783783783784,0.783783783783784,0,0,111,74,111,87,0.666666666666667,0.783783783783784,3075.25,1326.45,1709.47,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSKE","CH","any",122,0,119,3,109,110,110,115,0.975409836065574,0.89344262295082,0.901639344262295,0.901639344262295,0.942622950819672,41,0,81,68,122,110,0.839506172839506,0.901639344262295,2101.75,1052.46,1308.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSKE","CH","spawn",24,0,23,1,24,22,22,24,0.958333333333333,1,0.916666666666667,0.916666666666667,1,24,0,0,0,24,22,,0.916666666666667,2101.75,1052.46,1308.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"LSKE","CH","rear",35,0,35,0,27,30,30,31,1,0.771428571428571,0.857142857142857,0.857142857142857,0.885714285714286,3,0,32,24,35,30,0.75,0.857142857142857,2101.75,1052.46,1308.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"MESI","BT","any",64,0,64,0,51,60,60,60,1,0.796875,0.9375,0.9375,0.9375,0,0,64,51,64,60,0.796875,0.9375,2825.32,691.09,1077.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"MESI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2825.32,691.09,1077.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"MESI","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2825.32,691.09,1077.07,,,,,,FALSE +"fresh_default","default",100,TRUE,"MESI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"MESI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"MESI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"MFRA","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"MFRA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"MFRA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"MFRA","CH","any",2,0,1,1,0,0,0,0,0.5,0,0,0,0,0,0,2,0,2,0,0,0,277.46,100.9,121.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"MFRA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,277.46,100.9,121.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"MFRA","CH","rear",2,0,1,1,0,0,0,0,0.5,0,0,0,0,0,0,2,0,2,0,0,0,277.46,100.9,121.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORK","BT","any",79,0,79,0,70,72,73,73,1,0.886075949367089,0.911392405063291,0.924050632911392,0.924050632911392,0,0,79,70,79,73,0.886075949367089,0.924050632911392,7202.59,2148.8,3077.39,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORK","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7202.59,2148.8,3077.39,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORK","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7202.59,2148.8,3077.39,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORK","CH","any",156,0,155,1,145,145,146,148,0.993589743589744,0.92948717948718,0.92948717948718,0.935897435897436,0.948717948717949,96,0,60,49,156,146,0.816666666666667,0.935897435897436,5953.1,1577.65,2499.11,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORK","CH","spawn",25,0,25,0,25,23,24,25,1,1,0.92,0.96,1,25,0,0,0,25,24,,0.96,5953.1,1577.65,2499.11,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORK","CH","rear",32,0,31,1,24,25,25,25,0.96875,0.75,0.78125,0.78125,0.78125,15,0,17,9,32,25,0.529411764705882,0.78125,5953.1,1577.65,2499.11,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORR","BT","any",357,0,357,0,162,260,267,267,1,0.453781512605042,0.728291316526611,0.747899159663866,0.747899159663866,0,0,357,162,357,267,0.453781512605042,0.747899159663866,4865.96,960.8,1685.2,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORR","BT","spawn",23,0,23,0,8,15,15,15,1,0.347826086956522,0.652173913043478,0.652173913043478,0.652173913043478,0,0,23,8,23,15,0.347826086956522,0.652173913043478,4865.96,960.8,1685.2,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORR","BT","rear",106,0,106,0,32,64,66,66,1,0.30188679245283,0.60377358490566,0.622641509433962,0.622641509433962,0,0,106,32,106,66,0.30188679245283,0.622641509433962,4865.96,960.8,1685.2,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORR","CH","any",41,0,41,0,33,35,38,38,1,0.804878048780488,0.853658536585366,0.926829268292683,0.926829268292683,25,0,16,9,41,38,0.5625,0.926829268292683,3341.35,646.28,1171.33,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORR","CH","spawn",9,0,9,0,9,7,9,9,1,1,0.777777777777778,1,1,9,0,0,0,9,9,,1,3341.35,646.28,1171.33,,,,,,FALSE +"fresh_default","default",100,TRUE,"MORR","CH","rear",2,0,2,0,1,2,2,2,1,0.5,1,1,1,0,0,2,1,2,2,0.5,1,3341.35,646.28,1171.33,,,,,,FALSE +"fresh_default","default",100,TRUE,"MSKE","BT","any",69,0,68,1,46,52,52,52,0.985507246376812,0.666666666666667,0.753623188405797,0.753623188405797,0.753623188405797,0,0,69,46,69,52,0.666666666666667,0.753623188405797,2691.58,922.19,1383.97,,,,,,FALSE +"fresh_default","default",100,TRUE,"MSKE","BT","spawn",4,0,4,0,2,2,2,2,1,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,2691.58,922.19,1383.97,,,,,,FALSE +"fresh_default","default",100,TRUE,"MSKE","BT","rear",5,0,4,1,0,0,0,0,0.8,0,0,0,0,0,0,5,0,5,0,0,0,2691.58,922.19,1383.97,,,,,,FALSE +"fresh_default","default",100,TRUE,"MSKE","CH","any",42,0,40,2,38,38,38,40,0.952380952380952,0.904761904761905,0.904761904761905,0.904761904761905,0.952380952380952,8,0,34,30,42,38,0.88235294117647,0.904761904761905,1516.21,676.83,856.12,,,,,,FALSE +"fresh_default","default",100,TRUE,"MSKE","CH","spawn",4,0,3,1,4,3,3,4,0.75,1,0.75,0.75,1,4,0,0,0,4,3,,0.75,1516.21,676.83,856.12,,,,,,FALSE +"fresh_default","default",100,TRUE,"MSKE","CH","rear",2,0,1,1,2,1,1,2,0.5,1,0.5,0.5,1,2,0,0,0,2,1,,0.5,1516.21,676.83,856.12,,,,,,FALSE +"fresh_default","default",100,TRUE,"NARC","BT","any",7,0,7,0,7,7,7,7,1,1,1,1,1,0,0,7,7,7,7,1,1,4336.98,873.49,1703.68,,,,,,FALSE +"fresh_default","default",100,TRUE,"NARC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4336.98,873.49,1703.68,,,,,,FALSE +"fresh_default","default",100,TRUE,"NARC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4336.98,873.49,1703.68,,,,,,FALSE +"fresh_default","default",100,TRUE,"NARC","CH","any",22,0,22,0,21,21,21,22,1,0.954545454545455,0.954545454545455,0.954545454545455,1,18,0,4,3,22,21,0.75,0.954545454545455,3563.45,506.51,1327.21,,,,,,FALSE +"fresh_default","default",100,TRUE,"NARC","CH","spawn",9,0,9,0,9,9,9,9,1,1,1,1,1,9,0,0,0,9,9,,1,3563.45,506.51,1327.21,,,,,,FALSE +"fresh_default","default",100,TRUE,"NARC","CH","rear",6,0,6,0,6,5,5,6,1,1,0.833333333333333,0.833333333333333,1,5,0,1,1,6,5,1,0.833333333333333,3563.45,506.51,1327.21,,,,,,FALSE +"fresh_default","default",100,TRUE,"NATR","BT","any",57,0,57,0,39,47,48,48,1,0.68421052631579,0.824561403508772,0.842105263157895,0.842105263157895,0,0,57,39,57,48,0.68421052631579,0.842105263157895,9819.51,1803.66,3496.13,,,,,,FALSE +"fresh_default","default",100,TRUE,"NATR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,9819.51,1803.66,3496.13,,,,,,FALSE +"fresh_default","default",100,TRUE,"NATR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,9819.51,1803.66,3496.13,,,,,,FALSE +"fresh_default","default",100,TRUE,"NATR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"NATR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"NATR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"NECR","BT","any",12,0,12,0,12,12,12,12,1,1,1,1,1,0,0,12,12,12,12,1,1,6329.74,991.14,1943.82,,,,,,FALSE +"fresh_default","default",100,TRUE,"NECR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6329.74,991.14,1943.82,,,,,,FALSE +"fresh_default","default",100,TRUE,"NECR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6329.74,991.14,1943.82,,,,,,FALSE +"fresh_default","default",100,TRUE,"NECR","CH","any",101,0,101,0,93,97,97,97,1,0.920792079207921,0.96039603960396,0.96039603960396,0.96039603960396,33,0,68,60,101,97,0.88235294117647,0.96039603960396,5608.47,516.15,1649.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"NECR","CH","spawn",9,0,9,0,9,9,9,9,1,1,1,1,1,9,0,0,0,9,9,,1,5608.47,516.15,1649.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"NECR","CH","rear",6,0,6,0,4,6,6,6,1,0.666666666666667,1,1,1,1,0,5,3,6,6,0.6,1,5608.47,516.15,1649.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"OSPK","BT","any",12,0,12,0,10,12,12,12,1,0.833333333333333,1,1,1,0,0,12,10,12,12,0.833333333333333,1,1882.44,594.62,877.22,,,,,,FALSE +"fresh_default","default",100,TRUE,"OSPK","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1882.44,594.62,877.22,,,,,,FALSE +"fresh_default","default",100,TRUE,"OSPK","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1882.44,594.62,877.22,,,,,,FALSE +"fresh_default","default",100,TRUE,"OSPK","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"OSPK","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"OSPK","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARA","BT","any",77,0,77,0,62,68,70,70,1,0.805194805194805,0.883116883116883,0.909090909090909,0.909090909090909,0,0,77,62,77,70,0.805194805194805,0.909090909090909,4400.24,720.29,1330.46,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4400.24,720.29,1330.46,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4400.24,720.29,1330.46,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARS","BT","any",281,0,281,0,233,262,262,262,1,0.829181494661922,0.932384341637011,0.932384341637011,0.932384341637011,0,0,281,233,281,262,0.829181494661922,0.932384341637011,6883.03,1685.38,2635.01,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARS","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6883.03,1685.38,2635.01,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARS","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6883.03,1685.38,2635.01,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARS","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARS","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PARS","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PCEA","BT","any",176,0,176,0,140,154,161,161,1,0.795454545454545,0.875,0.914772727272727,0.914772727272727,0,0,176,140,176,161,0.795454545454545,0.914772727272727,7091.82,921.92,1489.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"PCEA","BT","spawn",1,0,1,0,0,0,1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,7091.82,921.92,1489.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"PCEA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7091.82,921.92,1489.72,,,,,,FALSE +"fresh_default","default",100,TRUE,"PCEA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PCEA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PCEA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"PINE","BT","any",249,0,249,0,227,241,241,241,1,0.911646586345382,0.967871485943775,0.967871485943775,0.967871485943775,0,0,249,227,249,241,0.911646586345382,0.967871485943775,5539.06,1645.08,2409.65,213,193,118,154,154,TRUE +"fresh_default","default",100,TRUE,"PINE","BT","spawn",3,0,3,0,3,3,3,3,1,1,1,1,1,0,0,3,3,3,3,1,1,5539.06,1645.08,2409.65,213,193,118,154,154,TRUE +"fresh_default","default",100,TRUE,"PINE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5539.06,1645.08,2409.65,213,193,118,154,154,TRUE +"fresh_default","default",100,TRUE,"PINE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"PINE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"PINE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"SALR","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"SALR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"SALR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"SALR","CH","any",7,0,7,0,6,6,6,6,1,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,5,0,2,1,7,6,0.5,0.857142857142857,3174.7,234.92,966.25,,,,,,FALSE +"fresh_default","default",100,TRUE,"SALR","CH","spawn",4,0,4,0,4,4,4,4,1,1,1,1,1,4,0,0,0,4,4,,1,3174.7,234.92,966.25,,,,,,FALSE +"fresh_default","default",100,TRUE,"SALR","CH","rear",2,0,2,0,1,1,1,1,1,0.5,0.5,0.5,0.5,0,0,2,1,2,1,0.5,0.5,3174.7,234.92,966.25,,,,,,FALSE +"fresh_default","default",100,TRUE,"SETN","BT","any",180,0,177,3,122,149,154,154,0.983333333333333,0.677777777777778,0.827777777777778,0.855555555555556,0.855555555555556,0,0,180,122,180,154,0.677777777777778,0.855555555555556,3258.86,851.7,1239.78,,,,,,FALSE +"fresh_default","default",100,TRUE,"SETN","BT","spawn",3,0,2,1,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0,3,2,3,2,0.666666666666667,0.666666666666667,3258.86,851.7,1239.78,,,,,,FALSE +"fresh_default","default",100,TRUE,"SETN","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3258.86,851.7,1239.78,,,,,,FALSE +"fresh_default","default",100,TRUE,"SETN","CH","any",117,0,116,1,111,112,113,113,0.991452991452991,0.948717948717949,0.957264957264957,0.965811965811966,0.965811965811966,106,0,11,5,117,113,0.454545454545455,0.965811965811966,1500.97,543.88,663.52,,,,,,FALSE +"fresh_default","default",100,TRUE,"SETN","CH","spawn",17,0,17,0,16,16,16,16,1,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,16,0,1,0,17,16,0,0.941176470588235,1500.97,543.88,663.52,,,,,,FALSE +"fresh_default","default",100,TRUE,"SETN","CH","rear",85,0,85,0,85,85,85,85,1,1,1,1,1,83,0,2,2,85,85,1,1,1500.97,543.88,663.52,,,,,,FALSE +"fresh_default","default",100,TRUE,"SLOC","BT","any",96,0,93,3,44,63,66,66,0.96875,0.458333333333333,0.65625,0.6875,0.6875,0,0,96,44,96,66,0.458333333333333,0.6875,1117.37,395.66,574.02,,,,,,TRUE +"fresh_default","default",100,TRUE,"SLOC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1117.37,395.66,574.02,,,,,,TRUE +"fresh_default","default",100,TRUE,"SLOC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1117.37,395.66,574.02,,,,,,TRUE +"fresh_default","default",100,TRUE,"SLOC","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"SLOC","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"SLOC","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh_default","default",100,TRUE,"TABR","BT","any",10,0,10,0,4,4,4,4,1,0.4,0.4,0.4,0.4,0,0,10,4,10,4,0.4,0.4,3402.26,678.31,1061,,,,,,FALSE +"fresh_default","default",100,TRUE,"TABR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3402.26,678.31,1061,,,,,,FALSE +"fresh_default","default",100,TRUE,"TABR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3402.26,678.31,1061,,,,,,FALSE +"fresh_default","default",100,TRUE,"TABR","CH","any",50,0,48,2,32,33,33,33,0.96,0.64,0.66,0.66,0.66,5,0,45,28,50,33,0.622222222222222,0.66,2633.55,410.85,789.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"TABR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2633.55,410.85,789.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"TABR","CH","rear",25,0,24,1,18,18,18,18,0.96,0.72,0.72,0.72,0.72,3,0,22,15,25,18,0.681818181818182,0.72,2633.55,410.85,789.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"TOOD","BT","any",36,0,36,0,31,35,35,35,1,0.861111111111111,0.972222222222222,0.972222222222222,0.972222222222222,0,0,36,31,36,35,0.861111111111111,0.972222222222222,4697.77,1131.97,1815.93,,,,,,FALSE +"fresh_default","default",100,TRUE,"TOOD","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4697.77,1131.97,1815.93,,,,,,FALSE +"fresh_default","default",100,TRUE,"TOOD","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4697.77,1131.97,1815.93,,,,,,FALSE +"fresh_default","default",100,TRUE,"TOOD","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"TOOD","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"TOOD","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"TWAC","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,1060.41,227.23,402.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"TWAC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1060.41,227.23,402.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"TWAC","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1060.41,227.23,402.55,,,,,,FALSE +"fresh_default","default",100,TRUE,"TWAC","CH","any",9,0,9,0,8,9,9,9,1,0.888888888888889,1,1,1,0,0,9,8,9,9,0.888888888888889,1,705.9,144.23,228.3,,,,,,FALSE +"fresh_default","default",100,TRUE,"TWAC","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,705.9,144.23,228.3,,,,,,FALSE +"fresh_default","default",100,TRUE,"TWAC","CH","rear",7,0,7,0,7,7,7,7,1,1,1,1,1,0,0,7,7,7,7,1,1,705.9,144.23,228.3,,,,,,FALSE +"fresh_default","default",100,TRUE,"UFRA","BT","any",87,0,87,0,46,58,58,58,1,0.528735632183908,0.666666666666667,0.666666666666667,0.666666666666667,0,0,87,46,87,58,0.528735632183908,0.666666666666667,2752.86,948.12,1217.11,,,,,,FALSE +"fresh_default","default",100,TRUE,"UFRA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2752.86,948.12,1217.11,,,,,,FALSE +"fresh_default","default",100,TRUE,"UFRA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2752.86,948.12,1217.11,,,,,,FALSE +"fresh_default","default",100,TRUE,"UFRA","CH","any",51,0,51,0,45,46,46,46,1,0.88235294117647,0.901960784313726,0.901960784313726,0.901960784313726,29,0,22,16,51,46,0.727272727272727,0.901960784313726,1487.28,642.83,764.56,,,,,,FALSE +"fresh_default","default",100,TRUE,"UFRA","CH","spawn",11,0,11,0,11,11,11,11,1,1,1,1,1,11,0,0,0,11,11,,1,1487.28,642.83,764.56,,,,,,FALSE +"fresh_default","default",100,TRUE,"UFRA","CH","rear",6,0,6,0,3,3,3,3,1,0.5,0.5,0.5,0.5,2,0,4,1,6,3,0.25,0.5,1487.28,642.83,764.56,,,,,,FALSE +"fresh_default","default",100,TRUE,"UNRS","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,7487.48,645.96,1280.54,,,,,,FALSE +"fresh_default","default",100,TRUE,"UNRS","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7487.48,645.96,1280.54,,,,,,FALSE +"fresh_default","default",100,TRUE,"UNRS","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7487.48,645.96,1280.54,,,,,,FALSE +"fresh_default","default",100,TRUE,"UNRS","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"UNRS","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"UNRS","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"UOMI","BT","any",82,0,82,0,46,53,53,53,1,0.560975609756098,0.646341463414634,0.646341463414634,0.646341463414634,0,0,82,46,82,53,0.560975609756098,0.646341463414634,3764.77,911.83,1451.62,,,,,,FALSE +"fresh_default","default",100,TRUE,"UOMI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3764.77,911.83,1451.62,,,,,,FALSE +"fresh_default","default",100,TRUE,"UOMI","BT","rear",22,0,22,0,8,9,9,9,1,0.363636363636364,0.409090909090909,0.409090909090909,0.409090909090909,0,0,22,8,22,9,0.363636363636364,0.409090909090909,3764.77,911.83,1451.62,,,,,,FALSE +"fresh_default","default",100,TRUE,"UOMI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"UOMI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"UOMI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"UPCE","BT","any",153,0,152,1,138,138,138,138,0.993464052287582,0.901960784313726,0.901960784313726,0.901960784313726,0.901960784313726,0,0,153,138,153,138,0.901960784313726,0.901960784313726,5689.87,1682.32,2340.3,570,556,442,445,493,FALSE +"fresh_default","default",100,TRUE,"UPCE","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,5689.87,1682.32,2340.3,570,556,442,445,493,FALSE +"fresh_default","default",100,TRUE,"UPCE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5689.87,1682.32,2340.3,570,556,442,445,493,FALSE +"fresh_default","default",100,TRUE,"UPCE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"UPCE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"UPCE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh_default","default",100,TRUE,"USKE","BT","any",32,0,32,0,29,31,31,31,1,0.90625,0.96875,0.96875,0.96875,0,0,32,29,32,31,0.90625,0.96875,2969.07,739.68,1264.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"USKE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2969.07,739.68,1264.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"USKE","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,2969.07,739.68,1264.94,,,,,,FALSE +"fresh_default","default",100,TRUE,"USKE","CH","any",8,0,8,0,8,8,8,8,1,1,1,1,1,0,0,8,8,8,8,1,1,1528.86,498.83,733.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"USKE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1528.86,498.83,733.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"USKE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1528.86,498.83,733.99,,,,,,FALSE +"fresh_default","default",100,TRUE,"WILL","BT","any",54,0,54,0,41,51,51,51,1,0.759259259259259,0.944444444444444,0.944444444444444,0.944444444444444,0,0,54,41,54,51,0.759259259259259,0.944444444444444,4562.41,1055.35,1720.76,,,,,,FALSE +"fresh_default","default",100,TRUE,"WILL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4562.41,1055.35,1720.76,,,,,,FALSE +"fresh_default","default",100,TRUE,"WILL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4562.41,1055.35,1720.76,,,,,,FALSE +"fresh_default","default",100,TRUE,"WILL","CH","any",58,0,58,0,55,55,55,56,1,0.948275862068966,0.948275862068966,0.948275862068966,0.96551724137931,40,0,18,15,58,55,0.833333333333333,0.948275862068966,3601.38,640.69,1364.26,,,,,,FALSE +"fresh_default","default",100,TRUE,"WILL","CH","spawn",3,0,3,0,3,2,2,3,1,1,0.666666666666667,0.666666666666667,1,3,0,0,0,3,2,,0.666666666666667,3601.38,640.69,1364.26,,,,,,FALSE +"fresh_default","default",100,TRUE,"WILL","CH","rear",42,0,42,0,40,41,41,41,1,0.952380952380952,0.976190476190476,0.976190476190476,0.976190476190476,30,0,12,10,42,41,0.833333333333333,0.976190476190476,3601.38,640.69,1364.26,,,,,,FALSE +"fresh_default","default",100,TRUE,"ZYMO","BT","any",280,0,276,4,135,193,200,200,0.985714285714286,0.482142857142857,0.689285714285714,0.714285714285714,0.714285714285714,0,0,280,135,280,200,0.482142857142857,0.714285714285714,2058.68,594.73,897.89,,,,,,FALSE +"fresh_default","default",100,TRUE,"ZYMO","BT","spawn",14,0,14,0,7,11,11,11,1,0.5,0.785714285714286,0.785714285714286,0.785714285714286,0,0,14,7,14,11,0.5,0.785714285714286,2058.68,594.73,897.89,,,,,,FALSE +"fresh_default","default",100,TRUE,"ZYMO","BT","rear",147,0,147,0,55,88,90,90,1,0.374149659863946,0.598639455782313,0.612244897959184,0.612244897959184,0,0,147,55,147,90,0.374149659863946,0.612244897959184,2058.68,594.73,897.89,,,,,,FALSE +"fresh_default","default",100,TRUE,"ZYMO","CH","any",21,0,19,2,15,16,16,17,0.904761904761905,0.714285714285714,0.761904761904762,0.761904761904762,0.80952380952381,8,0,13,7,21,16,0.538461538461538,0.761904761904762,1211.06,463.12,602.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"ZYMO","CH","spawn",8,0,7,1,8,7,7,8,0.875,1,0.875,0.875,1,8,0,0,0,8,7,,0.875,1211.06,463.12,602.24,,,,,,FALSE +"fresh_default","default",100,TRUE,"ZYMO","CH","rear",5,0,4,1,0,1,1,1,0.8,0,0.2,0.2,0.2,0,0,5,0,5,1,0,0.2,1211.06,463.12,602.24,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"BBAR","BT","any",16,0,16,0,10,13,13,13,1,0.625,0.8125,0.8125,0.8125,0,0,16,10,16,13,0.625,0.8125,1262.45,296.02,478.21,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BBAR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1262.45,296.02,478.21,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BBAR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1262.45,296.02,478.21,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BBAR","CH","any",5,0,3,2,1,1,1,1,0.6,0.2,0.2,0.2,0.2,0,0,5,1,5,1,0.2,0.2,269.11,160.2,167.83,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BBAR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,269.11,160.2,167.83,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BBAR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,269.11,160.2,167.83,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BOWR","BT","any",38,0,34,4,24,30,30,30,0.894736842105263,0.631578947368421,0.789473684210526,0.789473684210526,0.789473684210526,0,0,38,24,38,30,0.631578947368421,0.789473684210526,3695.08,1046.27,1618.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BOWR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3695.08,1046.27,1618.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BOWR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3695.08,1046.27,1618.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BOWR","CH","any",96,0,91,5,76,79,79,79,0.947916666666667,0.791666666666667,0.822916666666667,0.822916666666667,0.822916666666667,39,0,57,40,96,79,0.701754385964912,0.822916666666667,2516.89,655.31,913.88,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BOWR","CH","spawn",19,0,18,1,16,16,16,16,0.947368421052632,0.842105263157895,0.842105263157895,0.842105263157895,0.842105263157895,19,0,0,0,19,16,,0.842105263157895,2516.89,655.31,913.88,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BOWR","CH","rear",54,0,51,3,43,44,44,44,0.944444444444444,0.796296296296296,0.814814814814815,0.814814814814815,0.814814814814815,22,0,32,22,54,44,0.6875,0.814814814814815,2516.89,655.31,913.88,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BULK","BT","any",468,0,443,25,222,327,327,327,0.946581196581197,0.474358974358974,0.698717948717949,0.698717948717949,0.698717948717949,0,0,468,222,468,327,0.474358974358974,0.698717948717949,7676.5,1866.31,3021.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BULK","BT","spawn",12,0,11,1,4,9,9,9,0.916666666666667,0.333333333333333,0.75,0.75,0.75,0,0,12,4,12,9,0.333333333333333,0.75,7676.5,1866.31,3021.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BULK","BT","rear",255,0,232,23,83,150,150,150,0.909803921568627,0.325490196078431,0.588235294117647,0.588235294117647,0.588235294117647,0,0,255,83,255,150,0.325490196078431,0.588235294117647,7676.5,1866.31,3021.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BULK","CH","any",110,0,110,0,102,107,107,107,1,0.927272727272727,0.972727272727273,0.972727272727273,0.972727272727273,18,0,92,86,110,107,0.934782608695652,0.972727272727273,5089.63,1260.25,1730.12,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BULK","CH","spawn",16,0,16,0,15,15,15,15,1,0.9375,0.9375,0.9375,0.9375,16,0,0,0,16,15,,0.9375,5089.63,1260.25,1730.12,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"BULK","CH","rear",11,0,11,0,6,9,9,9,1,0.545454545454545,0.818181818181818,0.818181818181818,0.818181818181818,0,0,11,6,11,9,0.545454545454545,0.818181818181818,5089.63,1260.25,1730.12,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CARP","BT","any",6,0,6,0,4,6,6,6,1,0.666666666666667,1,1,1,0,0,6,4,6,6,0.666666666666667,1,4296.5,497.07,1072.63,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CARP","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4296.5,497.07,1072.63,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CARP","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4296.5,497.07,1072.63,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CARP","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CARP","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CARP","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CHES","BT","any",3,0,1,2,1,1,1,1,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,0,0,3,1,3,1,0.333333333333333,0.333333333333333,901.21,145.45,336.47,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHES","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,901.21,145.45,336.47,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHES","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,901.21,145.45,336.47,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHES","CH","any",87,0,85,2,80,81,81,81,0.977011494252874,0.919540229885057,0.931034482758621,0.931034482758621,0.931034482758621,27,0,60,53,87,81,0.883333333333333,0.931034482758621,750.66,88.26,149.77,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHES","CH","spawn",3,0,2,1,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2,0,1,0,3,2,0,0.666666666666667,750.66,88.26,149.77,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHES","CH","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,750.66,88.26,149.77,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHWK","BT","any",62,0,62,0,34,53,53,53,1,0.548387096774194,0.854838709677419,0.854838709677419,0.854838709677419,0,0,62,34,62,53,0.548387096774194,0.854838709677419,822.24,316.56,418.39,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHWK","BT","spawn",5,0,5,0,4,5,5,5,1,0.8,1,1,1,0,0,5,4,5,5,0.8,1,822.24,316.56,418.39,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHWK","BT","rear",5,0,5,0,4,4,4,4,1,0.8,0.8,0.8,0.8,0,0,5,4,5,4,0.8,0.8,822.24,316.56,418.39,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHWK","CH","any",21,0,19,2,12,12,12,12,0.904761904761905,0.571428571428571,0.571428571428571,0.571428571428571,0.571428571428571,2,0,19,11,21,12,0.578947368421053,0.571428571428571,662.37,253.93,301.07,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHWK","CH","spawn",8,0,8,0,5,5,5,5,1,0.625,0.625,0.625,0.625,2,0,6,4,8,5,0.666666666666667,0.625,662.37,253.93,301.07,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"CHWK","CH","rear",4,0,4,0,3,3,3,3,1,0.75,0.75,0.75,0.75,0,0,4,3,4,3,0.75,0.75,662.37,253.93,301.07,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"COTR","BT","any",85,0,84,1,46,68,68,68,0.988235294117647,0.541176470588235,0.8,0.8,0.8,0,0,85,46,85,68,0.541176470588235,0.8,6878.95,1490.06,2340.71,75,65,31,40,40,TRUE +"fresh","bcfishpass",0,FALSE,"COTR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6878.95,1490.06,2340.71,75,65,31,40,40,TRUE +"fresh","bcfishpass",0,FALSE,"COTR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6878.95,1490.06,2340.71,75,65,31,40,40,TRUE +"fresh","bcfishpass",0,FALSE,"COTR","CH","any",100,0,95,5,67,71,71,71,0.95,0.67,0.71,0.71,0.71,39,0,61,31,100,71,0.508196721311475,0.71,4119.15,694.8,1033.8,68,25,11,12,12,TRUE +"fresh","bcfishpass",0,FALSE,"COTR","CH","spawn",15,0,14,1,12,12,12,12,0.933333333333333,0.8,0.8,0.8,0.8,15,0,0,0,15,12,,0.8,4119.15,694.8,1033.8,68,25,11,12,12,TRUE +"fresh","bcfishpass",0,FALSE,"COTR","CH","rear",48,0,45,3,28,31,31,31,0.9375,0.583333333333333,0.645833333333333,0.645833333333333,0.645833333333333,12,0,36,16,48,31,0.444444444444444,0.645833333333333,4119.15,694.8,1033.8,68,25,11,12,12,TRUE +"fresh","bcfishpass",0,FALSE,"CRKD","BT","any",4,0,4,0,4,4,4,4,1,1,1,1,1,0,0,4,4,4,4,1,1,5051.55,695.63,1448.44,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CRKD","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5051.55,695.63,1448.44,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CRKD","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5051.55,695.63,1448.44,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CRKD","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CRKD","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"CRKD","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"DOGC","BT","any",17,0,17,0,13,17,17,17,1,0.764705882352941,1,1,1,0,0,17,13,17,17,0.764705882352941,1,1251.04,288.83,481.5,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"DOGC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1251.04,288.83,481.5,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"DOGC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1251.04,288.83,481.5,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"DOGC","CH","any",5,0,5,0,5,5,5,5,1,1,1,1,1,2,0,3,3,5,5,1,1,358.45,162,180.33,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"DOGC","CH","spawn",2,0,2,0,2,2,2,2,1,1,1,1,1,2,0,0,0,2,2,,1,358.45,162,180.33,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"DOGC","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,358.45,162,180.33,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"ELKR","BT","any",582,0,578,4,515,564,564,564,0.993127147766323,0.884879725085911,0.969072164948454,0.969072164948454,0.969072164948454,0,0,582,515,582,564,0.884879725085911,0.969072164948454,4208.11,1526.83,2107.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"ELKR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4208.11,1526.83,2107.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"ELKR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4208.11,1526.83,2107.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"ELKR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"ELKR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"ELKR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINA","BT","any",107,0,107,0,89,105,105,105,1,0.831775700934579,0.981308411214953,0.981308411214953,0.981308411214953,0,0,107,89,107,105,0.831775700934579,0.981308411214953,6084.04,1277.62,2845.63,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6084.04,1277.62,2845.63,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6084.04,1277.62,2845.63,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINL","BT","any",32,0,32,0,25,29,29,29,1,0.78125,0.90625,0.90625,0.90625,0,0,32,25,32,29,0.78125,0.90625,4480.99,1365.64,2085.7,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4480.99,1365.64,2085.7,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4480.99,1365.64,2085.7,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINL","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FINL","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FIRE","BT","any",172,0,172,0,128,155,155,155,1,0.744186046511628,0.901162790697674,0.901162790697674,0.901162790697674,0,0,172,128,172,155,0.744186046511628,0.901162790697674,6589.52,1012.26,2016.75,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FIRE","BT","spawn",4,0,4,0,1,2,2,2,1,0.25,0.5,0.5,0.5,0,0,4,1,4,2,0.25,0.5,6589.52,1012.26,2016.75,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FIRE","BT","rear",66,0,66,0,57,62,62,62,1,0.863636363636364,0.93939393939394,0.93939393939394,0.93939393939394,0,0,66,57,66,62,0.863636363636364,0.93939393939394,6589.52,1012.26,2016.75,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FIRE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FIRE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FIRE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FOXR","BT","any",33,0,33,0,26,31,31,31,1,0.787878787878788,0.93939393939394,0.93939393939394,0.93939393939394,0,0,33,26,33,31,0.787878787878788,0.93939393939394,3587.54,922.1,1511.59,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FOXR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3587.54,922.1,1511.59,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FOXR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3587.54,922.1,1511.59,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FOXR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FOXR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FOXR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"FRAN","BT","any",102,0,100,2,47,71,71,71,0.980392156862745,0.46078431372549,0.696078431372549,0.696078431372549,0.696078431372549,0,0,102,47,102,71,0.46078431372549,0.696078431372549,9265.93,1150.92,2834.02,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRAN","BT","spawn",1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,9265.93,1150.92,2834.02,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRAN","BT","rear",90,0,88,2,40,60,60,60,0.977777777777778,0.444444444444444,0.666666666666667,0.666666666666667,0.666666666666667,0,0,90,40,90,60,0.444444444444444,0.666666666666667,9265.93,1150.92,2834.02,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRAN","CH","any",23,0,23,0,17,17,17,17,1,0.739130434782609,0.739130434782609,0.739130434782609,0.739130434782609,11,0,12,10,23,17,0.833333333333333,0.739130434782609,7176.56,540.43,971.87,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRAN","CH","spawn",4,0,4,0,3,3,3,3,1,0.75,0.75,0.75,0.75,4,0,0,0,4,3,,0.75,7176.56,540.43,971.87,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRAN","CH","rear",4,0,4,0,2,2,2,2,1,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,7176.56,540.43,971.87,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRCN","BT","any",95,0,94,1,50,88,88,88,0.989473684210526,0.526315789473684,0.926315789473684,0.926315789473684,0.926315789473684,0,0,95,50,95,88,0.526315789473684,0.926315789473684,1502.48,691.1,964.06,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRCN","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1502.48,691.1,964.06,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRCN","BT","rear",5,0,5,0,2,4,4,4,1,0.4,0.8,0.8,0.8,0,0,5,2,5,4,0.4,0.8,1502.48,691.1,964.06,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRCN","CH","any",31,0,30,1,21,27,27,27,0.967741935483871,0.67741935483871,0.870967741935484,0.870967741935484,0.870967741935484,13,0,18,13,31,27,0.722222222222222,0.870967741935484,716.2,428.99,474.71,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRCN","CH","spawn",5,0,5,0,2,3,3,3,1,0.4,0.6,0.6,0.6,5,0,0,0,5,3,,0.6,716.2,428.99,474.71,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"FRCN","CH","rear",13,0,13,0,10,13,13,13,1,0.769230769230769,1,1,1,2,0,11,8,13,13,0.727272727272727,1,716.2,428.99,474.71,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"HARR","BT","any",43,0,38,5,19,33,33,33,0.883720930232558,0.441860465116279,0.767441860465116,0.767441860465116,0.767441860465116,0,0,43,19,43,33,0.441860465116279,0.767441860465116,1561.45,468.9,827.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"HARR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1561.45,468.9,827.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"HARR","BT","rear",7,0,7,0,3,6,6,6,1,0.428571428571429,0.857142857142857,0.857142857142857,0.857142857142857,0,0,7,3,7,6,0.428571428571429,0.857142857142857,1561.45,468.9,827.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"HARR","CH","any",118,0,116,2,109,109,109,109,0.983050847457627,0.923728813559322,0.923728813559322,0.923728813559322,0.923728813559322,8,0,110,102,118,109,0.927272727272727,0.923728813559322,1126.73,327.72,377.22,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"HARR","CH","spawn",4,0,4,0,3,3,3,3,1,0.75,0.75,0.75,0.75,4,0,0,0,4,3,,0.75,1126.73,327.72,377.22,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"HARR","CH","rear",46,0,45,1,44,44,44,44,0.978260869565217,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,0,0,46,44,46,44,0.956521739130435,0.956521739130435,1126.73,327.72,377.22,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"INGR","BT","any",27,0,27,0,23,26,26,26,1,0.851851851851852,0.962962962962963,0.962962962962963,0.962962962962963,0,0,27,23,27,26,0.851851851851852,0.962962962962963,3907.56,1111.41,1783.68,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"INGR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3907.56,1111.41,1783.68,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"INGR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3907.56,1111.41,1783.68,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"INGR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"INGR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"INGR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"KISP","BT","any",195,0,187,8,120,161,161,161,0.958974358974359,0.615384615384615,0.825641025641026,0.825641025641026,0.825641025641026,0,0,195,120,195,161,0.615384615384615,0.825641025641026,4475.39,1261.15,1962.71,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KISP","BT","spawn",5,0,5,0,2,3,3,3,1,0.4,0.6,0.6,0.6,0,0,5,2,5,3,0.4,0.6,4475.39,1261.15,1962.71,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KISP","BT","rear",56,0,51,5,26,37,37,37,0.910714285714286,0.464285714285714,0.660714285714286,0.660714285714286,0.660714285714286,0,0,56,26,56,37,0.464285714285714,0.660714285714286,4475.39,1261.15,1962.71,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KISP","CH","any",89,0,89,0,75,76,76,76,1,0.842696629213483,0.853932584269663,0.853932584269663,0.853932584269663,37,0,52,45,89,76,0.865384615384615,0.853932584269663,2786.73,860.45,1050.59,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KISP","CH","spawn",30,0,30,0,25,25,25,25,1,0.833333333333333,0.833333333333333,0.833333333333333,0.833333333333333,30,0,0,0,30,25,,0.833333333333333,2786.73,860.45,1050.59,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KISP","CH","rear",12,0,12,0,10,10,10,10,1,0.833333333333333,0.833333333333333,0.833333333333333,0.833333333333333,1,0,11,9,12,10,0.818181818181818,0.833333333333333,2786.73,860.45,1050.59,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KLUM","BT","any",314,0,275,39,183,232,232,232,0.875796178343949,0.582802547770701,0.738853503184713,0.738853503184713,0.738853503184713,0,0,314,183,314,232,0.582802547770701,0.738853503184713,1930.45,894.45,1189.16,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KLUM","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1930.45,894.45,1189.16,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KLUM","BT","rear",141,0,121,20,61,90,90,90,0.858156028368794,0.432624113475177,0.638297872340426,0.638297872340426,0.638297872340426,0,0,141,61,141,90,0.432624113475177,0.638297872340426,1930.45,894.45,1189.16,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KLUM","CH","any",104,0,99,5,84,87,87,87,0.951923076923077,0.807692307692308,0.836538461538462,0.836538461538462,0.836538461538462,28,0,76,59,104,87,0.776315789473684,0.836538461538462,1481.08,707.93,830.68,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KLUM","CH","spawn",20,0,19,1,17,18,18,18,0.95,0.85,0.9,0.9,0.9,20,0,0,0,20,18,,0.9,1481.08,707.93,830.68,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KLUM","CH","rear",19,0,19,0,14,15,15,15,1,0.736842105263158,0.789473684210526,0.789473684210526,0.789473684210526,4,0,15,10,19,15,0.666666666666667,0.789473684210526,1481.08,707.93,830.68,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"KOTR","BT","any",184,0,183,1,138,162,162,162,0.994565217391304,0.75,0.880434782608696,0.880434782608696,0.880434782608696,0,0,184,138,184,162,0.75,0.880434782608696,2533.85,899.57,1305.15,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"KOTR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2533.85,899.57,1305.15,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"KOTR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2533.85,899.57,1305.15,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"KOTR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"KOTR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"KOTR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LBTN","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,8647.79,2026.94,2189.51,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LBTN","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8647.79,2026.94,2189.51,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LBTN","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8647.79,2026.94,2189.51,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LBTN","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LBTN","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LBTN","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LCHL","BT","any",6,0,6,0,5,6,6,6,1,0.833333333333333,1,1,1,0,0,6,5,6,6,0.833333333333333,1,5236.61,896.14,1550.64,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LCHL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5236.61,896.14,1550.64,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LCHL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5236.61,896.14,1550.64,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LCHL","CH","any",38,0,38,0,32,34,34,34,1,0.842105263157895,0.894736842105263,0.894736842105263,0.894736842105263,10,0,28,25,38,34,0.892857142857143,0.894736842105263,4159.73,464.81,826.81,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LCHL","CH","spawn",2,0,2,0,2,2,2,2,1,1,1,1,1,2,0,0,0,2,2,,1,4159.73,464.81,826.81,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LCHL","CH","rear",23,0,23,0,17,19,19,19,1,0.739130434782609,0.826086956521739,0.826086956521739,0.826086956521739,6,0,17,14,23,19,0.823529411764706,0.826086956521739,4159.73,464.81,826.81,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LFRA","BT","any",78,0,78,0,58,70,70,70,1,0.743589743589744,0.897435897435897,0.897435897435897,0.897435897435897,0,0,78,58,78,70,0.743589743589744,0.897435897435897,3415.8,1284.59,1805.62,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LFRA","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3415.8,1284.59,1805.62,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LFRA","BT","rear",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,3415.8,1284.59,1805.62,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LFRA","CH","any",165,0,159,6,104,132,132,132,0.963636363636364,0.63030303030303,0.8,0.8,0.8,19,0,146,86,165,132,0.589041095890411,0.8,2754.05,820.43,1176.68,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LFRA","CH","spawn",10,0,10,0,9,10,10,10,1,0.9,1,1,1,10,0,0,0,10,10,,1,2754.05,820.43,1176.68,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LFRA","CH","rear",66,0,63,3,39,54,54,54,0.954545454545455,0.590909090909091,0.818181818181818,0.818181818181818,0.818181818181818,6,0,60,33,66,54,0.55,0.818181818181818,2754.05,820.43,1176.68,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LKEL","BT","any",63,0,63,0,36,48,48,48,1,0.571428571428571,0.761904761904762,0.761904761904762,0.761904761904762,0,0,63,36,63,48,0.571428571428571,0.761904761904762,401.02,144.74,222.78,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LKEL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,401.02,144.74,222.78,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LKEL","BT","rear",26,0,26,0,11,16,16,16,1,0.423076923076923,0.615384615384615,0.615384615384615,0.615384615384615,0,0,26,11,26,16,0.423076923076923,0.615384615384615,401.02,144.74,222.78,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LKEL","CH","any",14,0,14,0,10,11,11,11,1,0.714285714285714,0.785714285714286,0.785714285714286,0.785714285714286,5,0,9,7,14,11,0.777777777777778,0.785714285714286,328.21,106.49,123.85,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LKEL","CH","spawn",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,3,0,0,0,3,2,,0.666666666666667,328.21,106.49,123.85,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LKEL","CH","rear",2,0,2,0,1,2,2,2,1,0.5,1,1,1,0,0,2,1,2,2,0.5,1,328.21,106.49,123.85,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LNTH","BT","any",108,0,108,0,84,102,102,102,1,0.777777777777778,0.944444444444444,0.944444444444444,0.944444444444444,0,0,108,84,108,102,0.777777777777778,0.944444444444444,3027.89,781.94,1238.82,208,86,50,70,70,TRUE +"fresh","bcfishpass",0,FALSE,"LNTH","BT","spawn",3,0,3,0,3,3,3,3,1,1,1,1,1,0,0,3,3,3,3,1,1,3027.89,781.94,1238.82,208,86,50,70,70,TRUE +"fresh","bcfishpass",0,FALSE,"LNTH","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3027.89,781.94,1238.82,208,86,50,70,70,TRUE +"fresh","bcfishpass",0,FALSE,"LNTH","CH","any",56,0,54,2,48,48,48,48,0.964285714285714,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,24,0,32,26,56,48,0.8125,0.857142857142857,1137.26,471.29,559.54,242,111,63,73,73,TRUE +"fresh","bcfishpass",0,FALSE,"LNTH","CH","spawn",18,0,18,0,16,16,16,16,1,0.888888888888889,0.888888888888889,0.888888888888889,0.888888888888889,18,0,0,0,18,16,,0.888888888888889,1137.26,471.29,559.54,242,111,63,73,73,TRUE +"fresh","bcfishpass",0,FALSE,"LNTH","CH","rear",23,0,23,0,23,23,23,23,1,1,1,1,1,6,0,17,17,23,23,1,1,1137.26,471.29,559.54,242,111,63,73,73,TRUE +"fresh","bcfishpass",0,FALSE,"LOMI","BT","any",27,0,26,1,20,25,25,25,0.962962962962963,0.740740740740741,0.925925925925926,0.925925925925926,0.925925925925926,0,0,27,20,27,25,0.740740740740741,0.925925925925926,3436.23,967.82,1517.42,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LOMI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3436.23,967.82,1517.42,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LOMI","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3436.23,967.82,1517.42,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LOMI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LOMI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LOMI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"LPCE","BT","any",55,0,53,2,42,40,40,42,0.963636363636364,0.763636363636364,0.727272727272727,0.727272727272727,0.763636363636364,0,0,55,42,55,40,0.763636363636364,0.727272727272727,3130.17,918.71,1261.4,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LPCE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3130.17,918.71,1261.4,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LPCE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3130.17,918.71,1261.4,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LPCE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LPCE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LPCE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSAL","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSAL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSAL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSAL","CH","any",17,0,17,0,17,17,17,17,1,1,1,1,1,6,0,11,11,17,17,1,1,2968.08,312.6,617.6,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSAL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2968.08,312.6,617.6,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSAL","CH","rear",4,0,4,0,4,4,4,4,1,1,1,1,1,2,0,2,2,4,4,1,1,2968.08,312.6,617.6,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSKE","BT","any",230,0,216,14,163,186,186,186,0.939130434782609,0.708695652173913,0.808695652173913,0.808695652173913,0.808695652173913,0,0,230,163,230,186,0.708695652173913,0.808695652173913,2884.31,1315.64,1751.5,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSKE","BT","spawn",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0,3,2,3,2,0.666666666666667,0.666666666666667,2884.31,1315.64,1751.5,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSKE","BT","rear",111,0,102,9,66,81,81,81,0.918918918918919,0.594594594594595,0.72972972972973,0.72972972972973,0.72972972972973,0,0,111,66,111,81,0.594594594594595,0.72972972972973,2884.31,1315.64,1751.5,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSKE","CH","any",122,0,119,3,99,106,106,106,0.975409836065574,0.811475409836066,0.868852459016393,0.868852459016393,0.868852459016393,40,0,82,66,122,106,0.804878048780488,0.868852459016393,2086.32,1049.22,1167.34,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSKE","CH","spawn",24,0,23,1,21,22,22,22,0.958333333333333,0.875,0.916666666666667,0.916666666666667,0.916666666666667,24,0,0,0,24,22,,0.916666666666667,2086.32,1049.22,1167.34,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"LSKE","CH","rear",35,0,35,0,25,29,29,29,1,0.714285714285714,0.828571428571429,0.828571428571429,0.828571428571429,3,0,32,23,35,29,0.71875,0.828571428571429,2086.32,1049.22,1167.34,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MCGR","BT","any",39,0,35,4,33,35,35,35,0.897435897435897,0.846153846153846,0.897435897435897,0.897435897435897,0.897435897435897,0,0,39,33,39,35,0.846153846153846,0.897435897435897,3628.5,1002.82,1460.17,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MCGR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3628.5,1002.82,1460.17,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MCGR","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3628.5,1002.82,1460.17,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MCGR","CH","any",40,0,38,2,33,35,35,35,0.95,0.825,0.875,0.875,0.875,14,0,26,20,40,35,0.769230769230769,0.875,2512.15,704.08,935.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MCGR","CH","spawn",5,0,5,0,4,4,4,4,1,0.8,0.8,0.8,0.8,5,0,0,0,5,4,,0.8,2512.15,704.08,935.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MCGR","CH","rear",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,1,0,2,1,3,2,0.5,0.666666666666667,2512.15,704.08,935.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MESI","BT","any",64,0,64,0,50,60,60,60,1,0.78125,0.9375,0.9375,0.9375,0,0,64,50,64,60,0.78125,0.9375,2767.09,685.99,1126.99,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MESI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2767.09,685.99,1126.99,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MESI","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2767.09,685.99,1126.99,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MESI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MESI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MESI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MFRA","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MFRA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MFRA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MFRA","CH","any",2,0,1,1,0,0,0,0,0.5,0,0,0,0,0,0,2,0,2,0,0,0,231.06,96.92,104.06,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MFRA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,231.06,96.92,104.06,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MFRA","CH","rear",2,0,1,1,0,0,0,0,0.5,0,0,0,0,0,0,2,0,2,0,0,0,231.06,96.92,104.06,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORK","BT","any",79,0,79,0,70,73,73,73,1,0.886075949367089,0.924050632911392,0.924050632911392,0.924050632911392,0,0,79,70,79,73,0.886075949367089,0.924050632911392,8075.86,2434.23,3397.59,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORK","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8075.86,2434.23,3397.59,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORK","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8075.86,2434.23,3397.59,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORK","CH","any",156,0,155,1,140,143,143,143,0.993589743589744,0.897435897435897,0.916666666666667,0.916666666666667,0.916666666666667,92,0,64,53,156,143,0.828125,0.916666666666667,5705.82,1556.47,2225.04,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORK","CH","spawn",25,0,25,0,22,22,22,22,1,0.88,0.88,0.88,0.88,25,0,0,0,25,22,,0.88,5705.82,1556.47,2225.04,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORK","CH","rear",32,0,31,1,24,25,25,25,0.96875,0.75,0.78125,0.78125,0.78125,15,0,17,9,32,25,0.529411764705882,0.78125,5705.82,1556.47,2225.04,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORR","BT","any",357,0,349,8,151,258,258,258,0.977591036414566,0.42296918767507,0.722689075630252,0.722689075630252,0.722689075630252,0,0,357,151,357,258,0.42296918767507,0.722689075630252,4765.64,952.61,1829.89,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORR","BT","spawn",23,0,23,0,7,15,15,15,1,0.304347826086957,0.652173913043478,0.652173913043478,0.652173913043478,0,0,23,7,23,15,0.304347826086957,0.652173913043478,4765.64,952.61,1829.89,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORR","BT","rear",106,0,102,4,27,63,63,63,0.962264150943396,0.254716981132075,0.594339622641509,0.594339622641509,0.594339622641509,0,0,106,27,106,63,0.254716981132075,0.594339622641509,4765.64,952.61,1829.89,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORR","CH","any",41,0,41,0,31,33,33,33,1,0.75609756097561,0.804878048780488,0.804878048780488,0.804878048780488,24,0,17,10,41,33,0.588235294117647,0.804878048780488,3328.25,644.81,880.69,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORR","CH","spawn",9,0,9,0,7,7,7,7,1,0.777777777777778,0.777777777777778,0.777777777777778,0.777777777777778,9,0,0,0,9,7,,0.777777777777778,3328.25,644.81,880.69,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MORR","CH","rear",2,0,2,0,1,2,2,2,1,0.5,1,1,1,0,0,2,1,2,2,0.5,1,3328.25,644.81,880.69,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"MSKE","BT","any",69,0,62,7,46,51,51,51,0.898550724637681,0.666666666666667,0.739130434782609,0.739130434782609,0.739130434782609,0,0,69,46,69,51,0.666666666666667,0.739130434782609,2667.19,921.62,1383.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MSKE","BT","spawn",4,0,3,1,2,2,2,2,0.75,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,2667.19,921.62,1383.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MSKE","BT","rear",5,0,3,2,0,0,0,0,0.6,0,0,0,0,0,0,5,0,5,0,0,0,2667.19,921.62,1383.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MSKE","CH","any",42,0,40,2,34,36,36,36,0.952380952380952,0.80952380952381,0.857142857142857,0.857142857142857,0.857142857142857,6,0,36,30,42,36,0.833333333333333,0.857142857142857,1506.83,676.03,779.76,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MSKE","CH","spawn",4,0,3,1,2,2,2,2,0.75,0.5,0.5,0.5,0.5,4,0,0,0,4,2,,0.5,1506.83,676.03,779.76,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"MSKE","CH","rear",2,0,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,1,0,1,0,2,1,0,0.5,1506.83,676.03,779.76,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"NARC","BT","any",7,0,7,0,7,7,7,7,1,1,1,1,1,0,0,7,7,7,7,1,1,2994.54,633.18,1162.09,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NARC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2994.54,633.18,1162.09,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NARC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2994.54,633.18,1162.09,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NARC","CH","any",22,0,22,0,19,20,20,20,1,0.863636363636364,0.909090909090909,0.909090909090909,0.909090909090909,18,0,4,3,22,20,0.75,0.909090909090909,2335,387.57,563.65,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NARC","CH","spawn",9,0,9,0,8,8,8,8,1,0.888888888888889,0.888888888888889,0.888888888888889,0.888888888888889,9,0,0,0,9,8,,0.888888888888889,2335,387.57,563.65,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NARC","CH","rear",6,0,6,0,5,5,5,5,1,0.833333333333333,0.833333333333333,0.833333333333333,0.833333333333333,5,0,1,1,6,5,1,0.833333333333333,2335,387.57,563.65,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NATR","BT","any",57,0,53,4,33,44,44,44,0.929824561403509,0.578947368421053,0.771929824561403,0.771929824561403,0.771929824561403,0,0,57,33,57,44,0.578947368421053,0.771929824561403,8011.09,1516.19,3071.31,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NATR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8011.09,1516.19,3071.31,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NATR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8011.09,1516.19,3071.31,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NATR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NATR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NATR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NECR","BT","any",12,0,12,0,12,12,12,12,1,1,1,1,1,0,0,12,12,12,12,1,1,6156.77,989.82,1875.61,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NECR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6156.77,989.82,1875.61,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NECR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6156.77,989.82,1875.61,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NECR","CH","any",101,0,101,0,93,96,96,96,1,0.920792079207921,0.95049504950495,0.95049504950495,0.95049504950495,33,0,68,60,101,96,0.88235294117647,0.95049504950495,5489.42,515.99,1079.18,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NECR","CH","spawn",9,0,9,0,9,9,9,9,1,1,1,1,1,9,0,0,0,9,9,,1,5489.42,515.99,1079.18,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"NECR","CH","rear",6,0,6,0,4,6,6,6,1,0.666666666666667,1,1,1,1,0,5,3,6,6,0.6,1,5489.42,515.99,1079.18,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"OSPK","BT","any",12,0,12,0,10,12,12,12,1,0.833333333333333,1,1,1,0,0,12,10,12,12,0.833333333333333,1,1881.19,594.62,866.44,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"OSPK","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1881.19,594.62,866.44,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"OSPK","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1881.19,594.62,866.44,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"OSPK","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"OSPK","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"OSPK","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"PARA","BT","any",77,0,77,0,60,70,70,70,1,0.779220779220779,0.909090909090909,0.909090909090909,0.909090909090909,0,0,77,60,77,70,0.779220779220779,0.909090909090909,4256.87,718.23,1769.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4256.87,718.23,1769.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4256.87,718.23,1769.82,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARS","BT","any",281,0,280,1,231,259,259,259,0.99644128113879,0.822064056939502,0.921708185053381,0.921708185053381,0.921708185053381,0,0,281,231,281,259,0.822064056939502,0.921708185053381,6822.47,1683.36,2575.08,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARS","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6822.47,1683.36,2575.08,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARS","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6822.47,1683.36,2575.08,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARS","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARS","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PARS","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PCEA","BT","any",176,0,176,0,135,163,163,163,1,0.767045454545455,0.926136363636364,0.926136363636364,0.926136363636364,0,0,176,135,176,163,0.767045454545455,0.926136363636364,5002.96,925.72,2023.48,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PCEA","BT","spawn",1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,5002.96,925.72,2023.48,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PCEA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5002.96,925.72,2023.48,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PCEA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PCEA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PCEA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PINE","BT","any",249,0,249,0,225,241,241,241,1,0.903614457831325,0.967871485943775,0.967871485943775,0.967871485943775,0,0,249,225,249,241,0.903614457831325,0.967871485943775,5425.97,1643.51,2376.18,213,191,115,153,153,TRUE +"fresh","bcfishpass",0,FALSE,"PINE","BT","spawn",3,0,3,0,3,3,3,3,1,1,1,1,1,0,0,3,3,3,3,1,1,5425.97,1643.51,2376.18,213,191,115,153,153,TRUE +"fresh","bcfishpass",0,FALSE,"PINE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5425.97,1643.51,2376.18,213,191,115,153,153,TRUE +"fresh","bcfishpass",0,FALSE,"PINE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PINE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"PINE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"SALR","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"SALR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"SALR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"SALR","CH","any",7,0,7,0,6,6,6,6,1,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,5,0,2,1,7,6,0.5,0.857142857142857,3134.03,206.59,442.55,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"SALR","CH","spawn",4,0,4,0,4,4,4,4,1,1,1,1,1,4,0,0,0,4,4,,1,3134.03,206.59,442.55,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"SALR","CH","rear",2,0,2,0,1,1,1,1,1,0.5,0.5,0.5,0.5,0,0,2,1,2,1,0.5,0.5,3134.03,206.59,442.55,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"SETN","BT","any",180,0,175,5,115,151,151,151,0.972222222222222,0.638888888888889,0.838888888888889,0.838888888888889,0.838888888888889,0,0,180,115,180,151,0.638888888888889,0.838888888888889,2844.64,816.05,1339.7,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"SETN","BT","spawn",3,0,2,1,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0,3,2,3,2,0.666666666666667,0.666666666666667,2844.64,816.05,1339.7,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"SETN","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,2844.64,816.05,1339.7,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"SETN","CH","any",117,0,116,1,111,111,111,111,0.991452991452991,0.948717948717949,0.948717948717949,0.948717948717949,0.948717948717949,105,0,12,6,117,111,0.5,0.948717948717949,1497.15,537.97,609.35,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"SETN","CH","spawn",17,0,17,0,16,16,16,16,1,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,16,0,1,0,17,16,0,0.941176470588235,1497.15,537.97,609.35,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"SETN","CH","rear",85,0,85,0,85,85,85,85,1,1,1,1,1,82,0,3,3,85,85,1,1,1497.15,537.97,609.35,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TABR","BT","any",10,0,10,0,4,4,4,4,1,0.4,0.4,0.4,0.4,0,0,10,4,10,4,0.4,0.4,3305.18,677.05,1035.42,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TABR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3305.18,677.05,1035.42,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TABR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3305.18,677.05,1035.42,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TABR","CH","any",50,0,48,2,29,32,32,32,0.96,0.58,0.64,0.64,0.64,4,0,46,25,50,32,0.543478260869565,0.64,2566.6,410.27,642.88,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TABR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2566.6,410.27,642.88,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TABR","CH","rear",25,0,24,1,17,18,18,18,0.96,0.68,0.72,0.72,0.72,3,0,22,14,25,18,0.636363636363636,0.72,2566.6,410.27,642.88,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"THOM","BT","any",4,0,4,0,3,4,4,4,1,0.75,1,1,1,0,0,4,3,4,4,0.75,1,1808.68,338.34,563,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"THOM","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1808.68,338.34,563,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"THOM","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1808.68,338.34,563,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"THOM","CH","any",29,0,29,0,26,26,26,26,1,0.896551724137931,0.896551724137931,0.896551724137931,0.896551724137931,23,0,6,4,29,26,0.666666666666667,0.896551724137931,513.62,203.23,209.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"THOM","CH","spawn",21,0,21,0,20,20,20,20,1,0.952380952380952,0.952380952380952,0.952380952380952,0.952380952380952,21,0,0,0,21,20,,0.952380952380952,513.62,203.23,209.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"THOM","CH","rear",4,0,4,0,4,4,4,4,1,1,1,1,1,3,0,1,1,4,4,1,1,513.62,203.23,209.51,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TOOD","BT","any",36,0,36,0,31,34,34,34,1,0.861111111111111,0.944444444444444,0.944444444444444,0.944444444444444,0,0,36,31,36,34,0.861111111111111,0.944444444444444,4466.1,1118.51,1850.91,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"TOOD","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4466.1,1118.51,1850.91,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"TOOD","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4466.1,1118.51,1850.91,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"TOOD","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"TOOD","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"TOOD","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"TWAC","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,1002.12,226.3,393.93,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TWAC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1002.12,226.3,393.93,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TWAC","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1002.12,226.3,393.93,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TWAC","CH","any",9,0,9,0,8,9,9,9,1,0.888888888888889,1,1,1,0,0,9,8,9,9,0.888888888888889,1,689.03,144.23,173.02,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TWAC","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,689.03,144.23,173.02,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"TWAC","CH","rear",7,0,7,0,7,7,7,7,1,1,1,1,1,0,0,7,7,7,7,1,1,689.03,144.23,173.02,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UFRA","BT","any",87,0,87,0,45,59,59,59,1,0.517241379310345,0.67816091954023,0.67816091954023,0.67816091954023,0,0,87,45,87,59,0.517241379310345,0.67816091954023,2107.1,952.9,1239.84,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UFRA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2107.1,952.9,1239.84,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UFRA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2107.1,952.9,1239.84,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UFRA","CH","any",51,0,51,0,44,45,45,45,1,0.862745098039216,0.88235294117647,0.88235294117647,0.88235294117647,29,0,22,16,51,45,0.727272727272727,0.88235294117647,1243.66,632.76,726.73,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UFRA","CH","spawn",11,0,11,0,10,11,11,11,1,0.909090909090909,1,1,1,11,0,0,0,11,11,,1,1243.66,632.76,726.73,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UFRA","CH","rear",6,0,6,0,3,3,3,3,1,0.5,0.5,0.5,0.5,2,0,4,1,6,3,0.25,0.5,1243.66,632.76,726.73,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UNRS","BT","any",2,0,2,0,0,2,2,2,1,0,1,1,1,0,0,2,0,2,2,0,1,7431.77,644.82,1864.53,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UNRS","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7431.77,644.82,1864.53,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UNRS","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7431.77,644.82,1864.53,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UNRS","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UNRS","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UNRS","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UNTH","BT","any",147,0,140,7,80,122,122,122,0.952380952380952,0.54421768707483,0.829931972789116,0.829931972789116,0.829931972789116,0,0,147,80,147,122,0.54421768707483,0.829931972789116,1077.2,544.45,719.29,152,119,67,83,83,TRUE +"fresh","bcfishpass",0,FALSE,"UNTH","BT","spawn",2,0,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0,0,2,1,2,1,0.5,0.5,1077.2,544.45,719.29,152,119,67,83,83,TRUE +"fresh","bcfishpass",0,FALSE,"UNTH","BT","rear",2,0,2,0,1,1,1,1,1,0.5,0.5,0.5,0.5,0,0,2,1,2,1,0.5,0.5,1077.2,544.45,719.29,152,119,67,83,83,TRUE +"fresh","bcfishpass",0,FALSE,"UNTH","CH","any",44,0,41,3,31,33,33,33,0.931818181818182,0.704545454545455,0.75,0.75,0.75,21,0,23,13,44,33,0.565217391304348,0.75,760.6,429.83,470.93,171,113,73,80,80,TRUE +"fresh","bcfishpass",0,FALSE,"UNTH","CH","spawn",14,0,14,0,11,11,11,11,1,0.785714285714286,0.785714285714286,0.785714285714286,0.785714285714286,14,0,0,0,14,11,,0.785714285714286,760.6,429.83,470.93,171,113,73,80,80,TRUE +"fresh","bcfishpass",0,FALSE,"UNTH","CH","rear",21,0,21,0,17,17,17,17,1,0.80952380952381,0.80952380952381,0.80952380952381,0.80952380952381,6,0,15,11,21,17,0.733333333333333,0.80952380952381,760.6,429.83,470.93,171,113,73,80,80,TRUE +"fresh","bcfishpass",0,FALSE,"UOMI","BT","any",82,0,82,0,42,54,54,54,1,0.51219512195122,0.658536585365854,0.658536585365854,0.658536585365854,0,0,82,42,82,54,0.51219512195122,0.658536585365854,3703.16,907.88,1459.1,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UOMI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3703.16,907.88,1459.1,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UOMI","BT","rear",22,0,22,0,6,10,10,10,1,0.272727272727273,0.454545454545455,0.454545454545455,0.454545454545455,0,0,22,6,22,10,0.272727272727273,0.454545454545455,3703.16,907.88,1459.1,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UOMI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UOMI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UOMI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UPCE","BT","any",153,0,152,1,138,139,139,139,0.993464052287582,0.901960784313726,0.908496732026144,0.908496732026144,0.908496732026144,0,0,153,138,153,139,0.901960784313726,0.908496732026144,5261.16,1657.29,2320.94,570,556,441,485,485,TRUE +"fresh","bcfishpass",0,FALSE,"UPCE","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,5261.16,1657.29,2320.94,570,556,441,485,485,TRUE +"fresh","bcfishpass",0,FALSE,"UPCE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5261.16,1657.29,2320.94,570,556,441,485,485,TRUE +"fresh","bcfishpass",0,FALSE,"UPCE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UPCE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UPCE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"USKE","BT","any",32,0,32,0,28,31,31,31,1,0.875,0.96875,0.96875,0.96875,0,0,32,28,32,31,0.875,0.96875,3451.92,878.03,1438.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"USKE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3451.92,878.03,1438.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"USKE","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3451.92,878.03,1438.52,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"USKE","CH","any",8,0,8,0,8,8,8,8,1,1,1,1,1,0,0,8,8,8,8,1,1,1518.35,498.83,593.41,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"USKE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1518.35,498.83,593.41,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"USKE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1518.35,498.83,593.41,,,,,,FALSE +"fresh","bcfishpass",0,FALSE,"UTRE","BT","any",6,0,6,0,4,6,6,6,1,0.666666666666667,1,1,1,0,0,6,4,6,6,0.666666666666667,1,1851.52,204.25,585.34,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UTRE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1851.52,204.25,585.34,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UTRE","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1851.52,204.25,585.34,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UTRE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UTRE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"UTRE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"WILL","BT","any",54,0,54,0,39,50,50,50,1,0.722222222222222,0.925925925925926,0.925925925925926,0.925925925925926,0,0,54,39,54,50,0.722222222222222,0.925925925925926,4515.45,1052.18,1690.35,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"WILL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4515.45,1052.18,1690.35,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"WILL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4515.45,1052.18,1690.35,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"WILL","CH","any",58,0,58,0,52,53,53,53,1,0.896551724137931,0.913793103448276,0.913793103448276,0.913793103448276,40,0,18,13,58,53,0.722222222222222,0.913793103448276,3537.67,630.48,1029.73,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"WILL","CH","spawn",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,3,0,0,0,3,2,,0.666666666666667,3537.67,630.48,1029.73,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"WILL","CH","rear",42,0,42,0,38,39,39,39,1,0.904761904761905,0.928571428571429,0.928571428571429,0.928571428571429,30,0,12,8,42,39,0.666666666666667,0.928571428571429,3537.67,630.48,1029.73,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"ZYMO","BT","any",280,0,244,36,122,186,186,186,0.871428571428571,0.435714285714286,0.664285714285714,0.664285714285714,0.664285714285714,0,0,280,122,280,186,0.435714285714286,0.664285714285714,1840.06,575.42,863.2,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"ZYMO","BT","spawn",14,0,12,2,7,9,9,9,0.857142857142857,0.5,0.642857142857143,0.642857142857143,0.642857142857143,0,0,14,7,14,9,0.5,0.642857142857143,1840.06,575.42,863.2,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"ZYMO","BT","rear",147,0,123,24,47,78,78,78,0.836734693877551,0.319727891156463,0.530612244897959,0.530612244897959,0.530612244897959,0,0,147,47,147,78,0.319727891156463,0.530612244897959,1840.06,575.42,863.2,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"ZYMO","CH","any",21,0,19,2,13,16,16,16,0.904761904761905,0.619047619047619,0.761904761904762,0.761904761904762,0.761904761904762,8,0,13,6,21,16,0.461538461538462,0.761904761904762,1200.73,462.91,539.94,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"ZYMO","CH","spawn",8,0,7,1,7,7,7,7,0.875,0.875,0.875,0.875,0.875,8,0,0,0,8,7,,0.875,1200.73,462.91,539.94,,,,,,TRUE +"fresh","bcfishpass",0,FALSE,"ZYMO","CH","rear",5,0,4,1,0,1,1,1,0.8,0,0.2,0.2,0.2,0,0,5,0,5,1,0,0.2,1200.73,462.91,539.94,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BBAR","BT","any",16,0,16,0,10,14,14,14,1,0.625,0.875,0.875,0.875,0,0,16,10,16,14,0.625,0.875,1262.45,296.02,478.21,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BBAR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1262.45,296.02,478.21,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BBAR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1262.45,296.02,478.21,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BBAR","CH","any",5,0,3,2,1,1,1,1,0.6,0.2,0.2,0.2,0.2,0,0,5,1,5,1,0.2,0.2,269.11,160.2,167.83,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BBAR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,269.11,160.2,167.83,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BBAR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,269.11,160.2,167.83,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BOWR","BT","any",38,0,34,4,27,31,31,31,0.894736842105263,0.710526315789474,0.81578947368421,0.81578947368421,0.81578947368421,0,0,38,27,38,31,0.710526315789474,0.81578947368421,3695.08,1046.27,1618.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BOWR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3695.08,1046.27,1618.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BOWR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3695.08,1046.27,1618.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BOWR","CH","any",96,0,91,5,79,83,83,83,0.947916666666667,0.822916666666667,0.864583333333333,0.864583333333333,0.864583333333333,41,0,55,41,96,83,0.745454545454545,0.864583333333333,2516.89,655.31,913.88,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BOWR","CH","spawn",19,0,18,1,16,17,17,17,0.947368421052632,0.842105263157895,0.894736842105263,0.894736842105263,0.894736842105263,19,0,0,0,19,17,,0.894736842105263,2516.89,655.31,913.88,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BOWR","CH","rear",54,0,51,3,43,46,46,46,0.944444444444444,0.796296296296296,0.851851851851852,0.851851851851852,0.851851851851852,24,0,30,20,54,46,0.666666666666667,0.851851851851852,2516.89,655.31,913.88,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BULK","BT","any",468,0,443,25,230,329,329,329,0.946581196581197,0.491452991452991,0.702991452991453,0.702991452991453,0.702991452991453,0,0,468,230,468,329,0.491452991452991,0.702991452991453,7676.5,1866.31,3021.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BULK","BT","spawn",12,0,11,1,4,9,9,9,0.916666666666667,0.333333333333333,0.75,0.75,0.75,0,0,12,4,12,9,0.333333333333333,0.75,7676.5,1866.31,3021.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BULK","BT","rear",255,0,232,23,86,151,151,151,0.909803921568627,0.337254901960784,0.592156862745098,0.592156862745098,0.592156862745098,0,0,255,86,255,151,0.337254901960784,0.592156862745098,7676.5,1866.31,3021.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BULK","CH","any",110,0,110,0,105,108,108,108,1,0.954545454545455,0.981818181818182,0.981818181818182,0.981818181818182,19,0,91,86,110,108,0.945054945054945,0.981818181818182,5089.63,1260.25,1730.12,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BULK","CH","spawn",16,0,16,0,16,16,16,16,1,1,1,1,1,16,0,0,0,16,16,,1,5089.63,1260.25,1730.12,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"BULK","CH","rear",11,0,11,0,6,9,9,9,1,0.545454545454545,0.818181818181818,0.818181818181818,0.818181818181818,0,0,11,6,11,9,0.545454545454545,0.818181818181818,5089.63,1260.25,1730.12,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CARP","BT","any",6,0,6,0,4,6,6,6,1,0.666666666666667,1,1,1,0,0,6,4,6,6,0.666666666666667,1,4296.5,497.07,1072.63,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CARP","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4296.5,497.07,1072.63,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CARP","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4296.5,497.07,1072.63,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CARP","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CARP","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CARP","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CHES","BT","any",3,0,1,2,1,1,1,1,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,0.333333333333333,0,0,3,1,3,1,0.333333333333333,0.333333333333333,901.21,145.45,336.47,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHES","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,901.21,145.45,336.47,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHES","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,901.21,145.45,336.47,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHES","CH","any",87,0,85,2,81,82,82,82,0.977011494252874,0.931034482758621,0.942528735632184,0.942528735632184,0.942528735632184,28,0,59,54,87,82,0.915254237288136,0.942528735632184,750.66,88.26,149.77,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHES","CH","spawn",3,0,2,1,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2,0,1,0,3,2,0,0.666666666666667,750.66,88.26,149.77,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHES","CH","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,750.66,88.26,149.77,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHWK","BT","any",62,0,62,0,41,57,57,57,1,0.661290322580645,0.919354838709677,0.919354838709677,0.919354838709677,0,0,62,41,62,57,0.661290322580645,0.919354838709677,822.24,316.56,418.39,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHWK","BT","spawn",5,0,5,0,4,5,5,5,1,0.8,1,1,1,0,0,5,4,5,5,0.8,1,822.24,316.56,418.39,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHWK","BT","rear",5,0,5,0,4,4,4,4,1,0.8,0.8,0.8,0.8,0,0,5,4,5,4,0.8,0.8,822.24,316.56,418.39,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHWK","CH","any",21,0,19,2,14,14,14,14,0.904761904761905,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2,0,19,13,21,14,0.68421052631579,0.666666666666667,662.37,253.93,301.07,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHWK","CH","spawn",8,0,8,0,6,6,6,6,1,0.75,0.75,0.75,0.75,2,0,6,5,8,6,0.833333333333333,0.75,662.37,253.93,301.07,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"CHWK","CH","rear",4,0,4,0,4,4,4,4,1,1,1,1,1,0,0,4,4,4,4,1,1,662.37,253.93,301.07,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"COTR","BT","any",85,0,84,1,48,69,69,69,0.988235294117647,0.564705882352941,0.811764705882353,0.811764705882353,0.811764705882353,0,0,85,48,85,69,0.564705882352941,0.811764705882353,6878.95,1490.06,2340.71,75,65,31,40,40,TRUE +"fresh","bcfishpass",100,FALSE,"COTR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6878.95,1490.06,2340.71,75,65,31,40,40,TRUE +"fresh","bcfishpass",100,FALSE,"COTR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6878.95,1490.06,2340.71,75,65,31,40,40,TRUE +"fresh","bcfishpass",100,FALSE,"COTR","CH","any",100,0,95,5,70,73,73,73,0.95,0.7,0.73,0.73,0.73,40,0,60,32,100,73,0.533333333333333,0.73,4119.15,694.8,1033.8,68,25,11,12,12,TRUE +"fresh","bcfishpass",100,FALSE,"COTR","CH","spawn",15,0,14,1,13,13,13,13,0.933333333333333,0.866666666666667,0.866666666666667,0.866666666666667,0.866666666666667,15,0,0,0,15,13,,0.866666666666667,4119.15,694.8,1033.8,68,25,11,12,12,TRUE +"fresh","bcfishpass",100,FALSE,"COTR","CH","rear",48,0,45,3,29,31,31,31,0.9375,0.604166666666667,0.645833333333333,0.645833333333333,0.645833333333333,12,0,36,17,48,31,0.472222222222222,0.645833333333333,4119.15,694.8,1033.8,68,25,11,12,12,TRUE +"fresh","bcfishpass",100,FALSE,"CRKD","BT","any",4,0,4,0,4,4,4,4,1,1,1,1,1,0,0,4,4,4,4,1,1,5051.55,695.63,1448.44,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CRKD","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5051.55,695.63,1448.44,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CRKD","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5051.55,695.63,1448.44,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CRKD","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CRKD","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"CRKD","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"DOGC","BT","any",17,0,17,0,13,17,17,17,1,0.764705882352941,1,1,1,0,0,17,13,17,17,0.764705882352941,1,1251.04,288.83,481.5,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"DOGC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1251.04,288.83,481.5,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"DOGC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1251.04,288.83,481.5,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"DOGC","CH","any",5,0,5,0,5,5,5,5,1,1,1,1,1,2,0,3,3,5,5,1,1,358.45,162,180.33,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"DOGC","CH","spawn",2,0,2,0,2,2,2,2,1,1,1,1,1,2,0,0,0,2,2,,1,358.45,162,180.33,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"DOGC","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,358.45,162,180.33,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"ELKR","BT","any",582,0,578,4,526,568,568,568,0.993127147766323,0.903780068728522,0.97594501718213,0.97594501718213,0.97594501718213,0,0,582,526,582,568,0.903780068728522,0.97594501718213,4208.11,1526.83,2107.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"ELKR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4208.11,1526.83,2107.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"ELKR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4208.11,1526.83,2107.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"ELKR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"ELKR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"ELKR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINA","BT","any",107,0,107,0,96,105,105,105,1,0.897196261682243,0.981308411214953,0.981308411214953,0.981308411214953,0,0,107,96,107,105,0.897196261682243,0.981308411214953,6084.04,1277.62,2845.63,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6084.04,1277.62,2845.63,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6084.04,1277.62,2845.63,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINL","BT","any",32,0,32,0,25,29,29,29,1,0.78125,0.90625,0.90625,0.90625,0,0,32,25,32,29,0.78125,0.90625,4480.99,1365.64,2085.7,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4480.99,1365.64,2085.7,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4480.99,1365.64,2085.7,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINL","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FINL","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FIRE","BT","any",172,0,172,0,135,155,155,155,1,0.784883720930233,0.901162790697674,0.901162790697674,0.901162790697674,0,0,172,135,172,155,0.784883720930233,0.901162790697674,6589.52,1012.26,2016.75,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FIRE","BT","spawn",4,0,4,0,2,2,2,2,1,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,6589.52,1012.26,2016.75,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FIRE","BT","rear",66,0,66,0,57,62,62,62,1,0.863636363636364,0.93939393939394,0.93939393939394,0.93939393939394,0,0,66,57,66,62,0.863636363636364,0.93939393939394,6589.52,1012.26,2016.75,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FIRE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FIRE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FIRE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FOXR","BT","any",33,0,33,0,26,31,31,31,1,0.787878787878788,0.93939393939394,0.93939393939394,0.93939393939394,0,0,33,26,33,31,0.787878787878788,0.93939393939394,3587.54,922.1,1511.59,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FOXR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3587.54,922.1,1511.59,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FOXR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3587.54,922.1,1511.59,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FOXR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FOXR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FOXR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"FRAN","BT","any",102,0,100,2,54,71,71,71,0.980392156862745,0.529411764705882,0.696078431372549,0.696078431372549,0.696078431372549,0,0,102,54,102,71,0.529411764705882,0.696078431372549,9265.93,1150.92,2834.02,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRAN","BT","spawn",1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,9265.93,1150.92,2834.02,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRAN","BT","rear",90,0,88,2,44,60,60,60,0.977777777777778,0.488888888888889,0.666666666666667,0.666666666666667,0.666666666666667,0,0,90,44,90,60,0.488888888888889,0.666666666666667,9265.93,1150.92,2834.02,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRAN","CH","any",23,0,23,0,17,17,17,17,1,0.739130434782609,0.739130434782609,0.739130434782609,0.739130434782609,11,0,12,10,23,17,0.833333333333333,0.739130434782609,7176.56,540.43,971.87,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRAN","CH","spawn",4,0,4,0,3,3,3,3,1,0.75,0.75,0.75,0.75,4,0,0,0,4,3,,0.75,7176.56,540.43,971.87,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRAN","CH","rear",4,0,4,0,2,2,2,2,1,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,7176.56,540.43,971.87,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRCN","BT","any",95,0,94,1,54,91,91,91,0.989473684210526,0.568421052631579,0.957894736842105,0.957894736842105,0.957894736842105,0,0,95,54,95,91,0.568421052631579,0.957894736842105,1502.48,691.1,964.06,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRCN","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1502.48,691.1,964.06,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRCN","BT","rear",5,0,5,0,2,5,5,5,1,0.4,1,1,1,0,0,5,2,5,5,0.4,1,1502.48,691.1,964.06,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRCN","CH","any",31,0,30,1,22,27,27,27,0.967741935483871,0.709677419354839,0.870967741935484,0.870967741935484,0.870967741935484,13,0,18,13,31,27,0.722222222222222,0.870967741935484,716.2,428.99,474.71,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRCN","CH","spawn",5,0,5,0,3,3,3,3,1,0.6,0.6,0.6,0.6,5,0,0,0,5,3,,0.6,716.2,428.99,474.71,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"FRCN","CH","rear",13,0,13,0,10,13,13,13,1,0.769230769230769,1,1,1,2,0,11,8,13,13,0.727272727272727,1,716.2,428.99,474.71,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"HARR","BT","any",43,0,38,5,21,35,35,35,0.883720930232558,0.488372093023256,0.813953488372093,0.813953488372093,0.813953488372093,0,0,43,21,43,35,0.488372093023256,0.813953488372093,1561.45,468.9,827.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"HARR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1561.45,468.9,827.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"HARR","BT","rear",7,0,7,0,4,7,7,7,1,0.571428571428571,1,1,1,0,0,7,4,7,7,0.571428571428571,1,1561.45,468.9,827.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"HARR","CH","any",118,0,116,2,109,109,109,109,0.983050847457627,0.923728813559322,0.923728813559322,0.923728813559322,0.923728813559322,8,0,110,102,118,109,0.927272727272727,0.923728813559322,1126.73,327.72,377.22,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"HARR","CH","spawn",4,0,4,0,3,3,3,3,1,0.75,0.75,0.75,0.75,4,0,0,0,4,3,,0.75,1126.73,327.72,377.22,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"HARR","CH","rear",46,0,45,1,44,44,44,44,0.978260869565217,0.956521739130435,0.956521739130435,0.956521739130435,0.956521739130435,0,0,46,44,46,44,0.956521739130435,0.956521739130435,1126.73,327.72,377.22,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"INGR","BT","any",27,0,27,0,23,26,26,26,1,0.851851851851852,0.962962962962963,0.962962962962963,0.962962962962963,0,0,27,23,27,26,0.851851851851852,0.962962962962963,3907.56,1111.41,1783.68,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"INGR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3907.56,1111.41,1783.68,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"INGR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3907.56,1111.41,1783.68,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"INGR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"INGR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"INGR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"KISP","BT","any",195,0,187,8,125,162,162,162,0.958974358974359,0.641025641025641,0.830769230769231,0.830769230769231,0.830769230769231,0,0,195,125,195,162,0.641025641025641,0.830769230769231,4475.39,1261.15,1962.71,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KISP","BT","spawn",5,0,5,0,2,3,3,3,1,0.4,0.6,0.6,0.6,0,0,5,2,5,3,0.4,0.6,4475.39,1261.15,1962.71,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KISP","BT","rear",56,0,51,5,27,37,37,37,0.910714285714286,0.482142857142857,0.660714285714286,0.660714285714286,0.660714285714286,0,0,56,27,56,37,0.482142857142857,0.660714285714286,4475.39,1261.15,1962.71,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KISP","CH","any",89,0,89,0,77,78,78,78,1,0.865168539325843,0.876404494382023,0.876404494382023,0.876404494382023,38,0,51,46,89,78,0.901960784313726,0.876404494382023,2786.73,860.45,1050.59,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KISP","CH","spawn",30,0,30,0,25,25,25,25,1,0.833333333333333,0.833333333333333,0.833333333333333,0.833333333333333,30,0,0,0,30,25,,0.833333333333333,2786.73,860.45,1050.59,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KISP","CH","rear",12,0,12,0,10,10,10,10,1,0.833333333333333,0.833333333333333,0.833333333333333,0.833333333333333,1,0,11,9,12,10,0.818181818181818,0.833333333333333,2786.73,860.45,1050.59,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KLUM","BT","any",314,0,275,39,191,235,235,235,0.875796178343949,0.60828025477707,0.748407643312102,0.748407643312102,0.748407643312102,0,0,314,191,314,235,0.60828025477707,0.748407643312102,1930.45,894.45,1189.16,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KLUM","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1930.45,894.45,1189.16,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KLUM","BT","rear",141,0,121,20,66,92,92,92,0.858156028368794,0.468085106382979,0.652482269503546,0.652482269503546,0.652482269503546,0,0,141,66,141,92,0.468085106382979,0.652482269503546,1930.45,894.45,1189.16,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KLUM","CH","any",104,0,99,5,85,87,87,87,0.951923076923077,0.817307692307692,0.836538461538462,0.836538461538462,0.836538461538462,28,0,76,60,104,87,0.789473684210526,0.836538461538462,1481.08,707.93,830.68,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KLUM","CH","spawn",20,0,19,1,17,18,18,18,0.95,0.85,0.9,0.9,0.9,20,0,0,0,20,18,,0.9,1481.08,707.93,830.68,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KLUM","CH","rear",19,0,19,0,14,15,15,15,1,0.736842105263158,0.789473684210526,0.789473684210526,0.789473684210526,4,0,15,10,19,15,0.666666666666667,0.789473684210526,1481.08,707.93,830.68,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"KOTR","BT","any",184,0,183,1,142,163,163,163,0.994565217391304,0.771739130434783,0.885869565217391,0.885869565217391,0.885869565217391,0,0,184,142,184,163,0.771739130434783,0.885869565217391,2533.85,899.57,1305.15,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"KOTR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2533.85,899.57,1305.15,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"KOTR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2533.85,899.57,1305.15,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"KOTR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"KOTR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"KOTR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LBTN","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,8647.79,2026.94,2189.51,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LBTN","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8647.79,2026.94,2189.51,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LBTN","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8647.79,2026.94,2189.51,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LBTN","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LBTN","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LBTN","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LCHL","BT","any",6,0,6,0,6,6,6,6,1,1,1,1,1,0,0,6,6,6,6,1,1,5236.61,896.14,1550.64,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LCHL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5236.61,896.14,1550.64,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LCHL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5236.61,896.14,1550.64,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LCHL","CH","any",38,0,38,0,32,36,36,36,1,0.842105263157895,0.947368421052632,0.947368421052632,0.947368421052632,14,0,24,22,38,36,0.916666666666667,0.947368421052632,4159.73,464.81,826.81,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LCHL","CH","spawn",2,0,2,0,2,2,2,2,1,1,1,1,1,2,0,0,0,2,2,,1,4159.73,464.81,826.81,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LCHL","CH","rear",23,0,23,0,17,21,21,21,1,0.739130434782609,0.91304347826087,0.91304347826087,0.91304347826087,10,0,13,11,23,21,0.846153846153846,0.91304347826087,4159.73,464.81,826.81,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LFRA","BT","any",78,0,78,0,61,70,70,70,1,0.782051282051282,0.897435897435897,0.897435897435897,0.897435897435897,0,0,78,61,78,70,0.782051282051282,0.897435897435897,3415.8,1284.59,1805.62,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LFRA","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3415.8,1284.59,1805.62,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LFRA","BT","rear",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,3415.8,1284.59,1805.62,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LFRA","CH","any",165,0,159,6,107,135,135,135,0.963636363636364,0.648484848484848,0.818181818181818,0.818181818181818,0.818181818181818,19,0,146,89,165,135,0.60958904109589,0.818181818181818,2754.05,820.43,1176.68,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LFRA","CH","spawn",10,0,10,0,9,10,10,10,1,0.9,1,1,1,10,0,0,0,10,10,,1,2754.05,820.43,1176.68,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LFRA","CH","rear",66,0,63,3,40,55,55,55,0.954545454545455,0.606060606060606,0.833333333333333,0.833333333333333,0.833333333333333,6,0,60,34,66,55,0.566666666666667,0.833333333333333,2754.05,820.43,1176.68,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LKEL","BT","any",63,0,63,0,37,49,49,49,1,0.587301587301587,0.777777777777778,0.777777777777778,0.777777777777778,0,0,63,37,63,49,0.587301587301587,0.777777777777778,401.02,144.74,222.78,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LKEL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,401.02,144.74,222.78,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LKEL","BT","rear",26,0,26,0,12,17,17,17,1,0.461538461538462,0.653846153846154,0.653846153846154,0.653846153846154,0,0,26,12,26,17,0.461538461538462,0.653846153846154,401.02,144.74,222.78,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LKEL","CH","any",14,0,14,0,11,11,11,11,1,0.785714285714286,0.785714285714286,0.785714285714286,0.785714285714286,5,0,9,8,14,11,0.888888888888889,0.785714285714286,328.21,106.49,123.85,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LKEL","CH","spawn",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,3,0,0,0,3,2,,0.666666666666667,328.21,106.49,123.85,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LKEL","CH","rear",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,328.21,106.49,123.85,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LNTH","BT","any",108,0,108,0,88,103,103,103,1,0.814814814814815,0.953703703703704,0.953703703703704,0.953703703703704,0,0,108,88,108,103,0.814814814814815,0.953703703703704,3027.89,781.94,1238.82,208,86,54,71,71,TRUE +"fresh","bcfishpass",100,FALSE,"LNTH","BT","spawn",3,0,3,0,3,3,3,3,1,1,1,1,1,0,0,3,3,3,3,1,1,3027.89,781.94,1238.82,208,86,54,71,71,TRUE +"fresh","bcfishpass",100,FALSE,"LNTH","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3027.89,781.94,1238.82,208,86,54,71,71,TRUE +"fresh","bcfishpass",100,FALSE,"LNTH","CH","any",56,0,54,2,48,48,48,48,0.964285714285714,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,26,0,30,25,56,48,0.833333333333333,0.857142857142857,1137.26,471.29,559.54,242,111,64,74,74,TRUE +"fresh","bcfishpass",100,FALSE,"LNTH","CH","spawn",18,0,18,0,16,16,16,16,1,0.888888888888889,0.888888888888889,0.888888888888889,0.888888888888889,18,0,0,0,18,16,,0.888888888888889,1137.26,471.29,559.54,242,111,64,74,74,TRUE +"fresh","bcfishpass",100,FALSE,"LNTH","CH","rear",23,0,23,0,23,23,23,23,1,1,1,1,1,6,0,17,17,23,23,1,1,1137.26,471.29,559.54,242,111,64,74,74,TRUE +"fresh","bcfishpass",100,FALSE,"LOMI","BT","any",27,0,26,1,20,25,25,25,0.962962962962963,0.740740740740741,0.925925925925926,0.925925925925926,0.925925925925926,0,0,27,20,27,25,0.740740740740741,0.925925925925926,3436.23,967.82,1517.42,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LOMI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3436.23,967.82,1517.42,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LOMI","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3436.23,967.82,1517.42,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LOMI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LOMI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LOMI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"LPCE","BT","any",55,0,53,2,42,40,40,42,0.963636363636364,0.763636363636364,0.727272727272727,0.727272727272727,0.763636363636364,0,0,55,42,55,40,0.763636363636364,0.727272727272727,3130.17,918.71,1261.4,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LPCE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3130.17,918.71,1261.4,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LPCE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3130.17,918.71,1261.4,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LPCE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LPCE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LPCE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSAL","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSAL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSAL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSAL","CH","any",17,0,17,0,17,17,17,17,1,1,1,1,1,6,0,11,11,17,17,1,1,2968.08,312.6,617.6,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSAL","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2968.08,312.6,617.6,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSAL","CH","rear",4,0,4,0,4,4,4,4,1,1,1,1,1,2,0,2,2,4,4,1,1,2968.08,312.6,617.6,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSKE","BT","any",230,0,216,14,171,187,187,187,0.939130434782609,0.743478260869565,0.81304347826087,0.81304347826087,0.81304347826087,0,0,230,171,230,187,0.743478260869565,0.81304347826087,2884.31,1315.64,1751.5,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSKE","BT","spawn",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0,3,2,3,2,0.666666666666667,0.666666666666667,2884.31,1315.64,1751.5,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSKE","BT","rear",111,0,102,9,70,82,82,82,0.918918918918919,0.630630630630631,0.738738738738739,0.738738738738739,0.738738738738739,0,0,111,70,111,82,0.630630630630631,0.738738738738739,2884.31,1315.64,1751.5,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSKE","CH","any",122,0,119,3,103,110,110,110,0.975409836065574,0.844262295081967,0.901639344262295,0.901639344262295,0.901639344262295,41,0,81,68,122,110,0.839506172839506,0.901639344262295,2086.32,1049.22,1167.34,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSKE","CH","spawn",24,0,23,1,21,22,22,22,0.958333333333333,0.875,0.916666666666667,0.916666666666667,0.916666666666667,24,0,0,0,24,22,,0.916666666666667,2086.32,1049.22,1167.34,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"LSKE","CH","rear",35,0,35,0,26,30,30,30,1,0.742857142857143,0.857142857142857,0.857142857142857,0.857142857142857,3,0,32,24,35,30,0.75,0.857142857142857,2086.32,1049.22,1167.34,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MCGR","BT","any",39,0,35,4,33,35,35,35,0.897435897435897,0.846153846153846,0.897435897435897,0.897435897435897,0.897435897435897,0,0,39,33,39,35,0.846153846153846,0.897435897435897,3628.5,1002.82,1460.17,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MCGR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3628.5,1002.82,1460.17,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MCGR","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3628.5,1002.82,1460.17,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MCGR","CH","any",40,0,38,2,34,36,36,36,0.95,0.85,0.9,0.9,0.9,17,0,23,18,40,36,0.782608695652174,0.9,2512.15,704.08,935.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MCGR","CH","spawn",5,0,5,0,4,4,4,4,1,0.8,0.8,0.8,0.8,5,0,0,0,5,4,,0.8,2512.15,704.08,935.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MCGR","CH","rear",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,2,0,1,0,3,2,0,0.666666666666667,2512.15,704.08,935.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MESI","BT","any",64,0,64,0,51,60,60,60,1,0.796875,0.9375,0.9375,0.9375,0,0,64,51,64,60,0.796875,0.9375,2767.09,685.99,1126.99,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MESI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2767.09,685.99,1126.99,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MESI","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2767.09,685.99,1126.99,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MESI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MESI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MESI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MFRA","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MFRA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MFRA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MFRA","CH","any",2,0,1,1,0,0,0,0,0.5,0,0,0,0,0,0,2,0,2,0,0,0,231.06,96.92,104.06,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MFRA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,231.06,96.92,104.06,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MFRA","CH","rear",2,0,1,1,0,0,0,0,0.5,0,0,0,0,0,0,2,0,2,0,0,0,231.06,96.92,104.06,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORK","BT","any",79,0,79,0,70,73,73,73,1,0.886075949367089,0.924050632911392,0.924050632911392,0.924050632911392,0,0,79,70,79,73,0.886075949367089,0.924050632911392,8075.86,2434.23,3397.59,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORK","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8075.86,2434.23,3397.59,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORK","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8075.86,2434.23,3397.59,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORK","CH","any",156,0,155,1,141,144,144,144,0.993589743589744,0.903846153846154,0.923076923076923,0.923076923076923,0.923076923076923,96,0,60,49,156,144,0.816666666666667,0.923076923076923,5705.82,1556.47,2225.04,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORK","CH","spawn",25,0,25,0,22,22,22,22,1,0.88,0.88,0.88,0.88,25,0,0,0,25,22,,0.88,5705.82,1556.47,2225.04,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORK","CH","rear",32,0,31,1,24,25,25,25,0.96875,0.75,0.78125,0.78125,0.78125,15,0,17,9,32,25,0.529411764705882,0.78125,5705.82,1556.47,2225.04,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORR","BT","any",357,0,349,8,159,260,260,260,0.977591036414566,0.445378151260504,0.728291316526611,0.728291316526611,0.728291316526611,0,0,357,159,357,260,0.445378151260504,0.728291316526611,4765.64,952.61,1829.89,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORR","BT","spawn",23,0,23,0,8,15,15,15,1,0.347826086956522,0.652173913043478,0.652173913043478,0.652173913043478,0,0,23,8,23,15,0.347826086956522,0.652173913043478,4765.64,952.61,1829.89,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORR","BT","rear",106,0,102,4,31,64,64,64,0.962264150943396,0.292452830188679,0.60377358490566,0.60377358490566,0.60377358490566,0,0,106,31,106,64,0.292452830188679,0.60377358490566,4765.64,952.61,1829.89,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORR","CH","any",41,0,41,0,31,34,34,34,1,0.75609756097561,0.829268292682927,0.829268292682927,0.829268292682927,25,0,16,9,41,34,0.5625,0.829268292682927,3328.25,644.81,880.69,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORR","CH","spawn",9,0,9,0,7,7,7,7,1,0.777777777777778,0.777777777777778,0.777777777777778,0.777777777777778,9,0,0,0,9,7,,0.777777777777778,3328.25,644.81,880.69,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MORR","CH","rear",2,0,2,0,1,2,2,2,1,0.5,1,1,1,0,0,2,1,2,2,0.5,1,3328.25,644.81,880.69,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"MSKE","BT","any",69,0,62,7,46,52,52,52,0.898550724637681,0.666666666666667,0.753623188405797,0.753623188405797,0.753623188405797,0,0,69,46,69,52,0.666666666666667,0.753623188405797,2667.19,921.62,1383.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MSKE","BT","spawn",4,0,3,1,2,2,2,2,0.75,0.5,0.5,0.5,0.5,0,0,4,2,4,2,0.5,0.5,2667.19,921.62,1383.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MSKE","BT","rear",5,0,3,2,0,0,0,0,0.6,0,0,0,0,0,0,5,0,5,0,0,0,2667.19,921.62,1383.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MSKE","CH","any",42,0,40,2,34,36,36,36,0.952380952380952,0.80952380952381,0.857142857142857,0.857142857142857,0.857142857142857,8,0,34,30,42,36,0.88235294117647,0.857142857142857,1506.83,676.03,779.76,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MSKE","CH","spawn",4,0,3,1,2,2,2,2,0.75,0.5,0.5,0.5,0.5,4,0,0,0,4,2,,0.5,1506.83,676.03,779.76,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"MSKE","CH","rear",2,0,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,2,0,0,0,2,1,,0.5,1506.83,676.03,779.76,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"NARC","BT","any",7,0,7,0,7,7,7,7,1,1,1,1,1,0,0,7,7,7,7,1,1,2994.54,633.18,1162.09,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NARC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2994.54,633.18,1162.09,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NARC","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2994.54,633.18,1162.09,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NARC","CH","any",22,0,22,0,20,21,21,21,1,0.909090909090909,0.954545454545455,0.954545454545455,0.954545454545455,18,0,4,3,22,21,0.75,0.954545454545455,2335,387.57,563.65,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NARC","CH","spawn",9,0,9,0,9,9,9,9,1,1,1,1,1,9,0,0,0,9,9,,1,2335,387.57,563.65,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NARC","CH","rear",6,0,6,0,5,5,5,5,1,0.833333333333333,0.833333333333333,0.833333333333333,0.833333333333333,5,0,1,1,6,5,1,0.833333333333333,2335,387.57,563.65,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NATR","BT","any",57,0,53,4,35,44,44,44,0.929824561403509,0.614035087719298,0.771929824561403,0.771929824561403,0.771929824561403,0,0,57,35,57,44,0.614035087719298,0.771929824561403,8011.09,1516.19,3071.31,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NATR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8011.09,1516.19,3071.31,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NATR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,8011.09,1516.19,3071.31,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NATR","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NATR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NATR","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NECR","BT","any",12,0,12,0,12,12,12,12,1,1,1,1,1,0,0,12,12,12,12,1,1,6156.77,989.82,1875.61,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NECR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6156.77,989.82,1875.61,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NECR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6156.77,989.82,1875.61,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NECR","CH","any",101,0,101,0,93,96,96,96,1,0.920792079207921,0.95049504950495,0.95049504950495,0.95049504950495,33,0,68,60,101,96,0.88235294117647,0.95049504950495,5489.42,515.99,1079.18,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NECR","CH","spawn",9,0,9,0,9,9,9,9,1,1,1,1,1,9,0,0,0,9,9,,1,5489.42,515.99,1079.18,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"NECR","CH","rear",6,0,6,0,4,6,6,6,1,0.666666666666667,1,1,1,1,0,5,3,6,6,0.6,1,5489.42,515.99,1079.18,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"OSPK","BT","any",12,0,12,0,10,12,12,12,1,0.833333333333333,1,1,1,0,0,12,10,12,12,0.833333333333333,1,1881.19,594.62,866.44,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"OSPK","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1881.19,594.62,866.44,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"OSPK","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1881.19,594.62,866.44,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"OSPK","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"OSPK","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"OSPK","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"PARA","BT","any",77,0,77,0,62,70,70,70,1,0.805194805194805,0.909090909090909,0.909090909090909,0.909090909090909,0,0,77,62,77,70,0.805194805194805,0.909090909090909,4256.87,718.23,1769.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4256.87,718.23,1769.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4256.87,718.23,1769.82,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARS","BT","any",281,0,280,1,233,262,262,262,0.99644128113879,0.829181494661922,0.932384341637011,0.932384341637011,0.932384341637011,0,0,281,233,281,262,0.829181494661922,0.932384341637011,6822.47,1683.36,2575.08,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARS","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6822.47,1683.36,2575.08,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARS","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,6822.47,1683.36,2575.08,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARS","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARS","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PARS","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PCEA","BT","any",176,0,176,0,141,163,163,163,1,0.801136363636364,0.926136363636364,0.926136363636364,0.926136363636364,0,0,176,141,176,163,0.801136363636364,0.926136363636364,5002.96,925.72,2023.48,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PCEA","BT","spawn",1,0,1,0,0,1,1,1,1,0,1,1,1,0,0,1,0,1,1,0,1,5002.96,925.72,2023.48,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PCEA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5002.96,925.72,2023.48,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PCEA","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PCEA","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PCEA","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PINE","BT","any",249,0,249,0,227,242,242,242,1,0.911646586345382,0.971887550200803,0.971887550200803,0.971887550200803,0,0,249,227,249,242,0.911646586345382,0.971887550200803,5425.97,1643.51,2376.18,213,191,118,153,153,TRUE +"fresh","bcfishpass",100,FALSE,"PINE","BT","spawn",3,0,3,0,3,3,3,3,1,1,1,1,1,0,0,3,3,3,3,1,1,5425.97,1643.51,2376.18,213,191,118,153,153,TRUE +"fresh","bcfishpass",100,FALSE,"PINE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5425.97,1643.51,2376.18,213,191,118,153,153,TRUE +"fresh","bcfishpass",100,FALSE,"PINE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PINE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"PINE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"SALR","BT","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"SALR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"SALR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"SALR","CH","any",7,0,7,0,6,6,6,6,1,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,5,0,2,1,7,6,0.5,0.857142857142857,3134.03,206.59,442.55,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"SALR","CH","spawn",4,0,4,0,4,4,4,4,1,1,1,1,1,4,0,0,0,4,4,,1,3134.03,206.59,442.55,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"SALR","CH","rear",2,0,2,0,1,1,1,1,1,0.5,0.5,0.5,0.5,0,0,2,1,2,1,0.5,0.5,3134.03,206.59,442.55,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"SETN","BT","any",180,0,175,5,122,155,155,155,0.972222222222222,0.677777777777778,0.861111111111111,0.861111111111111,0.861111111111111,0,0,180,122,180,155,0.677777777777778,0.861111111111111,2844.64,816.05,1339.7,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"SETN","BT","spawn",3,0,2,1,2,2,2,2,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,0,0,3,2,3,2,0.666666666666667,0.666666666666667,2844.64,816.05,1339.7,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"SETN","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,2844.64,816.05,1339.7,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"SETN","CH","any",117,0,116,1,111,112,112,112,0.991452991452991,0.948717948717949,0.957264957264957,0.957264957264957,0.957264957264957,106,0,11,5,117,112,0.454545454545455,0.957264957264957,1497.15,537.97,609.35,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"SETN","CH","spawn",17,0,17,0,16,16,16,16,1,0.941176470588235,0.941176470588235,0.941176470588235,0.941176470588235,16,0,1,0,17,16,0,0.941176470588235,1497.15,537.97,609.35,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"SETN","CH","rear",85,0,85,0,85,85,85,85,1,1,1,1,1,83,0,2,2,85,85,1,1,1497.15,537.97,609.35,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TABR","BT","any",10,0,10,0,4,4,4,4,1,0.4,0.4,0.4,0.4,0,0,10,4,10,4,0.4,0.4,3305.18,677.05,1035.42,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TABR","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3305.18,677.05,1035.42,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TABR","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3305.18,677.05,1035.42,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TABR","CH","any",50,0,48,2,32,33,33,33,0.96,0.64,0.66,0.66,0.66,5,0,45,28,50,33,0.622222222222222,0.66,2566.6,410.27,642.88,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TABR","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2566.6,410.27,642.88,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TABR","CH","rear",25,0,24,1,18,18,18,18,0.96,0.72,0.72,0.72,0.72,3,0,22,15,25,18,0.681818181818182,0.72,2566.6,410.27,642.88,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"THOM","BT","any",4,0,4,0,3,4,4,4,1,0.75,1,1,1,0,0,4,3,4,4,0.75,1,1808.68,338.34,563,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"THOM","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1808.68,338.34,563,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"THOM","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1808.68,338.34,563,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"THOM","CH","any",29,0,29,0,26,26,26,26,1,0.896551724137931,0.896551724137931,0.896551724137931,0.896551724137931,23,0,6,4,29,26,0.666666666666667,0.896551724137931,513.62,203.23,209.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"THOM","CH","spawn",21,0,21,0,20,20,20,20,1,0.952380952380952,0.952380952380952,0.952380952380952,0.952380952380952,21,0,0,0,21,20,,0.952380952380952,513.62,203.23,209.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"THOM","CH","rear",4,0,4,0,4,4,4,4,1,1,1,1,1,3,0,1,1,4,4,1,1,513.62,203.23,209.51,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TOOD","BT","any",36,0,36,0,31,35,35,35,1,0.861111111111111,0.972222222222222,0.972222222222222,0.972222222222222,0,0,36,31,36,35,0.861111111111111,0.972222222222222,4466.1,1118.51,1850.91,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"TOOD","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4466.1,1118.51,1850.91,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"TOOD","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4466.1,1118.51,1850.91,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"TOOD","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"TOOD","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"TOOD","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"TWAC","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,1002.12,226.3,393.93,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TWAC","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1002.12,226.3,393.93,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TWAC","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1002.12,226.3,393.93,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TWAC","CH","any",9,0,9,0,8,9,9,9,1,0.888888888888889,1,1,1,0,0,9,8,9,9,0.888888888888889,1,689.03,144.23,173.02,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TWAC","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,689.03,144.23,173.02,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"TWAC","CH","rear",7,0,7,0,7,7,7,7,1,1,1,1,1,0,0,7,7,7,7,1,1,689.03,144.23,173.02,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UFRA","BT","any",87,0,87,0,47,59,59,59,1,0.540229885057471,0.67816091954023,0.67816091954023,0.67816091954023,0,0,87,47,87,59,0.540229885057471,0.67816091954023,2107.1,952.9,1239.84,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UFRA","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2107.1,952.9,1239.84,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UFRA","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,2107.1,952.9,1239.84,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UFRA","CH","any",51,0,51,0,45,46,46,46,1,0.88235294117647,0.901960784313726,0.901960784313726,0.901960784313726,29,0,22,16,51,46,0.727272727272727,0.901960784313726,1243.66,632.76,726.73,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UFRA","CH","spawn",11,0,11,0,11,11,11,11,1,1,1,1,1,11,0,0,0,11,11,,1,1243.66,632.76,726.73,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UFRA","CH","rear",6,0,6,0,3,3,3,3,1,0.5,0.5,0.5,0.5,2,0,4,1,6,3,0.25,0.5,1243.66,632.76,726.73,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UNRS","BT","any",2,0,2,0,2,2,2,2,1,1,1,1,1,0,0,2,2,2,2,1,1,7431.77,644.82,1864.53,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UNRS","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7431.77,644.82,1864.53,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UNRS","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,7431.77,644.82,1864.53,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UNRS","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UNRS","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UNRS","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UNTH","BT","any",147,0,140,7,89,123,123,123,0.952380952380952,0.605442176870748,0.836734693877551,0.836734693877551,0.836734693877551,0,0,147,89,147,123,0.605442176870748,0.836734693877551,1077.2,544.45,719.29,152,119,68,84,84,TRUE +"fresh","bcfishpass",100,FALSE,"UNTH","BT","spawn",2,0,1,1,1,1,1,1,0.5,0.5,0.5,0.5,0.5,0,0,2,1,2,1,0.5,0.5,1077.2,544.45,719.29,152,119,68,84,84,TRUE +"fresh","bcfishpass",100,FALSE,"UNTH","BT","rear",2,0,2,0,1,1,1,1,1,0.5,0.5,0.5,0.5,0,0,2,1,2,1,0.5,0.5,1077.2,544.45,719.29,152,119,68,84,84,TRUE +"fresh","bcfishpass",100,FALSE,"UNTH","CH","any",44,0,41,3,32,34,34,34,0.931818181818182,0.727272727272727,0.772727272727273,0.772727272727273,0.772727272727273,21,0,23,13,44,34,0.565217391304348,0.772727272727273,760.6,429.83,470.93,171,113,74,81,81,TRUE +"fresh","bcfishpass",100,FALSE,"UNTH","CH","spawn",14,0,14,0,12,12,12,12,1,0.857142857142857,0.857142857142857,0.857142857142857,0.857142857142857,14,0,0,0,14,12,,0.857142857142857,760.6,429.83,470.93,171,113,74,81,81,TRUE +"fresh","bcfishpass",100,FALSE,"UNTH","CH","rear",21,0,21,0,17,17,17,17,1,0.80952380952381,0.80952380952381,0.80952380952381,0.80952380952381,6,0,15,11,21,17,0.733333333333333,0.80952380952381,760.6,429.83,470.93,171,113,74,81,81,TRUE +"fresh","bcfishpass",100,FALSE,"UOMI","BT","any",82,0,82,0,46,54,54,54,1,0.560975609756098,0.658536585365854,0.658536585365854,0.658536585365854,0,0,82,46,82,54,0.560975609756098,0.658536585365854,3703.16,907.88,1459.1,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UOMI","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3703.16,907.88,1459.1,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UOMI","BT","rear",22,0,22,0,8,10,10,10,1,0.363636363636364,0.454545454545455,0.454545454545455,0.454545454545455,0,0,22,8,22,10,0.363636363636364,0.454545454545455,3703.16,907.88,1459.1,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UOMI","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UOMI","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UOMI","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UPCE","BT","any",153,0,152,1,138,139,139,139,0.993464052287582,0.901960784313726,0.908496732026144,0.908496732026144,0.908496732026144,0,0,153,138,153,139,0.901960784313726,0.908496732026144,5261.16,1657.29,2320.94,570,556,442,485,485,TRUE +"fresh","bcfishpass",100,FALSE,"UPCE","BT","spawn",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,5261.16,1657.29,2320.94,570,556,442,485,485,TRUE +"fresh","bcfishpass",100,FALSE,"UPCE","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,5261.16,1657.29,2320.94,570,556,442,485,485,TRUE +"fresh","bcfishpass",100,FALSE,"UPCE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UPCE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UPCE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"USKE","BT","any",32,0,32,0,30,31,31,31,1,0.9375,0.96875,0.96875,0.96875,0,0,32,30,32,31,0.9375,0.96875,3451.92,878.03,1438.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"USKE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,3451.92,878.03,1438.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"USKE","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,3451.92,878.03,1438.52,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"USKE","CH","any",8,0,8,0,8,8,8,8,1,1,1,1,1,0,0,8,8,8,8,1,1,1518.35,498.83,593.41,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"USKE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1518.35,498.83,593.41,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"USKE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1518.35,498.83,593.41,,,,,,FALSE +"fresh","bcfishpass",100,FALSE,"UTRE","BT","any",6,0,6,0,4,6,6,6,1,0.666666666666667,1,1,1,0,0,6,4,6,6,0.666666666666667,1,1851.52,204.25,585.34,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UTRE","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,1851.52,204.25,585.34,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UTRE","BT","rear",1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1851.52,204.25,585.34,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UTRE","CH","any",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UTRE","CH","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"UTRE","CH","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,,,,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"WILL","BT","any",54,0,54,0,41,50,50,50,1,0.759259259259259,0.925925925925926,0.925925925925926,0.925925925925926,0,0,54,41,54,50,0.759259259259259,0.925925925925926,4515.45,1052.18,1690.35,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"WILL","BT","spawn",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4515.45,1052.18,1690.35,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"WILL","BT","rear",0,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,,,4515.45,1052.18,1690.35,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"WILL","CH","any",58,0,58,0,54,55,55,55,1,0.931034482758621,0.948275862068966,0.948275862068966,0.948275862068966,40,0,18,15,58,55,0.833333333333333,0.948275862068966,3537.67,630.48,1029.73,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"WILL","CH","spawn",3,0,3,0,2,2,2,2,1,0.666666666666667,0.666666666666667,0.666666666666667,0.666666666666667,3,0,0,0,3,2,,0.666666666666667,3537.67,630.48,1029.73,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"WILL","CH","rear",42,0,42,0,40,41,41,41,1,0.952380952380952,0.976190476190476,0.976190476190476,0.976190476190476,30,0,12,10,42,41,0.833333333333333,0.976190476190476,3537.67,630.48,1029.73,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"ZYMO","BT","any",280,0,244,36,128,188,188,188,0.871428571428571,0.457142857142857,0.671428571428571,0.671428571428571,0.671428571428571,0,0,280,128,280,188,0.457142857142857,0.671428571428571,1840.06,575.42,863.2,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"ZYMO","BT","spawn",14,0,12,2,7,9,9,9,0.857142857142857,0.5,0.642857142857143,0.642857142857143,0.642857142857143,0,0,14,7,14,9,0.5,0.642857142857143,1840.06,575.42,863.2,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"ZYMO","BT","rear",147,0,123,24,49,79,79,79,0.836734693877551,0.333333333333333,0.537414965986395,0.537414965986395,0.537414965986395,0,0,147,49,147,79,0.333333333333333,0.537414965986395,1840.06,575.42,863.2,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"ZYMO","CH","any",21,0,19,2,14,16,16,16,0.904761904761905,0.666666666666667,0.761904761904762,0.761904761904762,0.761904761904762,8,0,13,7,21,16,0.538461538461538,0.761904761904762,1200.73,462.91,539.94,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"ZYMO","CH","spawn",8,0,7,1,7,7,7,7,0.875,0.875,0.875,0.875,0.875,8,0,0,0,8,7,,0.875,1200.73,462.91,539.94,,,,,,TRUE +"fresh","bcfishpass",100,FALSE,"ZYMO","CH","rear",5,0,4,1,0,1,1,1,0.8,0,0.2,0.2,0.2,0,0,5,0,5,1,0,0.2,1200.73,462.91,539.94,,,,,,TRUE diff --git a/data-raw/logs/habitat_validate_283/totals.csv b/data-raw/logs/habitat_validate_283/totals.csv new file mode 100644 index 00000000..cc8f42f6 --- /dev/null +++ b/data-raw/logs/habitat_validate_283/totals.csv @@ -0,0 +1,25 @@ +"schema","config_name","buffer_m","species_code","stage","n_obs","n_unattached","n_accessible","n_inaccessible","n_spawning","n_rearing","n_rearing_any","n_habitat","n_in_uhc_spawn","n_in_uhc_rear","n_obs_outside_uhc_spawn","n_spawning_outside_uhc","n_obs_outside_uhc_rear","n_rearing_any_outside_uhc","n_absence","n_absence_accessible","n_absence_spawning","n_absence_rearing","n_absence_rearing_any","accessible_km","spawning_km","rearing_km","n_wsg","n_wsg_logged","share_accessible","share_spawning","share_rearing","share_rearing_any","share_habitat","share_spawning_outside_uhc","share_rearing_any_outside_uhc" +"fresh","bcfishpass",0,"BT","any",5708,0,5526,182,3847,4784,4784,4786,0,0,5708,3847,5708,4784,1218,1017,704,831,831,219264.85,52856.04,86470.4,59,39,0.968114926419061,0.673966362999299,0.83812193412754,0.83812193412754,0.838472319551507,0.673966362999299,0.83812193412754 +"fresh","bcfishpass",0,"BT","rear",1052,0,963,89,442,670,670,670,0,0,1052,442,1052,670,1218,1017,704,831,831,219264.85,52856.04,86470.4,59,39,0.915399239543726,0.420152091254753,0.636882129277566,0.636882129277566,0.636882129277566,0.420152091254753,0.636882129277566 +"fresh","bcfishpass",0,"BT","spawn",86,0,80,6,41,61,61,61,0,0,86,41,86,61,1218,1017,704,831,831,219264.85,52856.04,86470.4,59,39,0.930232558139535,0.476744186046512,0.709302325581395,0.709302325581395,0.709302325581395,0.476744186046512,0.709302325581395 +"fresh","bcfishpass",0,"CH","any",1999,0,1950,49,1637,1722,1722,1722,750,0,1249,951,1999,1722,481,249,147,165,165,78257.18,18104.08,24659.63,59,39,0.975487743871936,0.818909454727364,0.861430715357679,0.861430715357679,0.861430715357679,0.761409127301842,0.861430715357679 +"fresh","bcfishpass",0,"CH","rear",615,0,600,15,479,519,519,519,213,0,402,272,615,519,481,249,147,165,165,78257.18,18104.08,24659.63,59,39,0.975609756097561,0.778861788617886,0.84390243902439,0.84390243902439,0.84390243902439,0.676616915422886,0.84390243902439 +"fresh","bcfishpass",0,"CH","spawn",322,0,315,7,274,279,279,279,314,0,8,4,322,279,481,249,147,165,165,78257.18,18104.08,24659.63,59,39,0.978260869565217,0.850931677018634,0.866459627329193,0.866459627329193,0.866459627329193,0.5,0.866459627329193 +"fresh","bcfishpass",100,"BT","any",5708,0,5526,182,3996,4825,4825,4827,0,0,5708,3996,5708,4825,1218,1017,713,833,833,219264.85,52856.04,86470.4,59,39,0.968114926419061,0.700070077084793,0.845304835318851,0.845304835318851,0.845655220742817,0.700070077084793,0.845304835318851 +"fresh","bcfishpass",100,"BT","rear",1052,0,963,89,469,679,679,679,0,0,1052,469,1052,679,1218,1017,713,833,833,219264.85,52856.04,86470.4,59,39,0.915399239543726,0.445817490494297,0.645437262357414,0.645437262357414,0.645437262357414,0.445817490494297,0.645437262357414 +"fresh","bcfishpass",100,"BT","spawn",86,0,80,6,43,61,61,61,0,0,86,43,86,61,1218,1017,713,833,833,219264.85,52856.04,86470.4,59,39,0.930232558139535,0.5,0.709302325581395,0.709302325581395,0.709302325581395,0.5,0.709302325581395 +"fresh","bcfishpass",100,"CH","any",1999,0,1950,49,1672,1753,1753,1753,775,0,1224,958,1999,1753,481,249,149,167,167,78257.18,18104.08,24659.63,59,39,0.975487743871936,0.836418209104552,0.876938469234617,0.876938469234617,0.876938469234617,0.782679738562091,0.876938469234617 +"fresh","bcfishpass",100,"CH","rear",615,0,600,15,487,528,528,528,222,0,393,273,615,528,481,249,149,167,167,78257.18,18104.08,24659.63,59,39,0.975609756097561,0.791869918699187,0.858536585365854,0.858536585365854,0.858536585365854,0.694656488549618,0.858536585365854 +"fresh","bcfishpass",100,"CH","spawn",322,0,315,7,281,285,285,285,314,0,8,5,322,285,481,249,149,167,167,78257.18,18104.08,24659.63,59,39,0.978260869565217,0.872670807453416,0.885093167701863,0.885093167701863,0.885093167701863,0.625,0.885093167701863 +"fresh_default","default",0,"BT","any",5104,0,5061,43,3287,4107,4207,4207,0,0,5104,3287,5104,4207,858,814,587,635,686,219134.6,49453.94,78825.1,55,4,0.991575235109718,0.644004702194357,0.804663009404389,0.824255485893417,0.824255485893417,0.644004702194357,0.824255485893417 +"fresh_default","default",0,"BT","rear",1053,0,1040,13,467,694,700,700,0,0,1053,467,1053,700,858,814,587,635,686,219134.6,49453.94,78825.1,55,4,0.987654320987654,0.44349477682811,0.659069325735992,0.664767331433998,0.664767331433998,0.44349477682811,0.664767331433998 +"fresh_default","default",0,"BT","spawn",82,0,81,1,38,58,60,60,0,0,82,38,82,60,858,814,587,635,686,219134.6,49453.94,78825.1,55,4,0.98780487804878,0.463414634146341,0.707317073170732,0.731707317073171,0.731707317073171,0.463414634146341,0.731707317073171 +"fresh_default","default",0,"CH","any",1745,0,1712,33,1487,1528,1549,1577,636,0,1109,852,1745,1549,68,25,11,13,15,74890.81,16236.35,27953.21,55,4,0.9810888252149,0.85214899713467,0.875644699140401,0.887679083094556,0.903724928366762,0.768259693417493,0.887679083094556 +"fresh_default","default",0,"CH","rear",512,0,502,10,397,434,434,439,176,0,336,221,512,434,68,25,11,13,15,74890.81,16236.35,27953.21,55,4,0.98046875,0.775390625,0.84765625,0.84765625,0.857421875,0.657738095238095,0.84765625 +"fresh_default","default",0,"CH","spawn",250,0,244,6,246,220,229,247,242,0,8,4,250,229,68,25,11,13,15,74890.81,16236.35,27953.21,55,4,0.976,0.984,0.88,0.916,0.988,0.5,0.916 +"fresh_default","default",100,"BT","any",5104,0,5061,43,3427,4191,4264,4264,0,0,5104,3427,5104,4264,858,814,591,637,687,219134.6,49453.94,78825.1,55,4,0.991575235109718,0.671434169278997,0.821120689655172,0.835423197492163,0.835423197492163,0.671434169278997,0.835423197492163 +"fresh_default","default",100,"BT","rear",1053,0,1040,13,496,711,715,715,0,0,1053,496,1053,715,858,814,591,637,687,219134.6,49453.94,78825.1,55,4,0.987654320987654,0.471035137701804,0.675213675213675,0.679012345679012,0.679012345679012,0.471035137701804,0.679012345679012 +"fresh_default","default",100,"BT","spawn",82,0,81,1,40,59,61,61,0,0,82,40,82,61,858,814,591,637,687,219134.6,49453.94,78825.1,55,4,0.98780487804878,0.48780487804878,0.719512195121951,0.74390243902439,0.74390243902439,0.48780487804878,0.74390243902439 +"fresh_default","default",100,"CH","any",1745,0,1712,33,1513,1551,1571,1596,654,0,1091,862,1745,1571,68,25,11,13,15,74890.81,16236.35,27953.21,55,4,0.9810888252149,0.867048710601719,0.888825214899713,0.900286532951289,0.914613180515759,0.790100824931256,0.900286532951289 +"fresh_default","default",100,"CH","rear",512,0,502,10,407,441,441,445,182,0,330,225,512,441,68,25,11,13,15,74890.81,16236.35,27953.21,55,4,0.98046875,0.794921875,0.861328125,0.861328125,0.869140625,0.681818181818182,0.861328125 +"fresh_default","default",100,"CH","spawn",250,0,244,6,247,223,232,248,242,0,8,5,250,232,68,25,11,13,15,74890.81,16236.35,27953.21,55,4,0.976,0.988,0.892,0.928,0.992,0.625,0.928 diff --git a/data-raw/logs/habitat_validate_283/totals_shared.csv b/data-raw/logs/habitat_validate_283/totals_shared.csv new file mode 100644 index 00000000..7cf617e4 --- /dev/null +++ b/data-raw/logs/habitat_validate_283/totals_shared.csv @@ -0,0 +1,25 @@ +"schema","config_name","buffer_m","species_code","stage","n_obs","n_unattached","n_accessible","n_inaccessible","n_spawning","n_rearing","n_rearing_any","n_habitat","n_in_uhc_spawn","n_in_uhc_rear","n_obs_outside_uhc_spawn","n_spawning_outside_uhc","n_obs_outside_uhc_rear","n_rearing_any_outside_uhc","n_absence","n_absence_accessible","n_absence_spawning","n_absence_rearing","n_absence_rearing_any","accessible_km","spawning_km","rearing_km","n_wsg","n_wsg_logged","share_accessible","share_spawning","share_rearing","share_rearing_any","share_habitat","share_spawning_outside_uhc","share_rearing_any_outside_uhc" +"fresh","bcfishpass",0,"BT","any",4600,0,4438,162,2966,3759,3759,3761,0,0,4600,2966,4600,3759,858,812,587,678,678,197434.02,46511.57,76872.29,51,33,0.964782608695652,0.644782608695652,0.817173913043478,0.817173913043478,0.817608695652174,0.644782608695652,0.817173913043478 +"fresh","bcfishpass",0,"BT","rear",1047,0,958,89,438,666,666,666,0,0,1047,438,1047,666,858,812,587,678,678,197434.02,46511.57,76872.29,51,33,0.914995224450812,0.418338108882521,0.636103151862464,0.636103151862464,0.636103151862464,0.418338108882521,0.636103151862464 +"fresh","bcfishpass",0,"BT","spawn",81,0,76,5,37,57,57,57,0,0,81,37,81,57,858,812,587,678,678,197434.02,46511.57,76872.29,51,33,0.938271604938272,0.45679012345679,0.703703703703704,0.703703703703704,0.703703703703704,0.45679012345679,0.703703703703704 +"fresh","bcfishpass",0,"CH","any",1734,0,1697,37,1423,1501,1501,1501,629,0,1105,848,1734,1501,68,25,11,12,12,70816.66,15640.34,21570.26,51,33,0.978662053056517,0.820645905420992,0.86562860438293,0.86562860438293,0.86562860438293,0.767420814479638,0.86562860438293 +"fresh","bcfishpass",0,"CH","rear",510,0,498,12,390,429,429,429,175,0,335,220,510,429,68,25,11,12,12,70816.66,15640.34,21570.26,51,33,0.976470588235294,0.764705882352941,0.841176470588235,0.841176470588235,0.841176470588235,0.656716417910448,0.841176470588235 +"fresh","bcfishpass",0,"CH","spawn",245,0,239,6,207,212,212,212,237,0,8,4,245,212,68,25,11,12,12,70816.66,15640.34,21570.26,51,33,0.975510204081633,0.844897959183673,0.86530612244898,0.86530612244898,0.86530612244898,0.5,0.86530612244898 +"fresh","bcfishpass",100,"BT","any",4600,0,4438,162,3084,3792,3792,3794,0,0,4600,3084,4600,3792,858,812,591,678,678,197434.02,46511.57,76872.29,51,33,0.964782608695652,0.670434782608696,0.824347826086957,0.824347826086957,0.824782608695652,0.670434782608696,0.824347826086957 +"fresh","bcfishpass",100,"BT","rear",1047,0,958,89,465,675,675,675,0,0,1047,465,1047,675,858,812,591,678,678,197434.02,46511.57,76872.29,51,33,0.914995224450812,0.444126074498567,0.644699140401146,0.644699140401146,0.644699140401146,0.444126074498567,0.644699140401146 +"fresh","bcfishpass",100,"BT","spawn",81,0,76,5,39,57,57,57,0,0,81,39,81,57,858,812,591,678,678,197434.02,46511.57,76872.29,51,33,0.938271604938272,0.481481481481481,0.703703703703704,0.703703703703704,0.703703703703704,0.481481481481481,0.703703703703704 +"fresh","bcfishpass",100,"CH","any",1734,0,1697,37,1453,1526,1526,1526,647,0,1087,857,1734,1526,68,25,11,12,12,70816.66,15640.34,21570.26,51,33,0.978662053056517,0.837946943483276,0.880046136101499,0.880046136101499,0.880046136101499,0.788408463661454,0.880046136101499 +"fresh","bcfishpass",100,"CH","rear",510,0,498,12,398,436,436,436,181,0,329,224,510,436,68,25,11,12,12,70816.66,15640.34,21570.26,51,33,0.976470588235294,0.780392156862745,0.854901960784314,0.854901960784314,0.854901960784314,0.680851063829787,0.854901960784314 +"fresh","bcfishpass",100,"CH","spawn",245,0,239,6,213,216,216,216,237,0,8,5,245,216,68,25,11,12,12,70816.66,15640.34,21570.26,51,33,0.975510204081633,0.869387755102041,0.881632653061225,0.881632653061225,0.881632653061225,0.625,0.881632653061225 +"fresh_default","default",0,"BT","any",4600,0,4564,36,3009,3729,3809,3809,0,0,4600,3009,4600,3809,858,814,587,635,686,210822,47098.83,75280.2,51,1,0.992173913043478,0.654130434782609,0.810652173913043,0.82804347826087,0.82804347826087,0.654130434782609,0.82804347826087 +"fresh_default","default",0,"BT","rear",1047,0,1034,13,464,690,696,696,0,0,1047,464,1047,696,858,814,587,635,686,210822,47098.83,75280.2,51,1,0.987583572110793,0.443170964660936,0.659025787965616,0.664756446991404,0.664756446991404,0.443170964660936,0.664756446991404 +"fresh_default","default",0,"BT","spawn",81,0,80,1,37,57,59,59,0,0,81,37,81,59,858,814,587,635,686,210822,47098.83,75280.2,51,1,0.987654320987654,0.45679012345679,0.703703703703704,0.728395061728395,0.728395061728395,0.45679012345679,0.728395061728395 +"fresh_default","default",0,"CH","any",1734,0,1701,33,1478,1520,1539,1567,629,0,1105,850,1734,1539,68,25,11,13,15,74048.75,15958.82,27601.52,51,1,0.980968858131488,0.852364475201845,0.876585928489043,0.887543252595156,0.903690888119954,0.769230769230769,0.887543252595156 +"fresh_default","default",0,"CH","rear",510,0,500,10,395,432,432,437,175,0,335,220,510,432,68,25,11,13,15,74048.75,15958.82,27601.52,51,1,0.980392156862745,0.774509803921569,0.847058823529412,0.847058823529412,0.856862745098039,0.656716417910448,0.847058823529412 +"fresh_default","default",0,"CH","spawn",245,0,239,6,241,216,224,242,237,0,8,4,245,224,68,25,11,13,15,74048.75,15958.82,27601.52,51,1,0.975510204081633,0.983673469387755,0.881632653061225,0.914285714285714,0.987755102040816,0.5,0.914285714285714 +"fresh_default","default",100,"BT","any",4600,0,4564,36,3129,3798,3855,3855,0,0,4600,3129,4600,3855,858,814,591,637,687,210822,47098.83,75280.2,51,1,0.992173913043478,0.680217391304348,0.825652173913043,0.83804347826087,0.83804347826087,0.680217391304348,0.83804347826087 +"fresh_default","default",100,"BT","rear",1047,0,1034,13,493,707,711,711,0,0,1047,493,1047,711,858,814,591,637,687,210822,47098.83,75280.2,51,1,0.987583572110793,0.470869149952244,0.675262655205349,0.679083094555874,0.679083094555874,0.470869149952244,0.679083094555874 +"fresh_default","default",100,"BT","spawn",81,0,80,1,39,58,60,60,0,0,81,39,81,60,858,814,591,637,687,210822,47098.83,75280.2,51,1,0.987654320987654,0.481481481481481,0.716049382716049,0.740740740740741,0.740740740740741,0.481481481481481,0.740740740740741 +"fresh_default","default",100,"CH","any",1734,0,1701,33,1503,1542,1561,1586,647,0,1087,859,1734,1561,68,25,11,13,15,74048.75,15958.82,27601.52,51,1,0.980968858131488,0.866782006920415,0.889273356401384,0.900230680507497,0.914648212226067,0.790248390064397,0.900230680507497 +"fresh_default","default",100,"CH","rear",510,0,500,10,405,439,439,443,181,0,329,224,510,439,68,25,11,13,15,74048.75,15958.82,27601.52,51,1,0.980392156862745,0.794117647058823,0.86078431372549,0.86078431372549,0.868627450980392,0.680851063829787,0.86078431372549 +"fresh_default","default",100,"CH","spawn",245,0,239,6,242,219,227,243,237,0,8,5,245,227,68,25,11,13,15,74048.75,15958.82,27601.52,51,1,0.975510204081633,0.987755102040816,0.893877551020408,0.926530612244898,0.991836734693878,0.625,0.926530612244898 diff --git a/planning/active/progress.md b/planning/active/progress.md index b8e3fa9e..b95268d6 100644 --- a/planning/active/progress.md +++ b/planning/active/progress.md @@ -24,3 +24,7 @@ --wsgs selected zero WSGs. - Reconciliation (AC1): `fresh_default` retains BT+DV 5,104 and CH 1,745 locations, exactly #284's pooled counts. +- Outside-UHC capture added after the baseline showed 237/245 spawn-staged CH in UHC + reaches (9a4c191); R5 found the UHC test read the point while buffered capture read a + window — fixed (0c19e0a). +- Final baseline at 0c19e0a → data-raw/logs/habitat_validate_283/; research/habitat_validation.md diff --git a/planning/active/task_plan.md b/planning/active/task_plan.md index 12890eba..69878560 100644 --- a/planning/active/task_plan.md +++ b/planning/active/task_plan.md @@ -97,19 +97,19 @@ bundle × species × WSG table, so two bundles can be diffed. - [x] `devtools::document()`, tests green, `lintr::lint_package()` clean ### Phase 4: Driver + baseline run -- [ ] `data-raw/habitat_validate.R` (`--schemas=`, `--wsgs=`, `--species=`, +- [x] `data-raw/habitat_validate.R` (`--schemas=`, `--wsgs=`, `--species=`, `--buffers=0,100`, optional `LNK_KNOWLEDGE_DIR` for FISS absences via `lnk_points_snap()`), writes `data-raw/logs/habitat_validate_283/`: `summary.csv`, `misses_binned.csv` (gradient / width / edge-type bins, aggregates only), `diff.csv` (bundle A vs B per species × WSG × stage), `stamp.txt` -- [ ] Run read-only: `fresh_default` vs `fresh` on their 51 shared WSGs, CH + BT -- [ ] Sanity: summary obs counts reconcile with #284's ledger for `fresh_default` +- [x] Run read-only: `fresh_default` vs `fresh` on their 51 shared WSGs, CH + BT +- [x] Sanity: summary obs counts reconcile with #284's ledger for `fresh_default` ### Phase 5: Record -- [ ] `research/habitat_validation.md` (method, biases incl. circularity, baseline +- [x] `research/habitat_validation.md` (method, biases incl. circularity, baseline numbers); index in `research/README.md`; point `research/habitat_thresholds.md` step 5 at it -- [ ] CLAUDE.md status above the marker; NEWS entry +- [x] CLAUDE.md status above the marker; NEWS entry deferred to `/gh-pr-merge` (release bookkeeping) ## Out of scope Running `default_tuned` / candidate thresholds — that is #284 step 5 and needs its own @@ -117,8 +117,8 @@ run decisions (config, schema, closure, `dams`, `mapping_code`) stated at launch ## Validation - [ ] Tests pass (incl. DB fixture test), `devtools::check()` / lintr clean -- [ ] `/code-check` clean on each commit -- [ ] PWF checkboxes match landed work +- [x] `/code-check`: 5 rounds (review-round1..5.md); loop ended by enumeration (R3/R4, 59 rows), R5's finding fixed and pinned by a test +- [x] PWF checkboxes match landed work - [ ] `/planning-archive` on completion ## Verification diff --git a/research/README.md b/research/README.md index 1e49931d..ae38c544 100644 --- a/research/README.md +++ b/research/README.md @@ -29,6 +29,7 @@ renamed. | File | Covers | |---|---| | [`habitat_thresholds.md`](habitat_thresholds.md) | CH and BT gradient and channel-width thresholds: observation evidence, literature, and the `default_tuned` candidates | +| [`habitat_validation.md`](habitat_validation.md) | Scoring a run against fish observations (`lnk_habitat_validate()`): capture, cost, miss reasons, absences; `default` vs `bcfishpass` baseline | ## Runs, scope and infrastructure diff --git a/research/habitat_thresholds.md b/research/habitat_thresholds.md index 6df7d35f..1ad32d68 100644 --- a/research/habitat_thresholds.md +++ b/research/habitat_thresholds.md @@ -1,6 +1,6 @@ # Habitat thresholds — CH and BT gradient and channel width -**Verified:** 2026-09-26 · **Issues:** #284 (this), #283 (scoring, pending), #282 (`default_tuned`) · **Produced by:** `data-raw/query_habitat_thresholds_obs.R`, `data-raw/query_habitat_thresholds_fiss.R` → `data-raw/logs/habitat_thresholds_284/`; literature review archived with #284's PWF (`literature.md`) · **Status:** candidates set in `default_tuned`, **unscored** +**Verified:** 2026-09-26 · **Issues:** #284 (this), #283 (the validator, [`habitat_validation.md`](habitat_validation.md)), #282 (`default_tuned`) · **Produced by:** `data-raw/query_habitat_thresholds_obs.R`, `data-raw/query_habitat_thresholds_fiss.R` → `data-raw/logs/habitat_thresholds_284/`; literature review archived with #284's PWF (`literature.md`) · **Status:** candidates set in `default_tuned`, **unscored** ## Verdict @@ -257,6 +257,17 @@ committed here. ## Step 5 — scoring (#283) +The validator exists: `lnk_habitat_validate()` and `data-raw/habitat_validate.R` +([`habitat_validation.md`](habitat_validation.md) has the method, the baseline, and the +command). Two findings from it change how this step is read: + +- **CH spawning cannot be scored on spawn-staged observations.** 237 of 245 sit in + `user_habitat_classification` spawning reaches, which `default` forces to habitat. + Use the any-stage capture and `share_spawning_outside_uhc`. +- **BT rearing 0.1349 scores in-sample,** because it is the P95 of the same BT+DV + locations. Hold records out (by project, date or WSG) through the function's + `observations` argument. + Run `default` and `default_tuned` on pilot WSGs with both species present and observations to score against. The run decisions have to be stated before launch: diff --git a/research/habitat_validation.md b/research/habitat_validation.md new file mode 100644 index 00000000..563d3520 --- /dev/null +++ b/research/habitat_validation.md @@ -0,0 +1,130 @@ +# Habitat validation against fish observations + +**Verified:** 2026-09-26 · **Issues:** #283 (this), #284 (step 5 scores with it), #203 (full-key joins), fresh#218 · **Produced by:** `lnk_habitat_validate()` via `data-raw/habitat_validate.R` → `data-raw/logs/habitat_validate_283/` (link @ `0c19e0a`) · **Status:** baseline only; `default_tuned` not yet scored + +## What it measures + +For a persisted run (one bundle's schema), per WSG × species × stage (`any`, `spawn`, +`rear`): + +- **Capture:** the share of observation locations on segments the run models as + accessible, spawning, stream rearing, or any rearing (stream, lake or wetland). +- **Cost:** `accessible_km`, `spawning_km` and `rearing_km` from `lnk_rollup_wsg()`, so + capture cannot be raised by calling more of the network habitat. +- **Misses:** why each missed location's segment is not habitat. The bundle's own + predicates (`fresh::frs_habitat_predicates()` over its `rules.yaml` and thresholds) are + re-evaluated with the gradient, then the width, relaxed to the stage minimum. + `fails_gradient` means the gradient maximum is what binds. +- **Absences:** FISS sites sampled without the species, as a false-positive check. + +The driver scores two bundles and diffs them on the WSGs both hold. It first asserts +that both retained the same observations. + +## Method + +- **Observations:** `bcfishobs.observations` with `observation_exclusions` + (`data_error | release_exclude`) and every `Releases Database` record removed. Species + must be present in the WSG per `wsg_species_presence`. DV records count as BT where BT + is present (the #284 pooling). Match types are A/B only (stream, within 100 m). One + location per species × `blue_line_key` × metre, which is staged if any record there is. +- **The segment:** the one *starting* within 1 m of the point, because the pipeline + breaks at observations; otherwise the containing one. Every join is on the full + `(id_segment, watershed_group_code)` key. +- **Accessible:** `streams_access.access_ IN (1, 2)`, the definition `accessible_km` + uses. The habitat flags are gated by `streams_habitat.accessible`, which differs + slightly, so spawning capture is not strictly a subset of accessible capture. #284 + used the latter. +- **Buffer:** `buffer_m` credits habitat that starts within that distance *upstream* on + the same stream, because points often mark the downstream end of a site. The UHC flags + test the same window. The driver reports 0 and 100 m. +- **Absences:** from the private `knowledge` repo's FISS snapshots (COTR, LNTH, PINE, UNTH + and UPCE), snapped within 100 m and kept only inside those WSGs. A site is an absence + of a species when it caught no fish, or when it listed species and none of them could + be that species. A site that caught fish but listed none is left out: that is most + empty lists, and counting them was 63 % of BT absences in the first draft. A WSG × + species with no absence rows reports `NA`, not 0. + +## Reading it: what the score is not + +1. **Accessible capture is partly circular.** Observations lift barriers + (`observation_threshold` BT 1, CH 5) and are break points. It reads 96–99 % and says + little. +2. **CH spawning capture is almost entirely the overlay.** With + `apply_habitat_overlay` on, `default` forces `user_habitat_classification` reaches to + habitat. **237 of the 245** spawn-staged CH locations in the shared WSGs sit in a + confirmed spawning reach. Outside those reaches there are **8** locations, and 4 are + captured under either bundle. Spawn-staged CH capture cannot score a CH spawning + threshold. The `*_outside_uhc` shares are the part the observations did not decide. +3. **Thresholds set from these observations score in-sample.** BT `rear_gradient_max` + 0.1349 in `default_tuned` is the snapped P95 of these same BT+DV locations, so part of + its capture gain is guaranteed. Score it on held-out records by passing a different + `observations` table to the function (by project, by date, or by WSG). +4. **The two schemas differ in build vintage as well as config.** 4 of the 55 + `fresh_default` WSGs and 39 of the 59 `fresh` WSGs have run-log rows. The rest predate + the log, so the diff below is not a pure config effect. +5. **Known biases:** sampling clusters near road access. And fish are only observed + where they have access, so observed gradients are cut off at the access limit. + +## Baseline: `default` vs `bcfishpass`, 51 shared WSGs, buffer 0 + +`totals_shared.csv`. Shares are % of observation locations (n_obs). + +| species | stage | n | bundle | spawning | stream rearing | any rearing | spawning outside UHC | spawning km | rearing km | +|---|---|---|---|---|---|---|---|---|---| +| CH | any | 1,734 | bcfishpass | 82.1 | 86.6 | 86.6 | 76.7 | 15,640 | 21,570 | +| CH | any | 1,734 | default | 85.2 | 87.7 | 88.8 | 76.9 | 15,959 | 27,602 | +| CH | spawn | 245 | bcfishpass | 84.5 | 86.5 | 86.5 | 50.0 (n 8) | | | +| CH | spawn | 245 | default | 98.4 | 88.2 | 91.4 | 50.0 (n 8) | | | +| CH | rear | 510 | bcfishpass | 76.5 | 84.1 | 84.1 | | | | +| CH | rear | 510 | default | 77.5 | 84.7 | 84.7 | | | | +| BT | any | 4,600 | bcfishpass | 64.5 | 81.7 | 81.7 | 64.5 | 46,512 | 76,872 | +| BT | any | 4,600 | default | 65.4 | 81.1 | 82.8 | 65.4 | 47,099 | 75,280 | +| BT | rear | 1,047 | bcfishpass | 41.8 | 63.6 | 63.6 | | | | +| BT | rear | 1,047 | default | 44.3 | 65.9 | 66.5 | | | | +| BT | spawn | 81 | bcfishpass | 45.7 | 70.4 | 70.4 | | | | +| BT | spawn | 81 | default | 45.7 | 70.4 | 72.8 | | | | + +BT has no `user_habitat_classification` rows, so its outside-UHC share is its share. + +- **BT:** `default` captures slightly more rear-staged locations (66.5 vs 63.6 % on any + rearing) with 1,592 km *less* rearing. That is the edge-type rule (bcfishpass's BT + `rear: []` tests any edge), not the thresholds, which are the same in both bundles. +- **CH:** `default` models 6,032 km (28 %) more rearing for 1.1 points more stream + rearing capture on the any stage (2.2 with lake and wetland rearing). That is the cost + column doing its job. +- **Buffer 100 m** adds 0.4–2.8 points of spawning capture and 0–1.6 of rearing capture + across rows. The "downstream end of the site" bias is real but small. + +**Absences** (only 3 of the 51 shared WSGs are FISS snapshots: COTR, PINE, UPCE). CH: +68 sites, 11 (16 %) on modelled spawning, 12–15 on rearing. BT: 858 sites, 587 (68 %) on +modelled spawning, 678–686 on rearing. Most FISS sampling is juvenile electrofishing, +which says little about BT spawning. Not decision-grade. + +**Misses** (`misses.csv`, `default` over its 55 WSGs, any stage): BT 344 `fails_gradient`, 160 +`width_null`, 126 `fails_width`, 100 `fails_gradient_and_width`, 89 `post_predicate` +(clustering or gating), 42 `not_accessible`. CH 51 `fails_gradient`, 47 `width_null`, +27 `not_accessible`. For BT the gradient maximum is the binding threshold, which is +what #284 moved. NULL width is the second: 160 locations, which is consistent with +#284's finding that 49 % of accessible BT stream length has no width. +`misses_binned.csv` carries the gradient × width bins for each. + +## Reconciliation with #284 + +At buffer 0 on its own 55 WSGs, `fresh_default` retains **5,104** BT+DV and **1,745** CH +locations, exactly #284's pooled counts. The filters are the same code path. + +## Using it for #284 step 5 + +Model `default_tuned` into its own schema (`fresh_default_tuned`), stating the run +decisions at launch. Then run: + + Rscript data-raw/habitat_validate.R \ + --bundles=default:fresh_default,default_tuned:fresh_default_tuned --wsgs=... + +- Read `share_rearing_any` against `rearing_km` for BT on the rear stage. +- Read `share_*_outside_uhc` for CH. +- Hold out records for the in-sample BT value (point 3 above). + +`diff.csv` gives the per-WSG deltas. It is per WSG × species × stage, so step 5's +question 2 (how much newly admitted BT rearing sits above spawning) still needs a +segment-level diff. From dc17c5b104f4dcc76a7cd879ad2ca5dda4b9acf0 Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 13:47:44 -0700 Subject: [PATCH 07/10] Declare frs_habitat_predicates; call it as fresh@v0.33.0 allows (#283) The preflight drift guard requires every fresh:: symbol link calls to be declared. And the pinned minimum's frs_habitat_predicates() has no `model` argument, so passing model = "cw" would have failed on every host running fresh 0.33.0; cw is the default in 0.34. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- R/lnk_habitat_validate.R | 4 +++- R/lnk_preflight_fresh.R | 3 ++- tests/testthat/test-lnk_habitat_validate.R | 18 ++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/R/lnk_habitat_validate.R b/R/lnk_habitat_validate.R index 51f95873..e0a499cb 100644 --- a/R/lnk_habitat_validate.R +++ b/R/lnk_habitat_validate.R @@ -633,7 +633,9 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, res <- lapply(species, function(sp) { if (!any(seg$species_code == sp)) return(NULL) spp <- .lnk_hv_sp_params(params, loaded$parameters_fresh, sp) - pr <- fresh::frs_habitat_predicates(spp, model = "cw") + # Channel-width model: the default, and the only one fresh@v0.33.0 (the + # pinned minimum) has; it takes no `model` argument. + pr <- fresh::frs_habitat_predicates(spp) mins <- .lnk_hv_stage_min(spp) stage_pred <- list( spawn = pr$spawn, diff --git a/R/lnk_preflight_fresh.R b/R/lnk_preflight_fresh.R index 7e27a9ed..ad9196bc 100644 --- a/R/lnk_preflight_fresh.R +++ b/R/lnk_preflight_fresh.R @@ -98,7 +98,8 @@ lnk_preflight_fresh <- function(required = .lnk_fresh_required(), .lnk_fresh_required <- function() { c("frs_break_apply", "frs_break_find", "frs_candidates_pick", "frs_col_generate", "frs_col_join", "frs_habitat_classify", - "frs_habitat_overlay", "frs_network_features", "frs_order_child", + "frs_habitat_overlay", "frs_habitat_predicates", "frs_network_features", + "frs_order_child", "frs_params", "frs_wsg_drainage", "frs_wsg_outlets") } diff --git a/tests/testthat/test-lnk_habitat_validate.R b/tests/testthat/test-lnk_habitat_validate.R index cdd5ed38..cef70110 100644 --- a/tests/testthat/test-lnk_habitat_validate.R +++ b/tests/testthat/test-lnk_habitat_validate.R @@ -62,6 +62,24 @@ test_that(".lnk_hv_stage_min takes the spawn gradient floor from parameters_fres expect_identical(m$rear[["width"]], 1.5) }) +test_that("the predicate call passes no argument fresh@v0.33.0 lacks", { + # DESCRIPTION pins fresh >= 0.33.0, whose frs_habitat_predicates() takes + # only `sp_params`; `model =` arrived later and would error there. + calls <- list() + walk <- function(e) { + if (is.call(e)) { + if (identical(e[[1]], quote(fresh::frs_habitat_predicates))) { + calls[[length(calls) + 1L]] <<- e + } + for (a in as.list(e)[-1]) if (!missing(a)) walk(a) + } + } + walk(body(link:::.lnk_hv_predicates)) + expect_length(calls, 1L) + expect_length(as.list(calls[[1]])[-1], 1L) + expect_null(names(as.list(calls[[1]])[-1])) +}) + test_that(".lnk_hv_spec admits observation species only where the model species is present", { presence <- data.frame( watershed_group_code = c("AAAA", "BBBB"), From 61ab2c73b15e1dd5f3dfe7cb2d990dfee5d36cba Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 13:49:10 -0700 Subject: [PATCH 08/10] Record verification for #283 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- planning/active/progress.md | 4 ++++ planning/active/task_plan.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/planning/active/progress.md b/planning/active/progress.md index b95268d6..80b83fa3 100644 --- a/planning/active/progress.md +++ b/planning/active/progress.md @@ -28,3 +28,7 @@ reaches (9a4c191); R5 found the UHC test read the point while buffered capture read a window — fixed (0c19e0a). - Final baseline at 0c19e0a → data-raw/logs/habitat_validate_283/; research/habitat_validation.md +- Full suite: preflight drift guard failed on the undeclared fresh symbol -> declared; and + fresh@v0.33.0 (pinned minimum) has no `model` arg on frs_habitat_predicates -> dropped, + guarded by a test that fails with it restored (fb5a27a). Remaining 3 failures are the + :63333 tunnel being down. diff --git a/planning/active/task_plan.md b/planning/active/task_plan.md index 69878560..14775a10 100644 --- a/planning/active/task_plan.md +++ b/planning/active/task_plan.md @@ -116,7 +116,7 @@ Running `default_tuned` / candidate thresholds — that is #284 step 5 and needs run decisions (config, schema, closure, `dams`, `mapping_code`) stated at launch. ## Validation -- [ ] Tests pass (incl. DB fixture test), `devtools::check()` / lintr clean +- [x] Tests: new file 91 pass incl. DB fixture; full suite FAIL 3 / PASS 2042, the 3 being the `:63333` tunnel down (test-lnk_db_conn, test-lnk_wsg_resolve x2), untouched by this branch. `devtools::check()`: its 1 ERROR is those same tunnel tests; 3 WARNINGs + 2 NOTEs are pre-existing files. lintr clean on new R code. The full suite caught one real defect: the preflight drift guard needed `frs_habitat_predicates` declared (fb5a27a), and review of that found the v0.33.0 `model =` incompatibility - [x] `/code-check`: 5 rounds (review-round1..5.md); loop ended by enumeration (R3/R4, 59 rows), R5's finding fixed and pinned by a test - [x] PWF checkboxes match landed work - [ ] `/planning-archive` on completion From 1cca2b1259b61052be3043765d5d6cd3b1dabf7c Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 13:49:36 -0700 Subject: [PATCH 09/10] Archive planning files for issue #283 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- .../README.md | 52 +++++++++++++++++++ .../findings.md | 0 .../progress.md | 0 .../review-plan.md | 0 .../review-round1.md | 0 .../review-round2.md | 0 .../review-round3.md | 0 .../review-round4.md | 0 .../review-round5.md | 0 .../task_plan.md | 0 10 files changed, 52 insertions(+) create mode 100644 planning/archive/2026-09-issue-283-habitat-validation/README.md rename planning/{active => archive/2026-09-issue-283-habitat-validation}/findings.md (100%) rename planning/{active => archive/2026-09-issue-283-habitat-validation}/progress.md (100%) rename planning/{active => archive/2026-09-issue-283-habitat-validation}/review-plan.md (100%) rename planning/{active => archive/2026-09-issue-283-habitat-validation}/review-round1.md (100%) rename planning/{active => archive/2026-09-issue-283-habitat-validation}/review-round2.md (100%) rename planning/{active => archive/2026-09-issue-283-habitat-validation}/review-round3.md (100%) rename planning/{active => archive/2026-09-issue-283-habitat-validation}/review-round4.md (100%) rename planning/{active => archive/2026-09-issue-283-habitat-validation}/review-round5.md (100%) rename planning/{active => archive/2026-09-issue-283-habitat-validation}/task_plan.md (100%) diff --git a/planning/archive/2026-09-issue-283-habitat-validation/README.md b/planning/archive/2026-09-issue-283-habitat-validation/README.md new file mode 100644 index 00000000..7a99af95 --- /dev/null +++ b/planning/archive/2026-09-issue-283-habitat-validation/README.md @@ -0,0 +1,52 @@ +## Outcome + +Built `lnk_habitat_validate()` and `data-raw/habitat_validate.R`, which score a persisted +run against fish observations rather than against bcfishpass. Per WSG × species × stage +they report capture, cost in km, miss reasons and FISS absences. The miss reasons come +from the bundle's own predicates, re-evaluated with the gradient and the width relaxed. + +The design moved three times on measurement: +- The issue's "use per-WSG schemas, fresh#218 duplicates" turned out to be a bare + `id_segment` join artifact. +- `schema` became required because `default` declares the schema the bcfishpass + bundle writes. +- Capture outside `user_habitat_classification` reaches was added once the baseline + showed CH spawn-staged capture is almost all overlay. + +The method, the baseline and the #284 step-5 command are in +[`research/habitat_validation.md`](../../../research/habitat_validation.md). + +## Measurement + +`default:fresh_default` vs `bcfishpass:fresh`, 51 shared WSGs, buffer 0: +- **BT, rear-staged (n 1,047):** any-rearing capture 66.5 % on 75,280 km (default) vs + 63.6 % on 76,872 km (bcfishpass). +- **CH, any stage (n 1,734):** stream-rearing capture 87.7 % vs 86.6 %, for 28 % more + rearing km. +- **CH, spawn-staged:** 237 of 245 locations sit in UHC spawning reaches. That is why + `default` reads 98.4 % and bcfishpass 84.5 %. Outside those reaches n is 8. +- **Buffer 100 m:** +0.4–2.8 points on spawning, 0–1.6 on rearing. +- **Reconciliation:** `fresh_default` alone retains 5,104 BT+DV and 1,745 CH locations, + exactly #284's counts. + +**The wrong turns, kept:** +- The first absence rule counted FISS sites that caught fish but listed no species. They + were 63 % of BT absences in a 5-WSG probe. +- The first UHC flag ignored the indicator, so 98.7 % of flagged records were in + spawning-only reaches. +- The first spawn gradient floor was derived twice, from two sources that happen to + agree today. +- `toupper(NULL)` is `character(0)`, so the first full run scored zero WSGs. +- The first predicate call passed `model =`, which the pinned `fresh@v0.33.0` lacks. + Only the full suite's drift guard led to it. + +Review: a plan review plus five code-check rounds (`review-*.md`). Round 2 found a +defect inside a round-1 fix. Round 3 named three mechanisms and enumerated 59 rows, and +round 4 re-walked them. + +## Evidence + +`data-raw/logs/habitat_validate_283/*` (link @ `0c19e0a`; `stamp.txt` records the run-log +coverage of each schema). + +Closed by: PR for #283 (branch `283-validate-modelled-habitat-against-fish`) diff --git a/planning/active/findings.md b/planning/archive/2026-09-issue-283-habitat-validation/findings.md similarity index 100% rename from planning/active/findings.md rename to planning/archive/2026-09-issue-283-habitat-validation/findings.md diff --git a/planning/active/progress.md b/planning/archive/2026-09-issue-283-habitat-validation/progress.md similarity index 100% rename from planning/active/progress.md rename to planning/archive/2026-09-issue-283-habitat-validation/progress.md diff --git a/planning/active/review-plan.md b/planning/archive/2026-09-issue-283-habitat-validation/review-plan.md similarity index 100% rename from planning/active/review-plan.md rename to planning/archive/2026-09-issue-283-habitat-validation/review-plan.md diff --git a/planning/active/review-round1.md b/planning/archive/2026-09-issue-283-habitat-validation/review-round1.md similarity index 100% rename from planning/active/review-round1.md rename to planning/archive/2026-09-issue-283-habitat-validation/review-round1.md diff --git a/planning/active/review-round2.md b/planning/archive/2026-09-issue-283-habitat-validation/review-round2.md similarity index 100% rename from planning/active/review-round2.md rename to planning/archive/2026-09-issue-283-habitat-validation/review-round2.md diff --git a/planning/active/review-round3.md b/planning/archive/2026-09-issue-283-habitat-validation/review-round3.md similarity index 100% rename from planning/active/review-round3.md rename to planning/archive/2026-09-issue-283-habitat-validation/review-round3.md diff --git a/planning/active/review-round4.md b/planning/archive/2026-09-issue-283-habitat-validation/review-round4.md similarity index 100% rename from planning/active/review-round4.md rename to planning/archive/2026-09-issue-283-habitat-validation/review-round4.md diff --git a/planning/active/review-round5.md b/planning/archive/2026-09-issue-283-habitat-validation/review-round5.md similarity index 100% rename from planning/active/review-round5.md rename to planning/archive/2026-09-issue-283-habitat-validation/review-round5.md diff --git a/planning/active/task_plan.md b/planning/archive/2026-09-issue-283-habitat-validation/task_plan.md similarity index 100% rename from planning/active/task_plan.md rename to planning/archive/2026-09-issue-283-habitat-validation/task_plan.md From d86482255a520f168f21c32968f9e1caf9f11ccb Mon Sep 17 00:00:00 2001 From: almac2022 Date: Sat, 26 Sep 2026 15:00:33 -0700 Subject: [PATCH 10/10] Accept observations from any source (#283) observations is now a table or a data frame. Only the location columns and species_code are required. The bcfishobs filters become arguments (match_types, source_exclude) that default on, and a filter whose column the source lacks is an error rather than a skip. A source's own is_spawn / is_rear win over bcfishobs wording. A data frame without observation_key is keyed by its own row numbers, and then refuses non-NULL exclusions. Codes are compared upper-cased and trimmed. With defaults, the bcfishobs path reproduces the committed baseline: 120 of 120 summary rows on 5 WSGs. Review round 6 (in the #283 archive) found the key, exclusion, normalisation and 0/1-flag issues fixed here. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WJE2szSCkeV9R3qKhuSwyx --- R/lnk_habitat_validate.R | 185 ++++++++++++++---- man/lnk_habitat_validate.Rd | 45 +++-- .../review-round6.md | 109 +++++++++++ research/habitat_validation.md | 8 + tests/testthat/test-lnk_habitat_validate.R | 82 ++++++++ 5 files changed, 382 insertions(+), 47 deletions(-) create mode 100644 planning/archive/2026-09-issue-283-habitat-validation/review-round6.md diff --git a/R/lnk_habitat_validate.R b/R/lnk_habitat_validate.R index e0a499cb..f91a3ab9 100644 --- a/R/lnk_habitat_validate.R +++ b/R/lnk_habitat_validate.R @@ -14,22 +14,30 @@ #' bundles can be diffed on the same observations. #' #' @section Which observations count: -#' From `observations` (a `bcfishobs.observations`-shaped table), keeping: +#' `observations` is any source of fish records located on the FWA network: +#' `bcfishobs.observations` by default, or another table, or a data frame of +#' your own. From it, keeping: #' - records not flagged `data_error` or `release_exclude` in -#' `loaded$observation_exclusions` (the pipeline's own filter), and not -#' from the `Releases Database` source (stocked fish are not evidence of -#' habitat use); +#' `loaded$observation_exclusions` (matched on `observation_key`), and not +#' from a `source` starting with any of `source_exclude` (by default the +#' `Releases Database`: stocked fish are not evidence of habitat use); #' - observation species admitted for the model species by `species_obs`, #' and only in WSGs where `loaded$wsg_species_presence` marks the model #' species present (so DV records count as BT only where BT is present); -#' - `match_type` classes in `match_types` (default A/B: matched to a -#' stream within 100 m; C, 100-500 m from a stream, and the D/E +#' - `match_type` classes in `match_types` (default A/B, bcfishobs's matches +#' to a stream within 100 m; C, 100-500 m from a stream, and the D/E #' waterbody matches are left out); #' - one per species x `blue_line_key` x metre (repeat visits are one #' location; a location is spawn- or rear-staged if any record there is). #' -#' Pass a different `observations` table to score a held-out subset (by -#' project, date or WSG). +#' Stage comes from `is_spawn` / `is_rear` where the source carries them, +#' and otherwise from bcfishobs's `activity_code`, `activity` and +#' `life_stage` wording; a record with neither counts in the `any` stage only. +#' +#' A filter whose column the source does not have is an error, not a silent +#' pass: set `match_types = NULL` or `source_exclude = NULL` for a source +#' without `match_type` or `source`. Pass a subset to score held-out records +#' (by project, date or WSG). #' #' @section Which segment an observation is on: #' The pipeline breaks streams at observations, so most points sit on a @@ -118,15 +126,24 @@ #' @param schema Persist schema to score. Required: a bundle's #' `pipeline.schema` is not a reliable guide to which schema it built #' (`default` declares `fresh`, which the `bcfishpass` bundle writes). -#' @param observations Schema-qualified observations table. Default -#' `"bcfishobs.observations"`. Needs `observation_key`, `species_code`, -#' `watershed_group_code`, `blue_line_key`, `downstream_route_measure`, -#' `match_type`, `activity_code`, `activity`, `life_stage`, `source`. +#' @param observations Fish records: a schema-qualified table name (default +#' `"bcfishobs.observations"`) or a data frame. Required columns: +#' `species_code`, `watershed_group_code`, `blue_line_key`, +#' `downstream_route_measure`, and for a table `observation_key`. A data +#' frame without `observation_key` gets its own row numbers as keys, and +#' then `loaded$observation_exclusions` must be `NULL` (the exclusions are +#' matched on that key). Species and WSG codes are compared upper-cased +#' and trimmed. Optional: `match_type`, `source`, `is_spawn`, `is_rear` +#' (logical, 0/1 or t/true/yes), `activity_code`, `activity`, +#' `life_stage`. #' @param species_obs Named list mapping a model species to the observation #' species codes that count as it. Species not named map to themselves. #' Default pools DV records with BT (`list(BT = c("BT", "DV"))`). #' @param match_types Character vector of `match_type` classes (first -#' letter) to keep. Default `c("A", "B")`. +#' letter) to keep, or `NULL` for no match-type filter. Default +#' `c("A", "B")`. +#' @param source_exclude Character vector of `source` prefixes to drop, or +#' `NULL` for none. Default `"Releases Database"`. #' @param buffer_m Numeric scalar >= 0. Upstream distance within which #' modelled habitat still captures an observation. Default 0. #' @param absences Optional data frame of sites sampled with the species @@ -184,6 +201,7 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, observations = "bcfishobs.observations", species_obs = list(BT = c("BT", "DV")), match_types = c("A", "B"), + source_exclude = "Releases Database", buffer_m = 0, absences = NULL) { stopifnot( @@ -200,13 +218,21 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, is.list(species_obs), length(species_obs) == 0L || !is.null(names(species_obs)), all(vapply(species_obs, is.character, logical(1))), - is.character(match_types), length(match_types) >= 1L, - all(grepl("^[A-Z]$", match_types)), + is.null(match_types) || + (is.character(match_types) && length(match_types) >= 1L && + all(grepl("^[A-Z]$", match_types))), + is.null(source_exclude) || + (is.character(source_exclude) && length(source_exclude) >= 1L && + !anyNA(source_exclude) && all(nzchar(source_exclude))), + is.data.frame(observations) || + (is.character(observations) && length(observations) == 1L), is.numeric(buffer_m), length(buffer_m) == 1L, !is.na(buffer_m), buffer_m >= 0, is.finite(buffer_m), is.null(absences) || is.data.frame(absences) ) - .lnk_validate_identifier(observations, "observations table") + if (is.character(observations)) { + .lnk_validate_identifier(observations, "observations table") + } for (nm in c("wsg_species_presence", "parameters_fresh")) { if (is.null(loaded[[nm]])) { stop("loaded$", nm, " is required", call. = FALSE) @@ -223,7 +249,7 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, spec <- .lnk_hv_spec(loaded$wsg_species_presence, aoi, species, species_obs) obs <- .lnk_hv_obs(conn, schema, observations, spec, loaded, species, - match_types, buffer_m) + match_types, source_exclude, buffer_m) obs <- .lnk_hv_dedup(obs) obs <- .lnk_hv_predicates(conn, schema, obs, cfg, loaded, species) obs <- .lnk_hv_reasons(obs) @@ -389,16 +415,94 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, invisible(NULL) } +#' Resolve the observation source to a table and the columns it carries. +#' +#' A data frame goes to a session temp table. Optional columns a source +#' lacks become typed NULLs, so one query serves every source. +#' @noRd +.lnk_hv_source <- function(conn, observations) { + cols_req <- c("species_code", "watershed_group_code", "blue_line_key", + "downstream_route_measure") + cols_opt <- c("observation_key", "match_type", "source", "is_spawn", + "is_rear", "activity_code", "activity", "life_stage") + key_generated <- FALSE + if (is.data.frame(observations)) { + d <- as.data.frame(observations) + miss <- setdiff(cols_req, names(d)) + if (length(miss) > 0L) { + stop("observations is missing columns: ", paste(miss, collapse = ", "), + call. = FALSE) + } + d <- d[, intersect(c(cols_req, cols_opt), names(d)), drop = FALSE] + if (!"observation_key" %in% names(d)) { + # The caller's own row numbers, so results join back to their rows. + d$observation_key <- as.character(seq_len(nrow(d))) + key_generated <- TRUE + } + DBI::dbWriteTable(conn, "lnk_vd_src", d, temporary = TRUE, + overwrite = TRUE) + src <- "pg_temp.lnk_vd_src" + } else { + src <- observations + } + cols <- names(DBI::dbGetQuery(conn, sprintf("SELECT * FROM %s LIMIT 0", + src))) + miss <- setdiff(c(cols_req, "observation_key"), cols) + if (length(miss) > 0L) { + stop(src, " is missing columns: ", paste(miss, collapse = ", "), + call. = FALSE) + } + list(src = src, cols = intersect(c(cols_req, cols_opt), cols), + key_generated = key_generated) +} + #' Filter observations, attach each to its segment, and flag capture. #' @noRd .lnk_hv_obs <- function(conn, schema, observations, spec, loaded, species, - match_types, buffer_m) { + match_types, source_exclude, buffer_m) { + s <- .lnk_hv_source(conn, observations) + has <- function(cl) cl %in% s$cols + opt <- function(cl, type) { + if (has(cl)) sprintf("o.%s::%s", cl, type) else sprintf("NULL::%s", type) + } + # A stage flag may arrive as logical, 0/1 (readr's reading of a 0/1 + # column), or t/true/yes text; none of those casts to boolean alike. + opt_flag <- function(cl) { + if (!has(cl)) return("NULL::boolean") + sprintf(paste("CASE WHEN o.%1$s IS NULL THEN NULL", + "ELSE lower(trim(o.%1$s::text)) IN", + "('t', 'true', '1', '1.0', 'y', 'yes') END"), cl) + } + if (!is.null(match_types) && !has("match_type")) { + stop(s$src, " has no match_type column; pass match_types = NULL", + call. = FALSE) + } + if (!is.null(source_exclude) && !has("source")) { + stop(s$src, " has no source column; pass source_exclude = NULL", + call. = FALSE) + } excl <- loaded$observation_exclusions keys <- character(0) if (!is.null(excl) && nrow(excl) > 0L) { keys <- excl$observation_key[excl$data_error %in% c(TRUE, "t") | excl$release_exclude %in% c(TRUE, "t")] } + if (s$key_generated && length(keys) > 0L) { + stop("observations has no observation_key, so ", + "loaded$observation_exclusions cannot be applied; add the key, or ", + "set loaded$observation_exclusions <- NULL for a source it does ", + "not describe", call. = FALSE) + } + # Prefixes compared literally, so there are no LIKE wildcards to escape. + DBI::dbWriteTable(conn, "lnk_vd_srcx", + data.frame(prefix = as.character(source_exclude)), + temporary = TRUE, overwrite = TRUE) + where_match <- if (is.null(match_types)) "" else + "AND left(o.match_type::text, 1) = ANY($1)" + where_source <- if (is.null(source_exclude)) "" else + "AND NOT EXISTS (SELECT 1 FROM pg_temp.lnk_vd_srcx x + WHERE left(coalesce(o.source::text, ''), + length(x.prefix)) = x.prefix)" DBI::dbWriteTable(conn, "lnk_vd_excl", data.frame(observation_key = as.character(keys)), temporary = TRUE, overwrite = TRUE) @@ -423,21 +527,29 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, .lnk_hv_drop_temp(conn, "lnk_vd_obs") DBI::dbExecute(conn, sprintf( "CREATE TEMP TABLE lnk_vd_obs AS - SELECT o.observation_key, sp.species_code, - o.species_code AS obs_species, - o.watershed_group_code, o.blue_line_key, - o.downstream_route_measure AS m, - left(o.match_type, 1) AS match_class, - o.activity_code, o.activity, o.life_stage - FROM %s o - JOIN pg_temp.lnk_vd_spec sp - ON sp.watershed_group_code = o.watershed_group_code - AND sp.obs_species = o.species_code + SELECT o.* FROM ( + SELECT o.observation_key::text AS observation_key, sp.species_code, + upper(trim(o.species_code::text)) AS obs_species, + upper(trim(o.watershed_group_code::text)) + AS watershed_group_code, + o.blue_line_key::integer AS blue_line_key, + o.downstream_route_measure::double precision AS m, + left(%2$s, 1) AS match_class, + %3$s AS activity_code, %4$s AS activity, %5$s AS life_stage, + %6$s AS src_is_spawn, %7$s AS src_is_rear + FROM %1$s o + JOIN pg_temp.lnk_vd_spec sp + ON sp.watershed_group_code = upper(trim(o.watershed_group_code::text)) + AND sp.obs_species = upper(trim(o.species_code::text)) + WHERE TRUE %8$s %9$s) o WHERE NOT EXISTS (SELECT 1 FROM pg_temp.lnk_vd_excl e - WHERE e.observation_key = o.observation_key) - AND coalesce(o.source, '') NOT LIKE 'Releases Database%%' - AND left(o.match_type, 1) = ANY($1)", observations), - params = list(paste0("{", paste(match_types, collapse = ","), "}"))) + WHERE e.observation_key = o.observation_key)", + s$src, opt("match_type", "text"), opt("activity_code", "text"), + opt("activity", "text"), opt("life_stage", "text"), + opt_flag("is_spawn"), opt_flag("is_rear"), + where_match, where_source), + params = if (is.null(match_types)) NULL else + list(paste0("{", paste(match_types, collapse = ","), "}"))) # The segment the model tests: the one STARTING within 1 m (upstream), # else the one containing the point. n_cand > 1 is the expected case of @@ -526,9 +638,14 @@ lnk_habitat_validate <- function(conn, aoi, cfg, loaded, species, schema, #' record (by observation_key) supplies everything else. #' @noRd .lnk_hv_dedup <- function(obs) { + # A source's own stage wins where it gives one; bcfishobs wording otherwise. st <- .lnk_obs_stage(obs$activity_code, obs$activity, obs$life_stage) - obs$is_spawn <- st$is_spawn - obs$is_rear <- st$is_rear + own_spawn <- obs$src_is_spawn %||% rep(NA, nrow(obs)) + own_rear <- obs$src_is_rear %||% rep(NA, nrow(obs)) + obs$is_spawn <- ifelse(is.na(own_spawn), st$is_spawn, own_spawn) + obs$is_rear <- ifelse(is.na(own_rear), st$is_rear, own_rear) + obs$src_is_spawn <- NULL + obs$src_is_rear <- NULL obs$n_records <- rep(1L, nrow(obs)) if (nrow(obs) == 0L) return(obs) loc <- paste(obs$species_code, obs$blue_line_key, round(obs$m)) diff --git a/man/lnk_habitat_validate.Rd b/man/lnk_habitat_validate.Rd index 30d2b820..7ed839a1 100644 --- a/man/lnk_habitat_validate.Rd +++ b/man/lnk_habitat_validate.Rd @@ -14,6 +14,7 @@ lnk_habitat_validate( observations = "bcfishobs.observations", species_obs = list(BT = c("BT", "DV")), match_types = c("A", "B"), + source_exclude = "Releases Database", buffer_m = 0, absences = NULL ) @@ -42,17 +43,27 @@ and (when present) \code{user_habitat_classification}.} \code{pipeline.schema} is not a reliable guide to which schema it built (\code{default} declares \code{fresh}, which the \code{bcfishpass} bundle writes).} -\item{observations}{Schema-qualified observations table. Default -\code{"bcfishobs.observations"}. Needs \code{observation_key}, \code{species_code}, -\code{watershed_group_code}, \code{blue_line_key}, \code{downstream_route_measure}, -\code{match_type}, \code{activity_code}, \code{activity}, \code{life_stage}, \code{source}.} +\item{observations}{Fish records: a schema-qualified table name (default +\code{"bcfishobs.observations"}) or a data frame. Required columns: +\code{species_code}, \code{watershed_group_code}, \code{blue_line_key}, +\code{downstream_route_measure}, and for a table \code{observation_key}. A data +frame without \code{observation_key} gets its own row numbers as keys, and +then \code{loaded$observation_exclusions} must be \code{NULL} (the exclusions are +matched on that key). Species and WSG codes are compared upper-cased +and trimmed. Optional: \code{match_type}, \code{source}, \code{is_spawn}, \code{is_rear} +(logical, 0/1 or t/true/yes), \code{activity_code}, \code{activity}, +\code{life_stage}.} \item{species_obs}{Named list mapping a model species to the observation species codes that count as it. Species not named map to themselves. Default pools DV records with BT (\code{list(BT = c("BT", "DV"))}).} \item{match_types}{Character vector of \code{match_type} classes (first -letter) to keep. Default \code{c("A", "B")}.} +letter) to keep, or \code{NULL} for no match-type filter. Default +\code{c("A", "B")}.} + +\item{source_exclude}{Character vector of \code{source} prefixes to drop, or +\code{NULL} for none. Default \code{"Releases Database"}.} \item{buffer_m}{Numeric scalar >= 0. Upstream distance within which modelled habitat still captures an observation. Default 0.} @@ -105,24 +116,32 @@ bundles can be diffed on the same observations. } \section{Which observations count}{ -From \code{observations} (a \code{bcfishobs.observations}-shaped table), keeping: +\code{observations} is any source of fish records located on the FWA network: +\code{bcfishobs.observations} by default, or another table, or a data frame of +your own. From it, keeping: \itemize{ \item records not flagged \code{data_error} or \code{release_exclude} in -\code{loaded$observation_exclusions} (the pipeline's own filter), and not -from the \verb{Releases Database} source (stocked fish are not evidence of -habitat use); +\code{loaded$observation_exclusions} (matched on \code{observation_key}), and not +from a \code{source} starting with any of \code{source_exclude} (by default the +\verb{Releases Database}: stocked fish are not evidence of habitat use); \item observation species admitted for the model species by \code{species_obs}, and only in WSGs where \code{loaded$wsg_species_presence} marks the model species present (so DV records count as BT only where BT is present); -\item \code{match_type} classes in \code{match_types} (default A/B: matched to a -stream within 100 m; C, 100-500 m from a stream, and the D/E +\item \code{match_type} classes in \code{match_types} (default A/B, bcfishobs's matches +to a stream within 100 m; C, 100-500 m from a stream, and the D/E waterbody matches are left out); \item one per species x \code{blue_line_key} x metre (repeat visits are one location; a location is spawn- or rear-staged if any record there is). } -Pass a different \code{observations} table to score a held-out subset (by -project, date or WSG). +Stage comes from \code{is_spawn} / \code{is_rear} where the source carries them, +and otherwise from bcfishobs's \code{activity_code}, \code{activity} and +\code{life_stage} wording; a record with neither counts in the \code{any} stage only. + +A filter whose column the source does not have is an error, not a silent +pass: set \code{match_types = NULL} or \code{source_exclude = NULL} for a source +without \code{match_type} or \code{source}. Pass a subset to score held-out records +(by project, date or WSG). } \section{Which segment an observation is on}{ diff --git a/planning/archive/2026-09-issue-283-habitat-validation/review-round6.md b/planning/archive/2026-09-issue-283-habitat-validation/review-round6.md new file mode 100644 index 00000000..0936ff31 --- /dev/null +++ b/planning/archive/2026-09-issue-283-habitat-validation/review-round6.md @@ -0,0 +1,109 @@ +# Review round 6: source-agnostic `observations` (staged delta diff_r6.patch) + +Reviewed `R/lnk_habitat_validate.R` and `tests/testthat/test-lnk_habitat_validate.R` in full. +The tests ran in a `cp -r` copy with the fixture schema renamed: 100 expectations, 0 failures. +Probes ran against local docker fwapg, using temp tables and a renamed probe schema that was +dropped afterwards. + +## Findings + +### 1. A source with no key silently skips `observation_exclusions` (medium, silently wrong numbers) + +`R/lnk_habitat_validate.R:465-469` and `:524-525`. When a source has no `observation_key`, +the key is generated as `'row' || row_number()`, and the exclusion `NOT EXISTS` can never match +a generated key. So `data_error` and `release_exclude` records are counted, with no message. + +This contradicts the delta's own rule, "a filter whose column the source does not have is an +error, not a silent pass" (roxygen lines 37-40). That rule is enforced for `match_type` and +`source` but not for this filter. The most likely data-frame use is the one the docs suggest: +a held-out subset of bcfishobs. A user who selects columns and drops `observation_key` gets +this silently. + +Measured on the fixture. `o3` is the `data_error` record. +- `o3` at its fixture position: the location at 50 has `n_records` 2 with the key and 3 without it. +- `o3` moved to 250: `n_obs` for `any` is 4 with the key and 5 without it. + +Fix: when the source has no `observation_key` and the exclusion key set is non-empty, error. +The error should name the opt-out (`loaded$observation_exclusions <- NULL`), the same way the +other two filters name theirs. + +### 2. Generated `observation_key` is not deterministic, and "rowN" is not input row N (medium, reproducibility) + +`R/lnk_habitat_validate.R:468`. `row_number() OVER ()` has no ORDER BY. + +For a permanent table the plan is `WindowAgg -> Gather (3 workers) -> Parallel Seq Scan`. This +was checked with EXPLAIN on `bcfishobs.observations` using the same join and filter shape. +Three identical read-only runs that assigned the keys produced three different key-to-record +maps (md5 `86eee…`, `650c…`, `2578…`). + +The key reaches the output (`observations$observation_key`). It also chooses the "first record +by observation_key" that `.lnk_hv_dedup` keeps for each location, and that record supplies `m`, +`match_class`, `activity` and the other per-record fields. So the output table is not +byte-reproducible. Counts move only when records at one `round(m)` carry different `m`. That +was 0 of 1383 MORR/BULK bcfishobs locations, but nothing stops another source having it. + +Separately, the generated number is assigned after the join and filters, so it does not name +the caller's row. In the fixture, input row 1 (`o1`) came back as `row6` and input row 9 as +`row3`. A caller cannot join results back to their own data frame. + +Fix: +- **Data frame:** add `observation_key = as.character(seq_len(nrow(d)))` in R before + `dbWriteTable`. That is deterministic and maps back to the caller's rows. +- **Table:** either require `observation_key`, or order the window by every selected source + column. + +### 3. Species and WSG codes are normalised on one end only (medium, silent zero) + +`R/lnk_habitat_validate.R:520-522` against `:238-240`. `species` and `species_obs` are +upper-cased, and `aoi` is forced to `^[A-Z]{3,5}$`, but the observation side is compared raw. + +Measured on a data-frame source: +- `species_code = "bt"`, `watershed_group_code = "aaaa"` and `species_code = "BT "` each give + `n_obs` 0 on every row, with no error. + +bcfishobs is upper-case, so the default is unaffected. The delta's purpose is to accept other +sources, and this is where they will differ. + +Fix: `upper(trim(...))` on both observation columns in the SELECT and the JOIN. The join is +already a seq-scan hash join (see the plan above), so no index is lost. Alternatively, +normalise the data frame in R before writing it. + +### 4. An empty string in `source_exclude` drops every record (low, silent zero) + +`:220-222` validation plus `:477-479`. `left(x, length('')) = ''` is true for every row, +including NULL sources after `coalesce`. So `source_exclude = ""` gives `n_obs` 0 everywhere +(measured, probe E). Add `all(nzchar(source_exclude))` to the `stopifnot`. + +### 5. `is_spawn` / `is_rear` stored as double error with a Postgres cast message (low, loud) + +`opt("is_spawn", "boolean")` at `:528`. A 0/1 column read by readr arrives as double. It fails +with `cannot cast type double precision to boolean`, which does not say which argument is +wrong. Integer, logical and `"yes"`/`"t"` text all work. On the data-frame path, coerce with +`as.logical()` in R, or check the type and name the column in the error. + +## Checked and not a defect + +- **SQL injection.** The table name goes through `.lnk_validate_identifier` (`^[a-zA-Z_][a-zA-Z0-9_.]*$`). + Only whitelisted column names are written or interpolated (`cols_keep`, `opt()`/`has()` over + fixed names). Values travel by `dbWriteTable` or a bound `$1`. `source_exclude` travels by + temp table, and a `LIKE` wildcard (`a_`, `50%`) is matched literally (probed). +- **Temp-table overwrite.** RPostgres 1.4.10 `dbRemoveTable(temporary = TRUE)` qualifies the + DROP with the session's `pg_temp_N`. A same-named permanent table in `search_path` cannot be + dropped by `lnk_vd_src` or `lnk_vd_srcx`. Repeated calls in one session, data frame then + table, give correct results. +- **Odd inputs, all correct.** + - A 0-row data frame. + - Factor codes, and character `blue_line_key` and measure. + - `integer64` `blue_line_key`. + - A tibble. + - A numeric `observation_key`. + - An all-NA logical `is_spawn` column. + - `match_types = NULL` (the `params = NULL` path, which keeps match C). + - `is_spawn` / `is_rear` NA falling back to wording. +- **Stage flags** can never be NA after the `ifelse` fallback, so `d[d$is_spawn, ]` is safe. +- **`data-raw/habitat_validate.R`** calls with named arguments, so inserting `source_exclude` + before `buffer_m` breaks no caller. A positional numeric would fail `is.character` loudly. +- **Latent, not a bug today:** the optional-column set is written twice, in `cols_keep` + (`:429-431`) and in the `opt()`/`has()` calls (`:457-528`). The two agree now. If a column + were added to one and not the other, a data frame's column would be dropped before writing + and read as NULL. diff --git a/research/habitat_validation.md b/research/habitat_validation.md index 563d3520..e81ab5d5 100644 --- a/research/habitat_validation.md +++ b/research/habitat_validation.md @@ -27,6 +27,14 @@ that both retained the same observations. must be present in the WSG per `wsg_species_presence`. DV records count as BT where BT is present (the #284 pooling). Match types are A/B only (stream, within 100 m). One location per species × `blue_line_key` × metre, which is staged if any record there is. +- **Other sources:** `observations` takes any table or data frame that has + `species_code`, `watershed_group_code`, `blue_line_key` and + `downstream_route_measure`, so crew data, eDNA or a held-out subset can be scored the + same way. A source can give its own `is_spawn` / `is_rear`. The two bcfishobs filters + (`match_types`, `source_exclude`) default on. When the source lacks the column a filter + needs, the function errors rather than skipping it, so a source without them passes + `NULL`. Measured: with the defaults, the bcfishobs path reproduces this baseline + exactly (120 of 120 summary rows, 5 WSGs). - **The segment:** the one *starting* within 1 m of the point, because the pipeline breaks at observations; otherwise the containing one. Every join is on the full `(id_segment, watershed_group_code)` key. diff --git a/tests/testthat/test-lnk_habitat_validate.R b/tests/testthat/test-lnk_habitat_validate.R index cef70110..44e4731a 100644 --- a/tests/testthat/test-lnk_habitat_validate.R +++ b/tests/testthat/test-lnk_habitat_validate.R @@ -306,6 +306,88 @@ test_that("species_obs values are case-insensitive", { expect_identical(v$summary$n_obs[v$summary$stage == "any"], 4L) }) +test_that("observations can be a data frame from any source", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + mine <- data.frame( + species_code = "BT", watershed_group_code = "AAAA", blue_line_key = 1L, + downstream_route_measure = c(100, 50, 300), + is_rear = c(TRUE, NA, FALSE), + # Its own stage wins over bcfishobs wording where given. + activity = c(NA, "Spawning", "Spawning"), is_spawn = c(NA, NA, FALSE)) + ld <- validate_loaded() + ld$observation_exclusions <- NULL + v <- lnk_habitat_validate( + conn, aoi = "AAAA", cfg = lnk_config("default"), + loaded = ld, species = "BT", schema = s, + observations = mine, match_types = NULL, source_exclude = NULL) + sm <- v$summary + expect_identical(sm$n_obs[sm$stage == "any"], 3L) + expect_identical(sm$n_obs[sm$stage == "rear"], 1L) + expect_identical(sm$n_obs[sm$stage == "spawn"], 1L) + # Keys are the caller's row numbers, so results join back. + expect_setequal(v$observations$observation_key, c("1", "2", "3")) + expect_identical( + v$observations$observation_key[round(v$observations$m) == 300], "3") + # The upstream segment rule still applies: 100 is segment 2. + expect_identical( + v$observations$id_segment[round(v$observations$m) == 100], 2L) +}) + +test_that("a filter whose column the source lacks is an error, not a pass", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + mine <- data.frame(species_code = "BT", watershed_group_code = "AAAA", + blue_line_key = 1L, downstream_route_measure = 50) + ld <- validate_loaded() + ld$observation_exclusions <- NULL + go <- function(obs = mine, loaded = ld, ...) lnk_habitat_validate( + conn, aoi = "AAAA", cfg = lnk_config("default"), + loaded = loaded, species = "BT", schema = s, + observations = obs, ...) + expect_error(go(source_exclude = NULL), "match_types = NULL") + expect_error(go(match_types = NULL), "source_exclude = NULL") + # Exclusions are keyed on observation_key; without one they cannot apply. + expect_error(go(loaded = validate_loaded(), match_types = NULL, + source_exclude = NULL), "observation_exclusions") + expect_error(go(match_types = NULL, source_exclude = "")) + expect_error(go(obs = mine[, -2], match_types = NULL, source_exclude = NULL), + "watershed_group_code") +}) + +test_that("source_exclude matches a literal prefix, not a LIKE pattern", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + mine <- data.frame(species_code = "BT", watershed_group_code = "AAAA", + blue_line_key = 1L, downstream_route_measure = c(50, 300), + source = c("50% stocked", "500 survey")) + ld <- validate_loaded() + ld$observation_exclusions <- NULL + v <- lnk_habitat_validate( + conn, aoi = "AAAA", cfg = lnk_config("default"), + loaded = ld, species = "BT", schema = s, + observations = mine, match_types = NULL, source_exclude = "50%") + expect_identical(round(v$observations$m), 300) +}) + +test_that("codes are normalised on the observation side, and 0/1 flags read as stage", { + conn <- validate_conn() + s <- local_validate_fixture(conn) + mine <- data.frame(species_code = c("bt", "BT "), + watershed_group_code = c("aaaa", "AAAA"), + blue_line_key = 1L, downstream_route_measure = c(50, 300), + is_spawn = c(1, 0)) + ld <- validate_loaded() + ld$observation_exclusions <- NULL + v <- lnk_habitat_validate( + conn, aoi = "AAAA", cfg = lnk_config("default"), + loaded = ld, species = "BT", schema = s, + observations = mine, match_types = NULL, source_exclude = NULL) + sm <- v$summary + expect_identical(sm$n_obs[sm$stage == "any"], 2L) + expect_identical(sm$n_obs[sm$stage == "spawn"], 1L) +}) + test_that("buffer_m captures habitat upstream along the same stream", { conn <- validate_conn() s <- local_validate_fixture(conn)