generated from NewGraphEnvironment/fish_passage_skeena_2022_reporting
-
Notifications
You must be signed in to change notification settings - Fork 2
/
0300-methods.Rmd
338 lines (213 loc) · 29.7 KB
/
0300-methods.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
# Methods
Workflows for the project have been classified into planning, fish passage assessments, habitat confirmation assessments, reporting and mapping. All components leveraged `R`, `SQL` or `Python` programming languages to facilitate workflow tracking, collaboration, transparency and continually improving research. Project workflows utilized local and remote `postgreSQL` databases as well as a "snapshot" of select datasets contained within a local `sqlite` database. A data and script repository to facilitate this reporting is located on [Github](https://github.com/NewGraphEnvironment/fish_passage_skeena_2023_reporting).
```{r eval=F}
source('scripts/packages.R')
source('scripts/tables.R')
# or the development version
# devtools::install_github("rstudio/bookdown")
```
## Collaborative GIS Environment
Geographical Information Systems are essential for developing and communicating restoration plans as well as the reasons
they are required and how they are developed. Without the ability to visualize the landscape and the data that is used
to make decisions it is difficult to conduct and communicate the need for restoration, the details of past and future
plans as well as and the potential results of physical works.
<br>
To facilitate the planning and implementation of restoration activities a collaborative GIS environment has been
established using [QGIS](https://qgis.org/en/site/) served on the cloud using source code kept stored
[here](https://github.com/MerginMaps). This environment is intended to be a space where project team members can access
and view and contribute to the amalgamation of background spatial data and the development of restoration as well as
monitoring for the project. The collaborative GIS environment allows users to view, edit, and analyze shared up to date
spatial data on personal computers in an office setting as well as phones and tablets in the field. At the time of
reporting, the environment was being used to develop and share maps, conduct spatial analyses, communicate restoration
plans to stakeholders as well as to provide a central place to store methodologies and tools for conducting field
assessments on standardized pre-developed digital forms. The platform can also be used to track the progress of
restoration activities and monitor changes in the landscape over time helping encourage the record keeping of past and
future restoration activities in a coordinated manner.
<br>
The shared QGIS project was created using scripts currently kept in
[`dff-2022`](https://github.com/NewGraphEnvironment/dff-2022) with the precise calls to project creation scripts tracked
in the `project_creation_and_permissions.txt` document kept in the main QGIS project directory. Information about how
GIS project creation and update scripts function can be viewed
[here](https://github.com/NewGraphEnvironment/dff-2022/tree/master/scripts/qgis) with outcomes of their use summarized
below:
- download and clip user specified layers from the [BC Data Catalougue](https://catalogue.data.gov.bc.ca/) as well as data layers stored in custom Amazon Web Services buckets for an area of interest defined by a list of watershed groups and load to a geopackage called `background_layers.gpkg` stored in the main directory of the project.
- A project directory is created to hold the spatial data and `QGIS` project information (ie. layer symbology and naming conventions, metadata, etc.).
- Metadata for individual project spatial layers is kept in the `rfp_tracking` table within the `background_layers.gpkg` along with tables related to user supplied stream width/gradient inputs to `bcfishpass` to model potentially high value habitat that is accessible to fish species of interest.
### Issue Tracking
"Issues" logged on the online github platform are effective ways to track tasks, enhancements, and bugs related to project components.
They can be referenced with the scripts, text and actions used to address them by linking documentation to the issues with text comments
or programatically through `git` commit messages. Issues for this project are kept [here](https://github.com/NewGraphEnvironment/fish_passage_skeena_2023_reporting/issues) as well as past years repositories
which can be found by searches including the keywords "Skeena" and "Bulkley" [here](https://github.com/NewGraphEnvironment?tab=repositories).
### Habitat Modelling
`bcfishpass` calculates the average gradient of BC Freshwater Atlas stream network lines at minimum 100m long intervals starting from the downstream end of the streamline segment and working upstream. The network lines are broken into max gradient categories with new segments created if and when the average slope of the stream line segment exceeds user provided thresholds. For this project, the user provided gradient thresholds used to delineate "potentially accessible habitat" were based on estimated max gradients that salmon (15% - coho and chinook) and steelhead (20%) are likely to be capable of ascending.
<br>
Through this initiative and other SERN/New Graph led initiatives, the Provincial Fish Passage Remediation Program and connectivity restoration planning by the Canadian Wildlife Federation [@mazany-wright_etal2021BulkleyRiver], `bcfishpass` has been designed to prioritize potential fish passage barriers for assessment or remediation. The software is under continual development and has been designed and constructed by @norris2021smnorrisbcfishpass using sql and python based shell script libraries to generate a simple model of aquatic habitat connectivity. The model identifies natural barriers (ex. steep gradients for extended distances) and hydroelectric dams to classifying the accessibility upstream by fish [@norris2021smnorrisbcfishpass]. On potentially accessible streams, scripts identify known barriers (ex. waterfalls >5m high) and additional anthropogenic features which are primarily road/railway stream crossings (i.e. culverts) that are potentially barriers. To prioritize these features for assessment or remediation, scripts report on how much modelled potentially accessible aquatic habitat the barriers may obstruct. The model can be refined with known fish observations upstream of identified barriers and for each crossing location, the area of lake and wetland habitat upstream, species documented upstream/downstream, an estimate of watershed area (on 2nd order and higher streams), mean annual precipitation weighted to upstream watershed area and channel width can be collated using `bcfishpass`, `fwapg` and `bcfishobs`. This, information, can be used to provides an indication of the potential quantity and quality of habitat potentially gained should fish passage be restored by comparing to user defined thresholds for the aforementioned parameters. A discussion of the methodology to derive channel width is below.
<br>
Gradient, channel size and stream discharge are key determinants of channel morphology and subsequently fish distribution. High value rearing, overwintering and spawning habitat preferred by numerous species/life stages of fish are often located within channel types that have relatively low gradients and large channel widths (also quantified by the amount of flow in the stream). Following delineation of "potentially accessible habitat", the average gradient of each stream segment within habitat classified as below the 15% and 20% thresholds was calculated and summed within species and life stage specific gradient categories. Average gradient of stream line segments can be calculated from elevations contained in the provincial freshwater atlas streamline dataset. To obtain estimates of channel width upstream of crossing locations, Where available, `bcfishpass` was utilized to pull average channel gradients from Fisheries Information Summary System (FISS) site assessment data [@moeStreamInventorySample] or PSCIS assessment data [@moe2021PSCISAssessments] and associate with stream segment lines. When both FISS and PSCIS values were associated with a particular stream segment, FISS channel width was used. When multiple FISS sites were associated with a particular stream segment a mean of the average channel widths was taken. To model channel width for 2nd order and above stream segments without associated FISS or PSCIS sites, first `fwapg` was used to estimate the drainage area upstream of the segment. Then, rasters from ClimateBC [@wang_etal2012ClimateWNAHighResolution] were sampled for each stream segments and a mean annual precipitation weighted by upstream watershed area was calculated. Mean annual precipitation was then combined with the channel widths and BEC zone information (gathered through a spatial query tied to the bottom of the stream segment) into a dataset (n = 22990) for analysis fo the relationship between these variables. The details of this analysis and resulting formula used to estimate channel width on stream segments in the Skeena Watershed is included as a technical appendix `r if(gitbook_on){knitr::asis_output("[here](https://www.poissonconsulting.ca/f/859859031)")} else knitr::asis_output("at https://www.poissonconsulting.ca/f/859859031")`.
<br>
`bcfishpass` and associated tools have been designed to be flexible in analysis, accepting user defined gradient, channel width and stream discharge categories [@moeStreamInventorySample]. Although currently in draft form, and subject to development revisions, gradient and channel width thresholds for habitat with the highest intrinsic value for a number of fish species in the Skeena watershed groups have been specified and applied to model habitat upstream of stream crossing locations with the highest intrinsic value (Table \@ref(tab:tab-fish-spawning-rearing)). Thresholds were derived based on a literature review with references provided in Table \@ref(tab:tab-fish-spawning-rearing-references). Output parameters for modelling are presented in Table \@ref(tab:tab-bcfp-def).
`r if(gitbook_on){knitr::asis_output("<br>")} else knitr::asis_output("<br><br><br>")`
```{r tab-fish-spawning-rearing}
#`r if(identical(gitbook_on, FALSE)){knitr::asis_output("<br><br><br>")}`
bcfishpass_spawn_rear_model %>%
mutate(Species = fishbc::fbc_common_name(species_code),
spawn_gradient_max = round(spawn_gradient_max * 100 ,1),
rear_gradient_max = round(rear_gradient_max * 100 ,1)) %>%
select(Species,
`Spawning Gradient Max (%)`= spawn_gradient_max,
`Spawning Width Min (m)` = spawn_channel_width_min,
# `Spawning Width Max (m)` = spawn_channel_width_max,
# `Spawning MAD Min (m3/s)` = spawn_mad_min,
# `Spawning MAD Max (m3/s)` = spawn_mad_max,
`Rearing Gradient Max (%)` = rear_gradient_max,
`Rearing Width Min (m)` = rear_channel_width_min) %>%
# `Rearing MAD Min (m3/s)` = rear_mad_min,
# `Rearing MAD Max (m3/s)` = rear_mad_max,
# `Rearing Wetland Multiplier` = rear_wetland_multiplier,
# `Rearing Lake Multiplier` = rear_lake_multiplier) %>%
t() %>%
as_tibble(rownames = "row_names") %>%
janitor::row_to_names(row_number = 1) %>%
rename(Variable = Species) %>%
select(-`Westslope Cutthroat Trout`,
-`Arctic Grayling`,
-`Kokanee`,
-`Bull Trout`,
-`Rainbow Trout`) %>%
fpr::fpr_kable(caption_text = 'Stream gradient and channel width thresholds used to model potentially highest value fish habitat.', scroll = F)
```
<br>
```{r tab-fish-spawning-rearing-references}
bcfishpass_spawn_rear_model %>%
# remove arctic grayling and kokannee for this study area
dplyr::filter(species_code %in% c("BT", "CH", "CO", "ST")) %>%
mutate(Species = fishbc::fbc_common_name(species_code),
# for spawn_gradient_max and rear_gradient_max multiply by 100 and round to 1 digit)
spawn_gradient_max = round(spawn_gradient_max * 100 ,1),
rear_gradient_max = round(rear_gradient_max * 100 ,1)) |>
select(Species,
`Spawning Gradient Max (%)`= spawn_gradient_max,
`Spawning Width Min (m)` = spawn_channel_width_min,
# `Spawning Width Max (m)` = spawn_channel_width_max_ref,
# `Spawning MAD Min (m3/s)` = spawn_mad_min,
# `Spawning MAD Max (m3/s)` = spawn_mad_max,
`Rearing Gradient Max (%)` = rear_gradient_max) %>%
# `Rearing Wetland Multiplier` = rear_wetland_multiplier,
# `Rearing Lake Multiplier` = rear_lake_multiplier) %>%
# `Rearing MAD Min (m3/s)` = rear_mad_min,
# `Rearing MAD Max (m3/s)` = rear_mad_max) %>%
t() %>%
as_tibble(rownames = "row_names") |>
janitor::row_to_names(row_number = 1) |>
rename(Variable = Species) %>%
fpr::fpr_kable(caption_text = 'References for stream gradient and channel width thresholds used to model potentially highest value fish habitat. Preliminary and subject to revisions.', scroll = F)
```
<br>
```{r tab-bcfp-def}
xref_bcfishpass_names %>%
filter(id_side == 1) %>%
arrange(id_join) %>%
select(Attribute = report, Definition = column_comment) %>%
fpr::fpr_kable(caption_text = 'bcfishpass outputs and associated definitions',
footnote_text = 'Steelhead model uses a gradient threshold of maximum 20% to determine if access if likely possible',
scroll = gitbook_on)
```
```{r tablethreshaverage, eval= F}
#to quantify upstream habitat potentially available for salmonids and facilitate stream line symbology based on stream morphology.
# while high gradient sections typically present upstream migration barriers and less available habitat. Additionally, the size of the stream (indicated by channel width) is an important determinant for habitat suitability for different species as well as specific life stages of those species.
# `bcfishpass` was used to categorize and sum potentially accessible stream segments in the study area watersheds within gradient and width categories for each stream segment.
# (0 - 3%, 3 - 5%, 5 - 8%, 8 - 15%, 15 - 20%) with these outputs further amalgamated to summarize and symbolize potential upstream habitat in three categories: riffle/cascade (0 - 5%), step-pool (5 - 15%) and step-pool very steep (15-20%) (Table \@ref(tab:tablethreshaverage)).
#threshold and average gradient table
table_thresh_average <- tibble::tibble(`Gradient` = c('0 - 5%', '5 - 15%', '15 - 20%', '>20%'),
`Channel Type` = c('Riffle and cascade pool', 'Step pool', 'Step pool - very steep', 'Non fish habitat'))
table_thresh_average %>%
fpr::fpr_kable(caption_text = 'Stream gradient categories (threshold and average) and associated channel type.')
```
<br>
## Fish Passage Assessments
In the field, crossings prioritized for follow-up were first assessed for fish passage following the procedures outlined in “Field Assessment for Determining Fish Passage Status of Closed Bottomed Structures” [@fish_passage_assessments]. Crossings surveyed included closed bottom structures (CBS), open bottom structures (OBS) and crossings considered “other” (i.e. fords). Photos were taken at surveyed crossings and when possible included images of the road, crossing inlet, crossing outlet, crossing barrel, channel downstream and channel upstream of the crossing and any other relevant features. The following information was recorded for all surveyed crossings: date of inspection, crossing reference, crew member initials, Universal Transverse Mercator (UTM) coordinates, stream name, road name and kilometer, road tenure information, crossing type, crossing subtype, culvert diameter or span for OBS, culvert length or width for OBS. A more detailed “full assessment” was completed for all closed bottom structures and included the following parameters: presence/absence of continuous culvert embedment (yes/no), average depth of embedment, whether or not the culvert bed resembled the native stream bed, presence of and percentage backwatering, fill depth, outlet drop, outlet pool depth, inlet drop, culvert slope, average downstream channel width, stream slope, presence/absence of beaver activity, presence/absence of fish at time of survey, type of valley fill, and a habitat value rating. Habitat value ratings were based on channel morphology, flow characteristics (perennial, intermittent, ephemeral), fish migration patterns, the presence/absence of deep pools, un-embedded boulders, substrate, woody debris, undercut banks, aquatic vegetation and overhanging riparian vegetation (Table \@ref(tab:tab-hab-value)). For crossings determined to be potential barriers or barriers based on the data (see [Barrier Scoring]), a culvert fix and recommended diameter/span was proposed.
<br>
```{r tab-hab-value}
fpr_table_habvalue %>%
knitr::kable(caption = 'Habitat value criteria (Fish Passage Technical Working Group, 2011).', booktabs = T) %>%
kableExtra::column_spec(column = 1, width_min = '1.5in') %>%
kableExtra::kable_styling(c("condensed"), full_width = T, font_size = font_set)
```
`r if(gitbook_on){knitr::asis_output("<br>")} else knitr::asis_output("\\pagebreak")`
### Barrier Scoring
Fish passage potential was determined for each stream crossing identified as a closed bottom structure as per @fish_passage_assessments. The combined scores from five criteria: depth and degree to which the structure is embedded, outlet drop, stream width ratio, culvert slope, and culvert length were used to screen whether each culvert was a likely barrier to some fish species and life stages (Table \@ref(tab:tab-barrier-scoring), Table \@ref(tab:tab-barrier-result). These criteria were developed based on data obtained from various studies and reflect an estimation for the passage of a juvenile salmon or small resident rainbow trout [@clarkinNationalInventoryAssessment2005 ;@bellFisheriesHandbookEngineering1991; @thompsonAssessingFishPassage2013].
<br>
```{r tab-barrier-scoring, eval=T}
tab <- as_tibble(t(fpr_table_barrier_scoring)) %>%
mutate(V4 = names(fpr_table_barrier_scoring)) %>%
select(V4, everything()) %>%
janitor::row_to_names(1) %>% ##turn the table sideways
mutate(Risk = case_when(Risk == 'Value' ~ ' Value',
T ~ Risk))
tab %>%
fpr::fpr_kable(caption_text = 'Fish Barrier Risk Assessment (MoE 2011).', scroll = F)
```
<br>
```{r tab-barrier-result}
fpr_table_barrier_result %>%
fpr::fpr_kable(caption_text = 'Fish Barrier Scoring Results (MoE 2011).', scroll = F)
```
<br>
### Cost Benefit Analysis
A cost benefit analysis was conducted for each crossing determined to be a barrier based on an estimate of cost associated with remediation or replacement of the crossing with a structure that facilitates fish passage and the amount of potential habitat that would be made available by remediating fish passage at the site (habitat gain index).
<br>
#### Habitat Gain Index
The habitat gain index is the quantity of modelled habitat upstream of the subject crossing and represents an estimate of habitat gained with remediation of fish passage at the crossing. For this project, a gradient threshold between accessible and non-accessible habitat was set at 20% (for a minimimum length of 100m) intended to represent the maximum gradient of which the strongest swimmers of anadromous species (steelhead) are likely to be able to migrate upstream.
<br>
For reporting of Phase 1 - fish passage assessments within the body of this report (Table \@ref(tab:tab-barrier-scoring)), a "total" value of habitat <20% output from `bcfishpass` was used to estimate the amount of habitat upstream of each crossing less than 20% gradient before a falls of height >5m - as recorded in @ProvincialObstaclesFish or documented in other `bcfishpass` online documentation. For Phase 2 - habitat confirmation sites, conservative estimates of the linear quantity of habitat to be potentially gained by fish passage restoration, steelhead rearing maximum gradient threshold (7.4%) was used. To generate areas of habitat upstream, the estimated linear length was multiplied by half the downstream channel width measured (overall triangular channel shape) as part of the fish passage assessment protocol. Although these estimates are not generally conservative, have low accuracy and do not account for upstream stream crossing structures they allow a rough idea of the best candidates for follow up.
<br>
Potential options to remediate fish passage were selected from @fish_passage_assessments and included:
+ Removal (RM) - Complete removal of the structure and deactivation of the road.
+ Open Bottom Structure (OBS) - Replacement of the culvert with a bridge or other open bottom structure. Based on consultation with FLNR road crossing engineering experts, for this project we considered bridges as the only viable option for OBS type .
+ Streambed Simulation (SS) - Replacement of the structure with a streambed simulation design culvert. Often achieved by embedding the culvert by 40% or more. Based on consultation with FLNR engineering experts, we considered crossings on streams with a channel width of <2m and a stream gradient of <8% as candidates for replacement with streambed simulations.
+ Additional Substrate Material (EM) - Add additional substrate to the culvert and/or downstream weir to embed culvert and reduce overall velocity/turbulence. This option was considered only when outlet drop = 0, culvert slope <1.0% and stream width ratio < 1.0.
+ Backwater (BW) - Backwatering of the structure to reduce velocity and turbulence. This option was considered only when outlet drop < 0.3m, culvert slope <2.0%, stream width ratio < 1.2 and stream profiling indicates it would be effective..
<br>
Cost estimates for structure replacement with bridges and embedded culverts were generated based on the channel width, slope of the culvert, depth of fill, road class and road surface type. Road details were sourced from @flnrordForestTenureRoad2020 and @flnrordDigitalRoadAtlas2020 through `bcfishpass`. Interviews with Phil MacDonald, Engineering Specialist FLNR - Kootenay, Steve Page, Area Engineer - FLNR - Northern Engineering Group and Matt Hawkins - MoTi - Design Supervisor for Highway Design and Survey - Nelson were utilized to helped refine estimates.
<br>
Base costs for installation of bridges on forest service roads and permit roads with surfaces specified in provincial GIS road layers as rough and loose was estimated at \$25000/linear m and assumed that the road could be closed during construction and a minimum bridge span of 15m. For streams with channel widths <2m, embedded culverts were reported as an effective solution with total installation costs estimated at $50k/crossing (pers. comm. Phil MacDonald, Steve Page) adjusted for inflation. For larger streams (>6m), span width increased proportionally to the size of the stream (ex. for an 8m wide stream a 12m wide span was prescribed). For crossings with large amounts of fill (>3m), the replacement bridge span was increased by an additional 3m for each 1m of fill >3m to account for cutslopes to the stream at a 1.5:1 ratio. To account for road type, a multiplier table was also generated to estimate incremental cost increases with costs estimated for structure replacement on paved surfaces, railways and arterial/highways costing up to 20 times more than forest service roads due to expenses associate with design/engineering requirements, traffic control and paving. The cost multiplier table (Table \@ref(tab:tab-cost-mult)) should be considered very approximate with refinement recommended for future projects.
`r if(gitbook_on){knitr::asis_output("<br>")} else knitr::asis_output("\\pagebreak")`
```{r tab-cost-mult, eval = T}
tab_cost_rd_mult_report %>%
fpr::fpr_kable(caption_text = 'Cost multiplier table based on road class and surface type.', scroll = F)
```
<br>
## Climate Change Risk Assessment
In collaboration with the Ministry of Transportation and Infrastructure (MoTi), a new climate change replacement program aims to prioritize vulnerable culverts for replacement (pers. comm Sean Wong, 2022) based on data collected and ranked related to three categories - culvert condition, vulnerability and priority. Within the "condition" risk category - data was collected and crossings were ranked based on erosion, embankment and blockage issues. The "climate" risk category included ranked assessments of the likelihood of both a flood event affecting the culvert as well as the consequence of a flood event affecting the culvert. Within the "priority" category the following factors were ranked - traffic volume, community access, cost, constructability, fish bearing status and environmental impacts (Table \@ref(tab:tab-moti-params)). This project is still in its early stages with methodology changes likely going forward.
<br>
```{r tab-moti-params}
xref_moti_climate_names %>%
slice(7:nrow(xref_moti_climate_names)) %>%
select(spdsht, report) %>%
rename(Parameter = spdsht, Description = report) %>%
fpr::fpr_kable(caption_text = 'Climate change data collected at MoTi culvert sites', scroll = gitbook_on)
```
## Habitat Confirmation Assessments
Following fish passage assessments, habitat confirmations were completed in accordance with procedures outlined in the document “A Checklist for Fish Habitat Confirmation Prior to the Rehabilitation of a Stream Crossing” [@confirmation_checklist_2011]. The main objective of the field surveys was to document upstream habitat quantity and quality and to determine if any other obstructions exist above or below the crossing. Habitat value was assessed based on channel morphology, flow characteristics (perennial, intermittent, ephemeral), the presence/absence of deep pools, un-embedded boulders, substrate, woody debris, undercut banks, aquatic vegetation and overhanging riparian vegetation. Criteria used to rank habitat value was based on guidelines in @confirmation_checklist_2011 (Table \@ref(tab:tab-hab-value)).
<br>
During habitat confirmations, to standardize data collected and facilitate submission of the data to provincial databases, information was collected on ["Site Cards"](https://www2.gov.bc.ca/gov/content/environment/natural-resource-stewardship/laws-policies-standards-guidance/inventory-standards/aquatic-ecosystems). Habitat characteristics recorded included channel widths, wetted widths, residual pool depths, gradients, bankfull depths, stage, temperature, conductivity, pH, cover by type, substrate and channel morphology (among others). When possible, the crew surveyed downstream of the crossing to the point where fish presence had been previously confirmed and upstream to a minimum distance of 600m. Any potential obstacles to fish passage were inventoried with photos, physical descriptions and locations recorded on site cards. Surveyed routes were recorded with time-signatures on handheld GPS units.
<br>
Fish sampling was conducted on a subset of sites when biological data was considered to add significant value to the physical habitat assessment information. When possible, electrofishing was utilized within discrete site units both upstream and downstream of the subject crossing with electrofisher settings, water quality parameters (i.e. conductivity, temperature and ph), start location, length of site and wetted widths (average of a minimum of three) recorded. For each fish captured, fork length and species was recorded, with results included within the fish data submission spreadsheet. Fish information and habitat data will be submitted to the province under scientific fish collection permit CB20-611971.
<br>
\pagebreak
## Reporting
Reporting was generated with `bookdown` [@yihui2024rstudiobookdown] from `Rmarkdown` [@allaire_etal2023rmarkdownDynamic] with primarily `R` [@rcoreteam2022languageenvironment] and `SQL` scripts. The `R` package `fpr` contains many specialized custom functions related to the work [@irvine2022NewGraphEnvironmentfpr]. In addition to numerous spatial layers sourced through the BC Data Catalogue then stored and queried in a local `postgresql` and `sqlite` databases [data inputs](https://github.com/NewGraphEnvironment/fish_passage_skeena_2023_reporting/tree/main/data) for this project include:
+ Populated [Fish Data Submission Spreadsheet Template - V 2.0, January 20, 2020 ](https://www2.gov.bc.ca/gov/content/environment/plants-animals-ecosystems/fish/fish-and-fish-habitat-data-information/fish-data-submission/submit-fish-data#submitfish)
+ Populated [pscis_assessment_template_v24.xls](https://www2.gov.bc.ca/gov/content/environment/plants-animals-ecosystems/fish/aquatic-habitat-management/fish-passage/fish-passage-technical/assessment-projects)
+ [`bcfishpass`](https://github.com/smnorris/bcfishpass) outputs.
+ [Custom CSV file](https://github.com/NewGraphEnvironment/fish_passage_skeena_2023_reporting/blob/main/data/habitat_confirmations_priorities.csv) detailing Phase 2 site:
- priority level for proceeding to design for replacement
- length of survey upstream and downstream
- a conservative estimate of the linear length of mainstem habitat potentially available upstream of the crossing
- fish species confirmed as present upstream of the crossing
+ [GPS tracks](https://github.com/NewGraphEnvironment/fish_passage_skeena_2023_reporting/blob/main/data/habitat_confirmation_tracks.gpx) from field surveys.
+ [Photos](https://github.com/NewGraphEnvironment/fish_passage_skeena_2023_reporting/tree/main/data/photos) and photo metadata
<br>
Version changes are tracked [here](https://github.com/NewGraphEnvironment/fish_passage_skeena_2023_reporting/blob/main/NEWS.md) and issues/planned enhancements tracked [here](https://github.com/NewGraphEnvironment/fish_passage_skeena_2023_reporting/issues).
## Mapping
Mapping was completed by Hillcrest Geographics. `pdf` maps were generated using `QGIS` with data supplied via a `postgreSQL` database. A QGIS layer file defining and symbolizing all layers required for general fish passage mapping was developed and at the time of reporting was kept under version control within `bcfishpass`.