diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/CHANGELOG.md b/RNAseq/Workflow_Documentation/NF_RCP-F/CHANGELOG.md index eef3c524..8504f067 100644 --- a/RNAseq/Workflow_Documentation/NF_RCP-F/CHANGELOG.md +++ b/RNAseq/Workflow_Documentation/NF_RCP-F/CHANGELOG.md @@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Fixed + +- Workflow usage files will all follow output directory set by workflow user + +### Changed + +- TrimGalore! will now use autodetect for adaptor type +- V&V migrated from dp_tools version 1.1.8 to 1.3.2 including: + - Migration of V&V protocol code to this codebase instead of dp_tools + - Fix for sample wise checks reusing same sample + ## [1.0.3](https://github.com/nasa/GeneLab_Data_Processing/tree/NF_RCP-F_1.0.3/RNAseq/Workflow_Documentation/NF_RCP-F) - 2023-01-25 ### Added diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/bin/dge_annotation_R_scripts/Perform_DGE.Rmd b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/bin/dge_annotation_R_scripts/Perform_DGE.Rmd index 84358dc8..7fd93eb9 100644 --- a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/bin/dge_annotation_R_scripts/Perform_DGE.Rmd +++ b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/bin/dge_annotation_R_scripts/Perform_DGE.Rmd @@ -7,7 +7,6 @@ params: input_gene_results_dir: "" # One and only one of the following must be specified runsheet_path: NULL - isa_path: NULL primary_keytype: "" # Denotes the name of the indentifier column (e.g. ENSEMBL, TAIR) normalization: "default" # ENUM like, supports "ERCC-groupB" and "default" @@ -15,41 +14,63 @@ params: dge_output_prefix: "" DEBUG_MODE_LIMIT_GENES: FALSE DEBUG_MODE_ADD_DUMMY_COUNTS: FALSE - work_dir: "." # should be set to launch directory - verbose: FALSE + work_dir: "." # NON_DPPD: should be set to launch directory + SUMMARY_FILE_PATH: "summary.txt" --- ## Substeps {.tabset} ### 1. Setup - + ```{r, setup, include=FALSE} knitr::opts_knit$set(root.dir = params$work_dir) library(knitr) ``` -```{r libary-loading, message = params$verbose, warning = params$verbose} +```{r libary-loading} # allow more flexibility in download time # useful for slower connections where the default of 60 seconds might be exceeded options(timeout=600) -# Import libraries (tximport, DESeq2, tidyverse, Risa) +# Import libraries (tximport, DESeq2, tidyverse) library(tximport) library(DESeq2) library(stringr) params +SUMMARY_FILE_PATH <- params$SUMMARY_FILE_PATH yaml::write_yaml(params, "last_params.yml") -``` -```{r validate_params} -# assert either runsheet_path OR isa_path supplied in params -if (!xor(!is.null(params$runsheet_path), !is.null(params$isa_path))) { - stop("Must supply EITHER runsheet_path or isa_path in params") -} +# END:NON_DPPD + +# START:ONLY_DPPD +# params <- c( +# runsheet_path = "/path/to/runsheet", # Used for downloading +# input_gene_results_dir = "/path/to/genes_results_files", # Location of the gene results files +# primary_keytype = "", # Denotes the name of the indentifier column (e.g. ENSEMBL, TAIR) +# normalization = "", # ENUM like, supports "ERCC-groupB" and "default" +# normalized_counts_output_prefix = "", # Output prefix for normalized counts files +# dge_output_prefix = "" # Output prefix for DGE files +# ) +# END:ONLY_DPPD ``` ### 2. Load Study Metadata -```{r runsheet-to-compare_df, include=(!is.null(params$runsheet_path)), eval=(!is.null(params$runsheet_path))} +```{r runsheet-to-compare_df} +#' Calculate the square of a number +#' +#' This function takes a numeric input and returns its square. +#' +#' @param x Numeric value to be squared. +#' +#' @return The square of the input value. +#' +#' @examples +#' square(2) +#' # Output: 4 +#' +#' square(-3) +#' # Output: 9 +#' compare_csv_from_runsheet <- function(runsheet_path) { df = read.csv(runsheet_path) # get only Factor Value columns @@ -64,25 +85,6 @@ compare_csv <- compare_csv_from_runsheet(params$runsheet_path) #DT::datatable(compare_csv, caption = "Data Frame of parsed runsheet filtered to required columns") ``` -```{r isa-to-compare_df, include=(!is.null(params$isa_path)), eval=(!is.null(params$isa_path))} -# TODO: Remove this route, ISA zip support will be dropped as of DPPD-7101-F -library(Risa) - -compare_csv_from_isa_archive <- function(isa_path) { - td = tempdir() - unzip(isa_path, exdir = td) - isa <- Risa::readISAtab(path = td) - n = as.numeric(which(isa@assay.technology.types == "RNA Sequencing (RNA-Seq)")) - isa_tabs <- isa@assay.tabs[[n]]@assay.file - factors <- as.data.frame(isa@factors[[1]], stringsAsFactors = FALSE) - colnames(factors) <- paste("factor",1:dim(factors)[2], sep = "_") - return(data.frame(sample_id = isa_tabs$`Sample Name`, factors)) -} -# Loading metadata from isa archive -compare_csv <- compare_csv_from_isa_archive(params$isa_path) -#DT::datatable(compare_csv, caption = "Data Frame of parsed isa archive filtered to required metadata") -``` - ```{r compare_df-to-study_df} study <- as.data.frame(compare_csv[,2:dim(compare_csv)[2]]) colnames(study) <- colnames(compare_csv)[2:dim(compare_csv)[2]] @@ -130,8 +132,7 @@ files <- list.files( ## Reorder the *genes.results files to match the ordering of the ISA samples -# Replace spaces in sample names from ISA with "_", consistent with runsheet generation -samples = str_replace_all(rownames(study), " ", "_") +samples = rownames(study) reordering <- sapply(samples, function(x)grep(paste0("Rsem_gene_counts/", x,".genes.results$"), files, value=FALSE)) files <- files[reordering] names(files) <- samples @@ -335,12 +336,12 @@ output_table_1$LRT.p.value <- res_1_lrt@listData$padj ```{r wald-test-iteration} ## Iterate through Wald Tests to generate pairwise comparisons of all groups for (i in 1:dim(contrasts)[2]){ - res_1 <- results(dds_1, contrast=c("condition",contrasts[1,i],contrasts[2,i])) - res_1 <- as.data.frame(res_1@listData)[,c(2,4,5,6)] - colnames(res_1)<-c(paste0("Log2fc_",colnames(contrasts)[i]),paste0("Stat_",colnames(contrasts)[i]),paste0("P.value_",colnames(contrasts)[i]),paste0("Adj.p.value_",colnames(contrasts)[i])) - output_table_1<-cbind(output_table_1,res_1) - rm(res_1) + res_1 <- results(dds_1, contrast=c("condition",contrasts[1,i],contrasts[2,i])) + res_1 <- as.data.frame(res_1@listData)[,c(2,4,5,6)] + colnames(res_1)<-c(paste0("Log2fc_",colnames(contrasts)[i]),paste0("Stat_",colnames(contrasts)[i]),paste0("P.value_",colnames(contrasts)[i]),paste0("Adj.p.value_",colnames(contrasts)[i])) + output_table_1<-cbind(output_table_1,res_1) } + ``` ```{r} @@ -385,6 +386,16 @@ write.csv( sampleTable, file = paste0(params$dge_output_prefix, "SampleTable.csv") ) + +# Create summary file based on output_table_1 +output <- capture.output(summary(output_table_1)) + +# Open file connection +conn <- file(paste0(params$dge_output_prefix, "summary.txt"), "w") + +# Write the captured output to the file +writeLines(output, conn) + # DT::datatable(head(output_table_1, n = 30), # caption = "First 30 rows of differential gene expression table", # extensions = "FixedColumns", @@ -408,4 +419,4 @@ cat(capture.output(sessionInfo()), file = version_output_fn, append = TRUE, sep = "\n") -``` +``` \ No newline at end of file diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/bin/dge_annotation_R_scripts/dge_annotation_workflow.R b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/bin/dge_annotation_R_scripts/dge_annotation_workflow.R index fedf44d6..1d5965e0 100755 --- a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/bin/dge_annotation_R_scripts/dge_annotation_workflow.R +++ b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/bin/dge_annotation_R_scripts/dge_annotation_workflow.R @@ -4,10 +4,6 @@ library("here") library("cli") parser <- OptionParser() -parser <- add_option(parser, c("-v", "--verbose"), - action = "store_true", - default = FALSE, help = "Print extra output [default]" -) parser <- add_option(parser, c("--skip_perform_dge"), action = "store_true", default = FALSE, help = "Skips running the DGE, this can be used when the output from the DGE already exist", @@ -43,9 +39,6 @@ parser <- add_option(parser, c("--DEBUG_MODE_ADD_DUMMY_COUNTS"), default = FALSE, action = "store_true", help = "Replaces all gene counts with random values from 0 to 5000", ) -parser <- add_option(parser, c("--isa_path"), - help = "ISA Archive path, one of two allowed metadata inputs, exactly one metadata input must be supplied", -) parser <- add_option(parser, c("--runsheet_path"), help = "runsheet csv path, one of two allowed metadata inputs, exactly one metadata input must be supplied", ) @@ -69,14 +62,11 @@ if (!args$skip_perform_dge) { cli_alert_warning("Running Perform_DGE.Rmd") rmarkdown::render(here("dge_annotation_R_scripts", "Perform_DGE.Rmd"), output_dir = args$work_dir, - quiet = !args$verbose, params = list( work_dir = args$work_dir, - verbose = args$verbose, input_gene_results_dir = args$input_gene_results_dir, primary_keytype = args$primary_keytype, runsheet_path = args$runsheet_path, - isa_path = args$isa_path, normalization = args$normalization, dge_output_prefix = args$dge_output_prefix, normalized_counts_output_prefix = args$normalized_counts_output_prefix, @@ -93,7 +83,6 @@ if (!args$skip_gene_annotation) { cli_alert_warning("Running Add_Gene_Annotations.Rmd") rmarkdown::render(here("dge_annotation_R_scripts", "Add_Gene_Annotations.Rmd"), output_dir = args$work_dir, - quiet = !args$verbose, params = list( input_table_path = paste0(args$dge_output_prefix, "differential_expression_no_annotations.csv"), work_dir = args$work_dir, @@ -111,7 +100,6 @@ if (!args$skip_gene_annotation) { cli_alert_warning("Running Extend_DGE_Table.Rmd") rmarkdown::render(here("dge_annotation_R_scripts", "Extend_DGE_Table.Rmd"), output_dir = args$work_dir, - quiet = !args$verbose, params = list( input_table_path = paste0(args$dge_output_prefix, "differential_expression.csv"), work_dir = args$work_dir, @@ -128,7 +116,6 @@ if (!args$skip_gene_annotation) { cli_alert_warning("Running Generate_PCA_Table.Rmd") rmarkdown::render(here("dge_annotation_R_scripts", "Generate_PCA_Table.Rmd"), output_dir = args$work_dir, - quiet = !args$verbose, params = list( input_table_path = paste0(args$normalized_counts_output_prefix, "Normalized_Counts.csv"), work_dir = args$work_dir, diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/main.nf b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/main.nf index 916f3d88..477b1929 100644 --- a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/main.nf +++ b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/main.nf @@ -22,7 +22,7 @@ include { BUILD_STAR; CONCAT_ERCC; QUANTIFY_STAR_GENES; QUANTIFY_RSEM_GENES } from './modules/genome.nf' -include { DGE_BY_DESEQ2 } from './modules/dge.nf' +include { DGE_BY_DESEQ2 } from './modules/DGE_BY_DESEQ2' include { VV_RAW_READS; VV_TRIMMED_READS; VV_STAR_ALIGNMENTS; diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/modules/dge.nf b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/modules/DGE_BY_DESEQ2/main.nf similarity index 90% rename from RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/modules/dge.nf rename to RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/modules/DGE_BY_DESEQ2/main.nf index 00b09b05..e89d4e55 100644 --- a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/modules/dge.nf +++ b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/modules/DGE_BY_DESEQ2/main.nf @@ -28,6 +28,9 @@ process DGE_BY_DESEQ2 { path("dge_output_ercc/visualization_output_table_ERCCnorm.csv"), path("dge_output_ercc/visualization_PCA_table_ERCCnorm.csv"), optional: true, emit: dge_ercc + path("dge_output/summary.txt"), emit: summary + path("dge_output_ercc/ERCCnorm_summary.txt"), optional: true, emit: summary_ercc + path("versions.txt"), emit: version script: @@ -45,8 +48,7 @@ process DGE_BY_DESEQ2 { --dge_output_prefix "dge_output/" \\ --annotation_file_path ${annotation_file} \\ --extended_table_output_prefix "dge_output/"\\ - --extended_table_output_suffix ".csv" \\ - --verbose + --extended_table_output_suffix ".csv" if ${ meta.has_ercc ? 'true' : 'false'} then @@ -60,8 +62,8 @@ process DGE_BY_DESEQ2 { --dge_output_prefix "dge_output_ercc/ERCCnorm_" \\ --annotation_file_path ${annotation_file} \\ --extended_table_output_prefix "dge_output_ercc/"\\ - --extended_table_output_suffix "_ERCCnorm.csv" \\ - --verbose + --extended_table_output_suffix "_ERCCnorm.csv" fi + # bump """ -} +} \ No newline at end of file diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/DGE_BY_DESEQ2/DGE_BY_DESEQ2.nf.test b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/DGE_BY_DESEQ2/DGE_BY_DESEQ2.nf.test new file mode 100644 index 00000000..443c7188 --- /dev/null +++ b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/DGE_BY_DESEQ2/DGE_BY_DESEQ2.nf.test @@ -0,0 +1,71 @@ +nextflow_process { + + name "Test Process DGE_BY_DESEQ2" + script "modules/DGE_BY_DESEQ2/main.nf" + process "DGE_BY_DESEQ2" + + test("GLDS-194") { + tag 'DGE_BY_DESEQ2' + + when { + params { + // define parameters here. Example: + use_dummy_gene_counts = true + } + process { + """ + // define inputs of the process here. Example: + input[0] = file("test-datasets/testdata/GLDS-194/Metadata/GLDS-194_bulkRNASeq_v1_runsheet.csv") + input[1] = file("test-datasets/testdata/GLDS-194/03-RSEM_Counts/*.genes.results") + input[2] = [ primary_keytype:'ENSEMBL', has_ercc:true ] + input[3] = file("https://figshare.com/ndownloader/files/36597114") + input[4] = file("${ baseDir }/bin/dge_annotation_R_scripts.zip") + """ + } + } + + then { + assert process.success + assert snapshot( + process.out.summary, + process.out.norm_counts, + process.out.summary_ercc, + process.out.norm_counts_ercc, + process.out.version + ).match() + } + + } + + test("GLDS-321:55_.ISSUE") { + tag 'DGE_BY_DESEQ2' + + when { + params { + // define parameters here. Example: + use_dummy_gene_counts = true + } + process { + """ + // define inputs of the process here. Example: + input[0] = file("test-datasets/testdata/GLDS-321/Metadata/GLDS-321_bulkRNASeq_v1_runsheet.csv") + input[1] = file("test-datasets/testdata/GLDS-321/03-RSEM_Counts/*.genes.results") + input[2] = [ primary_keytype:'TAIR', has_ercc:false ] + input[3] = file("https://figshare.com/ndownloader/files/36597132") + input[4] = file("${ baseDir }/bin/dge_annotation_R_scripts.zip") + """ + } + } + + then { + assert process.success + assert snapshot( + process.out.summary, + process.out.norm_counts, + process.out.version, + ).match() + } + + } + +} \ No newline at end of file diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/DGE_BY_DESEQ2/DGE_BY_DESEQ2.nf.test.snap b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/DGE_BY_DESEQ2/DGE_BY_DESEQ2.nf.test.snap new file mode 100644 index 00000000..8223ca2a --- /dev/null +++ b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/DGE_BY_DESEQ2/DGE_BY_DESEQ2.nf.test.snap @@ -0,0 +1,42 @@ +{ + "GLDS-321:55_.ISSUE": { + "content": [ + [ + "summary.txt:md5,2ae67caf20a32f00b87e0f340a4c505b" + ], + [ + [ + "Normalized_Counts.csv:md5,c148732be1d0b1bb61278bfef612f07b", + "RSEM_Unnormalized_Counts.csv:md5,fd101e235076c3ae66c513bc96017b33" + ] + ], + [ + "versions.txt:md5,5fac4f3186014a43b8aa3b41d66b2311" + ] + ], + "timestamp": "2023-07-11T22:30:32+0000" + }, + "GLDS-194": { + "content": [ + [ + "summary.txt:md5,6c202fd3c11a747e40a49d1369e8875f" + ], + [ + [ + "Normalized_Counts.csv:md5,b4ba348d5446f8ba546a46b966087c1b", + "RSEM_Unnormalized_Counts.csv:md5,931c6070b5e19909929c5a217713500b" + ] + ], + [ + "ERCCnorm_summary.txt:md5,1f77ed6cd1a8435038859b0361f6b047" + ], + [ + "ERCC_Normalized_Counts.csv:md5,b1d9d5a546a23b6709a9f8c60548b6a7" + ], + [ + "versions.txt:md5,1865b6b8900d83ec7881f58fe301da11" + ] + ], + "timestamp": "2023-07-11T22:30:32+0000" + } +} \ No newline at end of file diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/dge.nf.test b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/dge.nf.test deleted file mode 100644 index d43f32c4..00000000 --- a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/dge.nf.test +++ /dev/null @@ -1,106 +0,0 @@ -nextflow_process { - - name "Test Process DGE_BY_DESEQ2" - script "modules/dge.nf" - process "DGE_BY_DESEQ2" - - test("Baseline_ON_GLDS-194:Should run without failures AND PASS VV VALIDATION") { - - when { - params { - // define parameters here. Example: - use_dummy_gene_counts = true - } - process { - """ - // define inputs of the process here. Example: - input[0] = file("test-datasets-extended/testdata/GLDS-194/Metadata/GLDS-194_bulkRNASeq_v1_runsheet.csv") - input[1] = file("test-datasets-extended/testdata/GLDS-194/03-RSEM_Counts/*.genes.results") - input[2] = [ primary_keytype:'ENSEMBL' ] - input[3] = file("https://figshare.com/ndownloader/files/36597114") - input[4] = file("${ baseDir }/bin/dge_annotation_R_scripts.zip") - """ - } - } - - then { - assert process.success - assert snapshot( - process.out.dge, - process.out.norm_counts, - process.out.dge_ercc, - process.out.norm_counts_ercc, - process.out.version, - ['Passes bulkRNASeq.checks.check_dge_table_group_columns_constraints' : true, 'dp_tools_version' : '1.1.8'] // MANUALLY Validated! - ).match() - } - - } - - test("ISSUE_55_ON_GLDS-321:Should run without failures AND PASS VV VALIDATION") { - - when { - params { - // define parameters here. Example: - use_dummy_gene_counts = true - } - process { - """ - // define inputs of the process here. Example: - input[0] = file("test-datasets-extended/testdata/GLDS-321/Metadata/GLDS-321_bulkRNASeq_v1_runsheet.csv") - input[1] = file("test-datasets-extended/testdata/GLDS-321/03-RSEM_Counts/*.genes.results") - input[2] = [ primary_keytype:'TAIR' ] - input[3] = file("https://figshare.com/ndownloader/files/36597132") - input[4] = file("${ baseDir }/bin/dge_annotation_R_scripts.zip") - """ - } - } - - then { - assert process.success - assert snapshot( - process.out.dge, - process.out.norm_counts, - // NON_ERCC process.out.dge_ercc, - // NON_ERCC process.out.norm_counts_ercc, - process.out.version, - ['Passes bulkRNASeq.checks.check_dge_table_group_columns_constraints' : true, 'dp_tools_version' : '1.1.8'] // MANUALLY Validated! - ).match() - } - - } - - test("ISSUE_55_ON_Mock:Should run without failures") { - - when { - params { - // define parameters here. Example: - use_dummy_gene_counts = true - } - process { - """ - // define inputs of the process here. Example: - input[0] = file("test-datasets-extended/testdata/mocks/overlapping_samplenames/MOCK_bulkRNASeq_v1_runsheet.csv") - input[1] = file("test-datasets-extended/testdata/mocks/overlapping_samplenames/*.genes.results") - input[2] = [ primary_keytype:'ENSEMBL' ] - input[3] = file("https://figshare.com/ndownloader/files/36597114") - input[4] = file("${ baseDir }/bin/dge_annotation_R_scripts.zip") - """ - } - } - - then { - assert process.success - assert snapshot( - process.out.dge, - process.out.norm_counts, - // NON_ERCC process.out.dge_ercc, - // NON_ERCC process.out.norm_counts_ercc, - process.out.version, - ['Passes bulkRNASeq.checks.check_dge_table_group_columns_constraints' : true, 'dp_tools_version' : '1.1.8'] // MANUALLY Validated! - ).match() - } - - } - -} diff --git a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/dge.nf.test.snap b/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/dge.nf.test.snap deleted file mode 100644 index 6d0ff5be..00000000 --- a/RNAseq/Workflow_Documentation/NF_RCP-F/workflow_code/tests/modules/dge.nf.test.snap +++ /dev/null @@ -1,89 +0,0 @@ -{ - "Baseline_ON_GLDS-194:Should run without failures AND PASS VV VALIDATION": { - "content": [ - [ - [ - "contrasts.csv:md5,66d74b686885ffd4eccdf55823c0e3ce", - "SampleTable.csv:md5,bfd18bbc7d34e41c23f0c9107f5d75c9", - "differential_expression.csv:md5,00cf45e546529c81c0a43ae1b8495a59", - "visualization_output_table.csv:md5,58578caedc33e6a0230ba80abe61f0d5", - "visualization_PCA_table.csv:md5,5c461d35b12d5946c2105f705a03c6d3" - ] - ], - [ - [ - "Normalized_Counts.csv:md5,b4ba348d5446f8ba546a46b966087c1b", - "RSEM_Unnormalized_Counts.csv:md5,931c6070b5e19909929c5a217713500b" - ] - ], - [ - - ], - [ - - ], - [ - "versions.txt:md5,6e364ecf476a7729d5edd52335fb074a" - ], - { - "Passes bulkRNASeq.checks.check_dge_table_group_columns_constraints": true, - "dp_tools_version": "1.1.8" - } - ], - "timestamp": "2023-01-25T20:29:00+0000" - }, - "ISSUE_55_ON_GLDS-321:Should run without failures AND PASS VV VALIDATION": { - "content": [ - [ - [ - "contrasts.csv:md5,af3bef64a768dd6220b6a143d2fbb1bc", - "SampleTable.csv:md5,0b64b62678b9903bda2a431129cf52af", - "differential_expression.csv:md5,e33ffaa350a90f7dd0f4607292db68de", - "visualization_output_table.csv:md5,89c4b8722bf2a8fe25c6fcfa915e5c56", - "visualization_PCA_table.csv:md5,c19f946356e520bd9bf68606d639f21c" - ] - ], - [ - [ - "Normalized_Counts.csv:md5,c148732be1d0b1bb61278bfef612f07b", - "RSEM_Unnormalized_Counts.csv:md5,fd101e235076c3ae66c513bc96017b33" - ] - ], - [ - "versions.txt:md5,6e364ecf476a7729d5edd52335fb074a" - ], - { - "Passes bulkRNASeq.checks.check_dge_table_group_columns_constraints": true, - "dp_tools_version": "1.1.8" - } - ], - "timestamp": "2023-01-25T20:29:00+0000" - }, - "ISSUE_55_ON_Mock:Should run without failures": { - "content": [ - [ - [ - "contrasts.csv:md5,b99c88e9c92f1d1588727df47523c4ad", - "SampleTable.csv:md5,229c988f09fbfeca182da7011f6f93b4", - "differential_expression.csv:md5,f58b6f602598a0c25379afd0c5e87a71", - "visualization_output_table.csv:md5,d056472d2ac135cad9ee4d9f33bde387", - "visualization_PCA_table.csv:md5,1293b99878d7a7eb0e02dc6a38e33d39" - ] - ], - [ - [ - "Normalized_Counts.csv:md5,393160aee08165165ccd2b8579a45161", - "RSEM_Unnormalized_Counts.csv:md5,6759e0e7ec07960691d3913b3877c129" - ] - ], - [ - "versions.txt:md5,6e364ecf476a7729d5edd52335fb074a" - ], - { - "Passes bulkRNASeq.checks.check_dge_table_group_columns_constraints": true, - "dp_tools_version": "1.1.8" - } - ], - "timestamp": "2023-01-25T20:29:00+0000" - } -} \ No newline at end of file