#' @import data.table
#'
#' @export
qPCR_mixes <- function(rxns,rxn.vol=10,template.working.conc=1,template.stock.conc=10,
primer.working.conc=0.2,primer.stock.conc=10,
enzyme.name="EVA Green",enzyme.stock.conc=5) {
rxns <- copy(rxns)
setDT(rxns)
targets <- unique(rxns$target) |> sort()
rxns[,c("sample","rxn.type","target"):=.(as.factor(sample),as.factor(rxn.type),as.factor(target))]
mixes <- mapply(FUN=function(target.name,n,
template.working.conc,
template.stock.conc,
primer.working.conc,
primer.stock.conc,
enzyme.name,
enzyme.stock.conc,
rxn.vol) {
MM.factor <- n + 1
mix <- NULL |>
.add_rxn_component(name="Template",
stock.conc=template.stock.conc,
working.conc=template.working.conc,
rxn.vol=rxn.vol,
MM=0) |>
.add_rxn_component(name=paste0(target.name,".primer.F"),
stock.conc=primer.stock.conc,
working.conc=primer.working.conc,
rxn.vol=rxn.vol,
MM=MM.factor) |>
.add_rxn_component(name=paste0(target.name,".primer.R"),
stock.conc=primer.stock.conc,
working.conc=primer.working.conc,
rxn.vol=rxn.vol,
MM=MM.factor) |>
.add_rxn_component(name=enzyme.name,
stock.conc=enzyme.stock.conc,
working.conc=1,
rxn.vol=rxn.vol,
MM=MM.factor)
colnames(mix) <- c("Volume",
paste0("Mastermix.vol.x.",as.character(MM.factor)),
"Stock.concentration",
"Working.concentration")
mix <- rbind(mix,"Water"=c(
rxn.vol - sum(mix[,1]),
(rxn.vol - sum(mix[,1])) * MM.factor,
NA,
NA
))
mix <- rbind(mix,"Total"=c(
rxn.vol,
sum(mix[,2]),
NA,
NA
))
mix <- rbind(mix,"Dose"=c(
NA,
mix[6,2] / MM.factor,
NA,
NA
))
return(mix)
},
targets,
rxns[,.N,by=target][order(target),N],
MoreArgs=list(template.working.conc=template.working.conc,
template.stock.conc=template.stock.conc,
primer.working.conc=primer.working.conc,
primer.stock.conc=primer.stock.conc,
enzyme.name=enzyme.name,
enzyme.stock.conc=enzyme.stock.conc,
rxn.vol=rxn.vol))
return(mixes)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.