Skip to main content

nonpareil

Nonpareil uses the redundancy of the reads in a metagenomic dataset to estimate the average coverage and predict the ammount of sequences that will be required to achieve "nearly complete coverage", defined as ≥95% or ≥99% average coverage.

Since Nonpareil main output has no model information, it is necessary to run its auxiliary R plot functions and save the curves object as a JSON file. Briefly, call function export_curve() on object curves (for an example, see snakemake wrapper):

base::library("jsonlite")
base::message("Exporting model as JSON")

export_curve <- function(object){
# Extract variables
n <- names(attributes(object))[c(1:12,21:29)]
x <- sapply(n, function(v) attr(object,v))
names(x) <- n
# Extract vectors
n <- names(attributes(object))[13:20]
y <- lapply(n, function(v) attr(object,v))
names(y) <- n
curve_json <- c(x, y)

# Add model
if (object$has.model) {
# https://github.com/lmrodriguezr/nonpareil/blob/162f1697ab1a21128e1857dd87fa93011e30c1ba/utils/Nonpareil/R/Nonpareil.R#L330-L332
x_min <- 1e3
x_max <- signif(tail(attr(object,"x.adj"), n=1)*10, 1)
x.model <- exp(seq(log(x_min), log(x_max), length.out=1e3))
y.model <- predict(object, lr=x.model)
curve_json <- append(curve_json, list(x.model=x.model))
curve_json <- append(curve_json, list(y.model=y.model))
}

base::print(curve_json)
curve_json
}

export_set <- function(object){
y <- lapply(object$np.curves, "export_curve")
names(y) <- sapply(object$np.curves, function(n) n$label)
jsonlite::prettify(toJSON(y, auto_unbox=TRUE))
}

y <- export_set(curves)
write(y, "output.json")

Module config options

The module plots a line graph for each sample, with a tab panel to switch between only observed data, only models, or both combined (model with a dashed line). It will use the colors specified in the JSON file by nonpareil and, if some is missing use one from a MultiQC colour scheme (default: Paired) that can be defined with:

nonpareil:
plot_colours: Paired