Nothing
## ----defineparent-------------------------------------------------------------
parent_plate_type.fam_border <- function(plate) {
"ddpcr_plate"
}
## ----defineparams-------------------------------------------------------------
define_params.fam_border <- function(plate) {
params <- NextMethod("define_params")
new_params <- list(
'REMOVE_FAILURES' = list(
'TOTAL_DROPS_T' = 14000 # overwriting an existing parameter
),
'GATE' = list(
'FAM_BORDER' = 5000 # defining a new parameter
)
)
params <- modifyList(params, new_params)
params
}
## ----defineclusters-----------------------------------------------------------
define_clusters.fam_border <- function(plate) {
clusters <- NextMethod("define_clusters")
c(clusters,
'FAM_POSITIVE',
'FAM_NEGATIVE'
)
}
## ----definesteps--------------------------------------------------------------
define_steps.fam_border <- function(plate) {
steps <- NextMethod("define_steps")
c(steps,
list(
'GATE' = 'gate_droplets'
))
}
## ----definegatestep-----------------------------------------------------------
gate_droplets <- function(plate) {
# make sure this step was not called prematurely
current_step <- step(plate, 'GATE')
check_step(plate, current_step)
# show an informative message to the user
step_begin("Classifying droplets as FAM-positive or negative")
data <- plate_data(plate)
border <- params(plate, 'GATE', 'FAM_BORDER')
# get a list of clusters that have not been considered yet in the analysis
# this is useful so that we only look at droplets that have not yet been
# assigned to a cluster
unanalyzed_clusters <- unanalyzed_clusters(plate, 'FAM_POSITIVE')
# get the indices of all droplets that are FAM-positive and negative
unanalyzed_idx <- data$cluster %in% unanalyzed_clusters
fam_pos <- unanalyzed_idx & data$FAM >= border
fam_neg <- unanalyzed_idx & data$FAM < border
# assign each droplet to its cluster
data[fam_pos, 'cluster'] <- cluster(plate, 'FAM_POSITIVE')
data[fam_neg, 'cluster'] <- cluster(plate, 'FAM_NEGATIVE')
# update the data on the plate object
plate_data(plate) <- data
# record how many drops in each well are in each cluster
# and add this info to the plate's metadata
drops_per_cluster <-
plyr::ddply(data, ~ well, function(x) {
data.frame(
'drops_positive' = sum(x$cluster == cluster(plate, 'FAM_POSITIVE')),
'drops_negative' = sum(x$cluster == cluster(plate, 'FAM_NEGATIVE'))
)
})
plate_meta(plate) <-
dplyr::left_join(
plate_meta(plate),
drops_per_cluster,
by = "well"
)
# VERY IMPORTANT - do not forget to update the status of the plate
status(plate) <- current_step
step_end()
plate
}
## ----defineplot---------------------------------------------------------------
plot.fam_border <- function(x, ..., show_border = FALSE) {
# Plot a regular ddpcr plate
p <- NextMethod("plot", x)
# Show the custom thresholds
if (show_border) {
border <- params(x, 'GATE', 'FAM_BORDER')
p <- p +
ggplot2::geom_hline(yintercept = border)
}
p
}
## ----defineborderparam--------------------------------------------------------
`fam_border<-` <- function(plate, value) {
params(plate, 'GATE', 'FAM_BORDER') <- value
plate
}
## ----customanalysis, fig.show='hold', out.width='50%', fig.retina=FALSE-------
library(ddpcr)
plate <- new_plate(dir = sample_data_dir(), type = "fam_border")
fam_border(plate) <- 8000
plate <- analyze(plate)
plot(plate, show_drops_empty = TRUE)
plot(plate, col_drops_fam_negative = "red",
col_drops_fam_positive = "blue", show_border = TRUE)
plate_meta(plate, only_used = TRUE)
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.