From ff13cc1d05ece0e873727b282d3b4230ef98cda3 Mon Sep 17 00:00:00 2001 From: Jason Everett Date: Tue, 5 Aug 2025 09:51:38 +1000 Subject: [PATCH 01/10] Start cleaning up VoCC --- DESCRIPTION | 5 +- NAMESPACE | 4 +- R/dVoCC.R | 85 ++++++++++++++++++++++++----- R/spatGrad.R | 52 +++++++----------- man/dVoCC.Rd | 1 - man/spatGrad.Rd | 2 +- man/trajClas.Rd | 138 ------------------------------------------------ man/trajLine.Rd | 67 ----------------------- readme.md | 1 + 9 files changed, 96 insertions(+), 259 deletions(-) delete mode 100644 man/trajClas.Rd delete mode 100644 man/trajLine.Rd diff --git a/DESCRIPTION b/DESCRIPTION index e725390..99099dd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -21,7 +21,7 @@ Imports: geosphere, ggplot2, magrittr, - parallel, + parallelly, RColorBrewer, rlang, sp, @@ -33,7 +33,6 @@ Suggests: knitr, mapplots, ncdf4, - prettydoc, rasterVis, repmis, rmarkdown, @@ -43,6 +42,6 @@ BugReports: https://github.com/JorGarMol/VoCC/issues License: AGPL (>= 3) Encoding: UTF-8 LazyData: true -RoxygenNote: 7.3.1 +RoxygenNote: 7.3.2 VignetteBuilder: knitr, rmarkdown diff --git a/NAMESPACE b/NAMESPACE index 2ef3380..3eb78da 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -11,10 +11,8 @@ export(shiftTime) export(spatGrad) export(sumSeries) export(tempTrend) -export(trajClas) -export(trajLine) -export(voccTraj) importFrom(data.table,":=") importFrom(foreach,"%dopar%") importFrom(magrittr,"%>%") importFrom(rlang,.data) +importFrom(stats,na.omit) diff --git a/R/dVoCC.R b/R/dVoCC.R index caa6ddc..7bc7ccf 100644 --- a/R/dVoCC.R +++ b/R/dVoCC.R @@ -58,7 +58,6 @@ #' terra::plot(r1) #' #' \dontrun{ -#' #' # Cell-specific, distance-unrestricted climate analogue velocity based on least-cost path distances #' # First, create the conductance matrix (all land cells considered to have conductance of 1) #' r <- JapTC @@ -84,7 +83,7 @@ dVoCC <- function(clim, n, tdiff, method = "Single", climTol, geoTol, geoDis <- climDis <- ang <- vel <- target <- cid <- NULL # Fix devtools check warnings - if (distfun == "Euclidean" & lonlat == TRUE) { + if (distfun == "Euclidean" && lonlat == TRUE) { print("Error: Euclidean distances specified for unprojected coordinates") stop() } @@ -99,17 +98,24 @@ dVoCC <- function(clim, n, tdiff, method = "Single", climTol, geoTol, # matrix with the future climatic values for all cells fut <- dat[, seq(2, (2 * n), by = 2), with = FALSE] - # set things up for parallel processing - cores <- parallel::detectCores() - ncores <- cores[1] - 1 - cuts <- cut(1:nrow(dat), ncores, labels = FALSE) - cl <- parallel::makeCluster(ncores) + # Determine optimal number of cores, ensuring we don't exceed data rows + ncores <- parallelly::availableCores(constraints = "connections", omit = 2) + ncores <- min(ncores, nrow(dat)) # Don't use more cores than data rows + ncores <- max(ncores, 1) # Ensure at least 1 core + + # Only use parallel processing if we have multiple cores and sufficient data + if (ncores > 1 && nrow(dat) > ncores) { + cuts <- cut(seq_len(nrow(dat)), ncores, labels = FALSE) + cl <- parallelly::makeClusterPSOCK(ncores, autoStop = TRUE) + + doParallel::registerDoParallel(cl) - doParallel::registerDoParallel(cl) + result <- foreach::foreach(a = seq_len(ncores), + .combine = rbind, + .packages = c("terra", "gdistance", "geosphere", "data.table"), + .multicombine = TRUE) %dopar% { - result <- foreach::foreach(x = 1:ncores, .combine = rbind, .packages = c("terra", "gdistance", "geosphere", "data.table"), .multicombine = TRUE) %dopar% { - a <- x - Dat <- dat[cuts == a, ] + Dat <- dat[cuts == a, ] resu <- data.table::data.table( focal = Dat$cid, @@ -177,7 +183,62 @@ dVoCC <- function(clim, n, tdiff, method = "Single", climTol, geoTol, } return(resu) } - parallel::stopCluster(cl) + } else { + # Sequential processing for small datasets or limited cores + result <- data.table::data.table( + focal = dat$cid, + target = as.integer(NA), + climDis = as.double(NA), + geoDis = as.double(NA), + ang = as.double(NA), + vel = as.double(NA) + ) + + for (i in seq_len(nrow(dat))) { + # for each focal cell subset target cell analogues (within ClimTol) + pres <- as.numeric(dat[i, seq(1, (2 * n), by = 2), with = FALSE]) + dif <- data.table::data.table(sweep(fut, 2, pres, "-")) + + # Identify future analogue cells + if (method == "Single") { # Ohlemuller et al 2006 / Hamann et al 2015 + upper <- colnames(dif) + l <- lapply(upper, function(x) call("<", call("abs", as.name(x)), climTol[grep(x, colnames(dif))])) + ii <- Reduce(function(c1, c2) substitute(.c1 & .c2, list(.c1 = c1, .c2 = c2)), l) + anacid <- dat$cid[dif[eval(ii), which = TRUE]] # cids analogue cells + } + + if (method == "Variable") { # Garcia Molinos et al. 2017 + climTol <- as.numeric(dat[i, ((2 * n) + 1):(3 * n), with = FALSE]) # focal cell tolerance + upper <- colnames(dif) + l <- lapply(upper, function(x) call("<", call("abs", as.name(x)), climTol[grep(x, colnames(dif))])) + ii <- Reduce(function(c1, c2) substitute(.c1 & .c2, list(.c1 = c1, .c2 = c2)), l) + anacid <- dat$cid[dif[eval(ii), which = TRUE]] # cids analogue cells + } + + # LOCATE CLOSEST ANALOGUE + if (length(anacid) > 0) { + # check which of those are within distance and get the analogue at minimum distance + if (distfun == "Euclidean") { + d <- stats::dist(cbind(dat$x[i], dat$y[i]), cbind(dat$x[dat$cid %in% anacid], dat$y[dat$cid %in% anacid])) + } # in x/y units + if (distfun == "GreatCircle") { + d <- (geosphere::distHaversine(cbind(dat$x[i], dat$y[i]), cbind(dat$x[dat$cid %in% anacid], dat$y[dat$cid %in% anacid]))) / 1000 + } # in km + + an <- anacid[d < geoTol] # cids analogue cells within search radius + dis <- d[d < geoTol] # distance to candidate analogues + if (length(an) > 0) { + result[i, target := an[which.min(dis)]] # cid of geographically closest climate analogue + if (method == "Single") { + result[i, climDis := mean(as.numeric(dif[which(anacid == result[i, target]), ]))] + } # mean clim difference for the closest analogue + result[i, geoDis := min(dis)] + result[i, ang := geosphere::bearing(dat[i, c("x", "y")], dat[cid == result[i, target], c("x", "y")])] + result[i, vel := result$geoDis[i] / tdiff] + } + } + } + } return(result) } diff --git a/R/spatGrad.R b/R/spatGrad.R index 179833a..3369ff8 100644 --- a/R/spatGrad.R +++ b/R/spatGrad.R @@ -21,6 +21,7 @@ #' @seealso{\code{\link{tempTrend}}, \code{\link{gVoCC}}} #' #' @importFrom rlang .data +#' @importFrom stats na.omit #' #' @export #' @author Jorge Garcia Molinos, David S. Schoeman, and Michael T. Burrows @@ -40,11 +41,13 @@ #' terra::plot(sg) #' spatGrad <- function(r, th = -Inf, projected = FALSE) { + # Fix devtools check warnings + "." <- NULL gradNS1 <- gradNS2 <- gradNS3 <- gradNS4 <- gradNS5 <- gradNS6 <- gradWE1 <- gradWE2 <- gradWE3 <- gradWE4 <- gradWE5 <- gradWE6 <- NULL sy <- sx <- NSgrad <- WEgrad <- NULL clim <- climE <- climN <- climNE <- climNW <- climS <- climSE <- climSW <- climW <- climFocal <- NULL - to <- code <- i.to <- LAT <- angle <- Grad <- NULL + to <- code <- i.to <- LAT <- angle <- Grad <- .SD <- NULL if (terra::nlyr(r) > 1) { r <- terra::mean(r, na.rm = TRUE) @@ -55,11 +58,8 @@ spatGrad <- function(r, th = -Inf, projected = FALSE) { # Create a columns for focal and each of its 8 adjacent cells y <- data.table::data.table(terra::adjacent(r, 1:terra::ncell(r), directions = 8, pairs = TRUE)) - y <- stats::na.omit(y[, climFocal := terra::values(r)[from]][order(from, to)]) # Get value for focal cell, order the table by raster sequence and omit NAs (land cells) - - # TODO JDE added in na.rm = TRUE as I was getting NaN. I can't test if this behaviour has changed from raster.... - # On second thought I am not sure if NAs are valid here. It gives errors below when calculating weighted means - y[, clim := terra::values(r, na.rm = TRUE)[to]] # Insert values for adjacent cells + y <- na.omit(y[, climFocal := terra::values(r)[from]][order(from, to)]) # Get value for focal cell, order the table by raster sequence and omit NAs (land cells) + y[, clim := terra::values(r)[to]] # Insert values for adjacent cells y[, sy := terra::rowFromCell(r, from) - terra::rowFromCell(r, to)] # Column to identify rows in the raster (N = 1, mid = 0, S = -1) y[, sx := terra::colFromCell(r, to) - terra::colFromCell(r, from)] # Same for columns (E = 1, mid = 0, W = -1) y[sx > 1, sx := -1] # Sort out the W-E wrap at the dateline, part I @@ -67,14 +67,9 @@ spatGrad <- function(r, th = -Inf, projected = FALSE) { y[, code := paste0(sx, sy)] # Make a unique code for each of the eight neighbouring cells # Code cells with positions - y[ - list( - code = c("10", "-10", "-11", "-1-1", "11", "1-1", "01", "0-1"), - to = c("climE", "climW", "climNW", "climSW", "climNE", "climSE", "climN", "climS") - ), - on = "code", - code := i.to - ] + y[.(code = c("10", "-10", "-11", "-1-1", "11", "1-1", "01", "0-1"), + to = c("climE", "climW", "climNW", "climSW", "climNE", "climSE", "climN", "climS")), + on = "code", code := i.to] y <- data.table::dcast(y[, c("from", "code", "clim")], from ~ code, value.var = "clim") y[, climFocal := terra::values(r)[from]] # Put climFocal back in y[, LAT := terra::yFromCell(r, from)] # Add focal cell latitude @@ -93,7 +88,8 @@ spatGrad <- function(r, th = -Inf, projected = FALSE) { y[, gradWE5 := (climE - climFocal) / (cos(co * CircStats::rad(LAT)) * (d * re[1]))] y[, gradWE6 := (climSE - climS) / (cos(co * CircStats::rad(LAT - re[2])) * (d * re[1]))] - # NS gradients difference in temperatures for each northern and southern pairs divided by the distance between them (111.325 km per degC *re[2] degC) + # NS gradients difference in temperatures for each northern and southern pairs divided by + # the distance between them (111.325 km per degC *re[2] degC) # Positive values indicate an increase in sst from S to N (i.e., in line with the Cartesian y axis) y[, gradNS1 := (climNW - climW) / (d * re[2])] y[, gradNS2 := (climN - climFocal) / (d * re[2])] @@ -102,29 +98,16 @@ spatGrad <- function(r, th = -Inf, projected = FALSE) { y[, gradNS5 := (climFocal - climS) / (d * re[2])] y[, gradNS6 := (climE - climSE) / (d * re[2])] - - for (nn in 1:365){ - - print(nn) - - print(stats::weighted.mean(y[nn,12:17], w = c(1, 2, 1, 1, 2, 1), na.rm = TRUE)) - - - } - - - browser() - # Calulate NS and WE gradients. NOTE: for angles to work (at least using simple positive and negative values on Cartesian axes), - # S-N & W-E gradients need to be positive. - # JDE Notes: 1 in apply = operate over rows - # Lots of NAs in clim. Can these be removed? Should they be? Chat to Dave S - y[, WEgrad := apply(data.table::.SD, 1, function(x) stats::weighted.mean(x, w = c(1, 2, 1, 1, 2, 1), na.rm = TRUE)), .SDcols = gradWE1:gradWE6] - y[, NSgrad := apply(data.table::.SD, 1, function(x) stats::weighted.mean(x, c(1, 2, 1, 1, 2, 1), na.rm = T)), .SDcols = 18:23] + # Calulate NS and WE gradients. + # NOTE: for angles to work (at least using simple positive and negative values on Cartesian axes), + # S-N & W-E gradients need to be positive) + y[, WEgrad := apply(.SD, 1, function(x) stats::weighted.mean(x, c(1, 2, 1, 1, 2, 1), na.rm = TRUE)), .SDcols = 12:17] + y[, NSgrad := apply(.SD, 1, function(x) stats::weighted.mean(x, c(1, 2, 1, 1, 2, 1), na.rm = TRUE)), .SDcols = 18:23] y[is.na(WEgrad) & !is.na(NSgrad), WEgrad := 0L] # Where NSgrad does not exist, but WEgrad does, make NSgrad 0 y[!is.na(WEgrad) & is.na(NSgrad), NSgrad := 0L] # same the other way around # Calculate angles of gradients (degrees) - adjusted for quadrant (0 deg is North) - y[, angle := angulo(data.table::.SD$WEgrad, data.table::.SD$NSgrad), .SDcols = c("WEgrad", "NSgrad")] + y[, angle := angulo(.SD$WEgrad, .SD$NSgrad), .SDcols = c("WEgrad", "NSgrad")] # Calculate the vector sum of gradients (C/km) y[, Grad := sqrt(apply(cbind((y$WEgrad^2), (y$NSgrad^2)), 1, sum, na.rm = TRUE))] @@ -139,5 +122,6 @@ spatGrad <- function(r, th = -Inf, projected = FALSE) { rGrad[rGrad[] < th] <- th output <- c(rGrad, rAng) names(output) <- c("Grad", "Ang") + return(output) } diff --git a/man/dVoCC.Rd b/man/dVoCC.Rd index fcbece5..4c32c9d 100644 --- a/man/dVoCC.Rd +++ b/man/dVoCC.Rd @@ -75,7 +75,6 @@ r1[avocc1$focal] <- avocc1$vel terra::plot(r1) \dontrun{ - # Cell-specific, distance-unrestricted climate analogue velocity based on least-cost path distances # First, create the conductance matrix (all land cells considered to have conductance of 1) r <- JapTC diff --git a/man/spatGrad.Rd b/man/spatGrad.Rd index 7348782..6b3da32 100644 --- a/man/spatGrad.Rd +++ b/man/spatGrad.Rd @@ -11,7 +11,7 @@ spatGrad(r, th = -Inf, projected = FALSE) Alternatively, a \code{raster} with the annual climatic values averaged over the period of interest.} -\item{th}{\code{Integer} indicating a lower thershold to truncate the spatial +\item{th}{\code{Integer} indicating a lower threshold to truncate the spatial gradient with. Use -Inf (default) if no threshold required.} \item{projected}{\code{Logical} is the source raster in a projected coordinate system? diff --git a/man/trajClas.Rd b/man/trajClas.Rd deleted file mode 100644 index f18e690..0000000 --- a/man/trajClas.Rd +++ /dev/null @@ -1,138 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/trajClas.R -\name{trajClas} -\alias{trajClas} -\title{Climate velocity trajectory classification} -\usage{ -trajClas( - traj, - vel, - ang, - mn, - trajSt, - tyr, - nmL, - smL, - Nend, - Nst, - NFT, - DateLine = FALSE -) -} -\arguments{ -\item{traj}{\code{data.frame} as retuned by voccTraj containing the coordinates -and identification number for each trajectory.} - -\item{vel}{\code{raster} with the magnitude of gradient-based climate velocity.} - -\item{ang}{\code{raster} with velocity angles.} - -\item{mn}{\code{raster} with mean climatic values for the study period.} - -\item{trajSt}{\code{integer} number of trajectories starting from each cell or spatial unit.} - -\item{tyr}{\code{integer} number of years comprising the projected period.} - -\item{nmL}{\code{numeric} upper threshold (distance units as per vel object) up to which -a trajectory is considered to have traveled a negligible distance over the study period (non-moving).} - -\item{smL}{\code{numeric} upper threshold up to which a trajectory is considered to have traveled a small -distance over the study period (slow-moving).} - -\item{Nend}{\code{numeric} the percentage of trajectories ending to be used as threshold in the classification.} - -\item{Nst}{\code{numeric} the percentage of trajectories starting to be used as threshold in the classification.} - -\item{NFT}{\code{numeric} the percentage of trajectories flowing through to be used as threshold in the classification.} - -\item{DateLine}{\code{logical} does the raster extent cross the international date line? (default "FALSE").} -} -\value{ -A \code{raster.stack} containing the trajectory classification ("TrajClas"), -as well as those based on trajectory length ("ClassL"; 1 non-moving, 2 slow-moving, 3 fast-moving cells), -boundrary ("BounS") and internal sinks ("IntS"), and the proportion of trajectories ending("PropEnd"), -flowing through ("PropFT") and starting ("PropSt"). The trajectory classes ("TrajClas") are (1) non-moving, -(2) slow-moving, (3) internal sinks, (4) boundary sinks, (5) sources, (6) relative sinks, (7) corridors, -(8) divergence and (9) convergence. -} -\description{ -Function for the spatial classification of cells based on VoCC trajectories after Burrows et al. (2014). The function performs -a hierarchical sequential classification based on length of trajectories, geographical features, and the relative abundance of -trajectories ending in, starting from and flowing through each cell. Essentially, cells are first classified as non-moving, -slow-moving and fast-moving relative to the distance a trajectory will cover over the projection period based on local climate velocities. -Two types of climate sinks are then identified among the fast-moving cells: (i) boundary (e.g., coastal) cells disconnected from cooler (warmer) -neighbouring cells under a locally warming (cooling) climate, and (ii) locations with endorheic spatial gradients where the velocity angles of -neighbouring cells converge towards their central point of intersection. Finally, the remaining cells are classified by reference to the total -number of trajectories per cell based on the proportions of the number of trajectories starting from (Nst), ending in (Nend), and flowing -through (NFT) a cell over the period. Based on these proportions, cells are classified into five classes: (1) climate sources, when no -trajectories end in a cell (Nend = 0); (2) relative climate sinks, when the relative number of trajectories ending in a cell is high and the -proportion of starting trajectories is low; (3) corridors as cells with a high proportion of trajectories passing through; and (4) divergence -and (5) convergence cells identified from the remaining cells as those where fewer/more trajectories ended than started in that -cell, respectively. -} -\examples{ - -HSST <- VoCC_get_data("HSST.tif") - -# input raster layers -yrSST <- sumSeries(HSST, - p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST), - fun = function(x) colMeans(x, na.rm = TRUE), freqin = "months", freqout = "years" -) - -mn <- terra::mean(yrSST, na.rm = TRUE) -tr <- tempTrend(yrSST, th = 10) -sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE) -v <- gVoCC(tr, sg) -vel <- v[[1]] -ang <- v[[2]] - -# Get the set of starting cells for the trajectories and calculate trajectories -# at 1/4-deg resolution (16 trajectories per 1-deg cell) -mnd <- terra::disagg(mn, 4) -veld <- terra::disagg(vel, 4) -angd <- terra::disagg(ang, 4) -lonlat <- stats::na.omit(data.frame( - terra::xyFromCell(veld, 1:terra::ncell(veld)), - veld[], angd[], mnd[] -))[, 1:2] - -traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50, correct = TRUE) - -# Generate the trajectory-based classification -clas <- trajClas(traj, vel, ang, mn, - trajSt = 16, tyr = 50, nmL = 20, smL = 100, - Nend = 45, Nst = 15, NFT = 70, DateLine = FALSE -) - -# Define first the colour palette for the full set of categories -my_col <- c( - "gainsboro", "darkseagreen1", "coral4", "firebrick2", "mediumblue", "darkorange1", - "magenta1", "cadetblue1", "yellow1" -) -# Keep only the categories present in our raster -my_col <- my_col[sort(unique(clas[[7]][]))] - -# Classify raster / build attribute table -clasr <- ratify(clas[[7]]) -rat_r <- levels(clasr)[[1]] -rat_r$trajcat <- c( - "N-M", "S-M", "IS", "BS", "Srce", - "RS", "Cor", "Div", "Con" -)[sort(unique(clas[[7]][]))] -levels(clasr) <- rat_r -# Produce the plot using the rasterVis levelplot function -rasterVis::levelplot(clasr, - col.regions = my_col, - xlab = NULL, ylab = NULL, scales = list(draw = FALSE) -) -} -\references{ -\href{https://www.nature.com/articles/nature12976}{Burrows et al. 2014}. Geographical limits to species-range shifts are suggested by climate velocity. Nature, 507, 492-495. -} -\seealso{ -{\code{\link{voccTraj}}} -} -\author{ -Jorge Garcia Molinos -} diff --git a/man/trajLine.Rd b/man/trajLine.Rd deleted file mode 100644 index 50c03a4..0000000 --- a/man/trajLine.Rd +++ /dev/null @@ -1,67 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/trajLine.R -\name{trajLine} -\alias{trajLine} -\title{Climate velocity trajectory spatial lines} -\usage{ -trajLine(x, projx = "EPSG::4326") -} -\arguments{ -\item{x}{\code{data.frame} containing the coordinates (x, y) of the constituent -points and identification number (trajIDs) for each trajectory as returned by VoCCTraj.} - -\item{projx}{\code{CRS} detailing the coordinate reference system of the input data -(default geographic CRS).} -} -\value{ -A \code{SpatialLinesDataFrame} with one line per trajectory as specified in x. -To avoid artifacts, trajectories crossing the date line need to be split into two segments. -Where the trajectory on one side of the date line is only composed of a single point, -the trajectory won't be displayed (no line object created). The function assumes -a -180 to 180 longitudinal arrangement. -} -\description{ -Create a spatial line data frame object from trajectory points. -} -\examples{ - -HSST <- VoCC_get_data("HSST.tif") - -yrSST <- sumSeries(HSST, - p = "1969-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST), - fun = function(x) colMeans(x, na.rm = TRUE), freqin = "months", freqout = "years" -) -tr <- tempTrend(yrSST, th = 10) -sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE) -v <- gVoCC(tr, sg) -vel <- v[[1]] -ang <- v[[2]] - -# calculate the annual SST mean over the period -mn <- terra::mean(yrSST, na.rm = TRUE) - -# get the set of starting cells for the trajectories -lonlat <- stats::na.omit(data.frame( - terra::xyFromCell(vel, 1:terra::ncell(vel)), - vel[], ang[], mn[] -))[, 1:2] - -# Calculate trajectories. -traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50, correct = TRUE) - -# create a spatial line data frame from traj -lns <- trajLine(x = traj) -terra::plot(mn) -terra::plot(lns, add = TRUE) - -\dontrun{ -# Export as ESRI shape file -terra::writeVector(lns, filename = "velTraj", filetype = "ESRI Shapefile") -} -} -\seealso{ -{\code{\link{voccTraj}}} -} -\author{ -Jorge Garcia Molinos -} diff --git a/readme.md b/readme.md index d270af4..6caeaa4 100644 --- a/readme.md +++ b/readme.md @@ -4,6 +4,7 @@ # VoCC: The Velocity of Climate Change and related climatic metrics + Jorge Garcia Molinos et al. 18 July 2019 From 7ce714aa0dea44a383d2372b2e73600e19fd3e48 Mon Sep 17 00:00:00 2001 From: Jason Everett Date: Tue, 5 Aug 2025 09:52:03 +1000 Subject: [PATCH 02/10] Add Daves traj code --- R/voccTraj.R | 363 +++++++++++++++++++++++++++++++ data-raw/voccTraj.R | 516 -------------------------------------------- 2 files changed, 363 insertions(+), 516 deletions(-) create mode 100644 R/voccTraj.R delete mode 100644 data-raw/voccTraj.R diff --git a/R/voccTraj.R b/R/voccTraj.R new file mode 100644 index 0000000..033471a --- /dev/null +++ b/R/voccTraj.R @@ -0,0 +1,363 @@ +#' Climate velocity trajectories +#' +#' Function to calculate vocc trajectories after Burrows et al (2014). Trajectories +#' are calculated by propagating climatic isopleths using the magnitude and direction of +#' local (cell) velocities. This is a slightly modified version of the original +#' Burrows et al. (2014) approach in that iterations of a trajectory are based on +#' cumulative time traveled instead of using fixed time steps. +#' +#' @param lonlat \code{data.frame} with the longitude and latitude (in decimal degrees) +#' of the points to project. +#' @param vel \code{raster} with the magnitude of gradient-based climate velocity. +#' @param ang \code{raster} with velocity angles in degrees. +#' @param mn \code{raster} with the overall mean climatic value over the period of interest. +#' @param tyr \code{integer} temporal length of the period of interest. +#' @param trajID \code{integer} specifying the identifiers for the trajectories. +#' @param correct \code{logical} does the input raster need to be corrected to account for cropped margins? +#' Unless the raster extent is global, calculation of trajectories will throw an error at the margins +#' as the trajectories go beyond the raster extent (no input values). To avoid this, an option is given for +#' expanding the extent by the resolution of the raster (1 column/row) with NAs. Note that those trajectories +#' reaching the extent limits will be artificially bounced back so should be discarded at that point. +#' Alternatively, users may choose to crop to a larger extent to the domain of interest (appropriately +#' defined by lonlat), so the extra extent buffer for those trajectories getting to the border +#' of the raster. +#' +#' @return a \code{data.frame} containing the coordinates ("x", "y") of the constituent +#' points and identification number ("trajIDs") for each trajectory. +#' +#' @references \href{https://www.nature.com/articles/nature12976}{Burrows et al. 2014}. Geographical limits to species-range shifts are suggested by climate velocity. Nature, 507, 492-495. +#' +#' @seealso{\code{\link{gVoCC}}, \code{\link{trajClas}}} +#' @export +#' @author Jorge Garcia Molinos, David S. Schoeman and Michael T. Burrows +#' @examples +#' +#' HSST <- VoCC_get_data("HSST.tif") +#' +#' yrSST <- sumSeries(HSST, +#' p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST), +#' fun = function(x) colMeans(x, na.rm = TRUE), +#' freqin = "months", freqout = "years" +#' ) +#' +#' # Long-term local climatic trends +#' tr <- tempTrend(yrSST, th = 10) +#' +#' # Local spatial climatic gradients +#' sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE) +#' +#' # Gradient-based climate velocity +#' v <- gVoCC(tr, sg) +#' vel <- v[[1]] +#' ang <- v[[2]] +#' +#' # Calculate the annual SST mean over the period +#' mn <- terra::mean(yrSST, na.rm = TRUE) +#' +#' # Get the set of starting cells for the trajectories +#' lonlat <- stats::na.omit(data.frame( +#' terra::xyFromCell(vel, 1:terra::ncell(vel)), +#' vel[], ang[], mn[] +#' ))[, 1:2] +#' +#' # Calculate trajectories +#' # The following throws an error due to the trajectories moving beyond the raster extent +#' traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50) +#' +#' # This accounts for the extent issue +#' traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50, correct = TRUE) +#' +#' +voccTraj <- function(lonlat, + vel, ang, mn, + vel_c, ang_c, mn_c, + fine_coast, lk_up, + tstep, tyr = 50) { + + # Setup ------------------------------------------------------------------- + + y_res <- x_res <- res(vel)[1] # Set resolution of operations + + # Constrain max velocity to avoid stepping over grid squares + max_vel = 111.325*x_res/tstep + vel[vel > max_vel] <- max_vel + vel[vel < -max_vel] <- -max_vel + vel_c[vel_c > max_vel] <- max_vel + vel_c[vel_c < -max_vel] <- -max_vel + + lonlat <- lonlat %>% + dplyr::select(x, y) %>% # Collect just lon and lat (in case there's anything else there) + as.data.frame() + tcells <- terra::cellFromXY(vel, lonlat) # # Cell IDs of starting cells + n <- nrow(lonlat) # Get number of cells in your sequence + sflags <- rep(NA, n) # Set a string of cells that change from NA to 1 where the trajectory sticks + + # Set up variables to catch results, allocating the right amount of memory + llon <- numeric((n * tyr / tstep) + n) # Needs to have a set of starting lons, plus one more set for each time step + llat <- numeric((n * tyr / tstep) + n) # Needs to have a set of starting lats, plus one more set for each time step + # cellIDs <- rep(tcells, ((tyr / tstep) + 1)) # Needs to have a set of starting cells, plus one more set for each time step—just as a reference + cellIDs <- rep(1:n, ((tyr / tstep) + 1)) # Needs to have a set of starting cells, plus one more set for each time step—just as a reference + cellIDend <- numeric((n * tyr / tstep) + n) # Needs to have a set of ending cells, plus one more set for each time step + # coast <- llon != 0 # Needs to have a set of starting coastal flags, plus one more set for each time step...set up as boolean + flags <- numeric((n * tyr / tstep) + n) # Needs to have a set of starting flags, plus one more set for each time step + Steps <- numeric((n * tyr / tstep) + n) # Needs to have a set of starting steps, plus one more set for each time step + + # Populate the first n slots with starting points + llon[1:n] <- lonlat[,1] + llat[1:n] <- lonlat[,2] + cellIDend[1:n] <- tcells + # coast[1:n] <- scoast + flags[1:n] <- NA + Steps[1:n] <- 0 + + # Get coarse cellIDs that exist in fine raster + fn_lk_up <- lk_up[] %>% + na.omit() %>% + unique() + + # Helper functions -------------------------------------------------------- + + # Trajectory helper functions + + # Function for to grep min distance + mfind <- function(rw){ + X <- which.min(rw) + return(X) + } + + # Function for to extract corner coordinates per row + mplace <- function(rw){ + X <- rw[(rw[1]+1)] + Y <- rw[rw[1]] + return(c(X, Y)) + } + + # Simple circular functions + deg2rad <- function(deg) return(deg*pi/180) + rad2deg <- function(rad) return(180*rad/pi) + + # A function to find the nearest coastal cell + get_nearest_coastal_cell <- function(x, y, tccell,...) { + t_block <- which(lk_up[] == tccell) # The cellIDs of lk_up + cst_pts <- terra::xyFromCell(lk_up, t_block) %>% + as.data.frame() %>% + st_as_sf(coords = c("x", "y"), crs = crs(rast())) + # Here, we can't search for corners and add random "fuzz" to we collect 10 random points (if there are 10), and select the nearest of those, instead. If there are 10 or fewer, just pick the nearest + if(nrow(cst_pts) > 10) { + cst_pts <- cst_pts[sample(1:nrow(cst_pts), 10, replace = FALSE),] + } # The unspoken "else" is that we just retain the cst_pts we have + pt <- st_as_sf(data.frame(x = x, y = y), coords = c("x", "y"), crs = crs(rast())) # The point departed from + nearest <- st_distance(cst_pts, pt) %>% + which.min() + out <- cst_pts[nearest,] %>% + st_coordinates() %>% + as.data.frame() %>% + dplyr::rename(x = 1, y = 2) + return(out) + } + + # Find new destination, given velocity (km/yr), angle (º), time step (yr) and initial coordinates (ºlon, ºlat); max allowed jump is 1 deg + # vell = vel[fcells] %>% pull(1); angg = ang[fcells] %>% pull(1); timestep = tstep; ll = llold + destcoords <- function(vell, angg, timestep, ll, y_res, x_res){ + latshift <- (abs(vell) * timestep * cos(deg2rad(angg))) / 111.325 # Calculate shift in lat + latnew <- ll[,2] + latshift # Find new lat...first approximation + lonshift <- (abs(vell) * timestep * sin(deg2rad(angg))) / (111.325 * cos(deg2rad(latnew))) # Shift in lon + # Limit large longitudinal jumps at high latitudes + # Because we constrain velocity to be no more than 12 * y_res, all problems will be with lonshift + # Limit lonshift to at most 1 cell + lonshift[lonshift > x_res] <- x_res + lonshift[lonshift < -x_res] <- -x_res + # Now on that basis, adjust latshift + x_gt <- which(lonshift == x_res) # Indices for adjusted lon shifts + latshift[x_gt] <- ((x_res*111.325 * cos(deg2rad(ll[x_gt,2])))/tan(deg2rad(angg[x_gt])))/111.325 # Using trig on distances + x_lt <- which(lonshift == -x_res) # Indices for adjusted lon shifts + latshift[x_lt] <- ((x_res*111.325 * cos(deg2rad(ll[x_lt,2])))/tan(deg2rad(angg[x_lt])))/111.325 # Using trig on distances + latnew <- ll[,2] + latshift # Find new lat by adding the adjusted lats + # Stop new lat from jumping the poles + latnew[latnew > 90] <- 90 + latnew[latnew < -90] <- -90 + # Adjust lon + lonnew <- ll[,1] + lonshift # Find new lon...first approximation + # Adjust for dateline jumps + lonnew <- lonnew - (360 * floor((lonnew + 180) / 360)) + + return(data.frame(lonnew, latnew) %>% + setNames(c("dlon", "dlat"))) + } + + # Function for to find closest cooler/warmer cell within the union of two levels of 8-cell adjacency from the "departed" and "destination" cells + get_dest_cell <- function(rw) { # A to-from cell pair and the buffer around a cell on land that can be searched for a suitable cell + # Find clumps of ocean; the rule is that you can't jump from one clump to another, because this would mean passing over unbroken land + xy <- terra::xyFromCell(mn, as.vector(as.matrix(rw))) %>% + as.data.frame() + bfr = ((y_res*111.325) + 1) * 1000 # Set buffer to be 1 grid-square width at the equator + 1 km + xy <- xy %>% + st_as_sf(coords = c("x", "y"), crs = "EPSG:4326") + sp_buffer <- st_buffer(st_as_sf(xy), bfr) # Remembering that buffer is in metres + buffer_zone <- terra::extract(mn_c, sp_buffer, cells = TRUE, xy = TRUE, touches = TRUE) %>% + dplyr::select(-ID) %>% + distinct() %>% + dplyr::rename(sst = climatology) %>% + dplyr::select(x, y, sst, cell) %>% + drop_na(sst) + clumped <- buffer_zone %>% + dplyr::select(-cell) %>% + rast(crs = "EPSG:4326") %>% + terra::patches(directions = 8, allowGaps = FALSE) + # Which clump did I start in? + r1 <- rw[1] %>% + unlist() %>% + as.vector() # We use this cell a lot, so let's just make it an object + from_clump <- terra::extract(clumped, terra::xyFromCell(mn, r1)) %>% + unlist() %>% + as.vector() + # What are the coordinates of cells within the search area that fall in the clump I came from? + search_xy <- terra::xyFromCell(clumped, which(clumped[] == from_clump)) %>% + as.data.frame() #**** + search_cells <- terra::cellFromXY(mn, search_xy) # Which cells are these + # Check if any of these are NOT in in EITHER fine coast or mn, and eliminate, if needed + to_keep <- c(which(!is.na(terra::extract(mn, search_xy, ID = FALSE) %>% + pull(1))), # Coords in the coarse grid + which(search_cells %in% fn_lk_up)) %>% + unique() + search_xy1 <- search_xy[to_keep,] %>% + as.data.frame() %>% + distinct() + # Get the ssts in the cells to search + or <- terra::extract(mn_c, search_xy1, cells = TRUE, xy = TRUE) %>% + dplyr::rename(sst = 2, x = 4, y = 5) + # If velocity is positive, find nearest cell that is cooler, if there is one + if(unlist(vel_c[r1]) > 0) { + o <- or %>% + dplyr::filter(sst < unlist(mn_c[r1])) %>% + na.omit() + if(nrow(o) == 0) { + dest_cell <- NA # Set condition with which to ID stuck cells + } else { + pt <- terra::xyFromCell(mn_c, r1) %>% + data.frame() + dest_cell <- st_distance(st_as_sf(pt, coords = c("x", "y"), crs = crs(rast())), + st_as_sf(data.frame(o), coords = c("x", "y"), crs = crs(rast()))) %>% + which.min() %>% + o$cell[.] + } + } else { # Otherwise, find nearest cell that is warmer, if there is one + o <- or %>% + dplyr::filter(sst > unlist(mn_c[r1])) %>% + na.omit() + if(nrow(o) == 0) { + dest_cell <- NA # Set condition with which to ID stuck cells + } else { + pt <- terra::xyFromCell(mn_c, r1) %>% + data.frame() + dest_cell <- st_distance(st_as_sf(pt, coords = c("x", "y"), crs = crs(rast())), + st_as_sf(o, coords = c("x", "y"), crs = crs(rast()))) %>% + which.min() %>% + o$cell[.] + } + } + return(dest_cell) + } + + # Loop -------------------------------------------------------------------- + + # Loop through the trajectories + for(i in 1:(tyr/tstep)) { # 1:(tyr/tstep) + llold <- lonlat # Take a copy of lonlat + fcells <- terra::cellFromXY(vel,llold) # Get the cells that the trajectories start in + # Pull velocity and angle from the "inland" versions, because we always ensure that we can find destination cells for departures within the coastal "blind spot" + vc <- vel_c[fcells] %>% pull(1) + ac <- ang_c[fcells] %>% pull(1) + llc <- llold + # Get new locations + lonlat <- destcoords(vc, ac, tstep, llc, y_res, x_res) # Extract lon and lat of landing point + tcells <- terra::cellFromXY(vel,lonlat) # Get the cells that the trajectories end in + sflags[which(is.na(tcells))] <- 1 # Sets the trajectory to "stuck" if it exits the velocity field (i.e., tcells == NA) + # Bounce stuck cells + stuck_cells <- which(!is.na(sflags)) + lonlat[stuck_cells,] <- llold[stuck_cells,] # Bounce the corresponding coordinates across for "stuck" cells + tcells[stuck_cells] <- fcells[stuck_cells] # Bounce the corresponding cells across for "stuck" cells + # Deal with cells that end on land + onland <- which(is.na(vel[tcells])) %>% # Identify which rows of velend are on land, provided that they are not stuck + dplyr::setdiff(stuck_cells) # Ignoring stuck cells + if(length(onland) > 0){ # Only bother if there is at least one cell that returns a NA velocity = land + # Here, you need to check whether it really *IS* on land, or whether it is just in the coastal "blind spot" + fn <- terra::extract(fine_coast, lonlat[onland,], ID = FALSE) %>% + pull(1) + onland <- onland[which(is.na(fn))] + if(length(onland) > 0) { + # Collect the stuff we need here for cells that are really onland + fpos <- llold[onland,] + tpos <- lonlat[onland,] + SFlags <- sflags[onland] + fcell <- fcells[onland] + tcell <- tcells[onland] + ft <- data.frame(fcell = fcell, tcell = tcell, code = paste(fcell, tcell, sep = " "), ref = 1:length(fcell)) + ttcell <- apply(ft[,1:2], 1, get_dest_cell) + # Filter "stuck" flags here + stuck <- which(is.na(ttcell)) + unstuck <- which(!is.na(ttcell)) + SFlags[stuck] <- 1 # Adjust flags + # Make data frame to catch data needed to find new positions + ttpos <- data.frame(x = rep(NA, length(onland)), y = rep(NA, length(onland))) + ttpos[stuck,] <- fpos[stuck,] # If they're stuck, pass on starting points + ttcell[stuck] <- fcell[stuck] # If they're stuck, pass on starting cells + if(length(unstuck) > 0) { + ttdat <- data.frame(ttcell = ttcell[unstuck], loncent = xFromCell(vel, ttcell[unstuck]), latcent = yFromCell(vel, ttcell[unstuck])) %>% # Start building coordinates + mutate(e = NA, w = NA, n = NA, s = NA, dlon = NA, dlat = NA) # To facilitate finding corners, if we need them + # Separate cells in the coastal blind spot from those that are not + which_coast <- which(ttdat$ttcell %in% fn_lk_up) + which_not_coast <- which(!(ttdat$ttcell %in% fn_lk_up)) + # For non-coastal cells + if(length(which_not_coast) > 0) { + corner_block_size <- 0.25*x_res + nc_ttdat <- ttdat[which_not_coast,] # ttdat for non-coastal cells + nc_ttdat$e <- nc_ttdat$loncent + (0.5 * x_res) - (runif(1, 0, 1) * corner_block_size) + nc_ttdat$w <- nc_ttdat$loncent - (0.5 * x_res) + (runif(1, 0, 1) * corner_block_size) + nc_ttdat$n <- nc_ttdat$latcent + (0.5 * y_res) - (runif(1, 0, 1) * corner_block_size) + nc_ttdat$s <- nc_ttdat$latcent - (0.5 * y_res) + (runif(1, 0, 1) * corner_block_size) + coords <- with(nc_ttdat, cbind(n, e, n, w, s, w, s, e)) # NE, NW, SW, SE corners' coordinates + # Find distances from departure point to corners of ttcell + get_dist <- function(y1, x1, y2, x2) { + pt1 <- st_as_sf(data.frame(x = x1, y = y1), coords = c("x", "y"), crs = crs(rast())) + pt2 <- st_as_sf(data.frame(x = x2, y = y2), coords = c("x", "y"), crs = crs(rast())) + out <- st_distance(pt1, pt2, by_element = TRUE) %>% + as.vector() + return(out) + } + corners <- data.frame(ne = get_dist(fpos[which_not_coast,2], fpos[which_not_coast,1], coords[,1], coords[,2])) %>% + mutate(nw = get_dist(fpos[which_not_coast,2], fpos[which_not_coast,1], coords[,3], coords[,4]), + sw = get_dist(fpos[which_not_coast,2], fpos[which_not_coast,1], coords[,5], coords[,6]), + se = get_dist(fpos[which_not_coast,2], fpos[which_not_coast,1], coords[,7], coords[,8])) + cornset <- apply(corners, 1, mfind)*2 # Identify which corners for each onland cell. Have to mul by 2 to shift along correctly. + cornset <- cbind(cornset, coords) # Add in coordinates + ttdat[which_not_coast,8:9] <- data.frame(t(apply(cornset, 1, mplace))) # Extract coordinates of correct corner + } + # For coastal cells + if(length(which_coast) > 0) { + coastal_dat <- ttdat[which_coast,2:3] %>% + mutate(x = fpos[which_coast,1], y = fpos[which_coast,2], + tccell = ttdat[which_coast,]$ttcell) + ttdat[which_coast,8:9] <- pmap_df(coastal_dat, get_nearest_coastal_cell) + } + ttpos[unstuck,] <- ttdat[,8:9] + ttcell[unstuck] <- terra::cellFromXY(mn, ttpos[unstuck,]) + } + # Collect results + lonlat[onland,] <- ttpos + tcells[onland] <- ttcell + sflags[onland] <- SFlags + } + } + llon[((i * n) + 1): ((i * n) + n)] <- lonlat[,1] # Add lon to the list + llat[((i * n) + 1): ((i * n) + n)] <- lonlat[,2]# Add lat to the list + cellIDend[((i * n) + 1): ((i * n) + n)] <- tcells # Add cellIDs to the list + flags[((i * n) + 1): ((i * n) + n)] <- sflags # Add flags to the list + Steps[((i * n) + 1): ((i * n) + n)] <- i # Capture the time_step + print(c(i, length(onland), round(100*i/(tyr/tstep), 3), date())) # Keep a reference of progress + } + + return(cbind(Steps, llon, llat, cellIDs, cellIDend, flags) %>% + as_tibble()) +} + diff --git a/data-raw/voccTraj.R b/data-raw/voccTraj.R deleted file mode 100644 index bf800b0..0000000 --- a/data-raw/voccTraj.R +++ /dev/null @@ -1,516 +0,0 @@ -#' Climate velocity trajectories -#' -#' Function to calculate vocc trajectories after Burrows et al (2014). Trajectories -#' are calculated by propagating climatic isopleths using the magnitude and direction of -#' local (cell) velocities. This is a slightly modified version of the original -#' Burrows et al. (2014) approach in that iterations of a trajectory are based on -#' cumulative time traveled instead of using fixed time steps. -#' -#' @param lonlat \code{data.frame} with the longitude and latitude (in decimal degrees) -#' of the points to project. -#' @param vel \code{raster} with the magnitude of gradient-based climate velocity. -#' @param ang \code{raster} with velocity angles in degrees. -#' @param mn \code{raster} with the overall mean climatic value over the period of interest. -#' @param tyr \code{integer} temporal length of the period of interest. -#' @param trajID \code{integer} specifying the identifiers for the trajectories. -#' @param correct \code{logical} does the input raster need to be corrected to account for cropped margins? -#' Unless the raster extent is global, calculation of trajectories will throw an error at the margins -#' as the trajectories go beyond the raster extent (no input values). To avoid this, an option is given for -#' expanding the extent by the resolution of the raster (1 column/row) with NAs. Note that those trajectories -#' reaching the extent limits will be artificially bounced back so should be discarded at that point. -#' Alternatively, users may choose to crop to a larger extent to the domain of interest (appropriately -#' defined by lonlat), so the extra extent buffer for those trajectories getting to the border -#' of the raster. -#' -#' @return a \code{data.frame} containing the coordinates ("x", "y") of the constituent -#' points and identification number ("trajIDs") for each trajectory. -#' -#' @references \href{https://www.nature.com/articles/nature12976}{Burrows et al. 2014}. Geographical limits to species-range shifts are suggested by climate velocity. Nature, 507, 492-495. -#' -#' @seealso{\code{\link{gVoCC}}, \code{\link{trajClas}}} -#' @export -#' @author Jorge Garcia Molinos, David S. Schoeman and Michael T. Burrows -#' @examples -#' -#' HSST <- VoCC_get_data("HSST.tif") -#' -#' yrSST <- sumSeries(HSST, -#' p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST), -#' fun = function(x) colMeans(x, na.rm = TRUE), -#' freqin = "months", freqout = "years" -#' ) -#' -#' # Long-term local climatic trends -#' tr <- tempTrend(yrSST, th = 10) -#' -#' # Local spatial climatic gradients -#' sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE) -#' -#' # Gradient-based climate velocity -#' v <- gVoCC(tr, sg) -#' vel <- v[[1]] -#' ang <- v[[2]] -#' -#' # Calculate the annual SST mean over the period -#' mn <- terra::mean(yrSST, na.rm = TRUE) -#' -#' # Get the set of starting cells for the trajectories -#' lonlat <- stats::na.omit(data.frame( -#' terra::xyFromCell(vel, 1:terra::ncell(vel)), -#' vel[], ang[], mn[] -#' ))[, 1:2] -#' -#' # Calculate trajectories -#' # The following throws an error due to the trajectories moving beyond the raster extent -#' traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50) -#' -#' # This accounts for the extent issue -#' traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50, correct = TRUE) -#' -voccTraj <- function(lonlat, vel, ang, mn, tyr, trajID = 1:nrow(lonlat), correct = FALSE) { - - if (correct == TRUE) { - e <- terra::ext(vel) + (rep(terra::res(vel), each = 2) * c(1, 1, 1, 1)) - vel <- terra::extend(vel, e, fill = NA) - ang <- terra::extend(ang, e, fill = NA) - mn <- terra::extend(mn, e, fill = NA) - } - - # make sure all raster has consistent NAs - vel[is.na(ang)] <- NA - vel[is.na(mn)] <- NA - ang[is.na(vel)] <- NA - mn[is.na(vel)] <- NA - - # Set up variables to catch results, allocating the right amount of memory - nc <- nrow(lonlat) - remaining <- rep(tyr, nc) # String containing the time remaining for each trajectory - llon <- rep(NA, (nc * tyr) + nc) # Starting lons, plus one more set for each iteration - llat <- rep(NA, (nc * tyr) + nc) - rem <- rep(NA, (nc * tyr) + nc) # this is to keep track of trajectories trapped in internal sinks - - # populate the first n slots with starting points - llon[1:nc] <- lonlat[, 1] - llat[1:nc] <- lonlat[, 2] - rem[1:nc] <- remaining - i <- 0 # set the iteration counter - land <- "N" # set to not hit land - bounce <- "N" # set to not bounced - - # Calculate the trajectories - pb <- utils::txtProgressBar(min = 0, max = 100, style = 3) - while (sum(remaining <= 0) != nc) { # while there is at least one trajectory active - - utils::setTxtProgressBar(pb, 100 * (sum(remaining <= 0) / nc)) - - llold <- lonlat # Take a copy of lonlat (starting cell xy) - resto <- which(remaining > 0) # index with remaining active trajectories - - fcells <- terra::cellFromXY(vel, llold) # focal cells - - # Extract lon and lat of landing point for the remaining active trajectories - # limit the displacement to 2 cell lengths to reduce later the number of intermediate points - dth <- max(terra::res(vel)) * 222000 - dis <- data.table::fifelse(dth < (abs(vel[fcells[resto]]) * remaining[resto] * 1000), # If - dth, # Do this - (abs(vel[fcells[resto]]) * remaining[resto] * 1000)[, 1]) # else - - - # JDE - The error occurs here but doesn't start here. ang[fcells[resto]][, 1] is a NA and therefore NA is introduced into lonlat - # latlon is not NA, but it seems somewhere a land cell or a NA velocity cell is introduced into llold - # I think this starts on the previous iteration. Obviously a land cell is not corrected. I think this is in Step 4.... - - # distance input in meters. The function adjusts internally for -180-180 and pole crossings - lonlat[resto, ] <- as.data.frame( - geosphere::destPoint(p = llold[resto, ], b = ang[fcells[resto]][, 1], d = dis) - ) - - tcells <- terra::cellFromXY(vel, lonlat) - - # Step 1. where the trajectory is still in the same cell by tyr, it has terminated. ----- - # Flag those trajectories by resetting the reminding time to 0 to get them out of the next iteration. - remaining[fcells == tcells] <- 0 - if (sum(remaining == 0) == nc) { - break # to avoid error when only 1 trajectory is left and finishes inside a cell - } - - # Step 2. For the rest, get the last point in the starting cell and the first point in a new cell ----- - resto <- which(remaining > 0) # update resto - d <- round((geosphere::distGeo(llold[resto, ], lonlat[resto, ]) / 1000), 0) - d[d == 0] <- 1 - - - Trajxy <- splitLine(A = llold[resto, ], B = lonlat[resto, ], nn = d) - - # now get a list with the cells for the points in each trajectory - if (is.list(Trajxy)) { - Trajcells <- lapply(Trajxy, terra::cellFromXY, object = vel) - # the first new cell in the trajectory - index <- lapply(Trajcells, function(x) which(x != x[1])[1]) - newcell <- mapply(function(X, Y) { - X[Y] - }, X = Trajcells, Y = index) - - # the coordinates for that first point out of the focal cell - newxy <- as.data.frame(t(mapply(function(X, Y) { - X[Y, ] - }, X = Trajxy, Y = index))) - - # the coordinates for the last focal cell point - oldxy <- as.data.frame(t(mapply(function(X, Y) { - X[Y - 1, ] - }, X = Trajxy, Y = index))) - } else { # if 1 trajectory the output from splitLine is a single matrix instead of a list - Trajcells <- apply(Trajxy, 1, terra::cellFromXY, object = vel) - newcell <- Trajcells[which(Trajcells != Trajcells[1])[1]] - newxy <- data.frame(x = Trajxy[which(Trajcells != Trajcells[1])[1], 1], y = Trajxy[which(Trajcells != Trajcells[1])[1], 2]) - oldxy <- data.frame(x = Trajxy[(which(Trajcells != Trajcells[1])[1]) - 1, 1], y = Trajxy[(which(Trajcells != Trajcells[1])[1]) - 1, 2]) - } - - # starting and destination cell ids - oldcell <- fcells[resto] - - # Get the new velocity at the new cells - velend <- terra::extract(vel, newcell) - - # set remaining time for each of the running trajectories - remaining[resto][is.na(velend)] <- remaining[resto][is.na(velend)] - ((geosphere::distGeo(llold[resto, ][is.na(velend), ], oldxy[is.na(velend), ]) / 1000) / abs(vel[fcells[resto]][is.na(velend)])) - remaining[resto][!is.na(velend)] <- remaining[resto][!is.na(velend)] - ((geosphere::distGeo(llold[resto, ][!is.na(velend), ], newxy[!is.na(velend), ]) / 1000) / abs(vel[fcells[resto]][!is.na(velend)])) - - # For those ending in marine cells update lonlat info to the new point - lonlat[resto, ][!is.na(velend), ] <- newxy[!is.na(velend), ] - - # For those ending in land cells update lonlat info to the last marine point - lonlat[resto, ][is.na(velend), ] <- oldxy[is.na(velend), ] - - # Step 3. From step 3 onwards check if the trajectory has bounced back to the origin cell. ----- - # If so, redirect along cell border. - if (i >= 1) { - current <- newcell[!is.na(velend)] # current cell - last <- oldcell[!is.na(velend)] # last cell - if (land == "Y" & bounce == "Y") { # Given the counter increases each time the trajectory table is updated, - # where some traj hit land AND bounced in the previous iteration the values were repeated twice for all cells. Hence, need to go 3 steps back instead of 1 - print("Option 1: Go back 3 steps") - last2 <- terra::cellFromXY(vel, cbind(llon[(((i - 3) * nc) + 1):(((i - 3) * nc) + nc)][resto][!is.na(velend)], llat[(((i - 3) * nc) + 1):(((i - 3) * nc) + nc)][resto][!is.na(velend)])) # last but one cell - land <- "N" # set back to no hit land - bounce <- "N" - } else if (xor(land == "Y", bounce == "Y")) { # if one of the two conditions then need to go two steps back - print("Option 2: Go back 2 steps") - last2 <- terra::cellFromXY(vel, cbind(llon[(((i - 2) * nc) + 1):(((i - 2) * nc) + nc)][resto][!is.na(velend)], llat[(((i - 2) * nc) + 1):(((i - 2) * nc) + nc)][resto][!is.na(velend)])) - land <- "N" - bounce <- "N" - } else { # if non of the two, then just one step back - print("Option 3: Go back 1 step") - last2 <- terra::cellFromXY(vel, cbind(llon[(((i - 1) * nc) + 1):(((i - 1) * nc) + nc)][resto][!is.na(velend)], llat[(((i - 1) * nc) + 1):(((i - 1) * nc) + nc)][resto][!is.na(velend)])) - } - - # Identify the bouncing trajectories - ind <- which(current == last2 & current != last) - if (length(ind) > 0) { - bounce <- "Y" - - # take the mean velocity from the appropriate lat/lon vel components. - vb <- mapply( - function(X, Y) { - ifelse(abs(X - Y) > 1, # if - mean(c(as.numeric((vel[X] * sin(pi * ang[X] / 180))), as.numeric((vel[Y] * sin(pi * ang[Y] / 180))))), # do this - mean(c(as.numeric((vel[X] * cos(pi * ang[X] / 180))), as.numeric((vel[Y] * cos(pi * ang[Y] / 180))))) # else do this - )}, - X = current[ind], Y = last[ind] - ) - - # take the corresponding angle (0/180 / 90/270 for lat / lon movements) - ab <- mapply(function(X, Y, Z) { - ifelse(abs(X - Y) > 1 & Z > 0, # if - 90, # do this - ifelse(abs(X - Y) > 1 & Z < 0, # else - 270, # do this - ifelse(abs(X - Y) == 1 & Z > 0, - 0, # do this - 180 # else - )))}, - X = current[ind], Y = last[ind], Z = vb) - - if (is.matrix(ab)) { - ab <- ab[, 1] - } - - # Extract lon and lat of point previous to bounce and new destination point for the remaining active trajectories - p <- oldxy[!is.na(velend), ][ind, ] - dis <- ifelse(dth < (abs(vb) * remaining[resto][!is.na(velend)][ind] * 1000), - dth, - (abs(vb) * remaining[resto][!is.na(velend)][ind] * 1000)) - destp <- as.data.frame(geosphere::destPoint(p, ab, dis)) - - # where the trajectory is still in the same cell by tyr, it has terminated. Flag those trajectories by resetting the reminding time to 0 to get them out of the next iteration. - same <- which(terra::cellFromXY(vel, p) == terra::cellFromXY(vel, destp)) - remaining[resto][!is.na(velend)][ind][same] <- 0 - - # For the rest, get the correct destination point - rest <- which(terra::cellFromXY(vel, p) != terra::cellFromXY(vel, destp)) # update rest - - if (length(rest) > 0) { - - d <- round((geosphere::distGeo(p[rest, ], destp[rest, ]) / 1000), 0) - d[d == 0] <- 1 - - Trajxy <- splitLine(A = p[rest, ], B = destp[rest, ], nn = d) - - # now get a list with the cells for the points in each trajectory - if (is.list(Trajxy)) { - Trajcells <- lapply(Trajxy, terra::cellFromXY, object = vel) - - # the first new cell in the trajectory - index <- lapply(Trajcells, function(x) which(x != x[1])[1]) - - # update the coordinates for that first point out of the focal cell - newxy[!is.na(velend), ][ind, ][rest, ] <- as.data.frame(t(mapply(function(X, Y) { - X[Y, ] - }, X = Trajxy, Y = index))) - - # update points info for the old position in case the trajectory hit land and need to be repositioned - i <- i + 1 - llon[((i * nc) + 1):((i * nc) + nc)] <- lonlat[, 1] - llat[((i * nc) + 1):((i * nc) + nc)] <- lonlat[, 2] - llon[((i * nc) + 1):((i * nc) + nc)][resto][!is.na(velend)][ind][rest] <- oldxy[!is.na(velend), ][ind, ][rest, 1] - llat[((i * nc) + 1):((i * nc) + nc)][resto][!is.na(velend)][ind][rest] <- oldxy[!is.na(velend), ][ind, ][rest, 2] - - # update the coordinates for the last focal cell point - oldxy[!is.na(velend), ][ind, ][rest, ] <- as.data.frame(t(mapply(function(X, Y) { - X[Y - 1, ] - }, X = Trajxy, Y = index))) - - } else { # if all the trajectories have same number of points the output from gc - # Intermediate is a matrix instead of a list - - # Trajcells <- apply(Trajxy, 1, terra::cellFromXY, object = vel) - Trajcells <- apply(vel, 1, terra::cellFromXY, xy = Trajxy) - - newxy[!is.na(velend), ][ind, ][rest, ] <- data.frame(x = Trajxy[which(Trajcells != Trajcells[1])[1], 1], y = Trajxy[which(Trajcells != Trajcells[1])[1], 2]) - i <- i + 1 - llon[((i * nc) + 1):((i * nc) + nc)] <- lonlat[, 1] # necessary to not leave the other cells as NAs - llat[((i * nc) + 1):((i * nc) + nc)] <- lonlat[, 2] - llon[((i * nc) + 1):((i * nc) + nc)][resto][!is.na(velend)][ind][rest] <- oldxy[!is.na(velend), ][ind, ][rest, 1] - llat[((i * nc) + 1):((i * nc) + nc)][resto][!is.na(velend)][ind][rest] <- oldxy[!is.na(velend), ][ind, ][rest, 2] - oldxy[!is.na(velend), ][ind, ][rest, ] <- data.frame(x = Trajxy[(which(Trajcells != Trajcells[1])[1]) - 1, 1], y = Trajxy[(which(Trajcells != Trajcells[1])[1]) - 1, 2]) - } - - # Update main traj info - # get remaining time for each of the running trajectories - remaining[resto][!is.na(velend)][ind][rest] <- remaining[resto][!is.na(velend)][ind][rest] - ((geosphere::distGeo(newxy[!is.na(velend), ][ind, ][rest, ], p[rest, ]) / 1000) / abs(vb[rest])) - rem[((i * nc) + 1):((i * nc) + nc)] <- remaining - lonlat[resto, ][!is.na(velend), ][ind, ][rest, ] <- newxy[!is.na(velend), ][ind, ][rest, ] - - # update the velocity at new cells (some of the redirected bouncing trajectories might have ended in a land cell) - newcell[!is.na(velend)][ind][rest] <- terra::cellFromXY(vel, newxy[!is.na(velend), ][ind, ][rest, ]) - velend[!is.na(velend)][ind][rest] <- terra::extract(vel, terra::cellFromXY(vel, newxy[!is.na(velend), ][ind, ][rest, ])) - } - } - } - - # Step 4. For those traj ending on land redirect the trajectories if possible ----- - if (sum(is.na(velend)) > 0) { - - land <- "Y" # to know if land was hit in the next loop when looking at bouncing trajectories - onland <- which(is.na(velend)) # Identify which rows of velend are on land - - # break and produce error if trajectories go beyond raster extent - if (anyNA(newcell[onland])) { - stop("Trajectories beyond raster extent - set correct = TRUE or limit lonlat to a sufficiently smaller domain relative to current raster extent") - } - - # For each cell that ends on land, look for a suitable target cell... - # Make list of candidate cell IDs: overlap between cells adjacent - # to "from" (fcells[is.na(sflags)][onland]) AND "to" (newcell[onland])cells - # that are in the direction of movement (any other cells would mean "un-natural" movements). - ccells <- suppressWarnings(mapply(function(X, Y) { - Z <- as.numeric(terra::intersect(terra::adjacent(vel, X, directions = 8), terra::adjacent(vel, Y, directions = 8))) - Z[!is.na(vel[Z])] - }, X = oldcell[onland], Y = newcell[onland], SIMPLIFY = FALSE)) - - # Now check if a suitable cell, other than the focal cell, is available along the line of movement - # given departure direction. Diagonals included. - # First, calculate the velocity associated to each focal cell with which to - # move along the cell border given direction - # Then - # if transfer is vertical (upper/lower cell) use horizontal velocity component, - # if transfer is horizontal, use vertical component - # negative values indicate E-W and N-S movements - - v <- mapply(function(X, Y) { - ifelse(abs(X - Y) > 1, abs(vel[Y]) * sin(pi * ang[Y] / 180), abs(vel[Y]) * cos(pi * ang[Y] / 180)) - }, X = newcell[onland], Y = oldcell[onland]) - - a <- rep(NA, length(v)) # to store angles for border movement - - for (k in 1:length(v)) { - target <- newcell[onland][k] - focal <- oldcell[onland][k] - - if ((target - focal) > 1 & v[k] > 0) { # vertical transfer, horizontal movement - ccells[[k]] <- subset(ccells[[k]], ccells[[k]] %in% c(focal + 1, focal + ncol(vel) + 1)) # JDE Focal cell + 1 and focal diagonal on next column (ncol + a) - a[k] <- 90 # Then set angle - } else if ((target - focal) > 1 & v[k] < 0) { - ccells[[k]] <- subset(ccells[[k]], ccells[[k]] %in% c(focal - 1, focal + ncol(vel) - 1)) - a[k] <- 270 - } else if ((target - focal) < -1 & v[k] > 0) { - ccells[[k]] <- subset(ccells[[k]], ccells[[k]] %in% c(focal + 1, focal - ncol(vel) + 1)) - a[k] <- 90 - } else if ((target - focal) < -1 & v[k] < 0) { - ccells[[k]] <- subset(ccells[[k]], ccells[[k]] %in% c(focal - 1, focal - ncol(vel) - 1)) - a[k] <- 270 - } else if ((target - focal) == 1 & v[k] > 0) { # horizontal transfer, vertical movement - ccells[[k]] <- subset(ccells[[k]], ccells[[k]] %in% c(focal - ncol(vel), focal - ncol(vel) + 1)) - a[k] <- 0 - } else if ((target - focal) == 1 & v[k] < 0) { - ccells[[k]] <- subset(ccells[[k]], ccells[[k]] %in% c(focal + ncol(vel), focal + ncol(vel) + 1)) - a[k] <- 180 - } else if ((target - focal) == -1 & v[k] > 0) { - ccells[[k]] <- subset(ccells[[k]], ccells[[k]] %in% c(focal - ncol(vel), focal - ncol(vel) - 1)) - a[k] <- 0 - } else if ((target - focal) == -1 & v[k] < 0) { - ccells[[k]] <- subset(ccells[[k]], ccells[[k]] %in% c(focal + ncol(vel), focal + ncol(vel) - 1)) - a[k] <- 180 - } - } - - rm(k) - - # Flag out the cells for which no suitable potential neighbours are available - # (all potential neighbours are NA; the trajectory has nowhere to go) - empty <- as.logical(lapply(ccells, function(x) identical(x, numeric(0)))) - remaining[resto][onland][empty] <- 0 - lonlat[resto, ][onland, ][empty, ] <- oldxy[onland, ][empty, ] - - # if there are cells with available neighbours - if (sum(!empty) > 0) { - - # select those cells - leftcell <- ccells[!empty] - focal <- oldcell[onland][!empty] - target <- newcell[onland][!empty] - nxy <- newxy[onland, ][!empty, ] - oxy <- oldxy[onland, ][!empty, ] - vleft <- as.numeric(v[!empty]) - aleft <- a[!empty] - - # Check if there is an actual suitable neighbour - # sst at focal and neighbouring cells - - sst <- lapply(leftcell, function(x) as.numeric(terra::extract(mn, x, raw = TRUE))) - - # if warming (cooling), need a suitable neighbour with cooler (warmer) local temperatures - for (k in 1:length(leftcell)) { - - # sst (list) is the sst from the mn climate layer for the adjoining cell - # focal is the focal cell number - # mn is the climate temp layer - # mn[focal[k]] is the temperature at the focal cell - # sst[[k]] is the sst in the adjoining cells - leftcell[k] <- ifelse(vel[focal[k]] > 0 & sum(sst[[k]] < mn[focal[k]]) > 0, # if - leftcell[[k]][which.min(sst[[k]])], # do this - ifelse(vel[focal[k]] < 0 & sum(sst[[k]] > mn[focal[k]]) > 0, # else - leftcell[[k]][which.max(sst[[k]])], # do this - NA)) # else - } # End finding a suitable cell - - # Flag cells for which no suitable neighbours are available (no suitable sst) - remaining[resto][onland][!empty][is.na(as.numeric(leftcell))] <- 0 - lonlat[resto, ][onland, ][!empty, ][is.na(as.numeric(leftcell)), ] <- oldxy[onland, ][!empty, ][is.na(as.numeric(leftcell)), ] - - # For those traj with a suitable neighbour, relocate the trajectory to the nearest newcell point and calculate the time needed to reach it - if (length(target[!is.na(as.numeric(leftcell))]) > 0) { - dudcent <- terra::xyFromCell(vel, target[!is.na(as.numeric(leftcell))]) # Coordinates of dud target cell on land - newcent <- terra::xyFromCell(vel, as.numeric(leftcell[!is.na(as.numeric(leftcell))])) # Coordinates of new target cell - oldcent <- terra::xyFromCell(vel, focal[!is.na(as.numeric(leftcell))]) # Coordinates of departure cell - loncent <- data.frame(oldx = oldcent[, 1], NAx = dudcent[, 1], newx = newcent[, 1]) # An object containing the longitudes of the cells involved - needed for fixing dateline - - for (k in 1:nrow(loncent)) { - - # Remove sign change for dateline, if needed - if (abs(max(loncent[k, ]) - min(loncent[k, ])) > 180) { - loncent[k, ][loncent[k, ] < 0] <- loncent[k, ][loncent[k, ] < 0] + 360 - } - - # Figure out position of dividing longitude - loncent$lonline[k] <- ifelse(abs(loncent[k, 2] - loncent[k, 3]) > abs(loncent[k, 2] - loncent[k, 1]), # if lon difference between NA cell and new cell is larger than NA to old cell - mean(c(loncent[k, 1], loncent[k, 3])), mean(c(loncent[k, 1], loncent[k, 2])) - ) - - loncent$lonline[k] <- loncent$lonline[k] - (360 * floor((loncent$lonline[k] + 180) / 360)) # Return to -180o to 180o format - loncent$lonline[k] <- ifelse(loncent$lonline[k] == 180 && newcent[k, 1] < 0, -180, loncent$lonline[k]) - loncent$lonline[k] <- ifelse(loncent$lonline[k] == -180 && newcent[k, 1] > 0, 180, loncent$lonline[k]) # Arrange lonline to accommodate dateline - loncent$latline[k] <- ifelse(abs(dudcent[k, 2] - newcent[k, 2]) > abs(dudcent[k, 2] - oldcent[k, 2]), mean(c(oldcent[k, 2], newcent[k, 2])), mean(c(oldcent[k, 2], dudcent[k, 2]))) - loncent$dirlon[k] <- ifelse(newcent[k, 1] > loncent$lonline[k], 1, -1) # Adjust direction of movement relative to lonline - loncent$dirlat[k] <- ifelse(newcent[k, 2] > loncent$latline[k], 1, -1) # Same for latline - loncent$lonnew[k] <- loncent$lonline[k] + (loncent$dirlon[k] * 0.0001) # add a small offset to put the traj on the new cell - loncent$latnew[k] <- loncent$latline[k] + (loncent$dirlat[k] * 0.0001) - loncent$latnew[k] <- ifelse(loncent$latnew[k] > 90, 90, ifelse(loncent$latnew[k] < -90, -90, loncent$latnew[k])) - loncent$lonnew[k] <- loncent$lonnew[k] - (360 * floor((loncent$lonnew[k] + 180) / 360)) - } - - loncent$oldcell <- focal[!is.na(as.numeric(leftcell))] - loncent$lonold <- oxy[!is.na(as.numeric(leftcell)), 1] # oxy <- old xy - loncent$latold <- oxy[!is.na(as.numeric(leftcell)), 2] - loncent$dis <- (geosphere::distGeo(oxy[!is.na(as.numeric(leftcell)), ], loncent[, 8:9]) / 1000) # distance from dold to new point - loncent$dur <- loncent$dis / abs(vleft[!is.na(as.numeric(leftcell))]) # time taken to get there - loncent$remaining <- remaining[resto][onland][!empty][!is.na(as.numeric(leftcell))] - loncent$dur - - # where remaining is < 0, the trajectory terminates before reaching new destination. - # Flag those traj out and place them in the corresponding final coordinates. - if (sum(loncent$remaining < 0) > 0) { - loncent[loncent$remaining < 0, 8:9] <- as.matrix(geosphere::destPoint( - oxy[!is.na(as.numeric(leftcell)), ][loncent$remaining < 0, ], aleft[!is.na(as.numeric(leftcell))][loncent$remaining < 0], - (abs(vleft[!is.na(as.numeric(leftcell))][loncent$remaining < 0]) * (remaining[resto][onland][!empty][!is.na(as.numeric(leftcell))][loncent$remaining < 0]) * 1000) - )) - loncent$remaining[loncent$remaining < 0] <- 0 - } - - # Finally, update lonlat - i <- i + 1 # increase the counter by 1 - - # first input the point before hitting land - lonlat[resto, ][onland, ][!empty, ][!is.na(as.numeric(leftcell)), ] <- loncent[, 11:12] - llon[((i * nc) + 1):((i * nc) + nc)] <- lonlat[, 1] # Add final lon to the list - llat[((i * nc) + 1):((i * nc) + nc)] <- lonlat[, 2] # Add final lat to the list - - # then the new point to carry the trajectory on with - remaining[resto][onland][!empty][!is.na(as.numeric(leftcell))] <- loncent$remaining - rem[((i * nc) + 1):((i * nc) + nc)] <- remaining - lonlat[resto, ][onland, ][!empty, ][!is.na(as.numeric(leftcell)), ] <- loncent[, 8:9] - - } - } - } # End of Step 4. There should be no land cells after Step 4 - - # Step 5. Update register before moving to the next projection step ---- - i <- i + 1 # increase the counter by 1 - llon[((i * nc) + 1):((i * nc) + nc)] <- lonlat[, 1] # Add final lon to the list - llat[((i * nc) + 1):((i * nc) + nc)] <- lonlat[, 2] # Add final lat to the list - rem[((i * nc) + 1):((i * nc) + nc)] <- remaining - - # Step 6. Check for trajectories trapped in internal sinks and terminate them ---- - if (i >= 8) { - cs <- which(remaining != 0) - # index the trajectories trapped in a sink (those for which distance travelled over the last 4 iterations is less than 0.5 km) - if (length(cs) > 0) { - ind <- which(unlist(lapply(cs, function(x) all(utils::tail(abs(diff(rem[seq(x, by = nc, length.out = i + 1)], 1))[abs(diff(rem[seq(x, by = nc, length.out = i + 1)], 1)) != 0], 4) < 0.5)))) - # Terminate trapped trajectories - if (length(ind) > 0) { - remaining[cs][ind] <- 0 - } - } - } # End Step 6 - - } # End of while remaining - close(pb) - - - # prepare output - trajIDs <- rep(trajID, (length(llon) / nc)) # rep(initialcells,(length(llon)/nc)) - traj <- stats::na.omit(data.frame(x = llon, y = llat, trajIDs = trajIDs)) - # remove duplicated points (to keep track of the trajectory's ID all trajectories are repeated over iterations even if they had terminated) - traj <- traj[!duplicated(traj), ] - - return(traj) -} From ec27da75a3fa96ba58092eabf9c1d0681cdba2f0 Mon Sep 17 00:00:00 2001 From: Jason Everett Date: Tue, 5 Aug 2025 09:52:57 +1000 Subject: [PATCH 03/10] Style voccTraj --- R/voccTraj.R | 167 +++++++++++++++++++++++++++------------------------ 1 file changed, 89 insertions(+), 78 deletions(-) diff --git a/R/voccTraj.R b/R/voccTraj.R index 033471a..70b708c 100644 --- a/R/voccTraj.R +++ b/R/voccTraj.R @@ -67,26 +67,24 @@ #' # This accounts for the extent issue #' traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50, correct = TRUE) #' -#' voccTraj <- function(lonlat, - vel, ang, mn, - vel_c, ang_c, mn_c, - fine_coast, lk_up, - tstep, tyr = 50) { - + vel, ang, mn, + vel_c, ang_c, mn_c, + fine_coast, lk_up, + tstep, tyr = 50) { # Setup ------------------------------------------------------------------- y_res <- x_res <- res(vel)[1] # Set resolution of operations # Constrain max velocity to avoid stepping over grid squares - max_vel = 111.325*x_res/tstep + max_vel <- 111.325 * x_res / tstep vel[vel > max_vel] <- max_vel vel[vel < -max_vel] <- -max_vel vel_c[vel_c > max_vel] <- max_vel vel_c[vel_c < -max_vel] <- -max_vel lonlat <- lonlat %>% - dplyr::select(x, y) %>% # Collect just lon and lat (in case there's anything else there) + dplyr::select(x, y) %>% # Collect just lon and lat (in case there's anything else there) as.data.frame() tcells <- terra::cellFromXY(vel, lonlat) # # Cell IDs of starting cells n <- nrow(lonlat) # Get number of cells in your sequence @@ -103,8 +101,8 @@ voccTraj <- function(lonlat, Steps <- numeric((n * tyr / tstep) + n) # Needs to have a set of starting steps, plus one more set for each time step # Populate the first n slots with starting points - llon[1:n] <- lonlat[,1] - llat[1:n] <- lonlat[,2] + llon[1:n] <- lonlat[, 1] + llat[1:n] <- lonlat[, 2] cellIDend[1:n] <- tcells # coast[1:n] <- scoast flags[1:n] <- NA @@ -120,36 +118,40 @@ voccTraj <- function(lonlat, # Trajectory helper functions # Function for to grep min distance - mfind <- function(rw){ + mfind <- function(rw) { X <- which.min(rw) return(X) } # Function for to extract corner coordinates per row - mplace <- function(rw){ - X <- rw[(rw[1]+1)] + mplace <- function(rw) { + X <- rw[(rw[1] + 1)] Y <- rw[rw[1]] return(c(X, Y)) } # Simple circular functions - deg2rad <- function(deg) return(deg*pi/180) - rad2deg <- function(rad) return(180*rad/pi) + deg2rad <- function(deg) { + return(deg * pi / 180) + } + rad2deg <- function(rad) { + return(180 * rad / pi) + } # A function to find the nearest coastal cell - get_nearest_coastal_cell <- function(x, y, tccell,...) { + get_nearest_coastal_cell <- function(x, y, tccell, ...) { t_block <- which(lk_up[] == tccell) # The cellIDs of lk_up cst_pts <- terra::xyFromCell(lk_up, t_block) %>% as.data.frame() %>% st_as_sf(coords = c("x", "y"), crs = crs(rast())) # Here, we can't search for corners and add random "fuzz" to we collect 10 random points (if there are 10), and select the nearest of those, instead. If there are 10 or fewer, just pick the nearest - if(nrow(cst_pts) > 10) { - cst_pts <- cst_pts[sample(1:nrow(cst_pts), 10, replace = FALSE),] + if (nrow(cst_pts) > 10) { + cst_pts <- cst_pts[sample(1:nrow(cst_pts), 10, replace = FALSE), ] } # The unspoken "else" is that we just retain the cst_pts we have pt <- st_as_sf(data.frame(x = x, y = y), coords = c("x", "y"), crs = crs(rast())) # The point departed from nearest <- st_distance(cst_pts, pt) %>% which.min() - out <- cst_pts[nearest,] %>% + out <- cst_pts[nearest, ] %>% st_coordinates() %>% as.data.frame() %>% dplyr::rename(x = 1, y = 2) @@ -158,9 +160,9 @@ voccTraj <- function(lonlat, # Find new destination, given velocity (km/yr), angle (º), time step (yr) and initial coordinates (ºlon, ºlat); max allowed jump is 1 deg # vell = vel[fcells] %>% pull(1); angg = ang[fcells] %>% pull(1); timestep = tstep; ll = llold - destcoords <- function(vell, angg, timestep, ll, y_res, x_res){ + destcoords <- function(vell, angg, timestep, ll, y_res, x_res) { latshift <- (abs(vell) * timestep * cos(deg2rad(angg))) / 111.325 # Calculate shift in lat - latnew <- ll[,2] + latshift # Find new lat...first approximation + latnew <- ll[, 2] + latshift # Find new lat...first approximation lonshift <- (abs(vell) * timestep * sin(deg2rad(angg))) / (111.325 * cos(deg2rad(latnew))) # Shift in lon # Limit large longitudinal jumps at high latitudes # Because we constrain velocity to be no more than 12 * y_res, all problems will be with lonshift @@ -169,20 +171,20 @@ voccTraj <- function(lonlat, lonshift[lonshift < -x_res] <- -x_res # Now on that basis, adjust latshift x_gt <- which(lonshift == x_res) # Indices for adjusted lon shifts - latshift[x_gt] <- ((x_res*111.325 * cos(deg2rad(ll[x_gt,2])))/tan(deg2rad(angg[x_gt])))/111.325 # Using trig on distances + latshift[x_gt] <- ((x_res * 111.325 * cos(deg2rad(ll[x_gt, 2]))) / tan(deg2rad(angg[x_gt]))) / 111.325 # Using trig on distances x_lt <- which(lonshift == -x_res) # Indices for adjusted lon shifts - latshift[x_lt] <- ((x_res*111.325 * cos(deg2rad(ll[x_lt,2])))/tan(deg2rad(angg[x_lt])))/111.325 # Using trig on distances - latnew <- ll[,2] + latshift # Find new lat by adding the adjusted lats + latshift[x_lt] <- ((x_res * 111.325 * cos(deg2rad(ll[x_lt, 2]))) / tan(deg2rad(angg[x_lt]))) / 111.325 # Using trig on distances + latnew <- ll[, 2] + latshift # Find new lat by adding the adjusted lats # Stop new lat from jumping the poles latnew[latnew > 90] <- 90 latnew[latnew < -90] <- -90 # Adjust lon - lonnew <- ll[,1] + lonshift # Find new lon...first approximation + lonnew <- ll[, 1] + lonshift # Find new lon...first approximation # Adjust for dateline jumps lonnew <- lonnew - (360 * floor((lonnew + 180) / 360)) return(data.frame(lonnew, latnew) %>% - setNames(c("dlon", "dlat"))) + setNames(c("dlon", "dlat"))) } # Function for to find closest cooler/warmer cell within the union of two levels of 8-cell adjacency from the "departed" and "destination" cells @@ -190,7 +192,7 @@ voccTraj <- function(lonlat, # Find clumps of ocean; the rule is that you can't jump from one clump to another, because this would mean passing over unbroken land xy <- terra::xyFromCell(mn, as.vector(as.matrix(rw))) %>% as.data.frame() - bfr = ((y_res*111.325) + 1) * 1000 # Set buffer to be 1 grid-square width at the equator + 1 km + bfr <- ((y_res * 111.325) + 1) * 1000 # Set buffer to be 1 grid-square width at the equator + 1 km xy <- xy %>% st_as_sf(coords = c("x", "y"), crs = "EPSG:4326") sp_buffer <- st_buffer(st_as_sf(xy), bfr) # Remembering that buffer is in metres @@ -216,28 +218,32 @@ voccTraj <- function(lonlat, as.data.frame() #**** search_cells <- terra::cellFromXY(mn, search_xy) # Which cells are these # Check if any of these are NOT in in EITHER fine coast or mn, and eliminate, if needed - to_keep <- c(which(!is.na(terra::extract(mn, search_xy, ID = FALSE) %>% - pull(1))), # Coords in the coarse grid - which(search_cells %in% fn_lk_up)) %>% + to_keep <- c( + which(!is.na(terra::extract(mn, search_xy, ID = FALSE) %>% + pull(1))), # Coords in the coarse grid + which(search_cells %in% fn_lk_up) + ) %>% unique() - search_xy1 <- search_xy[to_keep,] %>% + search_xy1 <- search_xy[to_keep, ] %>% as.data.frame() %>% distinct() # Get the ssts in the cells to search or <- terra::extract(mn_c, search_xy1, cells = TRUE, xy = TRUE) %>% dplyr::rename(sst = 2, x = 4, y = 5) # If velocity is positive, find nearest cell that is cooler, if there is one - if(unlist(vel_c[r1]) > 0) { + if (unlist(vel_c[r1]) > 0) { o <- or %>% dplyr::filter(sst < unlist(mn_c[r1])) %>% na.omit() - if(nrow(o) == 0) { + if (nrow(o) == 0) { dest_cell <- NA # Set condition with which to ID stuck cells } else { pt <- terra::xyFromCell(mn_c, r1) %>% data.frame() - dest_cell <- st_distance(st_as_sf(pt, coords = c("x", "y"), crs = crs(rast())), - st_as_sf(data.frame(o), coords = c("x", "y"), crs = crs(rast()))) %>% + dest_cell <- st_distance( + st_as_sf(pt, coords = c("x", "y"), crs = crs(rast())), + st_as_sf(data.frame(o), coords = c("x", "y"), crs = crs(rast())) + ) %>% which.min() %>% o$cell[.] } @@ -245,13 +251,15 @@ voccTraj <- function(lonlat, o <- or %>% dplyr::filter(sst > unlist(mn_c[r1])) %>% na.omit() - if(nrow(o) == 0) { + if (nrow(o) == 0) { dest_cell <- NA # Set condition with which to ID stuck cells } else { pt <- terra::xyFromCell(mn_c, r1) %>% data.frame() - dest_cell <- st_distance(st_as_sf(pt, coords = c("x", "y"), crs = crs(rast())), - st_as_sf(o, coords = c("x", "y"), crs = crs(rast()))) %>% + dest_cell <- st_distance( + st_as_sf(pt, coords = c("x", "y"), crs = crs(rast())), + st_as_sf(o, coords = c("x", "y"), crs = crs(rast())) + ) %>% which.min() %>% o$cell[.] } @@ -262,56 +270,56 @@ voccTraj <- function(lonlat, # Loop -------------------------------------------------------------------- # Loop through the trajectories - for(i in 1:(tyr/tstep)) { # 1:(tyr/tstep) + for (i in 1:(tyr / tstep)) { # 1:(tyr/tstep) llold <- lonlat # Take a copy of lonlat - fcells <- terra::cellFromXY(vel,llold) # Get the cells that the trajectories start in + fcells <- terra::cellFromXY(vel, llold) # Get the cells that the trajectories start in # Pull velocity and angle from the "inland" versions, because we always ensure that we can find destination cells for departures within the coastal "blind spot" vc <- vel_c[fcells] %>% pull(1) ac <- ang_c[fcells] %>% pull(1) llc <- llold # Get new locations lonlat <- destcoords(vc, ac, tstep, llc, y_res, x_res) # Extract lon and lat of landing point - tcells <- terra::cellFromXY(vel,lonlat) # Get the cells that the trajectories end in - sflags[which(is.na(tcells))] <- 1 # Sets the trajectory to "stuck" if it exits the velocity field (i.e., tcells == NA) + tcells <- terra::cellFromXY(vel, lonlat) # Get the cells that the trajectories end in + sflags[which(is.na(tcells))] <- 1 # Sets the trajectory to "stuck" if it exits the velocity field (i.e., tcells == NA) # Bounce stuck cells stuck_cells <- which(!is.na(sflags)) - lonlat[stuck_cells,] <- llold[stuck_cells,] # Bounce the corresponding coordinates across for "stuck" cells + lonlat[stuck_cells, ] <- llold[stuck_cells, ] # Bounce the corresponding coordinates across for "stuck" cells tcells[stuck_cells] <- fcells[stuck_cells] # Bounce the corresponding cells across for "stuck" cells # Deal with cells that end on land - onland <- which(is.na(vel[tcells])) %>% # Identify which rows of velend are on land, provided that they are not stuck + onland <- which(is.na(vel[tcells])) %>% # Identify which rows of velend are on land, provided that they are not stuck dplyr::setdiff(stuck_cells) # Ignoring stuck cells - if(length(onland) > 0){ # Only bother if there is at least one cell that returns a NA velocity = land + if (length(onland) > 0) { # Only bother if there is at least one cell that returns a NA velocity = land # Here, you need to check whether it really *IS* on land, or whether it is just in the coastal "blind spot" - fn <- terra::extract(fine_coast, lonlat[onland,], ID = FALSE) %>% + fn <- terra::extract(fine_coast, lonlat[onland, ], ID = FALSE) %>% pull(1) onland <- onland[which(is.na(fn))] - if(length(onland) > 0) { + if (length(onland) > 0) { # Collect the stuff we need here for cells that are really onland - fpos <- llold[onland,] - tpos <- lonlat[onland,] + fpos <- llold[onland, ] + tpos <- lonlat[onland, ] SFlags <- sflags[onland] fcell <- fcells[onland] tcell <- tcells[onland] ft <- data.frame(fcell = fcell, tcell = tcell, code = paste(fcell, tcell, sep = " "), ref = 1:length(fcell)) - ttcell <- apply(ft[,1:2], 1, get_dest_cell) + ttcell <- apply(ft[, 1:2], 1, get_dest_cell) # Filter "stuck" flags here stuck <- which(is.na(ttcell)) unstuck <- which(!is.na(ttcell)) SFlags[stuck] <- 1 # Adjust flags # Make data frame to catch data needed to find new positions ttpos <- data.frame(x = rep(NA, length(onland)), y = rep(NA, length(onland))) - ttpos[stuck,] <- fpos[stuck,] # If they're stuck, pass on starting points + ttpos[stuck, ] <- fpos[stuck, ] # If they're stuck, pass on starting points ttcell[stuck] <- fcell[stuck] # If they're stuck, pass on starting cells - if(length(unstuck) > 0) { - ttdat <- data.frame(ttcell = ttcell[unstuck], loncent = xFromCell(vel, ttcell[unstuck]), latcent = yFromCell(vel, ttcell[unstuck])) %>% # Start building coordinates + if (length(unstuck) > 0) { + ttdat <- data.frame(ttcell = ttcell[unstuck], loncent = xFromCell(vel, ttcell[unstuck]), latcent = yFromCell(vel, ttcell[unstuck])) %>% # Start building coordinates mutate(e = NA, w = NA, n = NA, s = NA, dlon = NA, dlat = NA) # To facilitate finding corners, if we need them # Separate cells in the coastal blind spot from those that are not which_coast <- which(ttdat$ttcell %in% fn_lk_up) which_not_coast <- which(!(ttdat$ttcell %in% fn_lk_up)) # For non-coastal cells - if(length(which_not_coast) > 0) { - corner_block_size <- 0.25*x_res - nc_ttdat <- ttdat[which_not_coast,] # ttdat for non-coastal cells + if (length(which_not_coast) > 0) { + corner_block_size <- 0.25 * x_res + nc_ttdat <- ttdat[which_not_coast, ] # ttdat for non-coastal cells nc_ttdat$e <- nc_ttdat$loncent + (0.5 * x_res) - (runif(1, 0, 1) * corner_block_size) nc_ttdat$w <- nc_ttdat$loncent - (0.5 * x_res) + (runif(1, 0, 1) * corner_block_size) nc_ttdat$n <- nc_ttdat$latcent + (0.5 * y_res) - (runif(1, 0, 1) * corner_block_size) @@ -325,39 +333,42 @@ voccTraj <- function(lonlat, as.vector() return(out) } - corners <- data.frame(ne = get_dist(fpos[which_not_coast,2], fpos[which_not_coast,1], coords[,1], coords[,2])) %>% - mutate(nw = get_dist(fpos[which_not_coast,2], fpos[which_not_coast,1], coords[,3], coords[,4]), - sw = get_dist(fpos[which_not_coast,2], fpos[which_not_coast,1], coords[,5], coords[,6]), - se = get_dist(fpos[which_not_coast,2], fpos[which_not_coast,1], coords[,7], coords[,8])) - cornset <- apply(corners, 1, mfind)*2 # Identify which corners for each onland cell. Have to mul by 2 to shift along correctly. + corners <- data.frame(ne = get_dist(fpos[which_not_coast, 2], fpos[which_not_coast, 1], coords[, 1], coords[, 2])) %>% + mutate( + nw = get_dist(fpos[which_not_coast, 2], fpos[which_not_coast, 1], coords[, 3], coords[, 4]), + sw = get_dist(fpos[which_not_coast, 2], fpos[which_not_coast, 1], coords[, 5], coords[, 6]), + se = get_dist(fpos[which_not_coast, 2], fpos[which_not_coast, 1], coords[, 7], coords[, 8]) + ) + cornset <- apply(corners, 1, mfind) * 2 # Identify which corners for each onland cell. Have to mul by 2 to shift along correctly. cornset <- cbind(cornset, coords) # Add in coordinates - ttdat[which_not_coast,8:9] <- data.frame(t(apply(cornset, 1, mplace))) # Extract coordinates of correct corner + ttdat[which_not_coast, 8:9] <- data.frame(t(apply(cornset, 1, mplace))) # Extract coordinates of correct corner } # For coastal cells - if(length(which_coast) > 0) { - coastal_dat <- ttdat[which_coast,2:3] %>% - mutate(x = fpos[which_coast,1], y = fpos[which_coast,2], - tccell = ttdat[which_coast,]$ttcell) - ttdat[which_coast,8:9] <- pmap_df(coastal_dat, get_nearest_coastal_cell) + if (length(which_coast) > 0) { + coastal_dat <- ttdat[which_coast, 2:3] %>% + mutate( + x = fpos[which_coast, 1], y = fpos[which_coast, 2], + tccell = ttdat[which_coast, ]$ttcell + ) + ttdat[which_coast, 8:9] <- pmap_df(coastal_dat, get_nearest_coastal_cell) } - ttpos[unstuck,] <- ttdat[,8:9] - ttcell[unstuck] <- terra::cellFromXY(mn, ttpos[unstuck,]) + ttpos[unstuck, ] <- ttdat[, 8:9] + ttcell[unstuck] <- terra::cellFromXY(mn, ttpos[unstuck, ]) } # Collect results - lonlat[onland,] <- ttpos + lonlat[onland, ] <- ttpos tcells[onland] <- ttcell sflags[onland] <- SFlags } } - llon[((i * n) + 1): ((i * n) + n)] <- lonlat[,1] # Add lon to the list - llat[((i * n) + 1): ((i * n) + n)] <- lonlat[,2]# Add lat to the list - cellIDend[((i * n) + 1): ((i * n) + n)] <- tcells # Add cellIDs to the list - flags[((i * n) + 1): ((i * n) + n)] <- sflags # Add flags to the list - Steps[((i * n) + 1): ((i * n) + n)] <- i # Capture the time_step - print(c(i, length(onland), round(100*i/(tyr/tstep), 3), date())) # Keep a reference of progress + llon[((i * n) + 1):((i * n) + n)] <- lonlat[, 1] # Add lon to the list + llat[((i * n) + 1):((i * n) + n)] <- lonlat[, 2] # Add lat to the list + cellIDend[((i * n) + 1):((i * n) + n)] <- tcells # Add cellIDs to the list + flags[((i * n) + 1):((i * n) + n)] <- sflags # Add flags to the list + Steps[((i * n) + 1):((i * n) + n)] <- i # Capture the time_step + print(c(i, length(onland), round(100 * i / (tyr / tstep), 3), date())) # Keep a reference of progress } return(cbind(Steps, llon, llat, cellIDs, cellIDend, flags) %>% - as_tibble()) + as_tibble()) } - From 1b907666892fd92879916b5217191670f42f9008 Mon Sep 17 00:00:00 2001 From: Jason Everett Date: Wed, 27 Aug 2025 16:27:56 +1000 Subject: [PATCH 04/10] New version of VoCC --- .gitignore | 2 + DESCRIPTION | 5 +- Meta/vignette.rds | Bin 202 -> 189 bytes NAMESPACE | 1 - R/climPCA.R | 4 +- R/climPlot.R | 8 +- R/dVoCC.R | 4 +- R/gVoCC.R | 3 +- R/shiftTime.R | 2 + R/spatGrad.R | 3 +- R/sumSeries.R | 2 + R/tempTrend.R | 3 +- data-raw/do_trajectories.R | 35 ++ {R => data-raw}/utils.R | 0 {R => data-raw}/voccTraj.R | 58 ++- docs/404.html | 103 +++++ docs/LICENSE.html | 265 ++++++++++++ docs/articles/VoCC.html | 387 ++++++++++++++++++ .../figure-html/unnamed-chunk-8-1.png | Bin 0 -> 206340 bytes .../figure-html/unnamed-chunk-8-2.png | Bin 0 -> 35585 bytes docs/articles/index.html | 76 ++++ docs/authors.html | 114 ++++++ docs/bootstrap-toc.css | 60 +++ docs/bootstrap-toc.js | 159 +++++++ docs/docsearch.css | 148 +++++++ docs/docsearch.js | 85 ++++ docs/index.html | 163 ++++++++ docs/link.svg | 12 + docs/pkgdown.css | 384 +++++++++++++++++ docs/pkgdown.js | 108 +++++ docs/pkgdown.yml | 6 + docs/reference/EEZ.html | 90 ++++ docs/reference/HSST.html | 94 +++++ docs/reference/JapTC.html | 101 +++++ docs/reference/angulo.html | 100 +++++ docs/reference/climPCA.html | 150 +++++++ docs/reference/climPlot.html | 146 +++++++ docs/reference/dVoCC.html | 209 ++++++++++ docs/reference/gVoCC.html | 135 ++++++ docs/reference/index.html | 133 ++++++ docs/reference/pipe.html | 99 +++++ docs/reference/resTime.html | 156 +++++++ docs/reference/shiftTime.html | 139 +++++++ docs/reference/spatGrad.html | 144 +++++++ docs/reference/splitLine.html | 103 +++++ docs/reference/sumSeries.html | 193 +++++++++ docs/reference/tempTrend.html | 134 ++++++ docs/sitemap.xml | 25 ++ man/VoCC_get_data.Rd | 24 -- man/climPCA.Rd | 4 +- man/climPlot.Rd | 3 +- man/dVoCC.Rd | 2 +- man/gVoCC.Rd | 3 +- man/shiftTime.Rd | 2 + man/spatGrad.Rd | 3 +- man/sumSeries.Rd | 2 + man/tempTrend.Rd | 3 +- man/voccTraj.Rd | 82 ---- vignettes/{VoCC_Tutorial.Rmd => VoCC.Rmd} | 157 ++++--- 59 files changed, 4437 insertions(+), 199 deletions(-) create mode 100644 data-raw/do_trajectories.R rename {R => data-raw}/utils.R (100%) rename {R => data-raw}/voccTraj.R (93%) create mode 100644 docs/404.html create mode 100644 docs/LICENSE.html create mode 100644 docs/articles/VoCC.html create mode 100644 docs/articles/VoCC_files/figure-html/unnamed-chunk-8-1.png create mode 100644 docs/articles/VoCC_files/figure-html/unnamed-chunk-8-2.png create mode 100644 docs/articles/index.html create mode 100644 docs/authors.html create mode 100644 docs/bootstrap-toc.css create mode 100644 docs/bootstrap-toc.js create mode 100644 docs/docsearch.css create mode 100644 docs/docsearch.js create mode 100644 docs/index.html create mode 100644 docs/link.svg create mode 100644 docs/pkgdown.css create mode 100644 docs/pkgdown.js create mode 100644 docs/pkgdown.yml create mode 100644 docs/reference/EEZ.html create mode 100644 docs/reference/HSST.html create mode 100644 docs/reference/JapTC.html create mode 100644 docs/reference/angulo.html create mode 100644 docs/reference/climPCA.html create mode 100644 docs/reference/climPlot.html create mode 100644 docs/reference/dVoCC.html create mode 100644 docs/reference/gVoCC.html create mode 100644 docs/reference/index.html create mode 100644 docs/reference/pipe.html create mode 100644 docs/reference/resTime.html create mode 100644 docs/reference/shiftTime.html create mode 100644 docs/reference/spatGrad.html create mode 100644 docs/reference/splitLine.html create mode 100644 docs/reference/sumSeries.html create mode 100644 docs/reference/tempTrend.html create mode 100644 docs/sitemap.xml delete mode 100644 man/VoCC_get_data.Rd delete mode 100644 man/voccTraj.Rd rename vignettes/{VoCC_Tutorial.Rmd => VoCC.Rmd} (68%) diff --git a/.gitignore b/.gitignore index 728e389..97e604b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ .Rhistory .RData .DS_Store +/doc/ +/Meta/ diff --git a/DESCRIPTION b/DESCRIPTION index 99099dd..11b8cdb 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -33,10 +33,13 @@ Suggests: knitr, mapplots, ncdf4, + patchwork, rasterVis, repmis, rmarkdown, - scales + scales, + tidyterra, + VoCCdata URL: https://github.com/JorGarMol/VoCC BugReports: https://github.com/JorGarMol/VoCC/issues License: AGPL (>= 3) diff --git a/Meta/vignette.rds b/Meta/vignette.rds index 2529a6e6bb3e2bbfd4747635371f4facefe082fd..baf81b9578b657646fcbdf244e188e45bb88f9eb 100644 GIT binary patch literal 189 zcmV;u07CyCiwFP!000001B>8dU|?WkU||K4%s?iyFpyvaVgVp#WME<71kxN~`OeOI zLAfbt;w&I>G%-%F+KiIi95e|wh#^3Ggu$W^S&%7ANUB)#5_40F(X_I=q!y&+rGSM0 zVb{<2AKl5`sg>pVMKC=mYS>`TcgxI4h1naDSpw%U2e`OFnT$c`Zon`f#r>Q``Q>^r rKk$OWwgE`|2Lg1DCg&s;qkEJqC9xz?FRciuALMQTcRGyaodEy<$wX8P literal 202 zcmV;*05$&~iwFP!0000028-ZgU|?WkU}j}xU}6R`nT3G_8xRWsF(U&D11FFc49ju3CrriH^hwX!_F2&M-`4I5Mqi(6(+D$L%H%n~?DTyVCdTB*K{UCP(06S5|2EhRU E0FZr69{>OV diff --git a/NAMESPACE b/NAMESPACE index 3eb78da..6039111 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,7 +1,6 @@ # Generated by roxygen2: do not edit by hand export("%>%") -export(VoCC_get_data) export(climPCA) export(climPlot) export(dVoCC) diff --git a/R/climPCA.R b/R/climPCA.R index 668f323..7356993 100644 --- a/R/climPCA.R +++ b/R/climPCA.R @@ -22,7 +22,7 @@ #' @export #' @author Jorge Garcia Molinos #' @examples -#' +#' \dontrun{ #' JapTC <- VoCC_get_data("JapTC.tif") #' #' comp <- climPCA(JapTC[[c(1, 3, 5)]], JapTC[[c(2, 4, 6)]], @@ -31,6 +31,8 @@ #' # Create a data frame with the necessary variables in the required order (see climAna? for details) #' clim <- comp[[2]][, c(2, 4, 3, 5, 1)] #' clim[, c("x", "y")] <- terra::xyFromCell(JapTC[[1]], clim$cid) +#' } +#' climPCA <- function(climp, climf, trans = function(x) log(x), cen = TRUE, sc = TRUE, th = 0.8) { # get a data table with the pooled values (current/future) of the clim variables clim <- data.table::data.table(rbind(terra::values(climp), terra::values(climf))) diff --git a/R/climPlot.R b/R/climPlot.R index f7904aa..73f979f 100644 --- a/R/climPlot.R +++ b/R/climPlot.R @@ -17,7 +17,7 @@ #' @export #' @author Jorge Garcia Molinos and Naoki H. Kumagai #' @examples -#' +#' \dontrun{ #' JapTC <- VoCC_get_data("JapTC.tif") #' #' # Plot climate space for the two first variables(annual precipitation and maximum temperature) @@ -32,7 +32,6 @@ #' y.name = "Temperature max (°C)" #' ) #' -#' \dontrun{ #' # output plots can be saved as: #' ggplot2::ggsave( #' plot = out, filename = file.path(getwd(), "example_plot.pdf"), @@ -44,6 +43,7 @@ climPlot <- function(xy, x.binSize, y.binSize, x.name = "V1", y.name = "V2") { yp <- xy[, 3] xf <- xy[, 2] yf <- xy[, 4] + # bins per axis x.nbins <- floor((abs(range(xp, xf)[2] - range(xp, xf)[1])) / x.binSize) y.nbins <- floor((abs(range(yp, yf)[2] - range(yp, yf)[1])) / y.binSize) @@ -102,7 +102,7 @@ climPlot <- function(xy, x.binSize, y.binSize, x.name = "V1", y.name = "V2") { Freq2D <- data.frame(x = x.bin, y = rep(y.bin, each = length(x.bin)), freq = Freq2D) Freq2D <- Freq2D[!is.na(Freq2D$freq), ] - panelAB <- ggplot2::ggplot(Freq2Dpf, ggplot2::aes(x = x, y = y, fill = freq)) + + panelAB <- ggplot2::ggplot(Freq2Dpf, ggplot2::aes(x = .data$x, y = .data$y, fill = freq)) + ggplot2::geom_raster() + ggplot2::scale_fill_gradientn( colors = r, @@ -121,7 +121,7 @@ climPlot <- function(xy, x.binSize, y.binSize, x.name = "V1", y.name = "V2") { strip.text = ggplot2::element_blank() ) - panelC <- ggplot2::ggplot(Freq2D, ggplot2::aes(x = x, y = y, fill = freq)) + + panelC <- ggplot2::ggplot(Freq2D, ggplot2::aes(x = .data$x, y = .data$y, fill = freq)) + ggplot2::geom_raster() + ggplot2::scale_fill_manual(values = c("#56B4E9", "#009E73", "#D55E00"), name = "Climate type") + ggplot2::labs(x = x.name, y = y.name) diff --git a/R/dVoCC.R b/R/dVoCC.R index 7bc7ccf..a1d8b4c 100644 --- a/R/dVoCC.R +++ b/R/dVoCC.R @@ -41,6 +41,7 @@ #' @export #' @author Jorge Garcia Molinos #' @examples +#' \dontrun{ #' JapTC <- VoCC_get_data("JapTC.tif") #' #' # Create a data frame with the necessary variables in the required order @@ -57,7 +58,6 @@ #' r1[avocc1$focal] <- avocc1$vel #' terra::plot(r1) #' -#' \dontrun{ #' # Cell-specific, distance-unrestricted climate analogue velocity based on least-cost path distances #' # First, create the conductance matrix (all land cells considered to have conductance of 1) #' r <- JapTC @@ -81,7 +81,7 @@ dVoCC <- function(clim, n, tdiff, method = "Single", climTol, geoTol, distfun = "GreatCircle", trans = NA, lonlat = TRUE) { - geoDis <- climDis <- ang <- vel <- target <- cid <- NULL # Fix devtools check warnings + geoDis <- climDis <- ang <- vel <- target <- cid <- a <- NULL # Fix devtools check warnings if (distfun == "Euclidean" && lonlat == TRUE) { print("Error: Euclidean distances specified for unprojected coordinates") diff --git a/R/gVoCC.R b/R/gVoCC.R index 1e1d55e..8a9e21d 100644 --- a/R/gVoCC.R +++ b/R/gVoCC.R @@ -19,7 +19,7 @@ #' @author Jorge Garcia Molinos #' #' @examples -#' +#' \dontrun{ #' HSST <- VoCC_get_data("HSST.tif") #' yrSST <- sumSeries(HSST, #' p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST), @@ -32,6 +32,7 @@ #' #' v <- gVoCC(tr, sg) #' terra::plot(v) +#' } #' gVoCC <- function(tempTrend, spatGrad) { VoCC <- tempTrend[[1]] / spatGrad[[1]] diff --git a/R/shiftTime.R b/R/shiftTime.R index 2c1a725..5148bc5 100644 --- a/R/shiftTime.R +++ b/R/shiftTime.R @@ -21,10 +21,12 @@ #' @export #' @author Jorge Garcia Molinos and Michael T. Burrows #' @examples +#' \dontrun{ #' HSST <- VoCC_get_data("HSST.tif") #' Apr <- shiftTime(HSST, yr1 = 1960, yr2 = 2009, yr0 = 1955, th = 10, m = 4) #' #' terra::plot(Apr) +#' } shiftTime <- function(r, yr1, yr2, yr0, th, m) { # 1. Long term trends in monthly values (e.g. deg/year if temperature) m1 <- ((yr1 - yr0) * 12) + m diff --git a/R/spatGrad.R b/R/spatGrad.R index 3369ff8..60b7e87 100644 --- a/R/spatGrad.R +++ b/R/spatGrad.R @@ -26,7 +26,7 @@ #' @export #' @author Jorge Garcia Molinos, David S. Schoeman, and Michael T. Burrows #' @examples -#' +#' \dontrun{ #' HSST <- VoCC_get_data("HSST.tif") #' #' yrSST <- sumSeries(HSST, @@ -39,6 +39,7 @@ #' sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE) #' #' terra::plot(sg) +#' } #' spatGrad <- function(r, th = -Inf, projected = FALSE) { diff --git a/R/sumSeries.R b/R/sumSeries.R index b1c264f..3de447a 100644 --- a/R/sumSeries.R +++ b/R/sumSeries.R @@ -28,6 +28,7 @@ #' @export #' @author Jorge Garcia Molinos #' @examples +#' \dontrun{ #' # Monthly mean SST (HadISST) data for Europe Jan-1950 to Dec-2010 #' #' HSST <- VoCC_get_data("HSST.tif") @@ -65,6 +66,7 @@ #' p = "1969-01/2009-12", yr0 = "1950-01-01", l = terra::nlyr(HSST), #' fun = myf, freqin = "months", freqout = "other" #' ) +#' } #' sumSeries <- function(r, p, yr0, l = terra::nlyr(r), fun = function(x) colMeans(x, na.rm = TRUE), freqin = "months", freqout = "years") { # construct xts object diff --git a/R/tempTrend.R b/R/tempTrend.R index 6b27c99..638fb53 100644 --- a/R/tempTrend.R +++ b/R/tempTrend.R @@ -19,7 +19,7 @@ #' @export #' @author Jorge Garcia Molinos and Christopher J. Brown #' @examples -#' +#' \dontrun{ #' HSST <- VoCC_get_data("HSST.tif") #' #' yrSST <- sumSeries(HSST, @@ -32,6 +32,7 @@ #' tr <- tempTrend(yrSST, th = 10) #' #' terra::plot(tr) +#' } tempTrend <- function(r, th) { y <- terra::values(r) ocean <- which(rowSums(is.na(y)) != ncol(y)) # remove land cells diff --git a/data-raw/do_trajectories.R b/data-raw/do_trajectories.R new file mode 100644 index 0000000..13d7455 --- /dev/null +++ b/data-raw/do_trajectories.R @@ -0,0 +1,35 @@ +# Run trajectories for a file --------------------------------------------- + +do_trajectories <- function(raster_stack, start_points, nyears) { + # Get the rasters we need + stacks <- build_coastal_mask(f_m = "OISST_Mask_data/mask.nc", + f_cm = "/Volumes/Jet_drive_too/Coastal_masks/coarseAusmask.nc", + f_fm = "/Volumes/Jet_drive_too/Coastal_masks/fineAusmask.nc", + rast_stk = raster_stack) + fine_coast <- stacks[[3]] + vel <- stacks[[1]][[1]] + ang <- stacks[[1]][[2]] + mn <- stacks[[1]][[3]] + vel_c <- stacks[[2]][[1]] + ang_c <- stacks[[2]][[2]] + mn_c <- stacks[[2]][[3]] + lk_up <- stacks$look_up + + lonlat <- start_points[,1:2] %>% + mutate(ID = 1:nrow(.)) %>% + as_tibble() %>% + mutate(vel = terra::extract(vel, .[,1:2], ID = FALSE) %>% + pull(voccMag), + i_coast = terra::extract(fine_coast, .[,1:2], ID = FALSE) %>% + pull(tos), + to_drop = ifelse(is.na(vel) & is.na(i_coast), NA, 1)) %>% + drop_na(to_drop) %>% + dplyr::select(x, y, ID) + out <- traject(lonlat, + vel = vel, ang = ang, mn = mn, + vel_c = vel_c, ang_c = ang_c, mn_c = mn_c, + fine_coast = fine_coast, + lk_up = lk_up, + tstep = 1/12, tyr = nyears) + return(out) +} diff --git a/R/utils.R b/data-raw/utils.R similarity index 100% rename from R/utils.R rename to data-raw/utils.R diff --git a/R/voccTraj.R b/data-raw/voccTraj.R similarity index 93% rename from R/voccTraj.R rename to data-raw/voccTraj.R index 70b708c..9691499 100644 --- a/R/voccTraj.R +++ b/data-raw/voccTraj.R @@ -11,16 +11,13 @@ #' @param vel \code{raster} with the magnitude of gradient-based climate velocity. #' @param ang \code{raster} with velocity angles in degrees. #' @param mn \code{raster} with the overall mean climatic value over the period of interest. +#' @param vel_c +#' @param ang_c +#' @param mn_c +#' @param fine_coast +#' @param lk_up +#' @param tstep #' @param tyr \code{integer} temporal length of the period of interest. -#' @param trajID \code{integer} specifying the identifiers for the trajectories. -#' @param correct \code{logical} does the input raster need to be corrected to account for cropped margins? -#' Unless the raster extent is global, calculation of trajectories will throw an error at the margins -#' as the trajectories go beyond the raster extent (no input values). To avoid this, an option is given for -#' expanding the extent by the resolution of the raster (1 column/row) with NAs. Note that those trajectories -#' reaching the extent limits will be artificially bounced back so should be discarded at that point. -#' Alternatively, users may choose to crop to a larger extent to the domain of interest (appropriately -#' defined by lonlat), so the extra extent buffer for those trajectories getting to the border -#' of the raster. #' #' @return a \code{data.frame} containing the coordinates ("x", "y") of the constituent #' points and identification number ("trajIDs") for each trajectory. @@ -31,9 +28,7 @@ #' @export #' @author Jorge Garcia Molinos, David S. Schoeman and Michael T. Burrows #' @examples -#' -#' HSST <- VoCC_get_data("HSST.tif") -#' +#' \dontrun{ #' yrSST <- sumSeries(HSST, #' p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST), #' fun = function(x) colMeans(x, na.rm = TRUE), @@ -66,6 +61,7 @@ #' #' # This accounts for the extent issue #' traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50, correct = TRUE) +#' } #' voccTraj <- function(lonlat, vel, ang, mn, @@ -86,6 +82,7 @@ voccTraj <- function(lonlat, lonlat <- lonlat %>% dplyr::select(x, y) %>% # Collect just lon and lat (in case there's anything else there) as.data.frame() + tcells <- terra::cellFromXY(vel, lonlat) # # Cell IDs of starting cells n <- nrow(lonlat) # Get number of cells in your sequence sflags <- rep(NA, n) # Set a string of cells that change from NA to 1 where the trajectory sticks @@ -144,10 +141,12 @@ voccTraj <- function(lonlat, cst_pts <- terra::xyFromCell(lk_up, t_block) %>% as.data.frame() %>% st_as_sf(coords = c("x", "y"), crs = crs(rast())) + # Here, we can't search for corners and add random "fuzz" to we collect 10 random points (if there are 10), and select the nearest of those, instead. If there are 10 or fewer, just pick the nearest if (nrow(cst_pts) > 10) { cst_pts <- cst_pts[sample(1:nrow(cst_pts), 10, replace = FALSE), ] } # The unspoken "else" is that we just retain the cst_pts we have + pt <- st_as_sf(data.frame(x = x, y = y), coords = c("x", "y"), crs = crs(rast())) # The point departed from nearest <- st_distance(cst_pts, pt) %>% which.min() @@ -158,7 +157,8 @@ voccTraj <- function(lonlat, return(out) } - # Find new destination, given velocity (km/yr), angle (º), time step (yr) and initial coordinates (ºlon, ºlat); max allowed jump is 1 deg + # Find new destination, given velocity (km/yr), angle (º), time step (yr) and + # initial coordinates (ºlon, ºlat); max allowed jump is 1 deg # vell = vel[fcells] %>% pull(1); angg = ang[fcells] %>% pull(1); timestep = tstep; ll = llold destcoords <- function(vell, angg, timestep, ll, y_res, x_res) { latshift <- (abs(vell) * timestep * cos(deg2rad(angg))) / 111.325 # Calculate shift in lat @@ -184,28 +184,34 @@ voccTraj <- function(lonlat, lonnew <- lonnew - (360 * floor((lonnew + 180) / 360)) return(data.frame(lonnew, latnew) %>% - setNames(c("dlon", "dlat"))) + setNames(c("dlon", "dlat"))) } - # Function for to find closest cooler/warmer cell within the union of two levels of 8-cell adjacency from the "departed" and "destination" cells + # Function to find closest cooler/warmer cell within the union of two levels + # of 8-cell adjacency from the "departed" and "destination" cells get_dest_cell <- function(rw) { # A to-from cell pair and the buffer around a cell on land that can be searched for a suitable cell + # Find clumps of ocean; the rule is that you can't jump from one clump to another, because this would mean passing over unbroken land xy <- terra::xyFromCell(mn, as.vector(as.matrix(rw))) %>% as.data.frame() bfr <- ((y_res * 111.325) + 1) * 1000 # Set buffer to be 1 grid-square width at the equator + 1 km xy <- xy %>% st_as_sf(coords = c("x", "y"), crs = "EPSG:4326") + sp_buffer <- st_buffer(st_as_sf(xy), bfr) # Remembering that buffer is in metres + buffer_zone <- terra::extract(mn_c, sp_buffer, cells = TRUE, xy = TRUE, touches = TRUE) %>% dplyr::select(-ID) %>% distinct() %>% dplyr::rename(sst = climatology) %>% dplyr::select(x, y, sst, cell) %>% drop_na(sst) + clumped <- buffer_zone %>% dplyr::select(-cell) %>% rast(crs = "EPSG:4326") %>% terra::patches(directions = 8, allowGaps = FALSE) + # Which clump did I start in? r1 <- rw[1] %>% unlist() %>% @@ -213,20 +219,23 @@ voccTraj <- function(lonlat, from_clump <- terra::extract(clumped, terra::xyFromCell(mn, r1)) %>% unlist() %>% as.vector() + # What are the coordinates of cells within the search area that fall in the clump I came from? search_xy <- terra::xyFromCell(clumped, which(clumped[] == from_clump)) %>% as.data.frame() #**** search_cells <- terra::cellFromXY(mn, search_xy) # Which cells are these + # Check if any of these are NOT in in EITHER fine coast or mn, and eliminate, if needed to_keep <- c( which(!is.na(terra::extract(mn, search_xy, ID = FALSE) %>% - pull(1))), # Coords in the coarse grid + pull(1))), # Coords in the coarse grid which(search_cells %in% fn_lk_up) ) %>% unique() search_xy1 <- search_xy[to_keep, ] %>% as.data.frame() %>% distinct() + # Get the ssts in the cells to search or <- terra::extract(mn_c, search_xy1, cells = TRUE, xy = TRUE) %>% dplyr::rename(sst = 2, x = 4, y = 5) @@ -251,6 +260,7 @@ voccTraj <- function(lonlat, o <- or %>% dplyr::filter(sst > unlist(mn_c[r1])) %>% na.omit() + if (nrow(o) == 0) { dest_cell <- NA # Set condition with which to ID stuck cells } else { @@ -273,26 +283,32 @@ voccTraj <- function(lonlat, for (i in 1:(tyr / tstep)) { # 1:(tyr/tstep) llold <- lonlat # Take a copy of lonlat fcells <- terra::cellFromXY(vel, llold) # Get the cells that the trajectories start in + # Pull velocity and angle from the "inland" versions, because we always ensure that we can find destination cells for departures within the coastal "blind spot" vc <- vel_c[fcells] %>% pull(1) ac <- ang_c[fcells] %>% pull(1) llc <- llold + # Get new locations lonlat <- destcoords(vc, ac, tstep, llc, y_res, x_res) # Extract lon and lat of landing point tcells <- terra::cellFromXY(vel, lonlat) # Get the cells that the trajectories end in sflags[which(is.na(tcells))] <- 1 # Sets the trajectory to "stuck" if it exits the velocity field (i.e., tcells == NA) + # Bounce stuck cells stuck_cells <- which(!is.na(sflags)) lonlat[stuck_cells, ] <- llold[stuck_cells, ] # Bounce the corresponding coordinates across for "stuck" cells tcells[stuck_cells] <- fcells[stuck_cells] # Bounce the corresponding cells across for "stuck" cells + # Deal with cells that end on land onland <- which(is.na(vel[tcells])) %>% # Identify which rows of velend are on land, provided that they are not stuck dplyr::setdiff(stuck_cells) # Ignoring stuck cells + if (length(onland) > 0) { # Only bother if there is at least one cell that returns a NA velocity = land # Here, you need to check whether it really *IS* on land, or whether it is just in the coastal "blind spot" fn <- terra::extract(fine_coast, lonlat[onland, ], ID = FALSE) %>% pull(1) onland <- onland[which(is.na(fn))] + if (length(onland) > 0) { # Collect the stuff we need here for cells that are really onland fpos <- llold[onland, ] @@ -310,12 +326,14 @@ voccTraj <- function(lonlat, ttpos <- data.frame(x = rep(NA, length(onland)), y = rep(NA, length(onland))) ttpos[stuck, ] <- fpos[stuck, ] # If they're stuck, pass on starting points ttcell[stuck] <- fcell[stuck] # If they're stuck, pass on starting cells + if (length(unstuck) > 0) { ttdat <- data.frame(ttcell = ttcell[unstuck], loncent = xFromCell(vel, ttcell[unstuck]), latcent = yFromCell(vel, ttcell[unstuck])) %>% # Start building coordinates mutate(e = NA, w = NA, n = NA, s = NA, dlon = NA, dlat = NA) # To facilitate finding corners, if we need them # Separate cells in the coastal blind spot from those that are not which_coast <- which(ttdat$ttcell %in% fn_lk_up) which_not_coast <- which(!(ttdat$ttcell %in% fn_lk_up)) + # For non-coastal cells if (length(which_not_coast) > 0) { corner_block_size <- 0.25 * x_res @@ -325,6 +343,7 @@ voccTraj <- function(lonlat, nc_ttdat$n <- nc_ttdat$latcent + (0.5 * y_res) - (runif(1, 0, 1) * corner_block_size) nc_ttdat$s <- nc_ttdat$latcent - (0.5 * y_res) + (runif(1, 0, 1) * corner_block_size) coords <- with(nc_ttdat, cbind(n, e, n, w, s, w, s, e)) # NE, NW, SW, SE corners' coordinates + # Find distances from departure point to corners of ttcell get_dist <- function(y1, x1, y2, x2) { pt1 <- st_as_sf(data.frame(x = x1, y = y1), coords = c("x", "y"), crs = crs(rast())) @@ -333,16 +352,19 @@ voccTraj <- function(lonlat, as.vector() return(out) } + corners <- data.frame(ne = get_dist(fpos[which_not_coast, 2], fpos[which_not_coast, 1], coords[, 1], coords[, 2])) %>% mutate( nw = get_dist(fpos[which_not_coast, 2], fpos[which_not_coast, 1], coords[, 3], coords[, 4]), sw = get_dist(fpos[which_not_coast, 2], fpos[which_not_coast, 1], coords[, 5], coords[, 6]), se = get_dist(fpos[which_not_coast, 2], fpos[which_not_coast, 1], coords[, 7], coords[, 8]) ) + cornset <- apply(corners, 1, mfind) * 2 # Identify which corners for each onland cell. Have to mul by 2 to shift along correctly. cornset <- cbind(cornset, coords) # Add in coordinates ttdat[which_not_coast, 8:9] <- data.frame(t(apply(cornset, 1, mplace))) # Extract coordinates of correct corner } + # For coastal cells if (length(which_coast) > 0) { coastal_dat <- ttdat[which_coast, 2:3] %>% @@ -355,12 +377,14 @@ voccTraj <- function(lonlat, ttpos[unstuck, ] <- ttdat[, 8:9] ttcell[unstuck] <- terra::cellFromXY(mn, ttpos[unstuck, ]) } + # Collect results lonlat[onland, ] <- ttpos tcells[onland] <- ttcell sflags[onland] <- SFlags } } + llon[((i * n) + 1):((i * n) + n)] <- lonlat[, 1] # Add lon to the list llat[((i * n) + 1):((i * n) + n)] <- lonlat[, 2] # Add lat to the list cellIDend[((i * n) + 1):((i * n) + n)] <- tcells # Add cellIDs to the list @@ -370,5 +394,5 @@ voccTraj <- function(lonlat, } return(cbind(Steps, llon, llat, cellIDs, cellIDend, flags) %>% - as_tibble()) + as_tibble()) } diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 0000000..142ebb3 --- /dev/null +++ b/docs/404.html @@ -0,0 +1,103 @@ + + + + + + + +Page not found (404) • VoCC + + + + + + + + + + + +
+
+ + + + +
+
+ + +Content not found. Please use links in the navbar. + +
+ + + +
+ + + +
+ +
+

+

Site built with pkgdown 2.1.3.

+
+ +
+
+ + + + + + + + diff --git a/docs/LICENSE.html b/docs/LICENSE.html new file mode 100644 index 0000000..59ada21 --- /dev/null +++ b/docs/LICENSE.html @@ -0,0 +1,265 @@ + +GNU Affero General Public License • VoCC + + +
+
+ + + +
+
+ + +
+ +

Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>

+

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

+
+

Preamble

+

The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software.

+

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program–to make sure it remains free software for all its users.

+

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

+

Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software.

+

A secondary benefit of defending all users’ freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public.

+

The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version.

+

An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license.

+

The precise terms and conditions for copying, distribution and modification follow.

+
+
+

TERMS AND CONDITIONS

+
+

0. Definitions.

+

“This License” refers to version 3 of the GNU Affero General Public License.

+

“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

+

“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

+

To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

+

A “covered work” means either the unmodified Program or a work based on the Program.

+

To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

+

To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

+

An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

+
+
+

1. Source Code.

+

The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

+

A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

+

The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

+

The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

+

The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

+

The Corresponding Source for a work in source code form is that same work.

+
+
+

2. Basic Permissions.

+

All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

+

You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

+

Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

+
+
+ +

No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

+

When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

+
+
+

4. Conveying Verbatim Copies.

+

You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

+

You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

+
+
+

5. Conveying Modified Source Versions.

+

You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

+
    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. +
  • +
    1. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
    2. +
  • +
    1. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
    2. +
  • +
    1. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
    2. +
  • +

A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

+
+
+

6. Conveying Non-Source Forms.

+

You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

+
    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
    2. +
  • +
    1. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
    2. +
  • +
    1. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
    2. +
  • +
    1. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
    2. +
  • +
    1. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
    2. +
  • +

A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

+

A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

+

“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

+

If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

+

The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

+

Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

+
+
+

7. Additional Terms.

+

“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

+

When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

+

Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

+
    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. +
  • +
    1. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
    2. +
  • +
    1. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
    2. +
  • +
    1. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    2. +
  • +
    1. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    2. +
  • +
    1. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
    2. +
  • +

All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

+

If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

+

Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

+
+
+

8. Termination.

+

You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

+

However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

+

Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

+

Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

+
+
+

9. Acceptance Not Required for Having Copies.

+

You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

+
+
+

10. Automatic Licensing of Downstream Recipients.

+

Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

+

An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

+

You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

+
+
+

11. Patents.

+

A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

+

A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

+

Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

+

In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

+

If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

+

If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

+

A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

+

Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

+
+
+

12. No Surrender of Others’ Freedom.

+

If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

+
+
+

13. Remote Network Interaction; Use with the GNU General Public License.

+

Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph.

+

Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License.

+
+
+

14. Revised Versions of this License.

+

The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

+

Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation.

+

If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

+

Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

+
+
+

15. Disclaimer of Warranty.

+

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

+
+
+

16. Limitation of Liability.

+

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+
+
+

17. Interpretation of Sections 15 and 16.

+

If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

+

END OF TERMS AND CONDITIONS

+
+
+
+

How to Apply These Terms to Your New Programs

+

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

+

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

+
    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as
+    published by the Free Software Foundation, either version 3 of the
+    License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+

Also add information on how to contact you by electronic and paper mail.

+

If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a “Source” link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements.

+

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see https://www.gnu.org/licenses/.

+
+
+ +
+ + + +
+ + + +
+ +
+

Site built with pkgdown 2.1.3.

+
+ +
+ + + + + + + + diff --git a/docs/articles/VoCC.html b/docs/articles/VoCC.html new file mode 100644 index 0000000..e863c8a --- /dev/null +++ b/docs/articles/VoCC.html @@ -0,0 +1,387 @@ + + + + + + + +VoCC • VoCC + + + + + + + + + + + +
+
+ + + + +
+
+ + + + +

This vignette provides the code to reproduce the examples for the R +package VoCC as presented in Garcia Molinos et al. (2019). Refer to the +paper and the function documentation for details on function options, +considerations on the argument choices and interepretation of +output.

+

For this tutorial we need the following packages (if not installed +get them first):

+ +

We also need a few data sets that can be accessed from the +VoCCdata package.

+
+library(VoCCdata)
+
+

Example 1: Prediction of biogeographical shifts +

+

We have a look first at the “marshift” global data set containing +reported range shifts in marine species corresponding to given periods +of time.

+
+str(marshift)
+#> 'data.frame':    343 obs. of  6 variables:
+#>  $ lat       : num  49.7 53.8 53.8 40 43 ...
+#>  $ long      : num  -4.33 5 5 1 -9.3 -1.4 -9.3 -71.7 -71.7 -71.7 ...
+#>  $ timespan  : int  30 40 40 55 35 35 84 39 26 54 ...
+#>  $ years_data: int  23 40 40 15 4 2 5 2 2 2 ...
+#>  $ taxa      : Factor w/ 12 levels "Benthic algae",..: 6 6 6 6 3 3 4 5 5 5 ...
+#>  $ Shift     : num  536.1 65.6 95.9 40 10 ...
+

Next, we calculate the gradient- and distance-based velocities +(1960-2009), using the HadiSST data set, from which we will later +extract the corresponding values for each observed shift.

+
+HadiSST <- terra::rast(system.file("extdata", "HadiSST.tif", package = "VoCCdata"))
+
+# monthly to annual averages
+r <- sumSeries(HadiSST, p = "1960-01/2009-12", yr0 = "1955-01-01", 
+               l = terra::nlyr(HadiSST), 
+               fun = function(x) colMeans(x, na.rm = TRUE), 
+               freqin = "months", freqout = "years")
+# temporal trend
+vt <- tempTrend(r, th = 10)
+# spatial gradient
+vg <- spatGrad(r, th = 0.0001, projected = FALSE)
+# climate velocity
+gv <- gVoCC(vt, vg)
+
+# Now the distance-based velocities
+# Take 1960-1970 as base period against 2000-2009
+r2 <- c(terra::mean(r[[1:10]], na.rm = TRUE), terra::mean(r[[41:50]], na.rm = TRUE))
+
+# prepare the data frame with the necessary variables
+clim <- na.omit(data.frame(terra::values(r2), cid = 1:terra::ncell(r)))
+
+clim[, c("x", "y")] <- terra::xyFromCell(r, clim$cid)
+# 1965-2004 (40 yr), 500 km search radius
+
+v <- dVoCC(clim, n = 1, tdiff = 40, method = "Single", climTol = 0.1, geoTol = 500, distfun = "GreatCircle", trans = NA, lonlat = TRUE)
+

Next, we extract the mean velocity estimates for each reported shift +by taking the average of all grid cell values within a circle of radius +equal to the reported range-shift distance. These are then used to fit +the simple linear regression models of observed range shifts against +climate velocity. Distance-based velocities are strictly positive by +definition, so to compare like with like we change first their sign to +negative where present local climates are warmer than their future +analogues.

+
+# Change sign as needed and create the distance-based velocity raster
+ind <- which(terra::extract(r2[[1]], v$focal) > terra::extract(r2[[2]], v$target))
+v$velBis <- v$vel
+v$velBis[ind] <- v$vel[ind] * -1
+# put output in raster format
+dv <- terra::rast(gv)
+dv[v$focal] <- v$velBis
+
+# Create point geometries and buffer them
+coords <- terra::vect(cbind(marshift$long, marshift$lat), crs = "EPSG:4326")
+buffer_size <- marshift$Shift * (marshift$timespan / 10) * 1000
+
+marshift$GV <- terra::extract(abs(gv[[1]]), terra::buffer(coords, buffer_size), 
+                              fun = mean, na.rm = TRUE)$voccMag # TODO The other option is voccAng but they seem the same. Check data above.
+
+marshift$DV <- terra::extract(abs(dv), terra::buffer(coords, buffer_size), 
+                              fun = mean, na.rm = TRUE)$voccMag  # The other option is voccAng
+
+# fit the regression models
+Mgv <- lm(Shift^(1 / 4) ~ I((GV * 10)^(1 / 4)), data = marshift, weights = years_data)
+Mdv <- lm(Shift^(1 / 4) ~ I((DV * 10)^(1 / 4)), data = marshift, weights = years_data)
+summary(Mgv)
+#> 
+#> Call:
+#> lm(formula = Shift^(1/4) ~ I((GV * 10)^(1/4)), data = marshift, 
+#>     weights = years_data)
+#> 
+#> Weighted Residuals:
+#>     Min      1Q  Median      3Q     Max 
+#> -9.3704 -2.3595 -0.7102  1.7944 14.8587 
+#> 
+#> Coefficients:
+#>                    Estimate Std. Error t value Pr(>|t|)    
+#> (Intercept)          0.9542     0.2467   3.869 0.000131 ***
+#> I((GV * 10)^(1/4))   0.6028     0.1006   5.994 5.22e-09 ***
+#> ---
+#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+#> 
+#> Residual standard error: 3.821 on 340 degrees of freedom
+#>   (1 observation deleted due to missingness)
+#> Multiple R-squared:  0.09558,    Adjusted R-squared:  0.09292 
+#> F-statistic: 35.93 on 1 and 340 DF,  p-value: 5.217e-09
+summary(Mdv)
+#> 
+#> Call:
+#> lm(formula = Shift^(1/4) ~ I((DV * 10)^(1/4)), data = marshift, 
+#>     weights = years_data)
+#> 
+#> Weighted Residuals:
+#>     Min      1Q  Median      3Q     Max 
+#> -9.9702 -2.5047 -0.8118  1.6606 15.5742 
+#> 
+#> Coefficients:
+#>                    Estimate Std. Error t value Pr(>|t|)    
+#> (Intercept)          0.4845     0.3668   1.321    0.187    
+#> I((DV * 10)^(1/4))   0.7660     0.1455   5.266  2.5e-07 ***
+#> ---
+#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
+#> 
+#> Residual standard error: 3.883 on 335 degrees of freedom
+#>   (6 observations deleted due to missingness)
+#> Multiple R-squared:  0.07644,    Adjusted R-squared:  0.07369 
+#> F-statistic: 27.73 on 1 and 335 DF,  p-value: 2.502e-07
+

Produce the observed vs predicted scatterplots with regression lines +(Fig. 2 in Garcia Molinos et al. 2019).

+
+# first compare both velocities
+
+p1 <- ggplot() + 
+  geom_spatraster(data = gv[[1]]) + 
+  scale_fill_distiller(palette = "RdBu", direction = 1, limits = c(-50, 50)) +
+  ggtitle("Gradient-based vocc") +
+  scale_x_continuous(expand = c(0,0)) + 
+  scale_y_continuous(expand = c(0,0))
+
+p2 <- ggplot() + 
+  geom_spatraster(data = gv[[1]]) + 
+  scale_fill_distiller(palette = "RdBu", direction = 1, limits = c(-20, 20)) +
+  ggtitle("Distance-based vocc") +
+  scale_x_continuous(expand = c(0,0)) + 
+  scale_y_continuous(expand = c(0,0))
+
+wrap_plots(p1, p2, ncol = 1)
+

+
+
+# scatter plots with the resulting regression line
+p1 <- ggplot(na.omit(marshift), aes(x = I((GV * 10)^(1 / 4)), y = Shift^(1 / 4))) +
+  geom_point(color = "grey") +
+  geom_smooth(method = lm, se = FALSE) +
+  theme_classic() +
+  scale_color_brewer(palette = "Accent") +
+  labs(x = "Predicted shift (x^1/4; km/yr)", y = "Observed shift (y^1/4; km/yr)")
+p2 <- ggplot(na.omit(marshift), aes(x = I((DV * 10)^(1 / 4)), y = Shift^(1 / 4))) +
+  geom_point(color = "grey") +
+  geom_smooth(method = lm, se = FALSE) +
+  theme_classic() +
+  scale_color_brewer(palette = "Accent") +
+  labs(x = "Predicted shift (x^1/4; km/yr)", y = "Observed shift (y^1/4; km/yr)")
+wrap_plots(p1, p2, nrow = 1)
+#> `geom_smooth()` using formula = 'y ~ x'
+#> `geom_smooth()` using formula = 'y ~ x'
+

+
+
+

Example 2: Analysis of climate exposure and connectivity in the +Western Pacific Ocean +

+

THIS CODE IS NOT OPERATIONAL YET. IN PARTICULAR, +voccTraj HAS NOT BEEN UPDATED FOR terra. +Standby for updates.

+

In this example we use climate velocity trajectories (based on +1960-2009 mean annual SST) to analyse climate connectivity in the +Western Pacific region and calculate the residence time corresponding to +the exclusive economic zones in the region as an index of climatic +exposure. First, we arrange the raster layers for analysis.

+
+# prepare raster layers
+vel <- gv[[1]]
+ang <- gv[[2]]
+mn <- app(r, mean, na.rm = T)
+
+# generate a velocity layer centered and cropped to study region to extract the initial coordinates for the trajectories from
+x1 <- crop(gv[[1]], ext(-180, 0, -90, 90))
+x2 <- crop(gv[[1]], ext(0, 180, -90, 90))
+ext(x1) <- c(180, 360, -90, 90)
+velc <- merge(x1, x2)
+# crop to the desired extent
+# display restricted to +180 longitude to avoid plotting issues with date line crossing
+velc <- crop(velc, c(90, 180, -32, 33))
+

We can now populate the data frame with the cell centroid coordinates +for the trajectories and associated input data

+
+lonlat <- data.frame(terra::xyFromCell(velc, 1:ncell(velc)))
+lonlat$vel <- terra::extract(vel, lonlat, ID = FALSE)
+lonlat$ang <- terra::extract(ang, lonlat[, 1:2], ID = FALSE)
+lonlat$mn <- terra::extract(mn, lonlat[, 1:2], ID = FALSE)
+lonlat <- na.omit(lonlat)
+

Let’s calculate the trajectories with parallel processing to +demonstrate how this can be used to speed things up (especially useful +when dealing with fine resolutions or large extents).

+
+cores <- detectCores()
+ncores <- cores[1] - 1
+cuts <- cut(1:nrow(lonlat), ncores)
+cl <- makeCluster(ncores)
+registerDoParallel(cl)
+traj <- foreach(x = levels(cuts), .combine = rbind, .packages = c("raster", "sp", "rgeos", "geosphere", "rgdal", "VoCC"), .multicombine = TRUE) %dopar% {
+  voccTraj(lonlat[cuts == x, ], vel, ang, mn, tyr = 50, trajID = as.numeric(rownames(lonlat[cuts == x, ])), correct = FALSE)
+}
+stopCluster(cl)
+

Plot them over the climate velocities and the EEZ polygons from the +EEZs data set (Fig. 3a in Garcia Molinos et al. 2019)

+
+# simplify polygons to speed plotting up
+eez_simp <- rgeos::gSimplify(EEZs, tol = 0.5, topologyPreserve = TRUE)
+plot(velc)
+# create the spatial object with the trajectories and plot them together with the EEZ polygons
+lns <- trajLine(x = traj)
+plot(lns, add = TRUE)
+plot(eez_simp, col = scales::alpha(rgb(211, 211, 211, maxColorValue = 255), 0.5), add = TRUE)
+

We now calulcate the trajectory classes and residence times for each +EEZ using the traj25 data set.

+
+# get the set of starting cells for the trajectories and calculate trajectories
+# at 1/4-deg resolution (16 trajectories per 1-deg cell)
+r <- disaggregate(mn, 4)
+lonlat <- na.omit(data.frame(terra::xyFromCell(vel, 1:ncell(vel)), vel[], ang[], mn[]))[, 1:2]
+traj25 <- voccTraj(lonlat, vel, ang, mn, tyr = 50, correct = TRUE)
+# classify trajectories (16 trajectories starting from each 1-deg cell cell)
+clas <- trajClas(traj25, vel, ang, mn, trajSt = 16, tyr = 50, nmL = 20, smL = 100, Nend = 45, Nst = 15, NFT = 70)
+# Extract proportions by categories for each EEZ
+v <- data.table(terra::extract(clas[[7]], EEZs, df = TRUE))
+v[, TrajClas := as.character(TrajClas)]
+v[, ID := as.ordered(ID)]
+# proportions by class
+d <- prop.table(table(v), 1)
+# residence times by EEZ
+EEZa <- resTime(EEZs, vel, areapg = NA)
+

Finally let’s plot the category proportions as pie charts on top of +each EEZ, the size of the chart being proportional to their respective +residence time (Fig. 3b in Garcia Molinos et al. 2019).

+
+D <- data.table(d) # put data in long format
+# add EEZ names for reference
+D[, name := as.character(EEZs$Territory1)[as.numeric(ID)]]
+D[, RT := as.character(EEZa$resTim)[as.numeric(ID)]]
+# prepare data frame to plot the pie charts with
+dt <- as.data.frame.matrix(d)
+dt$country <- as.character(EEZs$Territory1)
+dt[, c("x", "y")] <- coordinates(EEZs)
+dt$RT <- EEZa$resTim
+# generate the plot
+plot(velc)
+plot(eez_simp, add = TRUE)
+mycol <- c(scales::alpha(rgb(192, 192, 192, maxColorValue = 255), 0.5), scales::alpha(rgb(204, 255, 204, maxColorValue = 255), 0.5), scales::alpha(rgb(255, 153, 51, maxColorValue = 255), 0.5), scales::alpha(rgb(255, 51, 51, maxColorValue = 255), 0.5), scales::alpha(rgb(51, 51, 255, maxColorValue = 255), 0.5), scales::alpha(rgb(204, 102, 0, maxColorValue = 255), 0.5), scales::alpha(rgb(204, 0, 204, maxColorValue = 255), 0.5), scales::alpha(rgb(255, 255, 51, maxColorValue = 255), 0.5), scales::alpha(rgb(153, 204, 255, maxColorValue = 255), 0.5))
+# mylab = c("Non-moving", "Slow-moving", "Internal Sink", "Boundary sink",
+#         "Source", "Internal sink","Corridor", "Divergence", "Convergence")
+for (i in 1:35) {
+  add.pie(z = as.numeric(dt[i, 1:9]), x = dt[i, "x"], y = dt[i, "y"], radius = log(dt[i, "RT"]), col = mycol, labels = "")
+}
+
+
+

References +

+

García Molinos, J., Schoeman, D. S., Brown, C. J. and Burrows, M. T. +(2019), VoCC: An R package for calculating the velocity of climate +change and related climatic metrics. Methods Ecol Evol. doi:10.1111/2041-210X.13295

+
+
+ + + +
+ + + +
+ +
+

+

Site built with pkgdown 2.1.3.

+
+ +
+
+ + + + + + + + diff --git a/docs/articles/VoCC_files/figure-html/unnamed-chunk-8-1.png b/docs/articles/VoCC_files/figure-html/unnamed-chunk-8-1.png new file mode 100644 index 0000000000000000000000000000000000000000..db89be1d14893873de59109c8e3ddc71a7320a6b GIT binary patch literal 206340 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

V?jB6 zgkVZ8x06w~(oK%LIzCUfUb5`TUZN!+_G(X;CeahAqoWhg-MF|hntw5)uUcgKbduHA zSL6IN{lRp8Y8}n8pS<||vqngY4(+_D-1M`5$(_bXSouqUQnIZ>9W3tB^ioaUZjZ8B zSRQ6R?Q7lFV?vCT@htP+Rq$kyVC1zHcY_AKEwFxJvI3Y;xGE0^WVA?6|c}l+YPr~wE+^}DL1Pe z8b9|RwKcsjuDf5qVo_639t6{7kg9!T*`UYTRy(Xs*s;nlXXQaiOMo}Q*}rhn54^E3adLb(m2vD-im*8 zv6`pPY6O*H9uZArkbd;JiungX703XEcrUc_P$idvrqj&%0OEbknCZv}g=?9l$Q8(D ze2^}qPQpW1X)7xy_upS7@Mpq6pODB6cGiq;URnw@) zwOOmTMwP*(R<5mq^%Yqin4LCC8yK^gOQ@r{9v}EKZpkBu1Jt@e9TD~X8BqB5kR^LCHK{4UteuOxQ{0Gw(bO0-&G8I*Wwm4mL1dCr%JJRbMq3J;uV28zHyP!7dYqwf3%DEVQ z`sqif{%Ea@OH%%DufNHNu_K>9;GSh_#xJf%0EUsKJ_Y6agNo3Jszpd>s2ymjU0~4a zAD=dy{lYg|xiDMlk$yNTFLtnCp#J8}r>9@W+XvOt*1%>x*a{E4a;1$_9)F3oWucW9 zGmXEl{7_Nj{K?;`b-Z_?9$w8q4!vL0jHX%_X1uzgUsJh8?ZC&u5pXqj<-tQmsCi9S zBPlmeRf;-U(uC!&uYhCwCOeUXGHL3R&LkV1qi>VzEO0;UPPIEPXWgN@Y%BBBqw`Ca z`yV%oOx$+tUXd{De|A$GP-rl0!si(oYykvB4QkM`wN-Ix8uIBH`sp|EWwm4OU8Gdp z#Cd9EfD$uiNJyKV zwbwFuqPnTtb+SzQz{`QeYR7MPjP=j5i$EXc^)^}9!J_Y|3a|p(E%S9_)kk26tz&*> zs1my5qa`9q##1AmQ{Y0FAQdC4;PxE8fm0LrwK&I~OR(Apch3)Sa=?X_075-Kn$r-L zO|xAhXQ`F#k-2?nk?Y%{594y?kejUxeffh|o~c}F`SkFye_-ZAxW#AS{Di>_yZT`r znSy8?tP0Hd=tc5TncQ^OWsq%%k`GOs!?ZpKe{WiR^;~S7WBo%&Xj#iG8DblxCDzG8 z-Q$>k_Ld_XKNFgzDf45%o9xhu1w#>*PC3}@YDhMb0dd?8DX2i$wF}$rFbd{__UMT6FAanBvX-XJ z4Kl*V+84hHD5D;1pjwynf_t1pTYat(P4A)w`aQXYx{1}4wBdI zY|8;-Ny>%ycQ)FU?Fp8&(Cm{Qp6Z4HkB+Bz#Y&zYy^CIbl(G+@(?dZ|bj%CTT+J5i zkATr{H1X3_93Mks@s2RF=D71RqjTWKL#u?X?Z~98D%ZVMnYr=60k#`&TVEQ-bo}A> zo9Iop$`tg;G`2m|8$flLRc9C}H<(@!wNf`KOQDI6PsmGKFI%ChPti*5Dt!a4WiIfG zX(eSr?Qh4r_0wvytQm)!O_J!IpAr>+mwL_&hupR1gRgatSpGrHm)=h7nMi#|S$;Mt z(EAZ4L*ZkHSX`e!U(;B7BPeafRX*M%Zm0gDan^DGzZW4}oZ8%_dEO#nC~e?r0WJQ{ zpI!5xEg0{)pytR5JWn{CB$_V-SYU+Qx6%a6SE50W@73h$d6KH6=bZlLSk za_Xh`MAZ@Qa%esTqbQ9X6Q~I*_{2_9P$ACA*!MC6NNFEe)6#jeP~xKBs;=?7eG%fSY9Uzn zNz={%7K)U*I*$FCLnD^xV>t;v;9`sI zmoV49*o=kwnd(oUC}^>n>jcYB-E>l+uRtV_Y`JCp_NPPxO9;&u3Qfgp8nw2kdQiFf z2-<@T9-5vqfcrPMWTDD4)pBSB8{)1vezX~)g%8)dSj80frg5C#yH=v5!I5FL7aI5n zraJsGz*>xkAmhQN4DBpOE7$=+8?WRq0*ldE9MnRSQksF-oO(l0iv9O zb=$21lq`PFdXi70ZZ&Es`J(P;MSXHZ4xVeJB|}x(c^z=6wGwSsDbP4#568UcGt^^7 zSE)HP_{`LbHEm_JKiJTayM&&pYIF~B>q{9sk-3Jrv~ZE%GUHEP+F2y@7qzC=LbusW zuALg5R&#A2{d94WRoPeKvnH&UQZz+2Z(Z*pK-~ST@kN+hocf$kr7Wjr*)Q_`vYUR! zQN_k_@YO&%05vA;OgVFBi&KndE(Wdf7g%(EGJHs}pKv!Ap~`z>A|qh(EVs7w2`LVe zl-rfNO+Hy?eZtfIKF|%g2>%-y0b9*4Uv6%y(hxjcSS`}>67lTCBi;G5cz*iD;~^P~ zdLlVlOe+`=LOY!uOxSg!Z40}T8?U}wJza9C&S&O=kJ8PjsEE9!a@j(B99%H6j!ses z`d9LX+dA}NsodMV1nNpFigS}!i&S`jpj7QJ11ejQk&w`^T>*QVS z?`x*Jz+_f>S(waT@(3bcxOVKfJLWNG$boqua}}Pr9=AR{eTCUa87Op6cpMCGI7-JW zMAxi5Bmnle6q(&{1+f-Uq zKQ<6!x1g-nXeOL{1YSyERMBuWftJ;u{`EmA7$QTlhkRq{s<@Aw($-NN+0CqWnuq>7 zfOZ<3ejkL7tVpBt6WcSBE2)cH2GdxLjvBXLr55yh)>z0T*a;ra;-}l_OF2GoSVx#s zs}|X$!4!rW5E2{)8wHyhRne=X=+P8R+k}GI>ea1yrh(T=X9jEv$M)Rx-BYDs0Np{N zh27!Za^^#Z1KdJ@(#UilJMXn*ZliD4Fw(UsY6Ao!Y`?mVrr+|ij+an+whyj_rXDaf zl=1-*-zO<4NWL>&x!oe4k;qMtTSI^4k**P*ZuJBaNK|c!1bsZn+o?R$`Y=Om=WlnC zcNkgJcP2@c7*md(*=0-L9|1eezVQPbeFegvo=7|?#- z3u8L$zyou^ea&+xxer8?O*>e4XPrNNRl&8kzRC!>AQ2S_7s-9m)luY0ap2zcStfyh zLh}?uGqg(cQ539o&nln|j9XuA;LH=8C~ef20@`q0s zKalNvi3W-CEj}A50E<3fGUt@$A$5=hf&ghUV?6#H~i^66%9o#MqIWcbFB53$wEYinB-Nr;`>k zg<8D;N~5f>2_|y0r~Bg39FJZZ9KOI(q*9xjA*5D6=^zVX?UN2mKu9G9+F5u#*7mE- zPm{aR$5@tHllH6C91SAVK$kcl1z^Vwrj%ZsiS2-dS^<)9OHAtw{uW(&O3}&l+2~}$ zzVaZLG{QgxL5uLTy^8LI`iHd-$IDG&VThb)O}I?3wqHk7j^DtCT>iEP8(5A}uu5s0 zV6yo>TqX<62+-UlQvw46734O*50SKxfFM!d8Gv41_QZC%6vG&-p7@M7Cx@P+28*N| zw1_BZSJzJVD$Y!Du4HLZQtQa!zl@TQ)9$^BJpNa`F2y^$WRSnQd#)Kcs? z;ba+fs-fegj2&Nj*5{4RZP&;YBzqpT7t}3H97KpkRx?Cq)uYc+i8NDu)R_`)Hv0KpXs^9WF%1OJoCl_Zabj zVeJM|@w?k=q@8oX*);y%7MiT-I%QN-m`=<*^OCEDjRJuT+QKC}>>_9M9AQg_!HM7?1ETM}scGUNsm0M^4J*x4XcK-$S;FcC^s!u;l_YPUFyj%4*GE90!Wr~&k2 z-=DdgktS?fs|YGOItyb)wIB!M_ICm8ihjw8AU>-?Ed|gl4!w?niY$mGI~b+38Kc!4 z|7~!GsHkWL^i=o4Cyzs)j4W?WNK%PR1T8fhGk`K${l*kHdRE>{*5^8#^u$Rl^on!UiVm_1M+Bx%q2%471FD_mDQ1R)vRN%!+_3{L z8@>Qu*j?!HNOIrFMR>Pp06!RRYZQ$+6N?&E2F#84kqQO8+*M_JpMwFy`qMy`uA9Do z_#ps2k+C&RnQ411V5T96Wdx8?3Y;DO>aapOvFbZBph1k@NlZ2{gj@->4U3#z(8{aC zn9<_gFs!*V0L|_Q0dWovo#)yh)6LJdF36K@!Tr*8LtyqiI2c~nv@)IYX7us=75LhW zwod8kk5b^iuGX@P4~8C1A^@;(7!-W~h!)qc*`OO##uJn#0D!?#R*jk-c~HZ*v1{=< z|3yT-v4;#j1dJm+O6`kV&=d=Sr|snm7!U_7N1>-k%W45ncZy|0@=rNqOwU$J0OZefrx&?47;0Xc3WG=y(u;8}-#WnG@Ui1_{dwCm5? z8feP_TQ!9QXs1SK;*S26Hyq@aK^QgiZZZAdqT(6GQCKplS6Lt%qJ4=}42p!Ci3+Iy zkN$3k0nsCoqt7(-GZJ;u;$nipp`ibFFAy40RWMKvvsa)Bf_K=Dgr~LG?1FJ6Sz!I& z8-|tpzuqGigDWGuSZ)IjOC_Siag5`84+=ORARf%C5jfKfiTXHp*!M|GJGnGt?@VB- z=s0q3w2gxfLeQV=oQkK?aO-*zE*sx-{%vGG&eG z{w;W@1RkEjqK5*vhxulWc#|c>?)=9%)^G=UP%0F}&Cu>GhZ*Py(&fvSiviKm=10)x zJooT`=j zhd*221v}s%9zBnZ-GPSoy>L%D;y>5AijOnn#so^KFh7F)geJEDhSOruy+?8jteAQ-2U!s%id z{h7W1QxNAdeEtE??F6Pa7s#=Zqy|`OyBZBGYFSvC@)^TaPK)HP=d)DlRHyG#>Vf=HK5Mb?64=d9&DG zBpffNu)`b%YZ~=yfzXn|E1<}>T===Kux(7HK!3BUGU43A9wM8HbKlDg7YK zdAtHQ#ctdq8=)eofti+64AWUt3A%JKXp{u$*^=4LLC9!2F$`>2k}2HoZA(1prwC%{ zzP~q5-W+`)5C>d9>NbM;B`^v@j{y2Rc@ZLm&X1 zF#y-TZ_^Qv(gDQ*kKXFY8S=2f%XW2jvCj|zD_O%}CJa32g@lAqNJ09J+K^@G3WhN3 zy~OWlk_aV%Jy;iA?YIljx`<~#fUpbqb?>rM4)_f_acmlM7&Kk;Vn4#cgulOJU;hx~ zWD*RCor9)o2%M?m=oSuoQZ$_G!L0=c5Do;x27Q@!*kRb3>j=zcn6Sf78su0I$F;B` zcjG4mjs&+@5TFQCX!w>QG=ts_DL^T@w)7X`yf?dtt9(k0l}cpD2-iVJ2jrSMcE zFeWDj&Q_bz`!?>|@Ij#C`~VJsP>?*g1D-M%pK|MVz5E#%gp+EWuBF#Tw!o$sFBR03PIQ&Ln9i_a$6@sYf&DQX~=bJ<8DmAJg6$gz5k*>DNL))t>VhX zX(X7?3d2EVG6j=@NAj^BafN1$A-017M2hTUdIp@d;zxo$g;`PpCXK(dIJP874GF#p z_XQLc$mq?SfW{6Hwe9a9(;srxq8NiT6zU!dGaGx^RRg;}|N2dknNE(3A8(O*4~a97 zB-8uc&-FhRlNmV4XBQX|D^Z#NJEhCBI>Su+%c=kkFlE3IZR!FEFl5dSjN>YcTVO)_ zS*aq6#X=We5d3M|La*Xn3>@DeiB|h*-xNWrz>S&F$b~RK!BS84A2Y)c%Y{<#OQ5Oi7m_V?0liA;H_+%#-v*B00 zy=221hNCwu*>(x`ifH+HJAox4@jab`@GfU>`yO?erh;Go>MD-I)+g-j?0Cfu!jKrm zYf?+#kO&Dlr37CzSpQzKMnLzwjbU|R`ybd5kN^)3yV(PsrcdyzlLZG&B+Y(RoWEEB z#q-`qnPgwB<&dpGTPC6|nHzj$pXmoj)s#Ti4uQu`VZaehI8unugRDmk;4akAiFPH} zX+`WOI<4X~JP(Pr7+fPQjs@Sald=C+4nBoIGJpji^> zHCN|Vp5)1j-?wjH2O>o5y|F&V!Q)+GKb|(k3*LWL8KKMaBg3_gkcIq63*$Bmv>G^#gQ)rY zlK{sFlA(OirgIw~9G->2GAkCC&ksue3@^G>x|OwcOWzF0b7Tt4>l()oK_-Y}FMDRl zFWFWCS9M_nXtvg&(=~Nd`eK4`rTn}Hx1udRBr>KkYHkt^Fpw$WM6&-+pMhAP(gFR~ zGB8}hbAvyCeaI780$S9Yv|*??m0e)%p|{^Ukvn06b8m4P@wVui1fCk|ApnJHVN7ko zACHcJnOm&1O)ErT$Z<0};o?u?X@LL=g~^_9_5|A$byiJ2t(a~ITnP=vdJZ)jWD1V( zq3dNTXyf3B1s3LNFdX@8a@~%2R;YD; zh2i93F*p^bMRzknyu%2+T4TA)CKQ1rbR){(OrN}Bx=i28XCqK2x-1N5bO0T>UUh(Y zVFT0EHTLlBIQNUwI%vlNWiPK7?O<>S(oXPCswpcgqxr!phpCT8^MC`-#~23Y(hQ); zEqTa(lRN&%XQ0~=#c|{xI^qyTncp2|kOSBWCqHoY_XB+W{k^}RHTV3NZ1%qh3bw(w zL(qOQWh)iV^Jt)RksC=i^!nVS)5xFqiJ==3!u>^9KMGgrla3S*P zS0v8wzyXL{q66DXHZ8HT*diFdM`U&9BOS}~iV@VY#E7+6T z1`dO7-?X*s<8gs zjWQ?{+{>NaiZGbLhnrJc3anx?#9CAr);!c9^$lonS)|-bCzkyPKB%EbP(wstYIsE+ z_zBVD`T6`&*fTAFDTBm4dX>W~B7xZBG#%8gy7L-f?OL_ShPweAh$(<#on#lV0UIc8 zXmEoE@}(QjV8iOlhATP`pP$Pj2*K#@j4A4Wy$j57snx-}n85lC%E1j>9(1_+*<_mnASzBq?=BC|11Q_vv7dh;OLM@ z+klDT^rs-4=)p0-m#i~AMu3IUk3}Js28xyf2(!rE>RQ_K@mb0MjUfbk z7Px$k5LR}wj-tbB^P0HzNq@B^ z1e^$t|EKtCyVCk3JLo*>&|?vyImb<7A{lPHkzFkEEm|)vMk5(xr2X z_dYEo07vqul6IdQhN+)~4^XEicInb~ zu?>buci?J@+F-ELOfm?6&Qd(=!^N-jmFKiF%7fTOo4_~umUkLX{|W~oRG4gAvLmJg zXi7ZZ5>9U9!kJIPWNZ+j-yWVhrxUzZWe5jJ#VGWnAAtSWdn2b#;*1EX7?0Y+$yay- zw&@^MG-_q_(ri?o@PM(m|nR;Y7u&0Yj&T)PPr15kDdPWyUuhMfpHkb^gmQJlk|L>by98h_leZy6Y1du7g#l)hcRlw-%(<`6(J21E=hZem`$f^+3|PbTn9g zSZ8Jo8v$qYrRCaKO;2>xDsV z?7WUZUF%{H7bD;(3K3A<8rnQyH$&H9N(o*n5-oIH!a5XvidM#RBRf#6#tsV_EryE< z>a&SX7kxeXsr~eC@D5;QwV{iJ1Et;2jXtfJsF(46qBG-2XhZ~kcGC+TwFP%UgFNTZ ziGTP92|B zg<b++!zby5+!FU1uVX^06Ne#cbH5@rPb{Z-PE2sTiky@t7je zn3$1wQGsS3HD{2$9}-QZvOX`5VW^vO6bs z*SJo1i+r1Y&&c+PO86!Fp)pL(kSTBqP-bbVFC6(sDi#2v`TdqUNR57MZA@0b7NlAf zp2#C$#jyIQ(;zE9b&j5zY7GCghEUc=o9POC3((y$g{hoyF$-p998BSZm?Y(D7*Y4W z#?RO8i_0qA5<4Grc^Ml)Pwr|1SWlO^ry;nU-h7{?6=`H-!mA8ypxLz{I~$tVit}F; zDI`?Ng6dp=S_hM+ycUKQtOg}|7s<2E2^ZrO=JT1tkT3Z1GHgu}^X8{flt$yItuxbk zLnYI;fl`=pzgu!iIog!bErUn(!VEd62nU>A*7}VGwieibhCO!se>C^y;ZX1Y+uF}L z-_mK3rL>MVBto*LvW#qrv4zT(8AjO~TXoKRKSI)qdh*<0)r3X>3i z_ebC7`98nvdj5F+`CZrZ*Xd~b_{@8GE%)nw-LED&V>zjV$W03P-YJkHD)9S30M>m5s8-k0%@Dj5nC@g#z4JyQp?mT2g)XY{8TCaTC2 z=YXjG!BcqgMQbTEfVx1PQ{Y7ey-C;^0s>HG*w*n!-o^iX(`H_fV)M_1n$R%R)0h~I z37EbU*m2NwtKXNWi}UjG<^Xg;P6!xb&$WZX&F=-Ri~wcxo=%)Tk~QLqI@xGWeqp39 zb54nnknUC^%ce{U0a-wDt|EXH`2N z-q5R@+?4IC?*DGJt%B!-M$NqzW=hs`zUW%Q9-UYs=kw|RRv)J4xuRA}s@fX78rhCX z`JH!6tP+8`llBp86?j0RnU%Pi1YH$qO&4;lYGRApAOVyRw9tW}hXO9q9!~gMyCOy0 zBsrMJf-Wd*Pzl9!BEV?x;Efik=l7hUf5Pdi@V*q${Pt}1@CoG?H)e?2+Lw&ubvb2o z-*FUx2!1;B86#86$~1}U+|1DM3_bYvxSvP4o4A{VZZvTi2z?#MarKWpUV{5r z?Rt3q|60htSG-rYAVTo8>KaPeL_^C-YO+a5$Q!KA>KI{reg3)AD2a9BR}+14bJS0W zFnw`Z{tHpgCF%yLQ+LJy!eOKbWJ5W&ingiu*Yk}YB1|F?RXfIyvgT~`FDxfYKo80$ z2e6XBshmDVM)vxi5p@0M4P7Mi~KdA%kz(!Xz)CL%zhivP{|xQ{ptI&i|+H~ z_me*UwJ}V`Jo?Rr{0qmWHX4M9`s`nKg#XuX61t|^Z;UgvZkv)0%+p!OeJOc(wai{^ zF;nwhn^oIh%>PYaiZpNjriAwKaXpvF1gGKV+M$cXt}d6dd*Qq50>6zU`q!nU9s+V# zfQcs#gHNZ-biVkMFNVOr!(HVqKBC7?pHDQt4}6;MJEi{?XPZPO8ay6P1~~k4U*FTU zqiKIY!0@e1eHYs0;S=U-s+vSo9KJl)T)0wvLCLw0>BqptT@M!7U*Fr@+??r9UIsbr zyXYr16~1(^LQGOK$O<)ySP~41qqd#9WRz%zN79WO_fWYteDUIi#9n&hRY^4$JN;RN zXYs1OnUKJ_2d%g{p2DG)tM8p%Tn51TvvhOIz>n`geR@FL(JB1Mi4(UG_plKk+eED0 z%R{`gAzQPf>FbWSt#RW@zpw95OW(3t}%2h0Ae(Btq_(eOl zz!$$enK7^s#>?vJqZA4yl`?PBb{Uz5$LAMt5=6}#Z)q>+?(Vi=43Cr< zt4DRbD#<#NUyP`VL`KwONu^S`{XyF{UpwVAx3GU#@UPU#1)SV4|8iIY`vbf8tmWZx zflp9|YWwtTX8Cm>F}mpOyb6Pu1%(T=rf&-L9;xe2p8&LRYFAt|~EZfg23{Ru|aX z+M;64wvMLDQa_hctn>1hZ4z@!DRSrQ=I~7f-ukA;{+L5Y@#mGR z7yJZBAv1PM>?cMF5Om=Sp*f@qpCD~t{1YifN~SIU6D-A#e+`@WpXV+837G;`y>Rj; z@cRG!=<~nVBQpzqm&AE3x_dSm4r z)<0XLdnrqBb!(lb9g0>FJ>y)Xu&^*i_jkLw^mdyaJ9gkqQkU5d+J=ObefBFR1mU>O zaLPyhitVu4JLTjeTf8#kHG_-rx4@juY1L!hfctoUTBqOdXD6(RZutxWETT!Svkp(P7S_TR+ZqaBWh+)KEE zIL3Fd5r>(=>($f04YsoK@)Rp%ugam=5z|g@LLp!S|6apB$k;Stw1gBH)q&{h?zh)X zG~J9MojN1M4}`?lJa2OFoivP1Sm~WQD$bQ0yiCib>Y0= z=@=v0XD6K_T7yms80#%Ayk6L{6+EUt1pa=0`S8k?Zj98)klC5(cttlR7%lga)a2{> zPN1V&jQker#J)&Q-GG9$C`?XF|pF=4pz~_G!@_ z7;F(n>PMl79n(E;|DBBmyrqRoK{GgC&Xf#4FWRFxi%e^}R4&g@MuByRuG57Jc<2a} zhhw6nN#tMGMn?sxXN|`&nJc;7m~yb6sR$NKy6h($Xq)Wg=TSXv;Lc1rDNZC+z_RA_f#se4&K7T~^kJ zAWSGR#!i)sHZA`~e@^&Gt&kGTdr8L)u|v&wp#FX&0o399>`tdTTksFxlh-ENZdY}BUgz$6C zgMQpoZ=Uj1^&vQRJsSQU)kMoHqH+(E+xvY62xTu4IZ}NDnHs%-2I8Jq;jwrWBlJCl zUm$DTn(M#!~9wAf|i9=kP8XN68zGdf0!Gjs4(g~giNF<)#054K>k<|Qii)bk3n(xChGau9% zmrNUkC8xI!_}h;QAE8ig_y$*+YDyDha9A}^iTQ)CB6N;4T&Q$JfwlS=eVKBu!EM;G zS8TIdZ(4es#YmYE6&9_`TRKiDyC~UqOPqDuYc07d&fnV?Y&?Y$xiT}HlnaTpbKObC z_sPb_%1lC<-OSDA?Abz#CRijwhk-qNSONON>E<)&_v;ChevocnF&dSeOjq{o_?#;X z+F$4ND>WKVhCd5{E~iJ$cOY8u1F%3TuhggCjHXelq3Y9j+`zyfT)qN$XPax`vbDc&U|;I?SqQ` zzZjBJ0=_FL4qC@Gu5oQ`$F@{Cxw@{6t#(FWNt0!zr&sm{;hlu}N|vUk@BQs6A~$#% zr9iXjet`Vx z3e#S^h9;8Nb@;$7i3(i}`htp#B>)pN$wbQ)3yx0@q#hP;@!CFaHDus*gLEfPV zQ-FIAkDibO2tHD5{I)MBfz`{q*NIrX2Q__#U9r`~C%{**-ZY6WV76i>)E-Zg;$YFf ze=fIr;J?w?+4&xTVoE#Yisqge8=C-Uo&X_aD*Dck>Qau`9mU>3?vcIL>#yZNBxqy&|D!3Qey7kFesn*%EXLXrw@L-)@ixw@~s-)D| zqB-=wE7^gGLle<-cKJG$0G za-JB_s%z>7dR+Rdm1DbCI<@$(5$pbZhJZ>-Myi(OEOhI^6?3{#bPY9pINba?aR)!I z<_m;L@T|nmyqa04L~PJ|FPgd&#qmHL=WD!m1UbA-qQ8c^v{2+BGKb&i*WGf*ImcZ~ z(}OopliNZju0>2pqxa~KFXQ7Pjtk4qoJYVklA``-6AO zO_kx)Xz^J`9bUeC8QxCc%Oskc*}V%E~aZ3Sh%61qmVNm^eyV;55Rt> z)G?llzxPe4=;3(65fDuP5hS99W>9}p{xM(pPvwN#;f%A%S>m30Tg8u_8Ms$mgK@3{ z+;FvDrUL7xu(n5=FD~C;@1a@OPgoa0P~DiPAgyjZwnhf`+4by~4me)zBg&juV zaJ6pYVBx#6R=5r+GRKB%hHm!K8*qI*5M-svHmEke_Wfs+ariBwdbx~`2PP5x=lC97 zX#z0s&v5yc(!hc`20E@pn;93{I&d>O296bbfbkxT+IT_jRuCdN>O_JOG% zOX9jWn}Men-*gss=x#}gI=Q?f{Z3|Amy-q>>6xj7`hA|rmuKBxZfL?_rXmTpOwdFe z5RCTrB9wsy$jbEG3qQQebGr^hxQ6@|#gbc)$y=o4kY!(5qB$J0foui?SaKr+(1xI( zU~SZQemTsN;B)g)<`|BOd0<^YS?KViPr_N%LqGizaV2VWxI9nt#+DO^ z1E7=~os*l(8RX|XSFedceg@-@BV?VX7T%N(nxGXhvb>pDY~GS-iLcyG_F48Cd?39y zXTI~b$V3P%MMl?h6Wqd1qXhUgQU=T|we8Wvrpf7G3WJE}1mp1e7vh%)4dncLaf>>V zH%Hm7l1G?EthUc{M|y;xOH3svJ(x(+MwTilb;}usf+)u;_bYB6c0?l^GZnDZVWx4S z%8ABL{8NhxOv}X}RPG@;aR&M1B}LEOAAL*Pi7*|n+=mvS>m-piYp77Y8))IO6ciME z(Dm$w!Gt@vZ~tOzf+)XH8%#l~LdMI58h>`|ipaKBwRb`}!Bc)lH+SEDI}6ZhIz5lGHC^GMcD-VH*J zm}gvvdP}$O{Xq!W{$WvubHy7)Vza`N23MHx+4%rd587L-2^D4Y8zM5H)4ez1<1>+w zo0xUq-HRDKtH?0@X0P?s7E-Sy^d4Cubgu7m(`Q{5&VKr`MC4;{s-nK$u>G_nx2W}# zE?viH_v3#(FNAj6A+r~P;GiTMOTk08dV}?+w1k9yJ3~ICZN8P9=~G0$#h>_dauI*x ziqoyT=Fe7S@du4S4;ur0st>l<3_GRl{_Ykcp_WOdZ>T}P1wKeCNeuX)X)yqn^{-a> zY_=h4;>Dy4Xzub}Jx7^qo1}WcZbrn?XTT!_xM_UoyFE0n8?ET~VYIuAmT1Ph#+|Y% zWpHsfG5{>P5xBulzhgviPP&Yo*pqLapr^T#&5j(2!qV)@_&Djp90S0x*f&*oW3t+r zucy0y6G~k6QK>k}T6#+XL(e6`*d^wpTtUTA;@tne4n{>~e5!NSo|y-tR3Q0 zkF==F`Z=uN!AvzNsTY$6d@h+gAm-Xu-2Q;T%KIii`IasqlgV#@r)Gf(QEQWrBoXd? zOHra#5ol#3@)F^7zgYPpg`*TkYEJ4;Oibi7yCa>O{Ip@VPq1~vLl7!9li#AHBh!cm z-IB*iT%@Q^cRHAw9@iKiZaMbBtGp~NEFqs@^)q))2H-O*9PD@h5TqbERkd!qK&VQm z9c^#BKhzlAyCVw-wf3Qbg+kv&vzjAn2G$k|ES-3LPLv%p2pOCym)pWBPn;9|+Z(xJ zjQJVPuF&$&v9YnzK>q;I!JOtL`!8w0t5y!%d32)3r z?$athVBuLL4Do$(1MEE=!+~`;6|_z#SNNeZ$R<>8)bi`;zXCHIfTNM78GrolfXs%4 zGi%2jgB)fi_8vskD{ReKOukUW*qH2=-mQ#CGbfU>XU`sA40zE^l}*-bc@)W>FLcOK-L*j9iBc8l7uG9)QsWzM zn$a$k6@~B~8UK=r%xf%x3BK%?j~nG3JAhz7j|#E!vIi0Uc^@Q7o&_OmZb?W zve;)IUL)8IzR}91#R~kP%YD$^IB(&=)c!W@LN>dmxBmiG(H#DgM7FlJo&+nGY7_|m zBuB0Ps+jy!)$ScPuCCj62YC7pY3b_TcE*-83_s>^Up?&)^~9Z4L|{x7(VMpvO3|AI zi=`W8yoXPTiilXN<-y^c*a?5F4*h^0Q%!GFRz@D(NQV#aQST6;-zA@5a~9n#`K^i@nvl- z_h}_SwismHwVii#{xuECQiK-<408L`WcABcUzM z3il~z$UJaz%*`lKeX265MmlM9Jn8@25?^#r=M#im^A_BRJOW>))H z7f``)t3Z_csEy)PLc&5{WRr7kjTBg2T58zqVks(}?5EeegV0;(K`n$gyIfM$ zsWuQpmiQCsx23RJk!u2^nPS^At7>bNcEz$M~1AqoOLv}3p#IwaTYn*w_YQa#u8oTM3wzl?T z-+f4m$OZ-qOhZJuwFrbF}6Zv455zNM(AjPoF940q8N`Wkd&D z)1H0Eo;(hOK)V3(N&J8EQYECP3tt(3O$0O{N1)>r4gr=&5NT1HgvrkY2t@$L0egCc z%l}SI^*16K+KV(sk!aQ-kfi?p{(I=pERD zJbN$7y%}d(fpSsNufL)mFYSmF3Z3Z?nEQjaTC)vD6R;!AKIp4X{q2KG>a$NABt8M> zSAzrR4(iL`9`@EE=weHdw`yp#N5{tgQ?&2bUi@=iCa{KZ-=im8@H~o;Jqo?g2O!zT zjdDV*$-=cWROt6%+|VRWT%(wmbfJ>EYal&>GWWGAGhGdrJ+KlMQla_wztzD5>OnM# zNlKFB_mHB2V5Or>wR6`lO`6Gzmh#YY@IqD+kbO(BzvuJG5BC!2Z_$YIfWWj=xvPYP z5=$#NAJkgCX?b&qw$qtq_CouuIzpyA$Zx^sIN8R0Zf0YXi4q@bHN)(sRdi%+*GWjN zcb%Nh4jiWkLwIH2-NP-L#L-iYXKgCb-8NUQSg(gN)Khr>-T1Ka+P!phMD-`z6aT!H zkibIG62;DthjarDo*OH#3skuYtsV`)v6QF{`pCzLzdv;2%*MKYRd%qIX)3Vc2Q~MxG^crj*dVm>Vf}%JbE(pOwYzWhn{I2#9|7Ob&L-^IB@*Je*vr5$OHfY literal 0 HcmV?d00001 diff --git a/docs/articles/index.html b/docs/articles/index.html new file mode 100644 index 0000000..0828f76 --- /dev/null +++ b/docs/articles/index.html @@ -0,0 +1,76 @@ + +Articles • VoCC + + +

+
+ + + +
+
+ + +
+

All vignettes

+

+ +
VoCC
+
+
+
+
+ + +
+ +
+

Site built with pkgdown 2.1.3.

+
+ +
+ + + + + + + + diff --git a/docs/authors.html b/docs/authors.html new file mode 100644 index 0000000..e1b10ae --- /dev/null +++ b/docs/authors.html @@ -0,0 +1,114 @@ + +Authors and Citation • VoCC + + +
+
+ + + +
+
+
+ + + +
  • +

    Jorge Garcia Molinos. Author, maintainer. +

    +
  • +
  • +

    David S. Schoeman. Author. +

    +
  • +
  • +

    Christopher J. Brown. Author. +

    +
  • +
  • +

    Michael T. Burrows. Author. +

    +
  • +
  • +

    Naoki H. Kumagai. Contributor. +

    +
  • +
+
+
+

Citation

+ Source: DESCRIPTION +
+
+ + +

Garcia Molinos J, S. Schoeman D, J. Brown C, T. Burrows M (2025). +VoCC: The Velocity of Climate Change and related climatic metrics. +R package version 1.0.1, https://github.com/JorGarMol/VoCC. +

+
@Manual{,
+  title = {VoCC: The Velocity of Climate Change and related climatic metrics},
+  author = {Jorge {Garcia Molinos} and David {S. Schoeman} and Christopher {J. Brown} and Michael {T. Burrows}},
+  year = {2025},
+  note = {R package version 1.0.1},
+  url = {https://github.com/JorGarMol/VoCC},
+}
+ +
+ +
+ + + +
+ +
+

Site built with pkgdown 2.1.3.

+
+ +
+ + + + + + + + diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css new file mode 100644 index 0000000..5a85941 --- /dev/null +++ b/docs/bootstrap-toc.css @@ -0,0 +1,60 @@ +/*! + * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ + +/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ + +/* All levels of nav */ +nav[data-toggle='toc'] .nav > li > a { + display: block; + padding: 4px 20px; + font-size: 13px; + font-weight: 500; + color: #767676; +} +nav[data-toggle='toc'] .nav > li > a:hover, +nav[data-toggle='toc'] .nav > li > a:focus { + padding-left: 19px; + color: #563d7c; + text-decoration: none; + background-color: transparent; + border-left: 1px solid #563d7c; +} +nav[data-toggle='toc'] .nav > .active > a, +nav[data-toggle='toc'] .nav > .active:hover > a, +nav[data-toggle='toc'] .nav > .active:focus > a { + padding-left: 18px; + font-weight: bold; + color: #563d7c; + background-color: transparent; + border-left: 2px solid #563d7c; +} + +/* Nav: second level (shown on .active) */ +nav[data-toggle='toc'] .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} +nav[data-toggle='toc'] .nav .nav > li > a { + padding-top: 1px; + padding-bottom: 1px; + padding-left: 30px; + font-size: 12px; + font-weight: normal; +} +nav[data-toggle='toc'] .nav .nav > li > a:hover, +nav[data-toggle='toc'] .nav .nav > li > a:focus { + padding-left: 29px; +} +nav[data-toggle='toc'] .nav .nav > .active > a, +nav[data-toggle='toc'] .nav .nav > .active:hover > a, +nav[data-toggle='toc'] .nav .nav > .active:focus > a { + padding-left: 28px; + font-weight: 500; +} + +/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ +nav[data-toggle='toc'] .nav > .active > ul { + display: block; +} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js new file mode 100644 index 0000000..1cdd573 --- /dev/null +++ b/docs/bootstrap-toc.js @@ -0,0 +1,159 @@ +/*! + * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) + * Copyright 2015 Aidan Feldman + * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ +(function() { + 'use strict'; + + window.Toc = { + helpers: { + // return all matching elements in the set, or their descendants + findOrFilter: function($el, selector) { + // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ + // http://stackoverflow.com/a/12731439/358804 + var $descendants = $el.find(selector); + return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); + }, + + generateUniqueIdBase: function(el) { + var text = $(el).text(); + var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); + return anchor || el.tagName.toLowerCase(); + }, + + generateUniqueId: function(el) { + var anchorBase = this.generateUniqueIdBase(el); + for (var i = 0; ; i++) { + var anchor = anchorBase; + if (i > 0) { + // add suffix + anchor += '-' + i; + } + // check if ID already exists + if (!document.getElementById(anchor)) { + return anchor; + } + } + }, + + generateAnchor: function(el) { + if (el.id) { + return el.id; + } else { + var anchor = this.generateUniqueId(el); + el.id = anchor; + return anchor; + } + }, + + createNavList: function() { + return $(''); + }, + + createChildNavList: function($parent) { + var $childList = this.createNavList(); + $parent.append($childList); + return $childList; + }, + + generateNavEl: function(anchor, text) { + var $a = $(''); + $a.attr('href', '#' + anchor); + $a.text(text); + var $li = $('
  • '); + $li.append($a); + return $li; + }, + + generateNavItem: function(headingEl) { + var anchor = this.generateAnchor(headingEl); + var $heading = $(headingEl); + var text = $heading.data('toc-text') || $heading.text(); + return this.generateNavEl(anchor, text); + }, + + // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). + getTopLevel: function($scope) { + for (var i = 1; i <= 6; i++) { + var $headings = this.findOrFilter($scope, 'h' + i); + if ($headings.length > 1) { + return i; + } + } + + return 1; + }, + + // returns the elements for the top level, and the next below it + getHeadings: function($scope, topLevel) { + var topSelector = 'h' + topLevel; + + var secondaryLevel = topLevel + 1; + var secondarySelector = 'h' + secondaryLevel; + + return this.findOrFilter($scope, topSelector + ',' + secondarySelector); + }, + + getNavLevel: function(el) { + return parseInt(el.tagName.charAt(1), 10); + }, + + populateNav: function($topContext, topLevel, $headings) { + var $context = $topContext; + var $prevNav; + + var helpers = this; + $headings.each(function(i, el) { + var $newNav = helpers.generateNavItem(el); + var navLevel = helpers.getNavLevel(el); + + // determine the proper $context + if (navLevel === topLevel) { + // use top level + $context = $topContext; + } else if ($prevNav && $context === $topContext) { + // create a new level of the tree and switch to it + $context = helpers.createChildNavList($prevNav); + } // else use the current $context + + $context.append($newNav); + + $prevNav = $newNav; + }); + }, + + parseOps: function(arg) { + var opts; + if (arg.jquery) { + opts = { + $nav: arg + }; + } else { + opts = arg; + } + opts.$scope = opts.$scope || $(document.body); + return opts; + } + }, + + // accepts a jQuery object, or an options object + init: function(opts) { + opts = this.helpers.parseOps(opts); + + // ensure that the data attribute is in place for styling + opts.$nav.attr('data-toggle', 'toc'); + + var $topContext = this.helpers.createChildNavList(opts.$nav); + var topLevel = this.helpers.getTopLevel(opts.$scope); + var $headings = this.helpers.getHeadings(opts.$scope, topLevel); + this.helpers.populateNav($topContext, topLevel, $headings); + } + }; + + $(function() { + $('nav[data-toggle="toc"]').each(function(i, el) { + var $nav = $(el); + Toc.init($nav); + }); + }); +})(); diff --git a/docs/docsearch.css b/docs/docsearch.css new file mode 100644 index 0000000..e5f1fe1 --- /dev/null +++ b/docs/docsearch.css @@ -0,0 +1,148 @@ +/* Docsearch -------------------------------------------------------------- */ +/* + Source: https://github.com/algolia/docsearch/ + License: MIT +*/ + +.algolia-autocomplete { + display: block; + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1 +} + +.algolia-autocomplete .ds-dropdown-menu { + width: 100%; + min-width: none; + max-width: none; + padding: .75rem 0; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .1); + box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); +} + +@media (min-width:768px) { + .algolia-autocomplete .ds-dropdown-menu { + width: 175% + } +} + +.algolia-autocomplete .ds-dropdown-menu::before { + display: none +} + +.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { + padding: 0; + background-color: rgb(255,255,255); + border: 0; + max-height: 80vh; +} + +.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { + margin-top: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion { + padding: 0; + overflow: visible +} + +.algolia-autocomplete .algolia-docsearch-suggestion--category-header { + padding: .125rem 1rem; + margin-top: 0; + font-size: 1.3em; + font-weight: 500; + color: #00008B; + border-bottom: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { + float: none; + padding-top: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { + float: none; + width: auto; + padding: 0; + text-align: left +} + +.algolia-autocomplete .algolia-docsearch-suggestion--content { + float: none; + width: auto; + padding: 0 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--content::before { + display: none +} + +.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { + padding-top: .75rem; + margin-top: .75rem; + border-top: 1px solid rgba(0, 0, 0, .1) +} + +.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { + display: block; + padding: .1rem 1rem; + margin-bottom: 0.1; + font-size: 1.0em; + font-weight: 400 + /* display: none */ +} + +.algolia-autocomplete .algolia-docsearch-suggestion--title { + display: block; + padding: .25rem 1rem; + margin-bottom: 0; + font-size: 0.9em; + font-weight: 400 +} + +.algolia-autocomplete .algolia-docsearch-suggestion--text { + padding: 0 1rem .5rem; + margin-top: -.25rem; + font-size: 0.8em; + font-weight: 400; + line-height: 1.25 +} + +.algolia-autocomplete .algolia-docsearch-footer { + width: 110px; + height: 20px; + z-index: 3; + margin-top: 10.66667px; + float: right; + font-size: 0; + line-height: 0; +} + +.algolia-autocomplete .algolia-docsearch-footer--logo { + background-image: url("data:image/svg+xml;utf8,"); + background-repeat: no-repeat; + background-position: 50%; + background-size: 100%; + overflow: hidden; + text-indent: -9000px; + width: 100%; + height: 100%; + display: block; + transform: translate(-8px); +} + +.algolia-autocomplete .algolia-docsearch-suggestion--highlight { + color: #FF8C00; + background: rgba(232, 189, 54, 0.1) +} + + +.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { + box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) +} + +.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { + background-color: rgba(192, 192, 192, .15) +} diff --git a/docs/docsearch.js b/docs/docsearch.js new file mode 100644 index 0000000..b35504c --- /dev/null +++ b/docs/docsearch.js @@ -0,0 +1,85 @@ +$(function() { + + // register a handler to move the focus to the search bar + // upon pressing shift + "/" (i.e. "?") + $(document).on('keydown', function(e) { + if (e.shiftKey && e.keyCode == 191) { + e.preventDefault(); + $("#search-input").focus(); + } + }); + + $(document).ready(function() { + // do keyword highlighting + /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ + var mark = function() { + + var referrer = document.URL ; + var paramKey = "q" ; + + if (referrer.indexOf("?") !== -1) { + var qs = referrer.substr(referrer.indexOf('?') + 1); + var qs_noanchor = qs.split('#')[0]; + var qsa = qs_noanchor.split('&'); + var keyword = ""; + + for (var i = 0; i < qsa.length; i++) { + var currentParam = qsa[i].split('='); + + if (currentParam.length !== 2) { + continue; + } + + if (currentParam[0] == paramKey) { + keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); + } + } + + if (keyword !== "") { + $(".contents").unmark({ + done: function() { + $(".contents").mark(keyword); + } + }); + } + } + }; + + mark(); + }); +}); + +/* Search term highlighting ------------------------------*/ + +function matchedWords(hit) { + var words = []; + + var hierarchy = hit._highlightResult.hierarchy; + // loop to fetch from lvl0, lvl1, etc. + for (var idx in hierarchy) { + words = words.concat(hierarchy[idx].matchedWords); + } + + var content = hit._highlightResult.content; + if (content) { + words = words.concat(content.matchedWords); + } + + // return unique words + var words_uniq = [...new Set(words)]; + return words_uniq; +} + +function updateHitURL(hit) { + + var words = matchedWords(hit); + var url = ""; + + if (hit.anchor) { + url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; + } else { + url = hit.url + '?q=' + escape(words.join(" ")); + } + + return url; +} diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..fb9d291 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,163 @@ + + + + + + + +The Velocity of Climate Change and related climatic metrics • VoCC + + + + + + + + + + + + +
    +
    + + + + +
    +
    +
    + + + +

    Jorge Garcia Molinos et al. 18 July 2019

    +

    This package is now in release version (v 1.0.0). Please contact me for questions or feed-back.

    +
    +

    Installation +

    +

    You can install the development version of VoCC from GitHub with:

    +
    +# install.packages("devtools")
    +devtools::install_github("JorGarMol/VoCC")
    +
    +
    +

    Example +

    +
    +
    +

    Citation +

    +

    To cite the package itself please use:

    +
    +

    García Molinos, J., Schoeman, D. S., Brown, C. J. and Burrows, M. T. (2019). VoCC: The Velocity of Climate Change and related climatic metrics. R package version 1.0.0. https://doi.org/10.5281/zenodo.3382092

    +
    +

    The following paper explains the package functionality and provides the examples covered by the code in the package vignette

    +
    +

    García Molinos, J., Schoeman, D. S., Brown, C. J. and Burrows, M. T. (2019), VoCC: An R package for calculating the velocity of climate change and related climatic metrics. Methods Ecol Evol. doi:10.1111/2041-210X.13295

    +
    +
    +
    +
    + + +
    + + +
    + +
    +

    +

    Site built with pkgdown 2.1.3.

    +
    + +
    +
    + + + + + + + + diff --git a/docs/link.svg b/docs/link.svg new file mode 100644 index 0000000..88ad827 --- /dev/null +++ b/docs/link.svg @@ -0,0 +1,12 @@ + + + + + + diff --git a/docs/pkgdown.css b/docs/pkgdown.css new file mode 100644 index 0000000..80ea5b8 --- /dev/null +++ b/docs/pkgdown.css @@ -0,0 +1,384 @@ +/* Sticky footer */ + +/** + * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ + * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css + * + * .Site -> body > .container + * .Site-content -> body > .container .row + * .footer -> footer + * + * Key idea seems to be to ensure that .container and __all its parents__ + * have height set to 100% + * + */ + +html, body { + height: 100%; +} + +body { + position: relative; +} + +body > .container { + display: flex; + height: 100%; + flex-direction: column; +} + +body > .container .row { + flex: 1 0 auto; +} + +footer { + margin-top: 45px; + padding: 35px 0 36px; + border-top: 1px solid #e5e5e5; + color: #666; + display: flex; + flex-shrink: 0; +} +footer p { + margin-bottom: 0; +} +footer div { + flex: 1; +} +footer .pkgdown { + text-align: right; +} +footer p { + margin-bottom: 0; +} + +img.icon { + float: right; +} + +/* Ensure in-page images don't run outside their container */ +.contents img { + max-width: 100%; + height: auto; +} + +/* Fix bug in bootstrap (only seen in firefox) */ +summary { + display: list-item; +} + +/* Typographic tweaking ---------------------------------*/ + +.contents .page-header { + margin-top: calc(-60px + 1em); +} + +dd { + margin-left: 3em; +} + +/* Section anchors ---------------------------------*/ + +a.anchor { + display: none; + margin-left: 5px; + width: 20px; + height: 20px; + + background-image: url(./link.svg); + background-repeat: no-repeat; + background-size: 20px 20px; + background-position: center center; +} + +h1:hover .anchor, +h2:hover .anchor, +h3:hover .anchor, +h4:hover .anchor, +h5:hover .anchor, +h6:hover .anchor { + display: inline-block; +} + +/* Fixes for fixed navbar --------------------------*/ + +.contents h1, .contents h2, .contents h3, .contents h4 { + padding-top: 60px; + margin-top: -40px; +} + +/* Navbar submenu --------------------------*/ + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu>.dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover>.dropdown-menu { + display: block; +} + +.dropdown-submenu>a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} + +.dropdown-submenu:hover>a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left>.dropdown-menu { + left: -100%; + margin-left: 10px; + border-radius: 6px 0 6px 6px; +} + +/* Sidebar --------------------------*/ + +#pkgdown-sidebar { + margin-top: 30px; + position: -webkit-sticky; + position: sticky; + top: 70px; +} + +#pkgdown-sidebar h2 { + font-size: 1.5em; + margin-top: 1em; +} + +#pkgdown-sidebar h2:first-child { + margin-top: 0; +} + +#pkgdown-sidebar .list-unstyled li { + margin-bottom: 0.5em; +} + +/* bootstrap-toc tweaks ------------------------------------------------------*/ + +/* All levels of nav */ + +nav[data-toggle='toc'] .nav > li > a { + padding: 4px 20px 4px 6px; + font-size: 1.5rem; + font-weight: 400; + color: inherit; +} + +nav[data-toggle='toc'] .nav > li > a:hover, +nav[data-toggle='toc'] .nav > li > a:focus { + padding-left: 5px; + color: inherit; + border-left: 1px solid #878787; +} + +nav[data-toggle='toc'] .nav > .active > a, +nav[data-toggle='toc'] .nav > .active:hover > a, +nav[data-toggle='toc'] .nav > .active:focus > a { + padding-left: 5px; + font-size: 1.5rem; + font-weight: 400; + color: inherit; + border-left: 2px solid #878787; +} + +/* Nav: second level (shown on .active) */ + +nav[data-toggle='toc'] .nav .nav { + display: none; /* Hide by default, but at >768px, show it */ + padding-bottom: 10px; +} + +nav[data-toggle='toc'] .nav .nav > li > a { + padding-left: 16px; + font-size: 1.35rem; +} + +nav[data-toggle='toc'] .nav .nav > li > a:hover, +nav[data-toggle='toc'] .nav .nav > li > a:focus { + padding-left: 15px; +} + +nav[data-toggle='toc'] .nav .nav > .active > a, +nav[data-toggle='toc'] .nav .nav > .active:hover > a, +nav[data-toggle='toc'] .nav .nav > .active:focus > a { + padding-left: 15px; + font-weight: 500; + font-size: 1.35rem; +} + +/* orcid ------------------------------------------------------------------- */ + +.orcid { + font-size: 16px; + color: #A6CE39; + /* margins are required by official ORCID trademark and display guidelines */ + margin-left:4px; + margin-right:4px; + vertical-align: middle; +} + +/* Reference index & topics ----------------------------------------------- */ + +.ref-index th {font-weight: normal;} + +.ref-index td {vertical-align: top; min-width: 100px} +.ref-index .icon {width: 40px;} +.ref-index .alias {width: 40%;} +.ref-index-icons .alias {width: calc(40% - 40px);} +.ref-index .title {width: 60%;} + +.ref-arguments th {text-align: right; padding-right: 10px;} +.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} +.ref-arguments .name {width: 20%;} +.ref-arguments .desc {width: 80%;} + +/* Nice scrolling for wide elements --------------------------------------- */ + +table { + display: block; + overflow: auto; +} + +/* Syntax highlighting ---------------------------------------------------- */ + +pre, code, pre code { + background-color: #f8f8f8; + color: #333; +} +pre, pre code { + white-space: pre-wrap; + word-break: break-all; + overflow-wrap: break-word; +} + +pre { + border: 1px solid #eee; +} + +pre .img, pre .r-plt { + margin: 5px 0; +} + +pre .img img, pre .r-plt img { + background-color: #fff; +} + +code a, pre a { + color: #375f84; +} + +a.sourceLine:hover { + text-decoration: none; +} + +.fl {color: #1514b5;} +.fu {color: #000000;} /* function */ +.ch,.st {color: #036a07;} /* string */ +.kw {color: #264D66;} /* keyword */ +.co {color: #888888;} /* comment */ + +.error {font-weight: bolder;} +.warning {font-weight: bolder;} + +/* Clipboard --------------------------*/ + +.hasCopyButton { + position: relative; +} + +.btn-copy-ex { + position: absolute; + right: 0; + top: 0; + visibility: hidden; +} + +.hasCopyButton:hover button.btn-copy-ex { + visibility: visible; +} + +/* headroom.js ------------------------ */ + +.headroom { + will-change: transform; + transition: transform 200ms linear; +} +.headroom--pinned { + transform: translateY(0%); +} +.headroom--unpinned { + transform: translateY(-100%); +} + +/* mark.js ----------------------------*/ + +mark { + background-color: rgba(255, 255, 51, 0.5); + border-bottom: 2px solid rgba(255, 153, 51, 0.3); + padding: 1px; +} + +/* vertical spacing after htmlwidgets */ +.html-widget { + margin-bottom: 10px; +} + +/* fontawesome ------------------------ */ + +.fab { + font-family: "Font Awesome 5 Brands" !important; +} + +/* don't display links in code chunks when printing */ +/* source: https://stackoverflow.com/a/10781533 */ +@media print { + code a:link:after, code a:visited:after { + content: ""; + } +} + +/* Section anchors --------------------------------- + Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 +*/ + +div.csl-bib-body { } +div.csl-entry { + clear: both; +} +.hanging-indent div.csl-entry { + margin-left:2em; + text-indent:-2em; +} +div.csl-left-margin { + min-width:2em; + float:left; +} +div.csl-right-inline { + margin-left:2em; + padding-left:1em; +} +div.csl-indent { + margin-left: 2em; +} diff --git a/docs/pkgdown.js b/docs/pkgdown.js new file mode 100644 index 0000000..6f0eee4 --- /dev/null +++ b/docs/pkgdown.js @@ -0,0 +1,108 @@ +/* http://gregfranko.com/blog/jquery-best-practices/ */ +(function($) { + $(function() { + + $('.navbar-fixed-top').headroom(); + + $('body').css('padding-top', $('.navbar').height() + 10); + $(window).resize(function(){ + $('body').css('padding-top', $('.navbar').height() + 10); + }); + + $('[data-toggle="tooltip"]').tooltip(); + + var cur_path = paths(location.pathname); + var links = $("#navbar ul li a"); + var max_length = -1; + var pos = -1; + for (var i = 0; i < links.length; i++) { + if (links[i].getAttribute("href") === "#") + continue; + // Ignore external links + if (links[i].host !== location.host) + continue; + + var nav_path = paths(links[i].pathname); + + var length = prefix_length(nav_path, cur_path); + if (length > max_length) { + max_length = length; + pos = i; + } + } + + // Add class to parent
  • , and enclosing
  • if in dropdown + if (pos >= 0) { + var menu_anchor = $(links[pos]); + menu_anchor.parent().addClass("active"); + menu_anchor.closest("li.dropdown").addClass("active"); + } + }); + + function paths(pathname) { + var pieces = pathname.split("/"); + pieces.shift(); // always starts with / + + var end = pieces[pieces.length - 1]; + if (end === "index.html" || end === "") + pieces.pop(); + return(pieces); + } + + // Returns -1 if not found + function prefix_length(needle, haystack) { + if (needle.length > haystack.length) + return(-1); + + // Special case for length-0 haystack, since for loop won't run + if (haystack.length === 0) { + return(needle.length === 0 ? 0 : -1); + } + + for (var i = 0; i < haystack.length; i++) { + if (needle[i] != haystack[i]) + return(i); + } + + return(haystack.length); + } + + /* Clipboard --------------------------*/ + + function changeTooltipMessage(element, msg) { + var tooltipOriginalTitle=element.getAttribute('data-original-title'); + element.setAttribute('data-original-title', msg); + $(element).tooltip('show'); + element.setAttribute('data-original-title', tooltipOriginalTitle); + } + + if(ClipboardJS.isSupported()) { + $(document).ready(function() { + var copyButton = ""; + + $("div.sourceCode").addClass("hasCopyButton"); + + // Insert copy buttons: + $(copyButton).prependTo(".hasCopyButton"); + + // Initialize tooltips: + $('.btn-copy-ex').tooltip({container: 'body'}); + + // Initialize clipboard: + var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { + text: function(trigger) { + return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); + } + }); + + clipboardBtnCopies.on('success', function(e) { + changeTooltipMessage(e.trigger, 'Copied!'); + e.clearSelection(); + }); + + clipboardBtnCopies.on('error', function() { + changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); + }); + }); + } +})(window.jQuery || window.$) diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml new file mode 100644 index 0000000..44eb1cd --- /dev/null +++ b/docs/pkgdown.yml @@ -0,0 +1,6 @@ +pandoc: 3.7.0.2 +pkgdown: 2.1.3 +pkgdown_sha: ~ +articles: + VoCC: VoCC.html +last_built: 2025-08-27T06:12Z diff --git a/docs/reference/EEZ.html b/docs/reference/EEZ.html new file mode 100644 index 0000000..1d253de --- /dev/null +++ b/docs/reference/EEZ.html @@ -0,0 +1,90 @@ + +Icelandic Exclusive Economic Zone (EEZ) — EEZ • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Icelandic Exclusive Economic Zone (v10).

    +
    + + +
    +

    Format

    +

    A spatial polygon data frame containing the Icenalndic EEZ +(200 NM).

    +
    +
    +

    Source

    +

    Marineregions.org +http://www.marineregions.org/downloads.php

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/HSST.html b/docs/reference/HSST.html new file mode 100644 index 0000000..9d2add4 --- /dev/null +++ b/docs/reference/HSST.html @@ -0,0 +1,94 @@ + +Monthly mean sea surface temperatures (SST) around Iceland for 1955-2010 — HSST • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Monthly mean sea surface temperatures (SST) around Iceland for 1955-2010

    +
    + + +
    +

    Format

    +

    A raster stack with 672 layers containing mean monthly SSTs (C) +at 1-deg resolution for the period Jan 1955 to Dec 2010 for the Atlantic waters surrounding Iceland.

    +
    +
    +

    Source

    +

    Hadley Centre data set HadISST 1.1 (data accessed May 2018).

    +
    +
    +

    References

    +

    Rayner et al. 2003. Global analyses of sea +surface temperature, sea ice, and night marine air temperature since the late nineteenth century. J. Geophys. Res.Vol. 108: 4407.

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/JapTC.html b/docs/reference/JapTC.html new file mode 100644 index 0000000..125bc92 --- /dev/null +++ b/docs/reference/JapTC.html @@ -0,0 +1,101 @@ + +Multivariate Terraclimate data for Japan — JapTC • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Historical (1960-1969) and present (2008-2017) multivariate 1/24 +Terraclimate data set (Abatzoglou et al. 2018), extracted for the Japanese +archipelago and including 3 variables: mean annual monthly precipitation (mm), +maximum and minimum temperatures (C).

    +
    + + +
    +

    Format

    +

    A raster stack with 9 layers for the historical (1960-1969) and current (2008-2017) +average (AnMn) and standard deviation (AnMnSD) of the mean annual (AnMn) precipitation (Ppr), +maximum (Tmax) and minimum (Tmin) temperature.

    +
    +
    +

    Source

    +

    Terraclimate data set.

    +
    +
    +

    References

    +

    Abatzoglou et al. 2018. Terraclimate, a high-resolution global +dataset of monthly climate and climatic water balance from 1958-2015, Scientific Data, 5: 170191

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/angulo.html b/docs/reference/angulo.html new file mode 100644 index 0000000..95b8a11 --- /dev/null +++ b/docs/reference/angulo.html @@ -0,0 +1,100 @@ + +Internal. Angle associated to the spatial gradient — angulo • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Internal. Angle associated to the spatial gradient

    +
    + +
    +
    angulo(dx, dy)
    +
    + +
    +

    Arguments

    + + +
    dx
    +

    numeric giving the longitudinal gradient component

    + + +
    dy
    +

    numeric giving the latitudinal gradient component

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos and David S. Schoeman +angulo()

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/climPCA.html b/docs/reference/climPCA.html new file mode 100644 index 0000000..6bd21bd --- /dev/null +++ b/docs/reference/climPCA.html @@ -0,0 +1,150 @@ + +Reduce dimensionality of climate predictors via Principal Component Analysis — climPCA • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to extract the first n principal components explaining a predefined total amount of variance among climatic variables. +These components can subsequently be used as synthetic climatic variables to reduce dimensionality in climate-analogue methods.

    +
    + +
    +
    climPCA(
    +  climp,
    +  climf,
    +  trans = function(x) log(x),
    +  cen = TRUE,
    +  sc = TRUE,
    +  th = 0.8
    +)
    +
    + +
    +

    Arguments

    + + +
    climp
    +

    raster.stack with one layer for each climatic variable with the values for present or baseline conditions.

    + + +
    climf
    +

    raster.stack with one layer for each climatic variable with the values for future conditions.

    + + +
    trans
    +

    function specifying the type of transformation to be applied prior to the PCA. +Specify NA where no transformation is required (default log(x)).

    + + +
    cen
    +

    logical should the variables be centered prior to the PCA? (default TRUE).

    + + +
    sc
    +

    logical should the variables be scaled prior to the PCA? (default TRUE).

    + + +
    th
    +

    numeric threshold giving the minimum amount of total variance that should be explained by the principal components extracted.

    + +
    +
    +

    Value

    +

    a list containing (i) the output from the PCA (call to 'prcomp'), and +(ii) a table with the present/future cell values for the principal components accounting +for the specified percentage of total variance (th).

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +JapTC <- VoCC_get_data("JapTC.tif")
    +
    +comp <- climPCA(JapTC[[c(1, 3, 5)]], JapTC[[c(2, 4, 6)]],
    +                trans = NA, cen = TRUE, sc = TRUE, th = 0.85)
    +summary(comp[[1]]) # first two components explain >90% of variance
    +# Create a data frame with the necessary variables in the required order (see climAna? for details)
    +clim <- comp[[2]][, c(2, 4, 3, 5, 1)]
    +clim[, c("x", "y")] <- terra::xyFromCell(JapTC[[1]], clim$cid)
    +} # }
    +
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/climPlot.html b/docs/reference/climPlot.html new file mode 100644 index 0000000..5c13c9b --- /dev/null +++ b/docs/reference/climPlot.html @@ -0,0 +1,146 @@ + +Binned scatter plot for 2-dimensional climate space — climPlot • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to create a binned scatter plot of two climate variables.

    +
    + +
    +
    climPlot(xy, x.binSize, y.binSize, x.name = "V1", y.name = "V2")
    +
    + +
    +

    Arguments

    + + +
    xy
    +

    data.frame with cells as rows and 4 columns representing the present and future local values for the two variables (V1p, V1f, V2p, V2f).

    + + +
    x.binSize
    +

    numeric the bin size for the first variable.

    + + +
    y.binSize
    +

    numeric the bin size for the second variable.

    + + +
    x.name
    +

    character the variable name for the first variable. Used to label the plot.

    + + +
    y.name
    +

    character the variable name for the second variable. Used to label the plot.

    + +
    +
    +

    Value

    +

    A series of plot objects displaying the (i) present and (ii) future +cell frequency for each combination of local climates, +and (iii) the location of remnant, novel and disappearing climates between both periods.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos and Naoki H. Kumagai

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +JapTC <- VoCC_get_data("JapTC.tif")
    +
    +# Plot climate space for the two first variables(annual precipitation and maximum temperature)
    +xy <- stats::na.omit(data.frame(
    +  terra::values(JapTC[[1]]),
    +  terra::values(JapTC[[2]]),
    +  terra::values(JapTC[[3]]), terra::values(JapTC[[4]])
    +))
    +
    +out <- climPlot(xy,
    +  x.binSize = 5, y.binSize = 0.2, x.name = "Precipitation (mm)",
    +  y.name = "Temperature max (°C)"
    +)
    +
    +# output plots can be saved as:
    +ggplot2::ggsave(
    +  plot = out, filename = file.path(getwd(), "example_plot.pdf"),
    +  width = 17, height = 17, unit = "cm"
    +)
    +} # }
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/dVoCC.html b/docs/reference/dVoCC.html new file mode 100644 index 0000000..582301e --- /dev/null +++ b/docs/reference/dVoCC.html @@ -0,0 +1,209 @@ + +Distance-based velocity based on geographically closest climate analogue — dVoCC • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to calculate the geographically closest climate analogues and related distance-based velocity. Cell analogues +are identified by comparing the baseline climatic conditions at each focal cell with those existing for all +other (target) cells in the future by reference to a specified climatic threshold. The function allows for the +specification of search distances and incorporates both least-cost path and Great Circle (as-the-crow-flies) distances.

    +
    + +
    +
    dVoCC(
    +  clim,
    +  n,
    +  tdiff,
    +  method = "Single",
    +  climTol,
    +  geoTol,
    +  distfun = "GreatCircle",
    +  trans = NA,
    +  lonlat = TRUE
    +)
    +
    + +
    +

    Arguments

    + + +
    clim
    +

    data.frame with the value for the climatic parameters (columns) by cell (rows), arranged as follows (see examples below): +The first 2n columns must contain the present and future values for each of the n climatic variables (V1p, V1f, V2p, V2f,...). +Where cell-specific analogue thresholds (see "variable" in "method" below) are to be calculated, the next (2n+1:3n) columns +should contain the standard deviation (or any other measure of climatic variability) of each variable for the baseline period. +These columns are not required if using the "Single" method. The last three columns of the table should contain an identifyier and centroid coordinates of each cell.

    + + +
    n
    +

    integer defining the number of climatic variables.

    + + +
    tdiff
    +

    integer defining the number of years (or other temporal unit) between periods.

    + + +
    method
    +

    ch)aracter string specifying the analogue method to be used. 'Single': a constant, single analogue threshold +for each climate variable is applied to all cells (Ohlemuller et al. 2006, Hamann et al. 2015); climate analogy corresponds to target cells +with values below the specified threshold for each climatic variable. 'Variable': a cell-specific climate threshold is used for each climatic variable +to determine the climate analogues associated with each cell by reference to its baseline climatic variability (Garcia Molinos et al. 2017).

    + + +
    climTol
    +

    numeric a vector of length n giving the tolerance threshold defining climate analogue conditions for each climatic variable. +If a cell-specific threshold is being used, this function parameter should be passed as NA.

    + + +
    geoTol
    +

    integer impose a geographical distance threshold (in km for lat/lon or map units if projected). +If used, the pool of potential climate analogues will be limited to cells within that distance from the focal cell.

    + + +
    distfun
    +

    character string specifying the function to be used for estimating distances +between focal and target cells. Either 'Euclidean', 'GreatCircle' (Great Circle Distances). +'LeastCost' (Least Cost Path Distances) is NOT CURRENTLY IMPLEMENTED. LeastCost requires a transition matrix supplied to the function via de 'trans' argument.

    + + +
    trans
    +

    TransitionLayer NOT CURRENTLY IMPLEMENTED gdistance object to be used for the analogue search if distfun = 'LeastCost'.

    + + +
    lonlat
    +

    logical is the analysis to be done in unprojected (lon/lat) coordinates?

    + +
    +
    +

    Value

    +

    A data.frame containing the cell id of the future analogue for each focal cell (NA = no analogue available), +together with the climatic ("climDis") and geographical ("geoDis") distances in input units, +the bearing ("ang", degrees North), and resulting climate velocity ("vel", km/yr). Mean climatic distances are returned for multivariate analogues.

    +
    +
    +

    References

    +

    Ohlemuller et al. 2006. Towards European climate risk surfaces: the extent and distribution of analogous and non-analogous climates 1931-2100. Global Ecology and Biogeography, 15, 395-405.
    Hamann et al. 2015. Velocity of climate change algorithms for guiding conservation and management. Global Change Biology, 21, 997-1004.
    Garcia Molinos et al. 2017. Improving the interpretability of climate landscape metrics: An ecological risk analysis of Japan's Marine Protected Areas. Global Change Biology, 23, 4440-4452.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +JapTC <- VoCC_get_data("JapTC.tif")
    +
    +# Create a data frame with the necessary variables in the required order
    +clim <- stats::na.omit(data.frame(terra::values(JapTC), cid = 1:terra::ncell(JapTC)))
    +clim[, c("x", "y")] <- terra::xyFromCell(JapTC, clim$cid)
    +
    +# Constant threshold, distance-restricted velocity based on geographical distances
    +avocc1 <- dVoCC(clim,
    +  n = 3, tdiff = 40, method = "Single", climTol = c(10, 0.1, 0.1),
    +  geoTol = 160, distfun = "GreatCircle", trans = NA, lonlat = TRUE
    +)
    +
    +r1 <- JapTC
    +r1[avocc1$focal] <- avocc1$vel
    +terra::plot(r1)
    +
    +# Cell-specific, distance-unrestricted climate analogue velocity based on least-cost path distances
    +# First, create the conductance matrix (all land cells considered to have conductance of 1)
    +r <- JapTC
    +r[!is.na(JapTC[[1]])] <- 1
    +h8 <- gdistance::transition(r, transitionFunction = mean, directions = 8)
    +h8 <- gdistance::geoCorrection(h8, type = "c")
    +
    +# Now calculate the analogue velocity using the baseline SD for each variable as analogue threshold
    +avocc2 <- dVoCC(clim,
    +  n = 3, tdiff = 40, method = "Variable", climTol = NA, geoTol = Inf,
    +  distfun = "LeastCost", trans = h8, lonlat = TRUE
    +)
    +
    +# Plot results
    +r1 <- r2 <- JapTC
    +r1[avocc1$focal] <- avocc1$vel
    +r2[avocc2$focal] <- avocc2$vel
    +terra::plot(c(r1, r2))
    +} # }
    +
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/gVoCC.html b/docs/reference/gVoCC.html new file mode 100644 index 0000000..02d77e3 --- /dev/null +++ b/docs/reference/gVoCC.html @@ -0,0 +1,135 @@ + +Gradient-based climate velocity — gVoCC • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to calculate the velocity of climate change after Burrows et al. (2011) +based on local climatic temporal trends and spatial gradients.

    +
    + +
    +
    gVoCC(tempTrend, spatGrad)
    +
    + +
    +

    Arguments

    + + +
    tempTrend
    +

    The output from the tempTrend function containing the long-term linear climatic trends.

    + + +
    spatGrad
    +

    The output from the spatGrad function containing the magnitudes and angles for the spatial climatic gradient.

    + +
    +
    +

    Value

    +

    A RasterStack containing the climate velocity magnitude ("voccMag", +km/yr for unprojected rasters and spatial unit/year for projected rasters) and angle("voccAng" in +degrees north: 0N, 90E, 180S and 270W).

    +
    +
    +

    References

    +

    Burrows et al. 2011. The pace of shifting climate +in marine and terrestrial ecosystems. Science, 334, 652-655.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +HSST <- VoCC_get_data("HSST.tif")
    +yrSST <- sumSeries(HSST,
    +  p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST),
    +  fun = function(x) colMeans(x, na.rm = TRUE), freqin = "months", freqout = "years"
    +)
    +tr <- tempTrend(yrSST, th = 10)
    +sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE)
    +
    +# Magnitude and angle of the climate velocity (km/yr) 1960-2009
    +
    +v <- gVoCC(tr, sg)
    +terra::plot(v)
    +} # }
    +
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/index.html b/docs/reference/index.html new file mode 100644 index 0000000..3ea2346 --- /dev/null +++ b/docs/reference/index.html @@ -0,0 +1,133 @@ + +Package index • VoCC + + +
    +
    + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +

    All functions

    +

    +
    +

    EEZ

    +

    Icelandic Exclusive Economic Zone (EEZ)

    +

    HSST

    +

    Monthly mean sea surface temperatures (SST) around Iceland for 1955-2010

    +

    JapTC

    +

    Multivariate Terraclimate data for Japan

    +

    angulo()

    +

    Internal. Angle associated to the spatial gradient

    +

    climPCA()

    +

    Reduce dimensionality of climate predictors via Principal Component Analysis

    +

    climPlot()

    +

    Binned scatter plot for 2-dimensional climate space

    +

    dVoCC()

    +

    Distance-based velocity based on geographically closest climate analogue

    +

    gVoCC()

    +

    Gradient-based climate velocity

    +

    resTime()

    +

    Climatic residence time of a polygon

    +

    shiftTime()

    +

    Shift in timing of seasonal climatology

    +

    spatGrad()

    +

    Local spatial climatic gradients

    +

    splitLine()

    +

    Internal. Split a line segment defined by points A-B into n parts

    +

    sumSeries()

    +

    Summarize climatic series to higher temporal resolution

    +

    tempTrend()

    +

    Long-term local climatic trends

    + + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/pipe.html b/docs/reference/pipe.html new file mode 100644 index 0000000..cc95e9b --- /dev/null +++ b/docs/reference/pipe.html @@ -0,0 +1,99 @@ + +Pipe operator — %>% • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    See magrittr::%>% for details.

    +
    + +
    +
    lhs %>% rhs
    +
    + +
    +

    Arguments

    + + +
    lhs
    +

    A value or the magrittr placeholder.

    + + +
    rhs
    +

    A function call using the magrittr semantics.

    + +
    +
    +

    Value

    +

    The result of calling `rhs(lhs)`.

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/resTime.html b/docs/reference/resTime.html new file mode 100644 index 0000000..0bea70a --- /dev/null +++ b/docs/reference/resTime.html @@ -0,0 +1,156 @@ + +Climatic residence time of a polygon — resTime • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to calculate VoCC-based residence time of isotherms within a polygon after Loaire et al. (2009)

    +
    + +
    +
    resTime(pg, vel, areapg = NA)
    +
    + +
    +

    Arguments

    + + +
    pg
    +

    SpatialPolygon or a SpatialPolygonsDataFrame containing the polygons for which +the residence time is to be calculated. The polygons must be on the same coordinate system as vel.

    + + +
    vel
    +

    raster with climate velocity (km/year) for the period of interest.

    + + +
    areapg
    +

    vector with the area (in km2) of the polygons. Use NA (default) to calculate internally if field not avilable.

    + +
    +
    +

    Value

    +

    a data.frame containing for each polygon its ID, mean velocity (km/yr), +diameter of the equivalent circle (km), and residence time (years) as the ratio D/vel.

    +
    +
    +

    References

    +

    Loarie et al. 2009. The velocity of climate change. Nature, 462, 1052-1055.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos

    +
    + +
    +

    Examples

    +
    
    +# Load example Exclusive Economic Zone polygon
    +if (FALSE) { # \dontrun{
    +EEZ <- VoCC_get_data("EEZ.gpkg")
    +HSST <- VoCC_get_data("HSST.tif")
    +
    +yrSST <- sumSeries(HSST,
    +  p = "1969-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST),
    +  fun = function(x) colMeans(x, na.rm = TRUE),
    +  freqin = "months", freqout = "years"
    +)
    +tr <- tempTrend(yrSST, th = 10)
    +sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE)
    +v <- gVoCC(tr, sg)
    +vel <- v[[1]]
    +
    +# Calculating area internally
    +a1 <- resTime(EEZ, vel, areapg = NA)
    +a1
    +
    +# Using the area field from the polygon data table
    +a2 <- resTime(EEZ, vel, areapg = as.numeric(as.numeric(levels(EEZ$Area_km2))[EEZ$Area_km2]))
    +a2
    +
    +# Using a user defined polygon
    +x_coord <- c(-28, -20, -20.3, -25.5)
    +y_coord <- c(60, 61, 63, 62)
    +p <- Polygon(cbind(x_coord, y_coord))
    +sps <- SpatialPolygons(list(Polygons(list(p), 1)))
    +a3 <- resTime(sps, vel, areapg = NA)
    +
    +terra::plot(vel)
    +terra::plot(EEZ, add = TRUE)
    +terra::plot(sps, add = TRUE)
    +} # }
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/shiftTime.html b/docs/reference/shiftTime.html new file mode 100644 index 0000000..b22a4cc --- /dev/null +++ b/docs/reference/shiftTime.html @@ -0,0 +1,139 @@ + +Shift in timing of seasonal climatology — shiftTime • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to calculate the seasonal shift in the arriving of typical seasonal climates +for a given period of interest as per Burrows et al. (2011).

    +
    + +
    +
    shiftTime(r, yr1, yr2, yr0, th, m)
    +
    + +
    +

    Arguments

    + + +
    r
    +

    stack with monthly values of the climatic +variable for the period of interest.

    + + +
    yr1
    +

    integer specifying the initial year for the period of interest.

    + + +
    yr2
    +

    integer specifying the end year for the period of interest.

    + + +
    yr0
    +

    integer specifying the first year in the series.

    + + +
    th
    +

    integer minimum number of non NAs in the series needed to +calculate the trend (default 3).

    + + +
    m
    +

    integer number (1-12) of the month for which the shift is to be calculated

    + +
    +
    +

    Value

    +

    a stack with the long-term monthly trend (C/year for temperature in degrees; "mTrend"), +seasonal rate of change (C/month; "seaRate"), and seasonal shift (day/decade; "seaShift").

    +
    +
    +

    References

    +

    Burrows et al. 2011. The pace of +shifting climate in marine and terrestrial ecosystems. Science, 334, 652-655.

    +
    +
    +

    Author

    +

    Jorge Garcia Molinos and Michael T. Burrows

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +HSST <- VoCC_get_data("HSST.tif")
    +Apr <- shiftTime(HSST, yr1 = 1960, yr2 = 2009, yr0 = 1955, th = 10, m = 4)
    +
    +terra::plot(Apr)
    +} # }
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/spatGrad.html b/docs/reference/spatGrad.html new file mode 100644 index 0000000..7600ef9 --- /dev/null +++ b/docs/reference/spatGrad.html @@ -0,0 +1,144 @@ + +Local spatial climatic gradients — spatGrad • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to calculate the magnitude and direction of the spatial gradient +associated to a climatic variable after Burrows et al. (2011). This trend is +to be used for the calculation of the gradient-based climate velocity using gVoCC.

    +
    + +
    +
    spatGrad(r, th = -Inf, projected = FALSE)
    +
    + +
    +

    Arguments

    + + +
    r
    +

    RasterStack with the annual climatic values for the period of interest. +Alternatively, a raster with the annual climatic values averaged +over the period of interest.

    + + +
    th
    +

    Integer indicating a lower threshold to truncate the spatial +gradient with. Use -Inf (default) if no threshold required.

    + + +
    projected
    +

    Logical is the source raster in a projected coordinate system? +If FALSE (default) a correction will be made to account for latitudinal distortion.

    + +
    +
    +

    Value

    +

    A RasterStack with the magnitude of the spatial gradient +(Grad in C per km for unprojected rasters and C per spatial unit for projected rasters), +and the associated angle (Ang in degrees).

    +
    +
    +

    References

    +

    Burrows et al. 2011. The pace of shifting climate in marine and terrestrial ecosystems. Science, 334, 652-655.

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos, David S. Schoeman, and Michael T. Burrows

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +HSST <- VoCC_get_data("HSST.tif")
    +
    +yrSST <- sumSeries(HSST,
    +  p = "1969-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST),
    +  fun = function(x) colMeans(x, na.rm = TRUE), freqin = "months", freqout = "years"
    +)
    +
    +# Spatial gradient (magnitude and angle) for the average mean annual SST.
    +
    +sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE)
    +
    +terra::plot(sg)
    +} # }
    +
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/splitLine.html b/docs/reference/splitLine.html new file mode 100644 index 0000000..bdda379 --- /dev/null +++ b/docs/reference/splitLine.html @@ -0,0 +1,103 @@ + +Internal. Split a line segment defined by points A-B into n parts — splitLine • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Internal. Split a line segment defined by points A-B into n parts

    +
    + +
    +
    splitLine(A, B, n)
    +
    + +
    +

    Arguments

    + + +
    A
    +

    numeric giving coordinates of first point

    + + +
    B
    +

    numeric giving coordinates of second point

    + + +
    n
    +

    numeric number of segments to divide the distance between points with

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos

    +
    + +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/sumSeries.html b/docs/reference/sumSeries.html new file mode 100644 index 0000000..33288aa --- /dev/null +++ b/docs/reference/sumSeries.html @@ -0,0 +1,193 @@ + +Summarize climatic series to higher temporal resolution — sumSeries • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to convert climatic series (provided as RasterStack) into a +coarser time frequency series for a period of interest. This function transforms the RasterStack +into an xts time series object to extract the values for the period of interest and +apply some summary function. It is mainly a wrapper from the apply. function family +in the package xts (Ryan and Ulrich 2017).

    +
    + +
    +
    sumSeries(
    +  r,
    +  p,
    +  yr0,
    +  l = terra::nlyr(r),
    +  fun = function(x) colMeans(x, na.rm = TRUE),
    +  freqin = "months",
    +  freqout = "years"
    +)
    +
    + +
    +

    Arguments

    + + +
    r
    +

    RasterStack containing the time series of the climatic variable.

    + + +
    p
    +

    character string defining the period to extract for the calculation +of the series (see examples).

    + + +
    yr0
    +

    character string specifying the first (yr0) year in the series (see examples).

    + + +
    l
    +

    integer length of the input time series.

    + + +
    fun
    +

    logical summary function to be computed. Summary functions need to be applied by cell (columns) +so should have the structure 'function(x) apply(x, 2, function(y))'. For convenience, sumSeries imports +colMaxs, and colMins from package ‘matrixStats’ (Bengtsson 2018) so they can be called in directly.

    + + +
    freqin
    +

    character string specifying the original time frequency of the series.

    + + +
    freqout
    +

    character string specifying the desired time frequency of the new series. +Must be one of the following: "weeks", "months", "quarters", "years", "other". Argument "other" +allows for user-defined functions to be applied on the 'xts' time series object over the period of interest (see examples).

    + +
    +
    +

    Value

    +

    A RasterStack with the new series.

    +
    +
    +

    References

    +

    Ray and Ulrich. 2017. xts: eXtensible Time Series. R package version 0.10-1.
    Bengtsson 2018. matrixStats: Functions that Apply to Rows and Columns +of Matrices (and to Vectors). R package version 0.53.1.

    +
    +
    +

    Author

    +

    Jorge Garcia Molinos

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +# Monthly mean SST (HadISST) data for Europe Jan-1950 to Dec-2010
    +
    +HSST <- VoCC_get_data("HSST.tif")
    +
    +# Calculate mean annual monthly SST
    +
    +yrSST <- sumSeries(HSST,
    +  p = "1969-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST),
    +  fun = function(x) colMeans(x, na.rm = TRUE), freqin = "months", freqout = "years"
    +)
    +
    +# Extract Jul Aug mean SST each year (xts months are indexed from 0 to 11)
    +
    +myf <- function(x, m = c(7, 8)) {
    +  x[xts::.indexmon(x) %in% (m - 1)]
    +}
    +
    +JlAugSST <- sumSeries(HSST,
    +  p = "1969-01/2009-12", yr0 = "1950-01-01", l = terra::nlyr(HSST),
    +  fun = myf, freqin = "months", freqout = "other"
    +)
    +
    +# Same but calculating the annual variance of the two months
    +
    +myf <- function(x, m = c(7, 8)) {
    +  x1 <- x[xts::.indexmon(x) %in% (m - 1)]
    +  xts::apply.yearly(x1, function(y) {
    +    apply(y, 2, function(y) {
    +      var(y, na.rm = TRUE)
    +    })
    +  })
    +}
    +
    +meanJASST <- sumSeries(HSST,
    +  p = "1969-01/2009-12", yr0 = "1950-01-01", l = terra::nlyr(HSST),
    +  fun = myf, freqin = "months", freqout = "other"
    +)
    +} # }
    +
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/reference/tempTrend.html b/docs/reference/tempTrend.html new file mode 100644 index 0000000..d3d32eb --- /dev/null +++ b/docs/reference/tempTrend.html @@ -0,0 +1,134 @@ + +Long-term local climatic trends — tempTrend • VoCC + + +
    +
    + + + +
    +
    + + +
    +

    Function to calculate temporal trend from a raster series +of a climatic variable. This trend is to be used for the calculation of the +gradient-based climate velocity using gVoCC.

    +
    + +
    +
    tempTrend(r, th)
    +
    + +
    +

    Arguments

    + + +
    r
    +

    RasterStack containing a time series of (annual, seasonal, monthly...) values of +the climatic variable for the period of interest.

    + + +
    th
    +

    Integer minimum number of observations in the series needed to +calculate the trend at each cell.

    + +
    +
    +

    Value

    +

    A RasterStack containing the cell-specific temporal trends +extracted from simple linear regressions of the climatic variable against time +("slpTrends" in degree Celsius per year), together with their standard +errors ("seTrends") and statistical significance ("sigTrends").

    +
    +
    +

    See also

    + +
    +
    +

    Author

    +

    Jorge Garcia Molinos and Christopher J. Brown

    +
    + +
    +

    Examples

    +
    if (FALSE) { # \dontrun{
    +HSST <- VoCC_get_data("HSST.tif")
    +
    +yrSST <- sumSeries(HSST,
    +  p = "1969-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST),
    +  fun = function(x) colMeans(x, na.rm = TRUE), freqin = "months", freqout = "years"
    +)
    +
    +# Mean annual SST trend (minimum threshold of 10 years of data), with SE and p-values.
    +
    +tr <- tempTrend(yrSST, th = 10)
    +
    +terra::plot(tr)
    +} # }
    +
    +
    +
    + +
    + + +
    + +
    +

    Site built with pkgdown 2.1.3.

    +
    + +
    + + + + + + + + diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 0000000..646b56e --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,25 @@ + +/404.html +/LICENSE.html +/articles/VoCC.html +/articles/index.html +/authors.html +/index.html +/reference/EEZ.html +/reference/HSST.html +/reference/JapTC.html +/reference/angulo.html +/reference/climPCA.html +/reference/climPlot.html +/reference/dVoCC.html +/reference/gVoCC.html +/reference/index.html +/reference/pipe.html +/reference/resTime.html +/reference/shiftTime.html +/reference/spatGrad.html +/reference/splitLine.html +/reference/sumSeries.html +/reference/tempTrend.html + + diff --git a/man/VoCC_get_data.Rd b/man/VoCC_get_data.Rd deleted file mode 100644 index 805801c..0000000 --- a/man/VoCC_get_data.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils.R -\name{VoCC_get_data} -\alias{VoCC_get_data} -\title{Return data location and data if requested} -\usage{ -VoCC_get_data(path = NULL) -} -\arguments{ -\item{path}{Filename of data if known.} -} -\value{ -The path as a character string, or a dataset -} -\description{ -Return data location and data if requested -} -\examples{ - -VoCC_get_data() - -HSST <- VoCC_get_data(path = "HSST.tif") - -} diff --git a/man/climPCA.Rd b/man/climPCA.Rd index decba4a..a90d99e 100644 --- a/man/climPCA.Rd +++ b/man/climPCA.Rd @@ -37,7 +37,7 @@ Function to extract the first n principal components explaining a predefined tot These components can subsequently be used as synthetic climatic variables to reduce dimensionality in climate-analogue methods. } \examples{ - +\dontrun{ JapTC <- VoCC_get_data("JapTC.tif") comp <- climPCA(JapTC[[c(1, 3, 5)]], JapTC[[c(2, 4, 6)]], @@ -46,6 +46,8 @@ summary(comp[[1]]) # first two components explain >90\% of variance # Create a data frame with the necessary variables in the required order (see climAna? for details) clim <- comp[[2]][, c(2, 4, 3, 5, 1)] clim[, c("x", "y")] <- terra::xyFromCell(JapTC[[1]], clim$cid) +} + } \seealso{ {\code{\link{dVoCC}}, \code{\link{climPlot}}} diff --git a/man/climPlot.Rd b/man/climPlot.Rd index 2f19aa1..e0d6e40 100644 --- a/man/climPlot.Rd +++ b/man/climPlot.Rd @@ -26,7 +26,7 @@ and (iii) the location of remnant, novel and disappearing climates between both Function to create a binned scatter plot of two climate variables. } \examples{ - +\dontrun{ JapTC <- VoCC_get_data("JapTC.tif") # Plot climate space for the two first variables(annual precipitation and maximum temperature) @@ -41,7 +41,6 @@ out <- climPlot(xy, y.name = "Temperature max (°C)" ) -\dontrun{ # output plots can be saved as: ggplot2::ggsave( plot = out, filename = file.path(getwd(), "example_plot.pdf"), diff --git a/man/dVoCC.Rd b/man/dVoCC.Rd index 4c32c9d..04b25e5 100644 --- a/man/dVoCC.Rd +++ b/man/dVoCC.Rd @@ -58,6 +58,7 @@ other (target) cells in the future by reference to a specified climatic threshol specification of search distances and incorporates both least-cost path and Great Circle (as-the-crow-flies) distances. } \examples{ +\dontrun{ JapTC <- VoCC_get_data("JapTC.tif") # Create a data frame with the necessary variables in the required order @@ -74,7 +75,6 @@ r1 <- JapTC r1[avocc1$focal] <- avocc1$vel terra::plot(r1) -\dontrun{ # Cell-specific, distance-unrestricted climate analogue velocity based on least-cost path distances # First, create the conductance matrix (all land cells considered to have conductance of 1) r <- JapTC diff --git a/man/gVoCC.Rd b/man/gVoCC.Rd index fb4bd5f..ce2d787 100644 --- a/man/gVoCC.Rd +++ b/man/gVoCC.Rd @@ -21,7 +21,7 @@ Function to calculate the velocity of climate change after Burrows et al. (2011) based on local climatic temporal trends and spatial gradients. } \examples{ - +\dontrun{ HSST <- VoCC_get_data("HSST.tif") yrSST <- sumSeries(HSST, p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST), @@ -34,6 +34,7 @@ sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE) v <- gVoCC(tr, sg) terra::plot(v) +} } \references{ diff --git a/man/shiftTime.Rd b/man/shiftTime.Rd index 1d80904..af67b85 100644 --- a/man/shiftTime.Rd +++ b/man/shiftTime.Rd @@ -30,11 +30,13 @@ Function to calculate the seasonal shift in the arriving of typical seasonal cli for a given period of interest as per Burrows et al. (2011). } \examples{ +\dontrun{ HSST <- VoCC_get_data("HSST.tif") Apr <- shiftTime(HSST, yr1 = 1960, yr2 = 2009, yr0 = 1955, th = 10, m = 4) terra::plot(Apr) } +} \references{ \href{http://science.sciencemag.org/content/334/6056/652}{Burrows et al. 2011}. The pace of shifting climate in marine and terrestrial ecosystems. Science, 334, 652-655. diff --git a/man/spatGrad.Rd b/man/spatGrad.Rd index 6b3da32..95c155a 100644 --- a/man/spatGrad.Rd +++ b/man/spatGrad.Rd @@ -28,7 +28,7 @@ associated to a climatic variable after Burrows et al. (2011). This trend is to be used for the calculation of the gradient-based climate velocity using gVoCC. } \examples{ - +\dontrun{ HSST <- VoCC_get_data("HSST.tif") yrSST <- sumSeries(HSST, @@ -41,6 +41,7 @@ yrSST <- sumSeries(HSST, sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE) terra::plot(sg) +} } \references{ diff --git a/man/sumSeries.Rd b/man/sumSeries.Rd index 1ace44a..5d4faa8 100644 --- a/man/sumSeries.Rd +++ b/man/sumSeries.Rd @@ -45,6 +45,7 @@ apply some summary function. It is mainly a wrapper from the \code{apply.} funct in the package xts (Ryan and Ulrich 2017). } \examples{ +\dontrun{ # Monthly mean SST (HadISST) data for Europe Jan-1950 to Dec-2010 HSST <- VoCC_get_data("HSST.tif") @@ -82,6 +83,7 @@ meanJASST <- sumSeries(HSST, p = "1969-01/2009-12", yr0 = "1950-01-01", l = terra::nlyr(HSST), fun = myf, freqin = "months", freqout = "other" ) +} } \references{ diff --git a/man/tempTrend.Rd b/man/tempTrend.Rd index 612c14d..efe33ab 100644 --- a/man/tempTrend.Rd +++ b/man/tempTrend.Rd @@ -25,7 +25,7 @@ of a climatic variable. This trend is to be used for the calculation of the gradient-based climate velocity using gVoCC. } \examples{ - +\dontrun{ HSST <- VoCC_get_data("HSST.tif") yrSST <- sumSeries(HSST, @@ -39,6 +39,7 @@ tr <- tempTrend(yrSST, th = 10) terra::plot(tr) } +} \seealso{ {\code{\link{spatGrad}}, \code{\link{gVoCC}}} } diff --git a/man/voccTraj.Rd b/man/voccTraj.Rd deleted file mode 100644 index fd4125b..0000000 --- a/man/voccTraj.Rd +++ /dev/null @@ -1,82 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/voccTraj.R -\name{voccTraj} -\alias{voccTraj} -\title{Climate velocity trajectories} -\usage{ -voccTraj(lonlat, vel, ang, mn, tyr, trajID = 1:nrow(lonlat), correct = FALSE) -} -\arguments{ -\item{lonlat}{\code{data.frame} with the longitude and latitude (in decimal degrees) -of the points to project.} - -\item{vel}{\code{raster} with the magnitude of gradient-based climate velocity.} - -\item{ang}{\code{raster} with velocity angles in degrees.} - -\item{mn}{\code{raster} with the overall mean climatic value over the period of interest.} - -\item{tyr}{\code{integer} temporal length of the period of interest.} - -\item{trajID}{\code{integer} specifying the identifiers for the trajectories.} - -\item{correct}{\code{logical} does the input raster need to be corrected to account for cropped margins? -Unless the raster extent is global, calculation of trajectories will throw an error at the margins -as the trajectories go beyond the raster extent (no input values). To avoid this, an option is given for -expanding the extent by the resolution of the raster (1 column/row) with NAs. Note that those trajectories -reaching the extent limits will be artificially bounced back so should be discarded at that point. -Alternatively, users may choose to crop to a larger extent to the domain of interest (appropriately -defined by lonlat), so the extra extent buffer for those trajectories getting to the border -of the raster.} -} -\value{ -a \code{data.frame} containing the coordinates ("x", "y") of the constituent -points and identification number ("trajIDs") for each trajectory. -} -\description{ -Function to calculate vocc trajectories after Burrows et al (2014). Trajectories -are calculated by propagating climatic isopleths using the magnitude and direction of -local (cell) velocities. This is a slightly modified version of the original Burrows et al. (2014) -approach in that iterations of a trajectory are based on cumulative time travelled instead of using fixed time steps. -} -\examples{ - -HSST <- VoCC_get_data("HSST.tif") - -yrSST <- sumSeries(HSST, - p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HSST), - fun = function(x) colMeans(x, na.rm = TRUE), - freqin = "months", freqout = "years" -) -tr <- tempTrend(yrSST, th = 10) -sg <- spatGrad(yrSST, th = 0.0001, projected = FALSE) -v <- gVoCC(tr, sg) -vel <- v[[1]] -ang <- v[[2]] - -# Calculate the annual SST mean over the period -mn <- mean(yrSST, na.rm = T) - -# Get the set of starting cells for the trajectories -lonlat <- stats::na.omit(data.frame( - terra::xyFromCell(vel, 1:terra::ncell(vel)), - vel[], ang[], mn[] -))[, 1:2] - -# Calculate trajectories -# The following throws an error due to the trajectories moving beyond the raster extent -traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50) - -# This accounts for the extent issue -traj <- voccTraj(lonlat, vel, ang, mn, tyr = 50, correct = TRUE) - -} -\references{ -\href{https://www.nature.com/articles/nature12976}{Burrows et al. 2014}. Geographical limits to species-range shifts are suggested by climate velocity. Nature, 507, 492-495. -} -\seealso{ -{\code{\link{gVoCC}}, \code{\link{trajClas}}} -} -\author{ -Jorge Garcia Molinos, David S. Schoeman and Michael T. Burrows -} diff --git a/vignettes/VoCC_Tutorial.Rmd b/vignettes/VoCC.Rmd similarity index 68% rename from vignettes/VoCC_Tutorial.Rmd rename to vignettes/VoCC.Rmd index 1242d4e..5c4d144 100644 --- a/vignettes/VoCC_Tutorial.Rmd +++ b/vignettes/VoCC.Rmd @@ -1,15 +1,10 @@ --- -title: "VoCC_Tutorial" -author: "Jorge García Molinos" -date: "06.05.2019" -output: - prettydoc::html_pretty: - highlight: github - theme: tactile +title: "VoCC" +output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{VoCC_Tutorial} + %\VignetteIndexEntry{VoCC} %\VignetteEngine{knitr::rmarkdown} - %\VignetteIndexEntry{VoCC_Tutorial} + %\VignetteIndexEntry{VoCC} \usepackage[utf8]{inputenc} --- @@ -18,6 +13,9 @@ vignette: > collapse = TRUE, comment = "#>" ) + +# Force sequential processing to avoid parallel processing issues during package checking +Sys.setenv("R_PARALLELLY_AVAILABLECORES_FALLBACK" = "1") ``` @@ -26,32 +24,18 @@ This vignette provides the code to reproduce the examples for the R package VoCC For this tutorial we need the following packages (if not installed get them first): ```{r message=FALSE} -# devtools::install_github("JorGarMol/VoCC", dependencies = TRUE, build_vignettes = TRUE) -devtools::load_all() -# suppressWarnings(library(VoCC)) -# suppressWarnings(library(rasterVis)) -# suppressWarnings(library(gridExtra)) -# suppressWarnings(library(doParallel)) -# suppressWarnings(library(foreach)) -# suppressWarnings(library(scales)) -# suppressWarnings(library(data.table)) -# suppressWarnings(library(mapplots)) -# suppressWarnings(library(ggplot2)) -# suppressWarnings(library(repmis)) +library(VoCC) +# devtools::load_all() +library(terra) +library(tidyterra) +library(ggplot2) +library(patchwork) ``` -We also need a few data sets that can be downloaded into R from the Github Data repository (https://github.com/JorGarMol/VoCC_data_sets) companion to the package. See the repository readme file for description of the data sets. +We also need a few data sets that can be accessed from the `VoCCdata` package. ```{r message=FALSE} -# load(url("https://github.com/JorGarMol/VoCC_data_sets/blob/master/Data/HadiSST.rda?raw=true") # HSST data set -HadiSST <- VoCC_get_data(path = "HSST.tif") - -# source_data("https://github.com/JorGarMol/VoCC_data_sets/blob/master/Data/EZZs.rda?raw=true") # EEZs data set -EEZ <- VoCC_get_data(path = "EEZ.gpkg") - -load(url("https://github.com/JorGarMol/VoCC_data_sets/blob/master/Data/marshift.rda?raw=true")) # marshift data set - -# load(url("https://github.com/JorGarMol/VoCC_data_sets/blob/master/Data/traj25.rda?raw=true")) # traj25 data set +library(VoCCdata) ``` @@ -63,9 +47,11 @@ We have a look first at the “marshift” global data set containing reported r str(marshift) ``` -Next, we calculate the gradient- and distance-based velocities (1960-2009), using the HSST data set, from which we will later extract the corresponding values for each observed shift. +Next, we calculate the gradient- and distance-based velocities (1960-2009), using the HadiSST data set, from which we will later extract the corresponding values for each observed shift. ```{r} +HadiSST <- terra::rast(system.file("extdata", "HadiSST.tif", package = "VoCCdata")) + # monthly to annual averages r <- sumSeries(HadiSST, p = "1960-01/2009-12", yr0 = "1955-01-01", l = terra::nlyr(HadiSST), @@ -80,11 +66,14 @@ gv <- gVoCC(vt, vg) # Now the distance-based velocities # Take 1960-1970 as base period against 2000-2009 -r2 <- c(mean(r[[1:10]], na.rm = TRUE), mean(r[[41:50]], na.rm = TRUE)) +r2 <- c(terra::mean(r[[1:10]], na.rm = TRUE), terra::mean(r[[41:50]], na.rm = TRUE)) + # prepare the data frame with the necessary variables -clim <- na.omit(data.frame(terra::values(r2), cid = 1:ncell(r))) +clim <- na.omit(data.frame(terra::values(r2), cid = 1:terra::ncell(r))) + clim[, c("x", "y")] <- terra::xyFromCell(r, clim$cid) # 1965-2004 (40 yr), 500 km search radius + v <- dVoCC(clim, n = 1, tdiff = 40, method = "Single", climTol = 0.1, geoTol = 500, distfun = "GreatCircle", trans = NA, lonlat = TRUE) ``` @@ -92,18 +81,56 @@ Next, we extract the mean velocity estimates for each reported shift by taking t ```{r} # Change sign as needed and create the distance-based velocity raster -ind <- which(r2[[1]][v$focal] > r2[[2]][v$target]) +ind <- which(terra::extract(r2[[1]], v$focal) > terra::extract(r2[[2]], v$target)) v$velBis <- v$vel v$velBis[ind] <- v$vel[ind] * -1 # put output in raster format dv <- terra::rast(gv) dv[v$focal] <- v$velBis -marshift$GV <- with(marshift, terra::extract(abs(gv[[1]]), cbind(long, lat), buffer = (Shift * (timespan / 10) * 1000), fun = mean, na.rm = TRUE, small = TRUE)) -marshift$DV <- with(marshift, terra::extract(abs(dv), cbind(long, lat), buffer = (Shift * (timespan / 10) * 1000), fun = mean, na.rm = TRUE, small = TRUE)) -# retrieve the closest marine cell for those centroids falling on land -marshift$GV <- with(marshift, ifelse(is.na(GV), gv[[1]][which.min(replace(distanceFromPoints(gv[[1]], cbind(long, lat)), is.na(gv[[1]]), NA))], GV)) -marshift$DV <- with(marshift, ifelse(is.na(DV), dv[which.min(replace(distanceFromPoints(dv, cbind(long, lat)), is.na(dv), NA))], DV)) +# Create point geometries and buffer them +coords <- terra::vect(cbind(marshift$long, marshift$lat), crs = "EPSG:4326") +buffer_size <- marshift$Shift * (marshift$timespan / 10) * 1000 + +marshift$GV <- terra::extract(abs(gv[[1]]), terra::buffer(coords, buffer_size), + fun = mean, na.rm = TRUE)$voccMag # TODO The other option is voccAng but they seem the same. Check data above. + +marshift$DV <- terra::extract(abs(dv), terra::buffer(coords, buffer_size), + fun = mean, na.rm = TRUE)$voccMag # The other option is voccAng +``` + +```{r include=FALSE} +# # retrieve the closest marine cell for those centroids falling on land +# # For points that didn't get values (NA), find nearest valid cells +# na_gv <- is.na(marshift$GV) +# na_dv <- is.na(marshift$DV) +# +# if(any(na_gv)) { +# # Create a mask of valid cells and find nearest valid cell for each NA point +# valid_cells_gv <- !is.na(gv[[1]]) +# for(i in which(na_gv)) { +# distances <- terra::distance(coords[i], gv[[1]], unit = "m") +# # Find the closest non-NA cell +# valid_distances <- terra::mask(distances, valid_cells_gv) +# min_cell <- which.min(terra::values(valid_distances)) +# marshift$GV[i] <- terra::values(gv[[1]])[min_cell] +# } +# } +# +# if(any(na_dv)) { +# # Create a mask of valid cells and find nearest valid cell for each NA point +# valid_cells_dv <- !is.na(dv) +# for(i in which(na_dv)) { +# distances <- terra::distance(coords[i], dv, unit = "m") +# # Find the closest non-NA cell +# valid_distances <- terra::mask(distances, valid_cells_dv) +# min_cell <- which.min(terra::values(valid_distances)) +# marshift$DV[i] <- terra::values(dv)[min_cell] +# } +# } +``` + +```{r} # fit the regression models Mgv <- lm(Shift^(1 / 4) ~ I((GV * 10)^(1 / 4)), data = marshift, weights = years_data) Mdv <- lm(Shift^(1 / 4) ~ I((DV * 10)^(1 / 4)), data = marshift, weights = years_data) @@ -115,11 +142,23 @@ Produce the observed vs predicted scatterplots with regression lines (Fig. 2 in ```{r} # first compare both velocities -my.at <- seq(-50, 50, by = 5) -p1 <- rasterVis::levelplot(gv[[1]], par.settings = BuRdTheme, at = my.at, main = "Gradient-based vocc", margin = FALSE) -my.at <- seq(-20, 20, by = 2) -p2 <- rasterVis::levelplot(dv, par.settings = BuRdTheme, at = my.at, main = "Distance-based vocc", margin = FALSE) -gridExtra::grid.arrange(p1, p2, ncol = 1) + +p1 <- ggplot() + + geom_spatraster(data = gv[[1]]) + + scale_fill_distiller(palette = "RdBu", direction = 1, limits = c(-50, 50)) + + ggtitle("Gradient-based vocc") + + scale_x_continuous(expand = c(0,0)) + + scale_y_continuous(expand = c(0,0)) + +p2 <- ggplot() + + geom_spatraster(data = gv[[1]]) + + scale_fill_distiller(palette = "RdBu", direction = 1, limits = c(-20, 20)) + + ggtitle("Distance-based vocc") + + scale_x_continuous(expand = c(0,0)) + + scale_y_continuous(expand = c(0,0)) + +wrap_plots(p1, p2, ncol = 1) + # scatter plots with the resulting regression line p1 <- ggplot(na.omit(marshift), aes(x = I((GV * 10)^(1 / 4)), y = Shift^(1 / 4))) + geom_point(color = "grey") + @@ -133,22 +172,26 @@ p2 <- ggplot(na.omit(marshift), aes(x = I((DV * 10)^(1 / 4)), y = Shift^(1 / 4)) theme_classic() + scale_color_brewer(palette = "Accent") + labs(x = "Predicted shift (x^1/4; km/yr)", y = "Observed shift (y^1/4; km/yr)") -grid.arrange(p1, p2, nrow = 1) +wrap_plots(p1, p2, nrow = 1) ``` # Example 2: Analysis of climate exposure and connectivity in the Western Pacific Ocean + +THIS CODE IS NOT OPERATIONAL YET. IN PARTICULAR, `voccTraj` HAS NOT BEEN UPDATED FOR `terra`. Standby for updates. + In this example we use climate velocity trajectories (based on 1960-2009 mean annual SST) to analyse climate connectivity in the Western Pacific region and calculate the residence time corresponding to the exclusive economic zones in the region as an index of climatic exposure. First, we arrange the raster layers for analysis. ```{r} # prepare raster layers vel <- gv[[1]] ang <- gv[[2]] -mn <- calc(r, mean, na.rm = T) +mn <- app(r, mean, na.rm = T) + # generate a velocity layer centered and cropped to study region to extract the initial coordinates for the trajectories from -x1 <- crop(gv[[1]], extent(-180, 0, -90, 90)) -x2 <- crop(gv[[1]], extent(0, 180, -90, 90)) -extent(x1) <- c(180, 360, -90, 90) +x1 <- crop(gv[[1]], ext(-180, 0, -90, 90)) +x2 <- crop(gv[[1]], ext(0, 180, -90, 90)) +ext(x1) <- c(180, 360, -90, 90) velc <- merge(x1, x2) # crop to the desired extent # display restricted to +180 longitude to avoid plotting issues with date line crossing @@ -159,15 +202,15 @@ We can now populate the data frame with the cell centroid coordinates for the tr ```{r} lonlat <- data.frame(terra::xyFromCell(velc, 1:ncell(velc))) -lonlat$vel <- terra::extract(vel, lonlat) -lonlat$ang <- terra::extract(ang, lonlat[, 1:2]) -lonlat$mn <- terra::extract(mn, lonlat[, 1:2]) +lonlat$vel <- terra::extract(vel, lonlat, ID = FALSE) +lonlat$ang <- terra::extract(ang, lonlat[, 1:2], ID = FALSE) +lonlat$mn <- terra::extract(mn, lonlat[, 1:2], ID = FALSE) lonlat <- na.omit(lonlat) ``` Let's calculate the trajectories with parallel processing to demonstrate how this can be used to speed things up (especially useful when dealing with fine resolutions or large extents). -```{r} +```{r, eval=FALSE} cores <- detectCores() ncores <- cores[1] - 1 cuts <- cut(1:nrow(lonlat), ncores) @@ -181,7 +224,7 @@ stopCluster(cl) Plot them over the climate velocities and the EEZ polygons from the EEZs data set (Fig. 3a in Garcia Molinos et al. 2019) -```{r} +```{r, eval=FALSE} # simplify polygons to speed plotting up eez_simp <- rgeos::gSimplify(EEZs, tol = 0.5, topologyPreserve = TRUE) plot(velc) @@ -193,7 +236,7 @@ plot(eez_simp, col = scales::alpha(rgb(211, 211, 211, maxColorValue = 255), 0.5) We now calulcate the trajectory classes and residence times for each EEZ using the traj25 data set. -```{r} +```{r, eval=FALSE} # get the set of starting cells for the trajectories and calculate trajectories # at 1/4-deg resolution (16 trajectories per 1-deg cell) r <- disaggregate(mn, 4) @@ -213,7 +256,7 @@ EEZa <- resTime(EEZs, vel, areapg = NA) Finally let's plot the category proportions as pie charts on top of each EEZ, the size of the chart being proportional to their respective residence time (Fig. 3b in Garcia Molinos et al. 2019). -```{r} +```{r, eval=FALSE} D <- data.table(d) # put data in long format # add EEZ names for reference D[, name := as.character(EEZs$Territory1)[as.numeric(ID)]] From 6452c051fe6016ef57dd98d4d54767af115c5205 Mon Sep 17 00:00:00 2001 From: Jason Everett Date: Wed, 27 Aug 2025 21:22:48 +1000 Subject: [PATCH 05/10] Update site --- .Rbuildignore | 3 + .gitignore | 1 + DESCRIPTION | 6 +- _pkgdown.yml | 4 + docs/404.html | 108 ++++++--------- docs/LICENSE.html | 81 +++++------ docs/articles/VoCC.html | 156 ++++++++++----------- docs/articles/index.html | 79 +++++------ docs/authors.html | 105 ++++++--------- docs/index.html | 109 ++++++--------- docs/pkgdown.js | 184 ++++++++++++++++--------- docs/pkgdown.yml | 2 +- docs/reference/EEZ.html | 105 ++++++--------- docs/reference/HSST.html | 109 +++++++-------- docs/reference/JapTC.html | 114 +++++++--------- docs/reference/angulo.html | 108 +++++++-------- docs/reference/climPCA.html | 123 ++++++++--------- docs/reference/climPlot.html | 120 +++++++---------- docs/reference/dVoCC.html | 129 ++++++++---------- docs/reference/gVoCC.html | 127 ++++++++--------- docs/reference/index.html | 247 ++++++++++++++++++---------------- docs/reference/pipe.html | 108 +++++++-------- docs/reference/resTime.html | 124 ++++++++--------- docs/reference/shiftTime.html | 123 ++++++++--------- docs/reference/spatGrad.html | 128 ++++++++---------- docs/reference/splitLine.html | 108 +++++++-------- docs/reference/sumSeries.html | 126 ++++++++--------- docs/reference/tempTrend.html | 124 ++++++++--------- vignettes/VoCC.Rmd | 23 +++- 29 files changed, 1291 insertions(+), 1593 deletions(-) create mode 100644 _pkgdown.yml diff --git a/.Rbuildignore b/.Rbuildignore index b8ad5dc..94d5c04 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -10,3 +10,6 @@ ^data-raw$ ^README\.Rmd$ ^LICENSE\.md$ +^_pkgdown\.yml$ +^docs$ +^pkgdown$ diff --git a/.gitignore b/.gitignore index 97e604b..1354af4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ .DS_Store /doc/ /Meta/ +docs diff --git a/DESCRIPTION b/DESCRIPTION index 11b8cdb..c897d9a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: VoCC Title: The Velocity of Climate Change and related climatic metrics -Version: 1.0.1 +Version: 0.0.1 Authors@R: c(person("Jorge", "Garcia Molinos", email = "jorgegmolinos@arc.hokudai.ac.jp", role = c("aut", "cre")), person("David", "S. Schoeman", email = "", role = "aut"), person("Christopher", "J. Brown", email = "", role = "aut"), @@ -29,13 +29,9 @@ Imports: terra, xts Suggests: - gridExtra, knitr, - mapplots, ncdf4, patchwork, - rasterVis, - repmis, rmarkdown, scales, tidyterra, diff --git a/_pkgdown.yml b/_pkgdown.yml new file mode 100644 index 0000000..d71acfb --- /dev/null +++ b/_pkgdown.yml @@ -0,0 +1,4 @@ +url: ~ +template: + bootstrap: 5 + diff --git a/docs/404.html b/docs/404.html index 142ebb3..bd6f0bf 100644 --- a/docs/404.html +++ b/docs/404.html @@ -4,100 +4,72 @@ - + Page not found (404) • VoCC - - - - - - - + + + + + - - - -
    -
    -
    - Content not found. Please use links in the navbar. -
    - - - +
    - -
    - diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 59ada21..9e898d8 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -1,49 +1,35 @@ -GNU Affero General Public License • VoCC +GNU Affero General Public License • VoCC + Skip to contents -
    -
    -
    - +
    +
    +
    @@ -236,26 +222,19 @@

    How to Apply These Terms

    -
    +
    - +
    - - -
    - +
    diff --git a/docs/articles/VoCC.html b/docs/articles/VoCC.html index e863c8a..3f07ebf 100644 --- a/docs/articles/VoCC.html +++ b/docs/articles/VoCC.html @@ -4,77 +4,65 @@ - + VoCC • VoCC - - - - - - - + + + + + - + + Skip to contents -
    -
    -
    - - diff --git a/docs/articles/index.html b/docs/articles/index.html index 0828f76..9bc9b67 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -1,72 +1,55 @@ -Articles • VoCC - - -
    -
    -
    - +
    +
    +

    All vignettes

    -

    +
    VoCC
    -
    -
    +
    -
    - +
    diff --git a/docs/authors.html b/docs/authors.html index e1b10ae..a429f4b 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -1,52 +1,38 @@ -Authors and Citation • VoCC - - -
    -
    -
    -
    - +
    +
    +
    +
    + +
    +

    Authors

    • Jorge Garcia Molinos. Author, maintainer. @@ -69,42 +55,37 @@

      Authors and Citation

    -
    -
    -

    Citation

    - Source: DESCRIPTION -
    -
    +
    +

    Citation

    +

    Source: DESCRIPTION

    -

    Garcia Molinos J, S. Schoeman D, J. Brown C, T. Burrows M (2025). +

    Garcia Molinos J, S. Schoeman D, J. Brown C, T. Burrows M (2025). VoCC: The Velocity of Climate Change and related climatic metrics. -R package version 1.0.1, https://github.com/JorGarMol/VoCC. +R package version 0.0.1, https://github.com/JorGarMol/VoCC.

    -
    @Manual{,
    +      
    @Manual{,
       title = {VoCC: The Velocity of Climate Change and related climatic metrics},
       author = {Jorge {Garcia Molinos} and David {S. Schoeman} and Christopher {J. Brown} and Michael {T. Burrows}},
       year = {2025},
    -  note = {R package version 1.0.1},
    +  note = {R package version 0.0.1},
       url = {https://github.com/JorGarMol/VoCC},
     }
    +
    -
    - -
    - +
    -
    - +
    diff --git a/docs/index.html b/docs/index.html index fb9d291..d59a276 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,68 +4,49 @@ - + The Velocity of Climate Change and related climatic metrics • VoCC - - - - - - + + + + + + - - - - -
    -
    -
    -
    +
    +
    +
    +
    @@ -97,10 +78,7 @@

    Citation

    -
    - - - diff --git a/docs/pkgdown.js b/docs/pkgdown.js index 6f0eee4..1a99c65 100644 --- a/docs/pkgdown.js +++ b/docs/pkgdown.js @@ -2,83 +2,43 @@ (function($) { $(function() { - $('.navbar-fixed-top').headroom(); + $('nav.navbar').headroom(); - $('body').css('padding-top', $('.navbar').height() + 10); - $(window).resize(function(){ - $('body').css('padding-top', $('.navbar').height() + 10); + Toc.init({ + $nav: $("#toc"), + $scope: $("main h2, main h3, main h4, main h5, main h6") }); - $('[data-toggle="tooltip"]').tooltip(); - - var cur_path = paths(location.pathname); - var links = $("#navbar ul li a"); - var max_length = -1; - var pos = -1; - for (var i = 0; i < links.length; i++) { - if (links[i].getAttribute("href") === "#") - continue; - // Ignore external links - if (links[i].host !== location.host) - continue; - - var nav_path = paths(links[i].pathname); - - var length = prefix_length(nav_path, cur_path); - if (length > max_length) { - max_length = length; - pos = i; - } - } - - // Add class to parent
  • , and enclosing
  • if in dropdown - if (pos >= 0) { - var menu_anchor = $(links[pos]); - menu_anchor.parent().addClass("active"); - menu_anchor.closest("li.dropdown").addClass("active"); - } - }); - - function paths(pathname) { - var pieces = pathname.split("/"); - pieces.shift(); // always starts with / - - var end = pieces[pieces.length - 1]; - if (end === "index.html" || end === "") - pieces.pop(); - return(pieces); - } - - // Returns -1 if not found - function prefix_length(needle, haystack) { - if (needle.length > haystack.length) - return(-1); - - // Special case for length-0 haystack, since for loop won't run - if (haystack.length === 0) { - return(needle.length === 0 ? 0 : -1); + if ($('#toc').length) { + $('body').scrollspy({ + target: '#toc', + offset: $("nav.navbar").outerHeight() + 1 + }); } - for (var i = 0; i < haystack.length; i++) { - if (needle[i] != haystack[i]) - return(i); - } + // Activate popovers + $('[data-bs-toggle="popover"]').popover({ + container: 'body', + html: true, + trigger: 'focus', + placement: "top", + sanitize: false, + }); - return(haystack.length); - } + $('[data-bs-toggle="tooltip"]').tooltip(); /* Clipboard --------------------------*/ function changeTooltipMessage(element, msg) { - var tooltipOriginalTitle=element.getAttribute('data-original-title'); - element.setAttribute('data-original-title', msg); + var tooltipOriginalTitle=element.getAttribute('data-bs-original-title'); + element.setAttribute('data-bs-original-title', msg); $(element).tooltip('show'); - element.setAttribute('data-original-title', tooltipOriginalTitle); + element.setAttribute('data-bs-original-title', tooltipOriginalTitle); } if(ClipboardJS.isSupported()) { $(document).ready(function() { - var copyButton = ""; + var copyButton = ""; $("div.sourceCode").addClass("hasCopyButton"); @@ -89,20 +49,114 @@ $('.btn-copy-ex').tooltip({container: 'body'}); // Initialize clipboard: - var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { + var clipboard = new ClipboardJS('[data-clipboard-copy]', { text: function(trigger) { return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); } }); - clipboardBtnCopies.on('success', function(e) { + clipboard.on('success', function(e) { changeTooltipMessage(e.trigger, 'Copied!'); e.clearSelection(); }); - clipboardBtnCopies.on('error', function() { + clipboard.on('error', function(e) { changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); }); + }); } + + /* Search marking --------------------------*/ + var url = new URL(window.location.href); + var toMark = url.searchParams.get("q"); + var mark = new Mark("main#main"); + if (toMark) { + mark.mark(toMark, { + accuracy: { + value: "complementary", + limiters: [",", ".", ":", "/"], + } + }); + } + + /* Search --------------------------*/ + /* Adapted from https://github.com/rstudio/bookdown/blob/2d692ba4b61f1e466c92e78fd712b0ab08c11d31/inst/resources/bs4_book/bs4_book.js#L25 */ + // Initialise search index on focus + var fuse; + $("#search-input").focus(async function(e) { + if (fuse) { + return; + } + + $(e.target).addClass("loading"); + var response = await fetch($("#search-input").data("search-index")); + var data = await response.json(); + + var options = { + keys: ["what", "text", "code"], + ignoreLocation: true, + threshold: 0.1, + includeMatches: true, + includeScore: true, + }; + fuse = new Fuse(data, options); + + $(e.target).removeClass("loading"); + }); + + // Use algolia autocomplete + var options = { + autoselect: true, + debug: true, + hint: false, + minLength: 2, + }; + var q; +async function searchFuse(query, callback) { + await fuse; + + var items; + if (!fuse) { + items = []; + } else { + q = query; + var results = fuse.search(query, { limit: 20 }); + items = results + .filter((x) => x.score <= 0.75) + .map((x) => x.item); + if (items.length === 0) { + items = [{dir:"Sorry 😿",previous_headings:"",title:"No results found.",what:"No results found.",path:window.location.href}]; + } + } + callback(items); +} + $("#search-input").autocomplete(options, [ + { + name: "content", + source: searchFuse, + templates: { + suggestion: (s) => { + if (s.title == s.what) { + return `${s.dir} >
    ${s.title}
    `; + } else if (s.previous_headings == "") { + return `${s.dir} >
    ${s.title}
    > ${s.what}`; + } else { + return `${s.dir} >
    ${s.title}
    > ${s.previous_headings} > ${s.what}`; + } + }, + }, + }, + ]).on('autocomplete:selected', function(event, s) { + window.location.href = s.path + "?q=" + q + "#" + s.id; + }); + }); })(window.jQuery || window.$) + +document.addEventListener('keydown', function(event) { + // Check if the pressed key is '/' + if (event.key === '/') { + event.preventDefault(); // Prevent any default action associated with the '/' key + document.getElementById('search-input').focus(); // Set focus to the search input + } +}); diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 44eb1cd..9a23dc3 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -3,4 +3,4 @@ pkgdown: 2.1.3 pkgdown_sha: ~ articles: VoCC: VoCC.html -last_built: 2025-08-27T06:12Z +last_built: 2025-08-27T10:58Z diff --git a/docs/reference/EEZ.html b/docs/reference/EEZ.html index 1d253de..f005b12 100644 --- a/docs/reference/EEZ.html +++ b/docs/reference/EEZ.html @@ -1,86 +1,67 @@ -Icelandic Exclusive Economic Zone (EEZ) — EEZ • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Icelandic Exclusive Economic Zone (v10).

    -
    -

    Format

    +
    +

    Format

    A spatial polygon data frame containing the Icenalndic EEZ (200 NM).

    -
    -

    Source

    +
    +

    Source

    Marineregions.org http://www.marineregions.org/downloads.php

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/HSST.html b/docs/reference/HSST.html index 9d2add4..f112b0d 100644 --- a/docs/reference/HSST.html +++ b/docs/reference/HSST.html @@ -1,90 +1,71 @@ -Monthly mean sea surface temperatures (SST) around Iceland for 1955-2010 — HSST • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Monthly mean sea surface temperatures (SST) around Iceland for 1955-2010

    -
    -

    Format

    +
    +

    Format

    A raster stack with 672 layers containing mean monthly SSTs (C) at 1-deg resolution for the period Jan 1955 to Dec 2010 for the Atlantic waters surrounding Iceland.

    -
    -

    Source

    +
    +

    Source

    Hadley Centre data set HadISST 1.1 (data accessed May 2018).

    -
    -

    References

    +
    +

    References

    Rayner et al. 2003. Global analyses of sea surface temperature, sea ice, and night marine air temperature since the late nineteenth century. J. Geophys. Res.Vol. 108: 4407.

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/JapTC.html b/docs/reference/JapTC.html index 125bc92..2f3b101 100644 --- a/docs/reference/JapTC.html +++ b/docs/reference/JapTC.html @@ -1,57 +1,45 @@ -Multivariate Terraclimate data for Japan — JapTC • VoCCMultivariate Terraclimate data for Japan — JapTC • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Historical (1960-1969) and present (2008-2017) multivariate 1/24 Terraclimate data set (Abatzoglou et al. 2018), extracted for the Japanese archipelago and including 3 variables: mean annual monthly precipitation (mm), @@ -59,39 +47,35 @@

    Multivariate Terraclimate data for Japan

    -
    -

    Format

    +
    +

    Format

    A raster stack with 9 layers for the historical (1960-1969) and current (2008-2017) average (AnMn) and standard deviation (AnMnSD) of the mean annual (AnMn) precipitation (Ppr), maximum (Tmax) and minimum (Tmin) temperature.

    -
    -

    Source

    +
    +

    Source

    Terraclimate data set.

    -
    -

    References

    +
    +

    References

    Abatzoglou et al. 2018. Terraclimate, a high-resolution global dataset of monthly climate and climatic water balance from 1958-2015, Scientific Data, 5: 170191

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/angulo.html b/docs/reference/angulo.html index 95b8a11..4a1a4e2 100644 --- a/docs/reference/angulo.html +++ b/docs/reference/angulo.html @@ -1,63 +1,49 @@ -Internal. Angle associated to the spatial gradient — angulo • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Internal. Angle associated to the spatial gradient

    -
    +
    +

    Usage

    angulo(dx, dy)
    -
    -

    Arguments

    +
    +

    Arguments

    dx
    @@ -68,29 +54,25 @@

    Arguments

    numeric giving the latitudinal gradient component

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos and David S. Schoeman angulo()

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/climPCA.html b/docs/reference/climPCA.html index 6bd21bd..effb0a6 100644 --- a/docs/reference/climPCA.html +++ b/docs/reference/climPCA.html @@ -1,60 +1,47 @@ -Reduce dimensionality of climate predictors via Principal Component Analysis — climPCA • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to extract the first n principal components explaining a predefined total amount of variance among climatic variables. These components can subsequently be used as synthetic climatic variables to reduce dimensionality in climate-analogue methods.

    -
    +
    +

    Usage

    climPCA(
       climp,
       climf,
    @@ -65,8 +52,8 @@ 

    Reduce dimensionality of climate predictors via Principal Component Analysis )

    -
    -

    Arguments

    +
    +

    Arguments

    climp
    @@ -94,23 +81,23 @@

    Arguments

    numeric threshold giving the minimum amount of total variance that should be explained by the principal components extracted.

    -
    -

    Value

    +
    +

    Value

    a list containing (i) the output from the PCA (call to 'prcomp'), and (ii) a table with the present/future cell values for the principal components accounting for the specified percentage of total variance (th).

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     JapTC <- VoCC_get_data("JapTC.tif")
     
    @@ -124,23 +111,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/climPlot.html b/docs/reference/climPlot.html index 5c13c9b..428b4fa 100644 --- a/docs/reference/climPlot.html +++ b/docs/reference/climPlot.html @@ -1,63 +1,49 @@ -Binned scatter plot for 2-dimensional climate space — climPlot • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to create a binned scatter plot of two climate variables.

    -
    +
    +

    Usage

    climPlot(xy, x.binSize, y.binSize, x.name = "V1", y.name = "V2")
    -
    -

    Arguments

    +
    +

    Arguments

    xy
    @@ -80,23 +66,23 @@

    Arguments

    character the variable name for the second variable. Used to label the plot.

    -
    -

    Value

    +
    +

    Value

    A series of plot objects displaying the (i) present and (ii) future cell frequency for each combination of local climates, and (iii) the location of remnant, novel and disappearing climates between both periods.

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos and Naoki H. Kumagai

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     JapTC <- VoCC_get_data("JapTC.tif")
     
    @@ -120,23 +106,19 @@ 

    Examples

    } # }
    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/dVoCC.html b/docs/reference/dVoCC.html index 582301e..8a2b0af 100644 --- a/docs/reference/dVoCC.html +++ b/docs/reference/dVoCC.html @@ -1,64 +1,53 @@ -Distance-based velocity based on geographically closest climate analogue — dVoCC • VoCCDistance-based velocity based on geographically closest climate analogue — dVoCC • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to calculate the geographically closest climate analogues and related distance-based velocity. Cell analogues are identified by comparing the baseline climatic conditions at each focal cell with those existing for all other (target) cells in the future by reference to a specified climatic threshold. The function allows for the specification of search distances and incorporates both least-cost path and Great Circle (as-the-crow-flies) distances.

    -
    +
    +

    Usage

    dVoCC(
       clim,
       n,
    @@ -72,8 +61,8 @@ 

    Distance-based velocity based on geographically closest climate analogue

    )
    -
    -

    Arguments

    +
    +

    Arguments

    clim
    @@ -123,27 +112,27 @@

    Arguments

    logical is the analysis to be done in unprojected (lon/lat) coordinates?

    -
    -

    Value

    +
    +

    Value

    A data.frame containing the cell id of the future analogue for each focal cell (NA = no analogue available), together with the climatic ("climDis") and geographical ("geoDis") distances in input units, the bearing ("ang", degrees North), and resulting climate velocity ("vel", km/yr). Mean climatic distances are returned for multivariate analogues.

    -
    -

    References

    +
    +

    References

    Ohlemuller et al. 2006. Towards European climate risk surfaces: the extent and distribution of analogous and non-analogous climates 1931-2100. Global Ecology and Biogeography, 15, 395-405.
    Hamann et al. 2015. Velocity of climate change algorithms for guiding conservation and management. Global Change Biology, 21, 997-1004.
    Garcia Molinos et al. 2017. Improving the interpretability of climate landscape metrics: An ecological risk analysis of Japan's Marine Protected Areas. Global Change Biology, 23, 4440-4452.

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     JapTC <- VoCC_get_data("JapTC.tif")
     
    @@ -183,23 +172,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/gVoCC.html b/docs/reference/gVoCC.html index 02d77e3..4674fdb 100644 --- a/docs/reference/gVoCC.html +++ b/docs/reference/gVoCC.html @@ -1,65 +1,52 @@ -Gradient-based climate velocity — gVoCC • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to calculate the velocity of climate change after Burrows et al. (2011) based on local climatic temporal trends and spatial gradients.

    -
    +
    +

    Usage

    gVoCC(tempTrend, spatGrad)
    -
    -

    Arguments

    +
    +

    Arguments

    tempTrend
    @@ -70,28 +57,28 @@

    Arguments

    The output from the spatGrad function containing the magnitudes and angles for the spatial climatic gradient.

    -
    -

    Value

    +
    +

    Value

    A RasterStack containing the climate velocity magnitude ("voccMag", km/yr for unprojected rasters and spatial unit/year for projected rasters) and angle("voccAng" in degrees north: 0N, 90E, 180S and 270W).

    -
    -

    References

    +
    +

    References

    Burrows et al. 2011. The pace of shifting climate in marine and terrestrial ecosystems. Science, 334, 652-655.

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     HSST <- VoCC_get_data("HSST.tif")
     yrSST <- sumSeries(HSST,
    @@ -109,23 +96,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/index.html b/docs/reference/index.html index 3ea2346..3e59af6 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -1,129 +1,144 @@ -Package index • VoCC - - -
    -
    -
    - +
    +
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    All functions

    -

    -
    -

    EEZ

    -

    Icelandic Exclusive Economic Zone (EEZ)

    -

    HSST

    -

    Monthly mean sea surface temperatures (SST) around Iceland for 1955-2010

    -

    JapTC

    -

    Multivariate Terraclimate data for Japan

    -

    angulo()

    -

    Internal. Angle associated to the spatial gradient

    -

    climPCA()

    -

    Reduce dimensionality of climate predictors via Principal Component Analysis

    -

    climPlot()

    -

    Binned scatter plot for 2-dimensional climate space

    -

    dVoCC()

    -

    Distance-based velocity based on geographically closest climate analogue

    -

    gVoCC()

    -

    Gradient-based climate velocity

    -

    resTime()

    -

    Climatic residence time of a polygon

    -

    shiftTime()

    -

    Shift in timing of seasonal climatology

    -

    spatGrad()

    -

    Local spatial climatic gradients

    -

    splitLine()

    -

    Internal. Split a line segment defined by points A-B into n parts

    -

    sumSeries()

    -

    Summarize climatic series to higher temporal resolution

    -

    tempTrend()

    -

    Long-term local climatic trends

    - - -
    +
    +

    All functions

    -
    -
    -

    Site built with pkgdown 2.1.3.

    + +
    + + + + +
    + + EEZ + +
    +
    Icelandic Exclusive Economic Zone (EEZ)
    +
    + + HSST + +
    +
    Monthly mean sea surface temperatures (SST) around Iceland for 1955-2010
    +
    + + JapTC + +
    +
    Multivariate Terraclimate data for Japan
    +
    + + angulo() + +
    +
    Internal. Angle associated to the spatial gradient
    +
    + + climPCA() + +
    +
    Reduce dimensionality of climate predictors via Principal Component Analysis
    +
    + + climPlot() + +
    +
    Binned scatter plot for 2-dimensional climate space
    +
    + + dVoCC() + +
    +
    Distance-based velocity based on geographically closest climate analogue
    +
    + + gVoCC() + +
    +
    Gradient-based climate velocity
    +
    + + resTime() + +
    +
    Climatic residence time of a polygon
    +
    + + shiftTime() + +
    +
    Shift in timing of seasonal climatology
    +
    + + spatGrad() + +
    +
    Local spatial climatic gradients
    +
    + + splitLine() + +
    +
    Internal. Split a line segment defined by points A-B into n parts
    +
    + + sumSeries() + +
    +
    Summarize climatic series to higher temporal resolution
    +
    + + tempTrend() + +
    +
    Long-term local climatic trends
    +
    +
    + + +
    -
    + +
    diff --git a/docs/reference/pipe.html b/docs/reference/pipe.html index cc95e9b..274b2e4 100644 --- a/docs/reference/pipe.html +++ b/docs/reference/pipe.html @@ -1,63 +1,49 @@ -Pipe operator — %>% • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    See magrittr::%>% for details.

    -
    +
    +

    Usage

    lhs %>% rhs
    -
    -

    Arguments

    +
    +

    Arguments

    lhs
    @@ -68,28 +54,24 @@

    Arguments

    A function call using the magrittr semantics.

    -
    -

    Value

    +
    +

    Value

    The result of calling `rhs(lhs)`.

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/resTime.html b/docs/reference/resTime.html index 0bea70a..433f344 100644 --- a/docs/reference/resTime.html +++ b/docs/reference/resTime.html @@ -1,63 +1,49 @@ -Climatic residence time of a polygon — resTime • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to calculate VoCC-based residence time of isotherms within a polygon after Loaire et al. (2009)

    -
    +
    +

    Usage

    resTime(pg, vel, areapg = NA)
    -
    -

    Arguments

    +
    +

    Arguments

    pg
    @@ -73,26 +59,26 @@

    Arguments

    vector with the area (in km2) of the polygons. Use NA (default) to calculate internally if field not avilable.

    -
    -

    Value

    +
    +

    Value

    a data.frame containing for each polygon its ID, mean velocity (km/yr), diameter of the equivalent circle (km), and residence time (years) as the ratio D/vel.

    -
    -

    References

    +
    +

    References

    Loarie et al. 2009. The velocity of climate change. Nature, 462, 1052-1055.

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos

    -
    -

    Examples

    +
    +

    Examples

    
     # Load example Exclusive Economic Zone polygon
     if (FALSE) { # \dontrun{
    @@ -130,23 +116,19 @@ 

    Examples

    } # }
    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/shiftTime.html b/docs/reference/shiftTime.html index b22a4cc..ce47934 100644 --- a/docs/reference/shiftTime.html +++ b/docs/reference/shiftTime.html @@ -1,65 +1,52 @@ -Shift in timing of seasonal climatology — shiftTime • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to calculate the seasonal shift in the arriving of typical seasonal climates for a given period of interest as per Burrows et al. (2011).

    -
    +
    +

    Usage

    shiftTime(r, yr1, yr2, yr0, th, m)
    -
    -

    Arguments

    +
    +

    Arguments

    r
    @@ -88,23 +75,23 @@

    Arguments

    integer number (1-12) of the month for which the shift is to be calculated

    -
    -

    Value

    +
    +

    Value

    a stack with the long-term monthly trend (C/year for temperature in degrees; "mTrend"), seasonal rate of change (C/month; "seaRate"), and seasonal shift (day/decade; "seaShift").

    -
    -

    References

    +
    +

    References

    Burrows et al. 2011. The pace of shifting climate in marine and terrestrial ecosystems. Science, 334, 652-655.

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos and Michael T. Burrows

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     HSST <- VoCC_get_data("HSST.tif")
     Apr <- shiftTime(HSST, yr1 = 1960, yr2 = 2009, yr0 = 1955, th = 10, m = 4)
    @@ -113,23 +100,19 @@ 

    Examples

    } # }
    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/spatGrad.html b/docs/reference/spatGrad.html index 7600ef9..e117514 100644 --- a/docs/reference/spatGrad.html +++ b/docs/reference/spatGrad.html @@ -1,67 +1,55 @@ -Local spatial climatic gradients — spatGrad • VoCCLocal spatial climatic gradients — spatGrad • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to calculate the magnitude and direction of the spatial gradient associated to a climatic variable after Burrows et al. (2011). This trend is to be used for the calculation of the gradient-based climate velocity using gVoCC.

    -
    +
    +

    Usage

    spatGrad(r, th = -Inf, projected = FALSE)
    -
    -

    Arguments

    +
    +

    Arguments

    r
    @@ -80,27 +68,27 @@

    Arguments

    If FALSE (default) a correction will be made to account for latitudinal distortion.

    -
    -

    Value

    +
    +

    Value

    A RasterStack with the magnitude of the spatial gradient (Grad in C per km for unprojected rasters and C per spatial unit for projected rasters), and the associated angle (Ang in degrees).

    -
    -

    References

    +
    +

    References

    Burrows et al. 2011. The pace of shifting climate in marine and terrestrial ecosystems. Science, 334, 652-655.

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos, David S. Schoeman, and Michael T. Burrows

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     HSST <- VoCC_get_data("HSST.tif")
     
    @@ -118,23 +106,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/splitLine.html b/docs/reference/splitLine.html index bdda379..22df91f 100644 --- a/docs/reference/splitLine.html +++ b/docs/reference/splitLine.html @@ -1,63 +1,49 @@ -Internal. Split a line segment defined by points A-B into n parts — splitLine • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Internal. Split a line segment defined by points A-B into n parts

    -
    +
    +

    Usage

    splitLine(A, B, n)
    -
    -

    Arguments

    +
    +

    Arguments

    A
    @@ -72,28 +58,24 @@

    Arguments

    numeric number of segments to divide the distance between points with

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/sumSeries.html b/docs/reference/sumSeries.html index 33288aa..ce16cce 100644 --- a/docs/reference/sumSeries.html +++ b/docs/reference/sumSeries.html @@ -1,58 +1,47 @@ -Summarize climatic series to higher temporal resolution — sumSeries • VoCCSummarize climatic series to higher temporal resolution — sumSeries • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to convert climatic series (provided as RasterStack) into a coarser time frequency series for a period of interest. This function transforms the RasterStack into an xts time series object to extract the values for the period of interest and @@ -60,7 +49,8 @@

    Summarize climatic series to higher temporal resolution

    in the package xts (Ryan and Ulrich 2017).

    -
    +
    +

    Usage

    sumSeries(
       r,
       p,
    @@ -72,8 +62,8 @@ 

    Summarize climatic series to higher temporal resolution

    )
    -
    -

    Arguments

    +
    +

    Arguments

    r
    @@ -109,22 +99,22 @@

    Arguments

    allows for user-defined functions to be applied on the 'xts' time series object over the period of interest (see examples).

    -
    -

    Value

    +
    +

    Value

    A RasterStack with the new series.

    -
    -

    References

    +
    +

    References

    Ray and Ulrich. 2017. xts: eXtensible Time Series. R package version 0.10-1.
    Bengtsson 2018. matrixStats: Functions that Apply to Rows and Columns of Matrices (and to Vectors). R package version 0.53.1.

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     # Monthly mean SST (HadISST) data for Europe Jan-1950 to Dec-2010
     
    @@ -167,23 +157,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/docs/reference/tempTrend.html b/docs/reference/tempTrend.html index d3d32eb..a872b1c 100644 --- a/docs/reference/tempTrend.html +++ b/docs/reference/tempTrend.html @@ -1,67 +1,55 @@ -Long-term local climatic trends — tempTrend • VoCCLong-term local climatic trends — tempTrend • VoCC - - -
    -
    -
    - +
    +
    +
    -
    +

    Function to calculate temporal trend from a raster series of a climatic variable. This trend is to be used for the calculation of the gradient-based climate velocity using gVoCC.

    -
    +
    +

    Usage

    tempTrend(r, th)
    -
    -

    Arguments

    +
    +

    Arguments

    r
    @@ -74,24 +62,24 @@

    Arguments

    calculate the trend at each cell.

    -
    -

    Value

    +
    +

    Value

    A RasterStack containing the cell-specific temporal trends extracted from simple linear regressions of the climatic variable against time ("slpTrends" in degree Celsius per year), together with their standard errors ("seTrends") and statistical significance ("sigTrends").

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Jorge Garcia Molinos and Christopher J. Brown

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     HSST <- VoCC_get_data("HSST.tif")
     
    @@ -108,23 +96,19 @@ 

    Examples

    } # }
    -
    - -
    +
    -
    - +
    diff --git a/vignettes/VoCC.Rmd b/vignettes/VoCC.Rmd index 5c4d144..bb92f71 100644 --- a/vignettes/VoCC.Rmd +++ b/vignettes/VoCC.Rmd @@ -18,6 +18,7 @@ vignette: > Sys.setenv("R_PARALLELLY_AVAILABLECORES_FALLBACK" = "1") ``` +**THIS IS A WORK IN PROGRESS TO CONVERT THE OLD RASTER-BASED VOCC PACKAGE TO TERRA. NOT EVERYTHING WORKS YET. IN PARTICULAR CONNECTIVITY IS NOT IMPLEMENTED SO ONLY EXAMPLE 1 BELOW WORKS.** This vignette provides the code to reproduce the examples for the R package VoCC as presented in Garcia Molinos et al. (2019). Refer to the paper and the function documentation for details on function options, considerations on the argument choices and interepretation of output. @@ -25,7 +26,6 @@ For this tutorial we need the following packages (if not installed get them firs ```{r message=FALSE} library(VoCC) -# devtools::load_all() library(terra) library(tidyterra) library(ggplot2) @@ -133,8 +133,12 @@ marshift$DV <- terra::extract(abs(dv), terra::buffer(coords, buffer_size), ```{r} # fit the regression models Mgv <- lm(Shift^(1 / 4) ~ I((GV * 10)^(1 / 4)), data = marshift, weights = years_data) -Mdv <- lm(Shift^(1 / 4) ~ I((DV * 10)^(1 / 4)), data = marshift, weights = years_data) summary(Mgv) +``` + + +```{r} +Mdv <- lm(Shift^(1 / 4) ~ I((DV * 10)^(1 / 4)), data = marshift, weights = years_data) summary(Mdv) ``` @@ -145,40 +149,45 @@ Produce the observed vs predicted scatterplots with regression lines (Fig. 2 in p1 <- ggplot() + geom_spatraster(data = gv[[1]]) + - scale_fill_distiller(palette = "RdBu", direction = 1, limits = c(-50, 50)) + + scale_fill_distiller(palette = "RdBu", direction = -1, limits = c(-50, 50)) + ggtitle("Gradient-based vocc") + scale_x_continuous(expand = c(0,0)) + scale_y_continuous(expand = c(0,0)) p2 <- ggplot() + geom_spatraster(data = gv[[1]]) + - scale_fill_distiller(palette = "RdBu", direction = 1, limits = c(-20, 20)) + + scale_fill_distiller(palette = "RdBu", direction = -1, limits = c(-20, 20)) + ggtitle("Distance-based vocc") + scale_x_continuous(expand = c(0,0)) + scale_y_continuous(expand = c(0,0)) wrap_plots(p1, p2, ncol = 1) +``` + +```{r} # scatter plots with the resulting regression line -p1 <- ggplot(na.omit(marshift), aes(x = I((GV * 10)^(1 / 4)), y = Shift^(1 / 4))) + +p1 <- ggplot(na.omit(marshift), aes(x = (GV * 10)^(1 / 4), y = Shift^(1 / 4))) + geom_point(color = "grey") + geom_smooth(method = lm, se = FALSE) + theme_classic() + scale_color_brewer(palette = "Accent") + labs(x = "Predicted shift (x^1/4; km/yr)", y = "Observed shift (y^1/4; km/yr)") -p2 <- ggplot(na.omit(marshift), aes(x = I((DV * 10)^(1 / 4)), y = Shift^(1 / 4))) + + +p2 <- ggplot(na.omit(marshift), aes(x = (DV * 10)^(1 / 4), y = Shift^(1 / 4))) + geom_point(color = "grey") + geom_smooth(method = lm, se = FALSE) + theme_classic() + scale_color_brewer(palette = "Accent") + labs(x = "Predicted shift (x^1/4; km/yr)", y = "Observed shift (y^1/4; km/yr)") + wrap_plots(p1, p2, nrow = 1) ``` # Example 2: Analysis of climate exposure and connectivity in the Western Pacific Ocean -THIS CODE IS NOT OPERATIONAL YET. IN PARTICULAR, `voccTraj` HAS NOT BEEN UPDATED FOR `terra`. Standby for updates. +**THIS CODE IS NOT OPERATIONAL YET. IN PARTICULAR, `voccTraj` HAS NOT BEEN UPDATED FOR `terra`. Standby for updates.** In this example we use climate velocity trajectories (based on 1960-2009 mean annual SST) to analyse climate connectivity in the Western Pacific region and calculate the residence time corresponding to the exclusive economic zones in the region as an index of climatic exposure. First, we arrange the raster layers for analysis. From 87dad126b8706cd3d3006b423dcf829fd8b4648a Mon Sep 17 00:00:00 2001 From: Jason Everett Date: Thu, 28 Aug 2025 11:14:49 +1000 Subject: [PATCH 06/10] Update site --- _pkgdown.yml | 7 +- docs/404.html | 2 +- docs/LICENSE.html | 4 +- docs/articles/VoCC.html | 2 +- .../figure-html/unnamed-chunk-8-1.png | Bin 206340 -> 0 bytes .../figure-html/unnamed-chunk-8-2.png | Bin 35585 -> 0 bytes docs/articles/index.html | 4 +- docs/authors.html | 4 +- docs/bootstrap-toc.css | 60 --- docs/bootstrap-toc.js | 159 -------- docs/docsearch.css | 148 ------- docs/docsearch.js | 85 ---- docs/index.html | 2 +- docs/pkgdown.css | 384 ------------------ docs/pkgdown.yml | 2 +- docs/reference/EEZ.html | 4 +- docs/reference/HSST.html | 4 +- docs/reference/JapTC.html | 4 +- docs/reference/angulo.html | 4 +- docs/reference/climPCA.html | 4 +- docs/reference/climPlot.html | 4 +- docs/reference/dVoCC.html | 4 +- docs/reference/gVoCC.html | 4 +- docs/reference/index.html | 4 +- docs/reference/pipe.html | 4 +- docs/reference/resTime.html | 4 +- docs/reference/shiftTime.html | 4 +- docs/reference/spatGrad.html | 4 +- docs/reference/splitLine.html | 4 +- docs/reference/sumSeries.html | 4 +- docs/reference/tempTrend.html | 4 +- 31 files changed, 48 insertions(+), 879 deletions(-) delete mode 100644 docs/articles/VoCC_files/figure-html/unnamed-chunk-8-1.png delete mode 100644 docs/articles/VoCC_files/figure-html/unnamed-chunk-8-2.png delete mode 100644 docs/bootstrap-toc.css delete mode 100644 docs/bootstrap-toc.js delete mode 100644 docs/docsearch.css delete mode 100644 docs/docsearch.js delete mode 100644 docs/pkgdown.css diff --git a/_pkgdown.yml b/_pkgdown.yml index d71acfb..455962f 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,4 +1,9 @@ url: ~ template: bootstrap: 5 - + bslib: + toc: true + toc-expand: 3 +navbar: + structure: + right: [github, search] diff --git a/docs/404.html b/docs/404.html index bd6f0bf..2848c1e 100644 --- a/docs/404.html +++ b/docs/404.html @@ -33,10 +33,10 @@
  • diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 9e898d8..29d5c4f 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -17,9 +17,9 @@ diff --git a/docs/articles/VoCC.html b/docs/articles/VoCC.html index 3f07ebf..8095854 100644 --- a/docs/articles/VoCC.html +++ b/docs/articles/VoCC.html @@ -33,10 +33,10 @@ diff --git a/docs/articles/VoCC_files/figure-html/unnamed-chunk-8-1.png b/docs/articles/VoCC_files/figure-html/unnamed-chunk-8-1.png deleted file mode 100644 index db89be1d14893873de59109c8e3ddc71a7320a6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206340 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

    V?jB6 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 diff --git a/docs/articles/index.html b/docs/articles/index.html index 9bc9b67..5ca0849 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -17,9 +17,9 @@

    diff --git a/docs/authors.html b/docs/authors.html index a429f4b..2ab43f1 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -17,9 +17,9 @@ diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css deleted file mode 100644 index 5a85941..0000000 --- a/docs/bootstrap-toc.css +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ - -/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ - -/* All levels of nav */ -nav[data-toggle='toc'] .nav > li > a { - display: block; - padding: 4px 20px; - font-size: 13px; - font-weight: 500; - color: #767676; -} -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 19px; - color: #563d7c; - text-decoration: none; - background-color: transparent; - border-left: 1px solid #563d7c; -} -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 18px; - font-weight: bold; - color: #563d7c; - background-color: transparent; - border-left: 2px solid #563d7c; -} - -/* Nav: second level (shown on .active) */ -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} -nav[data-toggle='toc'] .nav .nav > li > a { - padding-top: 1px; - padding-bottom: 1px; - padding-left: 30px; - font-size: 12px; - font-weight: normal; -} -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 29px; -} -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 28px; - font-weight: 500; -} - -/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ -nav[data-toggle='toc'] .nav > .active > ul { - display: block; -} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js deleted file mode 100644 index 1cdd573..0000000 --- a/docs/bootstrap-toc.js +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ -(function() { - 'use strict'; - - window.Toc = { - helpers: { - // return all matching elements in the set, or their descendants - findOrFilter: function($el, selector) { - // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ - // http://stackoverflow.com/a/12731439/358804 - var $descendants = $el.find(selector); - return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); - }, - - generateUniqueIdBase: function(el) { - var text = $(el).text(); - var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); - return anchor || el.tagName.toLowerCase(); - }, - - generateUniqueId: function(el) { - var anchorBase = this.generateUniqueIdBase(el); - for (var i = 0; ; i++) { - var anchor = anchorBase; - if (i > 0) { - // add suffix - anchor += '-' + i; - } - // check if ID already exists - if (!document.getElementById(anchor)) { - return anchor; - } - } - }, - - generateAnchor: function(el) { - if (el.id) { - return el.id; - } else { - var anchor = this.generateUniqueId(el); - el.id = anchor; - return anchor; - } - }, - - createNavList: function() { - return $(''); - }, - - createChildNavList: function($parent) { - var $childList = this.createNavList(); - $parent.append($childList); - return $childList; - }, - - generateNavEl: function(anchor, text) { - var $a = $(''); - $a.attr('href', '#' + anchor); - $a.text(text); - var $li = $('
  • '); - $li.append($a); - return $li; - }, - - generateNavItem: function(headingEl) { - var anchor = this.generateAnchor(headingEl); - var $heading = $(headingEl); - var text = $heading.data('toc-text') || $heading.text(); - return this.generateNavEl(anchor, text); - }, - - // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). - getTopLevel: function($scope) { - for (var i = 1; i <= 6; i++) { - var $headings = this.findOrFilter($scope, 'h' + i); - if ($headings.length > 1) { - return i; - } - } - - return 1; - }, - - // returns the elements for the top level, and the next below it - getHeadings: function($scope, topLevel) { - var topSelector = 'h' + topLevel; - - var secondaryLevel = topLevel + 1; - var secondarySelector = 'h' + secondaryLevel; - - return this.findOrFilter($scope, topSelector + ',' + secondarySelector); - }, - - getNavLevel: function(el) { - return parseInt(el.tagName.charAt(1), 10); - }, - - populateNav: function($topContext, topLevel, $headings) { - var $context = $topContext; - var $prevNav; - - var helpers = this; - $headings.each(function(i, el) { - var $newNav = helpers.generateNavItem(el); - var navLevel = helpers.getNavLevel(el); - - // determine the proper $context - if (navLevel === topLevel) { - // use top level - $context = $topContext; - } else if ($prevNav && $context === $topContext) { - // create a new level of the tree and switch to it - $context = helpers.createChildNavList($prevNav); - } // else use the current $context - - $context.append($newNav); - - $prevNav = $newNav; - }); - }, - - parseOps: function(arg) { - var opts; - if (arg.jquery) { - opts = { - $nav: arg - }; - } else { - opts = arg; - } - opts.$scope = opts.$scope || $(document.body); - return opts; - } - }, - - // accepts a jQuery object, or an options object - init: function(opts) { - opts = this.helpers.parseOps(opts); - - // ensure that the data attribute is in place for styling - opts.$nav.attr('data-toggle', 'toc'); - - var $topContext = this.helpers.createChildNavList(opts.$nav); - var topLevel = this.helpers.getTopLevel(opts.$scope); - var $headings = this.helpers.getHeadings(opts.$scope, topLevel); - this.helpers.populateNav($topContext, topLevel, $headings); - } - }; - - $(function() { - $('nav[data-toggle="toc"]').each(function(i, el) { - var $nav = $(el); - Toc.init($nav); - }); - }); -})(); diff --git a/docs/docsearch.css b/docs/docsearch.css deleted file mode 100644 index e5f1fe1..0000000 --- a/docs/docsearch.css +++ /dev/null @@ -1,148 +0,0 @@ -/* Docsearch -------------------------------------------------------------- */ -/* - Source: https://github.com/algolia/docsearch/ - License: MIT -*/ - -.algolia-autocomplete { - display: block; - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1 -} - -.algolia-autocomplete .ds-dropdown-menu { - width: 100%; - min-width: none; - max-width: none; - padding: .75rem 0; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); -} - -@media (min-width:768px) { - .algolia-autocomplete .ds-dropdown-menu { - width: 175% - } -} - -.algolia-autocomplete .ds-dropdown-menu::before { - display: none -} - -.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { - padding: 0; - background-color: rgb(255,255,255); - border: 0; - max-height: 80vh; -} - -.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { - margin-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion { - padding: 0; - overflow: visible -} - -.algolia-autocomplete .algolia-docsearch-suggestion--category-header { - padding: .125rem 1rem; - margin-top: 0; - font-size: 1.3em; - font-weight: 500; - color: #00008B; - border-bottom: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { - float: none; - padding-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { - float: none; - width: auto; - padding: 0; - text-align: left -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content { - float: none; - width: auto; - padding: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content::before { - display: none -} - -.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { - padding-top: .75rem; - margin-top: .75rem; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { - display: block; - padding: .1rem 1rem; - margin-bottom: 0.1; - font-size: 1.0em; - font-weight: 400 - /* display: none */ -} - -.algolia-autocomplete .algolia-docsearch-suggestion--title { - display: block; - padding: .25rem 1rem; - margin-bottom: 0; - font-size: 0.9em; - font-weight: 400 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--text { - padding: 0 1rem .5rem; - margin-top: -.25rem; - font-size: 0.8em; - font-weight: 400; - line-height: 1.25 -} - -.algolia-autocomplete .algolia-docsearch-footer { - width: 110px; - height: 20px; - z-index: 3; - margin-top: 10.66667px; - float: right; - font-size: 0; - line-height: 0; -} - -.algolia-autocomplete .algolia-docsearch-footer--logo { - background-image: url("data:image/svg+xml;utf8,"); - background-repeat: no-repeat; - background-position: 50%; - background-size: 100%; - overflow: hidden; - text-indent: -9000px; - width: 100%; - height: 100%; - display: block; - transform: translate(-8px); -} - -.algolia-autocomplete .algolia-docsearch-suggestion--highlight { - color: #FF8C00; - background: rgba(232, 189, 54, 0.1) -} - - -.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { - box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) -} - -.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { - background-color: rgba(192, 192, 192, .15) -} diff --git a/docs/docsearch.js b/docs/docsearch.js deleted file mode 100644 index b35504c..0000000 --- a/docs/docsearch.js +++ /dev/null @@ -1,85 +0,0 @@ -$(function() { - - // register a handler to move the focus to the search bar - // upon pressing shift + "/" (i.e. "?") - $(document).on('keydown', function(e) { - if (e.shiftKey && e.keyCode == 191) { - e.preventDefault(); - $("#search-input").focus(); - } - }); - - $(document).ready(function() { - // do keyword highlighting - /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ - var mark = function() { - - var referrer = document.URL ; - var paramKey = "q" ; - - if (referrer.indexOf("?") !== -1) { - var qs = referrer.substr(referrer.indexOf('?') + 1); - var qs_noanchor = qs.split('#')[0]; - var qsa = qs_noanchor.split('&'); - var keyword = ""; - - for (var i = 0; i < qsa.length; i++) { - var currentParam = qsa[i].split('='); - - if (currentParam.length !== 2) { - continue; - } - - if (currentParam[0] == paramKey) { - keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); - } - } - - if (keyword !== "") { - $(".contents").unmark({ - done: function() { - $(".contents").mark(keyword); - } - }); - } - } - }; - - mark(); - }); -}); - -/* Search term highlighting ------------------------------*/ - -function matchedWords(hit) { - var words = []; - - var hierarchy = hit._highlightResult.hierarchy; - // loop to fetch from lvl0, lvl1, etc. - for (var idx in hierarchy) { - words = words.concat(hierarchy[idx].matchedWords); - } - - var content = hit._highlightResult.content; - if (content) { - words = words.concat(content.matchedWords); - } - - // return unique words - var words_uniq = [...new Set(words)]; - return words_uniq; -} - -function updateHitURL(hit) { - - var words = matchedWords(hit); - var url = ""; - - if (hit.anchor) { - url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; - } else { - url = hit.url + '?q=' + escape(words.join(" ")); - } - - return url; -} diff --git a/docs/index.html b/docs/index.html index d59a276..8b9ec05 100644 --- a/docs/index.html +++ b/docs/index.html @@ -35,10 +35,10 @@ diff --git a/docs/pkgdown.css b/docs/pkgdown.css deleted file mode 100644 index 80ea5b8..0000000 --- a/docs/pkgdown.css +++ /dev/null @@ -1,384 +0,0 @@ -/* Sticky footer */ - -/** - * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ - * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css - * - * .Site -> body > .container - * .Site-content -> body > .container .row - * .footer -> footer - * - * Key idea seems to be to ensure that .container and __all its parents__ - * have height set to 100% - * - */ - -html, body { - height: 100%; -} - -body { - position: relative; -} - -body > .container { - display: flex; - height: 100%; - flex-direction: column; -} - -body > .container .row { - flex: 1 0 auto; -} - -footer { - margin-top: 45px; - padding: 35px 0 36px; - border-top: 1px solid #e5e5e5; - color: #666; - display: flex; - flex-shrink: 0; -} -footer p { - margin-bottom: 0; -} -footer div { - flex: 1; -} -footer .pkgdown { - text-align: right; -} -footer p { - margin-bottom: 0; -} - -img.icon { - float: right; -} - -/* Ensure in-page images don't run outside their container */ -.contents img { - max-width: 100%; - height: auto; -} - -/* Fix bug in bootstrap (only seen in firefox) */ -summary { - display: list-item; -} - -/* Typographic tweaking ---------------------------------*/ - -.contents .page-header { - margin-top: calc(-60px + 1em); -} - -dd { - margin-left: 3em; -} - -/* Section anchors ---------------------------------*/ - -a.anchor { - display: none; - margin-left: 5px; - width: 20px; - height: 20px; - - background-image: url(./link.svg); - background-repeat: no-repeat; - background-size: 20px 20px; - background-position: center center; -} - -h1:hover .anchor, -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - display: inline-block; -} - -/* Fixes for fixed navbar --------------------------*/ - -.contents h1, .contents h2, .contents h3, .contents h4 { - padding-top: 60px; - margin-top: -40px; -} - -/* Navbar submenu --------------------------*/ - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu>.dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover>.dropdown-menu { - display: block; -} - -.dropdown-submenu>a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} - -.dropdown-submenu:hover>a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left>.dropdown-menu { - left: -100%; - margin-left: 10px; - border-radius: 6px 0 6px 6px; -} - -/* Sidebar --------------------------*/ - -#pkgdown-sidebar { - margin-top: 30px; - position: -webkit-sticky; - position: sticky; - top: 70px; -} - -#pkgdown-sidebar h2 { - font-size: 1.5em; - margin-top: 1em; -} - -#pkgdown-sidebar h2:first-child { - margin-top: 0; -} - -#pkgdown-sidebar .list-unstyled li { - margin-bottom: 0.5em; -} - -/* bootstrap-toc tweaks ------------------------------------------------------*/ - -/* All levels of nav */ - -nav[data-toggle='toc'] .nav > li > a { - padding: 4px 20px 4px 6px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; -} - -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 5px; - color: inherit; - border-left: 1px solid #878787; -} - -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 5px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; - border-left: 2px solid #878787; -} - -/* Nav: second level (shown on .active) */ - -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} - -nav[data-toggle='toc'] .nav .nav > li > a { - padding-left: 16px; - font-size: 1.35rem; -} - -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 15px; -} - -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 15px; - font-weight: 500; - font-size: 1.35rem; -} - -/* orcid ------------------------------------------------------------------- */ - -.orcid { - font-size: 16px; - color: #A6CE39; - /* margins are required by official ORCID trademark and display guidelines */ - margin-left:4px; - margin-right:4px; - vertical-align: middle; -} - -/* Reference index & topics ----------------------------------------------- */ - -.ref-index th {font-weight: normal;} - -.ref-index td {vertical-align: top; min-width: 100px} -.ref-index .icon {width: 40px;} -.ref-index .alias {width: 40%;} -.ref-index-icons .alias {width: calc(40% - 40px);} -.ref-index .title {width: 60%;} - -.ref-arguments th {text-align: right; padding-right: 10px;} -.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} -.ref-arguments .name {width: 20%;} -.ref-arguments .desc {width: 80%;} - -/* Nice scrolling for wide elements --------------------------------------- */ - -table { - display: block; - overflow: auto; -} - -/* Syntax highlighting ---------------------------------------------------- */ - -pre, code, pre code { - background-color: #f8f8f8; - color: #333; -} -pre, pre code { - white-space: pre-wrap; - word-break: break-all; - overflow-wrap: break-word; -} - -pre { - border: 1px solid #eee; -} - -pre .img, pre .r-plt { - margin: 5px 0; -} - -pre .img img, pre .r-plt img { - background-color: #fff; -} - -code a, pre a { - color: #375f84; -} - -a.sourceLine:hover { - text-decoration: none; -} - -.fl {color: #1514b5;} -.fu {color: #000000;} /* function */ -.ch,.st {color: #036a07;} /* string */ -.kw {color: #264D66;} /* keyword */ -.co {color: #888888;} /* comment */ - -.error {font-weight: bolder;} -.warning {font-weight: bolder;} - -/* Clipboard --------------------------*/ - -.hasCopyButton { - position: relative; -} - -.btn-copy-ex { - position: absolute; - right: 0; - top: 0; - visibility: hidden; -} - -.hasCopyButton:hover button.btn-copy-ex { - visibility: visible; -} - -/* headroom.js ------------------------ */ - -.headroom { - will-change: transform; - transition: transform 200ms linear; -} -.headroom--pinned { - transform: translateY(0%); -} -.headroom--unpinned { - transform: translateY(-100%); -} - -/* mark.js ----------------------------*/ - -mark { - background-color: rgba(255, 255, 51, 0.5); - border-bottom: 2px solid rgba(255, 153, 51, 0.3); - padding: 1px; -} - -/* vertical spacing after htmlwidgets */ -.html-widget { - margin-bottom: 10px; -} - -/* fontawesome ------------------------ */ - -.fab { - font-family: "Font Awesome 5 Brands" !important; -} - -/* don't display links in code chunks when printing */ -/* source: https://stackoverflow.com/a/10781533 */ -@media print { - code a:link:after, code a:visited:after { - content: ""; - } -} - -/* Section anchors --------------------------------- - Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 -*/ - -div.csl-bib-body { } -div.csl-entry { - clear: both; -} -.hanging-indent div.csl-entry { - margin-left:2em; - text-indent:-2em; -} -div.csl-left-margin { - min-width:2em; - float:left; -} -div.csl-right-inline { - margin-left:2em; - padding-left:1em; -} -div.csl-indent { - margin-left: 2em; -} diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 9a23dc3..4f84c37 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -3,4 +3,4 @@ pkgdown: 2.1.3 pkgdown_sha: ~ articles: VoCC: VoCC.html -last_built: 2025-08-27T10:58Z +last_built: 2025-08-27T22:02Z diff --git a/docs/reference/EEZ.html b/docs/reference/EEZ.html index f005b12..9cc5385 100644 --- a/docs/reference/EEZ.html +++ b/docs/reference/EEZ.html @@ -17,9 +17,9 @@ diff --git a/docs/reference/HSST.html b/docs/reference/HSST.html index f112b0d..6043445 100644 --- a/docs/reference/HSST.html +++ b/docs/reference/HSST.html @@ -17,9 +17,9 @@ diff --git a/docs/reference/JapTC.html b/docs/reference/JapTC.html index 2f3b101..b6296f4 100644 --- a/docs/reference/JapTC.html +++ b/docs/reference/JapTC.html @@ -23,9 +23,9 @@ diff --git a/docs/reference/angulo.html b/docs/reference/angulo.html index 4a1a4e2..b23fad4 100644 --- a/docs/reference/angulo.html +++ b/docs/reference/angulo.html @@ -17,9 +17,9 @@ diff --git a/docs/reference/climPCA.html b/docs/reference/climPCA.html index effb0a6..8e0382b 100644 --- a/docs/reference/climPCA.html +++ b/docs/reference/climPCA.html @@ -19,9 +19,9 @@ diff --git a/docs/reference/climPlot.html b/docs/reference/climPlot.html index 428b4fa..6fc9958 100644 --- a/docs/reference/climPlot.html +++ b/docs/reference/climPlot.html @@ -17,9 +17,9 @@ diff --git a/docs/reference/dVoCC.html b/docs/reference/dVoCC.html index 8a2b0af..022e5dd 100644 --- a/docs/reference/dVoCC.html +++ b/docs/reference/dVoCC.html @@ -23,9 +23,9 @@ diff --git a/docs/reference/gVoCC.html b/docs/reference/gVoCC.html index 4674fdb..1f5ee2f 100644 --- a/docs/reference/gVoCC.html +++ b/docs/reference/gVoCC.html @@ -19,9 +19,9 @@ diff --git a/docs/reference/index.html b/docs/reference/index.html index 3e59af6..725f29b 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -17,9 +17,9 @@ diff --git a/docs/reference/pipe.html b/docs/reference/pipe.html index 274b2e4..bf4467a 100644 --- a/docs/reference/pipe.html +++ b/docs/reference/pipe.html @@ -17,9 +17,9 @@ diff --git a/docs/reference/resTime.html b/docs/reference/resTime.html index 433f344..0489630 100644 --- a/docs/reference/resTime.html +++ b/docs/reference/resTime.html @@ -17,9 +17,9 @@ diff --git a/docs/reference/shiftTime.html b/docs/reference/shiftTime.html index ce47934..7045537 100644 --- a/docs/reference/shiftTime.html +++ b/docs/reference/shiftTime.html @@ -19,9 +19,9 @@ diff --git a/docs/reference/spatGrad.html b/docs/reference/spatGrad.html index e117514..c446588 100644 --- a/docs/reference/spatGrad.html +++ b/docs/reference/spatGrad.html @@ -21,9 +21,9 @@ diff --git a/docs/reference/splitLine.html b/docs/reference/splitLine.html index 22df91f..96eaf93 100644 --- a/docs/reference/splitLine.html +++ b/docs/reference/splitLine.html @@ -17,9 +17,9 @@ diff --git a/docs/reference/sumSeries.html b/docs/reference/sumSeries.html index ce16cce..5597606 100644 --- a/docs/reference/sumSeries.html +++ b/docs/reference/sumSeries.html @@ -25,9 +25,9 @@ diff --git a/docs/reference/tempTrend.html b/docs/reference/tempTrend.html index a872b1c..23ed686 100644 --- a/docs/reference/tempTrend.html +++ b/docs/reference/tempTrend.html @@ -21,9 +21,9 @@ From 3c96eb66eee5985eaf26991bf542d1eaefd26569 Mon Sep 17 00:00:00 2001 From: Jason Everett Date: Thu, 28 Aug 2025 12:25:39 +1000 Subject: [PATCH 07/10] Update website --- .gitignore | 1 - DESCRIPTION | 4 +- docs/404.html | 2 +- docs/LICENSE.html | 4 +- docs/articles/VoCC.html | 6 +- .../figure-html/unnamed-chunk-10-1.png | Bin 0 -> 120239 bytes .../figure-html/unnamed-chunk-9-1.png | Bin 0 -> 211565 bytes docs/articles/index.html | 2 +- docs/authors.html | 8 +- .../bootstrap-5.3.1/bootstrap.bundle.min.js | 7 + .../bootstrap.bundle.min.js.map | 1 + docs/deps/bootstrap-5.3.1/bootstrap.min.css | 5 + .../bootstrap-toc-1.0.1/bootstrap-toc.min.js | 5 + .../deps/clipboard.js-2.0.11/clipboard.min.js | 7 + docs/deps/data-deps.txt | 13 + docs/deps/font-awesome-6.5.2/css/all.css | 8028 ++++++++++++ docs/deps/font-awesome-6.5.2/css/all.min.css | 9 + docs/deps/font-awesome-6.5.2/css/v4-shims.css | 2194 ++++ .../font-awesome-6.5.2/css/v4-shims.min.css | 6 + .../webfonts/fa-brands-400.ttf | Bin 0 -> 209128 bytes .../webfonts/fa-brands-400.woff2 | Bin 0 -> 117852 bytes .../webfonts/fa-regular-400.ttf | Bin 0 -> 67860 bytes .../webfonts/fa-regular-400.woff2 | Bin 0 -> 25392 bytes .../webfonts/fa-solid-900.ttf | Bin 0 -> 420332 bytes .../webfonts/fa-solid-900.woff2 | Bin 0 -> 156400 bytes .../webfonts/fa-v4compatibility.ttf | Bin 0 -> 10832 bytes .../webfonts/fa-v4compatibility.woff2 | Bin 0 -> 4792 bytes docs/deps/headroom-0.11.0/headroom.min.js | 7 + .../headroom-0.11.0/jQuery.headroom.min.js | 7 + docs/deps/jquery-3.6.0/jquery-3.6.0.js | 10881 ++++++++++++++++ docs/deps/jquery-3.6.0/jquery-3.6.0.min.js | 2 + docs/deps/jquery-3.6.0/jquery-3.6.0.min.map | 1 + .../search-1.0.0/autocomplete.jquery.min.js | 7 + docs/deps/search-1.0.0/fuse.min.js | 9 + docs/deps/search-1.0.0/mark.min.js | 7 + docs/index.html | 6 +- docs/katex-auto.js | 14 + docs/lightswitch.js | 85 + docs/pkgdown.yml | 2 +- docs/reference/EEZ.html | 4 +- docs/reference/HSST.html | 4 +- docs/reference/JapTC.html | 4 +- docs/reference/angulo.html | 4 +- docs/reference/climPCA.html | 4 +- docs/reference/climPlot.html | 4 +- docs/reference/dVoCC.html | 4 +- docs/reference/gVoCC.html | 4 +- docs/reference/index.html | 2 +- docs/reference/pipe.html | 4 +- docs/reference/resTime.html | 4 +- docs/reference/shiftTime.html | 4 +- docs/reference/spatGrad.html | 4 +- docs/reference/splitLine.html | 4 +- docs/reference/sumSeries.html | 4 +- docs/reference/tempTrend.html | 4 +- docs/search.json | 1 + 56 files changed, 21344 insertions(+), 49 deletions(-) create mode 100644 docs/articles/VoCC_files/figure-html/unnamed-chunk-10-1.png create mode 100644 docs/articles/VoCC_files/figure-html/unnamed-chunk-9-1.png create mode 100644 docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js create mode 100644 docs/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map create mode 100644 docs/deps/bootstrap-5.3.1/bootstrap.min.css create mode 100644 docs/deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js create mode 100644 docs/deps/clipboard.js-2.0.11/clipboard.min.js create mode 100644 docs/deps/data-deps.txt create mode 100644 docs/deps/font-awesome-6.5.2/css/all.css create mode 100644 docs/deps/font-awesome-6.5.2/css/all.min.css create mode 100644 docs/deps/font-awesome-6.5.2/css/v4-shims.css create mode 100644 docs/deps/font-awesome-6.5.2/css/v4-shims.min.css create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.ttf create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-brands-400.woff2 create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.ttf create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-regular-400.woff2 create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.ttf create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-solid-900.woff2 create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.ttf create mode 100644 docs/deps/font-awesome-6.5.2/webfonts/fa-v4compatibility.woff2 create mode 100644 docs/deps/headroom-0.11.0/headroom.min.js create mode 100644 docs/deps/headroom-0.11.0/jQuery.headroom.min.js create mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.js create mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.min.js create mode 100644 docs/deps/jquery-3.6.0/jquery-3.6.0.min.map create mode 100644 docs/deps/search-1.0.0/autocomplete.jquery.min.js create mode 100644 docs/deps/search-1.0.0/fuse.min.js create mode 100644 docs/deps/search-1.0.0/mark.min.js create mode 100644 docs/katex-auto.js create mode 100644 docs/lightswitch.js create mode 100644 docs/search.json diff --git a/.gitignore b/.gitignore index 1354af4..97e604b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,3 @@ .DS_Store /doc/ /Meta/ -docs diff --git a/DESCRIPTION b/DESCRIPTION index c897d9a..2d8b5f4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,8 +36,8 @@ Suggests: scales, tidyterra, VoCCdata -URL: https://github.com/JorGarMol/VoCC -BugReports: https://github.com/JorGarMol/VoCC/issues +URL: https://mathmarecol.github.io/VoCC/ +BugReports: https://github.com/MathMarEcol/VoCC/issues License: AGPL (>= 3) Encoding: UTF-8 LazyData: true diff --git a/docs/404.html b/docs/404.html index 2848c1e..baaac0b 100644 --- a/docs/404.html +++ b/docs/404.html @@ -33,7 +33,7 @@