R/dimsum__get_barcode_design.R

Defines functions dimsum__get_barcode_design

Documented in dimsum__get_barcode_design

#' dimsum__get_barcode_design
#'
#' Get, format and validate metadata from barcode design file.
#'
#' @param dimsum_meta an experiment metadata object (required)
#'
#' @return a data.frame with the validated barcode design 
#' @export
dimsum__get_barcode_design <- function(
  dimsum_meta
  ){
  #Check if barcodeDesignPath specified
  if(is.null(dimsum_meta[["barcodeDesignPath"]])){
    return(NULL)
  }

  #Load barcode design
  if(!file.exists(dimsum_meta[["barcodeDesignPath"]])){
    stop(paste0("Invalid '", "barcodeDesignPath", "' argument (file not found)"), call. = FALSE)
  }
  barcode_design <- read.table(dimsum_meta[["barcodeDesignPath"]], header = T, stringsAsFactors = F, sep="\t")

  #Set pair2 column equal to pair1 column if single-end library (contents of existing pair2 column will be ignored)
  if(!dimsum_meta[["paired"]]){
    if(!"pair1" %in% colnames(barcode_design)){
      stop(paste0("Mandatory column missing from barcodeDesign file ('pair1')"), call. = FALSE)
    }else{
      barcode_design[,"pair2"] <- barcode_design[,"pair1"]
    }
  }

  #Set barcode1 column equal to barcode column (backwards compatibility)
  if("barcode" %in% colnames(barcode_design)){
    barcode_design[,"barcode1"] <- barcode_design[,"barcode"]
  }

  #Set barcode1 column equal to barcode column (backwards compatibility)
  if(!"barcode2" %in% colnames(barcode_design)){
    barcode_design[,"barcode2"] <- barcode_design[,"barcode1"]
  }

  #Check whether barcode design is valid
  dimsum__check_barcode_design(barcode_design)

  #Check FASTQ files exist
  #Pair1 files
  for(i in unlist(barcode_design[,c("pair1")])){
    if(!file.exists(file.path(dimsum_meta[["fastqFileDir"]], i))){
      stop(paste0("Invalid FASTQ file name '", i, "' in barcodeDesign file (file not found)"), call. = FALSE)
    }
  }
  #Pair2 files
  for(i in unlist(barcode_design[,c("pair2")])){
    if(!file.exists(file.path(dimsum_meta[["fastqFileDir"]], i))){
      stop(paste0("Invalid FASTQ file name '", i, "' in barcodeDesign file (file not found)"), call. = FALSE)
    }
  }

  return(barcode_design)
}
lehner-lab/DiMSum documentation built on April 10, 2024, 4:15 a.m.