diff --git a/workspace/R/2_prep.R b/workspace/R/2_prep.R index b43ada7a15c6555e0e6bb09e354e10c79de77f50..06c409110882f30259e353e1be71365c12da1ad8 100644 --- a/workspace/R/2_prep.R +++ b/workspace/R/2_prep.R @@ -482,9 +482,76 @@ prepare_vpu_base_layers <- function(ref_gpkg, nav_gpkg, vpu, full_cat_table, rpu write_sf(catchments, out_refac_gpkg, nhd_catchment) - rpu_list[[rpu_code]] <- list(flowline = nhd, catchment = catchments) + rpu_list[[rpu_code]] <- list(flowline = nhd_sub, catchment = catchments) } return(list(vpu = vpu, flowline = nhd, catchment = cats, catchment_network = cat_network, waterbodies = waterbodies, rpus = rpu_list)) } + +#' prepare rpu vpu output list +#' @param vpu_base list of data as output from prepare_vpu_base_layers +#' @param rpu_vpu data.frame ontaining all rpu-vpu pairs +#' @returns list of outputs from a vpu and rpus that make it up +prep_rpu_vpu_out_list <- function(vpu_base, rpu_vpu) { + + nhd <- vpu_base$flowline + vpu <- vpu_base$vpu + + out_vpu <- nhd %>% + st_drop_geometry() %>% + select(COMID, toCOMID) %>% + filter(!toCOMID %in% COMID & !toCOMID == 0) + + rpus <- rpu_vpu[rpu_vpu$vpuid == vpu,]$rpuid + + rpu_list <- setNames(rep(list(list()), length(rpus)), rpus) + + for(rpu_code in rpus) { + + nhd_sub <- vpu_base$rpus[[rpu_code]]$flowline + + rpu_list[[rpu_code]] <- nhd_sub %>% + st_drop_geometry() %>% + select(COMID, toCOMID) %>% + filter(!toCOMID %in% COMID & !toCOMID == 0) + } + return(list(vpu = vpu, vpu_out = out_vpu, rpu_out = rpu_list)) +} + +#' prepare rpu vpu out +#' @param rpu_vpu_out_list list of rpu vpu outlets +#' @param fline reference flowlines +#' @returns table of flowlines that are rpu and/or vpu outlets +prep_rpu_vpu_out <- function(rpu_vpu_out_list, fline) { + + make_df <- function(x, d, n) { + y <- d[[x]] + nr <- nrow(y) + na <- names(d)[x] + o <- data.frame(d = rep(na, nr), + COMID = d[[x]]$COMID, + toCOMID = d[[x]]$toCOMID) + names(o) <- c(n, "COMID", "toCOMID") + o + } + + out_rpu <- unlist(lapply(unname(rpu_vpu_out_list), \(x) x$rpu_out), recursive = FALSE) + out_vpu <- lapply(rpu_vpu_out_list, \(x) x$vpu_out) + + names(out_vpu) <- sapply(rpu_vpu_out_list, \(x) x$vpu) + + rpu <- do.call(rbind, lapply(1:length(out_rpu), make_df, d = out_rpu, n = "rpu")) + + vpu <- do.call(rbind, lapply(1:length(out_vpu), make_df, d = out_vpu, n = "vpu")) + + out_rpu_vpu <- left_join(rpu, vpu, by = "COMID") + + out_rpu_vpu <- select(out_rpu_vpu, RPUID = rpu, VPUID = vpu, COMID = COMID, toCOMID = toCOMID.x) + + out_rpu_vpu <- left_join(out_rpu_vpu, select(sf::st_drop_geometry(fline), COMID, toRPUID = RPUID, toVPUID = VPUID), + by = c("toCOMID" = "COMID")) + + out_rpu_vpu + +} diff --git a/workspace/R/config.R b/workspace/R/config.R index c2dcfae1d5e40d1018d395899409b07f8e2044e2..1af3f6142047458ef7b63e3caad2b62b15d9e1b2 100644 --- a/workspace/R/config.R +++ b/workspace/R/config.R @@ -1,7 +1,7 @@ # rpu_vpu <- readr::read_csv(system.file("extdata/rpu_vpu.csv", package = "hyfabric"), # show_col_types = FALSE) -# rpu_vpu_out <- readr::read_csv("cache/rpu_vpu_out.csv", +# rpu_vpu_out <- readr::read_csv("cache/rpu_vpu_out.csv", # col_types = c("c", "c", "i" , "i"), show_col_types = FALSE) # # The below deals with various ways to get / set rpu and vpu codes diff --git a/workspace/_targets.R b/workspace/_targets.R index cc9d049f9344c5834e9e1078c32b5f3d6aa4b165..1806da164b1d9fe8950f8b82d58faab5bf8966bb 100644 --- a/workspace/_targets.R +++ b/workspace/_targets.R @@ -81,5 +81,8 @@ list( # ~1GB of memory tar_target(vpu_base, prepare_vpu_base_layers(ref_gpkg, nav_gpkg, vpu_codes, full_cat_table, rpu_vpu), - pattern = map(ref_gpkg, nav_gpkg, vpu_codes), deployment = "worker") + pattern = map(ref_gpkg, nav_gpkg, vpu_codes), deployment = "worker"), + tar_target(rpu_vpu_out_list, prep_rpu_vpu_out_list(vpu_base, rpu_vpu), pattern = map(vpu_base), + deployment = "worker", iteration = "list"), + tar_target(rpu_vpu_out, prep_rpu_vpu_out(rpu_vpu_out_list, reference_flowlines)) ) \ No newline at end of file diff --git a/workspace/workflow_runner.R b/workspace/workflow_runner.R index 40ced23ad7441e1260044f3842deaf5a38f3e007..05e24280e3e3da4864d8d629c2d8432266d7c394 100644 --- a/workspace/workflow_runner.R +++ b/workspace/workflow_runner.R @@ -38,7 +38,8 @@ if(FALSE) { # this won't run if you just bang through this file # run branches for a given target in parallel if you have enough memory # note this will only work for targets with 'deployment = "worker"' -tar_make_future(vpu_base, workers = 8) +tar_make_future(rpu_vpu_out_list, workers = 8) +tar_make(rpu_vpu_out) # to run all, just do: tar_make()