From 71821b6191fa2c67f2c970ca2dc448fc59e01005 Mon Sep 17 00:00:00 2001 From: Beaudette Date: Mon, 25 Sep 2023 10:20:02 -0700 Subject: [PATCH] new ideas, thanks shawn --- .../bergstrom2019/bergstrom2019.xlsx | Bin 0 -> 52339 bytes misc/sandbox/evolve.R | 5 +- misc/sandbox/warp.R | 102 ++++++++++++++++++ 3 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 misc/example-data/bergstrom2019/bergstrom2019.xlsx create mode 100644 misc/sandbox/warp.R diff --git a/misc/example-data/bergstrom2019/bergstrom2019.xlsx b/misc/example-data/bergstrom2019/bergstrom2019.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bb134e2dd51231d8c10de2b1702c4d350306d409 GIT binary patch literal 52339 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 R15fy0FQ6bPkNvgxzW`A_{Wkyr literal 0 HcmV?d00001 diff --git a/misc/sandbox/evolve.R b/misc/sandbox/evolve.R index 7be98877e..0dd026eee 100644 --- a/misc/sandbox/evolve.R +++ b/misc/sandbox/evolve.R @@ -105,9 +105,12 @@ o <- fetchOSD(c('musick')) e <- evolve(o, iter = 75, loss.limits = c(1, 3)) par(mar = c(0, 0, 0, 0)) -plotSPC(e, plot.depth.axis = FALSE, name.style = 'center-center', print.id = FALSE, width = 0.45) +plotSPC(e, depth.axis = FALSE, name.style = 'center-center', print.id = FALSE, width = 0.45) abline(h = 0) +par(mar = c(0, 0, 0, 0)) +plotSPC(e, depth.axis = FALSE, name = NA, print.id = FALSE, width = 0.45, lwd = 0.33) +abline(h = 0, lwd = 1, lty = 2) # plotSPC(z, plot.depth.axis = FALSE, name.style = 'center-center', print.id = FALSE, width = 0.45) diff --git a/misc/sandbox/warp.R b/misc/sandbox/warp.R new file mode 100644 index 000000000..68550d5cc --- /dev/null +++ b/misc/sandbox/warp.R @@ -0,0 +1,102 @@ +library(aqp) +library(soilDB) + + +# https://www.fao.org/3/cb0509en/CB0509EN.pdf + + +#' @title Inflate/Deflate Horizon Thickness +#' +#' @param x a `SoilProfileCollection` object +#' @param fact numeric or character; warping factor specified as a single numeric value, vector of numeric values (length = nrow(x)), or column name of a horizon level attribute containing numeric values +#' @param updateProfileID logical; modifiy profile IDs +#' @param suffix character; suffix added to profile IDs when `updateProfileID = TRUE` +#' +#' @return a modified version of `x`, `SoilProfileCollection` object +#' @export +#' +#' +warp <- function(x, fact, updateProfileID = TRUE, suffix = '-w') { + + ## TODO: vectorize over profiles, and make more efficient + + # parts + .h <- horizons(x) + .htb <- horizonDepths(x) + .n <- nrow(.h) + + # sanity check: fact should be length: + # * 1, used by all horizons + # * nrow(x), each horizon has its own factor + # * column name + + if(inherits(fact, 'character')) { + fact <- x[[fact]] + if(is.null(fact)) { + stop('fact must name a column in horizons') + } + } else if(inherits(fact, 'numeric')) { + + if(length(fact) > 1 && length(fact) != .n) { + stop('fact must be length 1 or nrow(x)') + } + + } else { + stop('fact must be either character vector or numeric') + } + + # hz thickness + .thick <- .h[[.htb[2]]] - .h[[.htb[1]]] + + # apply inflation/deflation factor to horizon thickness + # round to integers + .thick <- round(.thick * fact) + + # generate new horizon depth sequence + # starting from original topmost depth + .start <- .h[1, .htb[1]] + + # tops / bottoms + .tops <- c(.start, cumsum(.thick[-.n])) + .bottoms <- c(cumsum(.thick)) + + # replace original values + .h[[.htb[1]]] <- .tops + .h[[.htb[2]]] <- .bottoms + + # re-pack horizons + replaceHorizons(x) <- .h + + # optionally update profile ID + if(updateProfileID) { + .pID <- profile_id(x) + profile_id(x) <- sprintf("%s%s", .pID, suffix) + } + + return(x) +} + + +o <- fetchOSD('zook') +oo <- warp(o, fact = c(1.8, 1.3, 0.6, 0.75, 0.8, 1, 1, 1)) +x <- combine(o, oo) + +.y1 <- x[1, , .TOP] +.y2 <- x[2, , .TOP] + +par(mar = c(1, 0, 0 , 2)) +plotSPC(x, name.style = 'center-center', cex.names = 0.8, width = 0.2, max.depth = 200) +arrows(x0 = 1 + 0.2, y0 = .y1, x1 = 2 - 0.2, y1 = .y2, len = 0.1, col = 2) + + + +o$fact <- c(1, 1, 1, 1, 1, 1, 1, 1) +oo$fact <- c(1.8, 1.3, 0.6, 0.75, 0.8, 1, 1, 1) +x <- combine(o, oo) + +par(mar = c(1, 0, 3 , 2)) +plotSPC(x, name.style = 'center-center', cex.names = 0.8, width = 0.2, max.depth = 200, depth.axis = FALSE, hz.depths = TRUE, color = 'fact') +arrows(x0 = 1 + 0.2, y0 = .y1, x1 = 2 - 0.2, y1 = .y2, len = 0.1, col = 'grey') + + +