R/dimsum__convert_linked_adapters.R

Defines functions dimsum__convert_linked_adapters

Documented in dimsum__convert_linked_adapters

#' dimsum__convert_linked_adapters
#'
#' Convert to linked adapters if 3' constant region expected to be sequenced.
#'
#' @param dimsum_meta an experiment metadata object (required)
#'
#' @return An updated dimsum_meta object
#' @export
dimsum__convert_linked_adapters <- function(
  dimsum_meta){
  #Length of shortest variant sequence
  len_shortest <- nchar(dimsum_meta[['wildtypeSequence']])
  if(dimsum_meta[["indels"]]){
    if(!is.na(dimsum_meta[["indelLengths"]])){
      len_shortest <- min(len_shortest, dimsum_meta[["indelLengths"]])
    }else{
      len_shortest <- min(len_shortest, 1)
    }
  }
  #Loop over all experimental design entries
  for(i in 1:dim(dimsum_meta[['exp_design']])[1]){
    num_cut5f <- ifelse(is.na(dimsum_meta[['exp_design']][i,"cutadaptCut5First"]), 0, dimsum_meta[['exp_design']][i,"cutadaptCut5First"])
    num_cut5s <- ifelse(is.na(dimsum_meta[['exp_design']][i,"cutadaptCut5Second"]), 0, dimsum_meta[['exp_design']][i,"cutadaptCut5Second"])
    num_cut3f <- ifelse(is.na(dimsum_meta[['exp_design']][i,"cutadaptCut3First"]), 0, dimsum_meta[['exp_design']][i,"cutadaptCut3First"])
    num_cut3s <- ifelse(is.na(dimsum_meta[['exp_design']][i,"cutadaptCut3Second"]), 0, dimsum_meta[['exp_design']][i,"cutadaptCut3Second"])
    #Read 1
    #Check if constant regions specified
    if( !is.na(dimsum_meta[['exp_design']][i,"cutadapt5First"]) & !is.na(dimsum_meta[['exp_design']][i,"cutadapt3First"]) & !grepl("\\.\\.\\.", dimsum_meta[['exp_design']][i,"cutadapt3First"]) ){
      if( (dimsum_meta[['exp_design']][i,"pair1_length"]-num_cut5f-num_cut3f) > (nchar(dimsum_meta[['exp_design']][i,"cutadapt5First"]) + len_shortest) ){
        dimsum_meta[['exp_design']][i,"cutadapt3First"] <- paste0(dimsum_meta[['exp_design']][i,"cutadapt5First"], ";required...", dimsum_meta[['exp_design']][i,"cutadapt3First"], ";optional")
        dimsum_meta[['exp_design']][i,"cutadapt5First"] <- NA
      }
    }
    #Read2 (read1 lengths can be variable due to inconsistent barcode trimming with cutadapt version <2.3)
    #Check if constant regions specified
    if( !is.na(dimsum_meta[['exp_design']][i,"cutadapt5Second"]) & !is.na(dimsum_meta[['exp_design']][i,"cutadapt3Second"]) & !grepl("\\.\\.\\.", dimsum_meta[['exp_design']][i,"cutadapt3Second"]) ){
      if( (dimsum_meta[['exp_design']][i,"pair2_length"]-num_cut5s-num_cut3s) > (nchar(dimsum_meta[['exp_design']][i,"cutadapt5Second"]) + len_shortest) ){
        dimsum_meta[['exp_design']][i,"cutadapt3Second"] <- paste0(dimsum_meta[['exp_design']][i,"cutadapt5Second"], ";required...", dimsum_meta[['exp_design']][i,"cutadapt3Second"], ";optional")
        dimsum_meta[['exp_design']][i,"cutadapt5Second"] <- NA
      }
    }
  }
  return(dimsum_meta)
}
lehner-lab/DiMSum documentation built on April 10, 2024, 4:15 a.m.