diff --git a/CHANGELOG.md b/CHANGELOG.md index 06894ee..3db0a8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v2.0.1] + +This patch release of `wf-transcriptomes` handles an additional quantification failure case that was not observed before release. +Users of wf-transcriptomes v2.0.0 who have encountered issues during quantification should adopt this release. + +### Fixed +- Error in full_join encountered during runPerSampleBambuQuant when all read classes have no compatible transcript assignment. + + ## [v2.0.0] This release refreshes `wf-transcriptomes` around a new reference-guided transcriptomics workflow built on `bambu`, with `SQANTI3` transcript classification and QC, `DESeq2` for differential gene expression, `DEXSeq` for differential transcript usage, and per-sample modified base summarisation with `modkit` when modification tags are present in aligned BAMs. diff --git a/bin/workflow_glue_r/R/bambu.R b/bin/workflow_glue_r/R/bambu.R index 0e29769..0f2c003 100644 --- a/bin/workflow_glue_r/R/bambu.R +++ b/bin/workflow_glue_r/R/bambu.R @@ -325,6 +325,9 @@ bambu_known_quant_edge_error_kind <- function(msg) { if (grepl("eqClassById` with `y$eqClassById` due to incompatible types.", msg, fixed = TRUE)) { return("eqClassById_incompatible_types") } + if (grepl("Can't convert `x$txid` to match type of `txid` .", msg, fixed = TRUE)) { + return("txid_unspecified_incompatible_types") + } NA_character_ } diff --git a/bin/workflow_glue_r/tests/testthat/test_bambu.R b/bin/workflow_glue_r/tests/testthat/test_bambu.R index d301164..0d05d7f 100644 --- a/bin/workflow_glue_r/tests/testthat/test_bambu.R +++ b/bin/workflow_glue_r/tests/testthat/test_bambu.R @@ -663,6 +663,62 @@ testthat::test_that("quant mode catches known eqClassById incompatible-type edge testthat::expect_equal(colnames(se), c("sampleA")) }) +testthat::test_that("quant mode catches known txid unspecified edge case and writes empty outputs", { + fixture_dir <- tempfile("bambu-quant-known-txid-edge-") + dir.create(fixture_dir) + + chunk_bundle <- list( + chunk_id = "chr2", + seqname = "chr2", + aliases = c("sampleA"), + sample_df = data.frame(alias = c("sampleA"), stringsAsFactors = FALSE), + rc_files = list(sampleA = make_test_tx_se(sample_names = "sampleA")), + annotation_tx_count = 1L + ) + chunk_rds <- file.path(fixture_dir, "chr2.rds") + saveRDS(chunk_bundle, chunk_rds) + + discovered_annotation_rds <- file.path(fixture_dir, "annotations.rds") + saveRDS(make_test_bambu_row_ranges(fixture_dir), discovered_annotation_rds) + + analysis_called <- FALSE + fake_analysis <- function(...) { + analysis_called <<- TRUE + stop( + paste0( + "Can't convert `x$txid` ", + "to match type of `txid` ." + ), + call. = FALSE + ) + } + + args <- workflow_glue_r_normalise_args( + list( + mode = "quant", + genome = "genome.fa", + out_dir = file.path(fixture_dir, "out"), + chunk_rds = chunk_rds, + discovered_annotation_rds = discovered_annotation_rds, + transcriptome_mode = "discover", + ndr = NULL, + threads = 2 + ), + bambu_arg_spec() + ) + + testthat::expect_warning( + suppressMessages(main_run_bambu(args, analysis_fn = fake_analysis)), + "known bambu chunk edge case" + ) + + testthat::expect_true(analysis_called) + + se <- readRDS(file.path(args$out_dir, "bambu_transcripts.rds")) + testthat::expect_equal(nrow(se), 0) + testthat::expect_equal(colnames(se), c("sampleA")) +}) + testthat::test_that("empty mode writes valid empty outputs including bambu rds files", { fixture_dir <- tempfile("bambu-empty-mode-") dir.create(fixture_dir) diff --git a/nextflow.config b/nextflow.config index 5bfea6a..e48d5a5 100644 --- a/nextflow.config +++ b/nextflow.config @@ -67,7 +67,7 @@ manifest { description = 'Long-read transcript discovery, quantification, differential expression, QC and mod counting.' mainScript = 'main.nf' nextflowVersion = '>=23.04.2' - version = 'v2.0.0' + version = 'v2.0.1' } process {