R/qPCR_mixes.R

Defines functions FUN qPCR_mixes

#' @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)
}
dimitriskokoretsis/qpcrR documentation built on May 29, 2022, 10:11 p.m.