diff --git a/R/clean_DIANN.R b/R/clean_DIANN.R index 9aca175..7fbcfec 100644 --- a/R/clean_DIANN.R +++ b/R/clean_DIANN.R @@ -7,13 +7,15 @@ #' @param global_qvalue_cutoff Global Q-value cutoff #' @param qvalue_cutoff Q-value cutoff #' @param pg_qvalue_cutoff Protein group Q-value cutoff +#' @param annotation Annotation file or data frame #' @return NULL. Writes to file. #' @keywords internal reduceBigDIANN <- function(input_file, output_path, MBR = TRUE, quantificationColumn = "FragmentQuantCorrected", global_qvalue_cutoff = 0.01, qvalue_cutoff = 0.01, - pg_qvalue_cutoff = 0.01) { + pg_qvalue_cutoff = 0.01, + annotation = NULL) { if (grepl("csv", input_file)) { delim = "," } else if (grepl("tsv|xls", input_file)) { @@ -23,7 +25,7 @@ reduceBigDIANN <- function(input_file, output_path, MBR = TRUE, } diann_chunk <- function(x, pos) cleanDIANNChunk(x, output_path, MBR, quantificationColumn, pos, - global_qvalue_cutoff, qvalue_cutoff, pg_qvalue_cutoff) + global_qvalue_cutoff, qvalue_cutoff, pg_qvalue_cutoff, annotation) readr::read_delim_chunked(input_file, readr::DataFrameCallback$new(diann_chunk), @@ -41,13 +43,15 @@ reduceBigDIANN <- function(input_file, output_path, MBR = TRUE, #' @param global_qvalue_cutoff Global Q-value cutoff #' @param qvalue_cutoff Q-value cutoff #' @param pg_qvalue_cutoff Protein group Q-value cutoff -#' @importFrom MSstatsConvert MSstatsImport MSstatsClean +#' @param annotation Annotation file or data frame +#' @importFrom MSstatsConvert MSstatsImport MSstatsClean MSstatsMakeAnnotation #' @return NULL #' @keywords internal cleanDIANNChunk = function(input, output_path, MBR, quantificationColumn, pos, global_qvalue_cutoff = 0.01, qvalue_cutoff = 0.01, - pg_qvalue_cutoff = 0.01) { + pg_qvalue_cutoff = 0.01, + annotation = NULL) { input = MSstatsImport(list(input = input), "MSstats", "DIANN") input = MSstatsClean( @@ -58,6 +62,7 @@ cleanDIANNChunk = function(input, output_path, MBR, quantificationColumn, pos, qvalue_cutoff = qvalue_cutoff, pg_qvalue_cutoff = pg_qvalue_cutoff ) + input = MSstatsMakeAnnotation(input, annotation) .writeChunkToFile(input, output_path, pos) NULL } diff --git a/R/converters.R b/R/converters.R index e9ff703..6f3db0b 100644 --- a/R/converters.R +++ b/R/converters.R @@ -166,6 +166,7 @@ bigSpectronauttoMSstatsFormat <- function(input_file, output_file_name, #' into memory by using dplyr::collect function. #' bigDIANNtoMSstatsFormat <- function(input_file, + annotation = NULL, output_file_name, backend, MBR = TRUE, @@ -187,7 +188,7 @@ bigDIANNtoMSstatsFormat <- function(input_file, paste0("reduce_output_", output_file_name), MBR, quantificationColumn, - global_qvalue_cutoff, qvalue_cutoff, pg_qvalue_cutoff) + global_qvalue_cutoff, qvalue_cutoff, pg_qvalue_cutoff, annotation) # Preprocess the cleaned data (feature selection, etc.) msstats_data <- MSstatsPreprocessBig( diff --git a/tests/testthat/test-clean_DIANN.R b/tests/testthat/test-clean_DIANN.R new file mode 100644 index 0000000..b3b0bdb --- /dev/null +++ b/tests/testthat/test-clean_DIANN.R @@ -0,0 +1,39 @@ +library(testthat) +library(mockery) + +context("DIANN cleaning") + +test_that("cleanDIANNChunk passes annotation to MSstatsMakeAnnotation", { + # Prepare data + input_chunk <- data.frame(Run = "Run1", Intensity = 100) + annotation <- data.frame(Run = "Run1", Condition = "A", BioReplicate = 1) + + # Mocks + m_import <- mock(input_chunk) + m_clean <- mock(input_chunk) + m_annotate <- mock(merge(input_chunk, annotation, by = "Run")) + m_write <- mock(NULL) + + stub(cleanDIANNChunk, "MSstatsImport", m_import) + stub(cleanDIANNChunk, "MSstatsClean", m_clean) + stub(cleanDIANNChunk, "MSstatsMakeAnnotation", m_annotate) + stub(cleanDIANNChunk, ".writeChunkToFile", m_write) + + # Execute + cleanDIANNChunk(input_chunk, "output.csv", MBR = TRUE, + quantificationColumn = "Intensity", pos = 1, + annotation = annotation) + + # Verify + expect_called(m_annotate, 1) + + # Check arguments passed to MSstatsMakeAnnotation + args <- mock_args(m_annotate)[[1]] + expect_equal(args[[1]], input_chunk) # Input from Clean + expect_equal(args[[2]], annotation) # Annotation passed through + + # Check that the result of annotation is passed to write + expect_called(m_write, 1) + write_args <- mock_args(m_write)[[1]] + expect_equal(write_args[[1]], merge(input_chunk, annotation, by = "Run")) +}) \ No newline at end of file