Nothing
#' Quantify droplets
#'
#' Cluster raw data from QX100 and QX200 systems.
#'
#' @aliases ddpcRquant
#' @param path \code{character} path to diectory with raw data.
#' @param threshold.int \code{numeric} probability of the threshold quantile.
#' @param reps \code{numeric} vector representing the number of replications.
#' @param blocks \code{numeric} vector representing the number of blocks.
#' @param threshold.manual if \code{numeric}, the value is used as the threshold. If
#' \code{NULL}, the threshold is calculated automatically.
#' @export
#' @note This function is a modification of code was implemented using the code found on
#' \url{http://www.ddpcrquant.ugent.be/}.
#' @return \code{\linkS4class{dpcr}} object.
#' @author Wim Trypsteen, Matthijs Vynck, Jan De Neve, Pawel Bonczkowski, Maja Kiselinova,
#' Eva Malatinkova, Karen Vervisch, Olivier Thas, Linos Vandekerckhove, Ward De Spiegelaere.
#' @references Trypsteen W, Vynck M, De Neve J, Bonczkowski P, Kiselinova M,
#' Malatinkova E, Vervisch K, Thas O, Vandekerckhove L, De Spiegelaere W,
#' \emph{ddpcRquant: Threshold Determination for Single Channel Droplet Digital PCR
#' Experiments}. Analytical and Bioanalytical Chemistry 2015. 407(19): p.5827-34.
#' @importFrom evd qgev fgev
ddpcRquant <- function(path, threshold.int = 0.9995, reps = 10, blocks = 150, threshold.manual = NULL) {
all_files <- list.files(path)
csv_files <- all_files[grepl("csv$", all_files)]
raw_data_files <- csv_files[grepl("Amplitude", all_files)]
summary_file <- read.csv(file = paste0(path, "/", csv_files[!grepl("Amplitude", all_files)]),
header = TRUE, row.names = NULL)
summary_file[, c("Well","Sample","TypeAssay","Assay")]
df2dpcr(do.call(rbind, lapply(unique(summary_file[["Assay"]]), function(single_assay) {
dat <- summary_file[summary_file[["Assay"]] == single_assay, c("Well","Sample","TypeAssay","Assay")]
channel <- as.numeric(substr(as.character(unique(dat[["TypeAssay"]])), 3, 3))
ntc_wells <- as.character(dat[grepl("NTC", dat[["Sample"]], ignore.case = TRUE), "Well"])
ntc_processed <- lapply(raw_data_files[sapply(ntc_wells, function(single_well) grep(single_well, raw_data_files))],
function(single_file) {
fluo_dat <- read.csv(file = paste0(path, "/", single_file), header = TRUE, row.names = NULL)[, channel]
corr_factor <- hsm(fluo_dat)
list(fluo_dat = fluo_dat - corr_factor,
corr_factor = corr_factor)
})
ntc_file <- unlist(lapply(ntc_processed, function(i) i[["fluo_dat"]]))
# deviation from original script, since we introduce mean
corr_factor <- mean(unlist(lapply(ntc_processed, function(i) i[["corr_factor"]])), na.rm = TRUE)
quantgev <- sapply(1L:reps, function(dummy_variable) {
### block creation
random_ntc_file <- sample(ntc_file)
### determine maxima of subsamples
signal.maxima <- sapply(base::split(random_ntc_file, ceiling(seq_along(ntc_file)/(length(ntc_file)/blocks))),
function(single_blocks)
max(single_blocks))
## fit the GEV model using ML
droplet.fit <- try(fgev(signal.maxima), silent=TRUE)
quantgev_value <- try(qgev(threshold.int, droplet.fit[["estimate"]][1],
droplet.fit[["estimate"]][2], droplet.fit[["estimate"]][3]), silent = TRUE)
unname(ifelse(quantgev_value > max(random_ntc_file) + 3000, NA, quantgev_value))
})
threshold <- if(threshold.manual == FALSE) {
#calculate final threshold
mean(quantgev, na.rm = TRUE)
} else {
threshold.manual
}
sample_wells <- sapply(as.character(dat[["Well"]]), function(single_well) grep(single_well, raw_data_files))
cbind(do.call(rbind, lapply(raw_data_files[sample_wells], function(single_file) {
fluo_dat <- sample(read.csv(file = paste0(path, "/", single_file),
header = TRUE, row.names = NULL)[, channel])
window <- subset(fluo_dat, fluo_dat < threshold + corr_factor)
window.mode <- hsm(window)
random_sample_file_corr <- fluo_dat - ifelse(is.na(window.mode), 0, window.mode)
data.frame(#file = single_file,
k = sum(random_sample_file_corr>threshold),
n = length(random_sample_file_corr),
v = 0.91,
uv = 0)
})), assay = single_assay, experiment = dat[["Sample"]], replicate = 1)
})))
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.