IGV tracks mismatch index when there is one BAM per sample [CW-7332,CW-7349]

This commit is contained in:
Natalia Garcia 2026-06-16 14:25:43 +00:00
parent 13ce17c631
commit cd575b9fcb
4 changed files with 19 additions and 12 deletions

View File

@ -12,7 +12,7 @@ variables:
PYTEST_TESTS_PATH: "bin/workflow_glue/tests/common" PYTEST_TESTS_PATH: "bin/workflow_glue/tests/common"
RTEST_CONTAINER_NAME: "wf-transcriptomes-core" RTEST_CONTAINER_NAME: "wf-transcriptomes-core"
RTEST_CONTAINER_CONFIG_KEY: "container_sha" RTEST_CONTAINER_CONFIG_KEY: "container_sha"
WF_TEMPLATE_ENFORCEMENT_REF: "v6.1.0-rc1" WF_TEMPLATE_ENFORCEMENT_REF: "v6.1.0-rc2"
EKS_RUNNER_SIZE: "xlarge-highio" EKS_RUNNER_SIZE: "xlarge-highio"
pytest_wfcontainer: pytest_wfcontainer:

View File

@ -15,6 +15,7 @@ Users of wf-transcriptomes v2.0.0 who have encountered issues during discovery a
- "unable to find an inherited method for function 'rowData'" encountered during `runJointBambuDiscover` when providing many samples. The workflow now correctly handles data spilled to disk by bambu discover. - "unable to find an inherited method for function 'rowData'" encountered during `runJointBambuDiscover` when providing many samples. The workflow now correctly handles data spilled to disk by bambu discover.
- Volcano plot class counts incorrect when `log2FoldChange` or `padj` columns contained NA values. - Volcano plot class counts incorrect when `log2FoldChange` or `padj` columns contained NA values.
- Adjusted p-values below 0.001 in the volcano selection table are now shown in scientific notation instead of being rounded to 0.000. - Adjusted p-values below 0.001 in the volcano selection table are now shown in scientific notation instead of being rounded to 0.000.
- IGV track not correctly loading in EPI2ME Desktop when a sample consists of a single input BAM.
## [v2.0.0] ## [v2.0.0]

View File

@ -480,14 +480,15 @@ def xam_ingress(Map arguments, aln_ref_ch = null)
output_xam_fmt, output_xam_fmt,
margs margs
) )
// Update meta is unaligned // Update meta for newly aligned inputs
mm2_aln_final = mm2_aln.alignment.map{ mm2_aln_final = mm2_aln.alignment.map{
meta, xam, xai, stats -> meta, xam, xai, stats ->
// remove alignment routing metadata that is no longer required // remove alignment routing metadata that is no longer required
def newmeta = meta.findAll { def newmeta = meta.findAll {
k, v -> !(k in ['has_reads', 'requires_alignment']) k, v -> !(k in ['has_reads', 'requires_alignment'])
} }
[newmeta + [is_unaligned: false], xam, xai, stats] // flip is_unaligned marker and drop references to input xam
[newmeta + [is_unaligned: false, src_xam: null, src_xai: null], xam, xai, stats]
} }
// Process BAM files that do not require realignment by passing them through the standard downstream steps (merging, sorting, indexing, etc.) // Process BAM files that do not require realignment by passing them through the standard downstream steps (merging, sorting, indexing, etc.)
ch_result_tmp = alignment_fork.noalign.map{ ch_result_tmp = alignment_fork.noalign.map{

23
main.nf
View File

@ -177,8 +177,9 @@ workflow wf {
.collect() .collect()
// meta.src_xam is non-null if BAMs are "passed through" // meta.src_xam is non-null if BAMs are "passed through"
// while meta.src_xai can be null if xam are provided without index
generated_alignment_outputs = reads generated_alignment_outputs = reads
.filter { meta, bam, bai, stats -> meta.src_xam == null } .filter { meta, bam, bai, stats -> meta.src_xam == null || meta.src_xai == null }
.flatMap { meta, bam, bai, stats -> .flatMap { meta, bam, bai, stats ->
def outdir = "samples/${meta.alias}/alignment" def outdir = "samples/${meta.alias}/alignment"
[ [
@ -343,7 +344,6 @@ workflow {
] + ingress_args, ref_genome) ] + ingress_args, ref_genome)
} }
sample_sheet_aliases = sample_sheet == OPTIONAL_FILE ? sample_sheet_aliases = sample_sheet == OPTIONAL_FILE ?
null : null :
sample_sheet sample_sheet
@ -359,7 +359,6 @@ workflow {
} }
} }
analysis_samples = samples analysis_samples = samples
.filter { meta, xam, xai, stats -> .filter { meta, xam, xai, stats ->
boolean is_excluded = false boolean is_excluded = false
@ -387,7 +386,6 @@ workflow {
} }
processed_samples = analysis_samples processed_samples = analysis_samples
pipeline_run = wf(processed_samples, sample_sheet, ref_genome, ref_annotation) pipeline_run = wf(processed_samples, sample_sheet, ref_genome, ref_annotation)
results = pipeline_run.results results = pipeline_run.results
@ -417,11 +415,18 @@ workflow {
.map { [ it[0], "reference" ] } .map { [ it[0], "reference" ] }
igv_alignment_paths = processed_samples igv_alignment_paths = processed_samples
.map { meta, bam, bai, stat -> [ .map { meta, bam, bai, stat ->
meta.src_xam ?: "${meta.alias},samples/${meta.alias}/alignment/reads.bam", // Fall back to the published BAM/BAI pair whenever either source path is missing.
meta.src_xai ?: "${meta.alias},samples/${meta.alias}/alignment/reads.bam.bai" def use_published_alignment = (meta.src_xam == null || meta.src_xai == null)
] } [
.flatten() use_published_alignment
? "${meta.alias},samples/${meta.alias}/alignment/reads.bam"
: "${meta.alias},${meta.src_xam}",
use_published_alignment
? "${meta.alias},samples/${meta.alias}/alignment/reads.bam.bai"
: "${meta.alias},${meta.src_xai}",
]
}.flatten()
// convert [alias0, [bw00...bw0N]] to [alias0, bw00] ... [aliasN, bwNN] // convert [alias0, [bw00...bw0N]] to [alias0, bw00] ... [aliasN, bwNN]
// allowing for [aliasM, bwM0] if only one bw is output because ... nextflow // allowing for [aliasM, bwM0] if only one bw is output because ... nextflow