---
title: "outbreaker2: Rcpp API"
author: "Thibaut Jombart"
date: "`r Sys.Date()`"
output:
   rmarkdown::html_vignette:
     toc: true
     toc_depth: 2
vignette: >
  %\VignetteIndexEntry{Rcpp API}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---



# List of available functions

The C++ functions bound to R via Rcpp used in *outbreaker2* for priors,
likelihoods and movements are not visible to the user, as they are not exported
by the package. However, advanced users can access these functions using `get_cpp_api()`, which returns an environment with all relevant functions:

```{r}
library(outbreaker2) 

## get all functions in an environment
x <- get_cpp_api()
x

## check content
ls(x)

## all functions are Rcpp bindings to a C++ function
x$cpp_ll_all

```



# Function signatures

These functions take the following arguments:
```{r, arguments}

list_args <- lapply(x, args)[ls(x)]
list_args

```

Arguments are detailed in the next section.



# Arguments

Arguments of the Rcpp-bound C++ functions are:
```{r}

list_formals <- lapply(x, formals)
args <- sort(unique(unlist(lapply(list_formals, names))))
args

```

- **`alpha`**: a vector of integers of length 'N' (number of cases), indicating
    infectors of each case, with values from 1 to N; missing values should be
    `NA`

- **`config`**: a list containing configuration settings as returned by
    `create_config`

- **`custom_function`**: a R function for a custom prior, with a single
    argument, which must be a list of parameters and augmented data with the
    class `outbreaker_param`; returned values must be **on the log scale**

- **`custom_functions`**: a list of R functions obeying the rules of
`custom_function`, named according to the priors; currently available names are:

```{r, echo = FALSE} 

temp <- sub("cpp_prior_", "", ls(x, pattern = "cpp_prior.*"))
setdiff(temp, "all") 

```

- **`custom_ll`**: a R function for a custom likelihood, taking two arguments:
    `data` (see `data`), and `param` (see `param`)

- **`custom_prior`**: same as `custom_function`

- **`data`**: a valid 'outbreaker_data' list

- **`i`**: an integer scalar indicating the index of a case, from 1 to N (number of cases) 

- **`list_custom_ll`**: a list of R functions obeying the rules of `custom_ll`,
    named according to the computed likelihood component; available names are:

```{r, echo = FALSE}
temp <- sub("cpp_ll_", "", ls(x, pattern = "cpp_ll.*"))
setdiff(temp, c("timing", "all"))	    
```

- **`param`**: a list containing parameters and augmented data with the class
    `outbreaker_param`

- **`t_inf`**: a vector of integers of length N (number of cases), indicating
    infection dates of each case; missing values should be `NA`


- **`x`**: a vector of integers to be sampled from
