diff --git a/CHANGELOG.md b/CHANGELOG.md index b0e589231..5c0e40916 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Enhancements and fixes +- [PR #1654](https://github.com/nf-core/rnaseq/pull/1654) - Fix tximport to handle tx2gene files with extra columns from `--gtf_extra_attributes`, and fix sample name mangling in DESeq2 QC - [PR #1655](https://github.com/nf-core/rnaseq/pull/1655) - Fix duplicate flagstat files in MultiQC report when mark duplicates is enabled ([#1653](https://github.com/nf-core/rnaseq/issues/1653)) - [PR #1656](https://github.com/nf-core/rnaseq/pull/1656) - Bump version after release 3.22.1 - [PR #1658](https://github.com/nf-core/rnaseq/pull/1658) - Bump nf-core/multiqc module to 1.33 diff --git a/bin/deseq2_qc.r b/bin/deseq2_qc.r index d55180400..003b6852c 100755 --- a/bin/deseq2_qc.r +++ b/bin/deseq2_qc.r @@ -55,7 +55,7 @@ if (is.null(opt$count_file)){ ################################################ ################################################ -count.table <- read.delim(file=opt$count_file,header=TRUE, row.names=NULL) +count.table <- read.delim(file=opt$count_file,header=TRUE, row.names=NULL, check.names=FALSE) rownames(count.table) <- count.table[,opt$id_col] count.table <- count.table[,opt$count_col:ncol(count.table),drop=FALSE] colnames(count.table) <- gsub(opt$sample_suffix,"",colnames(count.table)) @@ -76,7 +76,7 @@ samples.vec <- colnames(count.table) name_components <- strsplit(samples.vec, "_") n_components <- length(name_components[[1]]) decompose <- n_components!=1 && all(sapply(name_components, length)==n_components) -coldata <- data.frame(samples.vec, sample=samples.vec, row.names=1) +coldata <- data.frame(sample=samples.vec, row.names=samples.vec) if (decompose) { groupings <- as.data.frame(lapply(1:n_components, function(i) sapply(name_components, "[[", i))) n_distinct <- sapply(groupings, function(grp) length(unique(grp))) diff --git a/modules.json b/modules.json index dd4cb5309..4589b12db 100644 --- a/modules.json +++ b/modules.json @@ -269,7 +269,7 @@ }, "tximeta/tximport": { "branch": "master", - "git_sha": "d205ebc03abc530a984d844ab57373f566967ac8", + "git_sha": "9ef7553c32b02bc33ecb962b5f07a8cb16b2117c", "installed_by": ["modules", "quantify_pseudo_alignment"] }, "ucsc/bedclip": { diff --git a/modules/nf-core/tximeta/tximport/meta.yml b/modules/nf-core/tximeta/tximport/meta.yml index b8ab9bca8..16519f17d 100644 --- a/modules/nf-core/tximeta/tximport/meta.yml +++ b/modules/nf-core/tximeta/tximport/meta.yml @@ -25,7 +25,11 @@ input: description: | Groovy Map containing information related to the experiment as a whole e.g. `[ id:'SRP123456' ]` - - quants/*: {} + - "quants/*": + type: file + description: | + Quantification files + - - meta2: type: map description: | @@ -40,7 +44,7 @@ input: - edam: http://edamontology.org/format_3475 # TSV - quant_type: type: string - description: Quantification type, 'kallisto' or 'salmon' + description: Quantification type, `kallisto` or `salmon` output: tpm_gene: - - meta: diff --git a/modules/nf-core/tximeta/tximport/templates/tximport.r b/modules/nf-core/tximeta/tximport/templates/tximport.r index 883935129..0ff05ef04 100755 --- a/modules/nf-core/tximeta/tximport/templates/tximport.r +++ b/modules/nf-core/tximeta/tximport/templates/tximport.r @@ -14,6 +14,23 @@ library(tximport) ################################################ ################################################ +#' Parse out options from a string without recourse to optparse +#' +#' @param x Long-form argument list like --opt1 val1 --opt2 val2 +#' +#' @return named list of options and values similar to optparse + +parse_args <- function(x){ + args_list <- unlist(strsplit(x, ' ?--')[[1]])[-1] + args_vals <- lapply(args_list, function(y) scan(text=y, what='character', quiet = TRUE)) + + # Ensure the option vectors are length 2 (key/value) to catch empty ones + args_vals <- lapply(args_vals, function(z){ length(z) <- 2; z}) + + parsed_args <- structure(lapply(args_vals, function(y) y[2]), names = lapply(args_vals, function(y) y[1])) + parsed_args[! is.na(parsed_args)] +} + #' Build a table from a SummarizedExperiment object #' #' This function takes a SummarizedExperiment object and a specific slot name to extract @@ -53,27 +70,38 @@ write_se_table <- function(params, prefix) { #' Read Transcript Metadata from a Given Path #' #' This function reads transcript metadata from a specified file path. The file is expected to -#' be a tab-separated values file without headers, containing transcript information. The function -#' checks if the file is empty and stops execution with an error message if so. It reads the file -#' into a data frame, expecting columns for transcript IDs, gene IDs, and gene names. Additional +#' be a tab-separated values file with a header, containing transcript information. Columns are +#' selected by name using the tx_col, gene_id_col, and gene_name_col parameters. The function +#' checks if the file is empty and stops execution with an error message if so. Additional #' processing is done to ensure compatibility with a predefined data structure (e.g., `txi[[1]]`), #' including adding missing entries and reordering based on the transcript IDs found in `txi[[1]]`. #' #' @param tinfo_path The file path to the transcript information file. +#' @param tx_col Column name for transcript IDs. +#' @param gene_id_col Column name for gene IDs. +#' @param gene_name_col Column name for gene names. #' #' @return A list containing three elements: #' - `transcript`: A data frame with transcript IDs, gene IDs, and gene names, indexed by transcript IDs. #' - `gene`: A data frame with unique gene IDs and gene names. #' - `tx2gene`: A data frame mapping transcript IDs to gene IDs. -read_transcript_info <- function(tinfo_path){ +read_transcript_info <- function(tinfo_path, tx_col, gene_id_col, gene_name_col){ info <- file.info(tinfo_path) if (info\$size == 0) { stop("tx2gene file is empty") } - transcript_info <- read.csv(tinfo_path, sep="\t", header = TRUE, - col.names = c("tx", "gene_id", "gene_name"), check.names = FALSE) + # Read file with actual header to handle variable column counts correctly + raw_info <- read.csv(tinfo_path, sep="\t", header = TRUE, check.names = FALSE) + + # Select columns by name, falling back to position if name not found + transcript_info <- data.frame( + tx = raw_info[[if (tx_col %in% colnames(raw_info)) tx_col else 1]], + gene_id = raw_info[[if (gene_id_col %in% colnames(raw_info)) gene_id_col else 2]], + gene_name = raw_info[[if (gene_name_col %in% colnames(raw_info)) gene_name_col else 3]], + check.names = FALSE + ) extra <- setdiff(rownames(txi[[1]]), as.character(transcript_info[["tx"]])) transcript_info <- rbind(transcript_info, data.frame(tx=extra, gene_id=extra, gene_name=extra, check.names = FALSE)) @@ -117,6 +145,21 @@ create_summarized_experiment <- function(counts, abundance, length, col_data, ro ################################################ ################################################ +# Set defaults and classes +opt <- list( + tx_col = "transcript_id", + gene_id_col = "gene_id", + gene_name_col = "gene_name" +) + +# Apply parameter overrides from ext.args +args_opt <- parse_args('$task.ext.args') +for (ao in names(args_opt)) { + if (ao %in% names(opt)) { + opt[[ao]] <- args_opt[[ao]] + } +} + # Define pattern for file names based on quantification type pattern <- ifelse('$quant_type' == "kallisto", "abundance.tsv", "quant.sf") fns <- list.files('quants', pattern = pattern, recursive = T, full.names = T) @@ -128,7 +171,7 @@ dropInfReps <- '$quant_type' == "kallisto" txi <- tximport(fns, type = '$quant_type', txOut = TRUE, dropInfReps = dropInfReps) # Read transcript and sample data -transcript_info <- read_transcript_info('$tx2gene') +transcript_info <- read_transcript_info('$tx2gene', opt\$tx_col, opt\$gene_id_col, opt\$gene_name_col) # Make coldata just to appease the summarizedexperiment coldata <- data.frame(files = fns, names = names, check.names = FALSE) diff --git a/modules/nf-core/tximeta/tximport/tests/main.nf.test b/modules/nf-core/tximeta/tximport/tests/main.nf.test index 9bdb7fd46..5e3b50b26 100644 --- a/modules/nf-core/tximeta/tximport/tests/main.nf.test +++ b/modules/nf-core/tximeta/tximport/tests/main.nf.test @@ -4,6 +4,12 @@ nextflow_process { script "../main.nf" process "TXIMETA_TXIMPORT" + tag "modules" + tag "modules_nfcore" + tag "custom/tx2gene" + tag "tximeta" + tag "tximeta/tximport" + tag "untar" test("saccharomyces_cerevisiae - kallisto - gtf") { @@ -65,9 +71,7 @@ nextflow_process { } } - test("saccharomyces_cerevisiae - kallisto - gtf - stub") { - - options "-stub" + test("saccharomyces_cerevisiae - kallisto - gtf - extra_attributes") { setup { run("UNTAR") { @@ -92,12 +96,44 @@ nextflow_process { input[1] = UNTAR.out.untar.map { meta, dir -> [ meta, dir.listFiles().collect() ] } input[2] = 'kallisto' input[3] = 'gene_id' - input[4] = 'gene_name' + input[4] = 'gene_name,gene_biotype' """ } } } + when { + process { + """ + input[0] = UNTAR.out.untar.map { meta, dir -> [ meta, dir.listFiles().collect() ] } + input[1] = CUSTOM_TX2GENE.out.tx2gene + input[2] = 'kallisto' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.counts_gene, + process.out.counts_gene_length_scaled, + process.out.counts_gene_scaled, + process.out.counts_transcript, + process.out.lengths_gene, + process.out.lengths_transcript, + process.out.tpm_gene, + process.out.tpm_transcript, + process.out.versions).match() + } + ) + } + } + + test("saccharomyces_cerevisiae - kallisto - gtf - stub") { + + options "-stub" + when { process { """ @@ -228,4 +264,66 @@ nextflow_process { ) } } + + test("saccharomyces_cerevisiae - kallisto - gtf - custom_column_names") { + + config "./nextflow.config" + + setup { + run("UNTAR") { + script "../../../untar/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/kallisto_results.tar.gz', checkIfExists: true) + ]) + """ + } + } + run("CUSTOM_TX2GENE") { + script "../../../custom/tx2gene/main.nf" + process { + """ + input[0] = Channel.of([ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'genomics/eukaryotes/saccharomyces_cerevisiae/genome_gfp.gtf', checkIfExists: true) + ]) + input[1] = UNTAR.out.untar.map { meta, dir -> [ meta, dir.listFiles().collect() ] } + input[2] = 'kallisto' + input[3] = 'gene_id' + input[4] = 'gene_name,gene_biotype' + """ + } + } + } + + when { + process { + """ + // Uses ext.args = '--gene_name_col gene_biotype' from nextflow.config + input[0] = UNTAR.out.untar.map { meta, dir -> [ meta, dir.listFiles().collect() ] } + input[1] = CUSTOM_TX2GENE.out.tx2gene + input[2] = 'kallisto' + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot( + process.out.counts_gene, + process.out.counts_gene_length_scaled, + process.out.counts_gene_scaled, + process.out.counts_transcript, + process.out.lengths_gene, + process.out.lengths_transcript, + process.out.tpm_gene, + process.out.tpm_transcript, + process.out.versions).match() + } + ) + } + } } diff --git a/modules/nf-core/tximeta/tximport/tests/main.nf.test.snap b/modules/nf-core/tximeta/tximport/tests/main.nf.test.snap index 71ce1293e..cff6b0023 100644 --- a/modules/nf-core/tximeta/tximport/tests/main.nf.test.snap +++ b/modules/nf-core/tximeta/tximport/tests/main.nf.test.snap @@ -5,7 +5,7 @@ "0": [ [ [ - + ], "[].gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -13,7 +13,7 @@ "1": [ [ [ - + ], "[].gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -21,7 +21,7 @@ "2": [ [ [ - + ], "[].gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -29,7 +29,7 @@ "3": [ [ [ - + ], "[].gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -37,7 +37,7 @@ "4": [ [ [ - + ], "[].gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -45,7 +45,7 @@ "5": [ [ [ - + ], "[].transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -53,7 +53,7 @@ "6": [ [ [ - + ], "[].transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -61,7 +61,7 @@ "7": [ [ [ - + ], "[].transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -72,7 +72,7 @@ "counts_gene": [ [ [ - + ], "[].gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -80,7 +80,7 @@ "counts_gene_length_scaled": [ [ [ - + ], "[].gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -88,7 +88,7 @@ "counts_gene_scaled": [ [ [ - + ], "[].gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -96,7 +96,7 @@ "counts_transcript": [ [ [ - + ], "[].transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -104,7 +104,7 @@ "lengths_gene": [ [ [ - + ], "[].gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -112,7 +112,7 @@ "lengths_transcript": [ [ [ - + ], "[].transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -120,7 +120,7 @@ "tpm_gene": [ [ [ - + ], "[].gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -128,7 +128,7 @@ "tpm_transcript": [ [ [ - + ], "[].transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -140,9 +140,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "25.10.0" }, - "timestamp": "2024-12-17T19:24:48.684346976" + "timestamp": "2025-12-09T09:26:21.185522" }, "saccharomyces_cerevisiae - salmon - gtf": { "content": [ @@ -216,85 +216,9 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "25.10.0" }, - "timestamp": "2024-12-17T19:24:59.699008761" - }, - "saccharomyces_cerevisiae - kallisto - gtf": { - "content": [ - [ - [ - { - "id": "test" - }, - "test.gene_counts.tsv:md5,e89c28692ea214396b2d4cb702a804c3" - ] - ], - [ - [ - { - "id": "test" - }, - "test.gene_counts_length_scaled.tsv:md5,4944841ac711124d29673b6b6ed16ef3" - ] - ], - [ - [ - { - "id": "test" - }, - "test.gene_counts_scaled.tsv:md5,39d14e361434978b3cadae901a26a028" - ] - ], - [ - [ - { - "id": "test" - }, - "test.transcript_counts.tsv:md5,42e0106e75fa97c1c684c6d9060f1724" - ] - ], - [ - [ - { - "id": "test" - }, - "test.gene_lengths.tsv:md5,db6becdf807fd164a9c63dd1dd916d9c" - ] - ], - [ - [ - { - "id": "test" - }, - "test.transcript_lengths.tsv:md5,f974b52840431a5dae57bcb615badbf1" - ] - ], - [ - [ - { - "id": "test" - }, - "test.gene_tpm.tsv:md5,85d108269769ae0d841247b9b9ed922d" - ] - ], - [ - [ - { - "id": "test" - }, - "test.transcript_tpm.tsv:md5,65862ed9d4a05abfab952e680dc0e49d" - ] - ], - [ - "versions.yml:md5,6ff317cceddc686f84d79cb976e1e28b" - ] - ], - "meta": { - "nf-test": "0.9.2", - "nextflow": "24.10.3" - }, - "timestamp": "2024-12-17T19:24:36.406126268" + "timestamp": "2025-12-09T09:27:19.912432" }, "saccharomyces_cerevisiae - salmon - gtf - stub": { "content": [ @@ -302,7 +226,7 @@ "0": [ [ [ - + ], "[].gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -310,7 +234,7 @@ "1": [ [ [ - + ], "[].gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -318,7 +242,7 @@ "2": [ [ [ - + ], "[].gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -326,7 +250,7 @@ "3": [ [ [ - + ], "[].gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -334,7 +258,7 @@ "4": [ [ [ - + ], "[].gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -342,7 +266,7 @@ "5": [ [ [ - + ], "[].transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -350,7 +274,7 @@ "6": [ [ [ - + ], "[].transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -358,7 +282,7 @@ "7": [ [ [ - + ], "[].transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -369,7 +293,7 @@ "counts_gene": [ [ [ - + ], "[].gene_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -377,7 +301,7 @@ "counts_gene_length_scaled": [ [ [ - + ], "[].gene_counts_length_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -385,7 +309,7 @@ "counts_gene_scaled": [ [ [ - + ], "[].gene_counts_scaled.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -393,7 +317,7 @@ "counts_transcript": [ [ [ - + ], "[].transcript_counts.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -401,7 +325,7 @@ "lengths_gene": [ [ [ - + ], "[].gene_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -409,7 +333,7 @@ "lengths_transcript": [ [ [ - + ], "[].transcript_lengths.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -417,7 +341,7 @@ "tpm_gene": [ [ [ - + ], "[].gene_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -425,7 +349,7 @@ "tpm_transcript": [ [ [ - + ], "[].transcript_tpm.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" ] @@ -437,8 +361,236 @@ ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.3" + "nextflow": "25.10.0" + }, + "timestamp": "2025-12-09T09:28:42.817097" + }, + "saccharomyces_cerevisiae - kallisto - gtf - custom_column_names": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.gene_counts.tsv:md5,acb4437b0298590f1b9a32a090433ede" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_counts_length_scaled.tsv:md5,e17a3ab77900d63af813d05e9edf48cb" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_counts_scaled.tsv:md5,09d7d12038b6616fa72a1d671ec9cf22" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_counts.tsv:md5,42e0106e75fa97c1c684c6d9060f1724" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_lengths.tsv:md5,e326b39633bfc0ab61e112627d5362a9" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_lengths.tsv:md5,f974b52840431a5dae57bcb615badbf1" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_tpm.tsv:md5,ef2da5c832e4d126bca09464cab756b6" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_tpm.tsv:md5,65862ed9d4a05abfab952e680dc0e49d" + ] + ], + [ + "versions.yml:md5,6ff317cceddc686f84d79cb976e1e28b" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.0" + }, + "timestamp": "2025-12-09T09:29:35.461954" + }, + "saccharomyces_cerevisiae - kallisto - gtf": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.gene_counts.tsv:md5,e89c28692ea214396b2d4cb702a804c3" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_counts_length_scaled.tsv:md5,4944841ac711124d29673b6b6ed16ef3" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_counts_scaled.tsv:md5,39d14e361434978b3cadae901a26a028" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_counts.tsv:md5,42e0106e75fa97c1c684c6d9060f1724" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_lengths.tsv:md5,db6becdf807fd164a9c63dd1dd916d9c" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_lengths.tsv:md5,f974b52840431a5dae57bcb615badbf1" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_tpm.tsv:md5,85d108269769ae0d841247b9b9ed922d" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_tpm.tsv:md5,65862ed9d4a05abfab952e680dc0e49d" + ] + ], + [ + "versions.yml:md5,6ff317cceddc686f84d79cb976e1e28b" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.0" + }, + "timestamp": "2025-12-09T09:23:53.102679" + }, + "saccharomyces_cerevisiae - kallisto - gtf - extra_attributes": { + "content": [ + [ + [ + { + "id": "test" + }, + "test.gene_counts.tsv:md5,e89c28692ea214396b2d4cb702a804c3" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_counts_length_scaled.tsv:md5,4944841ac711124d29673b6b6ed16ef3" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_counts_scaled.tsv:md5,39d14e361434978b3cadae901a26a028" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_counts.tsv:md5,42e0106e75fa97c1c684c6d9060f1724" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_lengths.tsv:md5,db6becdf807fd164a9c63dd1dd916d9c" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_lengths.tsv:md5,f974b52840431a5dae57bcb615badbf1" + ] + ], + [ + [ + { + "id": "test" + }, + "test.gene_tpm.tsv:md5,85d108269769ae0d841247b9b9ed922d" + ] + ], + [ + [ + { + "id": "test" + }, + "test.transcript_tpm.tsv:md5,65862ed9d4a05abfab952e680dc0e49d" + ] + ], + [ + "versions.yml:md5,6ff317cceddc686f84d79cb976e1e28b" + ] + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "25.10.0" }, - "timestamp": "2024-12-17T19:25:16.373218283" + "timestamp": "2025-12-09T09:24:47.963548" } -} +} \ No newline at end of file diff --git a/modules/nf-core/tximeta/tximport/tests/nextflow.config b/modules/nf-core/tximeta/tximport/tests/nextflow.config new file mode 100644 index 000000000..766d98ff9 --- /dev/null +++ b/modules/nf-core/tximeta/tximport/tests/nextflow.config @@ -0,0 +1,5 @@ +process { + withName: 'TXIMETA_TXIMPORT' { + ext.args = '--gene_name_col gene_biotype' + } +} diff --git a/workflows/rnaseq/assets/multiqc/multiqc_config.yml b/workflows/rnaseq/assets/multiqc/multiqc_config.yml index bd24bc156..ee909f7d5 100644 --- a/workflows/rnaseq/assets/multiqc/multiqc_config.yml +++ b/workflows/rnaseq/assets/multiqc/multiqc_config.yml @@ -75,6 +75,7 @@ report_section_order: order: -1002 export_plots: true +export_plots_timeout: 60 disable_version_detection: true sample_names_replace_exact: true