diff --git a/modules/nf-core/deseq2/differential/environment.yml b/modules/nf-core/deseq2/differential/environment.yml index 4070836817b3..b069038c248d 100644 --- a/modules/nf-core/deseq2/differential/environment.yml +++ b/modules/nf-core/deseq2/differential/environment.yml @@ -5,3 +5,4 @@ channels: - bioconda dependencies: - bioconda::bioconductor-deseq2=1.34.0 + - bioconda::bioconductor-limma=3.50.0 diff --git a/modules/nf-core/deseq2/differential/main.nf b/modules/nf-core/deseq2/differential/main.nf index fccb86dbb810..e71d5a0685c8 100644 --- a/modules/nf-core/deseq2/differential/main.nf +++ b/modules/nf-core/deseq2/differential/main.nf @@ -4,8 +4,8 @@ process DESEQ2_DIFFERENTIAL { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bioconductor-deseq2:1.34.0--r41hc247a5b_3' : - 'biocontainers/bioconductor-deseq2:1.34.0--r41hc247a5b_3' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a1/a15f5d61792b60b6179afd885db27d3fe60eb4c42e805c8887ed0416d88cb484/data' : + 'community.wave.seqera.io/library/bioconductor-deseq2_bioconductor-limma:b56a0c9ddc3e87e1' }" input: tuple val(meta), val(contrast_variable), val(reference), val(target), val(formula), val(comparison) diff --git a/modules/nf-core/deseq2/differential/templates/deseq2_differential.R b/modules/nf-core/deseq2/differential/templates/deseq2_differential.R index cded245c92b2..148e84139277 100755 --- a/modules/nf-core/deseq2/differential/templates/deseq2_differential.R +++ b/modules/nf-core/deseq2/differential/templates/deseq2_differential.R @@ -231,6 +231,7 @@ for (file_input in c('count_file', 'sample_file')){ library(DESeq2) library(BiocParallel) +library(limma) ################################################ ################################################ @@ -425,17 +426,25 @@ dds <- DESeq( if (!is.null(opt\$contrast_string)) { coef_names <- resultsNames(dds) - if (!(opt\$contrast_string %in% coef_names)) { - stop(sprintf( - "Contrast '%s' not in design. Available coefficients: %s", - opt\$contrast_string, - paste(coef_names, collapse = ", ") - )) - } + if (opt\$contrast_string %in% coef_names) { + # Direct coefficient name + comp.results <- run_results(name = opt\$contrast_string) + if (opt\$shrink_lfc) { + comp.results <- run_shrink(coef = opt\$contrast_string) + } + } else { + # Parse as limma-style contrast expression + design_mat <- model.matrix(as.formula(model), data = as.data.frame(colData(dds))) + colnames(design_mat) <- make.names(colnames(design_mat)) + numeric_contrast <- as.numeric( + limma::makeContrasts(contrasts = opt\$contrast_string, levels = colnames(design_mat)) + ) - comp.results <- run_results(name = opt\$contrast_string) - if (opt\$shrink_lfc) { - comp.results <- run_shrink(coef = opt\$contrast_string) + # Run DESeq2 results with numeric contrast + comp.results <- run_results(contrast = numeric_contrast) + if (opt\$shrink_lfc) { + comp.results <- run_shrink(contrast = numeric_contrast) + } } } else { contrast_var_tg_ref <- c(contrast_variable, @@ -452,7 +461,7 @@ if (!is.null(opt\$contrast_string)) { if (!is.null(opt\$transcript_lengths_file)){ size_factors = estimateSizeFactorsForMatrix(counts(dds) / assays(dds)[["avgTxLength"]]) -}else { +} else { size_factors = sizeFactors(dds) } diff --git a/modules/nf-core/deseq2/differential/tests/contrasts_shrink.config b/modules/nf-core/deseq2/differential/tests/contrasts_shrink.config new file mode 100644 index 000000000000..36f567c77113 --- /dev/null +++ b/modules/nf-core/deseq2/differential/tests/contrasts_shrink.config @@ -0,0 +1,5 @@ +process { + withName: 'DESEQ2_DIFFERENTIAL' { + ext.args = { "--round_digits 2 --sample_id_col sample --vs_method rlog --shrink_lfc TRUE --seed 1" } + } +} diff --git a/modules/nf-core/deseq2/differential/tests/main.nf.test b/modules/nf-core/deseq2/differential/tests/main.nf.test index c3d7a144be1b..3f3b1defc6c7 100644 --- a/modules/nf-core/deseq2/differential/tests/main.nf.test +++ b/modules/nf-core/deseq2/differential/tests/main.nf.test @@ -57,6 +57,102 @@ nextflow_process { } } + test("RNAseq - Feature Counts - formula + limma contrast string - interaction") { + config './contrasts_interaction.config' + + when { + process { + """ + input[0] = Channel.of([ + 'id': 'genotype_WT_KO', + 'formula': '~ 0 + genotype', + 'comparison': 'genotypeWT - genotypeKO' + ]) + .map { + tuple(it, it.variable, it.reference, it.target, it.formula, it.comparison) + } + + input[1] = Channel.of([ + [ id: 'test' ], + file("https://github.com/nf-core/test-datasets/raw/differentialabundance/modules_testdata/variancepartition_dream/metadata.tsv", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/differentialabundance/modules_testdata/variancepartition_dream/counts.tsv", checkIfExists: true) + ]) + + ch_spikes = [[],[]] + ch_lengths = [[],[]] + input[2] = ch_spikes + input[3] = ch_lengths + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.results, + process.out.size_factors, + process.out.normalised_counts, + process.out.rlog_counts, + process.out.vst_counts, + process.out.model, + process.out.versions, + file(process.out.dispersion_plot[0][1]).name, + file(process.out.rdata[0][1]).name + ).match() }, + { assert path(process.out.session_info[0][1]).text.contains("DESeq2_1.34.0") } + ) + } + } + + test("RNAseq - Feature Counts - formula + limma contrast string - shrunken") { + config './contrasts_shrink.config' + + when { + process { + """ + input[0] = Channel.of([ + 'id': 'genotype_WT_KO', + 'formula': '~ 0 + genotype', + 'comparison': 'genotypeWT - genotypeKO' + ]) + .map { + tuple(it, it.variable, it.reference, it.target, it.formula, it.comparison) + } + + input[1] = Channel.of([ + [ id: 'test' ], + file("https://github.com/nf-core/test-datasets/raw/differentialabundance/modules_testdata/variancepartition_dream/metadata.tsv", checkIfExists: true), + file("https://github.com/nf-core/test-datasets/raw/differentialabundance/modules_testdata/variancepartition_dream/counts.tsv", checkIfExists: true) + ]) + + ch_spikes = [[],[]] + ch_lengths = [[],[]] + input[2] = ch_spikes + input[3] = ch_lengths + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.results, + process.out.size_factors, + process.out.normalised_counts, + process.out.rlog_counts, + process.out.vst_counts, + process.out.model, + process.out.versions, + file(process.out.dispersion_plot[0][1]).name, + file(process.out.rdata[0][1]).name + ).match() }, + { assert path(process.out.session_info[0][1]).text.contains("DESeq2_1.34.0") } + ) + } + } + test("mouse - contrasts - matrix") { config './contrasts_matrix.config' diff --git a/modules/nf-core/deseq2/differential/tests/main.nf.test.snap b/modules/nf-core/deseq2/differential/tests/main.nf.test.snap index 527207a53d38..5758806568f6 100644 --- a/modules/nf-core/deseq2/differential/tests/main.nf.test.snap +++ b/modules/nf-core/deseq2/differential/tests/main.nf.test.snap @@ -66,7 +66,7 @@ }, "timestamp": "2025-07-20T23:45:08.311820361" }, - "mouse - contrasts - matrix - no blocking": { + "mouse - contrasts - matrix": { "content": [ [ [ @@ -192,9 +192,9 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-20T23:46:48.686505916" + "timestamp": "2025-07-20T23:45:40.047043298" }, - "mouse - contrasts - matrix": { + "mouse - contrasts - matrix - exclude samples": { "content": [ [ [ @@ -205,7 +205,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.results.tsv:md5,791cdba2615a445cded13cae95df73ef" + "treatment_mCherry_hND6_.deseq2.results.tsv:md5,7d28d65b7ab94306c1328027a6531405" ], [ { @@ -215,7 +215,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,2438053a4bdc869f467a12d3c22c7ba7" + "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,f509c2de7d6935942eff594a0aca662e" ] ], [ @@ -227,7 +227,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,6332f21889ecac387bb12eeb04f23849" + "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,87d6d634ffea2d7a9df9f9bae91b4d90" ], [ { @@ -237,7 +237,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,6332f21889ecac387bb12eeb04f23849" + "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,87d6d634ffea2d7a9df9f9bae91b4d90" ] ], [ @@ -249,7 +249,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.normalised_counts.tsv:md5,46ab7200c626649ab6256ed797ef5071" + "treatment_mCherry_hND6_.normalised_counts.tsv:md5,90327e9bfc3bbafb96e11b13b3cd5e19" ], [ { @@ -259,7 +259,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,46ab7200c626649ab6256ed797ef5071" + "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,90327e9bfc3bbafb96e11b13b3cd5e19" ] ], [ @@ -271,7 +271,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.rlog.tsv:md5,b1adc1fba6bd0c8b55973608f4b97030" + "treatment_mCherry_hND6_.rlog.tsv:md5,c500bcad14f845113f85610d1ebf643c" ], [ { @@ -281,7 +281,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,b1adc1fba6bd0c8b55973608f4b97030" + "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,c500bcad14f845113f85610d1ebf643c" ] ], [ @@ -320,9 +320,9 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-20T23:45:40.047043298" + "timestamp": "2025-07-20T23:49:51.329803172" }, - "mouse - contrasts - matrix - exclude samples": { + "mouse - contrasts - matrix - lengths": { "content": [ [ [ @@ -333,7 +333,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.results.tsv:md5,7d28d65b7ab94306c1328027a6531405" + "treatment_mCherry_hND6_.deseq2.results.tsv:md5,944176b73455aa7c8de3ec32c03edef6" ], [ { @@ -343,7 +343,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,f509c2de7d6935942eff594a0aca662e" + "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,6a9bc76c9d54034c90fa159372f97516" ] ], [ @@ -355,7 +355,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,87d6d634ffea2d7a9df9f9bae91b4d90" + "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,69183b94202a806067962d0df0b9875b" ], [ { @@ -365,7 +365,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,87d6d634ffea2d7a9df9f9bae91b4d90" + "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,69183b94202a806067962d0df0b9875b" ] ], [ @@ -377,7 +377,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.normalised_counts.tsv:md5,90327e9bfc3bbafb96e11b13b3cd5e19" + "treatment_mCherry_hND6_.normalised_counts.tsv:md5,7050f44c460cc13e3f101d048d503527" ], [ { @@ -387,7 +387,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,90327e9bfc3bbafb96e11b13b3cd5e19" + "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,7050f44c460cc13e3f101d048d503527" ] ], [ @@ -399,7 +399,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.rlog.tsv:md5,c500bcad14f845113f85610d1ebf643c" + "treatment_mCherry_hND6_.rlog.tsv:md5,22a4b117246b2317e0f4daf7919703f2" ], [ { @@ -409,7 +409,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,c500bcad14f845113f85610d1ebf643c" + "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,22a4b117246b2317e0f4daf7919703f2" ] ], [ @@ -448,9 +448,9 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-20T23:49:51.329803172" + "timestamp": "2025-07-20T23:46:16.333966759" }, - "mouse - contrasts - matrix - lengths": { + "mouse - contrasts - matrix - strip spikes": { "content": [ [ [ @@ -461,7 +461,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.results.tsv:md5,944176b73455aa7c8de3ec32c03edef6" + "treatment_mCherry_hND6_.deseq2.results.tsv:md5,c4d269cace6dfe42e81e39d13b4b0354" ], [ { @@ -471,7 +471,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,6a9bc76c9d54034c90fa159372f97516" + "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,e1820951d5d5c40fa7fd6368e8f62e8c" ] ], [ @@ -483,7 +483,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,69183b94202a806067962d0df0b9875b" + "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,a526a1bb5cb270f5a4a1641fefd289b3" ], [ { @@ -493,7 +493,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,69183b94202a806067962d0df0b9875b" + "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,a526a1bb5cb270f5a4a1641fefd289b3" ] ], [ @@ -505,7 +505,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.normalised_counts.tsv:md5,7050f44c460cc13e3f101d048d503527" + "treatment_mCherry_hND6_.normalised_counts.tsv:md5,89c5922a30218a17ab6ee84e031f6a9b" ], [ { @@ -515,7 +515,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,7050f44c460cc13e3f101d048d503527" + "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,89c5922a30218a17ab6ee84e031f6a9b" ] ], [ @@ -527,7 +527,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.rlog.tsv:md5,22a4b117246b2317e0f4daf7919703f2" + "treatment_mCherry_hND6_.rlog.tsv:md5,4b4526ddcca010f5c75f841b2cef269f" ], [ { @@ -537,7 +537,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,22a4b117246b2317e0f4daf7919703f2" + "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,4b4526ddcca010f5c75f841b2cef269f" ] ], [ @@ -576,54 +576,77 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-20T23:46:16.333966759" + "timestamp": "2025-07-20T23:47:46.184431379" }, - "mouse - contrasts - matrix - strip spikes": { + "RNAseq - Feature Counts - formula + limma contrast string - interaction": { "content": [ [ [ { - "id": "treatment_mCherry_hND6_", - "variable": "treatment", - "reference": "mCherry", - "target": "hND6", - "blocking": "" + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" }, - "treatment_mCherry_hND6_.deseq2.results.tsv:md5,c4d269cace6dfe42e81e39d13b4b0354" - ], + "genotype_WT_KO.deseq2.results.tsv:md5,59256d9c5b4f12e4422dcf80776da841" + ] + ], + [ [ { - "id": "treatment_mCherry_hND6_sample_number", - "variable": "treatment", - "reference": "mCherry", - "target": "hND6", - "blocking": "sample_number" + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" }, - "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,e1820951d5d5c40fa7fd6368e8f62e8c" + "genotype_WT_KO.deseq2.sizefactors.tsv:md5,0367d1ef76c5b9f01fc1f89647809b5d" ] ], [ [ { - "id": "treatment_mCherry_hND6_", - "variable": "treatment", - "reference": "mCherry", - "target": "hND6", - "blocking": "" + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" }, - "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,a526a1bb5cb270f5a4a1641fefd289b3" - ], + "genotype_WT_KO.normalised_counts.tsv:md5,6d9d7c02be9169ba4a649f8fb0f0b7ea" + ] + ], + [ [ { - "id": "treatment_mCherry_hND6_sample_number", - "variable": "treatment", - "reference": "mCherry", - "target": "hND6", - "blocking": "sample_number" + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" }, - "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,a526a1bb5cb270f5a4a1641fefd289b3" + "genotype_WT_KO.rlog.tsv:md5,0e9d0074e4acc651f50234fcce55a1cf" + ] + ], + [ + + ], + [ + [ + { + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" + }, + "genotype_WT_KO.deseq2.model.txt:md5,ac7205ad2d20dc34aedba90032d06629" ] ], + [ + "versions.yml:md5,62c34d4f3d11c2bdbe2e4f7e6086b35e" + ], + "genotype_WT_KO.deseq2.dispersion.png", + "genotype_WT_KO.dds.rld.rds" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-27T19:01:59.05302518" + }, + "mouse - contrasts - matrix - csv": { + "content": [ [ [ { @@ -633,17 +656,19 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.normalised_counts.tsv:md5,89c5922a30218a17ab6ee84e031f6a9b" - ], + "treatment_mCherry_hND6_.deseq2.results.tsv:md5,791cdba2615a445cded13cae95df73ef" + ] + ], + [ [ { - "id": "treatment_mCherry_hND6_sample_number", + "id": "treatment_mCherry_hND6_", "variable": "treatment", "reference": "mCherry", "target": "hND6", - "blocking": "sample_number" + "blocking": "" }, - "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,89c5922a30218a17ab6ee84e031f6a9b" + "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,6332f21889ecac387bb12eeb04f23849" ] ], [ @@ -655,17 +680,19 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.rlog.tsv:md5,4b4526ddcca010f5c75f841b2cef269f" - ], + "treatment_mCherry_hND6_.normalised_counts.tsv:md5,46ab7200c626649ab6256ed797ef5071" + ] + ], + [ [ { - "id": "treatment_mCherry_hND6_sample_number", + "id": "treatment_mCherry_hND6_", "variable": "treatment", "reference": "mCherry", "target": "hND6", - "blocking": "sample_number" + "blocking": "" }, - "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,4b4526ddcca010f5c75f841b2cef269f" + "treatment_mCherry_hND6_.rlog.tsv:md5,b1adc1fba6bd0c8b55973608f4b97030" ] ], [ @@ -681,20 +708,9 @@ "blocking": "" }, "treatment_mCherry_hND6_.deseq2.model.txt:md5,d2113d82b76046c319e6602da2ad74d6" - ], - [ - { - "id": "treatment_mCherry_hND6_sample_number", - "variable": "treatment", - "reference": "mCherry", - "target": "hND6", - "blocking": "sample_number" - }, - "treatment_mCherry_hND6_sample_number.deseq2.model.txt:md5,fa05126a58cb67c107d45426b0bdea83" ] ], [ - "versions.yml:md5,62c34d4f3d11c2bdbe2e4f7e6086b35e", "versions.yml:md5,62c34d4f3d11c2bdbe2e4f7e6086b35e" ], "treatment_mCherry_hND6_.deseq2.dispersion.png", @@ -704,9 +720,9 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-20T23:47:46.184431379" + "timestamp": "2025-07-20T23:48:13.859007527" }, - "mouse - contrasts - matrix - subset to contrast": { + "mouse - contrasts - matrix - no blocking": { "content": [ [ [ @@ -832,9 +848,76 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-20T23:49:13.891655952" + "timestamp": "2025-07-20T23:46:48.686505916" }, - "mouse - contrasts - matrix - spikes": { + "RNAseq - Feature Counts - formula + limma contrast string - shrunken": { + "content": [ + [ + [ + { + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" + }, + "genotype_WT_KO.deseq2.results.tsv:md5,23511305c222de275f888fee844f055c" + ] + ], + [ + [ + { + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" + }, + "genotype_WT_KO.deseq2.sizefactors.tsv:md5,0367d1ef76c5b9f01fc1f89647809b5d" + ] + ], + [ + [ + { + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" + }, + "genotype_WT_KO.normalised_counts.tsv:md5,6d9d7c02be9169ba4a649f8fb0f0b7ea" + ] + ], + [ + [ + { + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" + }, + "genotype_WT_KO.rlog.tsv:md5,0e9d0074e4acc651f50234fcce55a1cf" + ] + ], + [ + + ], + [ + [ + { + "id": "genotype_WT_KO", + "formula": "~ 0 + genotype", + "comparison": "genotypeWT - genotypeKO" + }, + "genotype_WT_KO.deseq2.model.txt:md5,ac7205ad2d20dc34aedba90032d06629" + ] + ], + [ + "versions.yml:md5,62c34d4f3d11c2bdbe2e4f7e6086b35e" + ], + "genotype_WT_KO.deseq2.dispersion.png", + "genotype_WT_KO.dds.rld.rds" + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.0" + }, + "timestamp": "2025-11-28T15:42:51.742301418" + }, + "mouse - contrasts - matrix - subset to contrast": { "content": [ [ [ @@ -845,7 +928,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.results.tsv:md5,51ba90cf073d9d5f38ebb043d7e5b220" + "treatment_mCherry_hND6_.deseq2.results.tsv:md5,791cdba2615a445cded13cae95df73ef" ], [ { @@ -855,7 +938,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,a04e2df3712d5be27e39c50f83319ec4" + "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,2438053a4bdc869f467a12d3c22c7ba7" ] ], [ @@ -867,7 +950,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,1708374146b4e8c28fbc78fa292102cd" + "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,6332f21889ecac387bb12eeb04f23849" ], [ { @@ -877,7 +960,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,1708374146b4e8c28fbc78fa292102cd" + "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,6332f21889ecac387bb12eeb04f23849" ] ], [ @@ -889,7 +972,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.normalised_counts.tsv:md5,6f3af146a6f8fbb8f565dd66e79d2cb1" + "treatment_mCherry_hND6_.normalised_counts.tsv:md5,46ab7200c626649ab6256ed797ef5071" ], [ { @@ -899,7 +982,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,6f3af146a6f8fbb8f565dd66e79d2cb1" + "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,46ab7200c626649ab6256ed797ef5071" ] ], [ @@ -911,7 +994,7 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.rlog.tsv:md5,39df6fb2969afc009a602261e864238f" + "treatment_mCherry_hND6_.rlog.tsv:md5,b1adc1fba6bd0c8b55973608f4b97030" ], [ { @@ -921,7 +1004,7 @@ "target": "hND6", "blocking": "sample_number" }, - "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,39df6fb2969afc009a602261e864238f" + "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,b1adc1fba6bd0c8b55973608f4b97030" ] ], [ @@ -960,9 +1043,9 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-20T23:47:18.3338485" + "timestamp": "2025-07-20T23:49:13.891655952" }, - "mouse - contrasts - matrix - csv": { + "mouse - contrasts - matrix - spikes": { "content": [ [ [ @@ -973,7 +1056,17 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.results.tsv:md5,791cdba2615a445cded13cae95df73ef" + "treatment_mCherry_hND6_.deseq2.results.tsv:md5,51ba90cf073d9d5f38ebb043d7e5b220" + ], + [ + { + "id": "treatment_mCherry_hND6_sample_number", + "variable": "treatment", + "reference": "mCherry", + "target": "hND6", + "blocking": "sample_number" + }, + "treatment_mCherry_hND6_sample_number.deseq2.results.tsv:md5,a04e2df3712d5be27e39c50f83319ec4" ] ], [ @@ -985,7 +1078,17 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,6332f21889ecac387bb12eeb04f23849" + "treatment_mCherry_hND6_.deseq2.sizefactors.tsv:md5,1708374146b4e8c28fbc78fa292102cd" + ], + [ + { + "id": "treatment_mCherry_hND6_sample_number", + "variable": "treatment", + "reference": "mCherry", + "target": "hND6", + "blocking": "sample_number" + }, + "treatment_mCherry_hND6_sample_number.deseq2.sizefactors.tsv:md5,1708374146b4e8c28fbc78fa292102cd" ] ], [ @@ -997,7 +1100,17 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.normalised_counts.tsv:md5,46ab7200c626649ab6256ed797ef5071" + "treatment_mCherry_hND6_.normalised_counts.tsv:md5,6f3af146a6f8fbb8f565dd66e79d2cb1" + ], + [ + { + "id": "treatment_mCherry_hND6_sample_number", + "variable": "treatment", + "reference": "mCherry", + "target": "hND6", + "blocking": "sample_number" + }, + "treatment_mCherry_hND6_sample_number.normalised_counts.tsv:md5,6f3af146a6f8fbb8f565dd66e79d2cb1" ] ], [ @@ -1009,7 +1122,17 @@ "target": "hND6", "blocking": "" }, - "treatment_mCherry_hND6_.rlog.tsv:md5,b1adc1fba6bd0c8b55973608f4b97030" + "treatment_mCherry_hND6_.rlog.tsv:md5,39df6fb2969afc009a602261e864238f" + ], + [ + { + "id": "treatment_mCherry_hND6_sample_number", + "variable": "treatment", + "reference": "mCherry", + "target": "hND6", + "blocking": "sample_number" + }, + "treatment_mCherry_hND6_sample_number.rlog.tsv:md5,39df6fb2969afc009a602261e864238f" ] ], [ @@ -1025,9 +1148,20 @@ "blocking": "" }, "treatment_mCherry_hND6_.deseq2.model.txt:md5,d2113d82b76046c319e6602da2ad74d6" + ], + [ + { + "id": "treatment_mCherry_hND6_sample_number", + "variable": "treatment", + "reference": "mCherry", + "target": "hND6", + "blocking": "sample_number" + }, + "treatment_mCherry_hND6_sample_number.deseq2.model.txt:md5,fa05126a58cb67c107d45426b0bdea83" ] ], [ + "versions.yml:md5,62c34d4f3d11c2bdbe2e4f7e6086b35e", "versions.yml:md5,62c34d4f3d11c2bdbe2e4f7e6086b35e" ], "treatment_mCherry_hND6_.deseq2.dispersion.png", @@ -1037,7 +1171,7 @@ "nf-test": "0.9.2", "nextflow": "25.04.6" }, - "timestamp": "2025-07-20T23:48:13.859007527" + "timestamp": "2025-07-20T23:47:18.3338485" }, "mouse - contrasts - matrix - vst nsub": { "content": [