## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.align = "center"
)
set.seed(0)
library(dplyr)
library(multidplyr)
library(skytrackr)

## ----eval = TRUE--------------------------------------------------------------
library(skytrackr)
library(dplyr)
library(multidplyr)

# creating a fake dataset
# by duplicating data and
# renaming the logger
df1 <- skytrackr::cc876
df1$logger <- "CC888"
df2 <- skytrackr::cc876
df <- bind_rows(df1,df2)

## ----eval = TRUE--------------------------------------------------------------
# detect number of cores automatically
# n <- parallel::detectCores() - 1

# in this case I force them to two (2)
n <- 2

# create a new cluster
cluster <- new_cluster(n)

## ----eval = FALSE-------------------------------------------------------------
# # Make sure the "skytrackr" library
# # is made available
# cluster_library(cluster, "skytrackr")

## ----eval = TRUE--------------------------------------------------------------
# split tasks by logger
# across cluster partitions
df_logger <- df |>
  group_by(logger) |>
  partition(cluster)

print(df_logger)

## ----eval = FALSE-------------------------------------------------------------
# # run the analysis in parallel
# # on the cluster (local or remote)
# locations <- df_logger |>
#   group_by(logger) |>
#   do({
# 
#     # set seed per parallel unit
#     set.seed(1)
# 
#     # define land mask
#     mask <- stk_mask(
#       bbox  =  c(-20, -40, 60, 60),
#       buffer = 150, # in km
#       resolution = 0.5 # in degrees
#     )
# 
#     # define land mask with a bounding box
#     # and an off-shore buffer (in km), in addition
#     # you can specifiy the resolution of the resulting raster
#     mask <- stk_mask(
#       bbox  =  c(-20, -40, 60, 60), #xmin, ymin, xmax, ymax
#       buffer = 150, # in km
#       resolution = 0.5 # map grid in degrees
#     )
# 
#     # define a step selection distribution
#     ssf <- function(x, shape = 0.9, scale = 100, tolerance = 1500){
#       # normalize over expected range with km increments
#       norm <- sum(stats::dgamma(1:tolerance, shape = shape, scale = scale))
#       prob <- stats::dgamma(x, shape = shape, scale = scale) / norm
#       return(prob)
#     }
# 
#     skytrackr(
#       .data,
#       mask = mask,
#       step_selection = ssf,
#       plot = FALSE,
#       verbose = FALSE,
#       start_location = c(51.08, 3.73),
#       tolerance = 1500, # in km
#       scale = log(c(0.00001, 50)),
#       range = c(0.09, 148),
#       control = list(
#         sampler = 'DEzs',
#         settings = list(
#           burnin = 250,
#           iterations = 3000,
#           message = FALSE
#         )
#       )
#     )
#   })

## ----eval = FALSE-------------------------------------------------------------
# # drop the parallel processing info
# locations <- locations |>
#   as.data.frame()

