## -----------------------------------------------------------------------------
library(BiocParallel)

## ----quick_start FUN----------------------------------------------------------
FUN <- function(x) { round(sqrt(x), 4) }

## ----quick_start registry-----------------------------------------------------
registered()

## ----configure_registry, eval=FALSE-------------------------------------------
# options(MulticoreParam=MulticoreParam(workers=4))

## ----quickstart_bplapply_default, eval=FALSE----------------------------------
# bplapply(1:4, FUN)

## ----quickstart_snow----------------------------------------------------------
param <- SnowParam(workers = 2, type = "SOCK")
bplapply(1:4, FUN, BPPARAM = param)

## ----BiocParallelParam_SerialParam--------------------------------------------
serialParam <- SerialParam()
serialParam

## ----BiocParallelParam_MulticoreParam-----------------------------------------
multicoreParam <- MulticoreParam(workers = 8)
multicoreParam

## ----register_registered------------------------------------------------------
registered()

## ----register_bpparam---------------------------------------------------------
bpparam()

## ----register_BatchtoolsParam-------------------------------------------------
default <- registered()
register(BatchtoolsParam(workers = 10), default = TRUE)

## ----register_BatchtoolsParam2------------------------------------------------
names(registered())
bpparam()

## ----register_restore---------------------------------------------------------
for (param in rev(default))
    register(param)

## ----error-vignette, eval=FALSE-----------------------------------------------
# browseVignettes("BiocParallel")

## ----use_cases_data-----------------------------------------------------------
library(RNAseqData.HNRNPC.bam.chr14)
fls <- RNAseqData.HNRNPC.bam.chr14_BAMFILES

## ----forking_gr, message=FALSE------------------------------------------------
library(GenomicAlignments) ## for GenomicRanges and readGAlignments()
gr <- GRanges("chr14", IRanges((1000:3999)*5000, width=1000))

## ----forking_param------------------------------------------------------------
param <- ScanBamParam(which=range(gr))

## ----forking_FUN--------------------------------------------------------------
FUN <- function(fl, param) {
    gal <- readGAlignments(fl, param = param)
    sum(countOverlaps(gr, gal))
}

## ----forking_default_multicore------------------------------------------------
MulticoreParam()

## ----db_problems, eval = FALSE------------------------------------------------
# library(org.Hs.eg.db)
# FUN <- function(x, ...) {
# ...
# mapIds(org.Hs.eg.db, ...)
# ...
# }
# bplapply(X, FUN, ..., BPPARAM = MulticoreParam())

## ----cluster_FUN--------------------------------------------------------------
FUN <- function(fl, param, gr) {
    suppressPackageStartupMessages({
        library(GenomicAlignments)
    })
    gal <- readGAlignments(fl, param = param)
    sum(countOverlaps(gr, gal))
}

## ----cluster_snow_param-------------------------------------------------------
snow <- SnowParam(workers = 2, type = "SOCK")

## ----cluster_bplapply---------------------------------------------------------
bplapply(fls[1:3], FUN, BPPARAM = snow, param = param, gr = gr)

## ----db_solution_2, eval = FALSE----------------------------------------------
# register(SnowParam()) # default evaluation
# bpstart() # start the cluster
# ...
# bplapply(X, FUN1, ...)
# ...
# bplapply(X, FUN2, ...) # re-use workers
# ...
# bpstop()

## ----cluster-MPI-work, eval=FALSE---------------------------------------------
# library(BiocParallel)
# library(Rmpi)
# FUN <- function(i) system("hostname", intern=TRUE)

## ----cluster-MPI, eval=FALSE--------------------------------------------------
# param <- SnowParam(mpi.universe.size() - 1, "MPI")
# register(param)

## ----cluster-MPI-do, eval=FALSE-----------------------------------------------
# xx <- bplapply(1:100, FUN)
# table(unlist(xx))
# mpi.quit()

## ----cluster-MPI-bpstart, eval=FALSE------------------------------------------
# param <- bpstart(SnowParam(mpi.universe.size() - 1, "MPI"))
# register(param)
# xx <- bplapply(1:100, FUN)
# bpstop(param)
# mpi.quit()

## ----slurm--------------------------------------------------------------------
tmpl <- system.file(package="batchtools", "templates", "slurm-simple.tmpl")
noquote(readLines(tmpl))

## ----cluster-batchtools, eval=FALSE-------------------------------------------
# ## define work to be done
# FUN <- function(i) system("hostname", intern=TRUE)
# library(BiocParallel)
# 
# ## register SLURM cluster instructions from the template file
# param <- BatchtoolsParam(workers=5, cluster="slurm", template=tmpl)
# register(param)
# 
# ## do work
# xx <- bplapply(1:100, FUN)
# table(unlist(xx))

## ----devel-bplapply-----------------------------------------------------------
system.time(x <- bplapply(1:3, function(i) { Sys.sleep(i); i }))

unlist(x)

## ----sessionInfo--------------------------------------------------------------
sessionInfo()