From 8fdb231187793e2f730d4f93d06deb09962cedad Mon Sep 17 00:00:00 2001
From: David Blodgett <dblodgett@usgs.gov>
Date: Thu, 19 Dec 2024 11:51:34 -0600
Subject: [PATCH] remove unused files

---
 workspace/02_NHD_navigate.Rmd            | 1070 ----------------------
 workspace/02_NHD_navigate_Sp.Rmd         |  822 -----------------
 workspace/03_hyRefactor_flines.Rmd       |  198 ----
 workspace/04-1_hyRefactor_cats.Rmd       |   76 --
 workspace/04-2_aggregate_cats.Rmd        |  222 -----
 workspace/04_merge.Rmd                   |   15 -
 workspace/05-1_merge.Rmd                 |   94 --
 workspace/05-2_NonDend.Rmd               |  412 ---------
 workspace/runners/README.md              |   19 -
 workspace/runners/batch.sh               |   13 -
 workspace/runners/cleaner.R              |   70 --
 workspace/runners/local_batch.sh         |    9 -
 workspace/runners/make_docker_calls.Rmd  |  191 ----
 workspace/runners/make_shifter_calls.Rmd |   63 --
 workspace/runners/run_all_R.R            |   16 -
 workspace/runners/run_one_R.R            |   74 --
 16 files changed, 3364 deletions(-)
 delete mode 100644 workspace/02_NHD_navigate.Rmd
 delete mode 100644 workspace/02_NHD_navigate_Sp.Rmd
 delete mode 100644 workspace/03_hyRefactor_flines.Rmd
 delete mode 100644 workspace/04-1_hyRefactor_cats.Rmd
 delete mode 100644 workspace/04-2_aggregate_cats.Rmd
 delete mode 100644 workspace/04_merge.Rmd
 delete mode 100644 workspace/05-1_merge.Rmd
 delete mode 100644 workspace/05-2_NonDend.Rmd
 delete mode 100644 workspace/runners/README.md
 delete mode 100644 workspace/runners/batch.sh
 delete mode 100644 workspace/runners/cleaner.R
 delete mode 100644 workspace/runners/local_batch.sh
 delete mode 100644 workspace/runners/make_docker_calls.Rmd
 delete mode 100644 workspace/runners/make_shifter_calls.Rmd
 delete mode 100644 workspace/runners/run_all_R.R
 delete mode 100644 workspace/runners/run_one_R.R

diff --git a/workspace/02_NHD_navigate.Rmd b/workspace/02_NHD_navigate.Rmd
deleted file mode 100644
index 0fb348f..0000000
--- a/workspace/02_NHD_navigate.Rmd
+++ /dev/null
@@ -1,1070 +0,0 @@
----
-title: "MAPNAT POI Geneation"
-output: html_document
-editor_options:
-  chunk_output_type: console
----
-This notebook generates a network of Points of Interest harvested from Public 
-source that are used to generate a hydrofabric for use within the USGS
-MAPNAT Project.
-
-
-
-```{r setup_rmd, echo=FALSE, cache=FALSE}
-knitr::opts_chunk$set(
-  collapse = TRUE,
-  comment = "#>",
-  fig.width=6, 
-  fig.height=4,
-  cache=FALSE)
-```
-
-```{r setup}
-# Load custom functions
-source("R/utils.R")
-source("R/NHD_navigate.R")
-#source("R/test.R")
-
-# increase timeout for data downloads
-options(timeout=600)
-
-# Load Configuration of environment
-source("R/config.R")
-source("R/user_vars.R")
-
-# Gages output from Gage_selection
-gages <- read_sf(gage_info_gpkg, "Gages")
-
-# need some extra attributes for a few POI analyses
-#atts <- read_fst(data_paths$VAA_fst)
-atts_rds <- readRDS(data_paths$VAA_rds)
-```
-
-```{r huc12 POIs}
-#  Derive or load HUC12 POIs
-if(needs_layer(temp_gpkg, nav_poi_layer)) {
-  
-   nhd <- read_sf(nav_gpkg, nhd_flowline) 
-   if("POI_ID" %in% colnames(nhd)){
-     try(nhd <- select(nhd, -c(wb_id, POI_ID)), silent = TRUE) %>%
-       distinct()
-   }
-
-  # Some NHDPlus VPUs include HUCs from other VPUs
-  if(vpu_codes == "02"){
-    grep_exp <-"^02|^04"
-  } else if (vpu_codes == "08") {
-    grep_exp <- "^03|^08"
-  } else {
-    grep_exp <- paste0("^", substr(vpu_codes, start = 1, stop = 2))
-  }
-  
-  # Join HUC12 outlets with NHD
-  HUC12_COMIDs <- read_sf(data_paths$hu12_points_path, "hu_points") %>% 
-    filter(grepl(grep_exp, .data$HUC12)) %>%
-    select(COMID, HUC12) %>%
-    # Remove this when HUC12 outlets finished
-    group_by(COMID) %>% 
-    filter(row_number() == 1) %>%
-    ungroup()
-
-  # Create POIs - some r05 HUC12 POIs not in R05 NHD
-  huc12_POIs <- POI_creation(st_drop_geometry(HUC12_COMIDs), filter(nhd, poi == 1), "HUC12")
-
-  # Write out geopackage layer representing POIs for given theme
-  write_sf(huc12_POIs, temp_gpkg, nav_poi_layer)
-  tmp_POIs <- huc12_POIs
-} else {
-  # Load HUC12 POIs as the tmpPOIs if they already exist
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer) 
-  nhd <- read_sf(nav_gpkg, nhd_flowline)
-}
-
-mapview(filter(tmp_POIs, Type_HUC12 != ""), layer.name = "HUC12 POIs", col.regions = "red") 
-```
-
-```{r streamgage POIs}
-if(!"Type_Gages" %in% names(tmp_POIs)) { 
-
-  # Previously identified streamgages within Gage_Selection.Rmd
-  streamgages_VPU <- gages %>%
-    rename(COMID = comid) %>%
-    filter(COMID %in% nhd$COMID) %>%
-    inner_join(st_drop_geometry(st_drop_geometry(nhd), COMID, Divergence), by = "COMID") %>%
-    switchDiv(., nhd) %>%
-    filter(drain_area > min_da_km_gages)
-  
-  streamgages <- streamgages_VPU %>% 
-    group_by(COMID) %>%
-    # If multiple gages per COMID, pick one with highest rank as rep POI_ID
-    filter(gage_score == max(gage_score), !is.na(drain_area)) %>%
-    ungroup() 
-    
-  # Derive GAGE POIs; use NHD as we've already filtered by NWIS DA in the Gage selection step
-  gages_POIs <- gage_POI_creation(tmp_POIs, streamgages, filter(nhd, poi == 1), combine_meters, reach_meas_thresh)
-  tmp_POIs <- gages_POIs$tmp_POIs
-  events <- rename(gages_POIs$events, POI_identifier = Type_Gages)
-  
-  # As a fail-safe, write out list of gages not assigned a POI
-  if(nrow(filter(streamgages_VPU, !site_no %in% tmp_POIs$Type_Gages)) > 0) {
-    write_sf(filter(streamgages_VPU, !site_no %in% tmp_POIs$Type_Gages) %>%
-               rename(nhd_reachcode = REACHCODE),
-             temp_gpkg, "unassigned_gages")
-    
-    # Start documenting gages that are dropped out; these gages have no mean daily Q
-    document_dropped_gage(filter(streamgages_VPU, !site_no %in% tmp_POIs$Type_Gages) %>%
-                    select(site_no),
-              "Gages_info", paste0("VPU ", vpu_codes, "; low gage score"))
-    
-  }
-  
-  # Write out events and outelts
-  write_sf(events, temp_gpkg, split_layer)
-  # Write out geopackage layer representing POIs for given theme
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-  events <- read_sf(temp_gpkg, split_layer)
-}
-
-#mapview(filter(tmp_POIs, !is.na(Type_Gages)), layer.name = "Streamgage POIs", col.regions = "blue") 
-```
-
-```{r TE POIs}
-if(!"Type_TE" %in% names(tmp_POIs)) {
-  
-  if(vpu_codes == "08"){
-    nhd$VPUID <- "08"
-  } else {
-    nhd$VPUID <- substr(nhd$RPUID, 1, 2)
-  }
-  
-  # Read in Thermoelectric shapefile for 2015 estimates
-  TE_v1 <- read_sf(data_paths$TE_points_path, 
-                          "2015_TE_Model_Estimates_lat.long_COMIDs")
-  # Read in Thermoelectric Plants csv for updated estimates  
-  TE_v2 <- read.csv(file.path(data_paths$TE_points_path, 
-                                     "te_plants.csv"), 
-                             colClasses = "character") %>%
-    mutate(Plant.Code = as.integer(Plant.Code))
-    
-  # Bind hydrographic address information together and get final COMIDs
-  TE_COMIDs_full <- TE_v2 %>%
-    filter(water_source %in% c("sw_fresh", "gw_fresh", "gw_sw_mix")) %>%
-    left_join(select(st_drop_geometry(TE_v1), 
-                     Plant.Code = EIA_PLANT_, COMID), by = "Plant.Code") %>%
-    left_join(rename(st_drop_geometry(HUC12_COMIDs), huc12_comid = COMID),
-              by = c("huc_12" = "HUC12")) %>%
-    mutate(COMID = ifelse(is.na(COMID), huc12_comid, COMID)) %>%
-    select(-huc12_comid)
-  
-  # Prepare TE for POI Creation
-  TE_COMIDs <- TE_COMIDs_full %>%
-    inner_join(select(st_drop_geometry(nhd), COMID, VPUID), by = "COMID") %>%
-    filter(grepl(paste0("^", substr(vpu_codes, 1, 2), ".*"), .data$VPUID), COMID > 0) %>%
-    switchDiv(., nhd) %>%
-    group_by(COMID) %>%
-    summarize(eia_id = paste0(unique(Plant.Code), collapse = " "), count = n()) %>%
-    ungroup()
-  
-  if(nrow(TE_COMIDs) > 0){
-    # Derive TE POIs
-    tmp_POIs <- POI_creation(st_drop_geometry(TE_COMIDs), filter(nhd, poi == 1), "TE") %>%
-      addType(., tmp_POIs, "TE", nexus = TRUE) 
-
-    # As a fail-safe, write out list of TE plants not assigned a POI
-    if(nrow(filter(TE_COMIDs, !COMID %in% tmp_POIs$COMID)) > 0) {
-      write_sf(filter(TE_COMIDs, !COMID %in% tmp_POIs$COMID),
-               temp_gpkg, "unassigned_TE")
-      
-      # Write out geopackage layer representing POIs for given theme
-      write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-    }
-  } else {
-    print ("no TEs in VPU")
-  }
-  
-} else {
-  # Load TE POIs if they already exist
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-
-#mapview(filter(tmp_POIs, Type_TE != ""), layer.name = "TE Plant POIs", col.regions = "blue") 
-```
-
-```{r WB mods}
-
-# Waterbodies sourced from NHD waterbody layer for entire VPU
-WBs_VPU_all <- filter(readRDS(data_paths$waterbodies_path), 
-                      COMID %in% nhd$WBAREACOMI) %>%
-  filter(FTYPE != "SwampMarsh") %>%
-  mutate(FTYPE = as.character(FTYPE),
-         source = "NHDv2WB",
-         wb_id = ifelse(GNIS_ID == " ", COMID, GNIS_ID)) %>%
-  st_transform(geo_crs) %>%
-  st_make_valid()
-
-write_sf(WBs_VPU_all, temp_gpkg, "wbs_draft")
-
-if(needs_layer(temp_gpkg, "WBs_layer_orig")){
-  sf_use_s2(FALSE)
-  ref_WB <- WBs_VPU_all %>%
-    group_by(wb_id, GNIS_NAME) %>%
-    sfheaders::sf_remove_holes() %>%
-    summarize(do_union = TRUE, member_comid = paste(COMID, collapse = ",")) %>%
-    st_make_valid() %>%
-    ungroup() %>%
-    mutate(area_sqkm = as.numeric(st_area(.)) / 1000000) %>%
-    mutate(source = "NHDv2WB") %>%
-    st_cast("MULTIPOLYGON")
-    #sf_use_s2(TRUE)
-  
-  write_sf(ref_WB, temp_gpkg, "WBs_layer_orig")
-} else {
-  ref_WB <- read_sf(temp_gpkg, "WBs_layer_orig")
-}
-```
-
-```{r resops}
-# # 1: Many based on original GNIS_ID
-if(!"Type_resops" %in% names(tmp_POIs)){
-
-  # Unnest wb_poi_lst
-  wb_table <- st_drop_geometry(ref_WB) %>%
-    dplyr::mutate(member_comid = strsplit(member_comid, ",")) %>%
-    tidyr::unnest(cols = member_comid) %>%
-    mutate(member_comid = as.character(member_comid)) %>%
-    distinct()
-
-  # TODO: get this file from data.json
-  # ResOpsUS locations with attributes from the VPU NHDv2 wb set
-  resops_wb_df <- read.csv("data/reservoir_data/istarf_xwalk_final_48_gfv11.csv") %>%
-    # Subset to VPU, only one DAMID per waterbody
-    filter(flowlcomid %in% nhd$COMID | 
-             wbareacomi %in% wb_table$member_comid) %>%
-    dplyr::select(grand_id, nid_source_featureid, source = comi_srclyr,  
-                   flowlcomid, wbareacomi, hr_permid, onoffnet) %>%
-    mutate(wbareacomi = as.character(wbareacomi)) %>%
-    # Link to waterbody table
-    left_join(distinct(wb_table, member_comid, wb_id), 
-              by = c("wbareacomi" = "member_comid")) %>%
-    left_join(select(st_drop_geometry(WBs_VPU_all), wbareacomi = COMID, 
-                     wb_id2 = wb_id) %>%
-                mutate(wbareacomi = as.character(wbareacomi)), 
-              by = "wbareacomi") %>%
-    mutate(wb_id = ifelse(is.na(wb_id), wb_id2, wb_id),
-           wbareacomi = ifelse(wbareacomi == -2, 
-                               hr_permid, wbareacomi)) %>%
-    select(-c(wb_id2)) 
-  
-  # POIs with waterbody IDs in reference waterbodies
-  resops_wb_pois <- filter(ref_WB, wb_id %in% resops_wb_df$wb_id) %>%
-    inner_join(select(st_drop_geometry(resops_wb_df), grand_id,
-                      NID_ID = nid_source_featureid,
-                      resops_flowlcomid = flowlcomid, wb_id),
-               by = "wb_id") %>%
-    #mutate(source = "ref_WB") %>%
-    group_by(wb_id) %>%
-    filter(n() == 1) %>%
-    st_as_sf()
-  
-  # Add ResOPsUS locations to waterbody list with attributed NID and resops data
-  if(nrow(resops_wb_pois) > 0){
-    wb_poi_lst_filtered <- filter(ref_WB, !wb_id %in% resops_wb_pois$wb_id, 
-                                  !is.na(wb_id)) 
-
-    wb_poi_lst <- data.table::rbindlist(list(wb_poi_lst_filtered, resops_wb_pois), 
-                                        fill = TRUE) %>%
-      mutate(accounted = 0) %>%
-      st_as_sf()
-
-  }
-  
-  # Reach resopsus
-  reach_resops <- filter(resops_wb_df, !wb_id %in% wb_poi_lst$wb_id,
-                         !source %in% c("NHDAREA", "HR ID AVAILABLE") |
-                           onoffnet == 0) %>%
-    mutate(Type_WBOut = NA) %>%
-    select(COMID = flowlcomid, resops = grand_id, Type_WBOut)
-  
-  # Existing reservoir-waterbody outlet POIs
-  exist_POIs_WB <- filter(resops_wb_df, flowlcomid %in% tmp_POIs$COMID) %>%
-    mutate(wb_id = ifelse(source == "NHDAREA", wbareacomi, wb_id)) %>%
-    filter(!is.na(wb_id)) %>%
-    select(COMID = flowlcomid, resops = grand_id, Type_WBOut = wb_id)
-  
-  # Resops POIs
-  resops_pois <- rbind(reach_resops, exist_POIs_WB)
-  
-  # Resops defined by reach
-  if(nrow(resops_pois) > 0){
-    # Resops POIs with no reservoirs, defined by reach
-    tmp_POIs <- POI_creation(resops_pois, filter(nhd, poi == 1), "resops") %>%
-      addType(., tmp_POIs, "resops", nexus = TRUE)
-
-    # Add waterbody attribute
-    tmp_POIs <- tmp_POIs %>%
-      left_join(select(resops_pois, COMID, Type_WBOut),
-                by = "COMID") %>%
-      mutate(Type_WBOut = ifelse(!nexus, 
-                                 Type_WBOut, NA))
-    
-    # Resops with reservoirs
-    resops_wb_df <- resops_wb_df %>%
-      mutate(accounted = ifelse(grand_id %in% tmp_POIs$Type_resops, 1, 0),
-             source = ifelse(grand_id %in% reach_resops$resops, "REACH", source))
-  }
-
-  write_sf(wb_poi_lst, temp_gpkg, WBs_layer)
-  write_sf(resops_wb_df, temp_gpkg, "wb_resops")
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-  wb_poi_lst <- read_sf(temp_gpkg, WBs_layer)
-  resops_wb_df <- read_sf(temp_gpkg,  "wb_resops")
-}
-```
-
-```{r Hilari}
-if(!"Type_hilarri" %in% names(tmp_POIs)){
-  
-  # 1: Many based on original GNIS_ID
-  wb_table <- st_drop_geometry(wb_poi_lst) %>%
-    dplyr::mutate(member_comid = strsplit(member_comid, ",")) %>%
-    tidyr::unnest(cols = member_comid) %>%
-    mutate(member_comid = as.integer(member_comid)) %>%
-    distinct()
-  
-  # Hilarri POI Points
-  hilarri_points <- read.csv("data/HILARRI/HILARRI_v2.csv", 
-                            colClasses = "character") %>%
-    mutate(nhdwbcomid = as.integer(nhdwbcomid)) %>%
-    filter(!dataset %in% c('Power plant only; no reservoir or inventoried dam'),
-           nhdv2comid %in% nhd$COMID) %>%
-    left_join(select(wb_table, member_comid, wb_id), 
-              by = c("nhdwbcomid" = "member_comid"))
-  
-  # Waterbodies linked to hilarri information
-  hil_wb_pois_rf <- wb_poi_lst %>%
-    inner_join(select(st_drop_geometry(hilarri_points), hilarriid, nhdwbcomid, 
-                      nidid_hill = nidid, wb_id),
-               by = "wb_id") %>%
-    group_by(wb_id) %>%
-    mutate(hilarriid = paste0(hilarriid, collapse = ","),
-           nidid_hill = paste0(nidid_hill, collapse = ",")) %>%
-    ungroup() %>%
-    distinct() %>%
-    st_as_sf() %>%
-    st_compatibalize(wb_poi_lst)
-  
-  # Add ResOPsUS locations to waterbody list 
-  if(nrow(hil_wb_pois_rf) > 0){
-    wb_poi_lst <- wb_poi_lst %>%
-      #filter(!is.na(resops_FlowLcomid)) %>%
-      left_join(select(st_drop_geometry(hil_wb_pois_rf), wb_id, hilarriid, 
-                       nidid_hill), by = "wb_id") %>%
-      mutate(NID_ID = ifelse(is.na(NID_ID), nidid_hill, NID_ID)) %>%
-      select(-nidid_hill) %>%
-      distinct()
-  }
-  
-  # Reach POIs
-  reach_pois <- filter(hilarri_points, !hilarriid %in% wb_poi_lst$hilarriid) %>%
-    select(COMID = nhdv2comid, hilarriid) %>%
-    mutate(COMID = as.integer(COMID)) %>%
-    group_by(COMID) %>%
-    filter(row_number() == 1) %>%
-    st_drop_geometry()
-  
-  # Make POIs for reach POIs
-  tmp_POIs <- POI_creation(reach_pois, filter(nhd, poi == 1), "hilarri") %>%
-    addType(., tmp_POIs, "hilarri", nexus = TRUE)
-  
-  # Write out geopackage layer representing POIs for given theme
-  write_sf(wb_poi_lst, temp_gpkg, WBs_layer)
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-  wb_poi_lst <- read_sf(temp_gpkg, WBs_layer)
-}
-```
-
-```{r waterbody outlet POIs}
-#  Derive or load Waterbody POIs ----------------------
-if("Type_WBOut" %in% names(tmp_POIs)) {
-
-  # Hillari IDs
-  hilarri_pois <- filter(tmp_POIs, !is.na(Type_hilarri))
-
-  # Get NHDARea polygons already define
-  nhd_area_vpu <- read_sf(data_paths$nhdplus_gdb, "NHDArea") %>%
-    select(COMID, AREASQKM) %>%
-    mutate(source = "NHDv2Area") %>%
-    st_compatibalize(wb_poi_lst)
-  
-  # Non-nhdv2 waterbodies from resopsus
-  other_wbs <- filter(resops_wb_df, !wb_id %in% wb_poi_lst$wb_id, 
-                      source != "REACH") %>%
-    select(grand_id, member_comid = wbareacomi, resops_flowlcomid = flowlcomid, 
-           source, accounted) %>%
-    left_join(select(st_drop_geometry(hilarri_pois), 
-                     COMID, hilarriid = Type_hilarri),
-                             by = c("resops_flowlcomid" = "COMID")) %>%
-    group_by(resops_flowlcomid) %>%
-    filter(row_number() == 1) %>%
-    ungroup() %>%
-    left_join(select(nhd_area_vpu, COMID) %>%
-                mutate(COMID = as.character(COMID)),
-              by = c("member_comid" = "COMID")) %>%
-    st_as_sf() %>%
-    mutate(wb_id = ifelse(source == "NHDAREA", member_comid, NA)) %>%
-    st_drop_geometry()
-
-  # copy empty geometries to wb_list for use in wb POI function
-  if(nrow(other_wbs) > 0){
-      wb_poi_list_fn <- data.table::rbindlist(list(wb_poi_lst, 
-                                                   other_wbs),
-                                          fill = TRUE) %>%
-        distinct() %>%
-        st_as_sf()
-  } else {
-    wb_poi_list_fn <- wb_poi_lst
-  }
-  
-  # Final waterbody list with all requirements
-  final_wb_list <- filter(wb_poi_list_fn,
-                          area_sqkm > wb_area_thresh |
-                            !is.na(resops_flowlcomid) |
-                            !is.na(hilarriid))
-
-  new_path <- "?prefix=StagedProducts/Hydrography/NHDPlusHR/VPU/Current/GDB/"
-  assign("nhdhr_file_list", new_path, envir = nhdplusTools:::nhdplusTools_env)
-
-  # fix something here
-  wb_layers <- wbout_POI_creaton(filter(nhd, poi == 1), final_wb_list, data_paths, tmp_POIs, proj_crs)
-
-  if(!is.data.frame(wb_layers)){
-    # write_sf(wb_layers$nhd_wb_table, temp_gpkg, "wb_flowpaths")
-    # 
-    wbs <- wb_layers$WBs
-    wb_pois <- wb_layers$POIs %>% filter(!is.na(Type_WBOut))
-    missing_wb <- filter(wbs, !wb_id %in% wb_pois$Type_WBOut)
-    print(nrow(missing_wb))
-
-    double_wb <- wbs %>% group_by(wb_id) %>% filter(n() > 1)
-    write_sf(double_wb, temp_gpkg, "double_wb")
-    
-    double_wb_pois <- wb_pois %>%
-      group_by(Type_WBOut) %>%
-      filter(n() > 1)
-    write_sf(double_wb_pois, temp_gpkg, "double_wb_pois")
-    
-    wb_missing_poi <- filter(wbs, 
-                              !wb_id %in% wb_pois$Type_WBOut)
-    write_sf(wb_missing_poi, temp_gpkg, "wb_missing_poi")
-    
-    poi_missing_wb <- filter(wb_pois, !Type_WBOut %in% wb_layers$WBs$wb_id)
-    write_sf(poi_missing_wb, temp_gpkg, "poi_missing_wb")
-  
-    #*************************************
-    if(all(!is.na(wb_layers$events))){
-      wb_events <- wb_layers$events %>%
-        select(COMID, REACHCODE, REACH_meas, POI_identifier = wb_id,
-               event_type, nexus) %>%
-        st_compatibalize(., events)
-
-      events <- rbind(events, wb_events)
-      write_sf(events, temp_gpkg, split_layer)
-    }
-
-    if(all(!is.na(wb_layers$events))){
-      # Write out events and outlets
-      if(!needs_layer(temp_gpkg, split_layer)){
-        events <- read_sf(temp_gpkg, split_layer) %>%
-          rbind(st_compatibalize(wb_events,.)) %>%
-          unique()
-
-        write_sf(events, temp_gpkg, split_layer)
-        } else {
-          write_sf(wb_events, nav_gpkg, split_layer)
-        }
-    }
-
-    tmp_POIs <- wb_layers$POIs
-    # Write out waterbodies
-    WB_VPU_pois <- wb_layers$WBs
-  } else {
-    tmp_POIs <- wb_layers
-    WB_VPU_pois <- final_wb_list
-  }
-
-  #12047928
-  wb_out_col <- wb_poi_collapse(tmp_POIs, nhd, events)
-  tmp_POIs <- wb_out_col$POIs
-
-  if(all(!is.na(wb_out_col$events_ret))){
-    write_sf(wb_out_col$events_ret, temp_gpkg, split_layer)
-  }
-
-  nhd <- wb_layers$nhd_wb_table
-  write_sf(nhd, nav_gpkg, nhd_flowline)
-  write_sf(WB_VPU_pois, temp_gpkg, WBs_layer)
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
- } else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-  nhd <- read_sf(nav_gpkg, nhd_flowline)
-  WB_VPU_pois <- read_sf(temp_gpkg, WBs_layer)
-}
-
-#mapview(filter(tmp_POIs, !is.na(Type_WBOut)), layer.name = "Waterbody outlet POIs", col.regions = "red")
-```
-
-```{r AR POIs}
-#  Derive or load Waterbody POIs ----------------------
-if(!"Type_AR" %in% names(tmp_POIs)) {
-  # Sparrow AR Events
-  ar_events <- readxl::read_xlsx(file.path(data_paths$USGS_IT_path, "ARevents_final7.xlsx")) %>%
-    filter(fromComid > 0 | ToComid > 0) %>%
-    select(COMID = NHDComid, AREventID) %>%
-    filter(COMID %in% nhd$COMID)
-
-  if(nrow(ar_events) > 0){
-    # AR POIs
-    tmp_POIs <- POI_creation(ar_events, nhd, "AR") %>%
-      addType(., tmp_POIs, "AR", nexus = TRUE)
-
-    write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-  } else {
-    print(paste0("No AR events in ", vpu_codes))
-  }
-
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-```
-
-```{r Terminal POIs}
-#  Derive or load Terminal POIs ----------------------
-if(!"Type_Term" %in% names(tmp_POIs)) {
-
-  # Terminal POIs on levelpaths with upstream POIs
-  term_paths <- filter(st_drop_geometry(nhd), Hydroseq %in% filter(nhd, COMID %in% tmp_POIs$COMID)$TerminalPa)
-
-  # Non-POI levelpath terminal pois, but meet size criteria
-  terminal_POIs <- st_drop_geometry(nhd) %>%
-    filter(Hydroseq == TerminalPa | (toCOMID == 0 | is.na(toCOMID) | !toCOMID %in% COMID)) %>%
-    filter(!COMID %in% term_paths$COMID, TotDASqKM >= min_da_km_terminal) %>%
-    bind_rows(term_paths) %>%
-    # Use level path identifier as Type ID
-    select(COMID, LevelPathI)
-
-  tmp_POIs <- POI_creation(terminal_POIs, nhd, "Term") %>%
-    addType(., tmp_POIs, "Term", nexus = TRUE)
-
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-  nhd <- read_sf(nav_gpkg, nhd_flowline)
-}
-
-mapview(filter(tmp_POIs, !is.na(Type_Term)), layer.name = "Terminal POIs", col.regions = "blue")
-```
-
-```{r Confluence POIs}
-# Derive POIs at confluences where they are absent ----------------------
-if(!"Type_Conf" %in% names(tmp_POIs)) {
-
-  # Navigate upstream from each POI and determine minimally-sufficient network between current POI sets
-  up_net <- unique(unlist(lapply(unique(tmp_POIs$COMID), \(x, nhdDF) get_UM(nhdDF, x), nhdDF = nhd)))
-  finalNet <- unique(NetworkConnection(up_net, st_drop_geometry(nhd)))
-
-  # Subset NHDPlusV2 flowlines to navigation results and write to shapefile
-  nhd <- mutate(nhd, minNet = ifelse(COMID %in% finalNet, 1, 0)) 
-
-  # Create new confluence POIs
-  conf_COMIDs <- st_drop_geometry(filter(nhd, minNet == 1)) %>%
-    # Downstream hydrosequence of 0 indicates
-    #   the flowline is terminating or
-    #   leaving the domain, so they
-    #   are excluded from this process
-    filter(DnHydroseq > 0) %>%
-    group_by(DnHydroseq) %>%
-    filter(n()> 1) %>%
-    mutate(Type_Conf = LevelPathI) %>%
-    ungroup() %>%
-    select(COMID, Type_Conf)
-
-  tmp_POIs <- POI_creation(conf_COMIDs, filter(nhd, minNet == 1), "Conf") %>%
-    addType(., tmp_POIs, "Conf", nexus = TRUE)
-
-  write_sf(nhd, nav_gpkg, nhd_flowline)
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  nhd <- read_sf(nav_gpkg, nhd_flowline)
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-
-mapview(filter(tmp_POIs, !is.na(Type_Conf)), layer.name = "Confluence POIs", col.regions = "blue")
-```
-
-```{r waterbody inlet POIs}
-#  Derive or load Waterbody POIs ----------------------
-if(!"Type_WBIn" %in% names(tmp_POIs)) {
-
-  wb_layers <- wbin_POIcreation(filter(nhd, minNet == 1), WB_VPU_pois, 
-                                data_paths, proj_crs, split_layer, tmp_POIs)
-  wb_in_col <- wb_inlet_collapse(wb_layers$POIs, nhd, events)
-  tmp_POIs <- wb_in_col$POIs
-  
-  if(!all(is.na(wb_layers$events))) {
-    wb_inlet_events <- wb_layers$events %>%
-        select(COMID, REACHCODE, REACH_meas, POI_identifier,
-               event_type, nexus) 
-    
-    # Write out events and outlets
-    if(!needs_layer(temp_gpkg, split_layer)){
-      events <- read_sf(temp_gpkg, split_layer) %>%
-        rbind(st_compatibalize(wb_inlet_events,.))
-      write_sf(events, temp_gpkg, split_layer)
-    } else {
-      write_sf(wb_inlet_events, nav_gpkg, split_layer)
-    }
-  }
-
-  #tmp_POIs$nexus <- ifelse(is.na(tmp_POIs$nexus), FALSE, tmp_POIs$nexus)
-  #tmp_POIs <- wb_layers$POIs
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-  nhd <- read_sf(nav_gpkg, nhd_flowline)
-}
-
-mapview(filter(tmp_POIs, !is.na(Type_WBIn)), layer.name = "Waterbody inlet POIs", col.regions = "blue") +
-  mapview(filter(tmp_POIs, !is.na(Type_WBOut)), layer.name = "Waterbody outlet POIs", col.regions = "red")
-``` 
-  
-```{r NID POIs}
-#  Derive or load NID POIs ----------------------
-if(!"Type_NID" %in% names(tmp_POIs)) {
-
-  # Read in NID shapefile
-  NID_COMIDs <- read_sf(data_paths$NID_points_path, "Final_NID_2018") %>%
-    st_drop_geometry() %>%
-    filter(EROM != 0, FlowLcomid %in% filter(nhd, dend ==1)$COMID) %>%
-    rename(COMID = FlowLcomid) %>%
-    switchDiv(., nhd) %>%
-    group_by(COMID) %>%
-    summarize(Type_NID = paste0(unique(NIDID), collapse = " "))
-
-  # Derive other NID POIs
-  tmp_POIs <- POI_creation(NID_COMIDs, nhd, "NID") %>%
-    addType(., tmp_POIs, "NID", nexus = FALSE, bind = FALSE)
-
-  # Write out geopackage layer representing POIs for given theme
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  # Load NID POIs if they already exist
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-
-mapview(filter(tmp_POIs, Type_NID != ""), layer.name = "NID POIs", col.regions = "blue")
-```
-
-```{r HW DA POIs}
-if(!"Type_DA" %in% names(tmp_POIs)){
-  
-  # derive incremental segments from POIs
-  inc_segs <- make_incremental_segments(nhd,
-                                filter(st_drop_geometry(nhd),
-                                       COMID %in% tmp_POIs$COMID)) %>%
-    # bring over VAA data
-    inner_join(select(atts_rds, COMID, 
-                      DnHydroseq, VA_MA, TOTMA, LENGTHKM, MAXELEVSMO,
-                      MINELEVSMO, WBAREACOMI, WBAreaType, FTYPE, StartFlag,
-                      AreaSqKM, TotDASqKM), by = "COMID")
-  
-  hw_segs <- inc_segs %>%
-    group_by(POI_ID) %>%
-    filter(any(StartFlag == 1)) %>%
-    filter(any(TotDASqKM > max_da_km_hw)) %>%
-    ungroup()
-  
-  att_group <- function(a, athres) {
-    #cumsum <- 0
-    group  <- 1
-    result <- numeric()
-    for (i in 1:length(a)) {
-      #cumsum <- cumsum + a[i]
-      tot_DA <- a[i]
-      if (tot_DA > athres) {
-        group <- group + 1
-        athres <- athres + athres
-      }
-      result = c(result, group)
-    }
-    return (result)
-  }  
-  
-  #TODO Add magic numbers to config file
-  hw_DA_splits <- hw_segs %>%
-    st_drop_geometry() %>%
-    #filter(.data$ID %in% cat$ID) %>%
-    group_by(POI_ID) %>%
-    arrange(-Hydroseq) %>%
-    mutate(ind = att_group(TotDASqKM, min_da_km_hw)) %>%
-    ungroup() %>%
-    group_by(POI_ID, ind) %>%
-    mutate(total_length = cumsum(LENGTHKM)) %>%
-    ungroup() %>%
-    group_by(POI_ID, ind) %>%
-    mutate(set = cur_group_id()) %>%
-    filter(TotDASqKM == max(TotDASqKM) & 
-           total_length > 5) %>%
-    mutate(da_class = paste(POI_ID, ind, sep = "_")) %>%
-    ungroup() %>%
-    select(-ind) %>%
-    filter(!COMID %in% tmp_POIs$COMID)
-
-  if(nrow(hw_DA_splits) > 0) {
-    tmp_POIs <- POI_creation(select(hw_DA_splits, COMID, da_class), 
-                             filter(nhd, poi == 1), "DA") %>%
-      addType(., tmp_POIs, "DA", nexus = TRUE)
-  }
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-```
-
-This chunk breaks up potential aggregated segments where the elevation range of the are contributing to the segment exceeds 500-m
-```{r Elevation Break POIs}
-if(!"Type_elev" %in% names(tmp_POIs)){
-
-  inc_segs <- make_incremental_segments(filter(nhd, minNet == 1), 
-                                filter(st_drop_geometry(nhd),
-                                       COMID %in% tmp_POIs$COMID)) %>%
-    # bring over VAA data
-    inner_join(select(atts_rds, COMID, 
-                      DnHydroseq, VA_MA, TOTMA, LENGTHKM, MAXELEVSMO,
-                      MINELEVSMO, WBAREACOMI, WBAreaType, FTYPE, StartFlag,
-                      AreaSqKM, TotDASqKM), by = "COMID")
-  
-  elev_fp <- inc_segs %>%
-    group_by(POI_ID) %>%
-    arrange(Hydroseq) %>%
-    # Get elevation info
-    mutate(MAXELEVSMO = na_if(MAXELEVSMO, -9998), MINELEVSMO = na_if(MINELEVSMO, -9998), 
-           elev_diff_seg = max(MAXELEVSMO) - min(MINELEVSMO),
-           total_length = cumsum(LENGTHKM)) %>%
-    filter((max(MINELEVSMO) - min(MINELEVSMO)) > elev_diff) %>%
-    mutate(inc_elev_diff = c(MINELEVSMO[1], (MINELEVSMO - lag(MINELEVSMO))[-1])) %>%
-    mutate(inc_elev_diff = ifelse(inc_elev_diff == MINELEVSMO, 0, inc_elev_diff)) %>%
-    ungroup()
-  
-  cs_group <- function(a, athres) {
-    cumsum <- 0
-    group  <- 1
-    result <- numeric()
-    for (i in 1:length(a)) {
-      cumsum <- cumsum + a[i]
-      if (cumsum > athres) {
-        group <- group + 1
-        cumsum <- a[i]
-      }
-      result = c(result, group)
-    }
-    return (result)
-  }  
-  
-  if(nrow(elev_fp) > 0){
-    #TODO Add magic numbers to config file
-    hw_elev_splits <- elev_fp %>%
-      st_drop_geometry() %>%
-      #filter(.data$ID %in% cat$ID) %>%
-      group_by(POI_ID) %>%
-      arrange(-Hydroseq) %>%
-      mutate(ind = cs_group(inc_elev_diff, elev_diff/2)) %>%
-      ungroup() %>%
-      group_by(POI_ID, ind) %>%
-      filter(TotDASqKM == max(TotDASqKM) &
-               total_length > 5) %>%
-      mutate(elev_class = paste(POI_ID, ind, sep = "_")) %>%
-      ungroup() %>%
-      select(-ind) %>%
-      filter(!COMID %in% tmp_POIs$COMID)
-  
-    if(nrow(hw_elev_splits) > 0) {
-      tmp_POIs <- POI_creation(select(hw_elev_splits, COMID, elev_class), 
-                               filter(nhd, poi == 1),
-                               "elev") %>%
-        addType(., tmp_POIs, "elev", nexus = TRUE)
-      write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-    }
-  }
-
-
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-
-```
-
-```{r Time of travel POIs}
-if(all(is.na(tmp_POIs$Type_Travel))) {
-
-  # derive incremental segments from POIs
-  inc_segs <- make_incremental_segments(nhd,
-                                filter(st_drop_geometry(nhd),
-                                       COMID %in% tmp_POIs$COMID, 
-                                       COMID %in% nhd$COMID)) %>%
-    # bring over VAA data
-    inner_join(select(atts_rds, COMID, DnHydroseq, VA_MA, TOTMA, LENGTHKM,
-                      MAXELEVSMO, MINELEVSMO, WBAREACOMI, WBAreaType, FTYPE,
-                      AreaSqKM, TotDASqKM), by = "COMID")
-
-  # TT POIs
-  tt_pois_split <- inc_segs %>%
-    arrange(-Hydroseq) %>%
-    # Should we substitute with a very small value
-    mutate(VA_MA = ifelse(VA_MA < 0, NA, VA_MA)) %>%
-    mutate(FL_tt_hrs = (LENGTHKM * ft_per_km)/ VA_MA / s_per_hr ) %>%
-    group_by(POI_ID) %>%
-    filter(sum(FL_tt_hrs) > travt_diff, max(TotDASqKM) > max_elev_TT_DA) %>%
-    mutate(cum_tt = cumsum(FL_tt_hrs),
-           hrs = sum(FL_tt_hrs)) 
-  
-  #TODO Add magic numbers to config file
-  tt_splits <- tt_pois_split %>%
-    st_drop_geometry() %>%
-    group_by(POI_ID) %>%
-    arrange(-Hydroseq) %>%
-    mutate(ind = cs_group(FL_tt_hrs, travt_diff * 0.75)) %>%
-    ungroup() %>%
-    group_by(POI_ID, ind) %>%
-    filter(TotDASqKM == max(TotDASqKM)) %>%
-    mutate(tt_class = paste(POI_ID, ind, sep = "_")) %>%
-    ungroup() %>%
-    select(-ind) %>%
-    filter(!COMID %in% tmp_POIs$COMID)
-  
-  if(nrow(tt_splits) > 0) {
-    tmp_POIs <- POI_creation(select(tt_splits, COMID, tt_class), 
-                             filter(nhd, poi == 1), "Travel") %>%
-      addType(., tmp_POIs, "Travel", nexus = TRUE)
-    
-    write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-  }
-
-}else{
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-
-```
-
-```{r Final POIs}
-# Derive final POI set ----------------------
-if(needs_layer(temp_gpkg, pois_all_layer)) {
-
-  unCon_POIs <- filter(tmp_POIs, COMID %in% filter(nhd, AreaSqKM == 0)$COMID)
-
-  # If any POIs happened to fall on flowlines w/o catchment
-  if (nrow(unCon_POIs) >0){
-    # For confluence POIs falling on Flowlines w/o catchments, derive upstream valid flowline,
-    poi_fix <- DS_poiFix(tmp_POIs, filter(nhd, minNet == 1))
-    new_POIs <- st_compatibalize(poi_fix$new_POIs, tmp_POIs)
-    xWalk <- poi_fix$xWalk
-
-    # POIs that didn't need to be moved
-    tmp_POIs_fixed <- filter(tmp_POIs, nexus == TRUE | 
-                               !COMID %in% c(poi_fix$xWalk$oldPOI, poi_fix$xWalk$COMID))
-    # bind together
-    final_POIs <- bind_rows(tmp_POIs_fixed, new_POIs) %>%
-      mutate(Type_Term = ifelse(nexus == 1, NA, Type_Term)) %>%
-      select(-dplyr::any_of(c("ID")))
-
-    # Write out fixes
-    write_sf(new_POIs, temp_gpkg, poi_moved_layer)
-    write_sf(xWalk, temp_gpkg, poi_xwalk_layer)
-    # write out final POIs
-    write_sf(final_POIs, temp_gpkg, pois_all_layer)
-  } else {
-    # If no fixes designate as NA
-    poi_fix <- NA
-
-    tmp_POIs$nexus <- as.integer(tmp_POIs$nexus)
-
-    # if a POI will be a nexus, it can not be terminal.
-    tmp_POIs <- mutate(tmp_POIs, Type_Term = ifelse(nexus == 1, NA, Type_Term))
-
-    # write out final POIs
-    write_sf(tmp_POIs, temp_gpkg, pois_all_layer)
-
-  }
-
-} else {
-  # Need all three sets for attribution below
-  final_POIs <- read_sf(temp_gpkg, pois_all_layer)
-  new_POIs <- if(!needs_layer(temp_gpkg, poi_moved_layer)) read_sf(temp_gpkg, poi_moved_layer) else (NA)
-  xWalk <- if(!needs_layer(temp_gpkg, poi_xwalk_layer)) read_sf(temp_gpkg, poi_xwalk_layer) else (NA)
-  unCon_POIs <- filter(st_drop_geometry(filter(nhd, minNet == 1)),
-                       COMID %in% tmp_POIs$COMID, AreaSqKM == 0)
-}
-``` 
-
-```{r Draft nsegment generation}
-### NEEDED?
-
-if(needs_layer(temp_gpkg, nsegments_layer)) {
-  
-  if("POI_ID" %in% colnames(nhd)){
-     nhd <- select(nhd, -POI_ID)
-  }
-  # Sort POIs by Levelpath and Hydrosequence in upstream to downstream order
-  seg_POIs <-  filter(st_drop_geometry(nhd), 
-                      COMID %in% tmp_POIs$COMID, COMID %in% filter(nhd, minNet == 1)$COMID)
-  # derive incremental segments from POIs
-  inc_segs <- make_incremental_segments(filter(nhd, minNet == 1), seg_POIs)
-
-  nhd_Final <- nhd %>%
-    left_join(select(inc_segs, COMID, POI_ID), by = "COMID")
-
-  # create and write out final dissolved segments
-  nsegments_fin <- segment_creation(nhd_Final, xWalk)
-  
-  nhd_Final <- select(nhd_Final, -POI_ID) %>%
-    left_join(distinct(st_drop_geometry(nsegments_fin$raw_segs), COMID, POI_ID), by = "COMID")
-  nsegments <- nsegments_fin$diss_segs
-
-  write_sf(nhd_Final, nav_gpkg, nhd_flowline)
-  write_sf(nsegments, temp_gpkg, nsegments_layer)
-} else {
-  # Read in NHDPlusV2 flowline simple features and filter by vector processing unit (VPU)
-  final_POIs <- read_sf(temp_gpkg, pois_all_layer)
-  nhd_Final <- read_sf(nav_gpkg, nhd_flowline)
-  nsegments <- read_sf(temp_gpkg, nsegments_layer)
-}
-
-# Ensure that all the problem POIs have been taken care of
-sub <- nhd_Final %>% filter(COMID %in% final_POIs$COMID)
-print (paste0(nrow(sub[sub$AreaSqKM == 0,]), " POIs on flowlines with no local drainage contributions"))
-noDA_pois <- filter(final_POIs, COMID %in% filter(sub, AreaSqKM == 0)$COMID)
-write_sf(noDA_pois, temp_gpkg, "noDA_pois")
-```
-
-```{r POI Collapse}
-# number POIs
-final_POIs_prec <- mutate(final_POIs, id = row_number(), moved = NA) %>%
-  write_sf(temp_gpkg, pois_all_layer) %>%
-  write_sf(nav_gpkg, nav_poi_layer)
-collapse <- TRUE
-
-# TODO: document what this is doing!
-source("R/poi_move.R")
-
-check_dups <- final_POIs %>%
-  group_by(COMID) %>%
-  filter(n() > 1) 
-
-if(nrow(filter(check_dups, all(c(0,1) %in% nexus))) != nrow(check_dups)){
-  print("Multiple POI ids at same geometric location")
-  no_dups <- filter(check_dups, all(c(0,1) %in% nexus))
-  dups <- filter(check_dups, !id %in% no_dups$id)
-  write_sf(dups, temp_gpkg, dup_pois)
-} else {
-  print("All double COMIDs nexus for gage or WB splitting")
-}
-
-mapview(final_POIs, layer.name = "All POIs", col.regions = "red") + 
-  mapview(nsegments, layer.name = "Nsegments", col.regions = "blue")
-```
-
-```{r lookup}
-# Final POI layer
-POIs <- final_POIs %>%
-  mutate(identifier = row_number())
-
-# Unique POI geometry
-final_POI_geom <- POIs %>%
-  select(identifier) %>%
-  cbind(st_coordinates(.)) %>%
-  group_by(X, Y) %>%
-  mutate(geom_id = cur_group_id()) %>%
-  ungroup()
-
-final_POIs_table <- POIs %>%
-  inner_join(select(st_drop_geometry(final_POI_geom), -X, -Y), by = "identifier")  %>%
-  select(-identifier) 
-
-# POI data theme table
-pois_data_orig <- reshape2::melt(st_drop_geometry(select(final_POIs_table,
-                                             -c(nexus, nonrefactor, id, moved))),
-                            id.vars = c("COMID", "geom_id")) %>%
-  filter(!is.na(value)) %>%
-  group_by(COMID, geom_id) %>%
-  mutate(identifier = cur_group_id()) %>%
-  rename(hy_id = COMID, poi_id = identifier, hl_reference = variable, hl_link = value) %>%
-  distinct() 
-
-if(exists("moved_pois_table")){
-  pois_data_moved <- select(st_drop_geometry(moved_pois_table), 
-                            hy_id = COMID, hl_link = new_val, hl_reference = moved_value) %>%
-    inner_join(distinct(pois_data_orig, hy_id, geom_id, poi_id), by = "hy_id") 
-  
-  pois_data <- data.table::rbindlist(list(pois_data_moved, pois_data_orig), use.names = TRUE) %>%
-    filter(!hl_reference %in% c("id", "moved"))
-} else {
-  pois_data <- pois_data_orig
-}
-
-# POI Geometry table
-poi_geometry <- select(final_POIs_table, hy_id = COMID, geom_id) %>%
-  inner_join(distinct(pois_data, hy_id, geom_id, poi_id),
-             by = c("hy_id" = "hy_id", "geom_id" = "geom_id")) %>%
-  distinct() %>%
-  st_as_sf()
-
-write_sf(pois_data, nav_gpkg, poi_data_table)
-write_sf(poi_geometry, nav_gpkg, poi_geometry_table)
-
-poi_geom_xy <- cbind(poi_geometry, st_coordinates(poi_geometry)) %>%
- st_drop_geometry()
-
-events_data <- events %>%
-  arrange(COMID) %>%
-  cbind(st_coordinates(.)) %>%
-  st_drop_geometry() %>%
-  group_by(COMID, REACHCODE, REACH_meas) %>%
-  mutate(event_id = cur_group_id()) %>%
-  rename(hy_id = COMID) %>%
-  ungroup()
-
-nexi <- filter(final_POIs_table, nexus == 1) %>%
-  cbind(st_coordinates(.)) %>%
-  select(hy_id = COMID, X, Y) %>%
-  inner_join(poi_geom_xy, by = c("hy_id" = "hy_id", "X" = "X", "Y" = "Y")) %>%
-  inner_join(events_data, by = c("hy_id" = "hy_id", "X" = "X", "Y" = "Y"), multiple = "all") %>%
-  select(hy_id, REACHCODE, REACH_meas, event_id, poi_id) %>%
-  group_by(hy_id, REACHCODE) %>%
-  filter(REACH_meas == min(REACH_meas)) %>%
-  ungroup()
-  #distinct(hy_id, REACHCODE, REACH_meas, event_id, poi_id)
-
-write_sf(select(events_data, -c(nexus, X, Y)), nav_gpkg, event_table)
-write_sf(nexi, nav_gpkg, event_geometry_table)
-
-#  Load data
-if(needs_layer(nav_gpkg, lookup_table_refactor)) {
-  full_cats <- readRDS(data_paths$fullcats_table)
-
-  lookup <- dplyr::select(sf::st_drop_geometry(nhd_Final),
-                          NHDPlusV2_COMID = COMID,
-                          realized_catchmentID = COMID,
-                          mainstem = LevelPathI) %>%
-    dplyr::mutate(realized_catchmentID = ifelse(realized_catchmentID %in% full_cats$FEATUREID,
-                                                realized_catchmentID, NA)) %>%
-    left_join(select(st_drop_geometry(poi_geometry), hy_id, poi_geom_id = geom_id), 
-              by = c("NHDPlusV2_COMID" = "hy_id"))
-
-  sf::write_sf(lookup, nav_gpkg, lookup_table_refactor)
-}
-```
diff --git a/workspace/02_NHD_navigate_Sp.Rmd b/workspace/02_NHD_navigate_Sp.Rmd
deleted file mode 100644
index a18d0f1..0000000
--- a/workspace/02_NHD_navigate_Sp.Rmd
+++ /dev/null
@@ -1,822 +0,0 @@
----
-title: "NHD Navigate"
-output: html_document
-editor_options:
-  chunk_output_type: console
----
-This notebook Generate Segments and POIS from POI data sources and builds
-a minimally-sufficient stream network connecting all POis, as well as generating first-cut of
-national segment network.
-
-```{r setup_rmd, echo=FALSE, cache=FALSE}
-knitr::opts_chunk$set(
-  collapse = TRUE,
-  comment = "#>",
-  fig.width=6, 
-  fig.height=4,
-  cache=FALSE)
-```
-
-```{r setup}
-# Load custom functions
-source("R/utils.R")
-source("R/NHD_navigate.R")
-
-# increase timeout for data downloads
-options(timeout=600)
-
-# Load Configuration of environment
-source("R/config.R")
-
-# Gages output from Gage_selection
-gages <- read_sf(gage_info_gpkg, "Gages")
-# need some extra attributes for a few POI analyses
-atts <- readRDS(file.path(data_paths$nhdplus_dir, "nhdplus_flowline_attributes.rds"))
-
-sparrow_dir <- "data/sparrow"
- 
-collapse <- TRUE
-```
-
-```{r huc12 POIs}
-#  Derive or load HUC12 POIs
-if(needs_layer(temp_gpkg, nav_poi_layer)) {
-  
-  nhd <- read_sf(nav_gpkg, nhd_flowline) 
-  try(nhd <- select(nhd, -c(minNet, WB, struct_POI, struct_Net, POI_ID, dend, poi)), silent = TRUE)
-  
-  # Some NHDPlus VPUs include HUCs from other VPUs
-  if(vpu == "02"){
-    grep_exp <-"^02|^04"
-  } else if (vpu == "08") {
-    grep_exp <- "^03|^08"
-  } else {
-    grep_exp <- paste0("^", substr(vpu, start = 1, stop = 2))
-  }
-  
-  # Join HUC12 outlets with NHD
-  HUC12_COMIDs <- read_sf(data_paths$hu12_points_path, "hu_points") %>% 
-    filter(grepl(grep_exp, .data$HUC12)) %>%
-    select(COMID, HUC12) %>%
-    # Remove this when HUC12 outlets finished
-    group_by(COMID) %>% 
-    filter(row_number() == 1) %>%
-    ungroup()
-
-  # Create POIs - some r05 HUC12 POIs not in R05 NHD
-  huc12_POIs <- POI_creation(st_drop_geometry(HUC12_COMIDs), nhd, "HUC12")
-  tmp_POIs <- huc12_POIs
-  
-  # Write out geopackage layer representing POIs for given theme
-  write_sf(huc12_POIs, temp_gpkg, nav_poi_layer)
-  tmp_POIs <- huc12_POIs
-} else {
-  # Load HUC12 POIs as the tmpPOIs if they already exist
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer) 
-  nhd <- read_sf(nav_gpkg, nhd_flowline)
-}
-
-mapview(filter(tmp_POIs, Type_HUC12 != ""), layer.name = "HUC12 POIs", col.regions = "red") 
-```
-
-```{r streamgage POIs}
-if(!"Type_Gages" %in% names(tmp_POIs)) { 
-  
-  ref_gages <- read_sf("data/ref_gages.gpkg")
-
-  # Previously identified streamgages within Gage_Selection.Rmd
-  streamgages_VPU <- gages %>%
-    rename(COMID = comid) %>%
-    filter(COMID %in% nhd$COMID) %>%
-    #st_drop_geometry() %>%
-    switchDiv(., nhd) 
-  
-  streamgages <- streamgages_VPU %>% 
-    group_by(COMID) %>%
-    # If multiple gages per COMID, pick one with highest rank as rep POI_ID
-    filter(gage_score == max(gage_score), !is.na(drain_area)) %>%
-    ungroup() %>%
-    select(COMID, site_no)
-    
-  # Derive TE POIs
-  tmp_POIs <- POI_creation(st_drop_geometry(streamgages), nhd, "Gages") %>%
-    addType(., tmp_POIs, "Gages", nexus = FALSE)
-  
-  # Write out geopackage layer representing POIs for given theme
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-
-mapview(filter(tmp_POIs, !is.na(Type_Gages)), layer.name = "Streamgage POIs", col.regions = "blue") 
-```
-
-# R01 - missing one
-```{r Sparrow Cal POIs}
-if(!"Type_Sparrow" %in% names(tmp_POIs)) { 
-  
-  #  Load Sparrow calibration POIs
-  sparrow_cal_pois <- read_sf("data/sparrow/sparrow_source.gpkg", "calibration_poi") %>%
-    mutate(COMID = as.integer(COMID)) %>%
-    filter(COMID %in% nhd$COMID) %>%
-    select(COMID, MonitoringLocationIdentifier, site_no, station_nm, 
-           usgs_hy_id, distance_m, longitude, latitude, nat_id) %>%
-    st_as_sf(coords = c("longitude", "latitude"), crs = 4326) %>%
-    select(COMID, nat_id)
-  
-  # Derive TE POIs
-  tmp_POIs <- POI_creation(st_drop_geometry(sparrow_cal_pois), nhd, "Sparrow") %>%
-    addType(., tmp_POIs, "Sparrow", nexus = FALSE) 
-  
-  missing_sparrow <- filter(sparrow_cal_pois, !nat_id %in% tmp_POIs$Type_Sparrow)
-  if(nrow(missing_sparrow) > 0){write_sf(missing_sparrow, temp_gpkg, "missing_sparrow")}
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-
-mapview(filter(tmp_POIs, !is.na(Type_Gages)), layer.name = "Streamgage POIs", col.regions = "blue") 
-```
-
-```{r TE POIs}
-if(!"Type_TE" %in% names(tmp_POIs)) {
-  
-  if(vpu == "08"){
-    nhd$VPUID <- "08"
-  } else {
-    nhd$VPUID <- substr(nhd$RPUID, 1, 2)
-  }
-  
-  # Read in Thermoelectric shapefile
-  TE_COMIDs <- read_sf(data_paths$TE_points_path, "2015_TE_Model_Estimates_lat.long_COMIDs") %>%
-    mutate(COMID = as.integer(COMID)) %>%
-    inner_join(., select(st_drop_geometry(nhd), COMID, VPUID), by = "COMID") %>%
-    filter(grepl(paste0("^", substr(vpu, 1, 2), ".*"), .data$VPUID), COMID > 0) %>%
-    switchDiv(., nhd) %>%
-    group_by(COMID) %>%
-    summarize(EIA_PLANT = paste0(unique(EIA_PLANT_), collapse = " "), count = n()) %>%
-    ungroup() %>%
-    select(COMID, EIA_PLANT)
-  
-   # Derive TE POIs
-  tmp_POIs <- POI_creation(st_drop_geometry(TE_COMIDs), nhd, "TE") %>%
-    addType(., tmp_POIs, "TE", nexus = FALSE, bind = TRUE) 
-
-  # As a fail-safe, write out list of TE plants not assigned a POI
-  if(nrow(filter(TE_COMIDs, !COMID %in% tmp_POIs$COMID)) > 0) {
-    write_sf(filter(TE_COMIDs, !COMID %in% tmp_POIs$COMID),
-             temp_gpkg, "unassigned_TE")
-  }
-  
-  # Write out geopackage layer representing POIs for given theme
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  # Load TE POIs if they already exist
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-
-mapview(filter(tmp_POIs, Type_TE != ""), layer.name = "TE Plant POIs", col.regions = "blue") 
-```
-
-```{r waterbody outlet POIs}
-#  Derive or load Waterbody POIs ----------------------
-if(!"Type_WBOut" %in% names(tmp_POIs)) {
-  
-  sparrow_wb_outlet <- read_sf("data/sparrow/sparrow_source.gpkg", "wb_outlets") %>%
-    filter(COMID %in% nhd$COMID)
-  
-  sparrow_wb <- read_sf("data/sparrow/sparrow_source.gpkg", "waterbodies") %>%
-    filter(COMID %in% nhd$WBAREACOMI)
-  
-  # Waterbodies sourced from NHD waterbody layer for entire VPU
-  WBs_VPU_all <- filter(readRDS("data/NHDPlusNationalData/nhdplus_waterbodies.rds"),
-                       COMID %in% nhd$WBAREACOMI) %>%
-   mutate(FTYPE = as.character(FTYPE)) %>%
-   mutate(source = "NHDv2WB") %>%
-   st_transform(crs)
-
-  # Waterbody list that strictly meet the size criteria
-  wb_lst <- st_drop_geometry(WBs_VPU_all) %>%
-    dplyr::filter(FTYPE %in% c("LakePond", "Reservoir") & AREASQKM >= (min_da_km/2)) %>%
-    dplyr::select(COMID) %>%
-    filter(!COMID == 166410600) %>%
-    rbind(dplyr::select(st_drop_geometry(sparrow_wb), COMID))
-
-  if (file.exists(data_paths$resops_NID_CW)){
-    # ResOpsUS locations in the VPU waterbody set
-    resops_wb_df <- read.csv(data_paths$resops_NID_CW) %>%
-      dplyr::filter(WBAREACOMI %in% WBs_VPU_all$COMID) %>%
-      dplyr::select(DAM_ID, DAM_NAME, COMID = WBAREACOMI, FlowLcomid) %>%
-      distinct()
-
-    # Add ResOPsUS locations to waterbody list 
-    if(nrow(resops_wb_df) > 0){
-      wb_lst <- rbind(wb_lst, select(resops_wb_df, COMID)) %>%
-        distinct()
-    }
-  }
-  
-  # Waterbodies that meet the size criteria and/or are in ResOpsUS datasets
-  WBs_VPU <- WBs_VPU_all %>%
-    dplyr::filter(COMID %in% wb_lst$COMID) 
-  
-  WBs_VPU <- filter(WBs_VPU, COMID != 666170) #1R16
-  
-  # Attribute flowlines that are in waterbodies
-  nhd <- mutate(nhd, WB = ifelse(WBAREACOMI > 0 & WBAREACOMI %in% WBs_VPU$COMID, 1, 0))
-  
-  wbout_COMIDs <- nhd %>% #filter(nhd, dend == 1 & WB == 1)
-    filter(WBAREACOMI %in% WBs_VPU$COMID) %>%
-    filter(!WBAREACOMI %in% sparrow_wb_outlet$WB_COMID) %>%
-    group_by(WBAREACOMI) %>%
-    slice(which.min(Hydroseq)) %>%
-    switchDiv(., nhd) %>%
-    select(COMID, WBAREACOMI, LevelPathI) %>%
-    st_drop_geometry() %>%
-    rbind(select(st_drop_geometry(sparrow_wb_outlet), COMID, WBAREACOMI = WB_COMID))
-  
-  tmp_POIs <- POI_creation(wbout_COMIDs, nhd, "WBOut") %>%
-    addType(., tmp_POIs, "WBOut", nexus = FALSE, bind = TRUE) 
-
-  # Write out waterbodies
-  write_sf(WBs_VPU, nav_gpkg, WBs_layer)
-
-  # Write specific ResOpsUS data to a separate sheet
-  if(nrow(wb_lst) > 0){
-    resops_POIs_df <- st_drop_geometry(tmp_POIs) %>%
-      dplyr::select(COMID, Type_WBOut) %>%
-      dplyr::filter(!is.na(Type_WBOut)) %>%
-      dplyr::inner_join(select(resops_wb_df, -FlowLcomid), by = c("Type_WBOut" = "COMID")) 
-    
-    write.csv(resops_POIs_df, file.path("data/reservoir_Data", paste0("resops_POIs_",vpu,".csv")))
-  }
-    
-  
-  wb_out <- filter(tmp_POIs, !is.na(Type_WBOut))
-  missing_wb_out <- filter(sparrow_wb_outlet, !WB_COMID %in% wb_out$Type_WBOut) 
-  missing_wb_out_com <- filter(sparrow_wb_outlet, 
-                           !COMID %in% wb_out$COMID)
-  if(nrow(missing_wb_out) > 0){write_sf(missing_wb_out, temp_gpkg, "missing_sparrow_WB")}
-  if(nrow(missing_wb_out_com) > 0){write_sf(missing_wb_out_com, temp_gpkg, "missing_sparrow_WBout")}
-  
-  sparrow_wb_ids <- select(sparrow_wb_outlet, COMID, WB_COMID, nat_id)
-  
-  tmp_POIs <- tmp_POIs %>%
-    left_join(select(st_drop_geometry(sparrow_wb_ids), -COMID), by = c("Type_WBOut" = "WB_COMID")) %>%
-    mutate(Type_Sparrow = ifelse(is.na(Type_Sparrow), nat_id, Type_Sparrow)) %>%
-    select(-nat_id)
-  
-  write_sf(nhd, nav_gpkg, nhd_flowline)
-  write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-} else {
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-  nhd <- read_sf(nav_gpkg, nhd_flowline)
-  WBs_VPU <- read_sf(nav_gpkg, WBs_layer)
-  resops_POIs_df <- read.csv(file.path("data/reservoir_Data", paste0("resops_POIs_",vpu,".csv")))
-}
-
-mapview(filter(tmp_POIs, !is.na(Type_WBOut)), layer.name = "Waterbody outlet POIs", col.regions = "red")
-```
-
-```{r NID POIs}
-#  Derive or load NID POIs ----------------------
-if(all(is.na(tmp_POIs$Type_NID))) {
-  
-  sparrow_nid <- read_sf("data/sparrow/sparrow_source.gpkg", "nid_pois")
-  
-  sparrow_wb_nid <- sparrow_nid %>%
-    #rename(COMID = ComID) %>%
-    filter(COMID %in% nhd$COMID) %>%
-    select(COMID, NIDID, nat_id) 
-  
-  if(nrow(sparrow_wb_nid) > 0){
-    # Determine which NID facilitites have been co-located with ResOps
-    res_ops_table <- read.csv(data_paths$resops_NID_CW) %>%
-      mutate(new_WBARECOMI = ifelse(is.na(WBAREACOMI) & is.na(NHDAREA), HR_NHDPLUSID, WBAREACOMI)) %>%
-      mutate(new_WBARECOMI = ifelse(is.na(new_WBARECOMI) & is.na(HR_NHDPLUSID), NHDAREA, new_WBARECOMI)) %>%
-      filter(new_WBARECOMI %in% tmp_POIs$Type_WBOut, !is.na(new_WBARECOMI)) %>%
-      select(NID_ID = NID_Source_FeatureID, Type_WBOut = new_WBARECOMI) %>%
-      filter()
-    
-    # Attribute those NID facilities precisely at the outlet
-    if(nrow(res_ops_table) > 0){
-      tmp_POIs <- tmp_POIs %>%
-        left_join(res_ops_table, by = "Type_WBOut") %>%
-        mutate(Type_NID = ifelse(!is.na(NID_ID), NID_ID, NA)) %>%
-        select(-NID_ID)
-    
-      sparrow_wb_nid <- filter(sparrow_wb_nid, !NIDID %in% tmp_POIs$Type_NID)
-    }
-
-    # Derive other NID POIs
-    tmp_POIs <- POI_creation(st_drop_geometry(sparrow_wb_nid), nhd, "NID") %>%
-      addType(., tmp_POIs, "NID", nexus = FALSE, bind = TRUE) %>%
-      left_join(select(st_drop_geometry(sparrow_wb_nid), NIDID, nat_id), by = c("Type_NID" = "NIDID")) %>%
-      mutate(Type_Sparrow = ifelse(is.na(Type_Sparrow), nat_id, Type_Sparrow)) %>%
-      select(-nat_id)
-
-    sparrow_wb_nid_missing <- filter(sparrow_wb_nid, !nat_id %in% tmp_POIs$Type_Sparrow) %>%
-      mutate(WB_Comid = paste("Sparrow_nid_", row_number()))
-    
-    if(nrow(sparrow_wb_nid_missing) > 0){write_sf(sparrow_wb_nid_missing, temp_gpkg, "missing_wb_nid")}
-    # Write out geopackage layer representing POIs for given theme
-    write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-    mapview(filter(tmp_POIs, Type_NID != ""), layer.name = "NID POIs", col.regions = "blue") 
-  }
-  
-} else {
-  # Load NID POIs if they already exist
-  tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-}
-```
-
-
-```{r Diversion POIs}
-# # Derive POIs at confluences where they are absent ----------------------
-# if(needs_layer(temp_gpkg, "diversions")) {
-#   
-#   div_pois_source <- read_sf("data/sparrow/sparrow_source.gpkg", "div_poi") %>%
-#     filter(COMID %in% nhd$COMID) %>% 
-#     select(COMID, nat_id)
-# 
-#   div_POIs <- POI_creation(st_drop_geometry(div_pois_source), nhd, "Div") %>%
-#     mutate(Type_Sparrow = NA, nexus = NA) %>%
-#     st_compatibalize(., tmp_POIs)
-#   
-#   tmp_POIs <- data.table::rbindlist(list(tmp_POIs,
-#                                               select(div_POIs, -c(Type_Div))), fill = TRUE) %>%
-#     st_as_sf() %>%
-#     left_join(select(st_drop_geometry(div_pois_source), COMID, nat_id), by = "COMID") %>%
-#     mutate(Type_Sparrow = ifelse(is.na(Type_Sparrow), nat_id, Type_Sparrow)) %>%
-#     select(-nat_id)
-#   
-#   missing_div <- filter(div_pois_source, !nat_id %in% tmp_POIs$Type_Sparrow)
-#   if(nrow(missing_div) > 0){write_sf(missing_div, temp_gpkg, "missing_div")}
-#   
-#   write_sf(div_pois_source, temp_gpkg, "diversions")
-#   # Write out geopackage layer representing POIs for given theme
-#   write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-# } else {
-#   # Load NID POIs if they already exist
-#   tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-# }
-```
-
-```{r Confluence POIs}
-# # Derive POIs at confluences where they are absent ----------------------
-# if(all(is.na(tmp_POIs$Type_Conf)) | !"Type_Conf" %in% colnames(tmp_POIs)) {
-# 
-#   # Navigate upstream from each POI and determine minimally-sufficient network between current POI sets
-#   up_net <- unique(unlist(lapply(unique(tmp_POIs$COMID), \(x, nhdDF) get_UM(nhdDF, x), nhdDF = nhd))) 
-#   finalNet <- unique(NetworkConnection(up_net, st_drop_geometry(nhd))) 
-# 
-#   # Subset NHDPlusV2 flowlines to navigation results and write to shapefile
-#   nhd <- mutate(nhd, minNet = ifelse(COMID %in% finalNet, 1, 0))
-#   
-#   # Create new confluence POIs
-#   conf_COMIDs <- st_drop_geometry(filter(nhd, minNet == 1)) %>%
-#     # Downstream hydrosequence of 0 indicates
-#     #   the flowline is terminating or
-#     #   leaving the domain, so they
-#     #   are excluded from this process
-#     filter(DnHydroseq > 0) %>%
-#     group_by(DnHydroseq) %>%
-#     filter(n()> 1) %>%
-#     mutate(Type_Conf = LevelPathI) %>%
-#     ungroup() %>% 
-#     select(COMID, Type_Conf)
-# 
-#   tmp_POIs <- POI_creation2(conf_COMIDs, filter(nhd, minNet == 1), "Conf") %>%
-#     addType2(., tmp_POIs, "Conf", nexus = FALSE, bind = TRUE) 
-#   
-#   write_sf(nhd, nav_gpkg, nhd_flowline)
-#   write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-# } else {
-#   nhd <- read_sf(nav_gpkg, nhd_flowline)
-#   tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-# }
-# 
-# mapview(filter(tmp_POIs, !is.na(Type_Conf)), layer.nameble = "Confluence POIs", col.regions = "blue") 
-```
-
-```{r Terminal POIs}
-# #  Derive or load Terminal POIs ----------------------
-# if(all(is.na(tmp_POIs$Type_Term))) {
-#   
-#   # Terminal POIs on levelpaths with upstream POIs
-#   term_paths <- filter(st_drop_geometry(nhd), Hydroseq %in% filter(nhd, COMID %in% tmp_POIs$COMID)$TerminalPa)
-#   
-#   # Non-POI levelpath terminal pois, but meet size criteria
-#   terminal_POIs <- st_drop_geometry(nhd) %>%
-#     filter(Hydroseq == TerminalPa | (toCOMID == 0 | is.na(toCOMID) | !toCOMID %in% COMID)) %>%
-#     filter(!COMID %in% term_paths$COMID, TotDASqKM >= min_da_km) %>%
-#     bind_rows(term_paths) %>%
-#     # Use level path identifier as Type ID
-#     select(COMID, LevelPathI)
-# 
-#   tmp_POIs <- POI_creation2(terminal_POIs, nhd, "Term") %>%
-#     addType2(., tmp_POIs, "Term", nexus = FALSE, bind = TRUE) 
-# 
-#   write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-# } else {
-#   tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-#   nhd <- read_sf(nav_gpkg, nhd_flowline)
-# }
-# 
-# mapview(filter(tmp_POIs, !is.na(Type_Term)), layer.name = "Terminal POIs", col.regions = "blue") 
-```
-
-```{r waterbody inlet POIs}
-# #  Derive or load Waterbody POIs ----------------------
-# if(all(is.na(tmp_POIs$Type_WBIn))) {
-# 
-#   sparrow_inlets <- read_sf("data/sparrow/sparrow_source.gpkg", "wb_inlets") %>%
-#     filter(COMID %in% nhd$COMID)
-#   
-#   WBs_VPU <- filter(WBs_VPU, COMID != 666170) #1R16
-#   
-#   wbout_COMIDs <- filter(tmp_POIs, !is.na(Type_WBOut))
-#   nhd_out <- filter(nhd, COMID %in% wbout_COMIDs$COMID)
-#   
-#   # Create waterbody inlet POIs
-#   wbin_COMIDs <- filter(nhd, WB == 0, 
-#                         DnHydroseq %in% filter(nhd, WB == 1)$Hydroseq) %>%
-#     select(-WBAREACOMI) %>%
-#     switchDiv(., nhd) %>%
-#     inner_join(st_drop_geometry(filter(nhd, minNet == 1)) %>%
-#                  select(Hydroseq, WBAREACOMI), by = c("DnHydroseq" = "Hydroseq")) %>%
-#     select(COMID, WBAREACOMI, minNet) %>%
-#     group_by(COMID) %>%
-#     # Ensure the inlets are on the network defined by confluence POIs
-#     filter(minNet == 1) %>%
-#     select(COMID, WBAREACOMI)
-#   
-#   # Headwater Waterbodies that may need the network extended through the inlet
-#   need_wbin <- st_drop_geometry(filter(WBs_VPU, source == "NHDv2WB")) %>%
-#     dplyr::select(COMID)%>%
-#     dplyr::filter(!COMID %in% wbin_COMIDs$WBAREACOMI)
-#   
-#   up_lp <- filter(nhd, LevelPathI %in% nhd_out$LevelPathI, 
-#                   WBAREACOMI %in% need_wbin$COMID) %>%
-#     group_by(WBAREACOMI) %>%
-#     filter(n() > 1, StartFlag != 1) %>%
-#     slice(which.min(Hydroseq))
-#   
-#   wbin_pois <- select(nhd, COMID, DnHydroseq, LevelPathI) %>%
-#     inner_join(select(st_drop_geometry(up_lp), Hydroseq, WBAREACOMI, LevelPathI), 
-#                by = c("DnHydroseq" = "Hydroseq", "LevelPathI" = "LevelPathI")) %>%
-#     select(COMID, WBAREACOMI) %>%
-#     rbind(wbin_COMIDs)
-# 
-#   tmp_POIs <- POI_creation2(st_drop_geometry(wbin_pois), nhd, "WBIn") %>%
-#     addType2(., tmp_POIs, "WBIn", nexus = FALSE, bind = TRUE)
-#   
-#   tmp_POIs <- tmp_POIs %>%
-#     left_join(select(st_drop_geometry(sparrow_inlets), WB_COMID, nat_id), 
-#               by = c("Type_WBIn" = "WB_COMID"), multiple = "all") %>%
-#     mutate(Type_Sparrow = ifelse(is.na(Type_Sparrow), nat_id, Type_Sparrow)) %>%
-#     select(-nat_id)
-#   
-#   missing_wb_in <- filter(sparrow_inlets, !nat_id %in% tmp_POIs$Type_Sparrow |
-#                             !WB_COMID %in% tmp_POIs$Type_WBIn)
-#   
-#   if(nrow(missing_wb_in) > 0){write_sf(missing_wb_in, temp_gpkg, "missing_wbin")}
-#   #tmp_POIs$nexus <- ifelse(is.na(tmp_POIs$nexus), FALSE, tmp_POIs$nexus)
-#   write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-# } else {
-#   tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-#   nhd <- read_sf(nav_gpkg, nhd_flowline)
-# }
-# 
-# mapview(filter(tmp_POIs, !is.na(Type_WBIn)), layer.name = "Waterbody inlet POIs", col.regions = "blue") + 
-#   mapview(filter(tmp_POIs, !is.na(Type_WBOut)), layer.name = "Waterbody outlet POIs", col.regions = "red") 
-```
-
-
-This chunk breaks up potential aggregated segments where the elevation range of the are contributing to the segment exceeds 500-m
-```{r Elevation Break POIs}
-# # derive incremental segments from POIs
-# inc_segs <- make_incremental_segments(filter(nhd, minNet == 1), 
-#                               filter(st_drop_geometry(nhd),
-#                                      COMID %in% tmp_POIs$COMID, COMID %in% filter(nhd, minNet == 1)$COMID)) %>%
-#   # bring over VAA data
-#   inner_join(select(atts, COMID, DnHydroseq, VA_MA, TOTMA, LENGTHKM, MAXELEVSMO, 
-#                     MINELEVSMO, WBAREACOMI, WBAreaType, FTYPE,
-#                     AreaSqKM, TotDASqKM), by = "COMID") 
-# 
-# # Build dataframe for creation of points based on breaks
-# elev_pois_split <- inc_segs %>%
-#   group_by(POI_ID) %>%
-#   # Get elevation info
-#   mutate(MAXELEVSMO = na_if(MAXELEVSMO, -9998), MINELEVSMO = na_if(MINELEVSMO, -9998), 
-#          elev_diff_seg = max(MINELEVSMO) - min(MINELEVSMO)) %>%
-#   # Filter out to those incremental segments that need splitting above the defined elevation threshold
-#   filter((max(MINELEVSMO) - min(MINELEVSMO)) > (elev_diff * 100)) %>%
-#   # Do not aggregate on fake lfowlines
-#   filter(AreaSqKM > 0, TotDASqKM > max_elev_TT_DA) %>% 
-#   # Order from upstream to downstream
-#   arrange(desc(Hydroseq)) %>%
-#   # Get attributes used for splitting
-#   # csum_length = cumulative length US to DS along segment, cumsum_elev = cumulative US to DS elev diff along segment
-#   # inc_elev = elevation range of each segment
-#   # iter = estimated number of times we'd need to split existing agg flowlines, or number of rows in set
-#   mutate(csum_length = cumsum(LENGTHKM),
-#          inc_elev = cumsum(MINELEVSMO - MINELEVSMO),
-#          #nc_elev_diff = c(inc_elev[1], (inc_elev - lag(inc_elev))[-1]),
-#          iter = min(round(max(inc_elev) / (elev_diff * 100)), n()),
-#          elev_POI_ID = NA) %>%
-#   # Remove segments we can't break
-#   filter(iter > 0, n() > 1) %>%
-#   # Track original iteration number
-#   mutate(orig_iter = iter) %>%
-#   ungroup() 
-# 
-# if(nrow(elev_pois_split) > 0) {
-#   
-#   # For reach iteration
-#   elev_POIs <- do.call("rbind", lapply(unique(elev_pois_split$POI_ID), split_elev, 
-#                                       elev_pois_split, elev_diff*100, max_elev_TT_DA)) %>%
-#     filter(!elev_POI_ID %in% tmp_POIs$COMID, COMID == elev_POI_ID) %>%
-#     mutate(Type_Elev = 1) %>%
-#     select(COMID, Type_Elev) %>%
-#     unique()
-#   
-#   if(nrow(elev_POIs) > 0){
-#     tmp_POIs <- POI_creation(select(elev_POIs, COMID, Type_Elev), nhd, "Elev") %>%
-#       addType(., tmp_POIs, "Elev")
-#   } 
-#   
-# 
-# } else {
-#   
-#   tmp_POIs$Type_Elev <- rep(NA, nrow(tmp_POIs))
-# 
-#   write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-#     
-#   tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer) 
-#   nhd <- read_sf(nav_gpkg, nhd_flowline)
-# }
-# 
-# if(!all(is.na(tmp_POIs$Type_Elev)))
-#   mapview(filter(tmp_POIs, Type_Elev == 1), layer.name = "Elevation break POIs", col.regions = "blue") 
-```
-
-```{r Time of travel POIs}
-# if(all(is.na(tmp_POIs$Type_Travel))) {
-#   
-#   # derive incremental segments from POIs
-#   inc_segs <- make_incremental_segments(filter(nhd, minNet == 1), 
-#                                 filter(st_drop_geometry(nhd),
-#                                        COMID %in% tmp_POIs$COMID, COMID %in% filter(nhd, minNet == 1)$COMID)) %>%
-#     # bring over VAA data
-#     inner_join(select(atts, COMID, DnHydroseq, VA_MA, TOTMA, LENGTHKM, MAXELEVSMO, MINELEVSMO, 
-#                       WBAREACOMI, WBAreaType, FTYPE,
-#                       AreaSqKM, TotDASqKM), by = "COMID") 
-# 
-#   # TT POIs
-#   tt_pois_split <- inc_segs %>%
-#     # Should we substitute with a very small value
-#     mutate(VA_MA = ifelse(VA_MA < 0, NA, VA_MA)) %>%
-#     mutate(FL_tt_hrs = (LENGTHKM * ft_per_km)/ VA_MA / s_per_hr ) %>%
-#     group_by(POI_ID) %>%
-#     filter(sum(FL_tt_hrs) > travt_diff, TotDASqKM > max_elev_TT_DA) %>%
-#     # Sort upstream to downsream
-#     arrange(desc(Hydroseq)) %>%
-#     # Get cumulative sums of median elevation
-#     mutate(csum_length = cumsum(LENGTHKM), 
-#            cumsum_tt = cumsum(FL_tt_hrs), 
-#            iter = min(round(sum(FL_tt_hrs) / travt_diff), n()),
-#            tt_POI_ID = NA) %>%
-#     # Only look to split segments based on travel time longer than 10 km
-#     #filter(sum(LENGTHKM) > (split_meters/1000)) %>%
-#     filter(iter > 0, n() > 1) %>%
-#     # Track original iteration number
-#     mutate(orig_iter = iter) %>%
-#     ungroup() 
-#   
-#     # For reach iteration
-#     tt_POIs <- do.call("rbind", lapply(unique(tt_pois_split$POI_ID), split_tt, 
-#                                         tt_pois_split, travt_diff, max_elev_TT_DA)) %>%
-#       filter(!tt_POI_ID %in% tmp_POIs$COMID, COMID == tt_POI_ID) %>%
-#       mutate(Type_Travel = 1) %>%
-#       select(COMID, Type_Travel) %>%
-#       unique()
-#       
-#     tmp_POIs <- POI_creation2(select(tt_POIs, COMID, Type_Travel), nhd, "Travel") %>%
-#       addType2(., tmp_POIs, "Travel", nexus = FALSE, bind = TRUE) 
-#     
-#     write_sf(tmp_POIs, temp_gpkg, nav_poi_layer)
-# }else{
-#   tmp_POIs <- read_sf(temp_gpkg, nav_poi_layer)
-#   nhd <- read_sf(nav_gpkg, nhd_flowline)
-# }
-# 
-# mapview(filter(tmp_POIs, Type_Travel == 1), layer.name = "Travel time break POIs", col.regions = "blue") 
-```
-  
-```{r Final POIs}
-# # Derive final POI set ----------------------
-# if(needs_layer(nav_gpkg, pois_all_layer)) {
-#   
-#   unCon_POIs <- filter(nhd, COMID %in% tmp_POIs$COMID, AreaSqKM == 0) %>%
-#     distinct()
-# 
-#   # If any POIs happened to fall on flowlines w/o catchment
-#   if (nrow(unCon_POIs) >0){
-#     # For confluence POIs falling on Flowlines w/o catchments, derive upstream valid flowline,
-#     poi_fix <- DS_poiFix2(tmp_POIs, nhd %>% distinct())
-#     new_POIs <- st_compatibalize(poi_fix$new_POIs, tmp_POIs)
-#     xWalk <- distinct(poi_fix$xWalk)
-#     not_matched <- distinct(poi_fix$unmatched)
-# 
-#     # POIs that didn't need to be moved
-#     tmp_POIs_fixed <- filter(tmp_POIs, nexus == TRUE | 
-#                                !COMID %in% c(poi_fix$xWalk$oldPOI, poi_fix$xWalk$COMID))
-#     # bind together
-#     final_POIs <- bind_rows(tmp_POIs_fixed, select(poi_fix$new_POIs, -c(oldPOI, to_com)))
-# 
-#     # if a POI will be a nexus, it can not be terminal.
-#     final_POIs <- mutate(final_POIs, Type_Term = ifelse(nexus == 1, NA, Type_Term))
-# 
-#     # Write out fixes
-#     write_sf(new_POIs, temp_gpkg, poi_moved_layer)
-#     write_sf(xWalk, temp_gpkg, poi_xwalk_layer)
-#     # write out final POIs
-#     write_sf(final_POIs, nav_gpkg, pois_all_layer)
-#     write_sf(not_matched, temp_gpkg, "on_zeroDA")
-#   } else {
-#     # If no fixes designate as NA
-#     xWalk <- NA
-# 
-#     tmp_POIs$nexus <- as.integer(tmp_POIs$nexus)
-# 
-#     # if a POI will be a nexus, it can not be terminal.
-#     tmp_POIs <- mutate(tmp_POIs, Type_Term = ifelse(nexus == 1, NA, Type_Term))
-# 
-#     # write out final POIs
-#     write_sf(tmp_POIs, temp_gpkg, pois_all_layer)
-#     final_POIs <- tmp_POIs
-#   }
-# 
-# } else {
-#   # Need all three sets for attribution below
-#   final_POIs <- read_sf(nav_gpkg, pois_all_layer)
-#   new_POIs <- if(!needs_layer(temp_gpkg, poi_moved_layer)) read_sf(temp_gpkg, poi_moved_layer) else (NA)
-#   xWalk <- if(!needs_layer(temp_gpkg, poi_xwalk_layer)) read_sf(temp_gpkg, poi_xwalk_layer) else (NA)
-#   unCon_POIs <- filter(st_drop_geometry(filter(nhd, minNet == 1)),
-#                        COMID %in% tmp_POIs$COMID, AreaSqKM == 0)
-# }
-``` 
-  
-```{r Draft nsegment generation}
-# if(needs_layer(temp_gpkg, nsegments_layer)) {
-# 
-#   # Sort POIs by Levelpath and Hydrosequence in upstream to downstream order
-#   seg_POIs <-  filter(st_drop_geometry(nhd), 
-#                       COMID %in% tmp_POIs$COMID, COMID %in% filter(nhd, minNet == 1)$COMID)
-#   # derive incremental segments from POIs
-#   inc_segs <- make_incremental_segments(filter(nhd, minNet == 1), seg_POIs)
-# 
-#   nhd_Final <- nhd %>%
-#     left_join(select(inc_segs, COMID, POI_ID), by = "COMID")
-# 
-#   # create and write out final dissolved segments
-#   nsegments_fin <- segment_creation(nhd_Final, xWalk)
-# 
-#   nhd_Final <- select(nhd_Final, -POI_ID) %>%
-#     left_join(select(st_drop_geometry(nsegments_fin$raw_segs), COMID, POI_ID), by = "COMID")
-#   nsegments <- nsegments_fin$diss_segs
-# 
-#   # Produce the minimal POIs needed to derive the network based on LP and terminal outlets
-#   strucFeat <- structPOIsNet(nhd_Final, final_POIs)
-#   nhd_Final <- nhd_Final %>%
-#     mutate(struct_POI = ifelse(COMID %in% strucFeat$struc_POIs$COMID, 1, 0),
-#            struct_Net = ifelse(COMID %in% strucFeat$structnet$COMID, 1, 0))
-# 
-#   write_sf(nhd_Final, nav_gpkg, nhd_flowline)
-#   write_sf(nsegments, temp_gpkg, nsegments_layer)
-# } else {
-#   # Read in NHDPlusV2 flowline simple features and filter by vector processing unit (VPU)
-#   final_POIs <- read_sf(nav_gpkg, pois_all_layer)
-#   nhd_Final <- read_sf(nav_gpkg, nhd_flowline)
-#   nsegments <- read_sf(temp_gpkg, nsegments_layer)
-# }
-# 
-# # Ensure that all the problem POIs have been taken care of
-# sub <- nhd_Final %>% filter(COMID %in% final_POIs$COMID)
-# print (paste0(nrow(sub[sub$AreaSqKM == 0,]), " POIs on flowlines with no local drainage contributions"))
-# noDA_pois <- filter(final_POIs, COMID %in% filter(sub, AreaSqKM == 0)$COMID)
-# write_sf(noDA_pois, temp_gpkg, "noDA_pois")
-```
-
-# Start from here next time  
-```{r POI Collapse}
-# # number POIs
-# final_POIs <- mutate(final_POIs, id = row_number(), moved = NA)
-# write_sf(final_POIs, nav_gpkg, pois_all_layer)
-# 
-# #  Load data
-# if(collapse){
-#   
-#   # Move HUC12 to other POIs
-#   huc_to_poi <- poi_move(final_POIs, "Type_HUC12", .10, 2.5)  
-#   move_table <- huc_to_poi$moved_points %>%
-#     mutate(move_cat = "HUC12 to other")
-#   
-#   # Gages to confluences
-#   gage_to_conf <- poi_move(huc_to_poi$final_pois, "Type_Gages", .05, 2.5, "Type_Conf") # 47
-#   move_table <- gage_to_conf$moved_points %>%
-#     mutate(move_cat = "Gage to conf") %>%
-#     rbind(move_table)
-#   
-#   # Gages to waterbody inlets
-#   gage_to_wbin <- poi_move(gage_to_conf$final_pois, "Type_Gages", .05, 2.5, "Type_WBIn") # 2
-#   move_table <- gage_to_wbin$moved_points %>%
-#     mutate(move_cat = "Gage to WBin") %>%
-#     rbind(move_table)
-#   
-#   # Gages to waterbody outlets
-#   gage_to_wbout <- poi_move(gage_to_wbin$final_pois, "Type_Gages", .05, 2.5, "Type_WBOut") # 6
-#   move_table <- gage_to_wbout$moved_points %>%
-#     mutate(move_cat = "Gage to WBout") %>%
-#     rbind(move_table)
-#   
-#   # Streamgage to term outlet
-#   gage_to_term <- poi_move(gage_to_wbout$final_pois, "Type_Gages", .05, 2.5, "Type_Term") 
-#   # NID to waterbody outlet
-#   nid_to_wbout <- poi_move(gage_to_wbout$final_pois, "Type_NID", .025, 1, "Type_WBOut") 
-#   
-#   # Sparrow to confluence
-#   sparrow_to_conf <- poi_move(gage_to_wbout$final_pois, "Type_Sparrow", .05, 2.5, "Type_Conf") 
-#   move_table <- sparrow_to_conf$moved_points %>%
-#     mutate(move_cat = "Sparrow to Conf") %>%
-#     rbind(move_table)
-#   
-#   # Sparrow to WBoutlet
-#   sparrow_to_wbout <- poi_move(sparrow_to_conf$final_pois, "Type_Sparrow", .05, 2.5, "Type_WBOut") 
-#   # Sparrow to WBInlet
-#   sparrow_to_wbin <- poi_move(gage_to_wbout$final_pois, "Type_Sparrow", .05, 2.5, "Type_WBIn") 
-# 
-#   POIs <- sparrow_to_conf$final_pois
-#   write_sf(POIs, nav_gpkg, final_poi_layer)
-#   write_sf(move_table, temp_gpkg, "pois_collapsed")
-# } else {
-#   write_sf(final_POIs, nav_gpkg, final_poi_layer)
-#   POIs <- final_POIs
-# }
-```
-
-# ```{r lookup}
-# # Final POI layer
-# POIs <- POIs %>%
-#   arrange(COMID) %>%
-#   mutate(identifier = row_number())
-# 
-# # Unique POI geometry
-# final_POI_geom <- POIs %>%
-#   select(identifier) %>%
-#   cbind(st_coordinates(.)) %>%
-#   group_by(X, Y) %>%
-#   mutate(geom_id = cur_group_id()) %>%
-#   ungroup()
-# 
-# final_POIs_table <- POIs %>%
-#   inner_join(select(st_drop_geometry(final_POI_geom), -X, -Y), by = "identifier")  %>%
-#   select(-identifier) 
-# 
-# # POI data theme table
-# pois_data_table <- reshape2::melt(st_drop_geometry(select(final_POIs_table,
-#                                              -nexus)),
-#                             id.vars = c("COMID", "geom_id")) %>%
-#   filter(!is.na(value)) %>%
-#   group_by(COMID, geom_id) %>%
-#   mutate(identifier = cur_group_id()) %>%
-#   rename(hy_id = COMID, poi_id = identifier, hl_reference = variable, hl_link = value) %>%
-#   distinct()
-# 
-# # POI Geometry table
-# poi_geometry_table <- select(final_POIs_table, hy_id = COMID, geom_id) %>%
-#   inner_join(distinct(pois_data_table, hy_id, geom_id, poi_id),
-#              by = c("hy_id" = "hy_id", "geom_id" = "geom_id")) %>%
-#   distinct() 
-# 
-# write_sf(pois_data_table, nav_gpkg, "poi_data")
-# write_sf(poi_geometry_table, nav_gpkg, "poi_geometry")
-# 
-# #  Create xwalk table
-# if(needs_layer(nav_gpkg, lookup_table_refactor)) {
-#   full_cats <- readRDS(data_paths$fullcats_table)
-# 
-#   lookup <- dplyr::select(sf::st_drop_geometry(nhd_Final),
-#                           NHDPlusV2_COMID = COMID,
-#                           realized_catchmentID = COMID,
-#                           mainstem = LevelPathI) %>%
-#     dplyr::mutate(realized_catchmentID = ifelse(realized_catchmentID %in% full_cats$FEATUREID,
-#                                                 realized_catchmentID, NA)) %>%
-#     left_join(select(st_drop_geometry(poi_geometry_table), hy_id, poi_geom_id = geom_id), 
-#               by = c("NHDPlusV2_COMID" = "hy_id"))
-# 
-#   sf::write_sf(lookup, nav_gpkg, lookup_table_refactor)
-# }
-# 
-# ```
diff --git a/workspace/03_hyRefactor_flines.Rmd b/workspace/03_hyRefactor_flines.Rmd
deleted file mode 100644
index cabb6c3..0000000
--- a/workspace/03_hyRefactor_flines.Rmd
+++ /dev/null
@@ -1,198 +0,0 @@
----
-title: "NHD Navigate"
-output: html_document
-editor_options:
-  chunk_output_type: console
----
-
-Project: GFv2.0  
-Script purpose: Run hyRefactor workflow on flowline network
-Date: 2/29/2019  
-Author: [Dave Blodgett](dblodgett@usgs.gov)
-Notes: 
-
-```{r setup_0, echo=FALSE, cache=FALSE}
-knitr::opts_chunk$set(
-  collapse = TRUE,
-  comment = "#>",
-  fig.width=6, 
-  fig.height=4,
-  cache=FALSE)
-```
-
-Load functions and configuration. 
-See `hyRefactory_config.R` for all constants.
-```{r setup}
-source("R/utils.R")
-source("R/config.R")
-source("R/user_vars.R")
-```
-
-Load and filter source NHD Flowline network. Bring in POIs
-```{r flowlines}
-nhd <- read_sf(out_refac_gpkg, nhd_flowline)
-
-#cats <- read_sf(out_refac_gpkg, nhd_catchment)
-  
-POIs_data <- read_sf(nav_gpkg, poi_data_table)
-
-POIs <- read_sf(nav_gpkg, poi_geometry_table)
-
-POI_id <- st_drop_geometry(POIs)
-
-events <- read_sf(nav_gpkg, event_geometry_table)
-```
-
-Read POIs and add nhd outlets. Save to a non-spatial table.
-```{r refactor}
-POIs_ref <- POIs %>%
-  inner_join(select(st_drop_geometry(nhd), TotDASqKM, COMID, DnHydroseq), by = c("hy_id" = "COMID"))
-
-# Also need to avoid modification to flowlines immediately downstream of POIs
-#      This can cause some hydrologically-incorrect catchment aggregation
-POI_downstream <- filter(nhd, Hydroseq %in% POIs_ref$DnHydroseq, AreaSqKM > 0)
-
-# build final outlets set
-term_poi <- filter(POIs_data, hl_reference == "Type_Term")
-
-outlets <- POIs_ref %>%
-  mutate(type = ifelse(poi_id %in% term_poi$poi_id, "terminal", "outlet")) 
-
-# derive list of unique terminal paths
-TerminalPaths <- unique(nhd$TerminalPa)
-
-# Need to avoid refactoring catchments that are long and thing and 
-# reasonably large. They cause problems in a downstream step.
-avoid <- dplyr::filter(nhd, (sqrt(AreaSqKM) / LENGTHKM) > 3 & AreaSqKM > 1)
-
-# attribute flowline network used for refactor
-nhd <- mutate(nhd, refactor = ifelse(TerminalPa %in% TerminalPaths, 1, 0))
-write_sf(nhd, out_refac_gpkg, nhd_flowline)
-
-# Prep flowlines for refactor
-nhdplus_flines <- sf::st_zm(filter(nhd, refactor == 1)) %>%
-  st_as_sf() 
-
-if(!needs_layer(nav_gpkg, event_geometry_table)){
-  events <- read_sf(nav_gpkg, event_geometry_table) 
-  
-  events_ref <- filter(events, hy_id %in% nhdplus_flines$COMID) %>%
-    rename(COMID = hy_id) %>%
-    distinct(COMID, REACHCODE, REACH_meas, 
-             poi_id, geom) %>%
-    arrange(poi_id) %>%
-    mutate(event_identifier = row_number())
-  
-  outlets <- rename(outlets, COMID = hy_id) %>%
-    filter(!poi_id %in% events_ref$poi_id)
-} else {
-  events_ref <- NULL
-}
-
-if(needs_layer(out_refac_gpkg, refactored_layer)) {
-  
-  tf <- paste0("temp/refactored_", rpu_code,".gpkg")
-  tr <- paste0("temp/reconciled_", rpu_code, ".gpkg")
-    
-  unlink(list(tf, tr))
-  refactor_nhdplus(nhdplus_flines = dplyr::select(nhdplus_flines, -FTYPE), # Select controls whether prepare_nhdplus is used. 
-                   split_flines_meters = split_meters, 
-                   split_flines_cores = para_split_flines, 
-                   collapse_flines_meters = combine_meters,
-                   collapse_flines_main_meters = combine_meters,
-                   out_refactored = tf, 
-                   out_reconciled = tr, 
-                   three_pass = TRUE, 
-                   purge_non_dendritic = FALSE, 
-                   events = events_ref,
-                   exclude_cats = c(outlets$COMID, 
-                                    avoid$COMID, POI_downstream$COMID),
-                   warn = TRUE)
-  
-  write_sf(st_transform(read_sf(tf), proj_crs), out_refac_gpkg, refactored_layer)
-  write_sf(st_transform(read_sf(tr), proj_crs), out_refac_gpkg, reconciled_layer)
-  
-  unlink(list(tf, tr))
-  rm(tf, tr)
-}
-```
-
-```{r lookup}
-# create lookup for ref flowlines to use in the non-dendritic steps
-refactor_lookup <- st_drop_geometry(read_sf(out_refac_gpkg, reconciled_layer)) %>%
-  dplyr::select(ID, member_COMID) %>%
-  dplyr::mutate(member_COMID = strsplit(member_COMID, ",")) %>%
-  tidyr::unnest(cols = member_COMID) %>%
-  dplyr::mutate(NHDPlusV2_COMID = as.integer(member_COMID)) %>% # note as.integer truncates
-  dplyr::rename(reconciled_ID = ID)
-
-if(is.character(refactor_lookup$reconciled_ID)) refactor_lookup$reconciled_ID <- as.integer(refactor_lookup$reconciled_ID)
-
-lookup_table <- tibble::tibble(NHDPlusV2_COMID = unique(as.integer(refactor_lookup$member_COMID))) %>%
-    dplyr::left_join(refactor_lookup, by = "NHDPlusV2_COMID")
-
-readr::write_csv(lookup_table, lookup_table_file)
-write_sf(lookup_table, out_refac_gpkg, lookup_table_refactor)
-
-if(needs_layer(out_refac_gpkg, outlets_layer)) {
-  
-  # Join refactored to original NHD
-  refactored <- read_sf(out_refac_gpkg, refactored_layer) %>%
-    select(member_COMID = COMID, Hydroseq, event_identifier, event_REACHCODE) %>%
-    inner_join(select(st_drop_geometry(nhd), orig_COMID = COMID, Hydroseq), by = "Hydroseq") 
-  
-  if(nrow(events_ref) > 0){
-    # Subset for events
-    refactored_events <- refactored %>%
-      filter(!is.na(event_REACHCODE), !is.na(event_identifier)) %>%
-      mutate(event_identifier = as.numeric(event_identifier))
-  
-    event_outlets <- events_ref %>%
-      inner_join(st_drop_geometry(refactored_events), by = "event_identifier") %>%
-      select(hy_id = COMID, event_id = event_identifier, poi_id, member_COMID)%>% 
-      inner_join(select(lookup_table, -NHDPlusV2_COMID), by = "member_COMID")
-    
-    # subset for refactored outlets (non-events)
-    refactored_outlets <- filter(refactored, 
-                                 !member_COMID %in% event_outlets$member_COMID) 
-    
-    # get ref_COMId for other outlets
-    outlets_ref <- outlets %>%
-      filter(!poi_id %in% event_outlets$poi_id) %>%
-      inner_join(lookup_table, 
-                by = c("COMID" = "NHDPlusV2_COMID")) %>%
-      group_by(COMID) %>%
-      filter(member_COMID == max(member_COMID)) %>%
-      select(hy_id = COMID, poi_id, member_COMID, reconciled_ID, type) 
-    
-    outlets_ref_COMID <- data.table::rbindlist(list(outlets_ref, event_outlets), 
-                                               fill = TRUE) %>%
-      st_as_sf()
-  } else {
-    # get ref_COMId for other outlets
-    outlets_ref_COMID <- outlets %>%
-      inner_join(lookup_table, 
-                by = c("COMID" = "NHDPlusV2_COMID")) %>%
-      group_by(COMID) %>%
-      filter(member_COMID == max(member_COMID)) %>%
-      select(hy_id = COMID, poi_id, member_COMID, reconciled_ID, type) 
-  }
-  
-  write_sf(outlets_ref_COMID, out_refac_gpkg, outlets_layer)
-} else {
-  outlets_ref_COMID <- read_sf(out_refac_gpkg, outlets_layer)
-}
-
-check_dups_poi <- outlets_ref_COMID %>%
-  group_by(reconciled_ID) %>%
-  filter(n() > 1) %>%
-  ungroup()
-
-if(nrow(check_dups_poi) > 1){
-  print("Double-check for double POIs")
-  write_sf(check_dups_poi, out_refac_gpkg, paste0(dup_pois, "_", rpu_code))
-} else {
-  print("no double POIs detected")
-}
-```
-
diff --git a/workspace/04-1_hyRefactor_cats.Rmd b/workspace/04-1_hyRefactor_cats.Rmd
deleted file mode 100644
index e920d7a..0000000
--- a/workspace/04-1_hyRefactor_cats.Rmd
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: "Reconcile Catchments"
-output: html_document
----
-
-Project: GFv2.0  
-Script purpose: Run hyRefactor workflow on catchments
-Date: 2/29/2019  
-Author: [Dave Blodgett](dblodgett@usgs.gov)
-Notes: Assumes that hyRefactor_flines.Rmd has previously been run.
-
-```{r setup_0, echo=FALSE, cache=FALSE}
-knitr::opts_chunk$set(
-  collapse = TRUE,
-  comment = "#>",
-  fig.width=10, 
-  fig.height=8)
-```
-
-Load functions and configuration. 
-See `config.R` for all constants.
-```{r libs}
-source("R/utils.R")
-source("R/config.R")
-source("R/user_vars_ww.R")
-source("R/NHD_navigate.R")
-source("R/user_vars.R")
-```
-
-This reconcile-catchments step splits and combines catchment boundaries according to the process that was completed in refactor flines.
-```{r reconcile_catchments}
-if(needs_layer(out_refac_gpkg, divide_layer)) {
-  
-  rpu_string <- paste0("rpu_", rpu_code)
-  fdr <- data_paths$fdr[[rpu_string]]
-  fac <- data_paths$fac[[rpu_string]]
-
-  fdr_temp <- terra::rast(fdr)
-  raster_crs <- terra::crs(fdr_temp)
-
-  # reconciled have no ID applied in refactoring flowlines
-  reconciled <- st_transform(read_sf(out_refac_gpkg, reconciled_layer), raster_crs)
-  # refactored has the original COMIDs and other attributes
-  refactored <- st_transform(read_sf(out_refac_gpkg, refactored_layer), raster_crs) %>%
-    distinct(.keep_all = T)
-
-  cats <- st_transform(read_sf(out_refac_gpkg, nhd_catchment), raster_crs) 
-
-  divides <- reconcile_catchment_divides(catchment = cats,
-                                         fline_ref = refactored,
-                                         fline_rec = reconciled,
-                                         fdr = fdr,
-                                         fac = fac,
-                                         para = para_reconcile,
-                                         cache = cache_split,
-                                         keep = NULL)
-  
-  if(exists("divides")) {
-
-    load(cache_split)
-
-    split_cats <- bind_rows(split_cats[lengths(split_cats) > 0])
-
-    split_cats$areasqkm <- as.numeric(units::set_units(sf::st_area(split_cats), "km^2"))
-
-    write_sf(sf::st_transform(split_cats, proj_crs), out_refac_gpkg, split_divide_layer)
-
-    rm(split_cats)
-  }
-  
-  unlink(cache_split)
-  write_sf(sf::st_transform(divides, proj_crs), out_refac_gpkg, divide_layer)
-}
-
-sf::st_layers(out_refac_gpkg)
-```
\ No newline at end of file
diff --git a/workspace/04-2_aggregate_cats.Rmd b/workspace/04-2_aggregate_cats.Rmd
deleted file mode 100644
index bb49aa1..0000000
--- a/workspace/04-2_aggregate_cats.Rmd
+++ /dev/null
@@ -1,222 +0,0 @@
----
-title: "hyRefactor Catchments"
-output: html_document
----
-
-Project: GFv2.0  
-Script purpose: Run hyRefactor workflow on catchments
-Date: 2/29/2019  
-Author: [Dave Blodgett](dblodgett@usgs.gov)
-Notes: Assumes that hyRefactor_flines.Rmd has previously been run.
-
-```{r setup_0, cache=FALSE, echo = FALSE}
-knitr::opts_chunk$set(
-  collapse = TRUE,
-  comment = "#>",
-  fig.width=10, 
-  fig.height=8)
-```
-
-Load functions and configuration. 
-See `hyRefactory_config.R` for all constants.
-```{r setup}
-source("R/utils.R")
-source("R/config.R")
-source("R/user_vars.R")
-source("R/NHD_navigate.R")
-source("R/user_vars.R")
-```
-
-Derive set of outlets to aggregate catchments for. There are three sets of 
-locations loaded below: POIs, outlets, and events. These are reconciled
-into a single set of HRU outlets and all identifiers mapped 
-to the id scheme used by the refactored network. "mapped_outlets_all" is the 
-result of this block.
-```{r POIs/outlets}
-# Load nhd and outlets
-nhd <- read_sf(out_refac_gpkg, nhd_flowline) 
-
-# Load outlets
-outlets_POI <- read_sf(out_refac_gpkg, outlets_layer) %>%
-  distinct() %>%
-  filter(hy_id %in% nhd$COMID)
-
-POIs_data <- read_sf(nav_gpkg, poi_data_table)
-
-# reconciled have no ID applied in refactoring flowlines
-reconciled <- st_transform(read_sf(out_refac_gpkg, reconciled_layer), proj_crs)
-refactored <- st_drop_geometry(read_sf(out_refac_gpkg, refactored_layer)) %>%
-  select(COMID, Hydroseq) %>%
-  mutate(COMID = as.integer(COMID))
-
-divides <- st_transform(read_sf(out_refac_gpkg, divide_layer), proj_crs) 
-
-lookup <- read_sf(out_refac_gpkg, lookup_table_refactor) %>%
-  inner_join(select(st_drop_geometry(nhd), COMID, TotDASqKM), by = c("NHDPlusV2_COMID" = "COMID"))
-
-highest_DA <- lookup %>%
-  inner_join(refactored, by = c("NHDPlusV2_COMID" = "COMID")) %>%
-  group_by(reconciled_ID) %>%
-  filter(Hydroseq == min(Hydroseq))
-```
-
-```{r agg_catchments I}
-if(needs_layer(out_agg_gpkg, agg_cats_layer)){
- 
-  # https://github.com/r-spatial/sf/issues/1094#issuecomment-988933580 for why this is here.
-  sf::st_geometry(divides[sf::st_is_empty(divides),]) <-
-    sf::st_cast(sf::st_geometry(divides[sf::st_is_empty(divides),]), "MULTIPOLYGON")
-
-  # POI outlets
-  outlets <- select(st_drop_geometry(outlets_POI), ID = reconciled_ID, type)
-
-  # Identify reconciled flowpaths that are terminal and above DA threshold
-  reconciled_DA <- filter(reconciled, TotDASqKM > aggregate_da_thresh_sqkm, is.na(toID))
-
-  # Ones not in existing pois
-  missing_outlets <- filter(reconciled_DA, !ID %in% outlets$ID) %>%
-    pull(ID)
-
-  # bind missing outlets, re-assign mis-attributed terminals
-  if(length(missing_outlets) > 0){
-    outlets <- bind_rows(outlets,
-                         data.frame(ID = missing_outlets,
-                                    type = rep("terminal", length(missing_outlets))))
-    write_sf(filter(reconciled, ID %in% missing_outlets), out_agg_gpkg, "missing_outlets")
-
-  }
-
-  # Identify reconciled flowpaths that are terminal and below DA threshold
-  reconciled_DA <- filter(reconciled, TotDASqKM <= aggregate_da_thresh_sqkm, is.na(toID))
-
-  # Ones not in existing pois
-  extra_outlets <- filter(reconciled_DA, !ID %in% outlets$ID) %>%
-    pull(ID)
-  
-  extra_nets <- hydroloom::sort_network(select(sf::st_drop_geometry(reconciled),
-                                               ID, toID), outlets = extra_outlets)
-  
-  # remove extra network from contention
-  reconciled <- filter(reconciled, !ID %in% extra_nets$ID)
-  
-  outlets <- outlets %>%
-    left_join(select(st_drop_geometry(reconciled), ID, toID), by = "ID") %>%
-    mutate(type = ifelse(is.na(toID), "terminal", "outlet")) %>%
-    mutate(type = ifelse(type == "terminal" & !is.na(toID), "outlet", type)) %>%
-    select(-toID)
-  
-  outlets <- filter(outlets, ID %in% reconciled$ID) %>% 
-    distinct()
-  
-  agg_cats <- aggregate_catchments(flowpath = reconciled,
-                                   divide = divides,
-                                   outlets = outlets,
-                                   da_thresh = aggregate_da_thresh_sqkm,
-                                   only_larger = TRUE,
-                                   post_mortem_file = cache_split)
-
-  agg_cats$cat_sets$set <- sapply(agg_cats$cat_sets$set, paste, collapse = ",")
-  agg_cats$fline_sets$set <- sapply(agg_cats$fline_sets$set, paste, collapse = ",")
-
-  write_sf(agg_cats$cat_sets, out_agg_gpkg, agg_cats_layer)
-  write_sf(agg_cats$fline_sets, out_agg_gpkg, agg_fline_layer)
-  
-  # Get physical geometry  of reconciled FL end node whose ID is an aggregated outlet
-  rec_outlets <- filter(st_drop_geometry(reconciled), ID %in% agg_cats$fline_sets$ID) %>%
-    cbind(get_node(filter(reconciled, ID %in% agg_cats$fline_sets$ID))) %>%
-    st_as_sf()
-  
-  # Build final POI set
-  POIs_att <- select(rec_outlets, ID, toID) %>% 
-    # Bring over POI information
-    inner_join(st_drop_geometry(outlets_POI), by = c("ID" = "reconciled_ID")) %>%
-    select(-c(type, member_COMID))
-  
-  POIs_missing <- filter(select(rec_outlets, -toID), !ID %in% POIs_att$ID) %>%
-    inner_join(st_drop_geometry(agg_cats$fline_sets), by = "ID") %>%
-    arrange(ID) %>%
-    mutate(poi_id = max(POIs_att$poi_id) + row_number()) %>%
-    select(ID, toID, poi_id, event_id = event_identifier, Type_Term = orig_levelpathID) %>%
-    inner_join(select(highest_DA, NHDPlusV2_COMID, reconciled_ID), by = c("ID" = "reconciled_ID")) %>%
-    select(ID, toID, hy_id = NHDPlusV2_COMID, poi_id, event_id, Type_Term) %>%
-    mutate(Type_Term = ifelse(is.na(toID), Type_Term, NA),
-           Type_Con = ifelse(!is.na(toID), 1, NA)) %>%
-    st_as_sf()
-  
-  
-  if(nrow(POIs_missing) > 0){
-      final_POIs <- data.table::rbindlist(list(POIs_att, select(POIs_missing, 
-                                                            -c(Type_Term, Type_Con))), fill = TRUE) %>%
-      st_as_sf()
-  } else {
-    final_POIs <- POIs_att
-  }
-    
-  
-  unaggregated_outlets <- filter(outlets_POI, !reconciled_ID %in% final_POIs$ID)
-  double_outlets <- final_POIs %>% group_by(ID) %>% filter(n() > 1)
-  
-  # Write out
-  write_sf(final_POIs, out_agg_gpkg, mapped_outlets_layer)
-  write_sf(unaggregated_outlets, out_agg_gpkg, "unmapped_outlets")
-  write_sf(double_outlets, out_agg_gpkg, "double_outlets")
-} else {
-  agg_cats <- list(cat_sets = read_sf(out_agg_gpkg, agg_cats_layer),
-                   fline_sets = read_sf(out_agg_gpkg, agg_fline_layer))
-  
-  final_POIs <- read_sf(out_agg_gpkg, mapped_outlets_layer)
-}
-
-```
-
-```{r Long form POIs}
-POIs <- final_POIs %>%
-  arrange(ID) 
-
-final_POI_geom <- POIs %>%
-  select(ID) %>%
-  cbind(st_coordinates(.)) %>%
-  group_by(ID, X, Y) %>%
-  mutate(geom_id = cur_group_id()) %>%
-  ungroup()
-
-final_POIs_table <- POIs %>%
-  inner_join(select(st_drop_geometry(final_POI_geom), -X, -Y), by = "ID") %>%
-  distinct()
-
-write_sf(final_POIs_table, out_agg_gpkg, poi_data_table)
-```
-
-
-```{r lookup table}
-refactor_lookup <- dplyr::select(st_drop_geometry(reconciled), ID, member_COMID) %>%
-  dplyr::mutate(member_COMID = strsplit(member_COMID, ",")) %>%
-  tidyr::unnest(cols = member_COMID) %>%
-  dplyr::mutate(NHDPlusV2_COMID = as.integer(member_COMID)) %>% # note as.integer truncates
-  dplyr::rename(reconciled_ID = ID)
-
-aggregate_lookup_fline <- dplyr::select(st_drop_geometry(agg_cats$fline_sets), ID, set) %>%
-  dplyr::mutate(set = strsplit(set, ",")) %>%
-  tidyr::unnest(cols = set) %>%
-  dplyr::rename(aggregated_flowpath_ID = ID, reconciled_ID = set)
-
-aggregate_lookup_catchment <- dplyr::select(st_drop_geometry(agg_cats$cat_sets), ID, set) %>%
-  dplyr::mutate(set = strsplit(set, ",")) %>%
-  tidyr::unnest(cols = set) %>%
-  dplyr::rename(aggregated_divide_ID = ID, reconciled_ID = set)
-
-if(is.character(aggregate_lookup_catchment$reconciled_ID)) aggregate_lookup_catchment$reconciled_ID <- as.integer(aggregate_lookup_catchment$reconciled_ID)
-if(is.character(aggregate_lookup_fline$reconciled_ID)) aggregate_lookup_fline$reconciled_ID <- as.integer(aggregate_lookup_fline$reconciled_ID)
-
-lookup_table <- tibble::tibble(NHDPlusV2_COMID = unique(as.integer(refactor_lookup$member_COMID))) %>%
-    dplyr::left_join(refactor_lookup, by = "NHDPlusV2_COMID") %>%
-    dplyr::left_join(aggregate_lookup_fline, by = "reconciled_ID") %>%
-    dplyr::left_join(aggregate_lookup_catchment, by = "reconciled_ID")
-
-readr::write_csv(lookup_table, lookup_table_file)
-write_sf(lookup_table, out_agg_gpkg, lookup_table_refactor)
-
-sf::st_layers(out_agg_gpkg)
-
-mapview::mapview(list(agg_cats$cat_sets, agg_cats$fline_sets, final_POIs))
-```
diff --git a/workspace/04_merge.Rmd b/workspace/04_merge.Rmd
deleted file mode 100644
index 1ca2783..0000000
--- a/workspace/04_merge.Rmd
+++ /dev/null
@@ -1,15 +0,0 @@
-This notebook is used for creation of national scale output.
-
-The outputs are not used later in the workflow.
-
-```{r}
-library(sf)
-library(hyfabric)
-
-source("R/utils.R")
-source("R/config.R")
-
-in_gpkg <- "reference_"
-
-Merge_VPU(final_poi_layer, in_gpkg, gf_gpkg_conus)
-```
diff --git a/workspace/05-1_merge.Rmd b/workspace/05-1_merge.Rmd
deleted file mode 100644
index 5a82023..0000000
--- a/workspace/05-1_merge.Rmd
+++ /dev/null
@@ -1,94 +0,0 @@
----
-title: "07-1_merge.Rmd"
-output: html_document
-editor_options:
-  chunk_output_type: console
----
-title: 07-1_merge.Rmd
-Project: GFv2.0
-Date: 4/2022 
-Author: [David Blodgett](dblodgett@usgs.gov)
-Script purpose: Merge refactored outputs into VPU basis.
-
-          
-```{r rmd, echo=F, message=F, warning=FALSE, fig.width=4}
-knitr::opts_chunk$set(
-  collapse = TRUE,
-  comment = "#>",
-  fig.width=10, 
-  fig.height=8)
-```
-
-```{r setup}
-# Load custom functions
-source("R/utils.R")
-source("R/config.R")
-
-```
-
-For a given VPU bind RPUs into a single geopackage for an entire VPU. This step is intended to be run after Refactor flowlines/cats.  For a given VPU, this binds the results of aggregated from the associated RPUs into a single layer and writes them out to a single geopackage for the non-dendritic work. 
-
-```{r refactor}
-if(needs_layer(rfc_gpkg, divide_layer)) {
-  
-  # Thematic POIs
-  POIs <- read_sf(nav_gpkg,  poi_data_table) %>% 
-    select(-geom_id)
-  
-  sf::write_sf(POIs, gf_gpkg, poi_data_table)
-  
-  merged_layers <- merge_refactor(rpu_codes$rpuid, 
-                                  rpu_vpu_out, 
-                                  lookup_table_refactor, 
-                                  reconciled_layer, 
-                                  divide_layer, 
-                                  split_divide_layer,
-                                  agg_fline_layer,
-                                  agg_cats_layer,
-                                  mapped_outlets_layer)
-  
-  sf::write_sf(select(merged_layers[[lookup_table_refactor]], 
-                      -aggregated_flowpath_ID, 
-                      -aggregated_divide_ID), 
-               rfc_gpkg, lookup_table_refactor)
-  
-  sf::write_sf(merged_layers[[reconciled_layer]], 
-               rfc_gpkg, reconciled_layer)
-  
-  sf::write_sf(merged_layers[[divide_layer]], 
-               rfc_gpkg, divide_layer)
-  
-  sf::write_sf(merged_layers[[split_divide_layer]],
-               rfc_gpkg, split_divide_layer)
-
-  sf::write_sf(merged_layers[[mapped_outlets_layer]], gf_gpkg, mapped_outlets_layer)
-
-  merged_layers[[agg_cats_layer]] <- merged_layers[[agg_cats_layer]] %>%
-    mutate(areasqkm = as.numeric(units::set_units(sf::st_area(.), "km^2")))
-  
-  sf::write_sf(merged_layers[[agg_cats_layer]], gf_gpkg, agg_cats_layer)
-
-  merged_layers[[agg_fline_layer]] <- merged_layers[[agg_fline_layer]] %>%
-    mutate(lengthkm = as.numeric(units::set_units(sf::st_length(.), "km"))) %>%
-    left_join(select(sf::st_drop_geometry(merged_layers[[agg_cats_layer]]), ID, areasqkm), by = "ID")
-  
-  sf::write_sf(merged_layers[[agg_fline_layer]], gf_gpkg, agg_fline_layer)
-  
-  sf::write_sf(merged_layers[[lookup_table_refactor]],
-               gf_gpkg, lookup_table_refactor)
-  
-  st_drop_geometry(merged_layers[[reconciled_layer]]) %>%
-    select(id = ID, toID = toID, lengthkm = LENGTHKM, levelpathid = LevelPathID) %>%
-    left_join(select(st_drop_geometry(merged_layers[[divide_layer]]), 
-                     id = ID, areasqkm), by = "id") %>%
-    relocate(id, toID, lengthkm, areasqkm, levelpathid) %>%
-    write_sf(rfc_gpkg, catchment_network_table)
-  
-  st_drop_geometry(merged_layers[[agg_fline_layer]]) %>%
-    select(id = ID, toid = toID, lengthkm, areasqkm) %>%
-    left_join(distinct(select(merged_layers[[lookup_table_refactor]], 
-                              id = aggregated_flowpath_ID, 
-                              levelpathid = LevelPathID))) %>%
-    sf::write_sf(gf_gpkg, catchment_network_table)
-}
-```
diff --git a/workspace/05-2_NonDend.Rmd b/workspace/05-2_NonDend.Rmd
deleted file mode 100644
index e700887..0000000
--- a/workspace/05-2_NonDend.Rmd
+++ /dev/null
@@ -1,412 +0,0 @@
----
-title: "07-2_NonDend.Rmd"
-output: html_document
-editor_options:
-  chunk_output_type: console
----
-title: NonDend.Rmd
-Project: GFv2.0
-Date: 7/2020 
-Author: [Marilyn Santiago, Andrew Bock](msant@usgs.gov, abock@usgs.govb)
-Script purpose:: To provide workflow for aggregating non-dendritic catchments
-Coastal zero-order and frontal catchments are accounted for first, followed by 
-endorheic basins and sinks.
-
-          
-```{r rmd, echo=F, message=F, warning=FALSE, fig.width=4}
-knitr::opts_chunk$set(
-  collapse = TRUE,
-  comment = "#>",
-  fig.width=10, 
-  fig.height=8)
-```
-
-```{r setup}
-# set to true to output extra layers.
-debug <- FALSE
-
-# Load custom functions
-source("R/utils.R")
-source("R/config.R")
-source("R/user_vars.R")
-source("R/non_dend.R")
-source("R/user_vars.R")
-
-# Read in full VPU NHD set
-if (vpu_codes == "20"){
-   full_nhd <- readRDS(file.path(data_paths$islands_dir, 
-                                 "NHDPlusNationalData/nhdplus_flowline.rds")) %>%
-     st_transform(crs)
-} else {
-  full_nhd <- readRDS(data_paths$VAA_rds)
-}
-
-# Elevation Data
-elev <- data_paths$elev_cm[grepl(paste0("Ned", substr(vpu_codes, 1, 2)), 
-                                 data_paths$elev_cm, ignore.case = TRUE)]
-
-if (vpu_codes == "08"){
-  elev$rpu_03g <- data_paths$elev_cm$rpu_03g
-}
-
-# HUC extraction for specific NHD+ vpus
-if(vpu_codes == "02"){
-  grep_exp <-"^02|^04"
-} else if (vpu_codes == "08") {
-  grep_exp <- "^03|^08"
-} else {
-  grep_exp <- paste0("^", substr(vpu_codes, start = 1, stop = 2))
-  elev <- append(elev, list(rpu_03g = data_paths$elev_cm$rpu_03g))
-}
-
-cat_rpu_table <- readRDS(data_paths$fullcats_table)
-
-# get full flowline set including coastlines
-vpu_nhd <- full_nhd %>%
-  filter(grepl(paste0("^", grep_exp, ".*"), .data$VPUID)) %>%
-  align_nhdplus_names(.)
-
-vpu_WBD <- readRDS(file.path(data_paths$nhdplus_dir, "HUC12.rds")) %>%
-  filter(grepl(paste0("^", grep_exp, ".*"), .data$HUC_12))
-
-nhd <- st_transform(read_sf(nav_gpkg, nhd_flowline), proj_crs)
-cats <- st_transform(read_sf(nav_gpkg, nhd_catchment), proj_crs)
-divides <- st_transform(read_sf(rfc_gpkg, divide_layer), proj_crs)
-lookup <- read_sf(gf_gpkg, lookup_table_refactor)
-
-```
-
-This next section intersects HUC12 for a given VPU with NHD+ catchments and catchment divides.
-
-See __get_HUC12_Xwalk__ in __R/utils.R__
-```{r Load HUC12 / xWalk information}
-if(needs_layer(ND_gpkg, xwalk_layer)){
-
-  # Read in full NHD cats
-  cats <- filter(cats, full_cats == 1)
-  cats <- sf::st_make_valid(cats)
-  divides <- sf::st_make_valid(divides)
-  
-  # Intersect NHD catchments and divides with HUC12
-  nhd_wbd_int <- get_HUC12_Xwalk(vpu_codes, cats, divides,
-                                file.path(data_paths$nhdplus_dir,
-                                          "CrosswalkTable_NHDplus_HU12.csv"),
-                                file.path(data_paths$nhdplus_dir, "HUC12.rds"))
-  
-  # Bring over divides/HUC12 intersection information into divides layer
-  xwalk_divides_wbd <- st_drop_geometry(nhd_wbd_int$divides_HUC12) %>%
-    select(-c(ACRES, HU_12_MOD))
-  
-  divides <- divides %>%
-    left_join(distinct(xwalk_divides_wbd) %>%
-                group_by(ID) %>%
-                filter(intArea == max(intArea)) %>%
-                ungroup() %>%
-                select(ID, HUC_12_int, intArea, AreaHUC12), 
-              by = "ID") 
-  
-  # Bring over divides/HUC12 intersection information into divides layer
-  xwalk_nhd_wbd <- st_drop_geometry(nhd_wbd_int$cats_HUC12) %>%
-    select(-c(ACRES, HU_12_MOD))
-
-  rm(nhd_wbd_int)
-  
-  cats <- cats %>%
-    left_join(distinct(xwalk_nhd_wbd) %>%
-        group_by(FEATUREID) %>%
-        slice(which.max(intArea)) %>%
-        ungroup() %>%
-        select(FEATUREID, HUC_12_int, intArea, AreaHUC12),
-      by = "FEATUREID") %>%
-    st_transform(proj_crs) 
-  
-  # All intersecting NHD cat / divides / HUC12 geometries (1: many)
-  write_sf(xwalk_nhd_wbd, ND_gpkg, xwalk_layer)
-  write_sf(xwalk_divides_wbd, ND_gpkg, divides_xwalk)
-  
-  # Cats with the HUC_12 value (HUC_12_int) that is the max overlap
-  write_sf(cats, ND_gpkg, nhd_catchment)
-  write_sf(divides, ND_gpkg, divide_layer)
-} else {
-  xwalk_nhd_wbd <- read_sf(ND_gpkg, xwalk_layer)
-  xwalk_divides_wbd <- read_sf(ND_gpkg, divides_xwalk)
-  cats <- read_sf(ND_gpkg, nhd_catchment)
-  divides <- read_sf(ND_gpkg, divide_layer) 
-}
-```
-
-This next step takes catchment divides and:
-
-1. Adds a field that indicates how a divide without an aggregated catchment ID assigned in hyRefactor::aggregate_catchments was aggregated (*__aggStep__*)
-2. Identifies internal sinks and non-dendritic areas entirely surrounded by a single aggregated catchment, and assigns those the catchment ID (see __dissolve_holes__ in __non_dend.R__ function)
-  
-```{r First-cut}
-if(needs_layer(ND_gpkg, divides_nd)){
-  
-  # Bind divide with lookup, identify aggregation step
-  divides_lu <- divides %>%
-    left_join(distinct(select(lookup, reconciled_ID, aggregated_divide_ID)), 
-              by = c("ID" = "reconciled_ID")) %>%
-    filter(!is.na(ID) & !is.na(aggregated_divide_ID)) %>%
-    rename(POI_ID = aggregated_divide_ID) %>%
-    # attribute that hyrefactor was the step used to aggregate these catchments
-    mutate(aggStep = "hyRef") 
-
-  # Identify cats witin the full catchment set not refactored or aggregated, add
-  #          to divides data frame
-  cats_miss <- cats %>%
-    left_join(select(lookup, NHDPlusV2_COMID, member_COMID, reconciled_ID , 
-                     POI_ID = aggregated_divide_ID),
-              by = c("FEATUREID" =  "NHDPlusV2_COMID")) %>%
-    filter(is.na(POI_ID), !member_COMID %in% divides_lu$member_COMID) %>%
-    mutate(aggStep = NA) %>%
-    distinct() %>%
-    left_join(select(cat_rpu_table, FEATUREID, rpu = RPUID)) %>%
-    #filter(!reconciled_ID %in% divides_lu$ID) %>%
-    select(-member_COMID) %>%
-    mutate(areasqkm = as.numeric(st_area(.)/1000000)) %>%
-    select(ID = reconciled_ID, member_COMID = FEATUREID, rpu, HUC_12_int, intArea, AreaHUC12, POI_ID, aggStep)
-
-  divides_lu <- divides_lu %>%
-    select(-areasqkm) %>%
-    rbind(cats_miss) %>%
-    # resolve terminal non-POI outlets where we can
-    nhdplusTools:::check_valid() %>%
-    st_cast("POLYGON")
-  
-  # clean_geometry(divides_lu, ID = "POI_ID", keep = 1.0, crs = st_crs(divides_lu))
-  divides_lu <- dissolve_holes(divides_lu)
-  rm(cats_miss)
-
-  # DEBUG:
-  # HRU layer
-  if(debug) {
-    protoHRUs <- divides_lu %>%
-      group_by("POI_ID") %>%
-      summarize(do_union = TRUE) %>%
-      sfheaders::sf_remove_holes(.) %>%
-      st_make_valid()
-    write_sf(protoHRUs, ND_gpkg, HRU_layer)
-    rm(protoHRUs) 
-  }
-  
-  write_sf(divides_lu, ND_gpkg, divides_nd)
-} else {
-  divides_lu <- read_sf(ND_gpkg, divides_nd)
-}
-```
-
-This next section takes divides not assigned an aggregated ID (*__POI_ID__*) and determines if they can be grouped on the basis of their HUC12/HUC10 ID.  See __assign_HUC10/12__ in __non_dend.R__. This assigns a temporary aggregated ID that reflects the HUC10/12 the divides overlap with.
-
-```{r HUC12 cats}
-# Check for HUC12 aggregation assignments
-if(!"HUC_12" %in% unique(divides_lu$aggStep)){
-  print(paste0("Currently there are ", sum(is.na(divides_lu$POI_ID)), " cats without a POI_ID"))
-
-  # This will crate aggregated IDs for NHD catchments that match HUC12 footprint if aggregated together
-  # The Coefficient of Areal correpsondence - is the last argument
-  if("AREASQKM" %in% names(xwalk_nhd_wbd)) {
-    xwalk_nhd_wbd <- rename(xwalk_nhd_wbd,
-                                AreaSqKM = AREASQKM)
-  }
-  
-  divides_lu <- assign_HUC12(divides_lu, xwalk_nhd_wbd, 
-                             filter(vpu_nhd, FTYPE != "Coastline"), CAC_thresh)
-  
-  # Determine if any unaggregated catchments match HUC10 footprint (mostly in the west)
-  divides_lu <- assign_HUC10(divides_lu, xwalk_nhd_wbd,
-                             filter(vpu_nhd, FTYPE != "Coastline"), CAC_thresh) %>%
-    select(-comid_char)
-  
-  if(debug) {
-    # DEBUG:
-    # HRU layer
-    protoHRUs <- divides_lu %>%
-      group_by(POI_ID) %>%
-      summarize(do_union = TRUE) %>%
-      sfheaders::sf_remove_holes(.) %>%
-      st_make_valid()
-    write_sf(protoHRUs, ND_gpkg, HRU_layer)
-    rm(protoHRUs)
-  }
-  
-  # Update missing_cats
-  write_sf(divides_lu, ND_gpkg, divides_nd)
-} else {
-  divides_lu <- read_sf(ND_gpkg, divides_nd)
-}
-```
-
-Deal with unaggregated catchment divides that are coastal if they exist within VPU
-
-Note these are primarily assigned the HUC12 as the temporary aggregated ID, but they differ from above in that they don't meet the Areal Correspondence threshold.
-
-Note that in this case it can involve ugly multi-part HRUs which we may want to split to single part.
-
-```{r Coastal Cats}
-# aggregate frontal hucs of same type
-if("Coastline" %in% unique(vpu_nhd$FTYPE)){
-  print(paste0("Currently there are ", sum(is.na(divides_lu$POI_ID)), " cats without a POI_ID"))
-
-  # Only run through if coastal catchments are present
-  if(!"coastal" %in% unique(divides_lu$aggStep)){
-
-    # Function to create coastal catchments by HUC12 and catch inflows.
-    divides_lu <- coastal_cats(divides_lu, vpu_nhd, vpu_WBD)
-
-    if(debug) {
-      # DEBUG:
-      # HRU layer
-      protoHRUs <- divides_lu %>%
-        group_by(POI_ID) %>%
-        summarize(do_union = TRUE) %>%
-        sfheaders::sf_remove_holes(.) %>%
-        st_make_valid()
-      # Write out updates
-      write_sf(protoHRUs, ND_gpkg, HRU_layer)
-      rm(protoHRUs)
-    }
-
-    
-    # Update missing_cats
-    write_sf(divides_lu, ND_gpkg, divides_nd)
-  } else {
-    divides_lu <- read_sf(ND_gpkg, divides_nd)
-  }
-} else {
-  print ("No Coastlines in VPU")
-}
-vpu_nhd <- filter(vpu_nhd, FTYPE != "Coastline")
-```
-
-
-This is where alot of the more complex steps happen. For most VPUs, there are not of catchments left to aggregate after this step.
-
-1, Determine where network terminals below the drainage area threshold used to derive the hyRefactor outlets contribute to (__assignable_cats__ in __non_dend.R__)
-2. Assign other cats by the basis of HUC12 and HUC12 of bordering catchments (__assignable_cats__)
-3. Uses the FAC grid to assign the rest ( __assign_holes__ )
-```{r FixingtheHoles}
-if(needs_layer(ND_gpkg,  missing_cats)){
-  print(paste0("Currently there are ", sum(is.na(divides_lu$POI_ID)), " cats without a POI_ID"))
-  
-  if(sum(is.na(divides_lu$POI_ID)) > 0){ 
-  
-    # Handle nhd sinks
-    # arrange divides_lu by member_COMID and populate with RowID for easy iteration within next two steps
-    divides_lu <- divides_lu %>%
-      arrange(member_COMID, POI_ID) %>%
-      mutate(row_ID = row_number()) %>%
-      arrange(row_ID)
-      
-    HUC_sinks <- NHD_sinks(divides_lu, area_thresh = min_da_km_terminal/2,  
-              HUC12_table =file.path(data_paths$nhdplus_dir, "HUC12.rds"), 
-              NHD_sinks = read_sf(data_paths$nhdplus_gdb, "Sink"))
-    
-    if(length(HUC_sinks) == 2){
-      divides_lu <- HUC_sinks$divides_poi
-      sinks_table <- HUC_sinks$sink_cats_table
-    }
-    
-    # Scan for terminals that may have been refactored
-    missing_ds <- filter(divides_lu, is.na(POI_ID))
-    term_refactored <- lapply(missing_ds$member_COMID, function(x){
-      ds_ref <- get_DM(vpu_nhd,x, include = F)
-      if(length(ds_ref) == 0){
-        return(filter(missing_ds, member_COMID == x))
-      }
-      
-      lookup_test <- filter(lookup, NHDPlusV2_COMID %in% ds_ref)
-      divides_test <- filter(divides_lu, ID %in% lookup_test$reconciled_ID) %>%
-        filter(!is.na(POI_ID))
-      
-      print(unique(divides_test$POI_ID))
-      
-      if(length(unique(divides_test$POI_ID)) == 1){
-        return(filter(missing_ds, member_COMID == x) %>%
-                 mutate(POI_ID = unique(divides_test$POI_ID)))
-      } else {
-         return(filter(missing_ds, member_COMID == x)) 
-      }
-          
-    })
-
-    term_refactored <- data.table::rbindlist(term_refactored[lengths(term_refactored) > 1],
-                                             fill = TRUE) %>%
-      st_as_sf()
-    
-    divides_lu <- filter(divides_lu, !member_COMID %in% term_refactored$member_COMID) %>%
-      rbind(term_refactored)
-
-    if(sum(is.na(divides_lu$POI_ID)) > 0) {
-      divides_dem <- miss_term_assign(divides_lu, vpu_nhd, elev) 
-      
-      divides_lu <- divides_lu %>%
-        left_join(select(divides_dem, member_COMID, agg_ID), 
-                  by = "member_COMID") %>%
-        mutate(POI_ID = ifelse(!is.na(agg_ID), agg_ID, POI_ID),
-               aggStep = ifelse(!is.na(agg_ID), "boundary DEM", aggStep)) %>%
-        select(-agg_ID)
-      
-      if(exists("sinks_table")){
-        sinks_table_fin <- filter(sinks_table, !member_COMID %in% divides_dem$member_COMID) 
-        sinks_table_fin <- data.table::rbindlist(list(sinks_table_fin, 
-                                                      divides_dem), fill = TRUE)
-      } else {
-        sinks_table_fin <- divides_dem
-      }
-      
-      write_sf(sinks_table_fin, ND_gpkg, ND_table)
-    }
-    
-  } else {
-    print ("all unaggregated catchments assigned")
-  }
-
-  divides_lu <- dissolve_holes(divides_lu)
-  if(sum(is.na(divides_lu$POI_ID)) > 0){
-    write_sf(filter(divides_lu, is.na(POI_ID)), ND_gpkg, missing_cats)
-  }
-
-  # Prob HRU - filter(all_hrus, POI_ID == 140402000209)
-  all_hrus <- filter(divides_lu, !is.na(POI_ID)) %>%
-    group_by(POI_ID) %>%
-    summarize(do_union = TRUE) %>%
-    sfheaders::sf_remove_holes(.) %>%
-    nhdplusTools:::check_valid(.)
-  
-  write_sf(divides_lu, ND_gpkg, divides_nd)
-  write_sf(all_hrus, ND_gpkg, HRU_layer)
-} else {
-  divides_lu <- read_sf(ND_gpkg, divides_nd)
-  all_hrus <- read_sf(ND_gpkg, HRU_layer)
-}
-```
-
-```{r Manual checks}
-noagg_divides <- read_sf(ND_gpkg, missing_cats) %>%
-  select(row_ID, POI_ID_noagg = POI_ID) %>%
-  st_drop_geometry()
-
-if(all(!is.na(noagg_divides$POI_ID_noagg))){
-  print ("all unaggregated divides accounted for")
-  
-  divides_lu <- divides_lu %>%
-    left_join(noagg_divides, by = "row_ID") %>%
-    mutate(POI_ID = ifelse(!is.na(POI_ID_noagg), POI_ID_noagg, POI_ID),
-           aggStep = ifelse(!is.na(aggStep), "manual", aggStep)) %>%
-    select(-POI_ID_noagg)
-     
-  # Prob HRU - filter(all_hrus, POI_ID == 140402000209)
-  all_hrus <- filter(divides_lu, !is.na(POI_ID)) %>%
-    group_by(POI_ID) %>%
-    summarize(do_union = TRUE) %>%
-    sfheaders::sf_remove_holes(.) %>%
-    nhdplusTools:::check_valid(.)
-  
-  write_sf(divides_lu, ND_gpkg, divides_nd)
-  write_sf(all_hrus, ND_gpkg, HRU_layer) 
-} else {
-  print ("account for unaggregated divides")
-}
-
-```
diff --git a/workspace/runners/README.md b/workspace/runners/README.md
deleted file mode 100644
index d79d9db..0000000
--- a/workspace/runners/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-gfv2 runners
-
-## 1. make_docker_calls.Rmd
-
-Generates `navigate_calls.txt` and `hyRefactor_calls.txt` and checks already generated outputs for completeness.
-
-Intended to be run from within a running Docker / Jupyter instance started with docker-compose in the root of this project.
-
-## 2. make_shifter_calls.Rmd
-
-Clone of `make_docker_calls.Rmd` but tailored for the shifter-based containerization environment on Denali.
-
-## 3. batch.sh
-
-Useful on a linux environment with Docker available. Can run `navigate_calls.txt` and `hyRefactor_calls.txt` in parallel.
-
-## 4. run_all_R.R
-
-Simple runner to execute calls in parallel on Windows with Docker.
diff --git a/workspace/runners/batch.sh b/workspace/runners/batch.sh
deleted file mode 100644
index 5385014..0000000
--- a/workspace/runners/batch.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-#SBATCH -A impd
-#SBATCH -N 1i
-#SBATCH -c 40
-#SBATCH -n 1
-#SBATCH --job-name=gfv2
-#SBATCH --time=24:00:00
-
-parallel --jobs 20 < workspace/runners/shifter_navigate_calls.txt
-
-shifter --volume="/absolute/path/gfv2/gfv2.0/workspace:/jupyter" --image=dblodgett/hydrogeoenv-custom:latest R -e "rmarkdown::render('/jupyter/04_merge.Rmd', output_file='/jupyter/04_merge.html')"
-
-parallel --tmpdir workspace/temp --delay 30s --jobs 10 < workspace/runners/shifter_hyRefactor_calls.txt
diff --git a/workspace/runners/cleaner.R b/workspace/runners/cleaner.R
deleted file mode 100644
index 304dea6..0000000
--- a/workspace/runners/cleaner.R
+++ /dev/null
@@ -1,70 +0,0 @@
-possible_vpu <- c("01", "08", "10L", "15", "02", "04", "05", "06", 
-                  "07", "09", "03S", "03W", 
-                  "03N", "10U", "11", "12", 
-                  "13", "14",  "16", "17", "18")
-
-
-vpu_codes <- possible_vpu
-
-# remove all reference fabric content
-reference <- FALSE
-# remove al POI content
-POI <- TRUE
-# remove refactored content leaving rpu-based reference content behind
-refactor <- TRUE
-# remove all aggregate content
-aggregate <- FALSE
-
-for(VPU in vpu_codes) {
-  
-  rm(rpu_code)
-  
-  source("R/config.R")
-  source("R/utils.R")
-  
-  if(reference) {
-    unlink(nav_gpkg)
-  }
-  
-  if(POI) {
-    sf::st_delete(nav_gpkg, final_poi_layer)
-    sf::st_delete(nav_gpkg, lookup_table_refactor)
-    unlink(temp_gpkg)    
-  }
-  
-  if(refactor) {
-    unlink(rfc_gpkg)
-  }
-  
-  if(aggregate) {
-    unlink(gf_gpkg)
-    unlink(ND_gpkg)
-  }
-  
-  if(refactor | aggregate) {
-    unlink(vpu_lookup_table_file)
-  }
-  
-  for(r in rpu_codes$rpuid) {
-    f <- paste0("cache/", r, "_refactor.gpkg")
-    if(refactor & !reference) {
-      sf::st_delete(f, lookup_table_refactor)
-      sf::st_delete(f, refactored_layer)
-      sf::st_delete(f, reconciled_layer)
-      sf::st_delete(f, outlets_layer)
-      sf::st_delete(f, divide_layer)
-      unlink(paste0("cache/", r, "_lookup.csv"))
-    }
-    
-    if(refactor & reference) {
-      unlink(f)
-      unlink(paste0("cache/", r, "_lookup.csv"))
-    }
-    
-    if(aggregate) {
-      unlink(paste0("cache/", r, "_aggregate.gpkg"))
-      unlink(paste0("cache/", r, "_lookup.csv"))
-    }
-  }
-  
-}
diff --git a/workspace/runners/local_batch.sh b/workspace/runners/local_batch.sh
deleted file mode 100644
index d3a1761..0000000
--- a/workspace/runners/local_batch.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-docker run --mount type=bind,source=$PWD/workspace,target=/jupyter dblodgett/hydrogeoenv-custom:latest R -e "rmarkdown::render('/jupyter/01_NHD_prep.Rmd', output_file='/jupyter/reports/01_NHD_prep.html')" 
-
-parallel --jobs 5 < workspace/runners/navigate_calls.txt
-
-parallel --jobs 5 < workspace/runners/hyRefactor_calls.txt
-
-parallel --jobs 5 < workspace/runners/finalize_calls.txt
diff --git a/workspace/runners/make_docker_calls.Rmd b/workspace/runners/make_docker_calls.Rmd
deleted file mode 100644
index 3d35450..0000000
--- a/workspace/runners/make_docker_calls.Rmd
+++ /dev/null
@@ -1,191 +0,0 @@
----
-title: "Make Docker Calls"
-output: html_document
----
-
-First chunk creates calls for NHD_navigate and POI_Collapse.
-
-Includes one environment variable for the Hydro Region.
-
-The output .txt file can be executed with GNU parallel like:  
-`parallel --jobs 10 < workspace/navigate_calls.txt`
-
-```{r}
-data_paths <- jsonlite::read_json(file.path("../cache", "data_paths.json"))
-
-out_script <- "navigate_calls.txt"
-
-call <- "docker run"
-mount <- "--mount type=bind,source=$PWD/workspace,target=/jupyter"
-docker_image <- "dblodgett/hydrogeoenv-custom:latest"
-
-e1 <- "--env HYDREG=z!z"
-
-command <- paste("R -e \"rmarkdown::render('/jupyter/02_NHD_navigate.Rmd', output_file='/jupyter/reports/02_NHD_navigate_z!z.html')\" \n")
-
-hus <- c(paste0("0", c(1:2, 4:9)), 
-         "03S", "03W", "03N",
-         "10U", "10L",
-         paste0("1", c(1:8)))
-
-calls <- sapply(hus, function(hu) gsub("z!z", hu, paste(call, mount, e1, docker_image, command)))
-
-cat("", file = out_script, append = FALSE)
-for(i in 1:length(calls)) {
-  cat(calls[i], file = out_script, append = TRUE)
-}
-                
-                hus
-```
-
-The second chunk checks for completion of the NHD_navigate and POI_Collapse steps.
-
-Any completely missing geopackages and specific missing layers are printed if any.
-
-```{r}
-expect_files <- paste0("reference_", hus, ".gpkg")
-
-have_files <- list.files("/jupyter/cache")
-
-(missing_files <- expect_files[!expect_files %in% have_files])
-
-have_files <- expect_files[expect_files %in% have_files]
-
-expect_layers <- c("POIs", "reference_flowline")
-
-layers <- lapply(file.path("/jupyter/cache", have_files), function(x) sf::st_layers(x)$name)
-
-check <- lapply(layers, function(x, expect_layers) {
-    sapply(paste0("^", expect_layers, ".*"), function(y, x) {
-        any(grepl(y, unlist(x)))
-    }, x = x)
-}, expect_layers = expect_layers)
-
-for(f in seq_along(have_files)) {
-    if(any(!check[[f]])) {
-        print(paste0(have_files[f], ": ", paste(names(check[[f]])[which(!check[[f]])], collapse = ", ")))
-    }
-}
-```
-
-The following creates docker commands for hyRefactor flines and cats.
-
-Three environment variables are set for the output geopackage pack, the Raster Processing Unit, and a cache to be used for error output environments.
-
-The txt file can be used with GNU parallel like:  
-`parallel --jobs 10 < workspace/hyRefactor_calls.txt`
-
-```{r}
-out_script <- "hyRefactor_calls.txt"
-
-e1 <- "--env OUT_GPKG=/jupyter/cache/z!z_aggregate.gpkg"
-e11 <- "--env OUT_REFACTOR_GPKG=/jupyter/cache/z!z_refactor.gpkg"
-e2 <- "--env RPU_CODE=z!z"
-e3 <- "--env SPLIT_CACHE=/jupyter/temp/z!z_split.rda"
-e4 <- "--env LOOKUP_TABLE=/jupyter/cache/z!z_lookup.csv"
-
-command <- paste("R -e \"rmarkdown::render('/jupyter/05_hyRefactor_flines.Rmd', output_file='/jupyter/reports/05_hyRefactor_flines_z!z.html')\"",
-                 "-e \"rmarkdown::render('/jupyter/06-1_hyRefactor_cats.Rmd', output_file='/jupyter/reports/06-1_hyRefactor_cats_z!z.html')\"",
-                 "-e \"rmarkdown::render('/jupyter/06-2_aggregate_cats.Rmd', output_file='/jupyter/reports/06-2_aggregate_cats_z!z.html')\" \n")
-
-all_hus <- gsub("rpu_", "", names(data_paths$fdr))
-
-all_hus <- all_hus[!grepl("^2", all_hus)]
-
-errors <- list.files("temp", "*.rda$", full.names = TRUE)
-errors <- gsub(".rda", "", gsub("temp/", "", errors))
-
-hus <- all_hus[!all_hus %in% errors]
-
-calls <- sapply(hus, function(hu) gsub("z!z", hu, paste(call, mount, e1, e11, e2, e3, e4, docker_image, command)))
-
-cat("", file = out_script, append = FALSE)
-for(i in 1:length(calls)) {
-  cat(calls[i], file = out_script, append = TRUE)
-}
-```
-
-The next chunk checks for the expected output geopackages from the above calls.
-
-```{r}
-agg <- paste0(all_hus, "_aggregate.gpkg")
-ref <- paste0(all_hus, "_refactor.gpkg")
-expect_files <- c(ref, agg)
-
-have_files <- list.files("/jupyter/cache")
-
-(missing_files <- expect_files[!expect_files %in% have_files])
-```
-
-The next chunk checks which existing geopackages are missing the reconciled output.
-
-```{r}
-ref <- ref[ref %in% have_files]
-
-missing_reconciled <- sapply(file.path("/jupyter/cache", ref),
-                            function(x) !"refactored_flowpaths" %in% sf::st_layers(x)$name)
-
-missing_reconciled <- missing_reconciled[missing_reconciled]
-
-dplyr::arrange(tibble::tibble(file = names(missing_reconciled)))
-```
-
-The next chunk checks which divides have been competed and which haven't. This is the first step in catchment refactoring.
-
-```{r}
-missing_div <- sapply(file.path("/jupyter/cache", ref),
-                            function(x) !"refactored_divides" %in% sf::st_layers(x)$name)
-
-has_div <- missing_div[!missing_div]
-
-missing_div <- missing_div[missing_div]
-
-dplyr::arrange(tibble::tibble(file = names(missing_div)), file)
-
-# dplyr::arrange(tibble::tibble(file = names(has_div)), file)
-```
-
-The next chunk checks which final aggregation have been completed and which haven't.
-
-```{r}
-agg <- agg[agg %in% have_files]
-
-missing_agg <- sapply(file.path("/jupyter/cache", agg),
-                            function(x) !"aggregated_divides" %in% sf::st_layers(x)$name)
-
-has_agg <- missing_agg[!missing_agg]
-
-missing_agg <- missing_agg[missing_agg]
-
-dplyr::arrange(tibble::tibble(file = names(missing_agg)), file)
-
-dplyr::arrange(tibble::tibble(file = names(has_agg)), file)
-```
-
-```{r}
-out_script <- "finalize_calls.txt"
-
-e1 <- "--env HYDREG=z!z"
-
-command <- paste("R -e \"rmarkdown::render('/jupyter/07-1_merge.Rmd', output_file='/jupyter/reports/07-1_merge_z!z.html')\"",
-                 "-e \"rmarkdown::render('/jupyter/07-2_NonDend.Rmd', output_file='/jupyter/reports/07-2_NonDend_z!z.html')\" \n")
-
-command <- paste("R -e \"rmarkdown::render('/jupyter/07-1_merge.Rmd', output_file='/jupyter/reports/07-1_merge_z!z.html')\"",
-                 "-e \"rmarkdown::render('/jupyter/07-2_NonDend.Rmd', output_file='/jupyter/reports/07-2_NonDend_z!z.html')\" \n")
-
-hus <- c(paste0("0", c(1:2, 4:9)), 
-         "03S", "03W", "03N",
-         "10U", "10L",
-         paste0("1", c(1:8)))
-
-calls <- sapply(hus, function(hu) gsub("z!z", hu, paste(call, mount, e1, docker_image, command)))
-
-cat("", file = out_script, append = FALSE)
-for(i in 1:length(calls)) {
-  cat(calls[i], file = out_script, append = TRUE)
-}
-```
-
-```{r}
-
-```
diff --git a/workspace/runners/make_shifter_calls.Rmd b/workspace/runners/make_shifter_calls.Rmd
deleted file mode 100644
index 045fdd2..0000000
--- a/workspace/runners/make_shifter_calls.Rmd
+++ /dev/null
@@ -1,63 +0,0 @@
----
-  title: "Make Shifter Calls"
-  output: html_document
----
-
-  First chunk creates calls for NHD_navigate and POI_Collapse.
-
-Includes one environment variable for the Hydro Region.
-
-The output .txt file can be executed with GNU parallel like:
-  `parallel --jobs 10 < workspace/shifter_navigate_calls.txt`
-
-```{r}
-data_paths <- jsonlite::read_json(file.path("cache", "data_paths.json"))
-
-out_script <- "shifter_navigate_calls.txt"
-
-call <- "shifter"
-mount <- '--volume="/absolute/path/gfv2/gfv2.0/workspace:/jupyter"'
-docker_image <- '--image=dblodgett/hydrogeoenv-custom:latest' 
-
-command <- paste("R -e \"Sys.setenv(HYDREG='z!z')\"",
-                 "-e \"rmarkdown::render('/jupyter/02_NHD_navigate.Rmd', output_file='/jupyter/reports/02_NHD_navigate_z!z.html')\"",
-                 "-e \"rmarkdown::render('/jupyter/03_POI_Collapse.Rmd', output_file='/jupyter/reports/03_POI_Collapse_z!z.html')\" \n")
-
-hus <- c(paste0("0", c(1:9)), paste0("1", c(1:8)), "10U", "10L")
-
-calls <- sapply(hus, function(hu) gsub("z!z", hu, paste(call, mount, docker_image, command)))
-
-cat("", file = out_script, append = FALSE)
-for(i in 1:length(calls)) {
-  cat(calls[i], file = out_script, append = TRUE)
-}
-```
-
-The following creates docker commands for hyRefactor flines and cats.
-
-Three environment variables are set for the output geopackage pack, the Raster Processing Unit, and a cache to be used for error output environments.
-
-The txt file can be used with GNU parallel like:
-  `parallel --jobs 10 < workspace/shifter_hyRefactor_calls.txt`
-
-```{r}
-out_script <- "shifter_hyRefactor_calls.txt"
-
-command <- paste("R -e \"Sys.setenv(OUT_GPKG='/jupyter/cache/z!z.gpkg', RPU_CODE='z!z', SPLIT_CACHE='/jupyter/temp/z!z_split.rda', LOOKUP_TABLE='/jupyter/cache/z!z_lookup.csv')\"",
-                 "-e \"rmarkdown::render('/jupyter/05_hyRefactor_flines.Rmd', output_file='/jupyter/reports/05_hyRefactor_flines_z!z.html')\"",
-                 "-e \"rmarkdown::render('/jupyter/07_hyRefactor_cats.Rmd', output_file='/jupyter/reports/07_hyRefactor_cats_z!z.html')\" \n")
-
-all_hus <- gsub("rpu_", "", names(data_paths$fdr))
-
-errors <- list.files("temp", "*.rda$", full.names = TRUE)
-errors <- gsub(".rda", "", gsub("temp/", "", errors))
-
-hus <- all_hus[!all_hus %in% errors]
-
-calls <- sapply(hus, function(hu) gsub("z!z", hu, paste(call, mount, docker_image, command)))
-
-cat("", file = out_script, append = FALSE)
-for(i in 1:length(calls)) {
-  cat(calls[i], file = out_script, append = TRUE)
-}
-```
diff --git a/workspace/runners/run_all_R.R b/workspace/runners/run_all_R.R
deleted file mode 100644
index 228c631..0000000
--- a/workspace/runners/run_all_R.R
+++ /dev/null
@@ -1,16 +0,0 @@
-rmarkdown::render('01_NHD_prep.Rmd', 
-                  output_file='temp/01_NHD_prep_test.html')
-
-setwd("../")
-
-calls <- readLines("workspace/runners/navigate_calls.txt")
-
-cl <- parallel::makeCluster(5, outfile = "workspace/temp/error.log")
-
-pbapply::pblapply(calls, shell, cl = cl)
-
-calls <- readLines("workspace/runners/hyRefactor_calls.txt")
-
-parallel::parLapply(cl = cl, X = calls, fun = shell)
-
-parallel::stopCluster(cl)
diff --git a/workspace/runners/run_one_R.R b/workspace/runners/run_one_R.R
deleted file mode 100644
index 1bfba3d..0000000
--- a/workspace/runners/run_one_R.R
+++ /dev/null
@@ -1,74 +0,0 @@
-possible_vpu <- c("01", "08", "10L", "15", "02", "04", "05", "06", 
-                  "07", "09", "03S", "03W", 
-                  "03N", "10U", "11", "12", 
-                  "13", "14",  "16", "17", "18")
-
-
-vpu_codes <- VPU <- vpu <- "01"
-
-check_file <- file.path("temp/", paste0(VPU, ".lock"))
-
-if(!file.exists(check_file)) {
-  cat("...", file = check_file)
-  
-  source("R/config.R")
-  source("R/utils.R")
-  
-  unlink(rfc_gpkg)
-  unlink(nav_gpkg)
-  unlink(ND_gpkg)
-  unlink(gf_gpkg)
-  unlink(temp_gpkg)
-  unlink(vpu_lookup_table_file)
-  
-  for(r in rpu_codes$rpuid) {
-    unlink(paste0("cache/", r, "_refactor.gpkg"))
-  }
-  
-  rmarkdown::render('01_NHD_prep.Rmd', 
-                    output_file=paste0('temp/01_NHD_prep_', VPU, '.html'))
-  
-  rmarkdown::render('02_NHD_navigate.Rmd', 
-                    output_file=paste0('temp/02_NHD_navigate_', VPU, '.html'))
-  
-  for(rpu_code in rpu_codes$rpuid) {
-    
-    source("R/config.R")
-    
-    unlink(out_agg_gpkg)
-    unlink(lookup_table_file)
-    
-    rmarkdown::render("05_hyRefactor_flines.Rmd",
-                      output_file = paste0("temp/05_hyRefactor_flines_", rpu_code, ".html"))
-    
-    rmarkdown::render("06-1_hyRefactor_cats.Rmd",
-                      output_file = paste0("temp/06-1_hyRefactor_cats_", rpu_code, ".html"))
-    
-    rmarkdown::render("06-2_aggregate_cats.Rmd",
-                      output_file = paste0("temp/06-2_aggregate_cats_", rpu_code, ".html"))
-  }
-  
-  rmarkdown::render("07-1_merge.Rmd",
-                    output_file = "temp/07-1_merge_test.html")
-  
-  rmarkdown::render("07-2_NonDend.Rmd",
-                    output_file = "temp/07-2_NonDend_test.html")
-  
-  if(is.na(Sys.getenv("sb_user", unset=NA))){
-    message("upload skipped due to lack of login info")
-  } else {
-    
-    library(sbtools)
-    
-    authenticate_sb(Sys.getenv("sb_user", unset=""), Sys.getenv("sb_pass", unset=""))
-    
-    sb_reference <- "61295190d34e40dd9c06bcd7"
-    sb_refactor <- "61fbfdced34e622189cb1b0a"
-    sb_gf <- "60be1502d34e86b9389102cc"
-    
-    sbtools::item_replace_files(sb_reference, nav_gpkg)
-    sbtools::item_replace_files(sb_refactor, rfc_gpkg)
-    sbtools::item_replace_files(sb_gf, gf_gpkg)
-  }
-
-}
-- 
GitLab