diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e9503db1..9c9222af 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,6 +41,9 @@ repos: hooks: - id: nextflow-lint files: '\.nf$|nextflow\.config$' + # nf-core component tests are nf-core/modules' own; some include modules this pipeline does not install + # (subworkflows/nf-core/deepvariant/tests includes deepvariant/rundeepvariant) + exclude: "^(modules|subworkflows)/nf-core/.*/tests/" args: ["-output", "json"] - repo: local hooks: diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b301bf5..136cbb4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -66,6 +66,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#182](https://github.com/IntGenomicsLab/lrsomatic/pull/182) - Added `--vcf` to the default `vep_args` so VEP writes VCF output rather than its default tab-delimited format (@AmberVerhasselt). - [#183](https://github.com/IntGenomicsLab/lrsomatic/pull/183) - Corrected the `github` URL for Laurens Lambrechts in `manifest.contributors`, which was a copy of @MariosEft97's, to @laulambr. RO-Crate metadata updated to match (@ljwharbers). +### `Dependencies` + +- [#212](https://github.com/IntGenomicsLab/lrsomatic/pull/212) - Updated all nf-core modules and the `bam_stats_samtools` subworkflow to the current nf-core/modules master with `nf-core modules update` (the `utils_*` subworkflows stay on the template's versions, because their master needs nf-schema 3.0.0), and bumped the tools further where nf-core lags the release and a single-tool biocontainer could be used (recorded as module patches). The callers follow the new module interfaces: `.tbi`/`.csi`/`.bai` outputs are now one `.index` channel, `WGET` takes the file suffix in its input tuple, and most modules report versions through the `versions` topic. The variant callers (Clair3, ClairS, DeepVariant, DeepSomatic) are updated in a separate PR (@ljwharbers). + + | Tool | Old | New | Notes | + | --------------- | ---------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | `bcftools` | 1.20 / 1.22 | 1.24 | All nf-core and local bcftools modules, `VCFSPLIT`, `VEPPLUGIN_EVE`/`VEPPLUGIN_REVEL`. `BCFTOOLS_NORM` now runs with `--check-ref w`: 1.24 aborts when a REF differs from the FASTA, and Clair3 writes `N` where GRCh38 has IUPAC codes (e.g. `B` at chr3:16902883), which 1.22 accepted | + | `samtools` | 1.21 / 1.22.1 / 1.23.1 | 1.24 | Including `METAEXTRACT`; `minimap2/align` stays on nf-core's samtools 1.23.1 | + | `minimap2` | 2.29 | 2.30 | 2.31 has no minimap2 + samtools image yet | + | `mosdepth` | 0.3.11 | 0.3.14 | | + | `nanoplot` | 1.46.1 | 1.48.0 | | + | `ensembl-vep` | 115.2 | 116.1 | 116.2's biocontainer lacks `Math::CDF`; the default `--vep_cache_version` (113) is unchanged | + | `severus` | 1.6 | 1.7 | | + | `cramino` | 1.3.0 | 2.0.0 | **N50, N75, median and mean read length now use the full read length** (primary alignments, clipped bases included), so the report's N50 goes up; the old aligned values are new `... aligned` rows. `% from total alignments` is renamed `% from total reads` | + | `fibertools-rs` | 0.8.1 | 0.13.1 | **Fiber-seq BAMs now carry nucleosomes, MSPs and FIREs in the MolecularAnnotation tags `Ma` (`nuc`, `msp` and `fire` intervals) and `Aq` (their qualities)** instead of `ns`/`nl`/`as`/`al`/`aq`; downstream tools reading the old tags need `ft convert-tags` or an update | + | `wakhan` | 0.4.3 | 0.4.4 | 0.5.0 changes the output directory layout and has no biocontainer yet | + +- [#213](https://github.com/IntGenomicsLab/lrsomatic/pull/213) - Updated the small variant callers. **Germline and somatic calls change** with the new models (@ljwharbers). + + | Tool | Old | New | Notes | + | ------------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | `clair3` | 1.2.0 | 2.0.3 | Clair3 v2 runs on PyTorch and **cannot read the v1 TensorFlow models** the pipeline downloaded from ONT's CDN. Models bundled with the image (HKU's and ONT's recent R10.4.1 SUP/HAC ones, `hifi_revio`) are now used from the image with no download; other models are fetched as PyTorch directories from HKU (ONT's Rerio catalogue for `r9`/`r10` names) by the new `CLAIR3_MODEL` step, which replaces `WGET`/`UNTAR` and, unlike `WGET`, checks the TLS certificate (Clair3 unpickles the files). The GPU image is `hkubal/clair3:v2.0.2_gpu`, the newest published | + | `clairs` | 0.4.4 | 0.5.1 | Bundles Clair3 2.0.3 for its germline step | + | `deepvariant` | 1.9.0 | 1.10.0 | nf-core update; `make_examples` now takes its flags from the model (`--checkpoint`): the ONT model is 199 wide with the new fuzzy channel, and both models call easy sites with the small model | + | `deepsomatic` | 1.7.0 | 1.10.0 | `make_examples_somatic` now takes its flags from the model (`--checkpoint`) instead of a hard-coded channel list and pileup width; the paired PacBio model is 147 wide with 9 channels. The small model is kept off explicitly (`--nocall_small_model_examples`), because the module does not pass its calls on | + +- [#214](https://github.com/IntGenomicsLab/lrsomatic/pull/214) - Updated Wakhan from 0.4.4 to 0.5.0, run from `docker.io/ljwharbers/wakhan:0.5.0-histfix-1afd44d` (`oras://docker.io/ljwharbers/wakhan-sif:0.5.0-histfix-1afd44d` for Singularity/Apptainer) because no biocontainer was built for it. The image carries upstream commit 1afd44d4, which fixes the `IndexError` in `update_coverage_hist` that killed WAKHAN on some samples (KolmogorovLab/Wakhan#64). **The `wakhan/` output layout changes**: each solution is now `solution_{ploidy}_{purity}_{confidence}/` with `integer_profile.{bed,vcf,html,pdf}` (one boundary-aligned table for both haplotypes, replacing the two `*_HP_{1,2}.bed` files), `subclonal_profile.*`, `genes/genes_copynumber_states.*` and a `HiScanner_plots_data.zip` for the Wakhan web viewer; ranked solutions are `solution_rank_{n}`. Wakhan 0.5.0 no longer writes the per-chromosome `variation_plots`, `genome_copynumbers_details` plots or per-solution `loh_regions*.bed`. `LRSOMATICREPORT` now runs lrsomatic_report v1.6.1 (`ghcr.io/ljwharbers/lrsomatic-report:1.6.1`), which finds the copy-number plots in both layouts; v1.6.0 silently dropped them for 0.5.0 output. The WAKHAN stub now writes the outputs the module declares, and the version comes from `wakhan --version` (@ljwharbers). + ## v1.1.0 - [2026-04-28] ### `Added` diff --git a/conf/modules.config b/conf/modules.config index 279a016e..390816f0 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -122,7 +122,8 @@ process { withName: '.*:BCFTOOLS_NORM' { ext.prefix = { "${meta.id}.${meta.caller}_norm" } // 'consensus' splits multi-allelics so BCFTOOLS_ISEC can match them per ALT; BCFTOOLS_NORM_REJOIN rejoins them. - ext.args = { meta.split ? "-m -any -Oz" : "-Oz" } + // Warn, not abort, on REF mismatches: Clair3 writes N where GRCh38 has IUPAC codes, which bcftools 1.24 rejects + ext.args = { meta.split ? "-m -any -Oz --check-ref w" : "-Oz --check-ref w" } publishDir = [ enabled: false ] @@ -130,12 +131,12 @@ process { // Rejoin split multi-allelics ('consensus' only); LongPhase keys variants by position and cannot take two records at one POS. withName: '.*:GERMLINE_CONSENSUS:BCFTOOLS_NORM_REJOIN' { ext.prefix = { "${meta.id}_germline_sorted" } - ext.args = { '-m +any --output-type z --write-index=tbi' } + ext.args = { '-m +any --check-ref w --output-type z --write-index=tbi' } publishDir = [ enabled: false ] } withName: '.*:SOMATIC_CONSENSUS:BCFTOOLS_NORM_REJOIN' { ext.prefix = { "${meta.id}_somatic_sorted" } - ext.args = { '-m +any --output-type z --write-index=tbi' } + ext.args = { '-m +any --check-ref w --output-type z --write-index=tbi' } publishDir = [ enabled: false ] } @@ -179,12 +180,12 @@ process { // Split multi-allelics in both inputs so the CHROM,POS,REF,ALT verdict match works per ALT. withName: '.*:DS_VERDICT_SPLIT_DS' { ext.prefix = { "${meta.id}.deepsomatic_split" } - ext.args = { '-m -any --output-type z --write-index=tbi' } + ext.args = { '-m -any --check-ref w --output-type z --write-index=tbi' } publishDir = [ enabled: false ] } withName: '.*:DS_VERDICT_SPLIT_DV' { ext.prefix = { "${meta.id}.deepvariant_split" } - ext.args = { '-m -any --output-type z --write-index=tbi' } + ext.args = { '-m -any --check-ref w --output-type z --write-index=tbi' } publishDir = [ enabled: false ] } @@ -226,7 +227,7 @@ process { // Rejoin split multi-allelics; LongPhase keys variants by position and cannot take two records at one POS. withName: '.*:DS_GERMLINE_REJOIN' { ext.prefix = { "${meta.id}.deepvariant_germline" } - ext.args = { '-m +any --output-type z --write-index=tbi' } + ext.args = { '-m +any --check-ref w --output-type z --write-index=tbi' } publishDir = [ enabled: false ] } @@ -239,12 +240,10 @@ process { ] } + // DeepVariant 1.10 checkpoints carry their make_examples flags in model.example_info.json, read via + // --checkpoint: the ONT model is 199 wide with the new fuzzy channel, and both enable the small model withName: '.*DEEPVARIANT_MAKEEXAMPLES' { - ext.args = { - meta.platform == 'pb' - ? '--channel_list "BASE_CHANNELS,haplotype,base_6ma" --alt_aligned_pileup "diff_channels" --pileup_image_width "147"' - : '--channel_list "BASE_CHANNELS,haplotype" --alt_aligned_pileup "diff_channels" --pileup_image_width "99"' - } + ext.args = { "--checkpoint '/opt/models/${meta.platform == 'pb' ? 'pacbio' : 'ont_r104'}'" } publishDir = [ enabled: false ] @@ -272,12 +271,12 @@ process { ] } + // DeepSomatic 1.10 checkpoints carry their make_examples flags (channels, pileup width, thresholds) in + // model.example_info.json, which make_examples_somatic reads when given --checkpoint; the paired PacBio + // model is 147 wide and 9 channels, so hard-coded flags would no longer match call_variants. + // The small model stays off: the module does not collect its calls, so a checkpoint enabling it would drop them withName: '.*DEEPSOMATIC_MAKEEXAMPLES' { - ext.args = { - meta.paired_data - ? '--channel_list "BASE_CHANNELS,haplotype" --alt_aligned_pileup "diff_channels" --pileup_image_width "99"' - : '--channel_list "BASE_CHANNELS,haplotype,allele_frequency" --alt_aligned_pileup "diff_channels" --pileup_image_width "99"' - } + ext.args = { "--checkpoint '/opt/models/deepsomatic/${meta.platform == 'pb' ? 'pacbio' : 'ont'}${meta.paired_data ? '' : '_tumor_only'}' --nocall_small_model_examples" } publishDir = [ enabled: false ] @@ -299,15 +298,7 @@ process { } withName: '.*DEEPSOMATIC_CALLVARIANTS' { - ext.args = { - meta.platform == 'pb' - ? (meta.paired_data - ? "--checkpoint '/opt/models/deepsomatic/pacbio'" - : "--checkpoint '/opt/models/deepsomatic/pacbio_tumor_only'" ) - : (meta.paired_data - ? "--checkpoint '/opt/models/deepsomatic/ont'" - : "--checkpoint '/opt/models/deepsomatic/ont_tumor_only'") - } + ext.args = { "--checkpoint '/opt/models/deepsomatic/${meta.platform == 'pb' ? 'pacbio' : 'ont'}${meta.paired_data ? '' : '_tumor_only'}'" } publishDir = [ enabled : false ] @@ -739,25 +730,13 @@ process { ] } - withName : '.*:WGET' { - ext.args = { - [ - "--no-check-certificate" - ].join(' ').trim() } - ext.suffix = { "tar.gz" } - publishDir = [ - enabled: false - ] - } - - withName : '.*:UNTAR' { + withName : '.*:CLAIR3_MODEL' { publishDir = [ enabled: false ] } withName : '.*:WGET_(REVEL|EVE)' { - ext.suffix = { "zip" } publishDir = [ enabled: false ] diff --git a/docs/output.md b/docs/output.md index 6ddf17e8..1ecb62a0 100644 --- a/docs/output.md +++ b/docs/output.md @@ -626,24 +626,28 @@ Mutational signature analysis of the PASS SNVs and indels in the phased somatic ``` ├── wakhan -│ ├── {ploidy}_{purity}_{confidence} -│ │ ├── bed_output +│ ├── solution_{ploidy}_{purity}_{confidence} +│ │ ├── genes │ │ │ ├── genes_copynumber_states.bed -│ │ │ ├── loh_regions.bed -│ │ │ ├── sample_{ploidy}_{purity}_{confidence}_HP_1.bed -│ │ │ ├── sample_{ploidy}_{purity}_{confidence}_HP_2.bed -│ │ ├── variation_plots -│ │ │ ├── chr{1-22,X,Y}_cn.html -│ │ │ ├── chr{1-22,X,Y}_cn.pdf -│ │ │ ├── CN_VARIATION_INDEX.html -│ │ ├── sample_{purity}_{ploidy}_{confidence}_genes_genome.html -│ │ ├── sample_{purity}_{ploidy}_{confidence}_genes_genome.pdf -│ │ ├── sample_{purity}_{ploidy}_{confidence}_genome_copynumbers_breakpoints.html -│ │ ├── sample_{purity}_{ploidy}_{confidence}_genome_copynumbers_breakpoints.pdf -│ │ ├── sample_{purity}_{ploidy}_{confidence}_genome_copynumbers_details.html -│ │ ├── sample_{purity}_{ploidy}_{confidence}_genome_copynumbers_details.pdf +│ │ │ ├── genes_copynumber_states.html +│ │ │ ├── genes_copynumber_states.pdf +│ │ ├── integer_profile.bed +│ │ ├── integer_profile.html +│ │ ├── integer_profile.pdf +│ │ ├── integer_profile.vcf +│ │ ├── subclonal_profile.bed +│ │ ├── subclonal_profile.html +│ │ ├── subclonal_profile.pdf +│ │ ├── subclonal_profile.vcf +│ │ ├── HiScanner_plots_data.zip +│ ├── solution_rank_{rank} │ ├── coverage_data -│ │ ├── {0-23}_SNPS.csv +│ │ ├── {0-23}_SNPs.csv +│ │ ├── baf.csv +│ │ ├── cancer_genes_coverage.csv +│ │ ├── cn_coverage.png +│ │ ├── cn_peaks.png +│ │ ├── coverage.csv │ │ ├── coverage_ps.csv │ │ ├── phase_corrected_coverage.csv │ │ ├── pileup_SNPs.csv @@ -652,53 +656,36 @@ Mutational signature analysis of the PASS SNVs and indels in the phased somatic │ │ ├── chr{1-22,X,Y}.pdf │ │ ├── COVERAGE_INDEX.html │ ├── phasing_output -│ │ ├── chr{1-22,X,Y}_phase_correction_0.html -│ │ ├── chr{1-22,X,Y}_phase_correction_1.html +│ │ ├── chr{1-22,X,Y}_phase_correction_{0.1,0.2,0.3,1,2}.html │ │ ├── chr{1-22,X,Y}_without_phase_correction.html │ │ ├── chr{1-22,X,Y}.pdf -│ │ ├── sample.rephased.vcf.gz -│ │ ├── sample.rephased.vcf.gz.tbi +│ │ ├── PHASE_CORRECTION_INDEX.html +│ │ ├── rephased.vcf.gz +│ │ ├── rephased.vcf.gz.csi │ ├── snps_loh_plots -│ │ ├── chr{1-22,X,Y}_snps_loh.html -│ ├── sample_heatmap_ploidy_purity.html -│ ├── sample_heatmap_ploidy_purity.html.pdf -│ ├── sample_optimized_peak.html +│ │ ├── {sample}_genome_snps_ratio_loh.html +│ ├── {sample}_heatmap_ploidy_purity.html +│ ├── {sample}_heatmap_ploidy_purity.html.pdf │ ├── solutions_ranks.tsv - ``` -| File | Description | -| ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- | -| `{ploidy}_{purity}_{confidence}/bed_output/genes_copynumber_states.bed` | bed file containing allele specific copy number values with coverage information | -| `{ploidy}_{purity}_{confidence}/bed_output/loh_regions.bed` | bed file containing positions of loss of heterozygosity regions | -| `{ploidy}_{purity}_{confidence}/bed_output/sample_{ploidy}_{purity}_{confidence}_HP_1.bed` | bed file containing copy number states, coverage, and SV breakpoints for haplotype 1 | -| `{ploidy}_{purity}_{confidence}/bed_output/sample_{ploidy}_{purity}_{confidence}_HP_2.bed` | bed file containing copy number states, coverage, and SV breakpoints for haplotype 2 | -| `{ploidy}_{purity}_{confidence}/variation_plots/chr{1-22,X,Y}_cn.html` | html based plotly plot of copy number and coverage for individual chromosomes | -| `{ploidy}_{purity}_{confidence}/variation_plots/chr{1-22,X,Y}_cn.pdf` | pdf based plotly plot of copy number and coverage for individual chromosomes | -| `{ploidy}_{purity}_{confidence}/variation_plots/CN_VARIATION_INDEX.html` | unclear html plot | -| `{ploidy}_{purity}_{confidence}/sample_{purity}_{ploidy}_{confidence}_genes_genome.html` | html plots of copy number variations in highlighted genes | -| `{ploidy}_{purity}_{confidence}/sample_{purity}_{ploidy}_{confidence}_genes_genome.pdf` | pdf plots of copy number variations in highlighted genes | -| `{ploidy}_{purity}_{confidence}/sample_{purity}_{ploidy}_{confidence}_genome_copynumbers_details.html` | genome-wide html copy number plots with coverage information on same axis | -| `{ploidy}_{purity}_{confidence}/sample_{purity}_{ploidy}_{confidence}_genome_copynumbers_details.pdf` | genome-wide pdf copy number plots with coverage information on same axis | -| `coverage_data/{0-23}_SNP.csv` | CSV of coverage data per chromosome | -| `coverage_data/coverage_ps.csv` | CSV of overall haplotype specific coverage data | -| `coverage_data/coverage.csv` | CSV of overall coverage data | -| `coverage_data/phase_corrected_coverage.csv` | CSV of overall phase-corrected coverage data | -| `coverage_data/pileup_SNPs.csv` | CSV of SNP pileup data | -| `coverage_plots/chr{1-22,X,Y}_cov.html` | chromosome specific html coverage plots | -| `coverage_plots/chr{1-22,X,Y}_cov.pdf` | chromosome specific pdf coverage plots | -| `coverage_plots/COVERAGE_INDEX.html` | unclear html plot | -| `phasing_output/chr{1-23,X,Y}_phase_correction_0.html` | Phase-switch error correction plot per chromosome | -| `phasing_output/chr{1-23,X,Y}_phase_correction_1.html` | Phase-switch error correction plot per chromosome | -| `phasing_output/chr{1-22,X,Y}_without_phase_correction.html` | Phase-switch error without phase correction plot per chromosome | -| `phasing_output/chr{1-22,X,Y}.pdf` | Phase-switch error correction plot | -| `phasing_output/sample_rephased.vcf.gz` | phase corrected SNP vcf file | -| `phasing_output/sample_rephased.vcf.gz.tbi` | phase corrected SNP vcf index file | -| `snps_loh_plots/chr{1-22,X,Y}_snps_loh.html` | interactive HTML plots of SNP allele frequencies and loss of heterozygosity regions per chromosome | -| `sample_heatmap_ploidy_purity.html` | heatmap html plot of purity ploidy fit | -| `sample_heatmap_ploidy_purity.html.pdf` | heatmap pdf plot of purity ploidy fit | -| `sample_optimized_peak.html` | optimization peak plot | -| `solutions_ranks.tsv` | rank of potential purity ploidy solutions | +| File | Description | +| ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `solution_{ploidy}_{purity}_{confidence}/integer_profile.bed` | Integer copy-number segments for one purity/ploidy solution, both haplotypes on shared boundaries: coverage, copy-number state and confidence per haplotype, and the IDs of SV breakpoints in the segment | +| `solution_{ploidy}_{purity}_{confidence}/integer_profile.vcf` | The integer copy-number segments as VCF | +| `solution_{ploidy}_{purity}_{confidence}/integer_profile.html` | Interactive genome-wide plot of the integer copy-number profile with SV breakpoints (`.pdf`: static version) | +| `solution_{ploidy}_{purity}_{confidence}/subclonal_profile.*` | The same for subclonal copy-number states (`.bed`, `.vcf`, `.html`, `.pdf`) | +| `solution_{ploidy}_{purity}_{confidence}/genes/genes_copynumber_states.*` | Copy-number states of the genes of interest (`.bed`) and their plots (`.html`, `.pdf`) | +| `solution_{ploidy}_{purity}_{confidence}/HiScanner_plots_data.zip` | The solution's profiles, coverage, BAF and breakpoints bundled for the [Wakhan visualisation web viewer](https://wakhan-visualization.github.io/) | +| `solution_rank_{rank}` | The solution of that rank in `solutions_ranks.tsv` (a copy of its `solution_{ploidy}_{purity}_{confidence}` directory) | +| `coverage_data/*.csv` | Per-chromosome SNP tables, BAF, haplotype-specific and phase-corrected coverage, and SNP pileups; tumour-only runs also write `{sample}_loh_segments.csv` | +| `coverage_data/*.png` | Copy-number coverage and peak plots | +| `coverage_plots/chr{1-22,X,Y}_cov.html` | Coverage plot per chromosome (`.pdf`: static version); `COVERAGE_INDEX.html` links them | +| `phasing_output/*.html` | Phase-switch error plots per chromosome, with and without correction; `PHASE_CORRECTION_INDEX.html` links them | +| `phasing_output/rephased.vcf.gz` | Phase-corrected SNP VCF, with its `.csi` index | +| `snps_loh_plots/{sample}_genome_snps_ratio_loh.html` | SNP allele ratios and loss-of-heterozygosity regions (tumour-only runs) | +| `{sample}_heatmap_ploidy_purity.html` | Heatmap of the purity/ploidy fit (`.html.pdf`: static version) | +| `solutions_ranks.tsv` | Ranked purity/ploidy solutions; `repository_name` is the solution's directory | diff --git a/docs/usage.md b/docs/usage.md index 1760510d..232a7244 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -43,17 +43,17 @@ sample1,tumour3.bam,,pb,male,n ### Full Description of Samplesheet Columns -| Column | Description | -| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | -| `bam_tumor` | Full path to BAM file for the tumor. File must end in `.bam`. | -| `bam_normal` | Full path to BAM file for the tumor. File must end in `.bam`. | -| `platform` | A string specifying the platform used for sequencing, can be either `pb` for PacBio sequencing data or `ont` for Oxford Nanopore sequencing data | -| `sex` | A string specifying the biological sex of the sample, can either be `m` or `f` | -| `fiber` | A string specifying if the sample has been subjected to Fiber-seq. Can either be `y` or `n` | -| `clair3_model` | A string describing which model is to be used for Clair3's small variant calling (_optional_) | -| `clairSTO_model` | A string describing which model is to be used for ClairS-TO's small variant calling (_optional_) | -| `clairS_model` | A string describing which model is to be used for ClairS's small variant calling (_optional_) | +| Column | Description | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `sample` | Custom sample name. This entry will be identical for multiple sequencing libraries/runs from the same sample. Spaces in sample names are automatically converted to underscores (`_`). | +| `bam_tumor` | Full path to BAM file for the tumor. File must end in `.bam`. | +| `bam_normal` | Full path to BAM file for the tumor. File must end in `.bam`. | +| `platform` | A string specifying the platform used for sequencing, can be either `pb` for PacBio sequencing data or `ont` for Oxford Nanopore sequencing data | +| `sex` | A string specifying the biological sex of the sample, can either be `m` or `f` | +| `fiber` | A string specifying if the sample has been subjected to Fiber-seq. Can either be `y` or `n` | +| `clair3_model` | A Clair3 model name (_optional_). Clair3 v2 only reads PyTorch models: names bundled with Clair3 (e.g. `r1041_e82_400bps_sup_v500`, `hifi_revio`) are used from the image, other ONT names are downloaded from [HKU's PyTorch conversion of Rerio](https://www.bio8.cs.hku.hk/clair3/clair3_models_rerio_pytorch/) | +| `clairSTO_model` | A string describing which model is to be used for ClairS-TO's small variant calling (_optional_) | +| `clairS_model` | A string describing which model is to be used for ClairS's small variant calling (_optional_) | An [example samplesheet](../assets/samplesheet.csv) has been provided with the pipeline. diff --git a/modules.json b/modules.json index ab8746ac..f313de04 100644 --- a/modules.json +++ b/modules.json @@ -7,103 +7,107 @@ "nf-core": { "ascat": { "branch": "master", - "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"], "patch": "modules/nf-core/ascat/ascat.diff" }, "bcftools/annotate": { "branch": "master", - "git_sha": "3d9c2f4beaa4f62b3f006928fd9095a496d1e5a8", - "installed_by": ["modules"] + "git_sha": "feef37435aea56816adf4b3bde1fc76aac327a8d", + "installed_by": ["modules"], + "patch": "modules/nf-core/bcftools/annotate/bcftools-annotate.diff" }, "bcftools/concat": { "branch": "master", - "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", - "installed_by": ["modules", "vcf_gather_bcftools"] + "git_sha": "feef37435aea56816adf4b3bde1fc76aac327a8d", + "installed_by": ["modules", "vcf_gather_bcftools"], + "patch": "modules/nf-core/bcftools/concat/bcftools-concat.diff" }, "bcftools/isec": { "branch": "master", - "git_sha": "3b2c3559699a7bca6a7c2b220695a072e030e17d", + "git_sha": "feef37435aea56816adf4b3bde1fc76aac327a8d", "installed_by": ["modules"], "patch": "modules/nf-core/bcftools/isec/bcftools-isec.diff" }, "bcftools/merge": { "branch": "master", - "git_sha": "3d9c2f4beaa4f62b3f006928fd9095a496d1e5a8", + "git_sha": "feef37435aea56816adf4b3bde1fc76aac327a8d", "installed_by": ["modules"], "patch": "modules/nf-core/bcftools/merge/bcftools-merge.diff" }, "bcftools/norm": { "branch": "master", - "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", - "installed_by": ["modules"] + "git_sha": "feef37435aea56816adf4b3bde1fc76aac327a8d", + "installed_by": ["modules"], + "patch": "modules/nf-core/bcftools/norm/bcftools-norm.diff" }, "bcftools/query": { "branch": "master", - "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", + "git_sha": "feef37435aea56816adf4b3bde1fc76aac327a8d", "installed_by": ["modules"], "patch": "modules/nf-core/bcftools/query/bcftools-query.diff" }, "bcftools/sort": { "branch": "master", - "git_sha": "6383d8fe58f9498eecd5aa303e71a4a932d1e9f6", + "git_sha": "feef37435aea56816adf4b3bde1fc76aac327a8d", "installed_by": ["modules", "vcf_gather_bcftools"], "patch": "modules/nf-core/bcftools/sort/bcftools-sort.diff" }, "bcftools/view": { "branch": "master", "git_sha": "feef37435aea56816adf4b3bde1fc76aac327a8d", - "installed_by": ["modules"] + "installed_by": ["modules"], + "patch": "modules/nf-core/bcftools/view/bcftools-view.diff" }, "deepvariant/callvariants": { "branch": "master", - "git_sha": "f2b138ee1d91f67d31c187317d7e83e429bf0309", + "git_sha": "4a4ccce52d5a280b0b136ff3ac841607debed92b", "installed_by": ["deepvariant"], "patch": "modules/nf-core/deepvariant/callvariants/deepvariant-callvariants.diff" }, "deepvariant/makeexamples": { "branch": "master", - "git_sha": "f2b138ee1d91f67d31c187317d7e83e429bf0309", + "git_sha": "4a4ccce52d5a280b0b136ff3ac841607debed92b", "installed_by": ["deepvariant"], "patch": "modules/nf-core/deepvariant/makeexamples/deepvariant-makeexamples.diff" }, "deepvariant/postprocessvariants": { "branch": "master", - "git_sha": "f2b138ee1d91f67d31c187317d7e83e429bf0309", + "git_sha": "4a4ccce52d5a280b0b136ff3ac841607debed92b", "installed_by": ["deepvariant"], "patch": "modules/nf-core/deepvariant/postprocessvariants/deepvariant-postprocessvariants.diff" }, "ensemblvep/download": { "branch": "master", - "git_sha": "90cdd21fd96ccbdb3bc90797ca69570d18391055", + "git_sha": "e308fe14c49cf664228866a2f17f175efae6bf88", "installed_by": ["modules"] }, "ensemblvep/vep": { "branch": "master", - "git_sha": "890fdcff71928fc1470d3e669d4c430c8c770297", + "git_sha": "7047ebe92547d7f029fa6e71d2c893d5fb131938", "installed_by": ["modules"], "patch": "modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff" }, "longphase/haplotag": { "branch": "master", - "git_sha": "b8d30a43f33aee3148b0e9e9f00587984a4ac195", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "longphase/phase": { "branch": "master", - "git_sha": "b8d30a43f33aee3148b0e9e9f00587984a4ac195", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"], "patch": "modules/nf-core/longphase/phase/longphase-phase.diff" }, "minimap2/align": { "branch": "master", - "git_sha": "5c9f8d5b7671237c906abadc9ff732b301ca15ca", + "git_sha": "135d883a43b1a2324b4112cd270cf22e20835533", "installed_by": ["modules"], "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" }, "minimap2/index": { "branch": "master", - "git_sha": "14980f759266eec42dac401fcafeb83d6c957b41", + "git_sha": "135d883a43b1a2324b4112cd270cf22e20835533", "installed_by": ["modules"] }, "modkit/pileup": { @@ -114,7 +118,7 @@ }, "mosdepth": { "branch": "master", - "git_sha": "6832b69ef7f98c54876d6436360b6b945370c615", + "git_sha": "999b9db1d6b8bdc591e1168e183f4cc87d6606f9", "installed_by": ["modules"] }, "multiqc": { @@ -124,47 +128,48 @@ }, "nanoplot": { "branch": "master", - "git_sha": "682f789f93070bd047868300dd018faf3d434e7c", - "installed_by": ["modules"] + "git_sha": "cc4d441624bd2a0db697502bdde9005a5a5f0b36", + "installed_by": ["modules"], + "patch": "modules/nf-core/nanoplot/nanoplot.diff" }, "pigz/uncompress": { "branch": "master", - "git_sha": "f84336b7fa91a65aa61d215b8c109fbb8e4b4ac6", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] }, "samtools/cat": { "branch": "master", - "git_sha": "f9edc59be2fe25bb6fc73ca4dfc0d28246f2a2d6", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["modules"] }, "samtools/faidx": { "branch": "master", - "git_sha": "b2e78932ef01165fd85829513eaca29eff8e640a", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["modules"] }, "samtools/flagstat": { "branch": "master", - "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_stats_samtools"] }, "samtools/idxstats": { "branch": "master", - "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_stats_samtools"] }, "samtools/index": { "branch": "master", - "git_sha": "1d2fbdcbca677bbe8da0f9d0d2bb7c02f2cab1c9", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["modules"] }, "samtools/merge": { "branch": "master", - "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", + "git_sha": "972faf6f783fe9685267220965a91690741465f9", "installed_by": ["modules"] }, "samtools/stats": { "branch": "master", - "git_sha": "fe93fde0845f907fc91ad7cc7d797930408824df", + "git_sha": "9339809fcb90af8a8b7051e6cd914894d5c52002", "installed_by": ["bam_stats_samtools"], "patch": "modules/nf-core/samtools/stats/samtools-stats.diff" }, @@ -176,7 +181,7 @@ }, "savana/cna": { "branch": "master", - "git_sha": "cc9117a41906d96832594d98f23da7805a87eca2", + "git_sha": "6ef220fd9252b42fb3c50348bbdbcb6246730686", "installed_by": ["modules"], "patch": "modules/nf-core/savana/cna/savana-cna.diff" }, @@ -193,28 +198,23 @@ }, "severus": { "branch": "master", - "git_sha": "4dd9d8439a429c7ee566e0e2347f76ddeef27e66", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"], "patch": "modules/nf-core/severus/severus.diff" }, - "untar": { - "branch": "master", - "git_sha": "447f7bc0fa41dfc2400c8cad4c0291880dc060cf", - "installed_by": ["modules"] - }, "unzip": { "branch": "master", - "git_sha": "4dd9d8439a429c7ee566e0e2347f76ddeef27e66", + "git_sha": "1c43a7e22f04cf19c9f9d3de7e7e5a3addd9382a", "installed_by": ["modules"] }, "wget": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "8dfb9868efd0e39f27ae0fed1ed204dc8f0b2a13", "installed_by": ["modules"] }, "whatshap/stats": { "branch": "master", - "git_sha": "bfab71f4d68c1aaff09335a3433e7b2836918b2a", + "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", "installed_by": ["modules"] } } @@ -223,12 +223,12 @@ "nf-core": { "bam_stats_samtools": { "branch": "master", - "git_sha": "7ac6cbe7c17c2dad685da7f70496c8f48ea48687", + "git_sha": "6ef220fd9252b42fb3c50348bbdbcb6246730686", "installed_by": ["subworkflows"] }, "deepvariant": { "branch": "master", - "git_sha": "f2b138ee1d91f67d31c187317d7e83e429bf0309", + "git_sha": "6ef220fd9252b42fb3c50348bbdbcb6246730686", "installed_by": ["subworkflows"], "patch": "subworkflows/nf-core/deepvariant/deepvariant.diff" }, diff --git a/modules/local/bcftools/view/environment.yml b/modules/local/bcftools/view/environment.yml index cb55500b..99e376d6 100644 --- a/modules/local/bcftools/view/environment.yml +++ b/modules/local/bcftools/view/environment.yml @@ -4,6 +4,7 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/local/bcftools/view/main.nf b/modules/local/bcftools/view/main.nf index 63905dd2..85a2c0f3 100644 --- a/modules/local/bcftools/view/main.nf +++ b/modules/local/bcftools/view/main.nf @@ -3,9 +3,9 @@ process BCFTOOLS_VIEW { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/local/clair3/environment.yml b/modules/local/clair3/environment.yml index e1a7b846..603b4f57 100644 --- a/modules/local/clair3/environment.yml +++ b/modules/local/clair3/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::clair3=1.0.10" + - "bioconda::clair3=2.0.3" diff --git a/modules/local/clair3/main.nf b/modules/local/clair3/main.nf index 6adf6934..5c737383 100644 --- a/modules/local/clair3/main.nf +++ b/modules/local/clair3/main.nf @@ -3,9 +3,10 @@ process CLAIR3 { label "${params.use_gpu ? 'process_gpu_very_high' : 'process_very_high'}" conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - (params.use_gpu ? 'docker://hkubal/clair3-gpu:v1.2.0' : 'https://depot.galaxyproject.org/singularity/clair3:1.2.0--py310h779eee5_0') : - (params.use_gpu ? 'docker.io/hkubal/clair3-gpu:v1.2.0' : 'quay.io/biocontainers/clair3:1.2.0--py310h779eee5_0') }" + // No GPU image was published for 2.0.3; 2.0.2 differs only by the --gender option, which is not used here + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + (params.use_gpu ? 'docker://docker.io/hkubal/clair3:v2.0.2_gpu' : 'https://depot.galaxyproject.org/singularity/clair3:2.0.3--py311hbc58adc_0') : + (params.use_gpu ? 'docker.io/hkubal/clair3:v2.0.2_gpu' : 'quay.io/biocontainers/clair3:2.0.3--py311hbc58adc_0') }" input: tuple val(meta) , path(bam), path(bai), path(model), val(platform) @@ -26,16 +27,22 @@ process CLAIR3 { def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" def use_gpu = task.ext.use_gpu as boolean + // An empty model input means the model is bundled with the image: models/ next to run_clair3.sh + // in the biocontainer, /opt/models in the HKU Docker image + def model_path = model ? "${model}" : "\${CLAIR3_MODELS}/${meta.clair3_model}" """ ${use_gpu ? 'export CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES:-0}' : ':'} + CLAIR3_MODELS=\$(dirname \$(command -v run_clair3.sh))/models + [ -d "\${CLAIR3_MODELS}" ] || CLAIR3_MODELS=/opt/models + run_clair3.sh \\ --bam_fn=${bam} \\ --ref_fn=${reference} \\ --threads=${task.cpus} \\ --output=. \\ --platform=${platform} \\ - --model=${model} \\ + --model_path=${model_path} \\ --sample_name=${prefix} \\ ${use_gpu ? '--use_gpu --device=cuda:0' : ''} \\ ${args} diff --git a/modules/nf-core/untar/environment.yml b/modules/local/clair3_model/environment.yml similarity index 52% rename from modules/nf-core/untar/environment.yml rename to modules/local/clair3_model/environment.yml index 9b926b1f..daa07275 100644 --- a/modules/nf-core/untar/environment.yml +++ b/modules/local/clair3_model/environment.yml @@ -4,9 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - conda-forge::coreutils=9.5 - - conda-forge::grep=3.11 - - conda-forge::gzip=1.13 - - conda-forge::lbzip2=2.5 - - conda-forge::sed=4.8 - - conda-forge::tar=1.34 + # renovate: datasource=conda depName=conda-forge/wget + - conda-forge::wget=1.21.4 diff --git a/modules/local/clair3_model/main.nf b/modules/local/clair3_model/main.nf new file mode 100644 index 00000000..62fda67f --- /dev/null +++ b/modules/local/clair3_model/main.nf @@ -0,0 +1,36 @@ +process CLAIR3_MODEL { + tag "${meta.id}" + label 'process_single' + + conda "${moduleDir}/environment.yml" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3b/3b54fa9135194c72a18d00db6b399c03248103f87e43ca75e4b50d61179994b3/data' + : 'community.wave.seqera.io/library/wget:1.21.4--8b0fcde81c17be5e'}" + + input: + tuple val(meta), val(url) + + output: + tuple val(meta), path("${meta.id}", type: 'dir'), emit: model + tuple val("${task.process}"), val('wget'), eval('wget --version | head -1 | cut -d " " -f 3'), emit: versions_wget, topic: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + // Clair3 v2 models are directories holding two PyTorch checkpoints, served unpacked. Clair3 unpickles + // them, so the certificate is checked: wget's default CA path is empty in the image, but conda ships a bundle + """ + mkdir ${meta.id} + for checkpoint in pileup.pt full_alignment.pt; do + wget ${args} --ca-certificate=\${CONDA_PREFIX:-/opt/conda}/ssl/cert.pem -O ${meta.id}/\$checkpoint ${url}/\$checkpoint + done + """ + + stub: + """ + mkdir ${meta.id} + touch ${meta.id}/pileup.pt ${meta.id}/full_alignment.pt + """ +} diff --git a/modules/local/clair3_model/meta.yml b/modules/local/clair3_model/meta.yml new file mode 100644 index 00000000..25ac1f5a --- /dev/null +++ b/modules/local/clair3_model/meta.yml @@ -0,0 +1,59 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "clair3_model" +description: Download a Clair3 v2 (PyTorch) model directory that is not bundled with the Clair3 image +keywords: + - clair3 + - model + - download +tools: + - "wget": + description: "GNU Wget is a free software package for retrieving files using HTTP, HTTPS, FTP and FTPS" + homepage: "https://www.gnu.org/software/wget/" + documentation: "https://www.gnu.org/software/wget/manual/wget.html" + licence: ["GPL-3.0-or-later"] + identifier: "" + +input: + - - meta: + type: map + description: | + Groovy Map whose id is the Clair3 model name, e.g. `[ id:'r1041_e82_400bps_sup_v430' ]` + - url: + type: string + description: URL of the model directory holding pileup.pt and full_alignment.pt + +output: + model: + - - meta: + type: map + description: Groovy Map whose id is the Clair3 model name + - "${meta.id}": + type: directory + description: Clair3 model directory with pileup.pt and full_alignment.pt + versions_wget: + - - ${task.process}: + type: string + description: The name of the process + - wget: + type: string + description: The name of the tool + - wget --version | head -1 | cut -d " " -f 3: + type: eval + description: The expression to obtain the version of the tool + +topics: + versions: + - - ${task.process}: + type: string + description: The name of the process + - wget: + type: string + description: The name of the tool + - wget --version | head -1 | cut -d " " -f 3: + type: eval + description: The expression to obtain the version of the tool + +authors: + - "@ljwharbers" +maintainers: + - "@ljwharbers" diff --git a/modules/local/clair3_model/tests/main.nf.test b/modules/local/clair3_model/tests/main.nf.test new file mode 100644 index 00000000..a123e1fc --- /dev/null +++ b/modules/local/clair3_model/tests/main.nf.test @@ -0,0 +1,41 @@ +nextflow_process { + + name "Test Process CLAIR3_MODEL" + script "../main.nf" + process "CLAIR3_MODEL" + + tag "modules" + tag "modules_local" + tag "clair3_model" + tag "small" + + // Only the stub runs in CI, because HKU's server is slow and flaky from GitHub runners. It checks that + // the output is a directory named after the model, holding the two checkpoints CLAIR3 reads. + test("r1041_e82_400bps_sup_v430 - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'r1041_e82_400bps_sup_v430' ], + 'https://www.bio8.cs.hku.hk/clair3/clair3_models_rerio_pytorch/r1041_e82_400bps_sup_v430' + ] + """ + } + } + + then { + def model_dir = path(process.out.model[0][1].toString()) + + assertAll( + { assert process.success }, + { assert model_dir.fileName.toString() == 'r1041_e82_400bps_sup_v430' }, + { assert model_dir.resolve('pileup.pt').toFile().exists() }, + { assert model_dir.resolve('full_alignment.pt').toFile().exists() }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/local/clair3_model/tests/main.nf.test.snap b/modules/local/clair3_model/tests/main.nf.test.snap new file mode 100644 index 00000000..1098758b --- /dev/null +++ b/modules/local/clair3_model/tests/main.nf.test.snap @@ -0,0 +1,49 @@ +{ + "r1041_e82_400bps_sup_v430 - stub": { + "content": [ + { + "0": [ + [ + { + "id": "r1041_e82_400bps_sup_v430" + }, + [ + "full_alignment.pt:md5,d41d8cd98f00b204e9800998ecf8427e", + "pileup.pt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "1": [ + [ + "CLAIR3_MODEL", + "wget", + "1.21.4" + ] + ], + "model": [ + [ + { + "id": "r1041_e82_400bps_sup_v430" + }, + [ + "full_alignment.pt:md5,d41d8cd98f00b204e9800998ecf8427e", + "pileup.pt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "versions_wget": [ + [ + "CLAIR3_MODEL", + "wget", + "1.21.4" + ] + ] + } + ], + "timestamp": "2026-10-02T11:54:19.260206521", + "meta": { + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } + } +} \ No newline at end of file diff --git a/modules/local/clairs/main.nf b/modules/local/clairs/main.nf index a7a310b5..5d92be0a 100644 --- a/modules/local/clairs/main.nf +++ b/modules/local/clairs/main.nf @@ -2,9 +2,9 @@ process CLAIRS { tag "$meta.id" label 'process_very_high' - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'docker.io/hkubal/clairs:v0.4.4': - 'docker.io/hkubal/clairs:v0.4.4' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'docker.io/hkubal/clairs:v0.5.1' : + 'docker.io/hkubal/clairs:v0.5.1' }" input: tuple val(meta), path(tumor_bam), path(tumor_bai), path(normal_bam), path(normal_bai), val(model) diff --git a/modules/local/cramino/environment.yml b/modules/local/cramino/environment.yml index c8b4126f..d9eaaadf 100644 --- a/modules/local/cramino/environment.yml +++ b/modules/local/cramino/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::cramino=1.0.0" + # renovate: datasource=conda depName=bioconda/cramino + - bioconda::cramino=2.0.0 diff --git a/modules/local/cramino/main.nf b/modules/local/cramino/main.nf index e93d100f..2b89548c 100644 --- a/modules/local/cramino/main.nf +++ b/modules/local/cramino/main.nf @@ -3,9 +3,9 @@ process CRAMINO { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/cramino:1.3.0--h3dc2dae_0': - 'biocontainers/cramino:1.3.0--h3dc2dae_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/cramino:2.0.0--hef77e2b_0' : + 'biocontainers/cramino:2.0.0--hef77e2b_0' }" input: tuple val(meta), path(bam) @@ -30,5 +30,6 @@ process CRAMINO { def prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}_cramino.txt + touch ${prefix}.arrow """ } diff --git a/modules/local/deepsomatic/callvariants/main.nf b/modules/local/deepsomatic/callvariants/main.nf index 463c743b..7f167eee 100644 --- a/modules/local/deepsomatic/callvariants/main.nf +++ b/modules/local/deepsomatic/callvariants/main.nf @@ -4,14 +4,14 @@ process DEEPSOMATIC_CALLVARIANTS { label "${params.use_gpu ? '' : 'process_long'}" //Conda is not supported at the moment - container params.use_gpu ? "docker.io/google/deepsomatic:1.7.0-gpu" : "docker.io/google/deepsomatic:1.7.0" + container params.use_gpu ? "docker.io/google/deepsomatic:1.10.0-gpu" : "docker.io/google/deepsomatic:1.10.0" input: tuple val(meta), path(make_examples_tfrecords) output: tuple val(meta), path("${prefix}.call-*-of-*.tfrecord.gz") , emit: call_variants_tfrecords - tuple val("${task.process}"), val('deepsomatic'), val('1.7.0'), topic: versions, emit: versions_deepsomatic + tuple val("${task.process}"), val('deepsomatic'), val('1.10.0'), topic: versions, emit: versions_deepsomatic when: task.ext.when == null || task.ext.when diff --git a/modules/local/deepsomatic/makeexamples/main.nf b/modules/local/deepsomatic/makeexamples/main.nf index dc8d1222..ee79e472 100644 --- a/modules/local/deepsomatic/makeexamples/main.nf +++ b/modules/local/deepsomatic/makeexamples/main.nf @@ -4,7 +4,7 @@ process DEEPSOMATIC_MAKEEXAMPLES { label 'process_long' //Conda is not supported at the moment - container params.use_gpu ? "docker.io/google/deepsomatic:1.7.0-gpu" : "docker.io/google/deepsomatic:1.7.0" + container params.use_gpu ? "docker.io/google/deepsomatic:1.10.0-gpu" : "docker.io/google/deepsomatic:1.10.0" input: tuple val(meta), path(normal_input), path(normal_index), path(tumor_input), path(tumor_index) @@ -17,7 +17,7 @@ process DEEPSOMATIC_MAKEEXAMPLES { tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}") , emit: examples tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz") , emit: gvcf, optional:true tuple val(meta), path("${prefix}_call_variant_outputs.tfrecord-*-of-*.gz", arity: "0..*") , emit: small_model_calls - tuple val("${task.process}"), val('deepsomatic'), val('1.7.0'), topic: versions, emit: versions_deepsomatic + tuple val("${task.process}"), val('deepsomatic'), val('1.10.0'), topic: versions, emit: versions_deepsomatic when: task.ext.when == null || task.ext.when diff --git a/modules/local/deepsomatic/postprocessvariants/main.nf b/modules/local/deepsomatic/postprocessvariants/main.nf index 12a44989..590036f9 100644 --- a/modules/local/deepsomatic/postprocessvariants/main.nf +++ b/modules/local/deepsomatic/postprocessvariants/main.nf @@ -3,7 +3,7 @@ process DEEPSOMATIC_POSTPROCESSVARIANTS { label 'process_high' label 'process_short' - container "docker.io/google/deepsomatic:1.7.0" + container "docker.io/google/deepsomatic:1.10.0" input: tuple val(meta), path(variant_calls_tfrecord_files), path(gvcf_tfrecords), val(small_model_calls), val(intervals) @@ -17,7 +17,7 @@ process DEEPSOMATIC_POSTPROCESSVARIANTS { tuple val(meta), path("${prefix}.vcf.gz.{tbi,csi}"), emit: vcf_index tuple val(meta), path("${prefix}.g.vcf.gz"), emit: gvcf, optional: true tuple val(meta), path("${prefix}.g.vcf.gz.{tbi,csi}"), emit: gvcf_index, optional: true - tuple val("${task.process}"), val('deepsomatic'), val('1.7.0'), topic: versions, emit: versions_deepsomatic + tuple val("${task.process}"), val('deepsomatic'), val('1.10.0'), topic: versions, emit: versions_deepsomatic when: task.ext.when == null || task.ext.when diff --git a/modules/local/fibertoolsrs/fire/environment.yml b/modules/local/fibertoolsrs/fire/environment.yml index 16e726f7..0780d006 100644 --- a/modules/local/fibertoolsrs/fire/environment.yml +++ b/modules/local/fibertoolsrs/fire/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::fibertools-rs=0.6.2" + # renovate: datasource=conda depName=bioconda/fibertools-rs + - bioconda::fibertools-rs=0.13.1 diff --git a/modules/local/fibertoolsrs/fire/main.nf b/modules/local/fibertoolsrs/fire/main.nf index eed76d97..452e3f70 100644 --- a/modules/local/fibertoolsrs/fire/main.nf +++ b/modules/local/fibertoolsrs/fire/main.nf @@ -4,16 +4,16 @@ process FIBERTOOLSRS_FIRE { label "${params.use_gpu ? 'process_gpu_very_high_memory' : 'process_high_memory'}" conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fibertools-rs:0.8.1--h3b373d1_0': - 'biocontainers/fibertools-rs:0.8.1--h3b373d1_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/fibertools-rs:0.13.1--h270025b_0' : + 'biocontainers/fibertools-rs:0.13.1--h270025b_0' }" input: tuple val(meta), path(bam) output: tuple val(meta), path("*.bam"), emit: bam - tuple val("${task.process}"), val('fibertoolsrs'), eval("ft --version |& sed 's/^fibertools-rs v//; s/\tgit-details.*//'"), topic: versions, emit: versions_fibertoolsrs + tuple val("${task.process}"), val('fibertoolsrs'), eval("ft --version |& sed 's/^fibertools-rs v//; s/\t.*//'"), topic: versions, emit: versions_fibertoolsrs when: task.ext.when == null || task.ext.when diff --git a/modules/local/fibertoolsrs/nucleosomes/environment.yml b/modules/local/fibertoolsrs/nucleosomes/environment.yml index 649180bb..0780d006 100644 --- a/modules/local/fibertoolsrs/nucleosomes/environment.yml +++ b/modules/local/fibertoolsrs/nucleosomes/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - fibertools-rs=0.6.2 + # renovate: datasource=conda depName=bioconda/fibertools-rs + - bioconda::fibertools-rs=0.13.1 diff --git a/modules/local/fibertoolsrs/nucleosomes/main.nf b/modules/local/fibertoolsrs/nucleosomes/main.nf index db42d106..02c3a854 100644 --- a/modules/local/fibertoolsrs/nucleosomes/main.nf +++ b/modules/local/fibertoolsrs/nucleosomes/main.nf @@ -4,16 +4,16 @@ process FIBERTOOLSRS_NUCLEOSOMES { label "${params.use_gpu ? 'process_gpu_very_high_memory' : 'process_high_memory'}" conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fibertools-rs:0.8.1--h3b373d1_0': - 'biocontainers/fibertools-rs:0.8.1--h3b373d1_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/fibertools-rs:0.13.1--h270025b_0' : + 'biocontainers/fibertools-rs:0.13.1--h270025b_0' }" input: tuple val(meta), path(bam) output: tuple val(meta), path("*.bam"), emit: bam - tuple val("${task.process}"), val('fibertoolsrs'), eval("ft --version |& sed 's/^fibertools-rs v//; s/\tgit-details.*//'"), topic: versions, emit: versions_fibertoolsrs + tuple val("${task.process}"), val('fibertoolsrs'), eval("ft --version |& sed 's/^fibertools-rs v//; s/\t.*//'"), topic: versions, emit: versions_fibertoolsrs when: task.ext.when == null || task.ext.when diff --git a/modules/local/fibertoolsrs/predictm6a/environment.yml b/modules/local/fibertoolsrs/predictm6a/environment.yml index 16e726f7..0780d006 100644 --- a/modules/local/fibertoolsrs/predictm6a/environment.yml +++ b/modules/local/fibertoolsrs/predictm6a/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::fibertools-rs=0.6.2" + # renovate: datasource=conda depName=bioconda/fibertools-rs + - bioconda::fibertools-rs=0.13.1 diff --git a/modules/local/fibertoolsrs/predictm6a/main.nf b/modules/local/fibertoolsrs/predictm6a/main.nf index bb355bfe..a4dc8782 100644 --- a/modules/local/fibertoolsrs/predictm6a/main.nf +++ b/modules/local/fibertoolsrs/predictm6a/main.nf @@ -4,16 +4,16 @@ process FIBERTOOLSRS_PREDICTM6A { label "${params.use_gpu ? 'process_gpu_very_high_memory' : 'process_high_memory'}" conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fibertools-rs:0.8.1--h3b373d1_0': - 'biocontainers/fibertools-rs:0.8.1--h3b373d1_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/fibertools-rs:0.13.1--h270025b_0' : + 'biocontainers/fibertools-rs:0.13.1--h270025b_0' }" input: tuple val(meta), path(bam) output: tuple val(meta), path("*.bam"), emit: bam - tuple val("${task.process}"), val('fibertoolsrs'), eval("ft --version |& sed 's/^fibertools-rs v//; s/\tgit-details.*//'"), topic: versions, emit: versions_fibertoolsrs + tuple val("${task.process}"), val('fibertoolsrs'), eval("ft --version |& sed 's/^fibertools-rs v//; s/\t.*//'"), topic: versions, emit: versions_fibertoolsrs when: task.ext.when == null || task.ext.when diff --git a/modules/local/fibertoolsrs/qc/environment.yml b/modules/local/fibertoolsrs/qc/environment.yml index 16e726f7..0780d006 100644 --- a/modules/local/fibertoolsrs/qc/environment.yml +++ b/modules/local/fibertoolsrs/qc/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::fibertools-rs=0.6.2" + # renovate: datasource=conda depName=bioconda/fibertools-rs + - bioconda::fibertools-rs=0.13.1 diff --git a/modules/local/fibertoolsrs/qc/main.nf b/modules/local/fibertoolsrs/qc/main.nf index db89d71a..afe95289 100644 --- a/modules/local/fibertoolsrs/qc/main.nf +++ b/modules/local/fibertoolsrs/qc/main.nf @@ -3,16 +3,16 @@ process FIBERTOOLSRS_QC { label 'process_very_high' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/fibertools-rs:0.8.1--h3b373d1_0': - 'biocontainers/fibertools-rs:0.8.1--h3b373d1_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/fibertools-rs:0.13.1--h270025b_0' : + 'biocontainers/fibertools-rs:0.13.1--h270025b_0' }" input: tuple val(meta), path(bam) output: tuple val(meta), path("*.txt"), emit: qc_txt - tuple val("${task.process}"), val('fibertoolsrs'), eval("ft --version |& sed 's/^fibertools-rs v//; s/\tgit-details.*//'"), topic: versions, emit: versions_fibertoolsrs + tuple val("${task.process}"), val('fibertoolsrs'), eval("ft --version |& sed 's/^fibertools-rs v//; s/\t.*//'"), topic: versions, emit: versions_fibertoolsrs when: task.ext.when == null || task.ext.when diff --git a/modules/local/lrsomaticreport/main.nf b/modules/local/lrsomaticreport/main.nf index 6724a2be..683ebdf7 100644 --- a/modules/local/lrsomaticreport/main.nf +++ b/modules/local/lrsomaticreport/main.nf @@ -5,8 +5,8 @@ process LRSOMATICREPORT { // No conda: the image ships render_report.R itself, not just its dependencies (guard in `script:`). // TODO: switch to bioconda `lrsomatic-report` once the recipe in ljwharbers/lrsomatic_report is merged. Version bump = these two tags. container "${(workflow.containerEngine == 'singularity' || workflow.containerEngine == 'apptainer') && !task.ext.singularity_pull_docker_container - ? 'oras://ghcr.io/ljwharbers/lrsomatic-report-sif:1.6.0' - : 'ghcr.io/ljwharbers/lrsomatic-report:1.6.0'}" + ? 'oras://ghcr.io/ljwharbers/lrsomatic-report-sif:1.6.1' + : 'ghcr.io/ljwharbers/lrsomatic-report:1.6.1'}" input: // Every path input is optional (`[]` when skipped); tumor/normal QC stage apart because a pair shares meta.id diff --git a/modules/local/lrsomaticreport/tests/main.nf.test.snap b/modules/local/lrsomaticreport/tests/main.nf.test.snap index fdf944d0..ca0029e3 100644 --- a/modules/local/lrsomaticreport/tests/main.nf.test.snap +++ b/modules/local/lrsomaticreport/tests/main.nf.test.snap @@ -16,7 +16,7 @@ [ "LRSOMATICREPORT", "lrsomatic_report", - "1.6.0" + "1.6.1" ] ], "report": [ @@ -33,7 +33,7 @@ [ "LRSOMATICREPORT", "lrsomatic_report", - "1.6.0" + "1.6.1" ] ] } @@ -50,7 +50,7 @@ [ "LRSOMATICREPORT", "lrsomatic_report", - "1.6.0" + "1.6.1" ] ] ], diff --git a/modules/local/metaextract/environment.yml b/modules/local/metaextract/environment.yml index 4b3c9d37..2309c8b3 100644 --- a/modules/local/metaextract/environment.yml +++ b/modules/local/metaextract/environment.yml @@ -4,4 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - "YOUR-TOOL-HERE" + # renovate: datasource=conda depName=bioconda/samtools + - bioconda::samtools=1.24 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.24 diff --git a/modules/local/metaextract/main.nf b/modules/local/metaextract/main.nf index fb3c474d..3cc0106d 100644 --- a/modules/local/metaextract/main.nf +++ b/modules/local/metaextract/main.nf @@ -3,9 +3,9 @@ process METAEXTRACT { label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.21--h50ea8bc_0' : - 'biocontainers/samtools:1.21--h50ea8bc_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/samtools:1.24--h9dcdb79_1' : + 'biocontainers/samtools:1.24--h9dcdb79_1' }" input: tuple val(meta), path(bam) diff --git a/modules/local/vcfsplit/environment.yml b/modules/local/vcfsplit/environment.yml index 4b3c9d37..99e376d6 100644 --- a/modules/local/vcfsplit/environment.yml +++ b/modules/local/vcfsplit/environment.yml @@ -4,4 +4,7 @@ channels: - conda-forge - bioconda dependencies: - - "YOUR-TOOL-HERE" + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.24 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.24 diff --git a/modules/local/vcfsplit/main.nf b/modules/local/vcfsplit/main.nf index ee5eb50c..e75b9355 100644 --- a/modules/local/vcfsplit/main.nf +++ b/modules/local/vcfsplit/main.nf @@ -3,9 +3,9 @@ process VCFSPLIT { label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/bcftools:1.20--h8b25389_0': - 'biocontainers/bcftools:1.20--h8b25389_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(snv_vcf), path(indel_vcf) diff --git a/modules/local/vcfsplit/tests/main.nf.test.snap b/modules/local/vcfsplit/tests/main.nf.test.snap index 0cf1cc2e..039d304a 100644 --- a/modules/local/vcfsplit/tests/main.nf.test.snap +++ b/modules/local/vcfsplit/tests/main.nf.test.snap @@ -15,14 +15,14 @@ [ "VCFSPLIT", "bcftools", - "1.20" + "1.24" ] ] ], + "timestamp": "2026-10-02T14:12:00.796126259", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-10-02T09:42:00.277502872" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } } \ No newline at end of file diff --git a/modules/local/vepplugin/eve/environment.yml b/modules/local/vepplugin/eve/environment.yml index 2da8f68b..99e376d6 100644 --- a/modules/local/vepplugin/eve/environment.yml +++ b/modules/local/vepplugin/eve/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/bcftools - - bioconda::bcftools=1.22 + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/local/vepplugin/eve/main.nf b/modules/local/vepplugin/eve/main.nf index 065ec36b..95b5d195 100644 --- a/modules/local/vepplugin/eve/main.nf +++ b/modules/local/vepplugin/eve/main.nf @@ -3,9 +3,9 @@ process VEPPLUGIN_EVE { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'biocontainers/bcftools:1.24--h118bc1c_2' }" input: path eve_dir diff --git a/modules/local/vepplugin/revel/environment.yml b/modules/local/vepplugin/revel/environment.yml index 2da8f68b..99e376d6 100644 --- a/modules/local/vepplugin/revel/environment.yml +++ b/modules/local/vepplugin/revel/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/bcftools - - bioconda::bcftools=1.22 + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/local/vepplugin/revel/main.nf b/modules/local/vepplugin/revel/main.nf index abfcc5d3..b75680ef 100644 --- a/modules/local/vepplugin/revel/main.nf +++ b/modules/local/vepplugin/revel/main.nf @@ -3,9 +3,9 @@ process VEPPLUGIN_REVEL { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'biocontainers/bcftools:1.24--h118bc1c_2' }" input: path revel_dir diff --git a/modules/local/wakhan/environment.yml b/modules/local/wakhan/environment.yml index 33c3c873..1b3cfed8 100644 --- a/modules/local/wakhan/environment.yml +++ b/modules/local/wakhan/environment.yml @@ -4,4 +4,5 @@ channels: - conda-forge - bioconda dependencies: - - "bioconda::wakhan=0.4.4" + # renovate: datasource=conda depName=bioconda/wakhan + - bioconda::wakhan=0.5.0 diff --git a/modules/local/wakhan/main.nf b/modules/local/wakhan/main.nf index 517ae995..c52391d1 100644 --- a/modules/local/wakhan/main.nf +++ b/modules/local/wakhan/main.nf @@ -3,9 +3,14 @@ process WAKHAN { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/wakhan:0.4.4--pyhdfd78af_0': - 'biocontainers/wakhan:0.4.4--pyhdfd78af_0' }" + // No biocontainer was built for 0.5.0. This image is bioconda::wakhan=0.5.0 plus upstream commit + // 1afd44d4 (KolmogorovLab/Wakhan#64), which stops update_coverage_hist raising IndexError on reads + // past a chromosome's last coverage bin. Recipe: + // https://github.com/ljwharbers/Wakhan/tree/container/0.5.0-histfix/container + // Docker Hub rather than ghcr, for the reason given in modules/local/clairsto/main.nf. + container "${(workflow.containerEngine == 'singularity' || workflow.containerEngine == 'apptainer') && !task.ext.singularity_pull_docker_container + ? 'oras://docker.io/ljwharbers/wakhan-sif:0.5.0-histfix-1afd44d' + : 'docker.io/ljwharbers/wakhan:0.5.0-histfix-1afd44d'}" input: tuple val(meta), path(tumor_input), path(tumor_index), path(normal_input), path(normal_index), path(vcf), path(breakpoints) @@ -13,17 +18,15 @@ process WAKHAN { path(centromere_bed) output: - tuple val(meta), path("*/*_genes_genome.html") , emit: genes_genome_html - tuple val(meta), path("*/*_genes_genome.pdf") , emit: genes_genome_pdf - tuple val(meta), path("*/*_genome_copynumbers_breakpoints.html") , emit: breakpoints_html - tuple val(meta), path("*/*_genome_copynumbers_breakpoints.pdf") , emit: breakpoints_pdf - tuple val(meta), path("*/*_genome_copynumbers_breakpoints_subclonal.html") , emit: breakpoints_subclonal_html - tuple val(meta), path("*/*_genome_copynumbers_breakpoints_subclonal.pdf") , emit: breakpoints_subclonal_pdf - tuple val(meta), path("*/*_genome_copynumbers_details.html") , emit: copynumbers_details_html - tuple val(meta), path("*/*_genome_copynumbers_details.pdf") , emit: copynumbers_details_pdf - tuple val(meta), path("*/bed_output/*.bed") , emit: bed_files - tuple val(meta), path("*/variation_plots/*.html") , emit: variation_plots - tuple val(meta), path("*/vcf_output/*_wakhan_cna_*.vcf") , emit: vcf_files + // Per-solution outputs live in solution___/; solution_rank_ links to them + tuple val(meta), path("solution_*_*_*/integer_profile.html") , emit: integer_profile_html + tuple val(meta), path("solution_*_*_*/integer_profile.pdf") , emit: integer_profile_pdf + tuple val(meta), path("solution_*_*_*/integer_profile.{bed,vcf}") , emit: integer_profile + tuple val(meta), path("solution_*_*_*/subclonal_profile.html") , emit: subclonal_profile_html + tuple val(meta), path("solution_*_*_*/subclonal_profile.pdf") , emit: subclonal_profile_pdf + tuple val(meta), path("solution_*_*_*/subclonal_profile.{bed,vcf}") , emit: subclonal_profile + tuple val(meta), path("solution_*_*_*/genes/genes_copynumber_states.*") , emit: genes + tuple val(meta), path("solution_*_*_*/HiScanner_plots_data.zip") , emit: hiscanner_zip tuple val(meta), path("*_heatmap_ploidy_purity.html") , emit: heatmap_html tuple val(meta), path("*_heatmap_ploidy_purity.html.pdf") , emit: heatmap_pdf tuple val(meta), path("coverage_data/*.csv") , emit: coverage_csv @@ -37,10 +40,9 @@ process WAKHAN { tuple val(meta), path("snps_loh_plots/*_genome_snps_ratio_loh.html") , emit: snps_loh_plot, optional: true tuple val(meta), path("solutions_ranks.tsv") , emit: solutions_ranks // Whole directories, not the plots inside: every solution's plot has the same basename, - // and LRSOMATICREPORT resolves them by solution_/ path - tuple val(meta), path("solution_*", type: 'dir') , emit: solution_dirs - // WARN: Manually update version information as tool does not provide on CLI - tuple val("${task.process}"), val('wakhan'), val("0.4.4"), topic: versions, emit: versions_wakhan + // and LRSOMATICREPORT resolves them by rank directory + tuple val(meta), path("solution_rank_*", type: 'dir') , emit: solution_dirs + tuple val("${task.process}"), val('wakhan'), eval("wakhan --version 2>/dev/null | sed 's/^wakhan //'"), topic: versions, emit: versions_wakhan when: task.ext.when == null || task.ext.when @@ -49,7 +51,7 @@ process WAKHAN { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" def phased_vcf = normal_input ? "--normal-phased-vcf $vcf" : "--tumor-phased-vcf $vcf" - def centromere = centromere_bed ? "--centromere \$PWD/${centromere_bed}" : "" + def centromere = centromere_bed ? "--centromere-bed \$PWD/${centromere_bed}" : "" """ wakhan \\ @@ -67,8 +69,21 @@ process WAKHAN { stub: def prefix = task.ext.prefix ?: "${meta.id}" - """ - touch ${prefix}.bam + sol=solution_2.0_0.8_0.9 + mkdir -p \$sol/genes coverage_data coverage_plots phasing_output snps_loh_plots + for f in integer_profile subclonal_profile; do + touch \$sol/\$f.html \$sol/\$f.pdf \$sol/\$f.bed \$sol/\$f.vcf + done + touch \$sol/genes/genes_copynumber_states.html \$sol/genes/genes_copynumber_states.pdf \$sol/genes/genes_copynumber_states.bed + touch \$sol/HiScanner_plots_data.zip + ln -s \$sol solution_rank_1 + touch ${prefix}_heatmap_ploidy_purity.html ${prefix}_heatmap_ploidy_purity.html.pdf + touch coverage_data/coverage.csv coverage_data/cn_peaks.png coverage_plots/COVERAGE_INDEX.html coverage_plots/chr1.pdf + touch phasing_output/PHASE_CORRECTION_INDEX.html phasing_output/chr1.pdf + echo "" | gzip > phasing_output/rephased.vcf.gz + touch phasing_output/rephased.vcf.gz.csi + touch snps_loh_plots/${prefix}_genome_snps_ratio_loh.html + printf 'repository_name\\tdna_purity\\tcell_purity\\tploidy\\tconfidence\\tsolution_rank\\n%s\\t0.8\\t0.8\\t2.0\\t0.9\\t1\\n' \$sol > solutions_ranks.tsv """ } diff --git a/modules/local/wakhan/meta.yml b/modules/local/wakhan/meta.yml index ee0a90c1..6dc4cbce 100644 --- a/modules/local/wakhan/meta.yml +++ b/modules/local/wakhan/meta.yml @@ -58,116 +58,86 @@ input: pattern: "*.{fasta,fa,fna}" output: - genes_genome_html: + integer_profile_html: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*/*_genes_genome.html": + - "solution_*_*_*/integer_profile.html": type: file - description: Genes genome HTML plot - pattern: "*/*_genes_genome.html" - genes_genome_pdf: + description: Per-solution integer copy-number profile plot (HTML) + pattern: "solution_*_*_*/integer_profile.html" + integer_profile_pdf: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*/*_genes_genome.pdf": + - "solution_*_*_*/integer_profile.pdf": type: file - description: Genes genome PDF plot - pattern: "*/*_genes_genome.pdf" - breakpoints_html: + description: Per-solution integer copy-number profile plot (PDF) + pattern: "solution_*_*_*/integer_profile.pdf" + integer_profile: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*/*_genome_copynumbers_breakpoints.html": + - "solution_*_*_*/integer_profile.{bed,vcf}": type: file - description: Genome copy numbers with breakpoints HTML plot - pattern: "*/*_genome_copynumbers_breakpoints.html" - breakpoints_pdf: + description: Per-solution integer copy-number segments, both haplotypes boundary-aligned (BED and VCF) + pattern: "solution_*_*_*/integer_profile.{bed,vcf}" + subclonal_profile_html: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*/*_genome_copynumbers_breakpoints.pdf": + - "solution_*_*_*/subclonal_profile.html": type: file - description: Genome copy numbers with breakpoints PDF plot - pattern: "*/*_genome_copynumbers_breakpoints.pdf" - breakpoints_subclonal_html: + description: Per-solution subclonal copy-number profile plot (HTML) + pattern: "solution_*_*_*/subclonal_profile.html" + subclonal_profile_pdf: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*/*_genome_copynumbers_breakpoints_subclonal.html": + - "solution_*_*_*/subclonal_profile.pdf": type: file - description: Genome copy numbers with subclonal breakpoints HTML plot - pattern: "*/*_genome_copynumbers_breakpoints_subclonal.html" - breakpoints_subclonal_pdf: + description: Per-solution subclonal copy-number profile plot (PDF) + pattern: "solution_*_*_*/subclonal_profile.pdf" + subclonal_profile: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*/*_genome_copynumbers_breakpoints_subclonal.pdf": + - "solution_*_*_*/subclonal_profile.{bed,vcf}": type: file - description: Genome copy numbers with subclonal breakpoints PDF plot - pattern: "*/*_genome_copynumbers_breakpoints_subclonal.pdf" - copynumbers_details_html: + description: Per-solution subclonal copy-number segments (BED and VCF) + pattern: "solution_*_*_*/subclonal_profile.{bed,vcf}" + genes: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*/*_genome_copynumbers_details.html": + - "solution_*_*_*/genes/genes_copynumber_states.*": type: file - description: Genome copy numbers details HTML plot - pattern: "*/*_genome_copynumbers_details.html" - copynumbers_details_pdf: + description: Per-solution gene copy-number states (BED, HTML and PDF) + pattern: "solution_*_*_*/genes/genes_copynumber_states.*" + hiscanner_zip: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*/*_genome_copynumbers_details.pdf": + - "solution_*_*_*/HiScanner_plots_data.zip": type: file - description: Genome copy numbers details PDF plot - pattern: "*/*_genome_copynumbers_details.pdf" - bed_files: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*/bed_output/*.bed": - type: file - description: BED output files - pattern: "*/bed_output/*.bed" - variation_plots: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*/variation_plots/*.html": - type: file - description: Variation plots HTML files - pattern: "*/variation_plots/*.html" - vcf_files: - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'sample1', single_end:false ]` - - "*/vcf_output/*_wakhan_cna_*.vcf": - type: file - description: Wakhan CNA VCF files - pattern: "*/vcf_output/*_wakhan_cna_*.vcf" + description: Per-solution bundle for the Wakhan visualisation web viewer + pattern: "solution_*_*_*/HiScanner_plots_data.zip" heatmap_html: - meta: type: map @@ -176,7 +146,7 @@ output: e.g. `[ id:'sample1', single_end:false ]` - "*_heatmap_ploidy_purity.html": type: file - description: Heatmap ploidy purity HTML plot + description: Ploidy/purity heatmap (HTML) pattern: "*_heatmap_ploidy_purity.html" heatmap_pdf: - meta: @@ -186,28 +156,28 @@ output: e.g. `[ id:'sample1', single_end:false ]` - "*_heatmap_ploidy_purity.html.pdf": type: file - description: Heatmap ploidy purity PDF plot + description: Ploidy/purity heatmap (PDF) pattern: "*_heatmap_ploidy_purity.html.pdf" - optimized_peak_html: + coverage_csv: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "*_optimized_peak.html": + - "coverage_data/*.csv": type: file - description: Optimized peak HTML plot - pattern: "*_optimized_peak.html" - coverage_csv: + description: Coverage, BAF and SNP tables + pattern: "coverage_data/*.csv" + coverage_png: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "coverage_data/*.csv": + - "coverage_data/*.png": type: file - description: Coverage data CSV files - pattern: "coverage_data/*.csv" + description: Copy-number coverage and peak plots + pattern: "coverage_data/*.png" coverage_plots_html: - meta: type: map @@ -216,7 +186,7 @@ output: e.g. `[ id:'sample1', single_end:false ]` - "coverage_plots/*.html": type: file - description: Coverage plots HTML files + description: Per-chromosome coverage plots (HTML) pattern: "coverage_plots/*.html" coverage_plots_pdf: - meta: @@ -226,7 +196,7 @@ output: e.g. `[ id:'sample1', single_end:false ]` - "coverage_plots/*.pdf": type: file - description: Coverage plots PDF files + description: Per-chromosome coverage plots (PDF) pattern: "coverage_plots/*.pdf" phasing_html: - meta: @@ -236,7 +206,7 @@ output: e.g. `[ id:'sample1', single_end:false ]` - "phasing_output/*.html": type: file - description: Phasing output HTML plots + description: Phase-correction plots (HTML) pattern: "phasing_output/*.html" phasing_pdf: - meta: @@ -246,7 +216,7 @@ output: e.g. `[ id:'sample1', single_end:false ]` - "phasing_output/*.pdf": type: file - description: Phasing output PDF plots + description: Phase-correction plots (PDF) pattern: "phasing_output/*.pdf" rephased_vcf: - meta: @@ -254,20 +224,20 @@ output: description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "phasing_output/*.rephased.vcf.gz": + - "phasing_output/*rephased.vcf.gz": type: file - description: Rephased VCF file - pattern: "phasing_output/*.rephased.vcf.gz" + description: Phase-corrected VCF + pattern: "phasing_output/*rephased.vcf.gz" rephased_vcf_index: - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1', single_end:false ]` - - "phasing_output/*.rephased.vcf.gz.csi": + - "phasing_output/*rephased.vcf.gz.csi": type: file - description: Rephased VCF index file - pattern: "phasing_output/*.rephased.vcf.gz.csi" + description: Index of the phase-corrected VCF + pattern: "phasing_output/*rephased.vcf.gz.csi" snps_loh_plot: - meta: type: map @@ -276,7 +246,7 @@ output: e.g. `[ id:'sample1', single_end:false ]` - "snps_loh_plots/*_genome_snps_ratio_loh.html": type: file - description: SNPs LOH plot HTML file + description: SNP ratio / LOH plot (tumour-only runs) pattern: "snps_loh_plots/*_genome_snps_ratio_loh.html" solutions_ranks: - meta: @@ -286,31 +256,39 @@ output: e.g. `[ id:'sample1', single_end:false ]` - "solutions_ranks.tsv": type: file - description: Solutions ranks TSV file + description: Ranked ploidy/purity solutions pattern: "solutions_ranks.tsv" + solution_dirs: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - "solution_rank_*": + type: directory + description: Ranked solution directories (links to solution___) versions_wakhan: - - ${task.process}: type: string - description: The process the versions were collected from + description: The name of the process - wakhan: type: string - description: The tool name - - "0.2.0": - type: string - description: The version of wakhan + description: The name of the tool + - wakhan --version 2>/dev/null | sed 's/^wakhan //': + type: eval + description: The expression to obtain the version of the tool topics: versions: - - ${task.process}: type: string - description: The process the versions were collected from + description: The name of the process - wakhan: type: string - description: The tool name - - "0.2.0": - type: string - description: The version of wakhan - + description: The name of the tool + - wakhan --version 2>/dev/null | sed 's/^wakhan //': + type: eval + description: The expression to obtain the version of the tool authors: - "@ljwharbers" maintainers: diff --git a/modules/local/wakhan/tests/main.nf.test b/modules/local/wakhan/tests/main.nf.test new file mode 100644 index 00000000..ffd7f903 --- /dev/null +++ b/modules/local/wakhan/tests/main.nf.test @@ -0,0 +1,56 @@ +nextflow_process { + + name "Test Process WAKHAN" + script "../main.nf" + process "WAKHAN" + + tag "modules" + tag "modules_local" + tag "wakhan" + tag "small" + + // Wakhan needs whole-genome coverage to fit a solution, so only the stub runs in CI. It checks the + // output declarations against the 0.5.0 layout, the solution_rank_* link, and the version read from + // the image. The inputs are stand-ins: the stub never reads them. + test("paired - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test', paired_data:true ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam.bai', checkIfExists: true), + file("${projectDir}/modules/local/clairsto/verdict_tag/tests/fixtures/snv.vcf.gz", checkIfExists: true), + file("${projectDir}/modules/local/clairsto/verdict_tag/tests/fixtures/indel.vcf.gz", checkIfExists: true) + ] + input[1] = [ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + """ + } + } + + then { + def rank_dir = path(process.out.solution_dirs[0][1].toString()) + + assertAll( + { assert process.success }, + // Every declared output channel was filled + { assert process.out.findAll { name, ch -> !(name ==~ /\d+/) }.every { name, ch -> ch.size() == 1 } }, + // The rank link is captured as a directory that resolves to the solution it ranks, + // which is how LRSOMATICREPORT finds the per-solution plots + { assert rank_dir.fileName.toString() == 'solution_rank_1' }, + { assert rank_dir.toRealPath().fileName.toString() == 'solution_2.0_0.8_0.9' }, + { assert rank_dir.resolve('integer_profile.html').toFile().exists() }, + { assert snapshot(process.out).match() } + ) + } + } +} diff --git a/modules/local/wakhan/tests/main.nf.test.snap b/modules/local/wakhan/tests/main.nf.test.snap new file mode 100644 index 00000000..fcb2be8a --- /dev/null +++ b/modules/local/wakhan/tests/main.nf.test.snap @@ -0,0 +1,455 @@ +{ + "paired - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test", + "paired_data": true + }, + "integer_profile.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + [ + { + "id": "test", + "paired_data": true + }, + "integer_profile.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "10": [ + [ + { + "id": "test", + "paired_data": true + }, + "coverage.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "11": [ + [ + { + "id": "test", + "paired_data": true + }, + "cn_peaks.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "12": [ + [ + { + "id": "test", + "paired_data": true + }, + "COVERAGE_INDEX.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "13": [ + [ + { + "id": "test", + "paired_data": true + }, + "chr1.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "14": [ + [ + { + "id": "test", + "paired_data": true + }, + "PHASE_CORRECTION_INDEX.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "15": [ + [ + { + "id": "test", + "paired_data": true + }, + "chr1.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "16": [ + [ + { + "id": "test", + "paired_data": true + }, + "rephased.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "17": [ + [ + { + "id": "test", + "paired_data": true + }, + "rephased.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "18": [ + [ + { + "id": "test", + "paired_data": true + }, + "test_genome_snps_ratio_loh.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "19": [ + [ + { + "id": "test", + "paired_data": true + }, + "solutions_ranks.tsv:md5,563b0692a9825c94b2f1d3bf1397cdaf" + ] + ], + "2": [ + [ + { + "id": "test", + "paired_data": true + }, + [ + "integer_profile.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "integer_profile.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "20": [ + [ + { + "id": "test", + "paired_data": true + }, + [ + "HiScanner_plots_data.zip:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "genes_copynumber_states.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "genes_copynumber_states.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "genes_copynumber_states.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "integer_profile.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "integer_profile.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "integer_profile.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "integer_profile.vcf:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "21": [ + [ + "WAKHAN", + "wakhan", + "0.5.0" + ] + ], + "3": [ + [ + { + "id": "test", + "paired_data": true + }, + "subclonal_profile.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "4": [ + [ + { + "id": "test", + "paired_data": true + }, + "subclonal_profile.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "5": [ + [ + { + "id": "test", + "paired_data": true + }, + [ + "subclonal_profile.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "6": [ + [ + { + "id": "test", + "paired_data": true + }, + [ + "genes_copynumber_states.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "genes_copynumber_states.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "genes_copynumber_states.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "7": [ + [ + { + "id": "test", + "paired_data": true + }, + "HiScanner_plots_data.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "8": [ + [ + { + "id": "test", + "paired_data": true + }, + "test_heatmap_ploidy_purity.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "9": [ + [ + { + "id": "test", + "paired_data": true + }, + "test_heatmap_ploidy_purity.html.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coverage_csv": [ + [ + { + "id": "test", + "paired_data": true + }, + "coverage.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coverage_plots_html": [ + [ + { + "id": "test", + "paired_data": true + }, + "COVERAGE_INDEX.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coverage_plots_pdf": [ + [ + { + "id": "test", + "paired_data": true + }, + "chr1.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "coverage_png": [ + [ + { + "id": "test", + "paired_data": true + }, + "cn_peaks.png:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "genes": [ + [ + { + "id": "test", + "paired_data": true + }, + [ + "genes_copynumber_states.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "genes_copynumber_states.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "genes_copynumber_states.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "heatmap_html": [ + [ + { + "id": "test", + "paired_data": true + }, + "test_heatmap_ploidy_purity.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "heatmap_pdf": [ + [ + { + "id": "test", + "paired_data": true + }, + "test_heatmap_ploidy_purity.html.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "hiscanner_zip": [ + [ + { + "id": "test", + "paired_data": true + }, + "HiScanner_plots_data.zip:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "integer_profile": [ + [ + { + "id": "test", + "paired_data": true + }, + [ + "integer_profile.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "integer_profile.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "integer_profile_html": [ + [ + { + "id": "test", + "paired_data": true + }, + "integer_profile.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "integer_profile_pdf": [ + [ + { + "id": "test", + "paired_data": true + }, + "integer_profile.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "phasing_html": [ + [ + { + "id": "test", + "paired_data": true + }, + "PHASE_CORRECTION_INDEX.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "phasing_pdf": [ + [ + { + "id": "test", + "paired_data": true + }, + "chr1.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "rephased_vcf": [ + [ + { + "id": "test", + "paired_data": true + }, + "rephased.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], + "rephased_vcf_index": [ + [ + { + "id": "test", + "paired_data": true + }, + "rephased.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "snps_loh_plot": [ + [ + { + "id": "test", + "paired_data": true + }, + "test_genome_snps_ratio_loh.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "solution_dirs": [ + [ + { + "id": "test", + "paired_data": true + }, + [ + "HiScanner_plots_data.zip:md5,d41d8cd98f00b204e9800998ecf8427e", + [ + "genes_copynumber_states.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "genes_copynumber_states.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "genes_copynumber_states.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ], + "integer_profile.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "integer_profile.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "integer_profile.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "integer_profile.vcf:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.pdf:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "solutions_ranks": [ + [ + { + "id": "test", + "paired_data": true + }, + "solutions_ranks.tsv:md5,563b0692a9825c94b2f1d3bf1397cdaf" + ] + ], + "subclonal_profile": [ + [ + { + "id": "test", + "paired_data": true + }, + [ + "subclonal_profile.bed:md5,d41d8cd98f00b204e9800998ecf8427e", + "subclonal_profile.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], + "subclonal_profile_html": [ + [ + { + "id": "test", + "paired_data": true + }, + "subclonal_profile.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "subclonal_profile_pdf": [ + [ + { + "id": "test", + "paired_data": true + }, + "subclonal_profile.pdf:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_wakhan": [ + [ + "WAKHAN", + "wakhan", + "0.5.0" + ] + ] + } + ], + "timestamp": "2026-10-01T15:42:20.391785654", + "meta": { + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } + } +} \ No newline at end of file diff --git a/modules/nf-core/ascat/ascat.diff b/modules/nf-core/ascat/ascat.diff index 345cc304..a0c59292 100644 --- a/modules/nf-core/ascat/ascat.diff +++ b/modules/nf-core/ascat/ascat.diff @@ -1,19 +1,20 @@ Changes in component 'nf-core/ascat' +'modules/nf-core/ascat/environment.yml' is unchanged 'modules/nf-core/ascat/meta.yml' is unchanged Changes in 'ascat/main.nf': --- modules/nf-core/ascat/main.nf +++ modules/nf-core/ascat/main.nf -@@ -1,211 +1,189 @@ +@@ -1,212 +1,189 @@ process ASCAT { - tag "${meta.id}" + tag "$meta.id" label 'process_medium' conda "${moduleDir}/environment.yml" -- container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4c/4cf02c7911ee5e974ce7db978810770efbd8d872ff5ab3462d2a11bcf022fab5/data' - : 'community.wave.seqera.io/library/ascat_cancerit-allelecount:c3e8749fa4af0e99'}" -+ container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4c/4cf02c7911ee5e974ce7db978810770efbd8d872ff5ab3462d2a11bcf022fab5/data': + 'community.wave.seqera.io/library/ascat_cancerit-allelecount:c3e8749fa4af0e99' }" @@ -42,7 +43,8 @@ Changes in 'ascat/main.nf': - tuple val(meta), path("*png"), emit: png - tuple val(meta), path("*purityploidy.txt"), emit: purityploidy - tuple val(meta), path("*segments.txt"), emit: segments -- path "versions.yml", emit: versions +- tuple val("${task.process}"), val('bioconductor-ascat'), eval('Rscript -e "library(ASCAT); cat(as.character(packageVersion(\'ASCAT\')))"'), topic: versions, emit: versions_ascat +- tuple val("${task.process}"), val('alleleCounter'), eval("alleleCounter --version"), topic: versions, emit: versions_allelecounter + tuple val(meta), path("*alleleFrequencies_chr*.txt"), emit: allelefreqs + tuple val(meta), path("*BAF.txt"), emit: bafs + tuple val(meta), path("*cnvs.txt"), emit: cnvs @@ -90,6 +92,8 @@ Changes in 'ascat/main.nf': - additional_allelecounter_arg = "" - } - +- """ +- Rscript - <<'EOF' + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + def gender = args.gender ? "$args.gender" : "NULL" @@ -113,8 +117,8 @@ Changes in 'ascat/main.nf': + def normal_name = input_normal ? ",normalname = '${prefix}.normal'" : "" + def longread_bins = args.longread_bins ? ",loci_binsize = $args.longread_bins" : "" + def allele_counter_flags = args.allele_counter_flags ? ",additional_allelecounter_flags = '$args.allele_counter_flags'" : "" - """ - #!/usr/bin/env Rscript ++ """ ++ #!/usr/bin/env Rscript library(RColorBrewer) library(ASCAT) options(bitmapType='cairo') @@ -363,30 +367,26 @@ Changes in 'ascat/main.nf': summary <- tryCatch({ matrix(c(ascat.output[["aberrantcellfraction"]], ascat.output[["ploidy"]]), ncol=2, byrow=TRUE)}, error = function(err) { # error handler picks up where error was generated -@@ -214,46 +192,48 @@ +@@ -215,32 +192,48 @@ } ) colnames(summary) <- c("AberrantCellFraction","Ploidy") - write.table(summary, file=paste0("${prefix}",".purityploidy.txt"), sep="\t", quote=F, row.names=F, col.names=T) - - write.table(QC, file=paste0("${prefix}", ".metrics.txt"), sep="\t", quote=F, row.names=F) -- -- # Version export +- EOF + write.table(summary, file=paste0("$prefix",".purityploidy.txt"), sep="\t", quote=F, row.names=F, col.names=T) + + write.table(QC, file=paste0("$prefix", ".metrics.txt"), sep="\t", quote=F, row.names=F) + + # version export - f <- file("versions.yml","w") - alleleCounter_version = system(paste("alleleCounter --version"), intern = T) -- ascat_version = as.character(packageVersion('ASCAT')) -- writeLines(paste0('"', "${task.process}", '"', ":"), f) ++ f <- file("versions.yml","w") ++ alleleCounter_version = system(paste("alleleCounter --version"), intern = T) + ascat_version = sessionInfo()\$otherPkgs\$ASCAT\$Version + writeLines(paste0('"', "$task.process", '"', ":"), f) + writeLines(paste(" alleleCounter:", alleleCounter_version), f) - writeLines(paste(" ascat:", ascat_version), f) -- writeLines(paste(" alleleCounter:", alleleCounter_version), f) - close(f) ++ writeLines(paste(" ascat:", ascat_version), f) ++ close(f) + """ @@ -411,12 +411,6 @@ Changes in 'ascat/main.nf': - touch ${prefix}.tumour_normalLogR.txt - touch ${prefix}.tumour_tumourBAF.txt - touch ${prefix}.tumour_tumourLogR.txt -- -- cat <<-END_VERSIONS > versions.yml -- "${task.process}": -- bioconductor-ascat: \$(Rscript -e "library(ASCAT); cat(as.character(packageVersion('ASCAT')))") -- alleleCounter: \$(alleleCounter --version) -- END_VERSIONS - """ + echo stub > ${prefix}.after_correction.gc_rt.test.tumour.germline.png + echo stub > ${prefix}.after_correction.gc_rt.test.tumour.tumour.png @@ -446,51 +440,7 @@ Changes in 'ascat/main.nf': + } -'modules/nf-core/ascat/environment.yml' is unchanged -Changes in 'ascat/tests/main.nf.test': ---- modules/nf-core/ascat/tests/main.nf.test -+++ modules/nf-core/ascat/tests/main.nf.test -@@ -55,6 +55,7 @@ - process.out.png.collect{it[1].collect{file(it).name}}, - process.out.purityploidy, - process.out.segments, -+ process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml - ).match() } -@@ -109,6 +110,7 @@ - process.out.png.collect{it[1].collect{file(it).name}}, - process.out.purityploidy, - process.out.segments, -+ process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml - ).match() } -@@ -163,6 +165,7 @@ - process.out.png.collect{it[1].collect{file(it).name}}, - process.out.purityploidy, - process.out.segments, -+ process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml - ).match() } -@@ -218,6 +221,7 @@ - process.out.png.collect{it[1].collect{file(it).name}}, - process.out.purityploidy, - process.out.segments, -+ process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml - ).match() } -@@ -296,6 +300,7 @@ - process.out.png.collect{it[1].collect{file(it).name}}, - process.out.purityploidy, - process.out.segments, -+ process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml - ).match() } - -'modules/nf-core/ascat/tests/main.nf.test.snap' is unchanged 'modules/nf-core/ascat/tests/nextflow.config' is unchanged +'modules/nf-core/ascat/tests/main.nf.test' is unchanged +'modules/nf-core/ascat/tests/main.nf.test.snap' is unchanged ************************************************************ diff --git a/modules/nf-core/ascat/main.nf b/modules/nf-core/ascat/main.nf index 846e9d6a..0f85d81d 100644 --- a/modules/nf-core/ascat/main.nf +++ b/modules/nf-core/ascat/main.nf @@ -3,7 +3,7 @@ process ASCAT { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4c/4cf02c7911ee5e974ce7db978810770efbd8d872ff5ab3462d2a11bcf022fab5/data': 'community.wave.seqera.io/library/ascat_cancerit-allelecount:c3e8749fa4af0e99' }" diff --git a/modules/nf-core/ascat/meta.yml b/modules/nf-core/ascat/meta.yml index d69674ec..8aebd0bc 100644 --- a/modules/nf-core/ascat/meta.yml +++ b/modules/nf-core/ascat/meta.yml @@ -6,17 +6,18 @@ keywords: - cram tools: - ascat: - description: ASCAT is a method to derive copy number profiles of tumour cells, - accounting for normal cell admixture and tumour aneuploidy. ASCAT infers tumour - purity (the fraction of tumour cells) and ploidy (the amount of DNA per tumour - cell), expressed as multiples of haploid genomes from SNP array or massively - parallel sequencing data, and calculates whole-genome allele-specific copy number - profiles (the number of copies of both parental alleles for all SNP loci across - the genome). + description: ASCAT is a method to derive copy number profiles of tumour + cells, accounting for normal cell admixture and tumour aneuploidy. ASCAT + infers tumour purity (the fraction of tumour cells) and ploidy (the amount + of DNA per tumour cell), expressed as multiples of haploid genomes from + SNP array or massively parallel sequencing data, and calculates + whole-genome allele-specific copy number profiles (the number of copies of + both parental alleles for all SNP loci across the genome). documentation: https://github.com/VanLoo-lab/ascat/tree/master/man tool_dev_url: https://github.com/VanLoo-lab/ascat doi: "10.1093/bioinformatics/btaa538" - licence: ["GPL v3"] + licence: + - "GPL v3" identifier: biotools:ascat input: - - meta: @@ -26,8 +27,8 @@ input: e.g. [ id:'test', single_end:false ] - input_normal: type: file - description: BAM/CRAM file, must adhere to chr1, chr2, ...chrX notation For - modifying chromosome notation in bam files please follow + description: BAM/CRAM file, must adhere to chr1, chr2, ...chrX notation + For modifying chromosome notation in bam files please follow https://josephcckuo.wordpress.com/2016/11/17/modify-chromosome-notation-in-bam-file/. pattern: "*.{bam,cram}" ontologies: [] @@ -48,17 +49,19 @@ input: ontologies: [] - allele_files: type: file - description: allele files for ASCAT WGS. Can be downloaded here https://github.com/VanLoo-lab/ascat/tree/master/ReferenceFiles/WGS + description: allele files for ASCAT WGS. Can be downloaded here + https://github.com/VanLoo-lab/ascat/tree/master/ReferenceFiles/WGS ontologies: [] - loci_files: type: file - description: loci files for ASCAT WGS. Loci files without chromosome notation - can be downloaded here https://github.com/VanLoo-lab/ascat/tree/master/ReferenceFiles/WGS - Make sure the chromosome notation matches the bam/cram input files. To add the - chromosome notation to loci files (hg19/hg38) if necessary, you can run this - command `if [[ $(samtools view | head -n1 | cut -f3)\" == - *\"chr\"* ]]; then for i in {1..22} X; do sed -i 's/^/chr/' G1000_loci_hg19_chr_${i}.txt; - done; fi` + description: loci files for ASCAT WGS. Loci files without chromosome + notation can be downloaded here + https://github.com/VanLoo-lab/ascat/tree/master/ReferenceFiles/WGS Make + sure the chromosome notation matches the bam/cram input files. To add the + chromosome notation to loci files (hg19/hg38) if necessary, you can run + this command `if [[ $(samtools view | head -n1 | cut + -f3)\" == *\"chr\"* ]]; then for i in {1..22} X; do sed -i 's/^/chr/' + G1000_loci_hg19_chr_${i}.txt; done; fi` ontologies: [] - bed_file: type: file @@ -70,13 +73,13 @@ input: ontologies: [] - gc_file: type: file - description: GC correction file (optional) - Used to do logR correction of the - tumour sample(s) with genomic GC content + description: GC correction file (optional) - Used to do logR correction of + the tumour sample(s) with genomic GC content ontologies: [] - rt_file: type: file - description: replication timing correction file (optional, provide only in combination - with gc_file) + description: replication timing correction file (optional, provide only in + combination with gc_file) ontologies: [] output: allelefreqs: @@ -164,13 +167,46 @@ output: description: File with segments data pattern: "*.{segments.txt}" ontologies: [] + versions_ascat: + - - ${task.process}: + type: string + description: The name of the process + - bioconductor-ascat: + type: string + description: The name of the tool + - Rscript -e "library(ASCAT); cat(as.character(packageVersion('ASCAT')))": + type: eval + description: The expression to obtain the version of the tool + versions_allelecounter: + - - ${task.process}: + type: string + description: The name of the process + - alleleCounter: + type: string + description: The name of the tool + - alleleCounter --version: + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - bioconductor-ascat: + type: string + description: The name of the tool + - Rscript -e "library(ASCAT); cat(as.character(packageVersion('ASCAT')))": + type: eval + description: The expression to obtain the version of the tool + - - ${task.process}: + type: string + description: The name of the process + - alleleCounter: + type: string + description: The name of the tool + - alleleCounter --version: + type: eval + description: The expression to obtain the version of the tool authors: - "@aasNGC" - "@lassefolkersen" diff --git a/modules/nf-core/ascat/tests/main.nf.test b/modules/nf-core/ascat/tests/main.nf.test index 759abb38..b9ee7ae6 100644 --- a/modules/nf-core/ascat/tests/main.nf.test +++ b/modules/nf-core/ascat/tests/main.nf.test @@ -55,9 +55,7 @@ nextflow_process { process.out.png.collect{it[1].collect{file(it).name}}, process.out.purityploidy, process.out.segments, - process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -110,9 +108,7 @@ nextflow_process { process.out.png.collect{it[1].collect{file(it).name}}, process.out.purityploidy, process.out.segments, - process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -165,9 +161,7 @@ nextflow_process { process.out.png.collect{it[1].collect{file(it).name}}, process.out.purityploidy, process.out.segments, - process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -221,9 +215,7 @@ nextflow_process { process.out.png.collect{it[1].collect{file(it).name}}, process.out.purityploidy, process.out.segments, - process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } @@ -300,9 +292,7 @@ nextflow_process { process.out.png.collect{it[1].collect{file(it).name}}, process.out.purityploidy, process.out.segments, - process.out.segments_raw, - process.out.versions, - path(process.out.versions[0]).yaml + process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) } diff --git a/modules/nf-core/ascat/tests/main.nf.test.snap b/modules/nf-core/ascat/tests/main.nf.test.snap index 7db5d76d..2baa7c0f 100644 --- a/modules/nf-core/ascat/tests/main.nf.test.snap +++ b/modules/nf-core/ascat/tests/main.nf.test.snap @@ -79,21 +79,28 @@ "test.segments.txt:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - [ - "versions.yml:md5,75598081a811afded7d7c1a0d08405ac" - ], { - "ASCAT": { - "ascat": "3.2.0", - "alleleCounter": "4.3.0" - } + "versions_allelecounter": [ + [ + "ASCAT", + "alleleCounter", + "4.3.0" + ] + ], + "versions_ascat": [ + [ + "ASCAT", + "bioconductor-ascat", + "3.2.0" + ] + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.8.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-06-25T12:07:29.534085987" + "timestamp": "2026-03-11T15:06:33.054000323" }, "human - bam - GC - folder inputs": { "content": [ @@ -175,21 +182,28 @@ "test.segments.txt:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - [ - "versions.yml:md5,75598081a811afded7d7c1a0d08405ac" - ], { - "ASCAT": { - "ascat": "3.2.0", - "alleleCounter": "4.3.0" - } + "versions_allelecounter": [ + [ + "ASCAT", + "alleleCounter", + "4.3.0" + ] + ], + "versions_ascat": [ + [ + "ASCAT", + "bioconductor-ascat", + "3.2.0" + ] + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.8.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-06-25T12:18:54.510148361" + "timestamp": "2026-03-11T15:08:18.279376644" }, "human - bam - stub": { "content": [ @@ -285,7 +299,18 @@ ] ], "8": [ - "versions.yml:md5,5c8663bfecf62e5eb460f76ee167d410" + [ + "ASCAT", + "bioconductor-ascat", + "3.2.0" + ] + ], + "9": [ + [ + "ASCAT", + "alleleCounter", + "4.3.0" + ] ], "allelefreqs": [ [ @@ -377,16 +402,27 @@ "test.segments.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,5c8663bfecf62e5eb460f76ee167d410" + "versions_allelecounter": [ + [ + "ASCAT", + "alleleCounter", + "4.3.0" + ] + ], + "versions_ascat": [ + [ + "ASCAT", + "bioconductor-ascat", + "3.2.0" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.8.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-06-16T12:14:45.315601183" + "timestamp": "2026-03-11T12:43:34.842697173" }, "human - cram - GC - RT - additional_allelecounter": { "content": [ @@ -468,21 +504,28 @@ "test.segments.txt:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - [ - "versions.yml:md5,75598081a811afded7d7c1a0d08405ac" - ], { - "ASCAT": { - "ascat": "3.2.0", - "alleleCounter": "4.3.0" - } + "versions_allelecounter": [ + [ + "ASCAT", + "alleleCounter", + "4.3.0" + ] + ], + "versions_ascat": [ + [ + "ASCAT", + "bioconductor-ascat", + "3.2.0" + ] + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.8.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-06-20T12:46:05.832790403" + "timestamp": "2026-03-11T15:07:50.852859406" }, "human - cram - GC - RT": { "content": [ @@ -564,21 +607,28 @@ "test.segments.txt:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - [ - "versions.yml:md5,75598081a811afded7d7c1a0d08405ac" - ], { - "ASCAT": { - "ascat": "3.2.0", - "alleleCounter": "4.3.0" - } + "versions_allelecounter": [ + [ + "ASCAT", + "alleleCounter", + "4.3.0" + ] + ], + "versions_ascat": [ + [ + "ASCAT", + "bioconductor-ascat", + "3.2.0" + ] + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.8.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-06-16T15:51:14.807808184" + "timestamp": "2026-03-11T15:07:25.014517492" }, "human - bam - GC - additional_allelecounter": { "content": [ @@ -658,20 +708,27 @@ "test.segments.txt:md5,68b329da9893e34099c7d8ad5cb9c940" ] ], - [ - "versions.yml:md5,75598081a811afded7d7c1a0d08405ac" - ], { - "ASCAT": { - "ascat": "3.2.0", - "alleleCounter": "4.3.0" - } + "versions_allelecounter": [ + [ + "ASCAT", + "alleleCounter", + "4.3.0" + ] + ], + "versions_ascat": [ + [ + "ASCAT", + "bioconductor-ascat", + "3.2.0" + ] + ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.8.4", + "nextflow": "25.10.4" }, - "timestamp": "2025-06-20T12:45:23.273839886" + "timestamp": "2026-03-11T15:06:58.319634812" } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/annotate/bcftools-annotate.diff b/modules/nf-core/bcftools/annotate/bcftools-annotate.diff new file mode 100644 index 00000000..29d39d73 --- /dev/null +++ b/modules/nf-core/bcftools/annotate/bcftools-annotate.diff @@ -0,0 +1,339 @@ +Changes in component 'nf-core/bcftools/annotate' +Changes in 'bcftools/annotate/environment.yml': +--- modules/nf-core/bcftools/annotate/environment.yml ++++ modules/nf-core/bcftools/annotate/environment.yml +@@ -5,6 +5,6 @@ + - bioconda + dependencies: + # renovate: datasource=conda depName=bioconda/bcftools +- - bioconda::bcftools=1.23.1 ++ - bioconda::bcftools=1.24 + # renovate: datasource=conda depName=bioconda/htslib +- - bioconda::htslib=1.23.1 ++ - bioconda::htslib=1.24 + +'modules/nf-core/bcftools/annotate/meta.yml' is unchanged +Changes in 'bcftools/annotate/main.nf': +--- modules/nf-core/bcftools/annotate/main.nf ++++ modules/nf-core/bcftools/annotate/main.nf +@@ -3,9 +3,9 @@ + label 'process_low' + + conda "${moduleDir}/environment.yml" +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' +- : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? ++ 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : ++ 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" + + input: + tuple val(meta), path(input), path(index), path(annotations), path(annotations_index), path(columns), path(header_lines), path(rename_chrs) + +'modules/nf-core/bcftools/annotate/tests/nextflow.config' is unchanged +'modules/nf-core/bcftools/annotate/tests/main.nf.test' is unchanged +Changes in 'bcftools/annotate/tests/main.nf.test.snap': +--- modules/nf-core/bcftools/annotate/tests/main.nf.test.snap ++++ modules/nf-core/bcftools/annotate/tests/main.nf.test.snap +@@ -33,15 +33,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:17:30.386236", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:06.115433412", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index_tbi": { +@@ -69,15 +69,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:16:53.085281", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:39:49.244970585", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index_csi": { +@@ -105,15 +105,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:16:45.422524", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:39:45.898318613", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index_tbi - stub": { +@@ -141,15 +141,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:17:42.838698", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:12.461863492", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index_csi - stub": { +@@ -186,15 +186,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:17:36.707392", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:09.299090106", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index": { +@@ -222,15 +222,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:16:38.31037", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:39:42.545833081", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - stub": { +@@ -252,15 +252,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:17:24.100554", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:02.825728798", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, [], annotation, annotation_tbi], [], header, [] - bcf_output": { +@@ -282,15 +282,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:17:00.449491", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:39:52.638620607", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, [], annotation, annotation_tbi], [], [], [] - vcf_output": { +@@ -312,15 +312,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:16:32.076785", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:39:39.313622671", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_output": { +@@ -342,15 +342,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:16:24.950028", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:39:35.842754834", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, [], annotation, annotation_tbi], [], header, rename_chrs - vcf_gz_index": { +@@ -378,15 +378,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:17:15.090199", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:39:59.429473491", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, [], annotation, annotation_tbi], columns, [], [] - bcf_output": { +@@ -408,15 +408,15 @@ + [ + "BCFTOOLS_ANNOTATE", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:17:07.903873", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:39:56.007074817", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + } +-}+} + +************************************************************ diff --git a/modules/nf-core/bcftools/annotate/environment.yml b/modules/nf-core/bcftools/annotate/environment.yml index cb55500b..99e376d6 100644 --- a/modules/nf-core/bcftools/annotate/environment.yml +++ b/modules/nf-core/bcftools/annotate/environment.yml @@ -4,6 +4,7 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/nf-core/bcftools/annotate/main.nf b/modules/nf-core/bcftools/annotate/main.nf index 18778cc2..5966f76d 100644 --- a/modules/nf-core/bcftools/annotate/main.nf +++ b/modules/nf-core/bcftools/annotate/main.nf @@ -3,17 +3,16 @@ process BCFTOOLS_ANNOTATE { label 'process_low' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(input), path(index), path(annotations), path(annotations_index), path(columns), path(header_lines), path(rename_chrs) output: tuple val(meta), path("${prefix}.${extension}"), emit: vcf - tuple val(meta), path("${prefix}.${extension}.tbi"), emit: tbi, optional: true - tuple val(meta), path("${prefix}.${extension}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${extension}.{tbi,csi}"), emit: index, optional: true tuple val("${task.process}"), val('bcftools'), eval("bcftools --version | sed '1!d; s/^.*bcftools //'"), topic: versions, emit: versions_bcftools when: diff --git a/modules/nf-core/bcftools/annotate/meta.yml b/modules/nf-core/bcftools/annotate/meta.yml index 86331661..066e8544 100644 --- a/modules/nf-core/bcftools/annotate/meta.yml +++ b/modules/nf-core/bcftools/annotate/meta.yml @@ -12,7 +12,8 @@ tools: homepage: http://samtools.github.io/bcftools/bcftools.html documentation: https://samtools.github.io/bcftools/bcftools.html#annotate doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:bcftools input: - - meta: @@ -22,7 +23,8 @@ input: e.g. [ id:'test', single_end:false ] - input: type: file - description: Query VCF or BCF file, can be either uncompressed or compressed + description: Query VCF or BCF file, can be either uncompressed or + compressed ontologies: [] - index: type: file @@ -46,8 +48,9 @@ input: ontologies: [] - rename_chrs: type: file - description: Rename annotations according to this file containing "old_name new_name\n" - pairs separated by whitespaces, each on a separate line. + description: Rename annotations according to this file containing + "old_name new_name\n" pairs separated by whitespaces, each on a separate + line. ontologies: [] output: vcf: @@ -56,32 +59,21 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "${prefix}.${extension}": + - ${prefix}.${extension}: type: file description: Compressed annotated VCF file pattern: "*{vcf,vcf.gz,bcf,bcf.gz}" ontologies: [] - tbi: + index: - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "${prefix}.${extension}.tbi": + - "${prefix}.${extension}.{tbi,csi}": type: file - description: Alternative VCF file index - pattern: "*.tbi" - ontologies: [] - csi: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "${prefix}.${extension}.csi": - type: file - description: Default VCF file index - pattern: "*.csi" + description: VCF file index + pattern: "*.{tbi,csi}" ontologies: [] versions_bcftools: - - ${task.process}: @@ -90,8 +82,8 @@ output: - bcftools: type: string description: The tool name - - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + - bcftools --version | sed '1!d; s/^.*bcftools //': + type: eval description: The command used to generate the version of the tool topics: versions: @@ -101,8 +93,8 @@ topics: - bcftools: type: string description: The tool name - - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + - bcftools --version | sed '1!d; s/^.*bcftools //': + type: eval description: The command used to generate the version of the tool authors: - "@projectoriented" diff --git a/modules/nf-core/bcftools/annotate/tests/main.nf.test b/modules/nf-core/bcftools/annotate/tests/main.nf.test index 3e1d2573..7318e8bd 100644 --- a/modules/nf-core/bcftools/annotate/tests/main.nf.test +++ b/modules/nf-core/bcftools/annotate/tests/main.nf.test @@ -35,8 +35,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name + ":variantsMD5," + path(it).vcf.variantsMD5 }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -68,8 +67,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name + ":variantsMD5," + path(it).vcf.variantsMD5 }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -101,8 +99,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name + ":variantsMD5," + path(it).vcf.variantsMD5 }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -134,8 +131,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name + ":variantsMD5," + path(it).vcf.variantsMD5 }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -167,8 +163,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name + ":variantsMD5," + path(it).vcf.variantsMD5 }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -206,8 +201,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -240,8 +234,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -279,8 +272,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -314,8 +306,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -349,8 +340,8 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -384,8 +375,8 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -419,8 +410,7 @@ nextflow_process { assertAll( { assert snapshot( process.out.vcf.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name }}, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name }}, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name }}, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) diff --git a/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap b/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap index 10af196a..3931eb46 100644 --- a/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/annotate/tests/main.nf.test.snap @@ -11,7 +11,13 @@ ] ], [ - + [ + { + "id": "test", + "single_end": false + }, + "test_ann.vcf.gz.csi" + ] ], [ [ @@ -27,16 +33,16 @@ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:06.115433412", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:29:19.618749659" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index_tbi": { "content": [ @@ -57,25 +63,22 @@ }, "test_ann.vcf.gz.tbi" ] - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:39:49.244970585", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:28:43.350060834" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index_csi": { "content": [ @@ -87,9 +90,6 @@ }, "test_ann.vcf.gz:variantsMD5,bc7bf3ee9e8430e064c539eb81e59bf9" ] - ], - [ - ], [ [ @@ -105,16 +105,16 @@ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:39:45.898318613", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:28:36.101003418" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index_tbi - stub": { "content": [ @@ -135,25 +135,22 @@ }, "test_ann.vcf.gz.tbi" ] - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:12.461863492", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:29:34.19449127" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index_csi - stub": { "content": [ @@ -167,7 +164,13 @@ ] ], [ - + [ + { + "id": "test", + "single_end": false + }, + "test_ann.vcf.gz.csi" + ] ], [ [ @@ -183,16 +186,16 @@ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:09.299090106", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:29:26.927815399" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_gz_index": { "content": [ @@ -204,9 +207,6 @@ }, "test_ann.vcf.gz:variantsMD5,bc7bf3ee9e8430e064c539eb81e59bf9" ] - ], - [ - ], [ [ @@ -222,16 +222,16 @@ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:39:42.545833081", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:28:28.891823681" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - stub": { "content": [ @@ -246,25 +246,22 @@ ], [ - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:02.825728798", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:29:12.400301681" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, [], annotation, annotation_tbi], [], header, [] - bcf_output": { "content": [ @@ -279,25 +276,22 @@ ], [ - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:39:52.638620607", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:28:50.375384421" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, [], annotation, annotation_tbi], [], [], [] - vcf_output": { "content": [ @@ -312,25 +306,22 @@ ], [ - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:39:39.313622671", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:28:21.320211288" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, tbi, annotation, annotation_tbi], [], [], [] - vcf_output": { "content": [ @@ -345,25 +336,22 @@ ], [ - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:39:35.842754834", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:28:13.274072987" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, [], annotation, annotation_tbi], [], header, rename_chrs - vcf_gz_index": { "content": [ @@ -375,9 +363,6 @@ }, "test_ann.vcf.gz" ] - ], - [ - ], [ [ @@ -393,16 +378,16 @@ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:39:59.429473491", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:29:05.094685409" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [vcf, [], annotation, annotation_tbi], columns, [], [] - bcf_output": { "content": [ @@ -417,24 +402,21 @@ ], [ - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_ANNOTATE", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:39:56.007074817", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-27T15:28:57.906382655" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } -} \ No newline at end of file +} diff --git a/modules/nf-core/bcftools/concat/bcftools-concat.diff b/modules/nf-core/bcftools/concat/bcftools-concat.diff new file mode 100644 index 00000000..e8f035ee --- /dev/null +++ b/modules/nf-core/bcftools/concat/bcftools-concat.diff @@ -0,0 +1,321 @@ +Changes in component 'nf-core/bcftools/concat' +Changes in 'bcftools/concat/environment.yml': +--- modules/nf-core/bcftools/concat/environment.yml ++++ modules/nf-core/bcftools/concat/environment.yml +@@ -5,6 +5,6 @@ + - bioconda + dependencies: + # renovate: datasource=conda depName=bioconda/bcftools +- - bioconda::bcftools=1.23.1 ++ - bioconda::bcftools=1.24 + # renovate: datasource=conda depName=bioconda/htslib +- - bioconda::htslib=1.23.1 ++ - bioconda::htslib=1.24 + +'modules/nf-core/bcftools/concat/meta.yml' is unchanged +Changes in 'bcftools/concat/main.nf': +--- modules/nf-core/bcftools/concat/main.nf ++++ modules/nf-core/bcftools/concat/main.nf +@@ -3,9 +3,9 @@ + label 'process_medium' + + conda "${moduleDir}/environment.yml" +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' +- : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? ++ 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : ++ 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" + + input: + tuple val(meta), path(vcfs), path(tbi) + +'modules/nf-core/bcftools/concat/tests/nextflow.config' is unchanged +'modules/nf-core/bcftools/concat/tests/vcf_gz_index_tbi.config' is unchanged +'modules/nf-core/bcftools/concat/tests/vcf_gz_index.config' is unchanged +'modules/nf-core/bcftools/concat/tests/main.nf.test' is unchanged +'modules/nf-core/bcftools/concat/tests/vcf_gz_index_csi.config' is unchanged +Changes in 'bcftools/concat/tests/main.nf.test.snap': +--- modules/nf-core/bcftools/concat/tests/main.nf.test.snap ++++ modules/nf-core/bcftools/concat/tests/main.nf.test.snap +@@ -22,15 +22,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:16.850504", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:25.650740903", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "homo_sapiens - [[vcf1, vcf2], []]": { +@@ -51,7 +51,7 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -69,15 +69,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:27.579554", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:32.598819366", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { +@@ -98,7 +98,7 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -116,15 +116,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:32.807204", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:36.073192493", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index - stub": { +@@ -150,7 +150,7 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -173,15 +173,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:37.654819", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:39.374585697", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi": { +@@ -207,15 +207,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:21.961765", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:29.05239383", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]]": { +@@ -236,7 +236,7 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -254,15 +254,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:06.656455", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:18.91103878", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index": { +@@ -288,15 +288,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:11.49041", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:22.302743227", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi - stub": { +@@ -322,7 +322,7 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -345,15 +345,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:48.223745", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:46.034100251", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi - stub": { +@@ -379,7 +379,7 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -402,15 +402,15 @@ + [ + "BCFTOOLS_CONCAT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:02:43.108308", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:40:42.693147579", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + } +-}+} + +************************************************************ diff --git a/modules/nf-core/bcftools/concat/environment.yml b/modules/nf-core/bcftools/concat/environment.yml index cb55500b..99e376d6 100644 --- a/modules/nf-core/bcftools/concat/environment.yml +++ b/modules/nf-core/bcftools/concat/environment.yml @@ -4,6 +4,7 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/nf-core/bcftools/concat/main.nf b/modules/nf-core/bcftools/concat/main.nf index 269da8e0..2190f348 100644 --- a/modules/nf-core/bcftools/concat/main.nf +++ b/modules/nf-core/bcftools/concat/main.nf @@ -3,17 +3,16 @@ process BCFTOOLS_CONCAT { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcfs), path(tbi) output: tuple val(meta), path("${prefix}.${extension}"), emit: vcf - tuple val(meta), path("${prefix}.${extension}.tbi"), emit: tbi, optional: true - tuple val(meta), path("${prefix}.${extension}.csi"), emit: csi, optional: true + tuple val(meta), path("${prefix}.${extension}.{tbi,csi}"), emit: index, optional: true tuple val("${task.process}"), val('bcftools'), eval("bcftools --version | sed '1!d; s/^.*bcftools //'"), topic: versions, emit: versions_bcftools when: diff --git a/modules/nf-core/bcftools/concat/meta.yml b/modules/nf-core/bcftools/concat/meta.yml index 1734a8c3..6fd768b8 100644 --- a/modules/nf-core/bcftools/concat/meta.yml +++ b/modules/nf-core/bcftools/concat/meta.yml @@ -12,7 +12,8 @@ tools: homepage: http://samtools.github.io/bcftools/bcftools.html documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:bcftools input: - - meta: @@ -43,30 +44,17 @@ output: Groovy Map containing sample information e.g. [ id:'test', single_end:false ] pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" - tbi: + index: - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - ${prefix}.${extension}.tbi: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - pattern: "*.tbi" - csi: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - ${prefix}.${extension}.csi: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - pattern: "*.csi" + - "${prefix}.${extension}.{tbi,csi}": + type: file + description: VCF file index + pattern: "*.{tbi,csi}" + ontologies: [] versions_bcftools: - - ${task.process}: type: string @@ -74,8 +62,8 @@ output: - bcftools: type: string description: The tool name - - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + - bcftools --version | sed '1!d; s/^.*bcftools //': + type: eval description: The command used to generate the version of the tool topics: versions: @@ -85,8 +73,8 @@ topics: - bcftools: type: string description: The tool name - - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + - bcftools --version | sed '1!d; s/^.*bcftools //': + type: eval description: The command used to generate the version of the tool authors: - "@abhi18av" diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test b/modules/nf-core/bcftools/concat/tests/main.nf.test index 58e19991..3f21e8f4 100644 --- a/modules/nf-core/bcftools/concat/tests/main.nf.test +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test @@ -66,11 +66,10 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -102,11 +101,10 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -138,11 +136,10 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, - { assert process.out.tbi[0][1].endsWith(".tbi") } + { assert process.out.index[0][1].endsWith(".tbi") } ) } } @@ -233,7 +230,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -265,7 +262,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -297,7 +294,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.tbi[0][1].endsWith(".tbi") } + { assert process.out.index[0][1].endsWith(".tbi") } ) } } diff --git a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap index 5edf5beb..3aa6a3fe 100644 --- a/modules/nf-core/bcftools/concat/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/concat/tests/main.nf.test.snap @@ -16,25 +16,22 @@ }, "test3_vcf.vcf.gz.csi" ] - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:25.650740903", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T11:59:52.705734505" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "homo_sapiens - [[vcf1, vcf2], []]": { "content": [ @@ -51,19 +48,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -78,16 +69,16 @@ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:32.598819366", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:00:08.498123366" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { "content": [ @@ -104,19 +95,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -131,16 +116,16 @@ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:36.073192493", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:00:15.986212097" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index - stub": { "content": [ @@ -154,9 +139,6 @@ ] ], "1": [ - - ], - "2": [ [ { "id": "test3" @@ -164,23 +146,20 @@ "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ + "2": [ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ + "index": [ [ { "id": "test3" }, "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "tbi": [ - ], "vcf": [ [ @@ -194,16 +173,16 @@ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:39.374585697", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:00:24.007593166" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi": { "content": [ @@ -214,9 +193,6 @@ }, "test3_vcf.vcf.gz:md5,0b4986bbb6bdc9e0ee12ba09e70092e9" ] - ], - [ - ], [ [ @@ -231,16 +207,16 @@ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:29.05239383", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:00:00.937832062" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]]": { "content": [ @@ -257,19 +233,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -284,16 +254,16 @@ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:18.91103878", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T11:59:37.378838683" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index": { "content": [ @@ -312,25 +282,22 @@ }, "test3_vcf.vcf.gz.csi" ] - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:22.302743227", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T11:59:45.296771646" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_tbi - stub": { "content": [ @@ -352,19 +319,13 @@ ] ], "2": [ - - ], - "3": [ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ [ { "id": "test3" @@ -384,16 +345,16 @@ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:46.034100251", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:00:39.792930532" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "homo_sapiens - [[vcf1, vcf2], [tbi1, tbi2]] - vcf_gz_index_csi - stub": { "content": [ @@ -407,9 +368,6 @@ ] ], "1": [ - - ], - "2": [ [ { "id": "test3" @@ -417,23 +375,20 @@ "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ + "2": [ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ + "index": [ [ { "id": "test3" }, "test3_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "tbi": [ - ], "vcf": [ [ @@ -447,15 +402,15 @@ [ "BCFTOOLS_CONCAT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:40:42.693147579", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:00:31.985353981" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } -} \ No newline at end of file +} diff --git a/modules/nf-core/bcftools/isec/bcftools-isec.diff b/modules/nf-core/bcftools/isec/bcftools-isec.diff index bea9e9d9..655559b3 100644 --- a/modules/nf-core/bcftools/isec/bcftools-isec.diff +++ b/modules/nf-core/bcftools/isec/bcftools-isec.diff @@ -1,9 +1,33 @@ Changes in component 'nf-core/bcftools/isec' +Changes in 'bcftools/isec/environment.yml': +--- modules/nf-core/bcftools/isec/environment.yml ++++ modules/nf-core/bcftools/isec/environment.yml +@@ -5,5 +5,5 @@ + - bioconda + dependencies: + # renovate: datasource=conda depName=bioconda/htslib +- - bioconda::bcftools=1.23.1 +- - bioconda::htslib=1.23.1 ++ - bioconda::bcftools=1.24 ++ - bioconda::htslib=1.24 + 'modules/nf-core/bcftools/isec/meta.yml' is unchanged Changes in 'bcftools/isec/main.nf': --- modules/nf-core/bcftools/isec/main.nf +++ modules/nf-core/bcftools/isec/main.nf -@@ -12,6 +12,15 @@ +@@ -3,15 +3,24 @@ + label 'process_medium' + + conda "${moduleDir}/environment.yml" +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' +- : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? ++ 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : ++ 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" + + input: + tuple val(meta), path(vcfs), path(tbis), path(file_list), path(targets_file), path(regions_file) output: tuple val(meta), path("${prefix}", type: "dir"), emit: results @@ -39,8 +63,7 @@ Changes in 'bcftools/isec/main.nf': """ } -'modules/nf-core/bcftools/isec/environment.yml' is unchanged +'modules/nf-core/bcftools/isec/tests/nextflow.config' is unchanged 'modules/nf-core/bcftools/isec/tests/main.nf.test' is unchanged 'modules/nf-core/bcftools/isec/tests/main.nf.test.snap' is unchanged -'modules/nf-core/bcftools/isec/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/bcftools/isec/environment.yml b/modules/nf-core/bcftools/isec/environment.yml index cb55500b..cd30b765 100644 --- a/modules/nf-core/bcftools/isec/environment.yml +++ b/modules/nf-core/bcftools/isec/environment.yml @@ -5,5 +5,5 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/htslib - - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 + - bioconda::bcftools=1.24 + - bioconda::htslib=1.24 diff --git a/modules/nf-core/bcftools/isec/main.nf b/modules/nf-core/bcftools/isec/main.nf index cda1a662..cf74da4d 100644 --- a/modules/nf-core/bcftools/isec/main.nf +++ b/modules/nf-core/bcftools/isec/main.nf @@ -3,9 +3,9 @@ process BCFTOOLS_ISEC { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcfs), path(tbis), path(file_list), path(targets_file), path(regions_file) diff --git a/modules/nf-core/bcftools/isec/meta.yml b/modules/nf-core/bcftools/isec/meta.yml index 051e141e..82938fb9 100644 --- a/modules/nf-core/bcftools/isec/meta.yml +++ b/modules/nf-core/bcftools/isec/meta.yml @@ -14,7 +14,8 @@ tools: homepage: http://samtools.github.io/bcftools/bcftools.html documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:bcftools input: - - meta: @@ -29,35 +30,35 @@ input: e.g. [ 'file1.vcf.gz', 'file2.vcf' ] pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" ontologies: - - edam: "http://edamontology.org/format_3016" # VCF - - edam: "http://edamontology.org/format_3570" # BCF + - edam: "http://edamontology.org/format_3016" + - edam: "http://edamontology.org/format_3570" - tbis: type: list description: | List containing the tbi index files corresponding to the vcf/bcf input files pattern: "*.tbi" ontologies: - - edam: "http://edamontology.org/format_3475" # Tabix index + - edam: "http://edamontology.org/format_3475" - file_list: type: file description: | Optional text file containing the list of VCF/BCF files to be processed by bcftools isec, one per line. ontologies: - - edam: "http://edamontology.org/format_2330" # Text file + - edam: "http://edamontology.org/format_2330" - targets_file: type: file description: | Optional file containing target regions to restrict the analysis to. ontologies: - - edam: "http://edamontology.org/format_3003" # BED - - edam: "http://edamontology.org/format_3475" # Tab-separated + - edam: "http://edamontology.org/format_3003" + - edam: "http://edamontology.org/format_3475" - regions_file: type: file description: | Optional file containing regions to restrict the analysis to. ontologies: - - edam: "http://edamontology.org/format_3003" # BED - - edam: "http://edamontology.org/format_3475" # Tab-separated + - edam: "http://edamontology.org/format_3003" + - edam: "http://edamontology.org/format_3475" output: results: - - meta: @@ -70,8 +71,8 @@ output: description: Directory containing the output files from bcftools isec pattern: "${prefix}/" ontologies: - - edam: "http://edamontology.org/format_3016" # VCF - - edam: "http://edamontology.org/format_3570" # BCF + - edam: "http://edamontology.org/format_3016" + - edam: "http://edamontology.org/format_3570" versions_bcftools: - - ${task.process}: type: string @@ -80,7 +81,7 @@ output: type: string description: The tool name - bcftools --version | sed '1!d; s/^.*bcftools //': - type: string + type: eval description: The command used to generate the version of the tool topics: versions: @@ -91,7 +92,7 @@ topics: type: string description: The tool name - bcftools --version | sed '1!d; s/^.*bcftools //': - type: string + type: eval description: The command used to generate the version of the tool authors: - "@joseespinosa" diff --git a/modules/nf-core/bcftools/isec/tests/main.nf.test.snap b/modules/nf-core/bcftools/isec/tests/main.nf.test.snap index 8a2cb65f..caf19a1c 100644 --- a/modules/nf-core/bcftools/isec/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/isec/tests/main.nf.test.snap @@ -6,7 +6,7 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ] }, @@ -25,11 +25,11 @@ "sites.txt:md5,1cea3fbde7f6d3c97f3d39036f9690df" ] ], + "timestamp": "2026-03-20T18:02:46.139337808", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:03:48.711543241" + } }, "sarscov2 - [[vcf1.gz, vcf2.gz], [tbi1, tbi2]] - targets": { "content": [ @@ -38,7 +38,7 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ] }, @@ -56,11 +56,11 @@ "README.txt:md5,f4190b7943f8f12886ad57ecaedd0c43" ] ], + "timestamp": "2026-03-20T18:03:00.680743923", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.8" - }, - "timestamp": "2026-01-28T11:48:46.533255686" + "nf-test": "0.9.4", + "nextflow": "25.10.2" + } }, "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - regions - stub": { "content": [ @@ -84,7 +84,7 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ], "results": [ @@ -106,16 +106,16 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:03:26.464301675", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.8" - }, - "timestamp": "2026-01-23T19:06:04.239620535" + "nf-test": "0.9.4", + "nextflow": "25.10.2" + } }, "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - targets - stub": { "content": [ @@ -139,7 +139,7 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ], "results": [ @@ -161,16 +161,16 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:03:08.501462483", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.8" - }, - "timestamp": "2026-01-23T18:58:08.73508502" + "nf-test": "0.9.4", + "nextflow": "25.10.2" + } }, "sarscov2 - [[vcf1.gz, vcf2.gz], [tbi1, tbi2]] - file_list": { "content": [ @@ -179,7 +179,7 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ] }, @@ -198,11 +198,11 @@ "sites.txt:md5,1cea3fbde7f6d3c97f3d39036f9690df" ] ], + "timestamp": "2026-03-20T18:03:34.216401248", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.8" - }, - "timestamp": "2026-01-27T12:52:50.066330847" + "nf-test": "0.9.4", + "nextflow": "25.10.2" + } }, "sarscov2 - [[vcf1, vcf2], [tbi1, tbi2]] - stub": { "content": [ @@ -226,7 +226,7 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ], "results": [ @@ -248,16 +248,16 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:02:53.254240292", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:03:56.874977547" + } }, "sarscov2 - [[vcf1.gz, vcf2.gz], [tbi1, tbi2]] - regions": { "content": [ @@ -266,7 +266,7 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ] }, @@ -284,11 +284,11 @@ "README.txt:md5,16eeab1b2463bab4d498a4dfdaa297fa" ] ], + "timestamp": "2026-03-20T18:03:16.526803799", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.8" - }, - "timestamp": "2026-01-28T11:49:26.428693544" + "nf-test": "0.9.4", + "nextflow": "25.10.2" + } }, "sarscov2 - [[vcf1.gz, vcf2.gz], [tbi1, tbi2]] - file_list - stub": { "content": [ @@ -312,7 +312,7 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ], "results": [ @@ -334,15 +334,15 @@ [ "BCFTOOLS_ISEC", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:03:41.489347975", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.04.8" - }, - "timestamp": "2026-01-28T11:55:27.123701797" + "nf-test": "0.9.4", + "nextflow": "25.10.2" + } } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/merge/bcftools-merge.diff b/modules/nf-core/bcftools/merge/bcftools-merge.diff index 6a8812db..7baadff3 100644 --- a/modules/nf-core/bcftools/merge/bcftools-merge.diff +++ b/modules/nf-core/bcftools/merge/bcftools-merge.diff @@ -1,9 +1,31 @@ Changes in component 'nf-core/bcftools/merge' +Changes in 'bcftools/merge/environment.yml': +--- modules/nf-core/bcftools/merge/environment.yml ++++ modules/nf-core/bcftools/merge/environment.yml +@@ -5,6 +5,6 @@ + - bioconda + dependencies: + # renovate: datasource=conda depName=bioconda/bcftools +- - bioconda::bcftools=1.23.1 ++ - bioconda::bcftools=1.24 + # renovate: datasource=conda depName=bioconda/htslib +- - bioconda::htslib=1.23.1 ++ - bioconda::htslib=1.24 + 'modules/nf-core/bcftools/merge/meta.yml' is unchanged Changes in 'bcftools/merge/main.nf': --- modules/nf-core/bcftools/merge/main.nf +++ modules/nf-core/bcftools/merge/main.nf -@@ -9,7 +9,8 @@ +@@ -3,13 +3,14 @@ + label 'process_medium' + + conda "${moduleDir}/environment.yml" +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' +- : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? ++ 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : ++ 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcfs), path(tbis), path(bed) @@ -14,8 +36,7 @@ Changes in 'bcftools/merge/main.nf': output: tuple val(meta), path("*.{bcf,vcf}{,.gz}"), emit: vcf -'modules/nf-core/bcftools/merge/environment.yml' is unchanged +'modules/nf-core/bcftools/merge/tests/nextflow.config' is unchanged 'modules/nf-core/bcftools/merge/tests/main.nf.test' is unchanged 'modules/nf-core/bcftools/merge/tests/main.nf.test.snap' is unchanged -'modules/nf-core/bcftools/merge/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/bcftools/merge/environment.yml b/modules/nf-core/bcftools/merge/environment.yml index cb55500b..99e376d6 100644 --- a/modules/nf-core/bcftools/merge/environment.yml +++ b/modules/nf-core/bcftools/merge/environment.yml @@ -4,6 +4,7 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/nf-core/bcftools/merge/main.nf b/modules/nf-core/bcftools/merge/main.nf index f295c0e6..3cab470c 100644 --- a/modules/nf-core/bcftools/merge/main.nf +++ b/modules/nf-core/bcftools/merge/main.nf @@ -3,9 +3,9 @@ process BCFTOOLS_MERGE { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcfs), path(tbis), path(bed) diff --git a/modules/nf-core/bcftools/merge/meta.yml b/modules/nf-core/bcftools/merge/meta.yml index 445e5c56..d1f14ba5 100644 --- a/modules/nf-core/bcftools/merge/meta.yml +++ b/modules/nf-core/bcftools/merge/meta.yml @@ -11,7 +11,8 @@ tools: homepage: http://samtools.github.io/bcftools/bcftools.html documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:bcftools input: - - meta: @@ -84,7 +85,7 @@ output: type: string description: The tool name - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + type: eval description: The command used to generate the version of the tool topics: versions: @@ -95,7 +96,7 @@ topics: type: string description: The tool name - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + type: eval description: The command used to generate the version of the tool authors: - "@joseespinosa" diff --git a/modules/nf-core/bcftools/merge/tests/main.nf.test.snap b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap index 9dd09178..26f357c8 100644 --- a/modules/nf-core/bcftools/merge/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/merge/tests/main.nf.test.snap @@ -8,16 +8,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:04:45.080843391", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:05:01.453191274" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf output - stub": { "content": [ @@ -37,7 +37,7 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ], "index": [ @@ -55,16 +55,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:05:25.25403025", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:05:43.064165277" + } }, "sarscov2 - [vcf, tbi], [], [], bed": { "content": [ @@ -74,16 +74,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:04:52.858929503", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:05:09.906419282" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index - stub": { "content": [ @@ -108,7 +108,7 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ], "index": [ @@ -131,16 +131,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:05:56.583006641", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:06:17.06290054" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf output": { "content": [ @@ -150,16 +150,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:03:57.570236761", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:04:14.044948834" + } }, "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output - stub": { "content": [ @@ -179,7 +179,7 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ], "index": [ @@ -197,16 +197,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:05:48.75796761", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:06:08.633006073" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - tbi index - stub": { "content": [ @@ -231,7 +231,7 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ], "index": [ @@ -254,16 +254,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:06:11.006590962", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:06:33.897407991" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - stub": { "content": [ @@ -283,7 +283,7 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ], "index": [ @@ -301,16 +301,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:05:33.181550902", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:05:51.445673109" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index": { "content": [ @@ -321,16 +321,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:04:37.289045617", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:04:53.868676326" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output": { "content": [ @@ -340,16 +340,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:04:05.940999977", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:04:22.660557224" + } }, "sarscov2 - [vcf, tbi], [], [], [] - bcf output": { "content": [ @@ -359,16 +359,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:04:13.622386289", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:04:30.965022315" + } }, "sarscov2 - [vcf, tbi], [], [], [] - bcf output - stub": { "content": [ @@ -388,7 +388,7 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ], "index": [ @@ -406,16 +406,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:05:41.084610701", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:05:59.932077434" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - index": { "content": [ @@ -426,16 +426,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:04:29.469178039", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:04:46.41923299" + } }, "homo_sapiens - [vcf, tbi], fasta, fai, bed - vcf.gz output": { "content": [ @@ -445,16 +445,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:05:01.918013292", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:05:18.989455751" + } }, "sarscov2 - [vcf, tbi], [], [], [] - one sample": { "content": [ @@ -464,16 +464,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:05:09.444730199", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:05:26.431607458" + } }, "sarscov2 - [vcf, tbi], [], [], [] - stub": { "content": [ @@ -493,7 +493,7 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ], "index": [ @@ -511,16 +511,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:05:16.820762299", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:05:34.692613749" + } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf.gz output - csi index - stub": { "content": [ @@ -545,7 +545,7 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ], "index": [ @@ -568,16 +568,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:06:03.842949519", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:06:25.137261969" + } }, "sarscov2 - [vcf, tbi], [], [], []": { "content": [ @@ -587,16 +587,16 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:03:49.803735629", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:04:05.637837157" + } }, "sarscov2 - [vcf, tbi], [], [], [] - bcf.gz output": { "content": [ @@ -606,15 +606,15 @@ [ "BCFTOOLS_MERGE", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:04:20.850645013", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:04:38.467108836" + } } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/norm/bcftools-norm.diff b/modules/nf-core/bcftools/norm/bcftools-norm.diff new file mode 100644 index 00000000..0433e77b --- /dev/null +++ b/modules/nf-core/bcftools/norm/bcftools-norm.diff @@ -0,0 +1,547 @@ +Changes in component 'nf-core/bcftools/norm' +Changes in 'bcftools/norm/environment.yml': +--- modules/nf-core/bcftools/norm/environment.yml ++++ modules/nf-core/bcftools/norm/environment.yml +@@ -5,6 +5,6 @@ + - bioconda + dependencies: + # renovate: datasource=conda depName=bioconda/bcftools +- - bioconda::bcftools=1.23.1 ++ - bioconda::bcftools=1.24 + # renovate: datasource=conda depName=bioconda/htslib +- - bioconda::htslib=1.23.1 ++ - bioconda::htslib=1.24 + +'modules/nf-core/bcftools/norm/meta.yml' is unchanged +Changes in 'bcftools/norm/main.nf': +--- modules/nf-core/bcftools/norm/main.nf ++++ modules/nf-core/bcftools/norm/main.nf +@@ -3,9 +3,9 @@ + label 'process_medium' + + conda "${moduleDir}/environment.yml" +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' +- : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? ++ 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : ++ 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" + + input: + tuple val(meta), path(vcf), path(tbi) + +'modules/nf-core/bcftools/norm/tests/nextflow.config' is unchanged +'modules/nf-core/bcftools/norm/tests/vcf_gz_index_tbi.config' is unchanged +'modules/nf-core/bcftools/norm/tests/nextflow.bcf_gz.config' is unchanged +'modules/nf-core/bcftools/norm/tests/nextflow.bcf.config' is unchanged +'modules/nf-core/bcftools/norm/tests/vcf_gz_index.config' is unchanged +'modules/nf-core/bcftools/norm/tests/nextflow.vcf_gz.config' is unchanged +'modules/nf-core/bcftools/norm/tests/main.nf.test' is unchanged +'modules/nf-core/bcftools/norm/tests/vcf_gz_index_csi.config' is unchanged +'modules/nf-core/bcftools/norm/tests/nextflow.vcf.config' is unchanged +Changes in 'bcftools/norm/tests/main.nf.test.snap': +--- modules/nf-core/bcftools/norm/tests/main.nf.test.snap ++++ modules/nf-core/bcftools/norm/tests/main.nf.test.snap +@@ -17,7 +17,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -35,15 +35,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:29:38.221253", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:51.715711697", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, [] ], fasta - stub": { +@@ -64,7 +64,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -82,15 +82,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:29:11.759766", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:41.706565332", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, tbi ], fasta - vcf output": { +@@ -111,7 +111,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -129,15 +129,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:28:42.164852", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:28.295853166", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index - stub": { +@@ -163,7 +163,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -186,15 +186,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:30:02.757888", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:01.645026772", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, tbi ], fasta - vcf_gz output": { +@@ -218,15 +218,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-03-20T18:07:57.732501354", +- "meta": { +- "nf-test": "0.9.4", +- "nextflow": "25.10.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:31.641466652", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, [] ], fasta": { +@@ -247,7 +247,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -265,15 +265,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:28:05.065885", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:11.469521034", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, tbi ], fasta - vcf output -stub": { +@@ -294,7 +294,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -312,15 +312,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:29:30.996415", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:48.333564172", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, tbi ], fasta - bcf_gz output": { +@@ -341,7 +341,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -359,15 +359,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:29:02.739486", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:38.425752113", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_csi - stub": { +@@ -393,7 +393,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -416,15 +416,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:30:09.138076", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:04.853640878", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_tbi": { +@@ -470,7 +470,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -488,15 +488,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:28:34.693446", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:24.888460746", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, tbi ], fasta -stub": { +@@ -517,7 +517,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -535,15 +535,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:29:21.645858", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:45.098569557", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, tbi ], fasta - bcf_gz output - stub": { +@@ -564,7 +564,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -582,15 +582,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:29:55.661621", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:58.411833883", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index": { +@@ -636,7 +636,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -654,15 +654,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:29:48.10211", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:55.098608408", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_tbi - stub": { +@@ -688,7 +688,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -711,15 +711,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:30:16.655861", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:08.063276388", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_csi": { +@@ -765,7 +765,7 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -783,15 +783,15 @@ + [ + "BCFTOOLS_NORM", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:28:55.66047", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:42:35.078614195", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + } +-}+} + +************************************************************ diff --git a/modules/nf-core/bcftools/norm/environment.yml b/modules/nf-core/bcftools/norm/environment.yml index cb55500b..99e376d6 100644 --- a/modules/nf-core/bcftools/norm/environment.yml +++ b/modules/nf-core/bcftools/norm/environment.yml @@ -4,6 +4,7 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/nf-core/bcftools/norm/main.nf b/modules/nf-core/bcftools/norm/main.nf index 443c8bbb..b9dedda8 100644 --- a/modules/nf-core/bcftools/norm/main.nf +++ b/modules/nf-core/bcftools/norm/main.nf @@ -3,9 +3,9 @@ process BCFTOOLS_NORM { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcf), path(tbi) @@ -13,8 +13,7 @@ process BCFTOOLS_NORM { output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf - tuple val(meta), path("*.tbi"), emit: tbi, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true + tuple val(meta), path("*.{tbi,csi}"), emit: index, optional: true tuple val("${task.process}"), val('bcftools'), eval("bcftools --version | sed '1!d; s/^.*bcftools //'"), topic: versions, emit: versions_bcftools when: diff --git a/modules/nf-core/bcftools/norm/meta.yml b/modules/nf-core/bcftools/norm/meta.yml index 9feecac0..f465e01e 100644 --- a/modules/nf-core/bcftools/norm/meta.yml +++ b/modules/nf-core/bcftools/norm/meta.yml @@ -12,7 +12,8 @@ tools: homepage: http://samtools.github.io/bcftools/bcftools.html documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:bcftools input: - - meta: @@ -52,32 +53,21 @@ output: e.g. [ id:'test', single_end:false ] - "*.{vcf,vcf.gz,bcf,bcf.gz}": type: file - description: One of uncompressed VCF (.vcf), compressed VCF (.vcf.gz), compressed - BCF (.bcf.gz) or uncompressed BCF (.bcf) normalized output file + description: One of uncompressed VCF (.vcf), compressed VCF (.vcf.gz), + compressed BCF (.bcf.gz) or uncompressed BCF (.bcf) normalized output + file pattern: "*.{vcf,vcf.gz,bcf,bcf.gz}" ontologies: [] - tbi: + index: - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.tbi": + - "*.{tbi,csi}": type: file - description: Alternative VCF file index - pattern: "*.tbi" - ontologies: [] - csi: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.csi": - type: file - description: Default VCF file index - pattern: "*.csi" - ontologies: [] + description: VCF file index + pattern: "*.{tbi,csi}" versions_bcftools: - - ${task.process}: type: string @@ -85,8 +75,8 @@ output: - bcftools: type: string description: The tool name - - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + - bcftools --version | sed '1!d; s/^.*bcftools //': + type: eval description: The command used to generate the version of the tool topics: versions: @@ -96,8 +86,8 @@ topics: - bcftools: type: string description: The tool name - - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + - bcftools --version | sed '1!d; s/^.*bcftools //': + type: eval description: The command used to generate the version of the tool authors: - "@abhi18av" diff --git a/modules/nf-core/bcftools/norm/tests/main.nf.test b/modules/nf-core/bcftools/norm/tests/main.nf.test index 05851753..48e55170 100644 --- a/modules/nf-core/bcftools/norm/tests/main.nf.test +++ b/modules/nf-core/bcftools/norm/tests/main.nf.test @@ -62,9 +62,9 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } } + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } } ).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -94,9 +94,9 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } } + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } } ).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -126,9 +126,9 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } } + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } } ).match() }, - { assert process.out.tbi[0][1].endsWith(".tbi") } + { assert process.out.index[0][1].endsWith(".tbi") } ) } } @@ -214,8 +214,8 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() } ) @@ -476,7 +476,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -506,7 +506,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -536,7 +536,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.tbi[0][1].endsWith(".tbi") } + { assert process.out.index[0][1].endsWith(".tbi") } ) } } diff --git a/modules/nf-core/bcftools/norm/tests/main.nf.test.snap b/modules/nf-core/bcftools/norm/tests/main.nf.test.snap index ee2dadf7..5b77844e 100644 --- a/modules/nf-core/bcftools/norm/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/norm/tests/main.nf.test.snap @@ -14,19 +14,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -41,16 +35,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:51.715711697", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:09:29.987030961" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, [] ], fasta - stub": { "content": [ @@ -67,19 +61,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -94,16 +82,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:41.706565332", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:09:06.488086505" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, tbi ], fasta - vcf output": { "content": [ @@ -120,19 +108,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -147,16 +129,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:28.295853166", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:08:34.863776359" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index - stub": { "content": [ @@ -170,9 +152,6 @@ ] ], "1": [ - - ], - "2": [ [ { "id": "test" @@ -180,23 +159,20 @@ "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ + "2": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ + "index": [ [ { "id": "test" }, "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "tbi": [ - ], "vcf": [ [ @@ -210,16 +186,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:01.645026772", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:09:54.718705045" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, tbi ], fasta - vcf_gz output": { "content": [ @@ -242,16 +218,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:31.641466652", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:08:43.007377633" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, [] ], fasta": { "content": [ @@ -268,19 +244,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -295,16 +265,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:11.469521034", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:07:54.877084219" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, tbi ], fasta - vcf output -stub": { "content": [ @@ -321,19 +291,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -348,16 +312,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:48.333564172", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:09:22.220435939" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, tbi ], fasta - bcf_gz output": { "content": [ @@ -374,19 +338,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -401,16 +359,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:38.425752113", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:08:58.483532889" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_csi - stub": { "content": [ @@ -424,9 +382,6 @@ ] ], "1": [ - - ], - "2": [ [ { "id": "test" @@ -434,23 +389,20 @@ "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ + "2": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ + "index": [ [ { "id": "test" }, "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "tbi": [ - ], "vcf": [ [ @@ -464,16 +416,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:04.853640878", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:10:03.22576704" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_tbi": { "content": [ @@ -486,14 +438,19 @@ ] ], [ - + [ + { + "id": "test" + }, + "test_vcf.vcf.gz.tbi" + ] ] ], + "timestamp": "2026-05-28T14:28:26.441368", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-05T13:53:28.356741947" + "nf-test": "0.9.5", + "nextflow": "26.04.2" + } }, "sarscov2 - [ vcf, tbi ], fasta": { "content": [ @@ -510,19 +467,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -537,16 +488,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:24.888460746", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:08:27.281315407" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, tbi ], fasta -stub": { "content": [ @@ -563,19 +514,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -590,16 +535,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:45.098569557", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:09:14.249715835" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, tbi ], fasta - bcf_gz output - stub": { "content": [ @@ -616,19 +561,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -643,16 +582,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:58.411833883", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:09:46.665932019" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index": { "content": [ @@ -673,11 +612,11 @@ ] ] ], + "timestamp": "2024-06-05T07:52:58.381931979", "meta": { "nf-test": "0.8.4", "nextflow": "24.04.2" - }, - "timestamp": "2024-06-05T07:52:58.381931979" + } }, "sarscov2 - [ vcf, tbi ], fasta - bcf output - stub": { "content": [ @@ -694,19 +633,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -721,16 +654,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:55.098608408", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:09:38.144449162" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_tbi - stub": { "content": [ @@ -752,19 +685,13 @@ ] ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ [ { "id": "test" @@ -784,16 +711,16 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:08.063276388", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:10:10.602984345" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - [ vcf, [] ], fasta - vcf_gz_index_csi": { "content": [ @@ -814,11 +741,11 @@ ] ] ], + "timestamp": "2024-06-05T13:53:09.808834237", "meta": { "nf-test": "0.8.4", "nextflow": "24.04.2" - }, - "timestamp": "2024-06-05T13:53:09.808834237" + } }, "sarscov2 - [ vcf, tbi ], fasta - bcf output": { "content": [ @@ -835,19 +762,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -862,15 +783,15 @@ [ "BCFTOOLS_NORM", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:42:35.078614195", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:08:51.053195842" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } -} \ No newline at end of file +} diff --git a/modules/nf-core/bcftools/query/bcftools-query.diff b/modules/nf-core/bcftools/query/bcftools-query.diff index 790c3808..e1948518 100644 --- a/modules/nf-core/bcftools/query/bcftools-query.diff +++ b/modules/nf-core/bcftools/query/bcftools-query.diff @@ -1,8 +1,34 @@ Changes in component 'nf-core/bcftools/query' +Changes in 'bcftools/query/environment.yml': +--- modules/nf-core/bcftools/query/environment.yml ++++ modules/nf-core/bcftools/query/environment.yml +@@ -5,6 +5,6 @@ + - bioconda + dependencies: + # renovate: datasource=conda depName=bioconda/bcftools +- - bioconda::bcftools=1.23.1 ++ - bioconda::bcftools=1.24 + # renovate: datasource=conda depName=bioconda/htslib +- - bioconda::htslib=1.23.1 ++ - bioconda::htslib=1.24 + 'modules/nf-core/bcftools/query/meta.yml' is unchanged Changes in 'bcftools/query/main.nf': --- modules/nf-core/bcftools/query/main.nf +++ modules/nf-core/bcftools/query/main.nf +@@ -3,9 +3,9 @@ + label 'process_single' + + conda "${moduleDir}/environment.yml" +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' +- : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? ++ 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : ++ 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" + + input: + tuple val(meta), path(vcf), path(tbi) @@ -14,7 +14,8 @@ path samples @@ -33,8 +59,7 @@ Changes in 'bcftools/query/main.nf': """ } -'modules/nf-core/bcftools/query/environment.yml' is unchanged +'modules/nf-core/bcftools/query/tests/nextflow.config' is unchanged 'modules/nf-core/bcftools/query/tests/main.nf.test' is unchanged 'modules/nf-core/bcftools/query/tests/main.nf.test.snap' is unchanged -'modules/nf-core/bcftools/query/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/bcftools/query/environment.yml b/modules/nf-core/bcftools/query/environment.yml index cb55500b..99e376d6 100644 --- a/modules/nf-core/bcftools/query/environment.yml +++ b/modules/nf-core/bcftools/query/environment.yml @@ -4,6 +4,7 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/nf-core/bcftools/query/main.nf b/modules/nf-core/bcftools/query/main.nf index 4d2da568..e67e7dea 100644 --- a/modules/nf-core/bcftools/query/main.nf +++ b/modules/nf-core/bcftools/query/main.nf @@ -3,9 +3,9 @@ process BCFTOOLS_QUERY { label 'process_single' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcf), path(tbi) diff --git a/modules/nf-core/bcftools/query/meta.yml b/modules/nf-core/bcftools/query/meta.yml index 6bcb5e57..04475a19 100644 --- a/modules/nf-core/bcftools/query/meta.yml +++ b/modules/nf-core/bcftools/query/meta.yml @@ -1,6 +1,6 @@ name: bcftools_query -description: Extracts fields from VCF or BCF files and outputs them in user-defined - format. +description: Extracts fields from VCF or BCF files and outputs them in + user-defined format. keywords: - query - variant calling @@ -13,7 +13,8 @@ tools: homepage: http://samtools.github.io/bcftools/bcftools.html documentation: http://www.htslib.org/doc/bcftools.html doi: 10.1093/bioinformatics/btp352 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:bcftools input: - - meta: @@ -68,7 +69,7 @@ output: type: string description: The tool name - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + type: eval description: The command used to generate the version of the tool topics: versions: @@ -79,7 +80,7 @@ topics: type: string description: The tool name - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + type: eval description: The command used to generate the version of the tool authors: - "@abhi18av" diff --git a/modules/nf-core/bcftools/query/tests/main.nf.test.snap b/modules/nf-core/bcftools/query/tests/main.nf.test.snap index 5168ef3f..2063d2f4 100644 --- a/modules/nf-core/bcftools/query/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/query/tests/main.nf.test.snap @@ -14,16 +14,16 @@ [ "BCFTOOLS_QUERY", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:18:23.300725219", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:16:54.523612853" + } }, "sarscov2 - [vcf, tbi], [], [], [] - stub": { "content": [ @@ -33,16 +33,16 @@ [ "BCFTOOLS_QUERY", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:18:31.072967763", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:17:00.64798632" + } }, "sarscov2 - [vcf, tbi], [], [], []": { "content": [ @@ -59,15 +59,15 @@ [ "BCFTOOLS_QUERY", "bcftools", - "1.22" + "1.23.1" ] ] } ], + "timestamp": "2026-03-20T18:18:15.37651846", "meta": { - "nf-test": "0.9.3", + "nf-test": "0.9.4", "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:16:47.953130141" + } } } \ No newline at end of file diff --git a/modules/nf-core/bcftools/sort/bcftools-sort.diff b/modules/nf-core/bcftools/sort/bcftools-sort.diff index 0b3e62f8..a5285d06 100644 --- a/modules/nf-core/bcftools/sort/bcftools-sort.diff +++ b/modules/nf-core/bcftools/sort/bcftools-sort.diff @@ -1,21 +1,286 @@ Changes in component 'nf-core/bcftools/sort' -'modules/nf-core/bcftools/sort/meta.yml' is unchanged -'modules/nf-core/bcftools/sort/main.nf' is unchanged Changes in 'bcftools/sort/environment.yml': --- modules/nf-core/bcftools/sort/environment.yml +++ modules/nf-core/bcftools/sort/environment.yml -@@ -5,6 +5,5 @@ +@@ -5,6 +5,6 @@ - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/bcftools +- - bioconda::bcftools=1.23.1 ++ - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib -+ - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 -- # renovate: datasource=conda depName=bioconda/bcftools -- - bioconda::bcftools=1.22 +- - bioconda::htslib=1.23.1 ++ - bioconda::htslib=1.24 + +'modules/nf-core/bcftools/sort/meta.yml' is unchanged +Changes in 'bcftools/sort/main.nf': +--- modules/nf-core/bcftools/sort/main.nf ++++ modules/nf-core/bcftools/sort/main.nf +@@ -3,9 +3,9 @@ + label 'process_medium' + + conda "${moduleDir}/environment.yml" +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' +- : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? ++ 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : ++ 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" + + input: + tuple val(meta), path(vcf) +'modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config' is unchanged 'modules/nf-core/bcftools/sort/tests/vcf_gz_index.config' is unchanged 'modules/nf-core/bcftools/sort/tests/main.nf.test' is unchanged 'modules/nf-core/bcftools/sort/tests/vcf_gz_index_csi.config' is unchanged -'modules/nf-core/bcftools/sort/tests/vcf_gz_index_tbi.config' is unchanged -'modules/nf-core/bcftools/sort/tests/main.nf.test.snap' is unchanged +Changes in 'bcftools/sort/tests/main.nf.test.snap': +--- modules/nf-core/bcftools/sort/tests/main.nf.test.snap ++++ modules/nf-core/bcftools/sort/tests/main.nf.test.snap +@@ -22,7 +22,7 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -45,15 +45,15 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:43:34.731344", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:47.191043783", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "vcf": { +@@ -74,7 +74,7 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -92,15 +92,15 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:42:44.941677", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:25.103909097", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - vcf_gz_index": { +@@ -126,15 +126,15 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:42:51.393004", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:28.269816034", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - vcf_gz_index_csi": { +@@ -160,15 +160,15 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:42:58.637723", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:31.44210133", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - vcf_gz_index - stub": { +@@ -194,7 +194,7 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -217,15 +217,15 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:43:20.314367", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:40.991048286", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - vcf_gz_index_csi - stub": { +@@ -251,7 +251,7 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -274,15 +274,15 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:43:27.839561", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:44.027648087", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - vcf - stub": { +@@ -303,7 +303,7 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -321,15 +321,15 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:43:14.11854", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:37.849437343", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - vcf_gz_index_tbi": { +@@ -355,15 +355,15 @@ + [ + "BCFTOOLS_SORT", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:43:05.017607", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:34.646259068", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + } +-}+} + ************************************************************ diff --git a/modules/nf-core/bcftools/sort/environment.yml b/modules/nf-core/bcftools/sort/environment.yml index cb55500b..99e376d6 100644 --- a/modules/nf-core/bcftools/sort/environment.yml +++ b/modules/nf-core/bcftools/sort/environment.yml @@ -4,6 +4,7 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/bcftools + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::bcftools=1.22 - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 diff --git a/modules/nf-core/bcftools/sort/main.nf b/modules/nf-core/bcftools/sort/main.nf index e0dfad2d..00270f54 100644 --- a/modules/nf-core/bcftools/sort/main.nf +++ b/modules/nf-core/bcftools/sort/main.nf @@ -3,17 +3,16 @@ process BCFTOOLS_SORT { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/47/474a5ea8dc03366b04df884d89aeacc4f8e6d1ad92266888e7a8e7958d07cde8/data' - : 'community.wave.seqera.io/library/bcftools_htslib:0a3fa2654b52006f'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcf) output: tuple val(meta), path("*.{vcf,vcf.gz,bcf,bcf.gz}"), emit: vcf - tuple val(meta), path("*.tbi"), emit: tbi, optional: true - tuple val(meta), path("*.csi"), emit: csi, optional: true + tuple val(meta), path("*.{tbi,csi}"), emit: index, optional: true tuple val("${task.process}"), val('bcftools'), eval("bcftools --version | sed '1!d; s/^.*bcftools //'"), topic: versions, emit: versions_bcftools when: diff --git a/modules/nf-core/bcftools/sort/meta.yml b/modules/nf-core/bcftools/sort/meta.yml index 1c3f2a54..ee0bdb55 100644 --- a/modules/nf-core/bcftools/sort/meta.yml +++ b/modules/nf-core/bcftools/sort/meta.yml @@ -11,7 +11,8 @@ tools: documentation: http://www.htslib.org/doc/bcftools.html tool_dev_url: https://github.com/samtools/bcftools doi: "10.1093/bioinformatics/btp352" - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:bcftools input: - - meta: @@ -36,28 +37,16 @@ output: description: Sorted VCF file pattern: "*.{vcf.gz}" ontologies: [] - tbi: + index: - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.tbi": + - "*.{tbi,csi}": type: file - description: Alternative VCF file index - pattern: "*.tbi" - ontologies: [] - csi: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.csi": - type: file - description: Default VCF file index - pattern: "*.csi" - ontologies: [] + description: VCF file index + pattern: "*.{tbi,csi}" versions_bcftools: - - ${task.process}: type: string @@ -65,8 +54,8 @@ output: - bcftools: type: string description: The tool name - - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + - bcftools --version | sed '1!d; s/^.*bcftools //': + type: eval description: The command used to generate the version of the tool topics: versions: @@ -76,8 +65,8 @@ topics: - bcftools: type: string description: The tool name - - "bcftools --version | sed '1!d; s/^.*bcftools //'": - type: string + - bcftools --version | sed '1!d; s/^.*bcftools //': + type: eval description: The command used to generate the version of the tool authors: - "@Gwennid" diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test b/modules/nf-core/bcftools/sort/tests/main.nf.test index bda7bace..66639627 100644 --- a/modules/nf-core/bcftools/sort/tests/main.nf.test +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test @@ -49,11 +49,10 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -78,11 +77,10 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -107,11 +105,10 @@ nextflow_process { { assert process.success }, { assert snapshot( process.out.vcf, - process.out.csi.collect { it.collect { it instanceof Map ? it : file(it).name } }, - process.out.tbi.collect { it.collect { it instanceof Map ? it : file(it).name } }, + process.out.index.collect { it.collect { it instanceof Map ? it : file(it).name } }, process.out.findAll { key, val -> key.startsWith("versions") } ).match() }, - { assert process.out.tbi[0][1].endsWith(".tbi") } + { assert process.out.index[0][1].endsWith(".tbi") } ) } } @@ -157,7 +154,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -182,7 +179,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.csi[0][1].endsWith(".csi") } + { assert process.out.index[0][1].endsWith(".csi") } ) } } @@ -207,7 +204,7 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() }, - { assert process.out.tbi[0][1].endsWith(".tbi") } + { assert process.out.index[0][1].endsWith(".tbi") } ) } } diff --git a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap index 9b9e4dc7..6b22f348 100644 --- a/modules/nf-core/bcftools/sort/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/sort/tests/main.nf.test.snap @@ -19,19 +19,13 @@ ] ], "2": [ - - ], - "3": [ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ [ { "id": "test" @@ -51,16 +45,16 @@ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:47.191043783", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:19:24.286732272" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "vcf": { "content": [ @@ -77,19 +71,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -104,16 +92,16 @@ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:25.103909097", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:18:38.783455397" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - vcf_gz_index": { "content": [ @@ -132,25 +120,22 @@ }, "test_vcf.vcf.gz.csi" ] - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:28.269816034", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:18:45.081447395" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - vcf_gz_index_csi": { "content": [ @@ -169,25 +154,22 @@ }, "test_vcf.vcf.gz.csi" ] - ], - [ - ], { "versions_bcftools": [ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:31.44210133", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:18:51.194304667" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - vcf_gz_index - stub": { "content": [ @@ -201,9 +183,6 @@ ] ], "1": [ - - ], - "2": [ [ { "id": "test" @@ -211,23 +190,20 @@ "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ + "2": [ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ + "index": [ [ { "id": "test" }, "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "tbi": [ - ], "vcf": [ [ @@ -241,16 +217,16 @@ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:40.991048286", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:19:11.413154111" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - vcf_gz_index_csi - stub": { "content": [ @@ -264,9 +240,6 @@ ] ], "1": [ - - ], - "2": [ [ { "id": "test" @@ -274,23 +247,20 @@ "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "3": [ + "2": [ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ + "index": [ [ { "id": "test" }, "test_vcf.vcf.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] - ], - "tbi": [ - ], "vcf": [ [ @@ -304,16 +274,16 @@ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:44.027648087", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:19:17.770087535" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - vcf - stub": { "content": [ @@ -330,19 +300,13 @@ ], "2": [ - - ], - "3": [ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ], - "csi": [ - - ], - "tbi": [ + "index": [ ], "vcf": [ @@ -357,16 +321,16 @@ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:37.849437343", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:19:04.409593559" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "sarscov2 - vcf_gz_index_tbi": { "content": [ @@ -377,9 +341,6 @@ }, "test_vcf.vcf.gz:md5,8e722884ffb75155212a3fc053918766" ] - ], - [ - ], [ [ @@ -394,15 +355,15 @@ [ "BCFTOOLS_SORT", "bcftools", - "1.22" + "1.24" ] ] } ], + "timestamp": "2026-10-01T14:43:34.646259068", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-20T12:18:57.536633502" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } -} \ No newline at end of file +} diff --git a/modules/nf-core/bcftools/view/bcftools-view.diff b/modules/nf-core/bcftools/view/bcftools-view.diff new file mode 100644 index 00000000..8d7d8e56 --- /dev/null +++ b/modules/nf-core/bcftools/view/bcftools-view.diff @@ -0,0 +1,294 @@ +Changes in component 'nf-core/bcftools/view' +Changes in 'bcftools/view/environment.yml': +--- modules/nf-core/bcftools/view/environment.yml ++++ modules/nf-core/bcftools/view/environment.yml +@@ -5,6 +5,6 @@ + - bioconda + dependencies: + # renovate: datasource=conda depName=bioconda/bcftools +- - bioconda::bcftools=1.23.1 ++ - bioconda::bcftools=1.24 + # renovate: datasource=conda depName=bioconda/htslib +- - bioconda::htslib=1.23.1 ++ - bioconda::htslib=1.24 + +'modules/nf-core/bcftools/view/meta.yml' is unchanged +Changes in 'bcftools/view/main.nf': +--- modules/nf-core/bcftools/view/main.nf ++++ modules/nf-core/bcftools/view/main.nf +@@ -3,9 +3,9 @@ + label 'process_medium' + + conda "${moduleDir}/environment.yml" +- container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' +- : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" ++ container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? ++ 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : ++ 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" + + input: + tuple val(meta), path(vcf), path(index) + +'modules/nf-core/bcftools/view/tests/nextflow.config' is unchanged +'modules/nf-core/bcftools/view/tests/vcf_gz_index_tbi.config' is unchanged +'modules/nf-core/bcftools/view/tests/vcf_gz_index.config' is unchanged +'modules/nf-core/bcftools/view/tests/main.nf.test' is unchanged +'modules/nf-core/bcftools/view/tests/vcf_gz_index_csi.config' is unchanged +Changes in 'bcftools/view/tests/main.nf.test.snap': +--- modules/nf-core/bcftools/view/tests/main.nf.test.snap ++++ modules/nf-core/bcftools/view/tests/main.nf.test.snap +@@ -24,7 +24,7 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -49,15 +49,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:45:16.225112", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:44:14.996346377", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi": { +@@ -85,15 +85,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:44:45.565621", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:44:02.253704645", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub": { +@@ -121,7 +121,7 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -146,15 +146,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:45:09.894603", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:44:11.83333367", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub": { +@@ -182,7 +182,7 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" ++ "1.24" + ] + ], + "index": [ +@@ -207,15 +207,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:45:22.083172", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:44:18.137743749", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi], vcf, tsv, []": { +@@ -234,15 +234,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-03-20T18:23:19.908213867", +- "meta": { +- "nf-test": "0.9.4", +- "nextflow": "25.10.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:44:05.56315404", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi], [], [], [] - stub": { +@@ -253,15 +253,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-03-20T18:23:28.40103319", +- "meta": { +- "nf-test": "0.9.4", +- "nextflow": "25.10.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:44:08.755172653", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index": { +@@ -289,15 +289,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:44:32.872424", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:55.775864105", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi], [], [], []": { +@@ -316,15 +316,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-03-20T18:22:45.088231326", +- "meta": { +- "nf-test": "0.9.4", +- "nextflow": "25.10.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:52.582744112", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + }, + "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi": { +@@ -352,15 +352,15 @@ + [ + "BCFTOOLS_VIEW", + "bcftools", +- "1.23.1" +- ] +- ] +- } +- ], +- "timestamp": "2026-05-28T14:44:39.144211", +- "meta": { +- "nf-test": "0.9.5", +- "nextflow": "26.04.2" ++ "1.24" ++ ] ++ ] ++ } ++ ], ++ "timestamp": "2026-10-01T14:43:59.012753902", ++ "meta": { ++ "nf-test": "0.9.4", ++ "nextflow": "26.04.3" + } + } +-}+} + +************************************************************ diff --git a/modules/nf-core/bcftools/view/environment.yml b/modules/nf-core/bcftools/view/environment.yml index 13b63a62..99e376d6 100644 --- a/modules/nf-core/bcftools/view/environment.yml +++ b/modules/nf-core/bcftools/view/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/bcftools - - bioconda::bcftools=1.23.1 + - bioconda::bcftools=1.24 # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.23.1 + - bioconda::htslib=1.24 diff --git a/modules/nf-core/bcftools/view/main.nf b/modules/nf-core/bcftools/view/main.nf index 46e8ef5d..fa09431b 100644 --- a/modules/nf-core/bcftools/view/main.nf +++ b/modules/nf-core/bcftools/view/main.nf @@ -3,9 +3,9 @@ process BCFTOOLS_VIEW { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/0b/0b4d52ca9a56d07be3f78a12af654e5116f5112908dba277e6796fd9dfb83fe5/data' - : 'community.wave.seqera.io/library/bcftools_htslib:1.23.1--9f08ec665533d64a'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/bcftools:1.24--h118bc1c_2' : + 'quay.io/biocontainers/bcftools:1.24--h118bc1c_2' }" input: tuple val(meta), path(vcf), path(index) diff --git a/modules/nf-core/bcftools/view/tests/main.nf.test.snap b/modules/nf-core/bcftools/view/tests/main.nf.test.snap index 4e4bf997..e629ab58 100644 --- a/modules/nf-core/bcftools/view/tests/main.nf.test.snap +++ b/modules/nf-core/bcftools/view/tests/main.nf.test.snap @@ -24,7 +24,7 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ], "index": [ @@ -49,15 +49,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-05-28T14:45:16.225112", + "timestamp": "2026-10-01T14:44:14.996346377", "meta": { - "nf-test": "0.9.5", - "nextflow": "26.04.2" + "nf-test": "0.9.4", + "nextflow": "26.04.3" } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi": { @@ -85,15 +85,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-05-28T14:44:45.565621", + "timestamp": "2026-10-01T14:44:02.253704645", "meta": { - "nf-test": "0.9.5", - "nextflow": "26.04.2" + "nf-test": "0.9.4", + "nextflow": "26.04.3" } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index - stub": { @@ -121,7 +121,7 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ], "index": [ @@ -146,15 +146,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-05-28T14:45:09.894603", + "timestamp": "2026-10-01T14:44:11.83333367", "meta": { - "nf-test": "0.9.5", - "nextflow": "26.04.2" + "nf-test": "0.9.4", + "nextflow": "26.04.3" } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_tbi - stub": { @@ -182,7 +182,7 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ], "index": [ @@ -207,15 +207,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-05-28T14:45:22.083172", + "timestamp": "2026-10-01T14:44:18.137743749", "meta": { - "nf-test": "0.9.5", - "nextflow": "26.04.2" + "nf-test": "0.9.4", + "nextflow": "26.04.3" } }, "sarscov2 - [vcf, tbi], vcf, tsv, []": { @@ -234,15 +234,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-03-20T18:23:19.908213867", + "timestamp": "2026-10-01T14:44:05.56315404", "meta": { "nf-test": "0.9.4", - "nextflow": "25.10.2" + "nextflow": "26.04.3" } }, "sarscov2 - [vcf, tbi], [], [], [] - stub": { @@ -253,15 +253,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-03-20T18:23:28.40103319", + "timestamp": "2026-10-01T14:44:08.755172653", "meta": { "nf-test": "0.9.4", - "nextflow": "25.10.2" + "nextflow": "26.04.3" } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index": { @@ -289,15 +289,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-05-28T14:44:32.872424", + "timestamp": "2026-10-01T14:43:55.775864105", "meta": { - "nf-test": "0.9.5", - "nextflow": "26.04.2" + "nf-test": "0.9.4", + "nextflow": "26.04.3" } }, "sarscov2 - [vcf, tbi], [], [], []": { @@ -316,15 +316,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-03-20T18:22:45.088231326", + "timestamp": "2026-10-01T14:43:52.582744112", "meta": { "nf-test": "0.9.4", - "nextflow": "25.10.2" + "nextflow": "26.04.3" } }, "sarscov2 - [vcf, tbi], [], [], [] - vcf_gz_index_csi": { @@ -352,15 +352,15 @@ [ "BCFTOOLS_VIEW", "bcftools", - "1.23.1" + "1.24" ] ] } ], - "timestamp": "2026-05-28T14:44:39.144211", + "timestamp": "2026-10-01T14:43:59.012753902", "meta": { - "nf-test": "0.9.5", - "nextflow": "26.04.2" + "nf-test": "0.9.4", + "nextflow": "26.04.3" } } -} \ No newline at end of file +} diff --git a/modules/nf-core/deepvariant/callvariants/deepvariant-callvariants.diff b/modules/nf-core/deepvariant/callvariants/deepvariant-callvariants.diff index 4caed4cc..079b66d8 100644 --- a/modules/nf-core/deepvariant/callvariants/deepvariant-callvariants.diff +++ b/modules/nf-core/deepvariant/callvariants/deepvariant-callvariants.diff @@ -8,18 +8,17 @@ Changes in 'deepvariant/callvariants/main.nf': process DEEPVARIANT_CALLVARIANTS { tag "$meta.id" - label 'process_high' -- + label "${params.use_gpu ? 'process_gpu_very_high' : 'process_very_high'}" + label "${params.use_gpu ? '' : 'process_long'}" -+ + //Conda is not supported at the moment -- container "docker.io/google/deepvariant:1.9.0" -+ container params.use_gpu ? "docker.io/google/deepvariant:1.9.0-gpu" : "docker.io/google/deepvariant:1.9.0" +- container "docker.io/google/deepvariant:1.10.0" ++ container params.use_gpu ? "docker.io/google/deepvariant:1.10.0-gpu" : "docker.io/google/deepvariant:1.10.0" input: tuple val(meta), path(make_examples_tfrecords) +'modules/nf-core/deepvariant/callvariants/tests/nextflow.config' is unchanged 'modules/nf-core/deepvariant/callvariants/tests/main.nf.test' is unchanged 'modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap' is unchanged -'modules/nf-core/deepvariant/callvariants/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/deepvariant/callvariants/main.nf b/modules/nf-core/deepvariant/callvariants/main.nf index fafdd634..31bc6833 100644 --- a/modules/nf-core/deepvariant/callvariants/main.nf +++ b/modules/nf-core/deepvariant/callvariants/main.nf @@ -3,9 +3,9 @@ process DEEPVARIANT_CALLVARIANTS { tag "$meta.id" label "${params.use_gpu ? 'process_gpu_very_high' : 'process_very_high'}" label "${params.use_gpu ? '' : 'process_long'}" - + //Conda is not supported at the moment - container params.use_gpu ? "docker.io/google/deepvariant:1.9.0-gpu" : "docker.io/google/deepvariant:1.9.0" + container params.use_gpu ? "docker.io/google/deepvariant:1.10.0-gpu" : "docker.io/google/deepvariant:1.10.0" input: tuple val(meta), path(make_examples_tfrecords) @@ -35,6 +35,9 @@ process DEEPVARIANT_CALLVARIANTS { def examples_tfrecords_logical_name = "${examples_tfrecord_name}@${shardCount}.gz" """ + export MPLCONFIGDIR=\$PWD/.matplotlib + mkdir -p \$MPLCONFIGDIR + /opt/deepvariant/bin/call_variants \\ ${args} \\ --outfile "${prefix}.call.tfrecord.gz" \\ diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test index d617650b..daef385a 100644 --- a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test +++ b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test @@ -37,6 +37,7 @@ nextflow_process { input[4] = [ [],[] ] + input[5] = false """ } } diff --git a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap index ce71dac2..f66ebb1f 100644 --- a/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap +++ b/modules/nf-core/deepvariant/callvariants/tests/main.nf.test.snap @@ -25,7 +25,7 @@ [ "DEEPVARIANT_CALLVARIANTS", "deepvariant", - "1.9.0" + "1.10.0" ] ], "call_variants_tfrecords": [ @@ -41,7 +41,7 @@ [ "DEEPVARIANT_CALLVARIANTS", "deepvariant", - "1.9.0" + "1.10.0" ] ] } @@ -50,6 +50,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-02T17:02:54.403068431" + "timestamp": "2026-05-22T12:24:48.518831" } } \ No newline at end of file diff --git a/modules/nf-core/deepvariant/callvariants/tests/nextflow.config b/modules/nf-core/deepvariant/callvariants/tests/nextflow.config index 68aec144..3e48c006 100644 --- a/modules/nf-core/deepvariant/callvariants/tests/nextflow.config +++ b/modules/nf-core/deepvariant/callvariants/tests/nextflow.config @@ -6,6 +6,6 @@ process { } process { withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--checkpoint "/opt/models/wgs" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/wgs"' + ext.args = '--checkpoint "/opt/models/wgs" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/wgs/model.keras"' } } diff --git a/modules/nf-core/deepvariant/makeexamples/deepvariant-makeexamples.diff b/modules/nf-core/deepvariant/makeexamples/deepvariant-makeexamples.diff index a747261a..4aa98582 100644 --- a/modules/nf-core/deepvariant/makeexamples/deepvariant-makeexamples.diff +++ b/modules/nf-core/deepvariant/makeexamples/deepvariant-makeexamples.diff @@ -3,52 +3,48 @@ Changes in component 'nf-core/deepvariant/makeexamples' Changes in 'deepvariant/makeexamples/main.nf': --- modules/nf-core/deepvariant/makeexamples/main.nf +++ modules/nf-core/deepvariant/makeexamples/main.nf -@@ -1,11 +1,11 @@ +@@ -1,9 +1,9 @@ process DEEPVARIANT_MAKEEXAMPLES { tag "$meta.id" - label 'process_high' + label 'process_very_high' -+ label 'process_short' -+ -+ container params.use_gpu ? "docker.io/google/deepvariant:1.9.0-gpu" : "docker.io/google/deepvariant:1.9.0" -- //Conda is not supported at the moment -- container "docker.io/google/deepvariant:1.9.0" -- -- input: -+ input: + //Conda is not supported at the moment +- container "docker.io/google/deepvariant:1.10.0" ++ container params.use_gpu ? "docker.io/google/deepvariant:1.10.0-gpu" : "docker.io/google/deepvariant:1.10.0" + + input: tuple val(meta), path(input), path(index), path(intervals) - tuple val(meta2), path(fasta) - tuple val(meta3), path(fai) -@@ -14,7 +14,7 @@ +@@ -15,7 +15,7 @@ output: - tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}"), emit: examples -- tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz"), emit: gvcf -+ tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz"), optional: true, emit: gvcf - tuple val(meta), path("${prefix}_call_variant_outputs.examples.tfrecord-*-of-*.gz", arity: "0..*"), emit: small_model_calls + tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}") , emit: examples +- tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz") , emit: gvcf ++ tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz") , emit: gvcf, optional: true + tuple val(meta), path("${small_model_filename}", arity: "0..*"), emit: small_model_calls + tuple val(meta), path("${prefix}-read-phasing_debug-*of-*.tsv", arity: "0..*"), emit: read_phase_inputs tuple val("${task.process}"), val('deepvariant'), eval("/opt/deepvariant/bin/run_deepvariant --version | sed 's/^.*version //'"), topic: versions, emit: versions_deepvariant - -@@ -30,14 +30,16 @@ - prefix = task.ext.prefix ?: "${meta.id}" +@@ -36,6 +36,7 @@ + : "${split_pref[0]}_call_variant_outputs.examples.tfrecord-*-of-*.gz" + ) def regions = intervals ? "--regions ${intervals}" : "" - def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" + def gvcf_arg = params.generate_gvcf ? "--gvcf \"./${prefix}.gvcf.tfrecord@${task.cpus}.gz\"" : "" + def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" - """ - seq 0 ${task.cpus - 1} | parallel -q --halt 2 --line-buffer /opt/deepvariant/bin/make_examples \\ - --mode calling \\ + def phasing_args = ( with_phasing +@@ -52,7 +53,8 @@ --ref "${fasta}" \\ --reads "${input}" \\ -+ --sample_name ${prefix} \\ --examples "./${prefix}.examples.tfrecord@${task.cpus}.gz" \\ - --gvcf "./${prefix}.gvcf.tfrecord@${task.cpus}.gz" \\ ++ --sample_name ${prefix} \\ + ${gvcf_arg} \\ ${regions} \\ ${par_regions} \\ ${args} \\ +'modules/nf-core/deepvariant/makeexamples/tests/pacbio_profile.config' is unchanged +'modules/nf-core/deepvariant/makeexamples/tests/nextflow.config' is unchanged 'modules/nf-core/deepvariant/makeexamples/tests/main.nf.test' is unchanged 'modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap' is unchanged -'modules/nf-core/deepvariant/makeexamples/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/deepvariant/makeexamples/main.nf b/modules/nf-core/deepvariant/makeexamples/main.nf index 55a932d4..72ccebd7 100644 --- a/modules/nf-core/deepvariant/makeexamples/main.nf +++ b/modules/nf-core/deepvariant/makeexamples/main.nf @@ -1,20 +1,23 @@ process DEEPVARIANT_MAKEEXAMPLES { tag "$meta.id" label 'process_very_high' - - container params.use_gpu ? "docker.io/google/deepvariant:1.9.0-gpu" : "docker.io/google/deepvariant:1.9.0" - input: + //Conda is not supported at the moment + container params.use_gpu ? "docker.io/google/deepvariant:1.10.0-gpu" : "docker.io/google/deepvariant:1.10.0" + + input: tuple val(meta), path(input), path(index), path(intervals) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) tuple val(meta4), path(gzi) tuple val(meta5), path(par_bed) + val(with_phasing) output: - tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}"), emit: examples - tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz"), optional: true, emit: gvcf - tuple val(meta), path("${prefix}_call_variant_outputs.examples.tfrecord-*-of-*.gz", arity: "0..*"), emit: small_model_calls + tuple val(meta), path("${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}") , emit: examples + tuple val(meta), path("${prefix}.gvcf.tfrecord-*-of-*.gz") , emit: gvcf, optional: true + tuple val(meta), path("${small_model_filename}", arity: "0..*"), emit: small_model_calls + tuple val(meta), path("${prefix}-read-phasing_debug-*of-*.tsv", arity: "0..*"), emit: read_phase_inputs tuple val("${task.process}"), val('deepvariant'), eval("/opt/deepvariant/bin/run_deepvariant --version | sed 's/^.*version //'"), topic: versions, emit: versions_deepvariant when: @@ -27,26 +30,45 @@ process DEEPVARIANT_MAKEEXAMPLES { } def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" + split_pref = prefix.split('\\.', 2) + small_model_filename = ( split_pref.size() > 1 + ? "${split_pref[0]}_call_variant_outputs.${split_pref[1]}.examples.tfrecord-*-of-*.gz" + : "${split_pref[0]}_call_variant_outputs.examples.tfrecord-*-of-*.gz" + ) def regions = intervals ? "--regions ${intervals}" : "" - def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" def gvcf_arg = params.generate_gvcf ? "--gvcf \"./${prefix}.gvcf.tfrecord@${task.cpus}.gz\"" : "" + def par_regions = par_bed ? "--par_regions_bed=${par_bed}" : "" + + def phasing_args = ( with_phasing + ? "--phase_reads --track_ref_reads --output_phase_info --output_local_read_phasing ./${prefix}-read-phasing_debug@${task.cpus}.tsv" + : '' + ) """ + export MPLCONFIGDIR=\$PWD/.matplotlib + mkdir -p \$MPLCONFIGDIR + seq 0 ${task.cpus - 1} | parallel -q --halt 2 --line-buffer /opt/deepvariant/bin/make_examples \\ --mode calling \\ --ref "${fasta}" \\ --reads "${input}" \\ - --sample_name ${prefix} \\ --examples "./${prefix}.examples.tfrecord@${task.cpus}.gz" \\ + --sample_name ${prefix} \\ ${gvcf_arg} \\ ${regions} \\ ${par_regions} \\ ${args} \\ + ${phasing_args} \\ --task {} """ stub: prefix = task.ext.prefix ?: "${meta.id}" + split_pref = prefix.split('\\.', 2) + small_model_filename = ( split_pref.size() > 1 + ? "${split_pref[0]}_call_variant_outputs.${split_pref[1]}.examples.tfrecord-*-of-*.gz" + : "${split_pref[0]}_call_variant_outputs.examples.tfrecord-*-of-*.gz" + ) """ printf -v SHARD_COUNT "%04d" ${task.cpus} for i in \$( seq -f "%04g" 0 ${task.cpus-1} ) @@ -54,6 +76,7 @@ process DEEPVARIANT_MAKEEXAMPLES { echo "" | gzip > ${prefix}.examples.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz touch ${prefix}.examples.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz.example_info.json echo "" | gzip > ${prefix}.gvcf.tfrecord-\$i-of-\$SHARD_COUNT.tfrecord.gz + touch ${prefix}-read-phasing_debug-\$i-of-\$SHARD_COUNT.tsv done """ } diff --git a/modules/nf-core/deepvariant/makeexamples/meta.yml b/modules/nf-core/deepvariant/makeexamples/meta.yml index 12056fbd..7386ca95 100644 --- a/modules/nf-core/deepvariant/makeexamples/meta.yml +++ b/modules/nf-core/deepvariant/makeexamples/meta.yml @@ -13,7 +13,8 @@ tools: documentation: https://github.com/google/deepvariant tool_dev_url: https://github.com/google/deepvariant doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] + licence: + - "BSD-3-clause" identifier: biotools:deepvariant input: - - meta: @@ -76,34 +77,46 @@ input: description: BED file containing PAR regions pattern: "*.bed" ontologies: [] + - with_phasing: + type: boolean + description: Whether to generate and capture the phased read inputs for use downstream output: examples: - - meta: - type: list + type: map description: | Tuple containing sample metadata and examples that can be used for calling - ${prefix}.examples.tfrecord-*-of-*.gz{,.example_info.json}: - type: list + type: file description: | Tuple containing sample metadata and examples that can be used for calling gvcf: - - meta: - type: list + type: map description: | Tuple containing sample metadata and examples that can be used for calling - ${prefix}.gvcf.tfrecord-*-of-*.gz: - type: list + type: file description: | Tuple containing sample metadata and the GVCF data in tfrecord format small_model_calls: - - meta: - type: list + type: map description: | - Tuple containing sample metadata and examples that can be used for calling - - ${prefix}_call_variant_outputs.examples.tfrecord-*-of-*.gz: - type: list + Tuple containing sample metadata and small model calls that can be used for calling + - ${small_model_filename}: + type: file + description: | + Tuple containing sample metadata and small model calls that can be used for calling + read_phase_inputs: + - - meta: + type: map + description: | + Tuple containing sample metadata and phased read inputs that can be used for calling + - ${prefix}-read-phasing_debug-*of-*.tsv: + type: file description: | - Optional variant calls from the small model, if enabled, in tfrecord format + Tuple containing sample metadata and phased read inputs that can be used for calling versions_deepvariant: - - ${task.process}: type: string @@ -114,7 +127,6 @@ output: - /opt/deepvariant/bin/run_deepvariant --version | sed 's/^.*version //': type: eval description: The expression to obtain the version of the tool - topics: versions: - - ${task.process}: diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test index cc06f780..2311123d 100644 --- a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test +++ b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test @@ -35,6 +35,7 @@ nextflow_process { input[4] = [ [],[] ] + input[5] = false """ } } @@ -53,7 +54,9 @@ nextflow_process { { assert snapshot(process.out.versions_deepvariant).match("test1-versions") }, { assert snapshot( process.out.gvcf[0][1].collect { file(it).name } - ).match("test1-gvcf-filenames") } + ).match("test1-gvcf-filenames") }, + { assert process.out.read_phase_inputs[0][0] == [id:'test', single_end:false] }, + { assert process.out.read_phase_inputs[0][1] == [] } ) } } @@ -83,6 +86,7 @@ nextflow_process { input[4] = [ [],[] ] + input[5] = false """ } } @@ -131,6 +135,7 @@ nextflow_process { input[4] = [ [],[] ] + input[5] = false """ } } @@ -153,6 +158,61 @@ nextflow_process { } } + test("homo_sapiens - [bam, bai] - fasta - fai - phasing") { + config './pacbio_profile.config' + when { + + process { + """ + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true), + [] + ] + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + input[5] = true + """ + } + } + + then { + assertAll( + { assert process.success }, + + { assert process.out.examples[0][0] == [id:'test', single_end:false] }, + { assert process.out.gvcf[0][0] == [id:'test', single_end:false] }, + { assert process.out.examples[0][1].size() == 4 }, + { assert snapshot( + process.out.examples[0][1].collect { file(it).name } + ).match("test4-examples-filenames") }, + { assert process.out.gvcf[0][1].size() == 2 }, + { assert snapshot(process.out.versions_deepvariant).match("test4-versions") }, + { assert snapshot( + process.out.gvcf[0][1].collect { file(it).name } + ).match("test4-gvcf-filenames") }, + { assert process.out.read_phase_inputs[0][0] == [id:'test', single_end:false] }, + { assert process.out.read_phase_inputs[0][1].size() == 2 }, + { assert snapshot( + process.out.read_phase_inputs[0][1].collect { file(it).name } + ).match("test4-read-phase-inputs-filenames") } + ) + } + } + test("stub") { options "-stub" @@ -181,6 +241,7 @@ nextflow_process { input[4] = [ [],[] ] + input[5] = false """ } } @@ -192,12 +253,12 @@ nextflow_process { { assert process.out.examples[0][1].size() == 4 }, { assert snapshot( process.out.examples[0][1].collect { file(it).name } - ).match("test4-examples-filenames") }, + ).match("test5-examples-filenames") }, { assert process.out.gvcf[0][1].size() == 2 }, - { assert snapshot(process.out.versions_deepvariant).match("test4-versions") }, + { assert snapshot(process.out.versions_deepvariant).match("test5-versions") }, { assert snapshot( process.out.gvcf[0][1].collect { file(it).name } - ).match("test4-gvcf-filenames") } + ).match("test5-gvcf-filenames") } ) } } diff --git a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap index 729f0dc5..cf6de224 100644 --- a/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap +++ b/modules/nf-core/deepvariant/makeexamples/tests/main.nf.test.snap @@ -12,22 +12,6 @@ }, "timestamp": "2026-02-01T02:12:57.93412258" }, - "test3-versions": { - "content": [ - [ - [ - "DEEPVARIANT_MAKEEXAMPLES", - "deepvariant", - "1.9.0" - ] - ] - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-02-02T17:09:55.034298895" - }, "test2-examples-filenames": { "content": [ [ @@ -64,7 +48,7 @@ [ "DEEPVARIANT_MAKEEXAMPLES", "deepvariant", - "1.9.0" + "1.10.0" ] ] ], @@ -72,7 +56,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-02T17:07:52.050411549" + "timestamp": "2026-06-19T10:11:11.23104" }, "test4-versions": { "content": [ @@ -80,7 +64,7 @@ [ "DEEPVARIANT_MAKEEXAMPLES", "deepvariant", - "1.9.0" + "1.10.0" ] ] ], @@ -88,22 +72,22 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-02T17:12:07.012233232" + "timestamp": "2026-05-22T12:25:37.133164" }, "test4-examples-filenames": { "content": [ [ - "test.examples.tfrecord-0000-of-0002.tfrecord.gz", - "test.examples.tfrecord-0000-of-0002.tfrecord.gz.example_info.json", - "test.examples.tfrecord-0001-of-0002.tfrecord.gz", - "test.examples.tfrecord-0001-of-0002.tfrecord.gz.example_info.json" + "test.examples.tfrecord-00000-of-00002.gz", + "test.examples.tfrecord-00000-of-00002.gz.example_info.json", + "test.examples.tfrecord-00001-of-00002.gz", + "test.examples.tfrecord-00001-of-00002.gz.example_info.json" ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-01T02:15:58.286077155" + "timestamp": "2026-06-19T14:24:51.088322" }, "test1-versions": { "content": [ @@ -111,7 +95,7 @@ [ "DEEPVARIANT_MAKEEXAMPLES", "deepvariant", - "1.9.0" + "1.10.0" ] ] ], @@ -119,20 +103,23 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-02T17:05:28.75651648" + "timestamp": "2026-06-19T10:10:53.032135" }, - "test3-gvcf-filenames": { + "test5-versions": { "content": [ [ - "test.gvcf.tfrecord-00000-of-00002.gz", - "test.gvcf.tfrecord-00001-of-00002.gz" + [ + "DEEPVARIANT_MAKEEXAMPLES", + "deepvariant", + "1.10.0" + ] ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-01T02:15:03.780115231" + "timestamp": "2026-06-19T14:27:25.245084" }, "test3-examples-filenames": { "content": [ @@ -162,7 +149,77 @@ }, "timestamp": "2026-02-01T02:14:02.550236324" }, + "test5-examples-filenames": { + "content": [ + [ + "test.examples.tfrecord-0000-of-0002.tfrecord.gz", + "test.examples.tfrecord-0000-of-0002.tfrecord.gz.example_info.json", + "test.examples.tfrecord-0001-of-0002.tfrecord.gz", + "test.examples.tfrecord-0001-of-0002.tfrecord.gz.example_info.json" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-06-19T14:27:25.224159" + }, "test4-gvcf-filenames": { + "content": [ + [ + "test.gvcf.tfrecord-00000-of-00002.gz", + "test.gvcf.tfrecord-00001-of-00002.gz" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-06-19T14:24:51.117947" + }, + "test4-read-phase-inputs-filenames": { + "content": [ + [ + "test-read-phasing_debug-00000-of-00002.tsv", + "test-read-phasing_debug-00001-of-00002.tsv" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-06-19T14:21:47.721571" + }, + "test3-versions": { + "content": [ + [ + [ + "DEEPVARIANT_MAKEEXAMPLES", + "deepvariant", + "1.10.0" + ] + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-06-19T10:11:30.172571" + }, + "test3-gvcf-filenames": { + "content": [ + [ + "test.gvcf.tfrecord-00000-of-00002.gz", + "test.gvcf.tfrecord-00001-of-00002.gz" + ] + ], + "meta": { + "nf-test": "0.9.3", + "nextflow": "25.10.2" + }, + "timestamp": "2026-02-01T02:15:03.780115231" + }, + "test5-gvcf-filenames": { "content": [ [ "test.gvcf.tfrecord-0000-of-0002.tfrecord.gz", @@ -173,6 +230,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-01T02:15:58.412547051" + "timestamp": "2026-06-19T14:27:25.26434" } } \ No newline at end of file diff --git a/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config b/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config index 6811fe48..933d080e 100644 --- a/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config +++ b/modules/nf-core/deepvariant/makeexamples/tests/nextflow.config @@ -1,6 +1,6 @@ process { withName: "DEEPVARIANT_MAKEEXAMPLES" { cpus = 2 // The number of output files is determined by cpus - keep it the same for tests - ext.args = '--checkpoint "/opt/models/wgs" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/wgs"' + ext.args = '--checkpoint "/opt/models/wgs" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/wgs/model.keras"' } } diff --git a/modules/nf-core/deepvariant/makeexamples/tests/pacbio_profile.config b/modules/nf-core/deepvariant/makeexamples/tests/pacbio_profile.config new file mode 100644 index 00000000..c5af0a1d --- /dev/null +++ b/modules/nf-core/deepvariant/makeexamples/tests/pacbio_profile.config @@ -0,0 +1,14 @@ +process { + withName: "DEEPVARIANT_MAKEEXAMPLES" { + ext.args = '--checkpoint "/opt/models/pacbio" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/pacbio/model.keras"' + } + withName: "DEEPVARIANT_CALLVARIANTS" { + ext.args = '--checkpoint "/opt/models/pacbio"' + } + + // This configures RUNDEEPVARIANT, which is used as a reference for the correct test output + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = '--model_type=PACBIO ' + ext.prefix = { "${meta.id}_out" } + } +} diff --git a/modules/nf-core/deepvariant/postprocessvariants/deepvariant-postprocessvariants.diff b/modules/nf-core/deepvariant/postprocessvariants/deepvariant-postprocessvariants.diff index b721ee76..d8dc54c7 100644 --- a/modules/nf-core/deepvariant/postprocessvariants/deepvariant-postprocessvariants.diff +++ b/modules/nf-core/deepvariant/postprocessvariants/deepvariant-postprocessvariants.diff @@ -3,15 +3,16 @@ Changes in component 'nf-core/deepvariant/postprocessvariants' Changes in 'deepvariant/postprocessvariants/main.nf': --- modules/nf-core/deepvariant/postprocessvariants/main.nf +++ modules/nf-core/deepvariant/postprocessvariants/main.nf -@@ -1,6 +1,6 @@ +@@ -1,6 +1,7 @@ process DEEPVARIANT_POSTPROCESSVARIANTS { tag "$meta.id" - label 'process_medium' + label 'process_high' ++ label 'process_short' //Conda is not supported at the moment - container "docker.io/google/deepvariant:1.9.0" -@@ -14,8 +14,8 @@ + container "docker.io/google/deepvariant:1.10.0" +@@ -14,8 +15,8 @@ output: tuple val(meta), path("${prefix}.vcf.gz") , emit: vcf tuple val(meta), path("${prefix}.vcf.gz.{tbi,csi}") , emit: vcf_index @@ -22,7 +23,13 @@ Changes in 'deepvariant/postprocessvariants/main.nf': tuple val("${task.process}"), val('deepvariant'), eval("/opt/deepvariant/bin/run_deepvariant --version | sed 's/^.*version //'"), topic: versions, emit: versions_deepvariant when: -@@ -32,14 +32,17 @@ +@@ -27,19 +28,22 @@ + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } + def args = task.ext.args ?: '' +- prefix = task.ext.prefix ?: "${meta.id}" ++ prefix = task.ext.prefix ?: "${meta.id}_germline" + def regions = intervals ? "--regions ${intervals}" : "" def variant_calls_tfrecord_name = variant_calls_tfrecord_files[0].name.replaceFirst(/-\d{5}-of-\d{5}/, "") @@ -47,21 +54,28 @@ Changes in 'deepvariant/postprocessvariants/main.nf': // The following block determines whether the small model was used, and if so, adds the variant calls from it // to the argument --small_model_cvo_records. -@@ -62,10 +65,10 @@ +@@ -80,8 +84,8 @@ --ref "${fasta}" \\ --infile "${variant_calls_tfrecord_name}" \\ --outfile "${prefix}.vcf.gz" \\ - --nonvariant_site_tfrecord_path "${gvcf_tfrecords_logical_name}" \\ - --gvcf_outfile "${prefix}.g.vcf.gz" \\ + --sample_name ${prefix} \\ ++ ${gvcf_arg} \\ ${regions} \\ ${small_model_arg} \\ -+ ${gvcf_arg} \\ - --cpus $task.cpus - + ${phased_inputs_arg} \\ +@@ -94,7 +98,7 @@ + if (workflow.profile.tokenize(',').intersect(['conda', 'mamba']).size() >= 1) { + error "DEEPVARIANT module does not support Conda. Please use Docker / Singularity / Podman instead." + } +- prefix = task.ext.prefix ?: "${meta.id}" ++ prefix = task.ext.prefix ?: "${meta.id}_germline" """ + echo "" | gzip > ${prefix}.vcf.gz + touch ${prefix}.vcf.gz.tbi +'modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config' is unchanged 'modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test' is unchanged 'modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap' is unchanged -'modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/deepvariant/postprocessvariants/main.nf b/modules/nf-core/deepvariant/postprocessvariants/main.nf index ee7f703e..a45b61c9 100644 --- a/modules/nf-core/deepvariant/postprocessvariants/main.nf +++ b/modules/nf-core/deepvariant/postprocessvariants/main.nf @@ -4,10 +4,10 @@ process DEEPVARIANT_POSTPROCESSVARIANTS { label 'process_short' //Conda is not supported at the moment - container "docker.io/google/deepvariant:1.9.0" + container "docker.io/google/deepvariant:1.10.0" input: - tuple val(meta), path(variant_calls_tfrecord_files), path(gvcf_tfrecords), path(small_model_calls), path(intervals) + tuple val(meta), path(variant_calls_tfrecord_files), path(gvcf_tfrecords), path(small_model_calls), path(phase_inputs), path(intervals) tuple val(meta2), path(fasta) tuple val(meta3), path(fai) tuple val(meta4), path(gzi) @@ -60,16 +60,35 @@ process DEEPVARIANT_POSTPROCESSVARIANTS { small_model_arg = "--small_model_cvo_records ${small_model_tfrecords_logical_name}" } + // The following block determines whether phase info was outputted, and if so, adds the info from it + // to the argument --phased_reads_input_path. + def phased_inputs_arg = "" + if (phase_inputs) { + phase_inputs_matcher = (phase_inputs[0].baseName =~ /^(.+)-\d{5}-of-(\d{5})$/) + if (!phase_inputs_matcher.matches()) { + throw new IllegalArgumentException("read-phasing_debug baseName '" + phase_inputs[0].baseName + "' doesn't match the expected pattern") + } + phase_input_name = phase_inputs_matcher[0][1] + phase_input_shardCount = phase_inputs_matcher[0][2] + // Reconstruct the logical name. Example: test_call_variant_outputs.examples.tfrecord@12.gz + phase_input_logical_name = "${phase_input_name}@${phase_input_shardCount}.gz" + phased_inputs_arg = "--phased_reads_input_path ${phase_input_logical_name}" + } + """ + export MPLCONFIGDIR=\$PWD/.matplotlib + mkdir -p \$MPLCONFIGDIR + /opt/deepvariant/bin/postprocess_variants \\ ${args} \\ --ref "${fasta}" \\ --infile "${variant_calls_tfrecord_name}" \\ --outfile "${prefix}.vcf.gz" \\ --sample_name ${prefix} \\ + ${gvcf_arg} \\ ${regions} \\ ${small_model_arg} \\ - ${gvcf_arg} \\ + ${phased_inputs_arg} \\ --cpus $task.cpus """ diff --git a/modules/nf-core/deepvariant/postprocessvariants/meta.yml b/modules/nf-core/deepvariant/postprocessvariants/meta.yml index 4a087011..baa70179 100644 --- a/modules/nf-core/deepvariant/postprocessvariants/meta.yml +++ b/modules/nf-core/deepvariant/postprocessvariants/meta.yml @@ -13,7 +13,8 @@ tools: documentation: https://github.com/google/deepvariant tool_dev_url: https://github.com/google/deepvariant doi: "10.1038/nbt.4235" - licence: ["BSD-3-clause"] + licence: + - "BSD-3-clause" identifier: biotools:deepvariant input: - - meta: @@ -27,21 +28,27 @@ input: One or more data files containing variant calls from DEEPVARIANT_CALLVARIANTS pattern: "*.tfrecord.gz" ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format + - edam: http://edamontology.org/format_3989 - gvcf_tfrecords: type: file description: | Sharded tfrecord file from DEEPVARIANT_MAKEEXAMPLES with the coverage information used for GVCF output pattern: "*.gz" ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format + - edam: http://edamontology.org/format_3989 - small_model_calls: type: file description: | Sharded tfrecord file from DEEPVARIANT_MAKEEXAMPLES with variant calls from the small model pattern: "*.gz" ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format + - edam: http://edamontology.org/format_3989 + - phase_inputs: + type: file + description: | + Sharded phased read inputs tsv file from DEEPVARIANT_MAKEEXAMPLES + pattern: "*.tsv" + ontologies: [] - intervals: type: file description: Interval file for targeted regions @@ -89,7 +96,7 @@ output: description: Compressed VCF file pattern: "*.vcf.gz" ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format + - edam: http://edamontology.org/format_3989 vcf_index: - - meta: type: map @@ -112,7 +119,7 @@ output: description: Compressed GVCF file pattern: "*.g.vcf.gz" ontologies: - - edam: http://edamontology.org/format_3989 # GZIP format + - edam: http://edamontology.org/format_3989 gvcf_index: - - meta: type: map @@ -134,7 +141,6 @@ output: - /opt/deepvariant/bin/run_deepvariant --version | sed 's/^.*version //': type: eval description: The expression to obtain the version of the tool - topics: versions: - - ${task.process}: diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test index ef9110b0..a522a238 100644 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test @@ -39,6 +39,7 @@ nextflow_process { input[4] = [ [],[] ] + input[5] = false """ } } @@ -60,7 +61,10 @@ nextflow_process { ).join( DEEPVARIANT_MAKEEXAMPLES.out.small_model_calls, failOnMismatch: true - ).map { meta, tf, gvcf, small_model_calls -> [ meta, tf, gvcf, small_model_calls, [] ] } + ).join( + DEEPVARIANT_MAKEEXAMPLES.out.read_phase_inputs, + failOnMismatch: true + ).map { meta, tf, gvcf, small_model_calls, read_phase_inputs -> [ meta, tf, gvcf, small_model_calls, read_phase_inputs, [] ] } input[1] = [ [ id:'genome'], file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) @@ -96,6 +100,7 @@ nextflow_process { [], [], [], + [], ] input[1] = [ [ id:'genome'], diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap index a981cf84..bc940a1a 100644 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/main.nf.test.snap @@ -42,7 +42,7 @@ [ "DEEPVARIANT_POSTPROCESSVARIANTS", "deepvariant", - "1.9.0" + "1.10.0" ] ], "gvcf": [ @@ -85,7 +85,7 @@ [ "DEEPVARIANT_POSTPROCESSVARIANTS", "deepvariant", - "1.9.0" + "1.10.0" ] ] } @@ -94,7 +94,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-02T17:22:12.888323156" + "timestamp": "2026-05-22T12:26:00.102078" }, "homo_sapiens - wgs": { "content": [ @@ -105,7 +105,7 @@ "id": "test", "single_end": false }, - "test.vcf.gz:md5,707212230030c8c3efbe5c2e0428da03" + "test.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ] ], "1": [ @@ -114,7 +114,7 @@ "id": "test", "single_end": false }, - "test.vcf.gz.tbi:md5,248648ca03f5fda904ebbef8821e0e37" + "test.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ] ], "2": [ @@ -123,7 +123,7 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz:md5,89b2e47883a65bb9cae8f173e782bb17" + "test.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ] ], "3": [ @@ -132,14 +132,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz.tbi:md5,1680c67fe988bc1d8220fbb4127c2c18" + "test.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ] ], "4": [ [ "DEEPVARIANT_POSTPROCESSVARIANTS", "deepvariant", - "1.9.0" + "1.10.0" ] ], "gvcf": [ @@ -148,7 +148,7 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz:md5,89b2e47883a65bb9cae8f173e782bb17" + "test.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ] ], "gvcf_index": [ @@ -157,7 +157,7 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz.tbi:md5,1680c67fe988bc1d8220fbb4127c2c18" + "test.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ] ], "vcf": [ @@ -166,7 +166,7 @@ "id": "test", "single_end": false }, - "test.vcf.gz:md5,707212230030c8c3efbe5c2e0428da03" + "test.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ] ], "vcf_index": [ @@ -175,14 +175,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz.tbi:md5,248648ca03f5fda904ebbef8821e0e37" + "test.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ] ], "versions_deepvariant": [ [ "DEEPVARIANT_POSTPROCESSVARIANTS", "deepvariant", - "1.9.0" + "1.10.0" ] ] } @@ -191,6 +191,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-02-02T17:19:32.037352523" + "timestamp": "2026-08-17T12:26:28.028434" } } \ No newline at end of file diff --git a/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config b/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config index b8f3f47a..0282738c 100644 --- a/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config +++ b/modules/nf-core/deepvariant/postprocessvariants/tests/nextflow.config @@ -5,6 +5,6 @@ process { } process { withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--checkpoint "/opt/models/wgs" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/wgs"' + ext.args = '--checkpoint "/opt/models/wgs" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/wgs/model.keras"' } } diff --git a/modules/nf-core/ensemblvep/download/environment.yml b/modules/nf-core/ensemblvep/download/environment.yml index 7e60f7f9..6db2c225 100644 --- a/modules/nf-core/ensemblvep/download/environment.yml +++ b/modules/nf-core/ensemblvep/download/environment.yml @@ -4,5 +4,11 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::ensembl-vep=115.2 + # renovate: datasource=conda depName=bioconda/ensembl-vep + - bioconda::ensembl-vep=116.1 + # renovate: datasource=conda depName=bioconda/perl-math-cdf - bioconda::perl-math-cdf=0.1 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.23.1 + - conda-forge::gzip=1.14 + - conda-forge::tar=1.35 diff --git a/modules/nf-core/ensemblvep/download/main.nf b/modules/nf-core/ensemblvep/download/main.nf index 7e1aeefe..f8cc18b8 100644 --- a/modules/nf-core/ensemblvep/download/main.nf +++ b/modules/nf-core/ensemblvep/download/main.nf @@ -3,12 +3,13 @@ process ENSEMBLVEP_DOWNLOAD { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3d/3da6e21cbf9803529421d7e136d1ebec5ff71ec50e0d996eda2ce11ec2c19bf9/data' - : 'community.wave.seqera.io/library/ensembl-vep_perl-math-cdf:1e13f65f931a6954'}" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/90/9021c17a89ce9034b23f85736fd7ce906c44716e612f8e34d2a5e7ceeeb372d8/data' + : 'community.wave.seqera.io/library/ensembl-vep_htslib_perl-math-cdf_gzip_tar:35e34ac4f7e9d58a'}" input: tuple val(meta), val(assembly), val(species), val(cache_version) + val(preflight_check) output: tuple val(meta), path(prefix), emit: cache @@ -21,7 +22,18 @@ process ENSEMBLVEP_DOWNLOAD { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: 'vep_cache' + def filename = "${species}_vep_${cache_version}_${assembly}.tar.gz" + def checksums_url = "https://ftp.ensembl.org/pub/release-${cache_version}/variation/indexed_vep_cache/CHECKSUMS" """ + if [ "${preflight_check}" = "true" ]; then + perl -MHTTP::Tiny -e ' + my \$r = HTTP::Tiny->new(timeout => 30)->get("${checksums_url}"); + \$r->{success} or die "Failed to fetch CHECKSUMS (HTTP \$r->{status})\\n"; + \$r->{content} =~ /\\Q${filename}\\E/ or die "${filename} not found in CHECKSUMS\\n"; + print "Pre-flight OK: ${filename} found in CHECKSUMS\\n"; + ' + fi + vep_install \\ --CACHEDIR ${prefix} \\ --SPECIES ${species} \\ diff --git a/modules/nf-core/ensemblvep/download/meta.yml b/modules/nf-core/ensemblvep/download/meta.yml index ae1b9c6f..73492b48 100644 --- a/modules/nf-core/ensemblvep/download/meta.yml +++ b/modules/nf-core/ensemblvep/download/meta.yml @@ -33,6 +33,10 @@ input: type: string description: | cache version + - preflight_check: + type: boolean + description: | + Whether to check that the expected cache file is listed in the Ensembl CHECKSUMS file before downloading output: cache: - - meta: diff --git a/modules/nf-core/ensemblvep/download/tests/main.nf.test b/modules/nf-core/ensemblvep/download/tests/main.nf.test index 0206fe11..901b45ea 100644 --- a/modules/nf-core/ensemblvep/download/tests/main.nf.test +++ b/modules/nf-core/ensemblvep/download/tests/main.nf.test @@ -21,6 +21,7 @@ nextflow_process { params.vep_species, params.vep_cache_version ]) + input[1] = true """ } } @@ -33,6 +34,27 @@ nextflow_process { } } + test("ENSEMBLVEP download cache - preflight fails for invalid species") { + + when { + process { + """ + input[0] = Channel.of([ + [id:"invalid_species"], + "GRCh38", + "invalid_species", + params.vep_cache_version + ]) + input[1] = true + """ + } + } + + then { + assert process.failed + } + } + test("ENSEMBLVEP download cache for 115_WBcel235 - stub") { options "-stub" @@ -46,6 +68,7 @@ nextflow_process { params.vep_species, params.vep_cache_version ]) + input[1] = true """ } } diff --git a/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap index e5618485..6ad5d9a0 100644 --- a/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap +++ b/modules/nf-core/ensemblvep/download/tests/main.nf.test.snap @@ -139,7 +139,7 @@ [ "ENSEMBLVEP_DOWNLOAD", "ensemblvep", - "115.2" + "116.1" ] ], "versions_perlmathcdf": [ @@ -151,10 +151,10 @@ ] } ], - "timestamp": "2026-02-13T13:36:59.060515944", + "timestamp": "2026-06-10T12:12:05.812191", "meta": { - "nf-test": "0.9.4", - "nextflow": "26.01.1" + "nf-test": "0.9.5", + "nextflow": "26.04.2" } }, "ENSEMBLVEP download cache for 115_WBcel235 - stub": { @@ -174,7 +174,7 @@ [ "ENSEMBLVEP_DOWNLOAD", "ensemblvep", - "115.2" + "116.1" ] ], "versions_perlmathcdf": [ @@ -186,10 +186,10 @@ ] } ], - "timestamp": "2026-02-13T13:37:10.696285488", + "timestamp": "2026-06-10T12:12:18.22553", "meta": { - "nf-test": "0.9.4", - "nextflow": "26.01.1" + "nf-test": "0.9.5", + "nextflow": "26.04.2" } } } \ No newline at end of file diff --git a/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff b/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff index a7131648..62c46e71 100644 --- a/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff +++ b/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff @@ -1,4 +1,5 @@ Changes in component 'nf-core/ensemblvep/vep' +'modules/nf-core/ensemblvep/vep/environment.yml' is unchanged 'modules/nf-core/ensemblvep/vep/meta.yml' is unchanged Changes in 'ensemblvep/vep/main.nf': --- modules/nf-core/ensemblvep/vep/main.nf @@ -10,18 +11,18 @@ Changes in 'ensemblvep/vep/main.nf': + label 'process_very_high' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container -@@ -15,6 +15,9 @@ - tuple val(meta2), path(cache) + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container +@@ -16,6 +16,9 @@ tuple val(meta3), path(fasta) path extra_files + tuple path(gtf), path(gtf_tbi) // optional: [ path(gtf), path(gtf_tbi) ] -- mutually exclusive with cache + val plugin_args + path custom_vep + path custom_vep_tbi output: tuple val(meta), path("${prefix}.vcf.gz"), emit: vcf, optional: true -@@ -32,17 +35,27 @@ +@@ -33,6 +36,9 @@ script: def args = task.ext.args ?: '' def args2 = task.ext.args2 ?: '' @@ -31,8 +32,9 @@ Changes in 'ensemblvep/vep/main.nf': def file_extension = args.contains("--vcf") ? 'vcf' : args.contains("--json") ? 'json' : args.contains("--tab") ? 'tab' : 'vcf' def compress_cmd = args.contains("--compress_output") ? '' : '--compress_output bgzip' prefix = task.ext.prefix ?: "${meta.id}" - def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" - def reference = fasta ? "--fasta ${fasta}" : "" +@@ -44,11 +50,18 @@ + // unchanged. + def annotation_source = gtf ? "--gtf ${gtf}" : "--cache --cache_version ${cache_version} --dir_cache ${dir_cache}" def create_index = file_extension == "vcf" ? "tabix ${args2} ${prefix}.${file_extension}.gz" : "" + // Only the first --custom entry is rewritten, so further --custom tracks added through + // ext.args keep their own staged filenames @@ -50,10 +52,9 @@ Changes in 'ensemblvep/vep/main.nf': ${reference} \\ --assembly ${genome} \\ -'modules/nf-core/ensemblvep/vep/environment.yml' is unchanged +'modules/nf-core/ensemblvep/vep/tests/nextflow.config' is unchanged 'modules/nf-core/ensemblvep/vep/tests/main.nf.test' is unchanged -'modules/nf-core/ensemblvep/vep/tests/vcf.config' is unchanged 'modules/nf-core/ensemblvep/vep/tests/tab.gz.config' is unchanged +'modules/nf-core/ensemblvep/vep/tests/vcf.config' is unchanged 'modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap' is unchanged -'modules/nf-core/ensemblvep/vep/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/ensemblvep/vep/environment.yml b/modules/nf-core/ensemblvep/vep/environment.yml index 7e60f7f9..6db2c225 100644 --- a/modules/nf-core/ensemblvep/vep/environment.yml +++ b/modules/nf-core/ensemblvep/vep/environment.yml @@ -4,5 +4,11 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::ensembl-vep=115.2 + # renovate: datasource=conda depName=bioconda/ensembl-vep + - bioconda::ensembl-vep=116.1 + # renovate: datasource=conda depName=bioconda/perl-math-cdf - bioconda::perl-math-cdf=0.1 + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.23.1 + - conda-forge::gzip=1.14 + - conda-forge::tar=1.35 diff --git a/modules/nf-core/ensemblvep/vep/main.nf b/modules/nf-core/ensemblvep/vep/main.nf index 0ec465d2..51a901db 100644 --- a/modules/nf-core/ensemblvep/vep/main.nf +++ b/modules/nf-core/ensemblvep/vep/main.nf @@ -3,9 +3,9 @@ process ENSEMBLVEP_VEP { label 'process_very_high' conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3d/3da6e21cbf9803529421d7e136d1ebec5ff71ec50e0d996eda2ce11ec2c19bf9/data' - : 'community.wave.seqera.io/library/ensembl-vep_perl-math-cdf:1e13f65f931a6954'}" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/90/9021c17a89ce9034b23f85736fd7ce906c44716e612f8e34d2a5e7ceeeb372d8/data' + : 'community.wave.seqera.io/library/ensembl-vep_htslib_perl-math-cdf_gzip_tar:35e34ac4f7e9d58a'}" input: tuple val(meta), path(vcf), path(custom_extra_files) @@ -15,6 +15,7 @@ process ENSEMBLVEP_VEP { tuple val(meta2), path(cache) tuple val(meta3), path(fasta) path extra_files + tuple path(gtf), path(gtf_tbi) // optional: [ path(gtf), path(gtf_tbi) ] -- mutually exclusive with cache val plugin_args path custom_vep path custom_vep_tbi @@ -43,6 +44,11 @@ process ENSEMBLVEP_VEP { prefix = task.ext.prefix ?: "${meta.id}" def dir_cache = cache ? "\${PWD}/${cache}" : "/.vep" def reference = fasta ? "--fasta ${fasta}" : "" + // gtf and cache are mutually exclusive annotation sources: use a GTF + // (e.g. for a custom/non-standard reference with no Ensembl cache) + // when supplied, otherwise fall back to the existing cache behaviour + // unchanged. + def annotation_source = gtf ? "--gtf ${gtf}" : "--cache --cache_version ${cache_version} --dir_cache ${dir_cache}" def create_index = file_extension == "vcf" ? "tabix ${args2} ${prefix}.${file_extension}.gz" : "" // Only the first --custom entry is rewritten, so further --custom tracks added through // ext.args keep their own staged filenames @@ -60,9 +66,7 @@ process ENSEMBLVEP_VEP { ${reference} \\ --assembly ${genome} \\ --species ${species} \\ - --cache \\ - --cache_version ${cache_version} \\ - --dir_cache ${dir_cache} \\ + ${annotation_source} \\ --fork ${task.cpus} ${create_index} diff --git a/modules/nf-core/ensemblvep/vep/meta.yml b/modules/nf-core/ensemblvep/vep/meta.yml index daa62526..33dea04d 100644 --- a/modules/nf-core/ensemblvep/vep/meta.yml +++ b/modules/nf-core/ensemblvep/vep/meta.yml @@ -71,6 +71,19 @@ input: description: | path to file(s) needed for plugins (optional) ontologies: [] + - - gtf: + type: file + description: | + sorted, bgzipped GTF file to annotate with instead of a cache (optional). + Mutually exclusive with `cache`. + pattern: "*.gtf.gz" + ontologies: [] + - gtf_tbi: + type: file + description: | + tabix index of the GTF file (optional) + pattern: "*.gtf.gz.tbi" + ontologies: [] output: vcf: - - meta: diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test b/modules/nf-core/ensemblvep/vep/tests/main.nf.test index 63d91155..310ad462 100644 --- a/modules/nf-core/ensemblvep/vep/tests/main.nf.test +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test @@ -35,6 +35,7 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) input[6] = [] + input[7] = [[], []] """ } } @@ -77,6 +78,7 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) ]) input[6] = [] + input[7] = [[], []] """ } } @@ -88,7 +90,7 @@ nextflow_process { file(process.out.tab[0][1]).name, process.out.findAll { key, val -> key.startsWith("versions") }).match() }, - { assert path(process.out.tab[0][1]).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v115.2") } + { assert path(process.out.tab[0][1]).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v116.1") } ) } } diff --git a/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap index 6f834d3e..7acbc48c 100644 --- a/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap +++ b/modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap @@ -7,7 +7,7 @@ [ "ENSEMBLVEP_VEP", "ensemblvep", - "115.2" + "116.1" ] ], "versions_perlmathcdf": [ @@ -21,15 +21,15 @@ [ "ENSEMBLVEP_VEP", "tabix", - "1.21" + "1.23.1" ] ] } ], - "timestamp": "2026-02-06T12:47:57.03116265", + "timestamp": "2026-06-10T11:55:47.928083", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" + "nf-test": "0.9.5", + "nextflow": "26.04.2" } }, "test_ensemblvep_vep_fasta_vcf - stub (not really but linting complains otherwise)": { @@ -41,7 +41,7 @@ [ "ENSEMBLVEP_VEP", "ensemblvep", - "115.2" + "116.1" ] ], "versions_perlmathcdf": [ @@ -55,15 +55,15 @@ [ "ENSEMBLVEP_VEP", "tabix", - "1.21" + "1.23.1" ] ] } ], - "timestamp": "2026-02-06T12:47:34.421995264", + "timestamp": "2026-06-10T11:55:16.566537", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" + "nf-test": "0.9.5", + "nextflow": "26.04.2" } } } \ No newline at end of file diff --git a/modules/nf-core/longphase/haplotag/main.nf b/modules/nf-core/longphase/haplotag/main.nf index 7eb84669..72ecacfe 100644 --- a/modules/nf-core/longphase/haplotag/main.nf +++ b/modules/nf-core/longphase/haplotag/main.nf @@ -3,7 +3,7 @@ process LONGPHASE_HAPLOTAG { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/83/83fce1d397cf71705cc096fc0e0e52f7013bdd471ef68ee53ae765688e5c439c/data': 'community.wave.seqera.io/library/longphase_samtools:8c61296cae7a5fc0' }" diff --git a/modules/nf-core/longphase/phase/longphase-phase.diff b/modules/nf-core/longphase/phase/longphase-phase.diff index 51a6018c..568e857f 100644 --- a/modules/nf-core/longphase/phase/longphase-phase.diff +++ b/modules/nf-core/longphase/phase/longphase-phase.diff @@ -1,4 +1,5 @@ Changes in component 'nf-core/longphase/phase' +'modules/nf-core/longphase/phase/environment.yml' is unchanged 'modules/nf-core/longphase/phase/meta.yml' is unchanged Changes in 'longphase/phase/main.nf': --- modules/nf-core/longphase/phase/main.nf @@ -67,8 +68,7 @@ Changes in 'longphase/phase/main.nf': """ } -'modules/nf-core/longphase/phase/environment.yml' is unchanged +'modules/nf-core/longphase/phase/tests/nextflow.config' is unchanged 'modules/nf-core/longphase/phase/tests/main.nf.test' is unchanged 'modules/nf-core/longphase/phase/tests/main.nf.test.snap' is unchanged -'modules/nf-core/longphase/phase/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/longphase/phase/main.nf b/modules/nf-core/longphase/phase/main.nf index 63d119f7..3b6eab77 100644 --- a/modules/nf-core/longphase/phase/main.nf +++ b/modules/nf-core/longphase/phase/main.nf @@ -3,7 +3,7 @@ process LONGPHASE_PHASE { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/83/83fce1d397cf71705cc096fc0e0e52f7013bdd471ef68ee53ae765688e5c439c/data': 'community.wave.seqera.io/library/longphase_samtools:8c61296cae7a5fc0' }" diff --git a/modules/nf-core/minimap2/align/environment.yml b/modules/nf-core/minimap2/align/environment.yml index 17886061..d8135f9a 100644 --- a/modules/nf-core/minimap2/align/environment.yml +++ b/modules/nf-core/minimap2/align/environment.yml @@ -5,5 +5,5 @@ channels: - bioconda dependencies: - - bioconda::minimap2=2.29 - - bioconda::samtools=1.21 + - bioconda::minimap2=2.30 + - bioconda::samtools=1.23.1 diff --git a/modules/nf-core/minimap2/align/main.nf b/modules/nf-core/minimap2/align/main.nf index df55071a..d5b54f45 100644 --- a/modules/nf-core/minimap2/align/main.nf +++ b/modules/nf-core/minimap2/align/main.nf @@ -4,9 +4,9 @@ process MINIMAP2_ALIGN { // Note: the versions here need to match the versions used in the mulled container below and minimap2/index conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/66/66dc96eff11ab80dfd5c044e9b3425f52d818847b9c074794cf0c02bfa781661/data' : - 'community.wave.seqera.io/library/minimap2_samtools:33bb43c18d22e29c' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/37/37671219cfd244eb9b33db9345d3543ffd83037419a1c57f4648aace493ec2c2/data' : + 'community.wave.seqera.io/library/minimap2_samtools:b09096fc890429ce' }" input: tuple val(meta), path(reads) diff --git a/modules/nf-core/minimap2/align/minimap2-align.diff b/modules/nf-core/minimap2/align/minimap2-align.diff index 967bb654..90417f1b 100644 --- a/modules/nf-core/minimap2/align/minimap2-align.diff +++ b/modules/nf-core/minimap2/align/minimap2-align.diff @@ -1,4 +1,5 @@ Changes in component 'nf-core/minimap2/align' +'modules/nf-core/minimap2/align/environment.yml' is unchanged 'modules/nf-core/minimap2/align/meta.yml' is unchanged Changes in 'minimap2/align/main.nf': --- modules/nf-core/minimap2/align/main.nf @@ -12,7 +13,6 @@ Changes in 'minimap2/align/main.nf': // Note: the versions here need to match the versions used in the mulled container below and minimap2/index conda "${moduleDir}/environment.yml" -'modules/nf-core/minimap2/align/environment.yml' is unchanged 'modules/nf-core/minimap2/align/tests/main.nf.test' is unchanged 'modules/nf-core/minimap2/align/tests/main.nf.test.snap' is unchanged ************************************************************ diff --git a/modules/nf-core/minimap2/align/tests/main.nf.test.snap b/modules/nf-core/minimap2/align/tests/main.nf.test.snap index 93e0eb3b..4923727b 100644 --- a/modules/nf-core/minimap2/align/tests/main.nf.test.snap +++ b/modules/nf-core/minimap2/align/tests/main.nf.test.snap @@ -4,8 +4,8 @@ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.29-r1283\tCL:minimap2 -t 2 -a genome.fasta -", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta -", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" ], "5d426b9a5f5b2c54f1d7f1e4c238ae94", "test.bam.bai", @@ -14,16 +14,16 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:26:01.315588", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:02:10.851485367" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - bam, fasta, true, 'bai', false, false - stub": { "content": [ @@ -53,7 +53,7 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ], "bam": [ @@ -81,16 +81,16 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:26:29.211025", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:02:56.708796666" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, true, 'bai', false, false - stub": { "content": [ @@ -120,7 +120,7 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ], "bam": [ @@ -148,16 +148,16 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:26:14.56423", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:02:32.614463827" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, false, [], false, false - stub": { "content": [ @@ -181,7 +181,7 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ], "bam": [ @@ -203,16 +203,16 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:26:19.467028", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:02:40.02163098" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, true, [], false, false - stub": { "content": [ @@ -236,7 +236,7 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ], "bam": [ @@ -258,24 +258,24 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:26:10.208287", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:02:25.102539679" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - [fastq1, fastq2], fasta, true, false, false": { "content": [ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.29-r1283\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz test_2.fastq.gz", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz test_2.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam" ], "1bc392244f228bf52cf0b5a8f6a654c9", { @@ -283,24 +283,24 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:25:45.435644", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:01:46.456636022" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, true, [], false, false": { "content": [ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.29-r1283\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam" ], "f194745c0ccfcb2a9c0aee094a08750", { @@ -308,24 +308,24 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:25:35.537045", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:01:30.525133177" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, fasta, true, 'bai', false, false": { "content": [ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.29-r1283\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam##idx##test.bam.bai --write-index" ], "f194745c0ccfcb2a9c0aee094a08750", "test.bam.bai", @@ -334,24 +334,24 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:25:40.308055", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:01:38.84829029" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - bam, fasta, true, [], false, false": { "content": [ [ "@HD\tVN:1.6\tSO:coordinate", "@SQ\tSN:MT192765.1\tLN:29829", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.29-r1283\tCL:minimap2 -t 2 -a genome.fasta -", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a genome.fasta -", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam" ], "5d426b9a5f5b2c54f1d7f1e4c238ae94", { @@ -359,16 +359,16 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:25:55.526019", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:02:02.351060285" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - bam, fasta, true, [], false, false - stub": { "content": [ @@ -392,7 +392,7 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ], "bam": [ @@ -414,16 +414,16 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:26:24.507384", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:02:47.579634041" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "sarscov2 - fastq, [], true, false, false": { "content": [ @@ -529,8 +529,8 @@ "@SQ\tSN:ERR5069949.3258358\tLN:151", "@SQ\tSN:ERR5069949.1476386\tLN:151", "@SQ\tSN:ERR5069949.2415814\tLN:150", - "@PG\tID:minimap2\tPN:minimap2\tVN:2.29-r1283\tCL:minimap2 -t 2 -a test_1.fastq.gz test_1.fastq.gz", - "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.21\tCL:samtools sort -@ 1 -o test.bam" + "@PG\tID:minimap2\tPN:minimap2\tVN:2.30-r1287\tCL:minimap2 -t 2 -a test_1.fastq.gz test_1.fastq.gz", + "@PG\tID:samtools\tPN:samtools\tPP:minimap2\tVN:1.23.1\tCL:samtools sort -@ 1 -o test.bam" ], "16c1c651f8ec67383bcdee3c55aed94f", { @@ -538,15 +538,15 @@ [ "MINIMAP2_ALIGN", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:25:49.904205", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-22T15:01:54.090788633" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } } } \ No newline at end of file diff --git a/modules/nf-core/minimap2/index/environment.yml b/modules/nf-core/minimap2/index/environment.yml index 2f3ba0eb..309b3993 100644 --- a/modules/nf-core/minimap2/index/environment.yml +++ b/modules/nf-core/minimap2/index/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::minimap2=2.29 + - bioconda::minimap2=2.30 diff --git a/modules/nf-core/minimap2/index/main.nf b/modules/nf-core/minimap2/index/main.nf index dd81eab0..b0653eea 100644 --- a/modules/nf-core/minimap2/index/main.nf +++ b/modules/nf-core/minimap2/index/main.nf @@ -3,9 +3,9 @@ process MINIMAP2_INDEX { // Note: the versions here need to match the versions used in minimap2/align conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/minimap2:2.29--h577a1d6_0' : - 'biocontainers/minimap2:2.29--h577a1d6_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/40/40a39951375e148d401c77e200777053cb628a4095bda598f7d41db08cbbfa4c/data' : + 'community.wave.seqera.io/library/minimap2:2.30--dde6b0c5fbc82ebd' }" input: tuple val(meta), path(fasta) diff --git a/modules/nf-core/minimap2/index/tests/main.nf.test.snap b/modules/nf-core/minimap2/index/tests/main.nf.test.snap index a3ec750b..9a6ee6bf 100644 --- a/modules/nf-core/minimap2/index/tests/main.nf.test.snap +++ b/modules/nf-core/minimap2/index/tests/main.nf.test.snap @@ -14,7 +14,7 @@ [ "MINIMAP2_INDEX", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ], "index": [ @@ -29,16 +29,16 @@ [ "MINIMAP2_INDEX", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:24:17.337374", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-09T16:12:10.625322" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } }, "minimap2 index - stub": { "content": [ @@ -55,7 +55,7 @@ [ "MINIMAP2_INDEX", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ], "index": [ @@ -70,15 +70,15 @@ [ "MINIMAP2_INDEX", "minimap2", - "2.29-r1283" + "2.30-r1287" ] ] } ], + "timestamp": "2026-04-23T17:24:23.202458", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-09T16:12:15.244242" + "nf-test": "0.9.5", + "nextflow": "25.04.2" + } } } \ No newline at end of file diff --git a/modules/nf-core/mosdepth/environment.yml b/modules/nf-core/mosdepth/environment.yml index 1c7f3ee8..1462ab34 100644 --- a/modules/nf-core/mosdepth/environment.yml +++ b/modules/nf-core/mosdepth/environment.yml @@ -4,6 +4,9 @@ channels: - conda-forge - bioconda dependencies: + # renovate: datasource=conda depName=bioconda/htslib + - bioconda::htslib=1.23.1 # renovate: datasource=conda depName=bioconda/mosdepth - - htslib=1.22.1 - - mosdepth=0.3.11=h0ec343a_1 + - bioconda::mosdepth=0.3.14 + # renovate: datasource=conda depName=conda-forge/gzip + - conda-forge::gzip=1.14 diff --git a/modules/nf-core/mosdepth/main.nf b/modules/nf-core/mosdepth/main.nf index 63739bfa..ef82be0a 100644 --- a/modules/nf-core/mosdepth/main.nf +++ b/modules/nf-core/mosdepth/main.nf @@ -3,13 +3,14 @@ process MOSDEPTH { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/00/00d32b53160c26794959da7303ee6e2107afd4d292060c9f287b0af1fddbd847/data' : - 'community.wave.seqera.io/library/mosdepth_htslib:0f58993cb6d93294'}" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/a3/a3dc5ea2ce788c24079d24d1721ed28086874152c43b5e7dde3f638dcf64336a/data' : + 'community.wave.seqera.io/library/htslib_mosdepth_gzip:4108dd38be84e40a'}" input: tuple val(meta), path(bam), path(bai), path(bed) tuple val(meta2), path(fasta) + val(quantize_labels) output: tuple val(meta), path('*.global.dist.txt') , emit: global_txt @@ -25,7 +26,7 @@ process MOSDEPTH { tuple val(meta), path('*.thresholds.bed.gz') , optional:true, emit: thresholds_bed tuple val(meta), path('*.thresholds.bed.gz.csi'), optional:true, emit: thresholds_csi tuple val("${task.process}"), val('mosdepth'), eval("mosdepth --version | sed 's/mosdepth //g'"), topic: versions, emit: versions_mosdepth - + tuple val("${task.process}"), val('gzip'), eval("gzip -V 2>&1 | sed 's/gzip \\([0-9.]*\\).*/\\1/;q'"), topic: versions, emit: versions_gzip when: task.ext.when == null || task.ext.when @@ -34,6 +35,12 @@ process MOSDEPTH { def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--fasta ${fasta}" : "" def interval = bed ? "--by ${bed}" : "" + def quantize_env_vars = [] + if (quantize_labels instanceof List && quantize_labels.size() > 0) { + quantize_labels.eachWithIndex { label, index -> + quantize_env_vars << "MOSDEPTH_Q${index}=${label}" + } + } if (bed && (args.contains("--by") || args.contains("-b "))) { error "'--by' can only be specified once when running mosdepth! Either remove input BED file definition or remove '--by' from 'ext.args' definition" } @@ -42,7 +49,7 @@ process MOSDEPTH { } """ - mosdepth \\ + ${quantize_env_vars.join(" ")} mosdepth \\ --threads $task.cpus \\ $interval \\ $reference \\ diff --git a/modules/nf-core/mosdepth/meta.yml b/modules/nf-core/mosdepth/meta.yml index 04c8bfe1..36097fca 100644 --- a/modules/nf-core/mosdepth/meta.yml +++ b/modules/nf-core/mosdepth/meta.yml @@ -11,7 +11,8 @@ tools: Fast BAM/CRAM depth calculation for WGS, exome, or targeted sequencing. documentation: https://github.com/brentp/mosdepth doi: 10.1093/bioinformatics/btx699 - licence: ["MIT"] + licence: + - "MIT" identifier: biotools:mosdepth input: - - meta: @@ -44,6 +45,12 @@ input: description: Reference genome FASTA file pattern: "*.{fa,fasta}" ontologies: [] + - quantize_labels: + type: list + description: | + List of labels for quantized coverage bins, e.g. [ "NO_COVERAGE", "LOW_COVERAGE", "MEDIUM_COVERAGE", "HIGH_COVERAGE" ] + The first value will be assigned to the `MOSDEPTH_Q0` environment variable, the second to `MOSDEPTH_Q1`, and so on. + These can then be used in the `--quantize` option of mosdepth to assign labels to quantized coverage bins. output: global_txt: - - meta: @@ -64,7 +71,8 @@ output: e.g. [ id:'test', single_end:false ] - "*.summary.txt": type: file - description: Text file with summary mean depths per chromosome and regions + description: Text file with summary mean depths per chromosome and + regions pattern: "*.{summary.txt}" ontologies: [] regions_txt: @@ -163,8 +171,8 @@ output: e.g. [ id:'test', single_end:false ] - "*.thresholds.bed.gz": type: file - description: BED file with the number of bases in each region that are covered - at or above each threshold + description: BED file with the number of bases in each region that are + covered at or above each threshold pattern: "*.{thresholds.bed.gz}" ontologies: [] thresholds_csi: @@ -185,10 +193,19 @@ output: - mosdepth: type: string description: The tool name - - "mosdepth --version | sed 's/mosdepth //g'": - type: string + - mosdepth --version | sed 's/mosdepth //g': + type: eval description: The command used to generate the version of the tool - + versions_gzip: + - - ${task.process}: + type: string + description: The process the versions were collected from + - gzip: + type: string + description: The name of the tool + - gzip -V 2>&1 | sed 's/gzip \([0-9.]*\).*/\1/;q': + type: eval + description: The expression to obtain the version of the tool topics: versions: - - ${task.process}: @@ -197,9 +214,18 @@ topics: - mosdepth: type: string description: The tool name - - "mosdepth --version | sed 's/mosdepth //g'": - type: string + - mosdepth --version | sed 's/mosdepth //g': + type: eval description: The command used to generate the version of the tool + - - ${task.process}: + type: string + description: The process the versions were collected from + - gzip: + type: string + description: The name of the tool + - gzip -V 2>&1 | sed 's/gzip \([0-9.]*\).*/\1/;q': + type: eval + description: The expression to obtain the version of the tool authors: - "@joseespinosa" - "@drpatelh" diff --git a/modules/nf-core/mosdepth/tests/main.nf.test b/modules/nf-core/mosdepth/tests/main.nf.test index b05dde5b..27573680 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test +++ b/modules/nf-core/mosdepth/tests/main.nf.test @@ -24,6 +24,7 @@ nextflow_process { [] ] input[1] = [[],[]] + input[2] = [] """ } } @@ -52,6 +53,7 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] + input[2] = [] """ } } @@ -83,6 +85,7 @@ nextflow_process { [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [] """ } } @@ -114,6 +117,7 @@ nextflow_process { [ id:'test' ], file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) ] + input[2] = [] """ } } @@ -142,6 +146,7 @@ nextflow_process { [] ] input[1] = [[],[]] + input[2] = [] """ } } @@ -170,6 +175,7 @@ nextflow_process { [] ] input[1] = [[],[]] + input[2] = ['NO_COVERAGE', 'LOW_COVERAGE', 'MEDIUM_COVERAGE', 'HIGH_COVERAGE'] """ } } @@ -198,6 +204,7 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] + input[2] = [] """ } } @@ -226,6 +233,7 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] + input[2] = [] """ } } @@ -252,6 +260,7 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) ] input[1] = [[],[]] + input[2] = [] """ } } diff --git a/modules/nf-core/mosdepth/tests/main.nf.test.snap b/modules/nf-core/mosdepth/tests/main.nf.test.snap index c27fcc79..7d89f0be 100644 --- a/modules/nf-core/mosdepth/tests/main.nf.test.snap +++ b/modules/nf-core/mosdepth/tests/main.nf.test.snap @@ -42,7 +42,14 @@ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" + ] + ], + "13": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "2": [ @@ -225,20 +232,27 @@ "test.thresholds.bed.gz.csi:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], + "versions_gzip": [ + [ + "MOSDEPTH", + "gzip", + "1.14" + ] + ], "versions_mosdepth": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" ] ] } ], + "timestamp": "2026-04-28T16:21:32.6884639", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-23T13:06:13.219131" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - cram, crai, bed": { "content": [ @@ -271,7 +285,14 @@ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" + ] + ], + "13": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "2": [ @@ -301,7 +322,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "6": [ @@ -319,7 +340,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4" + "test.regions.bed.gz.csi:md5,e0045e73eb8e8c2b88544f0bc346e002" ] ], "8": [ @@ -352,7 +373,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "per_base_d4": [ @@ -379,7 +400,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4" + "test.regions.bed.gz.csi:md5,e0045e73eb8e8c2b88544f0bc346e002" ] ], "regions_txt": [ @@ -405,21 +426,28 @@ ], "thresholds_csi": [ + ], + "versions_gzip": [ + [ + "MOSDEPTH", + "gzip", + "1.14" + ] ], "versions_mosdepth": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" ] ] } ], + "timestamp": "2026-04-28T16:21:04.254064193", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-23T13:22:14.011309" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - bam, bai, [] - quantized": { "content": [ @@ -452,7 +480,14 @@ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" + ] + ], + "13": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "2": [ @@ -476,7 +511,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "6": [ @@ -491,7 +526,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz:md5,f037c215449d361112efc10108fcc17c" + "test.quantized.bed.gz:md5,02fcfd09862c63b717e519abb4897e2e" ] ], "9": [ @@ -500,7 +535,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz.csi:md5,c0a3176a59010639455a4aefb3f247ef" + "test.quantized.bed.gz.csi:md5,59bb21dd686bf095ea8ef75bfbe2c85c" ] ], "global_txt": [ @@ -527,7 +562,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "per_base_d4": [ @@ -539,7 +574,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz:md5,f037c215449d361112efc10108fcc17c" + "test.quantized.bed.gz:md5,02fcfd09862c63b717e519abb4897e2e" ] ], "quantized_csi": [ @@ -548,7 +583,7 @@ "id": "test", "single_end": true }, - "test.quantized.bed.gz.csi:md5,c0a3176a59010639455a4aefb3f247ef" + "test.quantized.bed.gz.csi:md5,59bb21dd686bf095ea8ef75bfbe2c85c" ] ], "regions_bed": [ @@ -574,21 +609,28 @@ ], "thresholds_csi": [ + ], + "versions_gzip": [ + [ + "MOSDEPTH", + "gzip", + "1.14" + ] ], "versions_mosdepth": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" ] ] } ], + "timestamp": "2026-04-28T16:21:15.811323229", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-23T13:22:22.818082" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - bam, bai, bed": { "content": [ @@ -621,7 +663,14 @@ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" + ] + ], + "13": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "2": [ @@ -651,7 +700,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "6": [ @@ -669,7 +718,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4" + "test.regions.bed.gz.csi:md5,e0045e73eb8e8c2b88544f0bc346e002" ] ], "8": [ @@ -702,7 +751,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "per_base_d4": [ @@ -729,7 +778,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4" + "test.regions.bed.gz.csi:md5,e0045e73eb8e8c2b88544f0bc346e002" ] ], "regions_txt": [ @@ -755,21 +804,28 @@ ], "thresholds_csi": [ + ], + "versions_gzip": [ + [ + "MOSDEPTH", + "gzip", + "1.14" + ] ], "versions_mosdepth": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" ] ] } ], + "timestamp": "2026-04-28T16:20:50.674770475", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-23T13:22:04.449943" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - bam, bai, [] - window": { "content": [ @@ -802,7 +858,14 @@ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" + ] + ], + "13": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "2": [ @@ -832,7 +895,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "6": [ @@ -850,7 +913,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,17a2cbe22a948d7c004b90a1f28347a1" + "test.regions.bed.gz.csi:md5,fb57a83d60532cb601d274fb53854bea" ] ], "8": [ @@ -883,7 +946,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "per_base_d4": [ @@ -910,7 +973,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,17a2cbe22a948d7c004b90a1f28347a1" + "test.regions.bed.gz.csi:md5,fb57a83d60532cb601d274fb53854bea" ] ], "regions_txt": [ @@ -936,21 +999,28 @@ ], "thresholds_csi": [ + ], + "versions_gzip": [ + [ + "MOSDEPTH", + "gzip", + "1.14" + ] ], "versions_mosdepth": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" ] ] } ], + "timestamp": "2026-04-28T16:21:10.058663002", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-23T13:22:18.435089" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - bam, bai, []": { "content": [ @@ -983,7 +1053,14 @@ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" + ] + ], + "13": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "2": [ @@ -1007,7 +1084,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "6": [ @@ -1046,7 +1123,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "per_base_d4": [ @@ -1081,21 +1158,28 @@ ], "thresholds_csi": [ + ], + "versions_gzip": [ + [ + "MOSDEPTH", + "gzip", + "1.14" + ] ], "versions_mosdepth": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" ] ] } ], + "timestamp": "2026-04-28T16:20:44.067692046", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-23T13:21:59.785829" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - cram, crai, []": { "content": [ @@ -1128,7 +1212,14 @@ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" + ] + ], + "13": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "2": [ @@ -1152,7 +1243,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "6": [ @@ -1191,7 +1282,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "per_base_d4": [ @@ -1226,21 +1317,28 @@ ], "thresholds_csi": [ + ], + "versions_gzip": [ + [ + "MOSDEPTH", + "gzip", + "1.14" + ] ], "versions_mosdepth": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" ] ] } ], + "timestamp": "2026-04-28T16:20:57.800996078", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-23T13:22:09.294766" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "homo_sapiens - bam, bai, bed - thresholds": { "content": [ @@ -1278,14 +1376,21 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz.csi:md5,2c52ab89e7496af475de3cb2ca04c7b3" + "test.thresholds.bed.gz.csi:md5,5e0a68f8a0f2044ae36a7f50abfa291d" ] ], "12": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" + ] + ], + "13": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "2": [ @@ -1315,7 +1420,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "6": [ @@ -1333,7 +1438,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4" + "test.regions.bed.gz.csi:md5,e0045e73eb8e8c2b88544f0bc346e002" ] ], "8": [ @@ -1366,7 +1471,7 @@ "id": "test", "single_end": true }, - "test.per-base.bed.gz.csi:md5,6adccf94ed775c9f53422e3e9c7af27f" + "test.per-base.bed.gz.csi:md5,524a822fc4863b450fda9e0f99ccdf04" ] ], "per_base_d4": [ @@ -1393,7 +1498,7 @@ "id": "test", "single_end": true }, - "test.regions.bed.gz.csi:md5,c33ac5c86370039463796f01434fc0e4" + "test.regions.bed.gz.csi:md5,e0045e73eb8e8c2b88544f0bc346e002" ] ], "regions_txt": [ @@ -1429,22 +1534,29 @@ "id": "test", "single_end": true }, - "test.thresholds.bed.gz.csi:md5,2c52ab89e7496af475de3cb2ca04c7b3" + "test.thresholds.bed.gz.csi:md5,5e0a68f8a0f2044ae36a7f50abfa291d" + ] + ], + "versions_gzip": [ + [ + "MOSDEPTH", + "gzip", + "1.14" ] ], "versions_mosdepth": [ [ "MOSDEPTH", "mosdepth", - "0.3.11" + "0.3.14" ] ] } ], + "timestamp": "2026-04-28T16:21:21.687826049", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.7" - }, - "timestamp": "2025-09-23T13:22:27.300204" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/nanoplot/environment.yml b/modules/nf-core/nanoplot/environment.yml index c6b1c5bf..bd86e98c 100644 --- a/modules/nf-core/nanoplot/environment.yml +++ b/modules/nf-core/nanoplot/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::nanoplot=1.46.1 + - bioconda::nanoplot=1.48.0 diff --git a/modules/nf-core/nanoplot/main.nf b/modules/nf-core/nanoplot/main.nf index e89c3941..1a6acc03 100644 --- a/modules/nf-core/nanoplot/main.nf +++ b/modules/nf-core/nanoplot/main.nf @@ -3,9 +3,9 @@ process NANOPLOT { label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/nanoplot:1.46.1--pyhdfd78af_0' : - 'biocontainers/nanoplot:1.46.1--pyhdfd78af_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/nanoplot:1.48.0--pyhdfd78af_1' : + 'quay.io/biocontainers/nanoplot:1.48.0--pyhdfd78af_1' }" input: tuple val(meta), path(ontfile) @@ -14,7 +14,7 @@ process NANOPLOT { tuple val(meta), path("*.html") , emit: html tuple val(meta), path("*.png") , optional: true, emit: png tuple val(meta), path("*.txt") , emit: txt - tuple val("${task.process}"), val('nanoplot'), eval("NanoPlot --version 2>&1 | sed 's/^.*NanoPlot //; s/ .*\$//'"), topic: versions, emit: versions_nanoplot + tuple val("${task.process}"), val('NanoPlot'), eval('NanoPlot --version | sed \'s/^.*NanoPlot //; s/ .*\$//\''), emit: versions_nanoplot, topic: versions when: task.ext.when == null || task.ext.when @@ -32,7 +32,7 @@ process NANOPLOT { for nanoplot_file in *.html *.png *.txt *.log do - if [[ -s \$nanoplot_file ]] + if [[ -s \$nanoplot_file && \$nanoplot_file != "${ontfile}" ]] then mv \$nanoplot_file ${prefix}_\$nanoplot_file fi diff --git a/modules/nf-core/nanoplot/meta.yml b/modules/nf-core/nanoplot/meta.yml index 3df7b98c..ca6c288d 100644 --- a/modules/nf-core/nanoplot/meta.yml +++ b/modules/nf-core/nanoplot/meta.yml @@ -13,7 +13,8 @@ tools: alignment. homepage: http://nanoplot.bioinf.be documentation: https://github.com/wdecoster/NanoPlot - licence: ["GPL-3.0-or-later"] + licence: + - "GPL-3.0-or-later" identifier: biotools:nanoplot input: - - meta: @@ -59,13 +60,27 @@ output: description: Stats from NanoPlot pattern: "*{.txt}" ontologies: [] + versions_nanoplot: + - - ${task.process}: + type: string + description: The name of the process + - NanoPlot: + type: string + description: The name of the tool + - NanoPlot --version | sed 's/^.*NanoPlot //; s/ .*\$//': + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - NanoPlot: + type: string + description: The name of the tool + - NanoPlot --version | sed 's/^.*NanoPlot //; s/ .*\$//': + type: eval + description: The expression to obtain the version of the tool authors: - "@drpatelh" - "@yuukiiwa" diff --git a/modules/nf-core/nanoplot/nanoplot.diff b/modules/nf-core/nanoplot/nanoplot.diff new file mode 100644 index 00000000..525dae72 --- /dev/null +++ b/modules/nf-core/nanoplot/nanoplot.diff @@ -0,0 +1,265 @@ +Changes in component 'nf-core/nanoplot' +Changes in 'nanoplot/environment.yml': +--- modules/nf-core/nanoplot/environment.yml ++++ modules/nf-core/nanoplot/environment.yml +@@ -4,4 +4,4 @@ + - conda-forge + - bioconda + dependencies: +- - bioconda::nanoplot=1.47.0 ++ - bioconda::nanoplot=1.48.0 + +'modules/nf-core/nanoplot/meta.yml' is unchanged +Changes in 'nanoplot/main.nf': +--- modules/nf-core/nanoplot/main.nf ++++ modules/nf-core/nanoplot/main.nf +@@ -4,8 +4,8 @@ + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? +- 'https://depot.galaxyproject.org/singularity/nanoplot:1.47.0--pyhdfd78af_0' : +- 'quay.io/biocontainers/nanoplot:1.47.0--pyhdfd78af_0' }" ++ 'https://depot.galaxyproject.org/singularity/nanoplot:1.48.0--pyhdfd78af_1' : ++ 'quay.io/biocontainers/nanoplot:1.48.0--pyhdfd78af_1' }" + + input: + tuple val(meta), path(ontfile) +@@ -20,26 +20,36 @@ + task.ext.when == null || task.ext.when + + script: ++ def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def input_file = ("$ontfile".endsWith(".fastq.gz") || "$ontfile".endsWith(".fq.gz")) ? "--fastq ${ontfile}" : +- ("$ontfile".endsWith(".txt")) ? "--summary ${ontfile}" : '' ++ ("$ontfile".endsWith(".txt")) ? "--summary ${ontfile}" : ("$ontfile".endsWith(".arrow")) ? "--arrow ${ontfile}" : '' + """ + NanoPlot \\ + $args \\ + -t $task.cpus \\ + $input_file ++ ++ for nanoplot_file in *.html *.png *.txt *.log ++ do ++ if [[ -s \$nanoplot_file && \$nanoplot_file != "${ontfile}" ]] ++ then ++ mv \$nanoplot_file ${prefix}_\$nanoplot_file ++ fi ++ done + """ + + stub: ++ def prefix = task.ext.prefix ?: "${meta.id}" + """ +- touch LengthvsQualityScatterPlot_dot.html +- touch LengthvsQualityScatterPlot_kde.html +- touch NanoPlot-report.html +- touch NanoStats.txt +- touch Non_weightedHistogramReadlength.html +- touch Non_weightedLogTransformed_HistogramReadlength.html +- touch WeightedHistogramReadlength.html +- touch WeightedLogTransformed_HistogramReadlength.html +- touch Yield_By_Length.html ++ touch ${prefix}_LengthvsQualityScatterPlot_dot.html ++ touch ${prefix}_LengthvsQualityScatterPlot_kde.html ++ touch ${prefix}_NanoPlot-report.html ++ touch ${prefix}_NanoStats.txt ++ touch ${prefix}_Non_weightedHistogramReadlength.html ++ touch ${prefix}_Non_weightedLogTransformed_HistogramReadlength.html ++ touch ${prefix}_WeightedHistogramReadlength.html ++ touch ${prefix}_WeightedLogTransformed_HistogramReadlength.html ++ touch ${prefix}_Yield_By_Length.html + """ + } + +'modules/nf-core/nanoplot/tests/main.nf.test' is unchanged +'modules/nf-core/nanoplot/tests/tags.yaml' is unchanged +Changes in 'nanoplot/tests/main.nf.test.snap': +--- modules/nf-core/nanoplot/tests/main.nf.test.snap ++++ modules/nf-core/nanoplot/tests/main.nf.test.snap +@@ -8,14 +8,14 @@ + "id": "test" + }, + [ +- "LengthvsQualityScatterPlot_dot.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "LengthvsQualityScatterPlot_kde.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "NanoPlot-report.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "Non_weightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "Non_weightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "WeightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "WeightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "Yield_By_Length.html:md5,d41d8cd98f00b204e9800998ecf8427e" ++ "test_LengthvsQualityScatterPlot_dot.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_LengthvsQualityScatterPlot_kde.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_NanoPlot-report.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_Non_weightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_Non_weightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_WeightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_WeightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_Yield_By_Length.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], +@@ -27,14 +27,14 @@ + { + "id": "test" + }, +- "NanoStats.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ++ "test_NanoStats.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "3": [ + [ + "NANOPLOT", + "NanoPlot", +- "1.47.0" ++ "1.48.0" + ] + ], + "html": [ +@@ -43,14 +43,14 @@ + "id": "test" + }, + [ +- "LengthvsQualityScatterPlot_dot.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "LengthvsQualityScatterPlot_kde.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "NanoPlot-report.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "Non_weightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "Non_weightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "WeightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "WeightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", +- "Yield_By_Length.html:md5,d41d8cd98f00b204e9800998ecf8427e" ++ "test_LengthvsQualityScatterPlot_dot.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_LengthvsQualityScatterPlot_kde.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_NanoPlot-report.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_Non_weightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_Non_weightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_WeightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_WeightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", ++ "test_Yield_By_Length.html:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + ], +@@ -62,86 +62,86 @@ + { + "id": "test" + }, +- "NanoStats.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ++ "test_NanoStats.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions_nanoplot": [ + [ + "NANOPLOT", + "NanoPlot", +- "1.47.0" ++ "1.48.0" + ] + ] + } + ], +- "timestamp": "2026-06-12T16:20:34.912757", ++ "timestamp": "2026-10-01T14:41:02.306096412", + "meta": { + "nf-test": "0.9.4", +- "nextflow": "26.04.1" ++ "nextflow": "26.04.3" + } + }, + "NanoPlot FASTQ": { + "content": [ + [ +- "LengthvsQualityScatterPlot_dot.html", +- "LengthvsQualityScatterPlot_kde.html", +- "NanoPlot-report.html", +- "Non_weightedHistogramReadlength.html", +- "Non_weightedLogTransformed_HistogramReadlength.html", +- "WeightedHistogramReadlength.html", +- "WeightedLogTransformed_HistogramReadlength.html", +- "Yield_By_Length.html" ++ "test_LengthvsQualityScatterPlot_dot.html", ++ "test_LengthvsQualityScatterPlot_kde.html", ++ "test_NanoPlot-report.html", ++ "test_Non_weightedHistogramReadlength.html", ++ "test_Non_weightedLogTransformed_HistogramReadlength.html", ++ "test_WeightedHistogramReadlength.html", ++ "test_WeightedLogTransformed_HistogramReadlength.html", ++ "test_Yield_By_Length.html" + ], +- "NanoStats.txt", ++ "test_NanoStats.txt", + { + "versions_nanoplot": [ + [ + "NANOPLOT", + "NanoPlot", +- "1.47.0" ++ "1.48.0" + ] + ] + } + ], +- "timestamp": "2026-06-12T16:20:27.977813", ++ "timestamp": "2026-10-01T14:40:55.99406515", + "meta": { + "nf-test": "0.9.4", +- "nextflow": "26.04.1" ++ "nextflow": "26.04.3" + } + }, + "NanoPlot summary": { + "content": [ + [ +- "ActivePores_Over_Time.html", +- "ActivityMap_ReadsPerChannel.html", +- "CumulativeYieldPlot_Gigabases.html", +- "CumulativeYieldPlot_NumberOfReads.html", +- "NanoPlot-report.html", +- "Non_weightedHistogramReadlength.html", +- "Non_weightedLogTransformed_HistogramReadlength.html", +- "NumberOfReads_Over_Time.html", +- "TimeLengthViolinPlot.html", +- "TimeQualityViolinPlot.html", +- "TimeSequencingSpeed_ViolinPlot.html", +- "WeightedHistogramReadlength.html", +- "WeightedLogTransformed_HistogramReadlength.html", +- "Yield_By_Length.html" ++ "test_ActivePores_Over_Time.html", ++ "test_ActivityMap_ReadsPerChannel.html", ++ "test_CumulativeYieldPlot_Gigabases.html", ++ "test_CumulativeYieldPlot_NumberOfReads.html", ++ "test_NanoPlot-report.html", ++ "test_Non_weightedHistogramReadlength.html", ++ "test_Non_weightedLogTransformed_HistogramReadlength.html", ++ "test_NumberOfReads_Over_Time.html", ++ "test_TimeLengthViolinPlot.html", ++ "test_TimeQualityViolinPlot.html", ++ "test_TimeSequencingSpeed_ViolinPlot.html", ++ "test_WeightedHistogramReadlength.html", ++ "test_WeightedLogTransformed_HistogramReadlength.html", ++ "test_Yield_By_Length.html" + ], +- "NanoStats.txt", ++ "test_NanoStats.txt", + { + "versions_nanoplot": [ + [ + "NANOPLOT", + "NanoPlot", +- "1.47.0" ++ "1.48.0" + ] + ] + } + ], +- "timestamp": "2026-06-12T16:20:17.864744", ++ "timestamp": "2026-10-01T14:40:45.220473935", + "meta": { + "nf-test": "0.9.4", +- "nextflow": "26.04.1" ++ "nextflow": "26.04.3" + } + } +-}+} + +************************************************************ diff --git a/modules/nf-core/nanoplot/tests/main.nf.test b/modules/nf-core/nanoplot/tests/main.nf.test index f5163bab..b0ff9142 100644 --- a/modules/nf-core/nanoplot/tests/main.nf.test +++ b/modules/nf-core/nanoplot/tests/main.nf.test @@ -31,7 +31,7 @@ nextflow_process { file(process.out.txt[0][1]).name, // file(process.out.png[0][1]).name, optional // file(process.out.log[0][1]).name, name contains date - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) @@ -62,7 +62,7 @@ nextflow_process { file(process.out.txt[0][1]).name, // file(process.out.png[0][1]).name, optional // file(process.out.log[0][1]).name, name contains date - process.out.versions + process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) diff --git a/modules/nf-core/nanoplot/tests/main.nf.test.snap b/modules/nf-core/nanoplot/tests/main.nf.test.snap index 527d6605..d7b63e90 100644 --- a/modules/nf-core/nanoplot/tests/main.nf.test.snap +++ b/modules/nf-core/nanoplot/tests/main.nf.test.snap @@ -8,14 +8,14 @@ "id": "test" }, [ - "LengthvsQualityScatterPlot_dot.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "LengthvsQualityScatterPlot_kde.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "NanoPlot-report.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "Non_weightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "Non_weightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "WeightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "WeightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "Yield_By_Length.html:md5,d41d8cd98f00b204e9800998ecf8427e" + "test_LengthvsQualityScatterPlot_dot.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_LengthvsQualityScatterPlot_kde.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_NanoPlot-report.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_Non_weightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_Non_weightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_WeightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_WeightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_Yield_By_Length.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] ], @@ -27,11 +27,15 @@ { "id": "test" }, - "NanoStats.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test_NanoStats.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "3": [ - "versions.yml:md5,1dcb7bfda282d447bdf7fff8f83e0076" + [ + "NANOPLOT", + "NanoPlot", + "1.48.0" + ] ], "html": [ [ @@ -39,14 +43,14 @@ "id": "test" }, [ - "LengthvsQualityScatterPlot_dot.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "LengthvsQualityScatterPlot_kde.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "NanoPlot-report.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "Non_weightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "Non_weightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "WeightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "WeightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "Yield_By_Length.html:md5,d41d8cd98f00b204e9800998ecf8427e" + "test_LengthvsQualityScatterPlot_dot.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_LengthvsQualityScatterPlot_kde.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_NanoPlot-report.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_Non_weightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_Non_weightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_WeightedHistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_WeightedLogTransformed_HistogramReadlength.html:md5,d41d8cd98f00b204e9800998ecf8427e", + "test_Yield_By_Length.html:md5,d41d8cd98f00b204e9800998ecf8427e" ] ] ], @@ -58,70 +62,86 @@ { "id": "test" }, - "NanoStats.txt:md5,d41d8cd98f00b204e9800998ecf8427e" + "test_NanoStats.txt:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,1dcb7bfda282d447bdf7fff8f83e0076" + "versions_nanoplot": [ + [ + "NANOPLOT", + "NanoPlot", + "1.48.0" + ] ] } ], + "timestamp": "2026-10-01T14:41:02.306096412", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-29T11:06:10.291228562" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "NanoPlot FASTQ": { "content": [ [ - "LengthvsQualityScatterPlot_dot.html", - "LengthvsQualityScatterPlot_kde.html", - "NanoPlot-report.html", - "Non_weightedHistogramReadlength.html", - "Non_weightedLogTransformed_HistogramReadlength.html", - "WeightedHistogramReadlength.html", - "WeightedLogTransformed_HistogramReadlength.html", - "Yield_By_Length.html" + "test_LengthvsQualityScatterPlot_dot.html", + "test_LengthvsQualityScatterPlot_kde.html", + "test_NanoPlot-report.html", + "test_Non_weightedHistogramReadlength.html", + "test_Non_weightedLogTransformed_HistogramReadlength.html", + "test_WeightedHistogramReadlength.html", + "test_WeightedLogTransformed_HistogramReadlength.html", + "test_Yield_By_Length.html" ], - "NanoStats.txt", - [ - "versions.yml:md5,1dcb7bfda282d447bdf7fff8f83e0076" - ] + "test_NanoStats.txt", + { + "versions_nanoplot": [ + [ + "NANOPLOT", + "NanoPlot", + "1.48.0" + ] + ] + } ], + "timestamp": "2026-10-01T14:40:55.99406515", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-28T16:57:47.664858879" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } }, "NanoPlot summary": { "content": [ [ - "ActivePores_Over_Time.html", - "ActivityMap_ReadsPerChannel.html", - "CumulativeYieldPlot_Gigabases.html", - "CumulativeYieldPlot_NumberOfReads.html", - "NanoPlot-report.html", - "Non_weightedHistogramReadlength.html", - "Non_weightedLogTransformed_HistogramReadlength.html", - "NumberOfReads_Over_Time.html", - "TimeLengthViolinPlot.html", - "TimeQualityViolinPlot.html", - "TimeSequencingSpeed_ViolinPlot.html", - "WeightedHistogramReadlength.html", - "WeightedLogTransformed_HistogramReadlength.html", - "Yield_By_Length.html" + "test_ActivePores_Over_Time.html", + "test_ActivityMap_ReadsPerChannel.html", + "test_CumulativeYieldPlot_Gigabases.html", + "test_CumulativeYieldPlot_NumberOfReads.html", + "test_NanoPlot-report.html", + "test_Non_weightedHistogramReadlength.html", + "test_Non_weightedLogTransformed_HistogramReadlength.html", + "test_NumberOfReads_Over_Time.html", + "test_TimeLengthViolinPlot.html", + "test_TimeQualityViolinPlot.html", + "test_TimeSequencingSpeed_ViolinPlot.html", + "test_WeightedHistogramReadlength.html", + "test_WeightedLogTransformed_HistogramReadlength.html", + "test_Yield_By_Length.html" ], - "NanoStats.txt", - [ - "versions.yml:md5,1dcb7bfda282d447bdf7fff8f83e0076" - ] + "test_NanoStats.txt", + { + "versions_nanoplot": [ + [ + "NANOPLOT", + "NanoPlot", + "1.48.0" + ] + ] + } ], + "timestamp": "2026-10-01T14:40:45.220473935", "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" - }, - "timestamp": "2025-08-28T16:57:35.686031695" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } -} \ No newline at end of file +} diff --git a/modules/nf-core/pigz/uncompress/main.nf b/modules/nf-core/pigz/uncompress/main.nf index 51162836..ac41f80c 100644 --- a/modules/nf-core/pigz/uncompress/main.nf +++ b/modules/nf-core/pigz/uncompress/main.nf @@ -4,16 +4,16 @@ process PIGZ_UNCOMPRESS { //stageInMode 'copy' // this directive can be set in case the original input should be kept conda "conda-forge::pigz" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/pigz:2.8': - 'biocontainers/pigz:2.8' }" + 'quay.io/biocontainers/pigz:2.8' }" input: tuple val(meta), path(zip) output: tuple val(meta), path("${uncompressed_filename}") , emit: file - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('pigz'), eval('pigz --version 2>&1 | sed "s/^.*pigz[[:space:]]*//"'), emit: versions_pigz, topic: versions when: task.ext.when == null || task.ext.when @@ -29,20 +29,11 @@ process PIGZ_UNCOMPRESS { $args \\ ${zip} - cat <<-END_VERSIONS > versions.yml - "${task.process}": - pigz: \$(echo \$(pigz --version 2>&1) | sed 's/^.*pigz[[:space:]]*//' ) - END_VERSIONS """ stub: uncompressed_filename = zip.toString() - '.gz' """ touch $uncompressed_filename - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - pigz: \$(echo \$(pigz --version 2>&1) | sed 's/^.*pigz[[:space:]]*//' ) - END_VERSIONS """ } diff --git a/modules/nf-core/pigz/uncompress/meta.yml b/modules/nf-core/pigz/uncompress/meta.yml index bbc6a945..eb493d70 100644 --- a/modules/nf-core/pigz/uncompress/meta.yml +++ b/modules/nf-core/pigz/uncompress/meta.yml @@ -36,12 +36,27 @@ output: description: File to compress pattern: "*" ontologies: [] + versions_pigz: + - - ${task.process}: + type: string + description: The name of the process + - pigz: + type: string + description: The name of the tool + - pigz --version 2>&1 | sed "s/^.*pigz[[:space:]]*//": + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - pigz: + type: string + description: The name of the tool + - pigz --version 2>&1 | sed "s/^.*pigz[[:space:]]*//": + type: eval + description: The expression to obtain the version of the tool + authors: - "@lrauschning" diff --git a/modules/nf-core/pigz/uncompress/tests/main.nf.test.snap b/modules/nf-core/pigz/uncompress/tests/main.nf.test.snap index 384a574f..82f42d3c 100644 --- a/modules/nf-core/pigz/uncompress/tests/main.nf.test.snap +++ b/modules/nf-core/pigz/uncompress/tests/main.nf.test.snap @@ -11,7 +11,11 @@ ] ], "1": [ - "versions.yml:md5,e0c776f8d0bfa6d8e49e02aeb0728355" + [ + "PIGZ_UNCOMPRESS", + "pigz", + "2.8" + ] ], "file": [ [ @@ -21,16 +25,20 @@ "test_1.fastq:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,e0c776f8d0bfa6d8e49e02aeb0728355" + "versions_pigz": [ + [ + "PIGZ_UNCOMPRESS", + "pigz", + "2.8" + ] ] } ], + "timestamp": "2026-03-12T14:09:47.6005396", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.5" - }, - "timestamp": "2025-03-11T11:24:38.144787334" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } }, "Should run without failures": { "content": [ @@ -44,7 +52,11 @@ ] ], "1": [ - "versions.yml:md5,e0c776f8d0bfa6d8e49e02aeb0728355" + [ + "PIGZ_UNCOMPRESS", + "pigz", + "2.8" + ] ], "file": [ [ @@ -54,15 +66,19 @@ "test_1.fastq:md5,4161df271f9bfcd25d5845a1e220dbec" ] ], - "versions": [ - "versions.yml:md5,e0c776f8d0bfa6d8e49e02aeb0728355" + "versions_pigz": [ + [ + "PIGZ_UNCOMPRESS", + "pigz", + "2.8" + ] ] } ], + "timestamp": "2026-03-12T14:09:40.395155052", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.5" - }, - "timestamp": "2025-03-11T11:23:17.620127425" + "nf-test": "0.9.4", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/cat/environment.yml b/modules/nf-core/samtools/cat/environment.yml index 89e12a64..6a19f168 100644 --- a/modules/nf-core/samtools/cat/environment.yml +++ b/modules/nf-core/samtools/cat/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.22.1 + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/cat/main.nf b/modules/nf-core/samtools/cat/main.nf index 6df7aa76..f0c9680e 100644 --- a/modules/nf-core/samtools/cat/main.nf +++ b/modules/nf-core/samtools/cat/main.nf @@ -1,38 +1,37 @@ process SAMTOOLS_CAT { - tag "$meta.id" + tag "${meta.id}" label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : - 'biocontainers/samtools:1.22.1--h96c455f_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: - tuple val(meta), path(input_files, stageAs: "?/*") + tuple val(meta), path(input_files, stageAs: "?/*") output: - tuple val(meta), path("${prefix}.bam") , optional:true, emit: bam - tuple val(meta), path("${prefix}.cram"), optional:true, emit: cram + tuple val(meta), path("${prefix}.bam"), optional: true, emit: bam + tuple val(meta), path("${prefix}.cram"), optional: true, emit: cram tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools - when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() """ samtools \\ cat \\ - $args \\ + ${args} \\ -o ${prefix}.${file_type} \\ - $input_files + ${input_files} """ stub: - prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() """ touch ${prefix}.${file_type} diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test b/modules/nf-core/samtools/cat/tests/main.nf.test index 7910f65d..88ac8dee 100644 --- a/modules/nf-core/samtools/cat/tests/main.nf.test +++ b/modules/nf-core/samtools/cat/tests/main.nf.test @@ -25,11 +25,13 @@ nextflow_process { then { assert process.success - assert snapshot(process.out).match() + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } + ) } } - test("bams_stub") { + test("bams - stub") { options "-stub" @@ -47,7 +49,9 @@ nextflow_process { then { assert process.success - assert snapshot(process.out).match() + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } + ) } } } diff --git a/modules/nf-core/samtools/cat/tests/main.nf.test.snap b/modules/nf-core/samtools/cat/tests/main.nf.test.snap index 1b341c7b..e0033dcf 100644 --- a/modules/nf-core/samtools/cat/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/cat/tests/main.nf.test.snap @@ -1,31 +1,13 @@ { - "bams_stub": { + "bams": { "content": [ { - "0": [ - [ - { - "id": "test" - }, - "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - - ], - "2": [ - [ - "SAMTOOLS_CAT", - "samtools", - "1.22.1" - ] - ], "bam": [ [ { "id": "test" }, - "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.bam:md5,5212d30e394eb12342b79bf33494f8bf" ] ], "cram": [ @@ -35,44 +17,26 @@ [ "SAMTOOLS_CAT", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T15:49:02.066757629", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-04T14:52:02.961050797" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, - "bams": { + "bams - stub": { "content": [ { - "0": [ - [ - { - "id": "test" - }, - "test.bam:md5,ceee7822994e89e29d42cad03be8d54b" - ] - ], - "1": [ - - ], - "2": [ - [ - "SAMTOOLS_CAT", - "samtools", - "1.22.1" - ] - ], "bam": [ [ { "id": "test" }, - "test.bam:md5,ceee7822994e89e29d42cad03be8d54b" + "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], "cram": [ @@ -82,15 +46,15 @@ [ "SAMTOOLS_CAT", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T15:49:06.815930151", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-04T14:51:56.905803472" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/environment.yml b/modules/nf-core/samtools/faidx/environment.yml index 89e12a64..6a19f168 100644 --- a/modules/nf-core/samtools/faidx/environment.yml +++ b/modules/nf-core/samtools/faidx/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.22.1 + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/faidx/main.nf b/modules/nf-core/samtools/faidx/main.nf index 97bfb578..3925ffaf 100644 --- a/modules/nf-core/samtools/faidx/main.nf +++ b/modules/nf-core/samtools/faidx/main.nf @@ -1,21 +1,21 @@ process SAMTOOLS_FAIDX { - tag "$fasta" + tag "${fasta}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : - 'biocontainers/samtools:1.22.1--h96c455f_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(fasta), path(fai) val get_sizes output: - tuple val(meta), path ("*.{fa,fasta}") , emit: fa, optional: true - tuple val(meta), path ("*.sizes") , emit: sizes, optional: true - tuple val(meta), path ("*.fai") , emit: fai, optional: true - tuple val(meta), path ("*.gzi") , emit: gzi, optional: true + tuple val(meta), path("*.{fa,fasta}"), emit: fa, optional: true + tuple val(meta), path("*.sizes"), emit: sizes, optional: true + tuple val(meta), path("*.fai"), emit: fai, optional: true + tuple val(meta), path("*.gzi"), emit: gzi, optional: true tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools when: @@ -27,8 +27,8 @@ process SAMTOOLS_FAIDX { """ samtools \\ faidx \\ - $fasta \\ - $args + ${fasta} \\ + ${args} ${get_sizes_command} """ diff --git a/modules/nf-core/samtools/faidx/meta.yml b/modules/nf-core/samtools/faidx/meta.yml index 80aae1da..529f7a26 100644 --- a/modules/nf-core/samtools/faidx/meta.yml +++ b/modules/nf-core/samtools/faidx/meta.yml @@ -110,3 +110,4 @@ authors: maintainers: - "@maxulysse" - "@phue" + - "@matthdsm" diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test b/modules/nf-core/samtools/faidx/tests/main.nf.test index 9a86db86..d6693071 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test @@ -31,7 +31,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(sanitizeOutput(process.out)).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -57,7 +57,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(sanitizeOutput(process.out)).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -83,14 +83,15 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(sanitizeOutput(process.out)).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } - test("test_samtools_faidx_stub_fasta") { + test("test_samtools_faidx_fasta - stub") { options "-stub" + when { params { module_args = '-o extract.fa' @@ -110,14 +111,15 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(sanitizeOutput(process.out)).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } - test("test_samtools_faidx_stub_fai") { + test("test_samtools_faidx_fai - stub") { options "-stub" + when { params { module_args = '' @@ -137,7 +139,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(sanitizeOutput(process.out)).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -163,7 +165,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(sanitizeOutput(process.out)).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -189,7 +191,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(sanitizeOutput(process.out)).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -217,7 +219,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(sanitizeOutput(process.out)).match()} + { assert snapshot(sanitizeOutput(process.out)).match()} ) } } @@ -249,5 +251,4 @@ nextflow_process { ) } } - } diff --git a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap index 41697444..1d37b20b 100644 --- a/modules/nf-core/samtools/faidx/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/faidx/tests/main.nf.test.snap @@ -1,4 +1,39 @@ { + "test_samtools_faidx_fasta - stub": { + "content": [ + { + "fa": [ + [ + { + "id": "test" + }, + "extract.fa:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "fai": [ + + ], + "gzi": [ + + ], + "sizes": [ + + ], + "versions_samtools": [ + [ + "SAMTOOLS_FAIDX", + "samtools", + "1.24" + ] + ] + } + ], + "timestamp": "2026-07-10T16:03:49.706821725", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } + }, "test_samtools_faidx": { "content": [ { @@ -23,16 +58,16 @@ [ "SAMTOOLS_FAIDX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:57:29.747964", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:39:12.541649151" + "nextflow": "25.10.4" + } }, "test_samtools_faidx_get_sizes_bgzip - stub": { "content": [ @@ -68,16 +103,16 @@ [ "SAMTOOLS_FAIDX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:58:10.04235", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:41:44.040426987" + "nextflow": "25.10.4" + } }, "test_samtools_faidx_get_sizes": { "content": [ @@ -108,16 +143,16 @@ [ "SAMTOOLS_FAIDX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:57:55.552612", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:47:03.653912015" + "nextflow": "25.10.4" + } }, "test_samtools_faidx_bgzip": { "content": [ @@ -148,16 +183,16 @@ [ "SAMTOOLS_FAIDX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:57:34.346045", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:50:04.023566795" + "nextflow": "25.10.4" + } }, "test_samtools_faidx_fasta": { "content": [ @@ -183,16 +218,16 @@ [ "SAMTOOLS_FAIDX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:57:39.136814", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:39:23.529404162" + "nextflow": "25.10.4" + } }, "test_samtools_faidx_get_sizes - stub": { "content": [ @@ -223,53 +258,18 @@ [ "SAMTOOLS_FAIDX", "samtools", - "1.22.1" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:41:39.039834304" - }, - "test_samtools_faidx_stub_fasta": { - "content": [ - { - "fa": [ - [ - { - "id": "test" - }, - "extract.fa:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "fai": [ - - ], - "gzi": [ - - ], - "sizes": [ - - ], - "versions_samtools": [ - [ - "SAMTOOLS_FAIDX", - "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:58:05.200994", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:39:28.961701609" + "nextflow": "25.10.4" + } }, - "test_samtools_faidx_stub_fai": { + "test_samtools_faidx_fai - stub": { "content": [ { "fa": [ @@ -293,16 +293,16 @@ [ "SAMTOOLS_FAIDX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T16:03:54.799114575", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:39:34.471028474" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, "test_samtools_faidx_get_sizes_bgzip": { "content": [ @@ -338,15 +338,15 @@ [ "SAMTOOLS_FAIDX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:58:00.460031", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-10T15:39:45.439016495" + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/faidx/tests/nextflow.config b/modules/nf-core/samtools/faidx/tests/nextflow.config index 202c036e..b3c4d0cb 100644 --- a/modules/nf-core/samtools/faidx/tests/nextflow.config +++ b/modules/nf-core/samtools/faidx/tests/nextflow.config @@ -3,5 +3,4 @@ process { withName: SAMTOOLS_FAIDX { ext.args = params.module_args } - } diff --git a/modules/nf-core/samtools/flagstat/environment.yml b/modules/nf-core/samtools/flagstat/environment.yml index 89e12a64..6a19f168 100644 --- a/modules/nf-core/samtools/flagstat/environment.yml +++ b/modules/nf-core/samtools/flagstat/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.22.1 + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/flagstat/main.nf b/modules/nf-core/samtools/flagstat/main.nf index 0cfb7e87..f4a0b3b3 100644 --- a/modules/nf-core/samtools/flagstat/main.nf +++ b/modules/nf-core/samtools/flagstat/main.nf @@ -1,11 +1,11 @@ process SAMTOOLS_FLAGSTAT { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : - 'biocontainers/samtools:1.22.1--h96c455f_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(bam), path(bai) @@ -23,7 +23,7 @@ process SAMTOOLS_FLAGSTAT { samtools \\ flagstat \\ --threads ${task.cpus} \\ - $bam \\ + ${bam} \\ > ${prefix}.flagstat """ diff --git a/modules/nf-core/samtools/flagstat/meta.yml b/modules/nf-core/samtools/flagstat/meta.yml index 8caa1bcc..f658acdd 100644 --- a/modules/nf-core/samtools/flagstat/meta.yml +++ b/modules/nf-core/samtools/flagstat/meta.yml @@ -73,3 +73,4 @@ authors: - "@drpatelh" maintainers: - "@drpatelh" + - "@matthdsm" diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test b/modules/nf-core/samtools/flagstat/tests/main.nf.test index 3b648a37..dbf7c996 100644 --- a/modules/nf-core/samtools/flagstat/tests/main.nf.test +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test @@ -13,7 +13,7 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) @@ -23,9 +23,9 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } @@ -37,7 +37,7 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) @@ -47,9 +47,9 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, - { assert snapshot(process.out).match() } + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } diff --git a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap index f5c882da..f572957b 100644 --- a/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/flagstat/tests/main.nf.test.snap @@ -2,22 +2,6 @@ "BAM - stub": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.flagstat:md5,67394650dbae96d1a4fcc70484822159" - ] - ], - "1": [ - [ - "SAMTOOLS_FLAGSTAT", - "samtools", - "1.22.1" - ] - ], "flagstat": [ [ { @@ -31,36 +15,20 @@ [ "SAMTOOLS_FLAGSTAT", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T15:53:38.552555213", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-03T11:14:30.820969684" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, "BAM": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.flagstat:md5,4f7ffd1e6a5e85524d443209ac97d783" - ] - ], - "1": [ - [ - "SAMTOOLS_FLAGSTAT", - "samtools", - "1.22.1" - ] - ], "flagstat": [ [ { @@ -74,15 +42,15 @@ [ "SAMTOOLS_FLAGSTAT", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T15:53:33.931611374", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-03T11:14:25.581619424" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/idxstats/environment.yml b/modules/nf-core/samtools/idxstats/environment.yml index 89e12a64..6a19f168 100644 --- a/modules/nf-core/samtools/idxstats/environment.yml +++ b/modules/nf-core/samtools/idxstats/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.22.1 + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/idxstats/main.nf b/modules/nf-core/samtools/idxstats/main.nf index d5b70a7f..58d31062 100644 --- a/modules/nf-core/samtools/idxstats/main.nf +++ b/modules/nf-core/samtools/idxstats/main.nf @@ -1,11 +1,11 @@ process SAMTOOLS_IDXSTATS { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : - 'biocontainers/samtools:1.22.1--h96c455f_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(bam), path(bai) @@ -24,8 +24,8 @@ process SAMTOOLS_IDXSTATS { # Note: --threads value represents *additional* CPUs to allocate (total CPUs = 1 + --threads). samtools \\ idxstats \\ - --threads ${task.cpus-1} \\ - $bam \\ + --threads ${task.cpus - 1} \\ + ${bam} \\ > ${prefix}.idxstats """ diff --git a/modules/nf-core/samtools/idxstats/meta.yml b/modules/nf-core/samtools/idxstats/meta.yml index fd153841..0f9fb3d7 100644 --- a/modules/nf-core/samtools/idxstats/meta.yml +++ b/modules/nf-core/samtools/idxstats/meta.yml @@ -73,3 +73,4 @@ authors: - "@drpatelh" maintainers: - "@drpatelh" + - "@matthdsm" diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test b/modules/nf-core/samtools/idxstats/tests/main.nf.test index c990cd55..cc204d6a 100644 --- a/modules/nf-core/samtools/idxstats/tests/main.nf.test +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test @@ -13,7 +13,7 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) @@ -23,8 +23,8 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, + assert process.success + assertAll( { assert snapshot( process.out.idxstats, process.out.findAll { key, val -> key.startsWith('versions') } @@ -34,11 +34,13 @@ nextflow_process { } test("bam - stub") { + options "-stub" + when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) @@ -48,12 +50,13 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, + assert process.success + assertAll( { assert snapshot( process.out.idxstats, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) } - }} + } +} diff --git a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap index 19a54c7c..2dba681c 100644 --- a/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/idxstats/tests/main.nf.test.snap @@ -15,16 +15,16 @@ [ "SAMTOOLS_IDXSTATS", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:59:41.877526", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-02T16:21:46.333090477" + "nextflow": "25.10.4" + } }, "bam": { "content": [ @@ -42,15 +42,15 @@ [ "SAMTOOLS_IDXSTATS", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T08:59:34.725514", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-02T16:21:41.063422521" + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/index/environment.yml b/modules/nf-core/samtools/index/environment.yml index 89e12a64..6a19f168 100644 --- a/modules/nf-core/samtools/index/environment.yml +++ b/modules/nf-core/samtools/index/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.22.1 + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/index/main.nf b/modules/nf-core/samtools/index/main.nf index e2a0e56d..4dd9311a 100644 --- a/modules/nf-core/samtools/index/main.nf +++ b/modules/nf-core/samtools/index/main.nf @@ -1,19 +1,17 @@ process SAMTOOLS_INDEX { - tag "$meta.id" + tag "${meta.id}" label 'process_low' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : - 'biocontainers/samtools:1.22.1--h96c455f_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(input) output: - tuple val(meta), path("*.bai") , optional:true, emit: bai - tuple val(meta), path("*.csi") , optional:true, emit: csi - tuple val(meta), path("*.crai"), optional:true, emit: crai + tuple val(meta), path("*.{bai,csi,crai}"), emit: index tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), emit: versions_samtools, topic: versions when: @@ -25,14 +23,15 @@ process SAMTOOLS_INDEX { samtools \\ index \\ -@ ${task.cpus} \\ - $args \\ - $input + ${args} \\ + ${input} """ stub: def args = task.ext.args ?: '' - def extension = file(input).getExtension() == 'cram' ? - "crai" : args.contains("-c") ? "csi" : "bai" + def extension = file(input).getExtension() == 'cram' + ? "crai" + : args.contains("-c") ? "csi" : "bai" """ touch ${input}.${extension} """ diff --git a/modules/nf-core/samtools/index/meta.yml b/modules/nf-core/samtools/index/meta.yml index c6d4ce25..d4938bcd 100644 --- a/modules/nf-core/samtools/index/meta.yml +++ b/modules/nf-core/samtools/index/meta.yml @@ -28,38 +28,16 @@ input: description: input file ontologies: [] output: - bai: + index: - - meta: type: map description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.bai": + - "*.{bai,csi,crai}": type: file description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" - ontologies: [] - csi: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.csi": - type: file - description: CSI index file - pattern: "*.{csi}" - ontologies: [] - crai: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - "*.crai": - type: file - description: BAM/CRAM/SAM index file - pattern: "*.{bai,crai,sai}" + pattern: "*.{bai,csi,crai}" ontologies: [] versions_samtools: - - ${task.process}: @@ -87,6 +65,6 @@ authors: - "@ewels" - "@maxulysse" maintainers: - - "@drpatelh" - "@ewels" - "@maxulysse" + - "@matthdsm" diff --git a/modules/nf-core/samtools/index/tests/csi.nextflow.config b/modules/nf-core/samtools/index/tests/csi.nextflow.config index 0ed260ef..4af6d82c 100644 --- a/modules/nf-core/samtools/index/tests/csi.nextflow.config +++ b/modules/nf-core/samtools/index/tests/csi.nextflow.config @@ -3,5 +3,4 @@ process { withName: SAMTOOLS_INDEX { ext.args = '-c' } - } diff --git a/modules/nf-core/samtools/index/tests/main.nf.test b/modules/nf-core/samtools/index/tests/main.nf.test index c96cec86..d62d2d0f 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test +++ b/modules/nf-core/samtools/index/tests/main.nf.test @@ -12,7 +12,7 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ]) @@ -21,10 +21,10 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, + assert process.success + assertAll( { assert snapshot( - process.out.bai, + process.out.index, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) @@ -35,7 +35,7 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) ]) @@ -44,10 +44,10 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, + assert process.success + assertAll( { assert snapshot( - process.out.crai, + process.out.index, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) @@ -60,7 +60,7 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ]) @@ -69,10 +69,10 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, + assert process.success + assertAll( { assert snapshot( - file(process.out.csi[0][1]).name, + file(process.out.index[0][1]).name, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) @@ -80,11 +80,13 @@ nextflow_process { } test("bai - stub") { + options "-stub" + when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ]) @@ -93,10 +95,10 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, + assert process.success + assertAll( { assert snapshot( - process.out.bai, + process.out.index, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) @@ -104,11 +106,13 @@ nextflow_process { } test("crai - stub") { + options "-stub" + when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true) ]) @@ -117,10 +121,10 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, + assert process.success + assertAll( { assert snapshot( - process.out.crai, + process.out.index, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) @@ -128,13 +132,15 @@ nextflow_process { } test("csi - stub") { + options "-stub" + config "./csi.nextflow.config" when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true) ]) @@ -143,10 +149,10 @@ nextflow_process { } then { - assertAll ( - { assert process.success }, + assert process.success + assertAll( { assert snapshot( - process.out.csi, + process.out.index, process.out.findAll { key, val -> key.startsWith('versions') } ).match() } ) diff --git a/modules/nf-core/samtools/index/tests/main.nf.test.snap b/modules/nf-core/samtools/index/tests/main.nf.test.snap index afc8a1ff..7aec3823 100644 --- a/modules/nf-core/samtools/index/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/index/tests/main.nf.test.snap @@ -15,16 +15,16 @@ [ "SAMTOOLS_INDEX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T09:00:39.171613", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:52:10.030187" + "nextflow": "25.10.4" + } }, "crai - stub": { "content": [ @@ -42,16 +42,16 @@ [ "SAMTOOLS_INDEX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T09:00:32.838795", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:51:59.125484" + "nextflow": "25.10.4" + } }, "bai - stub": { "content": [ @@ -69,16 +69,16 @@ [ "SAMTOOLS_INDEX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T09:00:25.255379", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:51:47.277042" + "nextflow": "25.10.4" + } }, "csi": { "content": [ @@ -88,16 +88,16 @@ [ "SAMTOOLS_INDEX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T09:00:18.414839", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:51:35.758735" + "nextflow": "25.10.4" + } }, "crai": { "content": [ @@ -115,16 +115,16 @@ [ "SAMTOOLS_INDEX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T09:00:13.571297", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:51:26.561965" + "nextflow": "25.10.4" + } }, "bai": { "content": [ @@ -142,15 +142,15 @@ [ "SAMTOOLS_INDEX", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-03-19T09:00:06.767362", "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:51:15.299035" + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/merge/environment.yml b/modules/nf-core/samtools/merge/environment.yml index 946bb362..6a19f168 100644 --- a/modules/nf-core/samtools/merge/environment.yml +++ b/modules/nf-core/samtools/merge/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.23.1 + - bioconda::htslib=1.24 # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.23.1 + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/merge/main.nf b/modules/nf-core/samtools/merge/main.nf index abb56f9f..e73c11b0 100644 --- a/modules/nf-core/samtools/merge/main.nf +++ b/modules/nf-core/samtools/merge/main.nf @@ -4,17 +4,18 @@ process SAMTOOLS_MERGE { conda "${moduleDir}/environment.yml" container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/8c/8c5d2818c8b9f58e1fba77ce219fdaf32087ae53e857c4a496402978af26e78c/data' - : 'community.wave.seqera.io/library/htslib_samtools:1.23.1--5b6bb4ede7e612e5'}" + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(input_files, stageAs: "?/*"), path(index_files, stageAs: "?/*") tuple val(meta2), path(fasta), path(fai), path(gzi) + val index_format output: tuple val(meta), path("${prefix}.bam"), optional: true, emit: bam tuple val(meta), path("${prefix}.cram"), optional: true, emit: cram - tuple val(meta), path("*.{bai,crai,csi}"), optional: true, emit: index + tuple val(meta), path("${prefix}.${file_type}.{bai,crai,csi}"), optional: true, emit: index tuple val("${task.process}"), val('samtools'), eval("samtools version | sed '1!d;s/.* //'"), topic: versions, emit: versions_samtools when: @@ -23,25 +24,44 @@ process SAMTOOLS_MERGE { script: def args = task.ext.args ?: '' prefix = task.ext.prefix ?: "${meta.id}" - def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() def reference = fasta ? "--reference ${fasta}" : "" + //setting default values + def write_index = "" + def output_file = "${prefix}.${file_type}" + + // Update if index is requested + if (index_format != '' && index_format) { + if (!index_format.matches('bai|csi|crai')) { + error("Index format not one of bai, csi, crai.") + } + write_index = "--write-index" + output_file = "${prefix}.${file_type}##idx##${prefix}.${file_type}.${index_format}" + } """ # Note: --threads value represents *additional* CPUs to allocate (total CPUs = 1 + --threads). samtools \\ merge \\ --threads ${task.cpus - 1} \\ + ${write_index} \\ ${args} \\ ${reference} \\ - ${prefix}.${file_type} \\ + ${output_file} \\ ${input_files} """ stub: - def args = task.ext.args ?: '' - prefix = task.ext.suffix ? "${meta.id}${task.ext.suffix}" : "${meta.id}" - def file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() - def index_type = file_type == "bam" ? "csi" : "crai" - def index = args.contains("--write-index") ? "touch ${prefix}.${index_type}" : "" + prefix = task.ext.prefix ?: "${meta.id}" + file_type = input_files instanceof List ? input_files[0].getExtension() : input_files.getExtension() + + if (index_format) { + if (!index_format.matches('bai|csi|crai')) { + error("Index format not one of bai, csi, crai.") + } + } + + def index = index_format ? "touch ${prefix}.${file_type}.${index_format}" : "" + """ touch ${prefix}.${file_type} ${index} diff --git a/modules/nf-core/samtools/merge/meta.yml b/modules/nf-core/samtools/merge/meta.yml index 66e582e8..28f83140 100644 --- a/modules/nf-core/samtools/merge/meta.yml +++ b/modules/nf-core/samtools/merge/meta.yml @@ -53,6 +53,10 @@ input: (optional) pattern: "*.gzi" ontologies: [] + - index_format: + type: string + description: Index format to use (optional) + pattern: "bai|csi|crai" output: bam: - - meta: @@ -82,9 +86,9 @@ output: description: | Groovy Map containing sample information e.g. [ id:'test', single_end:false ] - - "*.{bai,crai,csi}": + - "${prefix}.${file_type}.{bai,crai,csi}": type: file - description: BAM index file (optional) + description: BAM/CRAM index file, generated when index_format is specified. Can only be generated if the input files are coordinate sorted. pattern: "*.{bai,crai,csi}" ontologies: [] versions_samtools: diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test b/modules/nf-core/samtools/merge/tests/main.nf.test index b3caf864..b2d2719e 100644 --- a/modules/nf-core/samtools/merge/tests/main.nf.test +++ b/modules/nf-core/samtools/merge/tests/main.nf.test @@ -14,7 +14,36 @@ nextflow_process { when { params { - module_args = '--write-index' + module_args = '' + } + process { + """ + input[0] = [ + [ id:'test'], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ], + [] + ] + input[1] = [[],[],[],[]] + input[2] = '' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out, readsMD5Keys: ['bam', 'cram'], unstableKeys: ['index'])).match() } + ) + } + } + + test("bams_with_index") { + + when { + params { + module_args = '' } process { """ @@ -26,6 +55,7 @@ nextflow_process { [] ] input[1] = [[],[],[],[]] + input[2] = 'bai' """ } } @@ -33,13 +63,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot( - bam(process.out.bam[0][1]).getReadsMD5(), - file(process.out.index[0][1]).name, - process.out.cram, - process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + { assert snapshot(sanitizeOutput(process.out, readsMD5Keys: ['bam', 'cram'], unstableKeys: ['index'])).match() } ) } } @@ -48,7 +72,7 @@ nextflow_process { when { params { - module_args = '--write-index --output-fmt cram,version=3.0' + module_args = '--output-fmt cram,version=3.0' } process { """ @@ -65,21 +89,51 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true), [] ] + input[2] = '' """ } } then { - def fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/homo_sapiens/genome/genome.fasta' + def fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/homo_sapiens/genome/genome.fasta' assert process.success assertAll( - { assert snapshot( - cram(process.out.cram[0][1], fasta).getReadsMD5(), - process.out.bam, - file(process.out.index[0][1]).name, - process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + { assert snapshot(sanitizeOutput(process.out, readsMD5Keys: ['bam', 'cram'], referenceFasta: fasta, unstableKeys: ['index'])).match() } + ) + } + } + + test("crams_fastq_with_index") { + + when { + params { + module_args = '--output-fmt cram,version=3.0' + } + process { + """ + input[0] = [ + [ id:'test' ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.sorted.cram', checkIfExists: true) ], + [ file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test2.paired_end.sorted.cram.crai', checkIfExists: true) ] + ] + input[1] = [ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true), + [] + ] + input[2] = 'crai' + """ + } + } + + then { + def fasta = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/genomics/homo_sapiens/genome/genome.fasta' + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out, readsMD5Keys: ['bam', 'cram'], referenceFasta: fasta, unstableKeys: ['index'])).match() } ) } } @@ -88,7 +142,7 @@ nextflow_process { when { params { - module_args = '--write-index' + module_args = '' } process { """ @@ -105,6 +159,7 @@ nextflow_process { file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.gz.fai', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.gz.gzi', checkIfExists: true) ] + input[2] = '' """ } } @@ -112,14 +167,8 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot( - //nft-bam doesn't like the fasta.gz - file(process.out.cram[0][1]).name, - process.out.bam, - file(process.out.index[0][1]).name, - process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + // nft-bam doesn't like the fasta.gz + { assert snapshot(sanitizeOutput(process.out, unstableKeys: ['cram', 'index'])).match() } ) } } @@ -138,6 +187,7 @@ nextflow_process { [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam.bai', checkIfExists: true) ] ] input[1] = [[],[],[],[]] + input[2] = '' """ } } @@ -145,13 +195,7 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot( - bam(process.out.bam[0][1]).getReadsMD5(), - process.out.index, - process.out.cram, - process.out.findAll { key, val -> key.startsWith("versions") } - ).match() - } + { assert snapshot(sanitizeOutput(process.out, readsMD5Keys: ['bam', 'cram'], unstableKeys: ['index'])).match() } ) } } @@ -174,6 +218,7 @@ nextflow_process { [] ] input[1] = [[],[],[],[]] + input[2] = '' """ } } @@ -181,7 +226,38 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match() } + ) + } + } + + test("bams_with_index - stub") { + + options "-stub" + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [ id:'test' ], + [ file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.methylated.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.single_end.sorted.bam', checkIfExists: true) ], + [] + ] + input[1] = [[],[],[],[]] + input[2] = 'bai' + """ + } + } + + then { + assert process.success + assertAll( + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } @@ -204,6 +280,7 @@ nextflow_process { [] ] input[1] = [[],[],[],[]] + input[2] = '' """ } } @@ -211,9 +288,8 @@ nextflow_process { then { assert process.success assertAll( - { assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } - } diff --git a/modules/nf-core/samtools/merge/tests/main.nf.test.snap b/modules/nf-core/samtools/merge/tests/main.nf.test.snap index 77ed449d..335cb11f 100644 --- a/modules/nf-core/samtools/merge/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/merge/tests/main.nf.test.snap @@ -1,28 +1,44 @@ { - "bams_no_index - stub": { + "crams_fastq_with_index": { "content": [ { - "0": [ + "bam": [ + + ], + "cram": [ [ { "id": "test" }, - "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" + "test.cram:md5Reads,c4525b95f05075208347295e6a1fb232" ] ], - "1": [ - - ], - "2": [ - + "index": [ + [ + { + "id": "test" + }, + "test.cram.crai" + ] ], - "3": [ + "versions_samtools": [ [ "SAMTOOLS_MERGE", "samtools", - "1.23.1" + "1.24" ] - ], + ] + } + ], + "timestamp": "2026-09-09T11:10:07.534461198", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + }, + "bams_no_index - stub": { + "content": [ + { "bam": [ [ { @@ -41,44 +57,53 @@ [ "SAMTOOLS_MERGE", "samtools", - "1.23.1" + "1.24" ] ] } ], + "timestamp": "2026-09-03T09:11:29.482421751", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-03-19T09:01:31.816184" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, "crams_fastq": { "content": [ - "c4525b95f05075208347295e6a1fb232", - [ - - ], - "test.cram.crai", { + "bam": [ + + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram:md5Reads,c4525b95f05075208347295e6a1fb232" + ] + ], + "index": [ + + ], "versions_samtools": [ [ "SAMTOOLS_MERGE", "samtools", - "1.23.1" + "1.24" ] ] } ], + "timestamp": "2026-09-09T11:09:57.706286788", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-03-19T09:01:05.719443" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, "bams - stub": { "content": [ { - "0": [ + "bam": [ [ { "id": "test" @@ -86,19 +111,67 @@ "test.bam:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "1": [ + "cram": [ ], - "2": [ + "index": [ ], - "3": [ + "versions_samtools": [ [ "SAMTOOLS_MERGE", "samtools", - "1.23.1" + "1.24" + ] + ] + } + ], + "timestamp": "2026-09-03T09:11:14.363250467", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + }, + "bams_with_index": { + "content": [ + { + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5Reads,47c9f174d8c8afc1a13c75ee4b5e5d43" + ] + ], + "cram": [ + + ], + "index": [ + [ + { + "id": "test" + }, + "test.bam.bai" ] ], + "versions_samtools": [ + [ + "SAMTOOLS_MERGE", + "samtools", + "1.24" + ] + ] + } + ], + "timestamp": "2026-09-09T11:09:46.435827871", + "meta": { + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } + }, + "bams_with_index - stub": { + "content": [ + { "bam": [ [ { @@ -111,92 +184,122 @@ ], "index": [ - + [ + { + "id": "test" + }, + "test.bam.bai:md5,d41d8cd98f00b204e9800998ecf8427e" + ] ], "versions_samtools": [ [ "SAMTOOLS_MERGE", "samtools", - "1.23.1" + "1.24" ] ] } ], + "timestamp": "2026-09-03T09:11:21.996350217", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-03-19T09:01:24.795562" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, "bams": { "content": [ - "47c9f174d8c8afc1a13c75ee4b5e5d43", - "test.bam.csi", - [ - - ], { + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5Reads,47c9f174d8c8afc1a13c75ee4b5e5d43" + ] + ], + "cram": [ + + ], + "index": [ + + ], "versions_samtools": [ [ "SAMTOOLS_MERGE", "samtools", - "1.23.1" + "1.24" ] ] } ], + "timestamp": "2026-09-09T11:09:37.632940185", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-03-19T09:00:59.536803" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, "crams_fastq_gz": { "content": [ - "test.cram", - [ - - ], - "test.cram.crai", { + "bam": [ + + ], + "cram": [ + [ + { + "id": "test" + }, + "test.cram" + ] + ], + "index": [ + + ], "versions_samtools": [ [ "SAMTOOLS_MERGE", "samtools", - "1.23.1" + "1.24" ] ] } ], + "timestamp": "2026-09-09T11:10:18.14175564", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-03-19T09:01:11.614088" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, "bam": { "content": [ - "8da8fc1099a955e3ceb198665350e766", - [ - - ], - [ - - ], { + "bam": [ + [ + { + "id": "test" + }, + "test.bam:md5Reads,8da8fc1099a955e3ceb198665350e766" + ] + ], + "cram": [ + + ], + "index": [ + + ], "versions_samtools": [ [ "SAMTOOLS_MERGE", "samtools", - "1.23.1" + "1.24" ] ] } ], + "timestamp": "2026-09-09T11:10:26.057564606", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-03-19T09:01:17.736424" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } } } \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/environment.yml b/modules/nf-core/samtools/stats/environment.yml index 89e12a64..6a19f168 100644 --- a/modules/nf-core/samtools/stats/environment.yml +++ b/modules/nf-core/samtools/stats/environment.yml @@ -5,6 +5,6 @@ channels: - bioconda dependencies: # renovate: datasource=conda depName=bioconda/htslib - - bioconda::htslib=1.22.1 + - bioconda::htslib=1.24 # renovate: datasource=conda depName=bioconda/samtools - - bioconda::samtools=1.22.1 + - bioconda::samtools=1.24 diff --git a/modules/nf-core/samtools/stats/main.nf b/modules/nf-core/samtools/stats/main.nf index 40dbf661..928c5dbe 100644 --- a/modules/nf-core/samtools/stats/main.nf +++ b/modules/nf-core/samtools/stats/main.nf @@ -1,15 +1,15 @@ process SAMTOOLS_STATS { - tag "$meta.id" + tag "${meta.id}" label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/samtools:1.22.1--h96c455f_0' : - 'biocontainers/samtools:1.22.1--h96c455f_0' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/e9/e994bf4eb3731150511a14f5706b7bdfd64df1b6d40898fff334286c027e0859/data' + : 'community.wave.seqera.io/library/htslib_samtools:1.24--d697cfb9dce007cd'}" input: tuple val(meta), path(input), path(input_index) - tuple val(meta2), path(fasta) + tuple val(meta2), path(fasta), path(fai) output: tuple val(meta), path("*.stats"), emit: stats @@ -19,8 +19,8 @@ process SAMTOOLS_STATS { task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" def reference = fasta ? "--reference ${fasta}" : "" """ samtools \\ diff --git a/modules/nf-core/samtools/stats/meta.yml b/modules/nf-core/samtools/stats/meta.yml index 5c59cce4..5fd7e76d 100644 --- a/modules/nf-core/samtools/stats/meta.yml +++ b/modules/nf-core/samtools/stats/meta.yml @@ -41,7 +41,12 @@ input: - fasta: type: file description: Reference file the CRAM was created with (optional) - pattern: "*.{fasta,fa}" + pattern: "*.{fasta,fa,fna}" + ontologies: [] + - fai: + type: file + description: FASTA ref index file + pattern: "*.{fasta,fa,fna}.fai" ontologies: [] output: stats: @@ -86,3 +91,4 @@ maintainers: - "@drpatelh" - "@FriederikeHanssen" - "@ramprasadn" + - "@matthdsm" diff --git a/modules/nf-core/samtools/stats/samtools-stats.diff b/modules/nf-core/samtools/stats/samtools-stats.diff index f6a5b76c..22adae94 100644 --- a/modules/nf-core/samtools/stats/samtools-stats.diff +++ b/modules/nf-core/samtools/stats/samtools-stats.diff @@ -1,18 +1,18 @@ Changes in component 'nf-core/samtools/stats' +'modules/nf-core/samtools/stats/environment.yml' is unchanged 'modules/nf-core/samtools/stats/meta.yml' is unchanged Changes in 'samtools/stats/main.nf': --- modules/nf-core/samtools/stats/main.nf +++ modules/nf-core/samtools/stats/main.nf @@ -1,6 +1,6 @@ process SAMTOOLS_STATS { - tag "$meta.id" + tag "${meta.id}" - label 'process_single' + label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container -'modules/nf-core/samtools/stats/environment.yml' is unchanged 'modules/nf-core/samtools/stats/tests/main.nf.test' is unchanged 'modules/nf-core/samtools/stats/tests/main.nf.test.snap' is unchanged ************************************************************ diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test b/modules/nf-core/samtools/stats/tests/main.nf.test index 5bc89309..5059e296 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test +++ b/modules/nf-core/samtools/stats/tests/main.nf.test @@ -14,20 +14,20 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) ]) - input[1] = [[],[]] + input[1] = [[],[],[]] """ } } then { + assert process.success assertAll( - {assert process.success}, - {assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } @@ -37,23 +37,24 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) ]) - input[1] = Channel.of([ + input[1] = channel.of([ [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ]) """ } } then { + assert process.success assertAll( - {assert process.success}, - {assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } @@ -65,20 +66,20 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam.bai', checkIfExists: true) ]) - input[1] = [[],[]] + input[1] = [[],[],[]] """ } } then { + assert process.success assertAll( - {assert process.success}, - {assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } @@ -90,23 +91,24 @@ nextflow_process { when { process { """ - input[0] = Channel.of([ + input[0] = channel.of([ [ id:'test', single_end:false ], // meta map file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram', checkIfExists: true), file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/cram/test.paired_end.recalibrated.sorted.cram.crai', checkIfExists: true) ]) - input[1] = Channel.of([ + input[1] = channel.of([ [ id:'genome' ], // meta map - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/chr21/sequence/genome.fasta.fai', checkIfExists: true) ]) """ } } then { + assert process.success assertAll( - {assert process.success}, - {assert snapshot(process.out).match()} + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } diff --git a/modules/nf-core/samtools/stats/tests/main.nf.test.snap b/modules/nf-core/samtools/stats/tests/main.nf.test.snap index 94d981b2..12eb0e47 100644 --- a/modules/nf-core/samtools/stats/tests/main.nf.test.snap +++ b/modules/nf-core/samtools/stats/tests/main.nf.test.snap @@ -2,65 +2,33 @@ "cram": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.stats:md5,f4aec6c41b73d34ac2fc6b3253aa39ba" - ] - ], - "1": [ - [ - "SAMTOOLS_STATS", - "samtools", - "1.22.1" - ] - ], "stats": [ [ { "id": "test", "single_end": false }, - "test.stats:md5,f4aec6c41b73d34ac2fc6b3253aa39ba" + "test.stats:md5,f8d811a048831b83812d55073566e67f" ] ], "versions_samtools": [ [ "SAMTOOLS_STATS", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T16:10:52.814596882", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.0" - }, - "timestamp": "2025-11-01T02:27:18.460724" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, "bam - stub": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - "SAMTOOLS_STATS", - "samtools", - "1.22.1" - ] - ], "stats": [ [ { @@ -74,36 +42,20 @@ [ "SAMTOOLS_STATS", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T16:10:57.131242371", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.0" - }, - "timestamp": "2025-11-01T02:27:30.245839" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, "cram - stub": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.stats:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - "SAMTOOLS_STATS", - "samtools", - "1.22.1" - ] - ], "stats": [ [ { @@ -117,58 +69,42 @@ [ "SAMTOOLS_STATS", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T16:11:08.400007304", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.0" - }, - "timestamp": "2025-11-01T02:27:39.041649" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } }, "bam": { "content": [ { - "0": [ - [ - { - "id": "test", - "single_end": false - }, - "test.stats:md5,41ba8ad30ddb598dadb177a54c222ab9" - ] - ], - "1": [ - [ - "SAMTOOLS_STATS", - "samtools", - "1.22.1" - ] - ], "stats": [ [ { "id": "test", "single_end": false }, - "test.stats:md5,41ba8ad30ddb598dadb177a54c222ab9" + "test.stats:md5,2313c93da60ff8673a793b14a0886987" ] ], "versions_samtools": [ [ "SAMTOOLS_STATS", "samtools", - "1.22.1" + "1.24" ] ] } ], + "timestamp": "2026-07-10T16:10:38.846072426", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.0" - }, - "timestamp": "2025-11-01T02:26:55.988241" + "nf-test": "0.9.5", + "nextflow": "26.04.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/savana/cna/meta.yml b/modules/nf-core/savana/cna/meta.yml index a3b271e0..73d658dc 100644 --- a/modules/nf-core/savana/cna/meta.yml +++ b/modules/nf-core/savana/cna/meta.yml @@ -183,32 +183,32 @@ output: pattern: "*kbp_bin_ref_*_*.bed" ontologies: - edam: "http://edamontology.org/format_3003" # BED - allele_counts: + no_fit: - - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1' ]` - - ${prefix}_allele_counts_hetSNPs.bed: + - No_fit_found_PARAMS.tsv: type: file - description: Allele counts for heterozygous SNPs (optional) - pattern: "*_allele_counts_hetSNPs.bed" + description: Report containing rejected candidate purity/ploidy solutions when no fit is found. + pattern: "No_fit_found_PARAMS.tsv" + optional: true ontologies: - - edam: "http://edamontology.org/format_3003" # BED - - no_fit: + - edam: "http://edamontology.org/format_3475" # TSV + allele_counts: - - meta: type: map description: | Groovy Map containing sample information e.g. `[ id:'sample1' ]` - - No_fit_found_PARAMS.tsv: + - ${prefix}_allele_counts_hetSNPs.bed: type: file - description: Report containing rejected candidate purity/ploidy solutions when no fit is found. - pattern: "No_fit_found_PARAMS.tsv" - optional: true + description: Allele counts for heterozygous SNPs (optional) + pattern: "*_allele_counts_hetSNPs.bed" ontologies: - - edam: "http://edamontology.org/format_3475" # TSV + - edam: "http://edamontology.org/format_3003" # BED + versions_savana: - - ${task.process}: type: string diff --git a/modules/nf-core/savana/cna/savana-cna.diff b/modules/nf-core/savana/cna/savana-cna.diff index f991f416..436d8c3d 100644 --- a/modules/nf-core/savana/cna/savana-cna.diff +++ b/modules/nf-core/savana/cna/savana-cna.diff @@ -1,4 +1,7 @@ -Changes in module 'nf-core/savana/cna' +Changes in component 'nf-core/savana/cna' +'modules/nf-core/savana/cna/environment.yml' is unchanged +'modules/nf-core/savana/cna/meta.yml' is unchanged +Changes in 'savana/cna/main.nf': --- modules/nf-core/savana/cna/main.nf +++ modules/nf-core/savana/cna/main.nf @@ -39,14 +39,12 @@ @@ -17,4 +20,7 @@ Changes in module 'nf-core/savana/cna' --sample ${prefix} \\ --cna_threads ${task.cpus} \\ +'modules/nf-core/savana/cna/tests/nextflow.config' is unchanged +'modules/nf-core/savana/cna/tests/main.nf.test' is unchanged +'modules/nf-core/savana/cna/tests/main.nf.test.snap' is unchanged ************************************************************ diff --git a/modules/nf-core/severus/environment.yml b/modules/nf-core/severus/environment.yml index d657c525..c2579af1 100644 --- a/modules/nf-core/severus/environment.yml +++ b/modules/nf-core/severus/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::severus=1.6 + - bioconda::severus=1.7 diff --git a/modules/nf-core/severus/main.nf b/modules/nf-core/severus/main.nf index 95fe7912..f37891c7 100644 --- a/modules/nf-core/severus/main.nf +++ b/modules/nf-core/severus/main.nf @@ -3,9 +3,9 @@ process SEVERUS { label 'process_medium' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/severus:1.6--pyhdfd78af_0': - 'biocontainers/severus:1.6--pyhdfd78af_0' }" + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/8f/8fd0858ee067f8b95246e57683a7431bc126929b4203fbda8e315cd94d2570ad/data': + 'community.wave.seqera.io/library/severus:1.7--d16d59609ef4ee7d' }" input: tuple val(meta), path(target_input), path(target_index), path(control_input), path(control_index), path(vcf), path(tbi) @@ -20,15 +20,14 @@ process SEVERUS { tuple val(meta), path("${prefix}/severus_collaped_dup.bed") , emit: collapsed_dup , optional: true tuple val(meta), path("${prefix}/severus_LOH.bed") , emit: loh , optional: true tuple val(meta), path("${prefix}/all_SVs/severus_all.vcf.gz") , emit: all_vcf , optional: true - tuple val(meta), path("${prefix}/all_SVs/breakpoint_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true - tuple val(meta), path("${prefix}/all_SVs/breakpoint_clusters.tsv") , emit: all_breakpoints_clusters , optional: true - tuple val(meta), path("${prefix}/all_SVs/plots/severus_*.html") , emit: all_plots , optional: true + tuple val(meta), path("${prefix}/all_SVs/breakpoint_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true + tuple val(meta), path("${prefix}/all_SVs/breakpoint_clusters.tsv") , emit: all_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/all_SVs/plots/severus*.html") , emit: all_plots , optional: true tuple val(meta), path("${prefix}/somatic_SVs/severus_somatic.vcf.gz") , emit: somatic_vcf , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/breakpoint_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true - tuple val(meta), path("${prefix}/somatic_SVs/breakpoint_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true - path "versions.yml" , emit: versions - + tuple val(meta), path("${prefix}/somatic_SVs/breakpoint_clusters_list.tsv") , emit: somatic_breakpoints_clusters_list, optional: true + tuple val(meta), path("${prefix}/somatic_SVs/breakpoint_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/somatic_SVs/plots/severus*.html") , emit: somatic_plots , optional: true + tuple val("${task.process}"), val('severus'), eval("severus --version"), emit: versions_severus, topic: versions when: task.ext.when == null || task.ext.when @@ -56,11 +55,6 @@ process SEVERUS { tabix -p vcf ${prefix}/somatic_SVs/severus_somatic.vcf.gz bgzip ${prefix}/all_SVs/severus_all.vcf tabix -p vcf ${prefix}/all_SVs/severus_all.vcf.gz - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - severus: \$(severus --version) - END_VERSIONS """ stub: @@ -87,10 +81,5 @@ process SEVERUS { touch ${prefix}/somatic_SVs/breakpoints_clusters.tsv touch ${prefix}/somatic_SVs/plots/severus_0.html touch ${prefix}/somatic_SVs/plots/severus_1.html - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - severus: \$(severus --version) - END_VERSIONS """ } diff --git a/modules/nf-core/severus/meta.yml b/modules/nf-core/severus/meta.yml index b39df3fd..f03b19cd 100644 --- a/modules/nf-core/severus/meta.yml +++ b/modules/nf-core/severus/meta.yml @@ -1,7 +1,6 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: "severus" -description: Severus is a somatic structural variation (SV) caller for long reads - (both PacBio and ONT) +description: Severus is a somatic structural variation (SV) caller for long + reads (both PacBio and ONT) keywords: - structural - variation @@ -15,9 +14,9 @@ tools: documentation: "https://github.com/KolmogorovLab/Severus" tool_dev_url: "https://github.com/KolmogorovLab/Severus" doi: "10.1101/2024.03.22.24304756" - licence: ["BSD-3-clause"] + licence: + - "BSD-3-clause" identifier: "" - input: - - meta: type: map @@ -26,8 +25,8 @@ input: e.g. `[ id:'sample1', single_end:false ]` - target_input: type: file - description: path to one or multiple target BAM/CRAM files (e.g. tumor, must - be indexed) + description: path to one or multiple target BAM/CRAM files (e.g. tumor, + must be indexed) pattern: "*.{bam,cram}" ontologies: [] - target_index: @@ -37,7 +36,8 @@ input: ontologies: [] - control_input: type: file - description: path to the control BAM/CRAM file (e.g. normal, must be indexed) + description: path to the control BAM/CRAM file (e.g. normal, must be + indexed) pattern: "*.{bam,cram}" ontologies: [] - control_index: @@ -47,8 +47,8 @@ input: ontologies: [] - vcf: type: file - description: path to vcf file used for phasing (if using haplotype specific - SV calling + description: path to vcf file used for phasing (if using haplotype + specific SV calling pattern: "*.{vcf,vcf.gz}" ontologies: [] - - meta2: @@ -67,7 +67,6 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/severus.log: type: file description: | @@ -79,7 +78,6 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/read_qual.txt: type: file description: | @@ -91,7 +89,6 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/breakpoints_double.csv: type: file description: | @@ -103,10 +100,10 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/read_alignments: type: file description: | + A directory containing read alignments in BAM format for all samples, intended for an advanced user. pattern: "${prefix}/read_alignments" ontologies: [] read_ids: @@ -114,22 +111,21 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/read_ids.csv: type: file description: | Contains supporting read IDs for each SV - pattern: "${prefix}/read_ids" + pattern: "${prefix}/read_ids.csv" ontologies: [] collapsed_dup: - - meta: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/severus_collaped_dup.bed: type: file description: | + BED file containing collapsed duplications pattern: "${prefix}/severus_collaped_dup" ontologies: [] loh: @@ -137,7 +133,6 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/severus_LOH.bed: type: file description: | @@ -149,18 +144,17 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/all_SVs/severus_all.vcf: type: map description: | VCF file containing somatic and germline structural variants pattern: "${prefix}/all_SVs/severus_all.vcf" + ontologies: [] all_breakpoints_clusters_list: - - meta: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/all_SVs/breakpoints_clusters_list.tsv: type: file description: | @@ -172,7 +166,6 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/all_SVs/breakpoints_clusters.tsv: type: file description: | @@ -184,19 +177,17 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - - ${prefix}/all_SVs/plots/severus_*.html: + - ${prefix}/all_SVs/plots/severus*.html: type: file description: | - Plotly graph containing of somatic and germline breakpoint clusters - pattern: "${prefix}/all_SVs/plots/*.html" + HTML files containing plots for all SVs + pattern: "${prefix}/all_SVs/plots/severus*.html" ontologies: [] somatic_vcf: - - meta: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/somatic_SVs/severus_somatic.vcf: type: file description: | @@ -208,7 +199,6 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/somatic_SVs/breakpoints_clusters_list.tsv: type: file description: | @@ -220,7 +210,6 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - ${prefix}/somatic_SVs/breakpoints_clusters.tsv: type: file description: | @@ -232,20 +221,33 @@ output: type: map description: | Groovy Map containing sample information - pattern: "${prefix}/severus.log" - - ${prefix}/somatic_SVs/plots/severus_*.html: + - ${prefix}/somatic_SVs/plots/severus*.html: type: file description: | - Plotly graph of somatic breakpoint clusters - pattern: "${prefix}/somatic_SVs/plots/*.html" + HTML files containing plots for somatic SVs + pattern: "${prefix}/somatic_SVs/plots/severus*.html" ontologies: [] + versions_severus: + - - ${task.process}: + type: string + description: The name of the process + - severus: + type: string + description: The name of the tool + - severus --version: + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - severus: + type: string + description: The name of the tool + - severus --version: + type: eval + description: The expression to obtain the version of the tool authors: - "@fellen31" maintainers: diff --git a/modules/nf-core/severus/severus.diff b/modules/nf-core/severus/severus.diff index bf4cdb0a..133f591c 100644 --- a/modules/nf-core/severus/severus.diff +++ b/modules/nf-core/severus/severus.diff @@ -1,10 +1,11 @@ Changes in component 'nf-core/severus' +'modules/nf-core/severus/environment.yml' is unchanged 'modules/nf-core/severus/meta.yml' is unchanged Changes in 'severus/main.nf': --- modules/nf-core/severus/main.nf +++ modules/nf-core/severus/main.nf @@ -8,8 +8,8 @@ - 'biocontainers/severus:1.6--pyhdfd78af_0' }" + 'community.wave.seqera.io/library/severus:1.7--d16d59609ef4ee7d' }" input: - tuple val(meta), path(target_input), path(target_index), path(control_input), path(control_index), path(vcf) @@ -22,19 +23,19 @@ Changes in 'severus/main.nf': - tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true - tuple val(meta), path("${prefix}/all_SVs/breakpoints_clusters.tsv") , emit: all_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/all_SVs/severus_all.vcf.gz") , emit: all_vcf , optional: true -+ tuple val(meta), path("${prefix}/all_SVs/breakpoint_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true -+ tuple val(meta), path("${prefix}/all_SVs/breakpoint_clusters.tsv") , emit: all_breakpoints_clusters , optional: true - tuple val(meta), path("${prefix}/all_SVs/plots/severus_*.html") , emit: all_plots , optional: true ++ tuple val(meta), path("${prefix}/all_SVs/breakpoint_clusters_list.tsv") , emit: all_breakpoints_clusters_list , optional: true ++ tuple val(meta), path("${prefix}/all_SVs/breakpoint_clusters.tsv") , emit: all_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/all_SVs/plots/severus*.html") , emit: all_plots , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/severus_somatic.vcf") , emit: somatic_vcf , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true - tuple val(meta), path("${prefix}/somatic_SVs/breakpoints_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/somatic_SVs/severus_somatic.vcf.gz") , emit: somatic_vcf , optional: true -+ tuple val(meta), path("${prefix}/somatic_SVs/breakpoint_clusters_list.tsv"), emit: somatic_breakpoints_clusters_list, optional: true -+ tuple val(meta), path("${prefix}/somatic_SVs/breakpoint_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true - tuple val(meta), path("${prefix}/somatic_SVs/plots/severus_*.html") , emit: somatic_plots , optional: true - path "versions.yml" , emit: versions - -@@ -39,15 +39,23 @@ ++ tuple val(meta), path("${prefix}/somatic_SVs/breakpoint_clusters_list.tsv") , emit: somatic_breakpoints_clusters_list, optional: true ++ tuple val(meta), path("${prefix}/somatic_SVs/breakpoint_clusters.tsv") , emit: somatic_breakpoints_clusters , optional: true + tuple val(meta), path("${prefix}/somatic_SVs/plots/severus*.html") , emit: somatic_plots , optional: true + tuple val("${task.process}"), val('severus'), eval("severus --version"), emit: versions_severus, topic: versions + when: +@@ -38,15 +38,23 @@ def control = control_input ? "--control-bam ${control_input}" : "" def vntr_bed = bed ? "--vntr-bed ${bed}" : "" def phasing_vcf = vcf ? "--phasing-vcf ${vcf}" : "" @@ -55,12 +56,11 @@ Changes in 'severus/main.nf': + tabix -p vcf ${prefix}/somatic_SVs/severus_somatic.vcf.gz + bgzip ${prefix}/all_SVs/severus_all.vcf + tabix -p vcf ${prefix}/all_SVs/severus_all.vcf.gz + """ - cat <<-END_VERSIONS > versions.yml - "${task.process}": + stub: -'modules/nf-core/severus/environment.yml' is unchanged +'modules/nf-core/severus/tests/nextflow.config' is unchanged 'modules/nf-core/severus/tests/main.nf.test' is unchanged 'modules/nf-core/severus/tests/main.nf.test.snap' is unchanged -'modules/nf-core/severus/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/severus/tests/main.nf.test b/modules/nf-core/severus/tests/main.nf.test index 2ec25e89..a6ab42ed 100644 --- a/modules/nf-core/severus/tests/main.nf.test +++ b/modules/nf-core/severus/tests/main.nf.test @@ -36,10 +36,10 @@ nextflow_process { process.out.read_qual, process.out.breakpoints_double, path(process.out.all_vcf.get(0).get(1)).vcf.summary, - //path(process.out.all_vcf.get(0).get(1)).vcf.variantsMD5, - lint fails because of emtpy md5sum + file(process.out.all_vcf.get(0).get(1)).name, process.out.all_breakpoints_clusters_list, process.out.all_breakpoints_clusters, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions")} ).match() } ) } @@ -75,13 +75,13 @@ nextflow_process { process.out.read_qual, process.out.breakpoints_double, path(process.out.all_vcf.get(0).get(1)).vcf.summary, - path(process.out.all_vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.all_vcf.get(0).get(1)).name, process.out.all_breakpoints_clusters_list, process.out.all_breakpoints_clusters, process.out.somatic_vcf, process.out.somatic_breakpoints_clusters_list, process.out.somatic_breakpoints_clusters, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions")} ).match() } ) } @@ -117,13 +117,13 @@ nextflow_process { process.out.read_qual, process.out.breakpoints_double, path(process.out.all_vcf.get(0).get(1)).vcf.summary, - path(process.out.all_vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.all_vcf.get(0).get(1)).name, process.out.all_breakpoints_clusters_list, process.out.all_breakpoints_clusters, process.out.somatic_vcf, process.out.somatic_breakpoints_clusters_list, process.out.somatic_breakpoints_clusters, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions")} ).match() } ) } @@ -162,13 +162,13 @@ nextflow_process { process.out.read_qual, process.out.breakpoints_double, path(process.out.all_vcf.get(0).get(1)).vcf.summary, - path(process.out.all_vcf.get(0).get(1)).vcf.variantsMD5, + file(process.out.all_vcf.get(0).get(1)).name, process.out.all_breakpoints_clusters_list, process.out.all_breakpoints_clusters, process.out.somatic_vcf, process.out.somatic_breakpoints_clusters_list, process.out.somatic_breakpoints_clusters, - process.out.versions + process.out.findAll { key, val -> key.startsWith("versions")} ).match() } ) } @@ -199,7 +199,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } diff --git a/modules/nf-core/severus/tests/main.nf.test.snap b/modules/nf-core/severus/tests/main.nf.test.snap index a6b09ed1..1390faa0 100644 --- a/modules/nf-core/severus/tests/main.nf.test.snap +++ b/modules/nf-core/severus/tests/main.nf.test.snap @@ -7,7 +7,7 @@ { "id": "test" }, - "read_qual.txt:md5,93f74117a9c031a9f7f3e56fcfc4b02c" + "read_qual.txt:md5,737d8d3b64cd9e3d3cdad7eeb42acfa2" ] ], [ @@ -15,25 +15,32 @@ { "id": "test" }, - "breakpoints_double.csv:md5,7cb071eb787217599ce780b443d9f203" + "breakpoints_double.csv:md5,a0fdb9d522587e7b088b3a61fce99843" ] ], - "VcfFile [chromosomes=[chr22], sampleCount=1, variantCount=1, phased=false, phasedAutodetect=false]", + "VcfFile [chromosomes=[], sampleCount=1, variantCount=0, phased=true, phasedAutodetect=true]", + "severus_all.vcf", [ ], [ ], - [ - "versions.yml:md5,ad073554f79b24f01b7eeb44b7e70008" - ] + { + "versions_severus": [ + [ + "SEVERUS", + "severus", + "1.7" + ] + ] + } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.4" }, - "timestamp": "2025-10-23T10:30:12.366674714" + "timestamp": "2026-03-20T09:51:39.082838258" }, "homo_sapiens - [ bam, bai, bam, bai, vcf ], [[],[]]": { "content": [ @@ -43,7 +50,7 @@ { "id": "test" }, - "read_qual.txt:md5,c3964c3cb18fe94df02d8b5b1d46b0f8" + "read_qual.txt:md5,6ac7dbccd5a9a368d0b5a451987f5997" ] ], [ @@ -51,11 +58,11 @@ { "id": "test" }, - "breakpoints_double.csv:md5,c3c4c8b8737458c898d2ab73cc726a73" + "breakpoints_double.csv:md5,9da006f58d1e19ad6f8d40ecd4423e81" ] ], - "VcfFile [chromosomes=[chr22], sampleCount=2, variantCount=1, phased=false, phasedAutodetect=false]", - "467023c532e1c5a9df93d98a0ec92255", + "VcfFile [chromosomes=[], sampleCount=2, variantCount=0, phased=true, phasedAutodetect=true]", + "severus_all.vcf", [ ], @@ -67,7 +74,7 @@ { "id": "test" }, - "severus_somatic.vcf:md5,d977e35947a1294be9795880c5d7ef14" + "severus_somatic.vcf:md5,7c5041ff21647e7c9828fd74ae14a74e" ] ], [ @@ -76,148 +83,25 @@ [ ], - [ - "versions.yml:md5,ad073554f79b24f01b7eeb44b7e70008" - ] + { + "versions_severus": [ + [ + "SEVERUS", + "severus", + "1.7" + ] + ] + } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.4" }, - "timestamp": "2026-01-26T13:03:25.015885535" + "timestamp": "2026-03-20T09:51:50.959576046" }, "homo_sapiens - [ bam, bai, [], [], [] ], [[],[]] - stub": { "content": [ { - "0": [ - [ - { - "id": "test" - }, - "severus.log:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "1": [ - [ - { - "id": "test" - }, - "read_qual.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "10": [ - [ - { - "id": "test" - }, - [ - "severus_0.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "severus_1.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "11": [ - [ - { - "id": "test" - }, - "severus_somatic.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "12": [ - [ - { - "id": "test" - }, - "breakpoints_clusters_list.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "13": [ - [ - { - "id": "test" - }, - "breakpoints_clusters.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "14": [ - [ - { - "id": "test" - }, - [ - "severus_0.html:md5,d41d8cd98f00b204e9800998ecf8427e", - "severus_1.html:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - "15": [ - "versions.yml:md5,ad073554f79b24f01b7eeb44b7e70008" - ], - "2": [ - [ - { - "id": "test" - }, - "breakpoints_double.csv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "3": [ - [ - { - "id": "test" - }, - "read_alignments:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "4": [ - [ - { - "id": "test" - }, - "read_ids.csv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "5": [ - [ - { - "id": "test" - }, - "severus_collaped_dup.bed:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "6": [ - [ - { - "id": "test" - }, - "severus_LOH.bed:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "7": [ - [ - { - "id": "test" - }, - "severus_all.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "8": [ - [ - { - "id": "test" - }, - "breakpoints_clusters_list.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], - "9": [ - [ - { - "id": "test" - }, - "breakpoints_clusters.tsv:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ], "all_breakpoints_clusters": [ [ { @@ -344,16 +228,20 @@ "severus_somatic.vcf:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "versions": [ - "versions.yml:md5,ad073554f79b24f01b7eeb44b7e70008" + "versions_severus": [ + [ + "SEVERUS", + "severus", + "1.7" + ] ] } ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.4" }, - "timestamp": "2025-10-23T10:30:28.305922677" + "timestamp": "2026-03-20T09:21:20.655520744" }, "homo_sapiens - [ bam, bai, bam, bai, [] ], [[],[]]": { "content": [ @@ -363,7 +251,7 @@ { "id": "test" }, - "read_qual.txt:md5,c3964c3cb18fe94df02d8b5b1d46b0f8" + "read_qual.txt:md5,6ac7dbccd5a9a368d0b5a451987f5997" ] ], [ @@ -371,11 +259,11 @@ { "id": "test" }, - "breakpoints_double.csv:md5,820a478c24ca5a83e122a7e811f8414d" + "breakpoints_double.csv:md5,1490d0ef4ced76dfff24abb01259a360" ] ], - "VcfFile [chromosomes=[chr22], sampleCount=2, variantCount=1, phased=false, phasedAutodetect=false]", - "467023c532e1c5a9df93d98a0ec92255", + "VcfFile [chromosomes=[], sampleCount=2, variantCount=0, phased=true, phasedAutodetect=true]", + "severus_all.vcf", [ ], @@ -387,7 +275,7 @@ { "id": "test" }, - "severus_somatic.vcf:md5,7d69ee117bd032a31166cf2cf7a3ff8c" + "severus_somatic.vcf:md5,db854ee9fd0e30a51dee80913f4096cc" ] ], [ @@ -396,15 +284,21 @@ [ ], - [ - "versions.yml:md5,ad073554f79b24f01b7eeb44b7e70008" - ] + { + "versions_severus": [ + [ + "SEVERUS", + "severus", + "1.7" + ] + ] + } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.4" }, - "timestamp": "2026-01-26T13:03:18.532828432" + "timestamp": "2026-03-20T09:51:45.062652934" }, "homo_sapiens - [ bam, bai, bam, bai, vcf ], [ bed ]": { "content": [ @@ -414,7 +308,7 @@ { "id": "test" }, - "read_qual.txt:md5,8ea4c56f328b82b104702705c06f0731" + "read_qual.txt:md5,dae760b3bbd16d38600088e48a476ce5" ] ], [ @@ -422,11 +316,11 @@ { "id": "test" }, - "breakpoints_double.csv:md5,c3c4c8b8737458c898d2ab73cc726a73" + "breakpoints_double.csv:md5,9da006f58d1e19ad6f8d40ecd4423e81" ] ], - "VcfFile [chromosomes=[chr22], sampleCount=2, variantCount=1, phased=false, phasedAutodetect=false]", - "467023c532e1c5a9df93d98a0ec92255", + "VcfFile [chromosomes=[], sampleCount=2, variantCount=0, phased=true, phasedAutodetect=true]", + "severus_all.vcf", [ ], @@ -438,7 +332,7 @@ { "id": "test" }, - "severus_somatic.vcf:md5,e8f4f5d77f5a17692ce82cde5cd7c833" + "severus_somatic.vcf:md5,ea5df53900c8b0f2722dc3f74fcfcd0c" ] ], [ @@ -447,14 +341,20 @@ [ ], - [ - "versions.yml:md5,ad073554f79b24f01b7eeb44b7e70008" - ] + { + "versions_severus": [ + [ + "SEVERUS", + "severus", + "1.7" + ] + ] + } ], "meta": { "nf-test": "0.9.3", - "nextflow": "25.10.2" + "nextflow": "25.10.4" }, - "timestamp": "2026-01-26T13:03:31.514266729" + "timestamp": "2026-03-20T09:51:56.877807095" } } \ No newline at end of file diff --git a/modules/nf-core/untar/main.nf b/modules/nf-core/untar/main.nf deleted file mode 100644 index b9c324da..00000000 --- a/modules/nf-core/untar/main.nf +++ /dev/null @@ -1,75 +0,0 @@ -process UNTAR { - tag "${archive}" - label 'process_single' - - conda "${moduleDir}/environment.yml" - container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container - ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/52/52ccce28d2ab928ab862e25aae26314d69c8e38bd41ca9431c67ef05221348aa/data' - : 'community.wave.seqera.io/library/coreutils_grep_gzip_lbzip2_pruned:838ba80435a629f8'}" - - input: - tuple val(meta), path(archive) - - output: - tuple val(meta), path("${prefix}"), emit: untar - tuple val("${task.process}"), val('untar'), eval('tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//"'), emit: versions_untar, topic: versions - - when: - task.ext.when == null || task.ext.when - - script: - def args = task.ext.args ?: '' - def args2 = task.ext.args2 ?: '' - prefix = task.ext.prefix ?: (meta.id ? "${meta.id}" : archive.baseName.toString().replaceFirst(/\.tar$/, "")) - - """ - mkdir ${prefix} - - ## Ensures --strip-components only applied when top level of tar contents is a directory - ## If just files or multiple directories, place all in prefix - if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then - tar \\ - -C ${prefix} --strip-components 1 \\ - -xavf \\ - ${args} \\ - ${archive} \\ - ${args2} - else - tar \\ - -C ${prefix} \\ - -xavf \\ - ${args} \\ - ${archive} \\ - ${args2} - fi - - """ - - stub: - prefix = task.ext.prefix ?: (meta.id ? "${meta.id}" : archive.toString().replaceFirst(/\.[^\.]+(.gz)?$/, "")) - """ - mkdir ${prefix} - ## Dry-run untaring the archive to get the files and place all in prefix - if [[ \$(tar -taf ${archive} | grep -o -P "^.*?\\/" | uniq | wc -l) -eq 1 ]]; then - for i in `tar -tf ${archive}`; - do - if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; - then - touch \${i} - else - mkdir -p \${i} - fi - done - else - for i in `tar -tf ${archive}`; - do - if [[ \$(echo "\${i}" | grep -E "/\$") == "" ]]; - then - touch ${prefix}/\${i} - else - mkdir -p ${prefix}/\${i} - fi - done - fi - """ -} diff --git a/modules/nf-core/untar/meta.yml b/modules/nf-core/untar/meta.yml deleted file mode 100644 index 571d8078..00000000 --- a/modules/nf-core/untar/meta.yml +++ /dev/null @@ -1,73 +0,0 @@ -name: untar -description: Extract files from tar, tar.gz, tar.bz2, tar.xz archives -keywords: - - untar - - uncompress - - extract -tools: - - untar: - description: | - Extract tar, tar.gz, tar.bz2, tar.xz files. - documentation: https://www.gnu.org/software/tar/manual/ - licence: ["GPL-3.0-or-later"] - identifier: "" -input: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - - archive: - type: file - description: File to be untarred - pattern: "*.{tar,tar.gz,tar.bz2,tar.xz}" - ontologies: - - edam: http://edamontology.org/format_3981 # TAR format - - edam: http://edamontology.org/format_3989 # GZIP format -output: - untar: - - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - pattern: "*/" - - ${prefix}: - type: map - description: | - Groovy Map containing sample information - e.g. [ id:'test', single_end:false ] - pattern: "*/" - versions_untar: - - - ${task.process}: - type: string - description: The name of the process - - untar: - type: string - description: The name of the tool - - tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//": - type: eval - description: The expression to obtain the version of the tool - -topics: - versions: - - - ${task.process}: - type: string - description: The name of the process - - untar: - type: string - description: The name of the tool - - tar --version 2>&1 | head -1 | sed "s/tar (GNU tar) //; s/ Copyright.*//": - type: eval - description: The expression to obtain the version of the tool - -authors: - - "@joseespinosa" - - "@drpatelh" - - "@matthdsm" - - "@jfy133" -maintainers: - - "@joseespinosa" - - "@drpatelh" - - "@matthdsm" - - "@jfy133" diff --git a/modules/nf-core/untar/tests/main.nf.test b/modules/nf-core/untar/tests/main.nf.test deleted file mode 100644 index fde8db16..00000000 --- a/modules/nf-core/untar/tests/main.nf.test +++ /dev/null @@ -1,97 +0,0 @@ -nextflow_process { - - name "Test Process UNTAR" - script "../main.nf" - process "UNTAR" - tag "modules" - tag "modules_nfcore" - tag "untar" - - test("test_untar") { - - when { - process { - """ - input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot( - process.out.untar, - process.out.findAll { key, val -> key.startsWith('versions') } - ).match() }, - ) - } - } - - test("test_untar_onlyfiles") { - - when { - process { - """ - input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot( - process.out.untar, - process.out.findAll { key, val -> key.startsWith('versions') } - ).match() }, - ) - } - } - - test("test_untar - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ [], file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/db/kraken2.tar.gz', checkIfExists: true) ] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot( - process.out.untar, - process.out.findAll { key, val -> key.startsWith('versions') } - ).match() }, - ) - } - } - - test("test_untar_onlyfiles - stub") { - - options "-stub" - - when { - process { - """ - input[0] = [ [], file(params.modules_testdata_base_path + 'generic/tar/hello.tar.gz', checkIfExists: true) ] - """ - } - } - - then { - assertAll ( - { assert process.success }, - { assert snapshot( - process.out.untar, - process.out.findAll { key, val -> key.startsWith('versions') } - ).match() }, - ) - } - } -} diff --git a/modules/nf-core/untar/tests/main.nf.test.snap b/modules/nf-core/untar/tests/main.nf.test.snap deleted file mode 100644 index 51a414dd..00000000 --- a/modules/nf-core/untar/tests/main.nf.test.snap +++ /dev/null @@ -1,118 +0,0 @@ -{ - "test_untar_onlyfiles": { - "content": [ - [ - [ - [ - - ], - [ - "hello.txt:md5,e59ff97941044f85df5297e1c302d260" - ] - ] - ], - { - "versions_untar": [ - [ - "UNTAR", - "untar", - "1.34" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:49:32.000491" - }, - "test_untar_onlyfiles - stub": { - "content": [ - [ - [ - [ - - ], - [ - "hello.txt:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - { - "versions_untar": [ - [ - "UNTAR", - "untar", - "1.34" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:49:58.812479" - }, - "test_untar - stub": { - "content": [ - [ - [ - [ - - ], - [ - "hash.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "opts.k2d:md5,d41d8cd98f00b204e9800998ecf8427e", - "taxo.k2d:md5,d41d8cd98f00b204e9800998ecf8427e" - ] - ] - ], - { - "versions_untar": [ - [ - "UNTAR", - "untar", - "1.34" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:49:48.119456" - }, - "test_untar": { - "content": [ - [ - [ - [ - - ], - [ - "hash.k2d:md5,8b8598468f54a7087c203ad0190555d9", - "opts.k2d:md5,a033d00cf6759407010b21700938f543", - "taxo.k2d:md5,094d5891cdccf2f1468088855c214b2c" - ] - ] - ], - { - "versions_untar": [ - [ - "UNTAR", - "untar", - "1.34" - ] - ] - } - ], - "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.2" - }, - "timestamp": "2026-01-28T17:49:17.252494" - } -} \ No newline at end of file diff --git a/modules/nf-core/unzip/main.nf b/modules/nf-core/unzip/main.nf index b977ff6d..eb020ba1 100644 --- a/modules/nf-core/unzip/main.nf +++ b/modules/nf-core/unzip/main.nf @@ -3,16 +3,16 @@ process UNZIP { label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/p7zip:16.02' : - 'biocontainers/p7zip:16.02' }" + 'quay.io/biocontainers/p7zip:16.02' }" input: tuple val(meta), path(archive) output: tuple val(meta), path("${prefix}/"), emit: unzipped_archive - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('7za'), eval("7za 2>&1 | sed -n '2s/^.* \\([0-9.]*\\) .*/\\1/p'"), topic: versions, emit: versions_7za when: task.ext.when == null || task.ext.when @@ -27,11 +27,6 @@ process UNZIP { -o"${prefix}"/ \\ $args \\ $archive - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - 7za: \$(echo \$(7za --help) | sed 's/.*p7zip Version //; s/(.*//') - END_VERSIONS """ stub: @@ -39,10 +34,5 @@ process UNZIP { prefix = task.ext.prefix ?: ( meta.id ? "${meta.id}" : archive.baseName) """ mkdir "${prefix}" - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - 7za: \$(echo \$(7za --help) | sed 's/.*p7zip Version //; s/(.*//') - END_VERSIONS """ } diff --git a/modules/nf-core/unzip/meta.yml b/modules/nf-core/unzip/meta.yml index ba1eb912..1c645556 100644 --- a/modules/nf-core/unzip/meta.yml +++ b/modules/nf-core/unzip/meta.yml @@ -7,12 +7,13 @@ keywords: - archiving tools: - unzip: - description: p7zip is a quick port of 7z.exe and 7za.exe (command line version - of 7zip, see www.7-zip.org) for Unix. + description: p7zip is a quick port of 7z.exe and 7za.exe (command line + version of 7zip, see www.7-zip.org) for Unix. homepage: https://sourceforge.net/projects/p7zip/ documentation: https://sourceforge.net/projects/p7zip/ tool_dev_url: https://sourceforge.net/projects/p7zip" - licence: ["LGPL-2.1-or-later"] + licence: + - "LGPL-2.1-or-later" identifier: "" input: - - meta: @@ -25,7 +26,7 @@ input: description: ZIP file pattern: "*.zip" ontologies: - - edam: http://edamontology.org/format_3987 # ZIP format + - edam: http://edamontology.org/format_3987 output: unzipped_archive: - - meta: @@ -37,13 +38,27 @@ output: type: directory description: Directory contents of the unzipped archive pattern: "${archive.baseName}/" + versions_7za: + - - ${task.process}: + type: string + description: The name of the process + - 7za: + type: string + description: The name of the tool + - 7za 2>&1 | sed -n '2s/^.* \([0-9.]*\) .*/\1/p': + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The name of the process + - 7za: + type: string + description: The name of the tool + - 7za 2>&1 | sed -n '2s/^.* \([0-9.]*\) .*/\1/p': + type: eval + description: The expression to obtain the version of the tool authors: - "@jfy133" maintainers: diff --git a/modules/nf-core/unzip/tests/main.nf.test b/modules/nf-core/unzip/tests/main.nf.test index 238b68d8..6e5997d2 100644 --- a/modules/nf-core/unzip/tests/main.nf.test +++ b/modules/nf-core/unzip/tests/main.nf.test @@ -24,7 +24,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } @@ -47,7 +47,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } } diff --git a/modules/nf-core/unzip/tests/main.nf.test.snap b/modules/nf-core/unzip/tests/main.nf.test.snap index cdd2ab16..3d178111 100644 --- a/modules/nf-core/unzip/tests/main.nf.test.snap +++ b/modules/nf-core/unzip/tests/main.nf.test.snap @@ -2,7 +2,7 @@ "generic [tar] [tar_gz] stub": { "content": [ { - "0": [ + "unzipped_archive": [ [ { "id": "hello" @@ -12,34 +12,25 @@ ] ] ], - "1": [ - "versions.yml:md5,52c55ce814e8bc9edc5a6c625ed794b8" - ], - "unzipped_archive": [ + "versions_7za": [ [ - { - "id": "hello" - }, - [ - - ] + "UNZIP", + "7za", + "16.02" ] - ], - "versions": [ - "versions.yml:md5,52c55ce814e8bc9edc5a6c625ed794b8" ] } ], + "timestamp": "2026-06-15T16:55:32.454288336", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-30T19:16:37.11550986" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } }, "generic [tar] [tar_gz]": { "content": [ { - "0": [ + "unzipped_archive": [ [ { "id": "hello" @@ -49,28 +40,19 @@ ] ] ], - "1": [ - "versions.yml:md5,52c55ce814e8bc9edc5a6c625ed794b8" - ], - "unzipped_archive": [ + "versions_7za": [ [ - { - "id": "hello" - }, - [ - "hello.tar:md5,80c66db79a773bc87b3346035ff9593e" - ] + "UNZIP", + "7za", + "16.02" ] - ], - "versions": [ - "versions.yml:md5,52c55ce814e8bc9edc5a6c625ed794b8" ] } ], + "timestamp": "2026-06-15T16:55:26.181807504", "meta": { - "nf-test": "0.8.4", - "nextflow": "24.04.2" - }, - "timestamp": "2024-06-30T19:16:25.120242571" + "nf-test": "0.9.5", + "nextflow": "26.04.0" + } } } \ No newline at end of file diff --git a/modules/nf-core/wget/main.nf b/modules/nf-core/wget/main.nf index 9bc6f151..0200da97 100644 --- a/modules/nf-core/wget/main.nf +++ b/modules/nf-core/wget/main.nf @@ -1,48 +1,36 @@ process WGET { - tag "$meta.id" + tag "${meta.id}" label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3b/3b54fa9135194c72a18d00db6b399c03248103f87e43ca75e4b50d61179994b3/data': - 'community.wave.seqera.io/library/wget:1.21.4--8b0fcde81c17be5e' }" + container "${workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container + ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/3b/3b54fa9135194c72a18d00db6b399c03248103f87e43ca75e4b50d61179994b3/data' + : 'community.wave.seqera.io/library/wget:1.21.4--8b0fcde81c17be5e'}" input: - tuple val(meta), val(url) + tuple val(meta), val(url), val(suffix) output: tuple val(meta), path("${prefix}.${suffix}"), emit: outfile - path "versions.yml" , emit: versions + tuple val("${task.process}"), val('wget'), eval('wget --version | head -1 | cut -d " " -f 3'), emit: versions_wget, topic: versions when: task.ext.when == null || task.ext.when script: - def args = task.ext.args ?: '' - prefix = task.ext.prefix ?: "${meta.id}" - suffix = task.ext.suffix ?: 'html' + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}" """ wget \\ -O - \\ - $args \\ - $url \\ + ${args} \\ + ${url} \\ > ${prefix}.${suffix} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - wget: \$(wget --version | head -1 | cut -d ' ' -f 3) - END_VERSIONS """ stub: - prefix = task.ext.prefix ?: "${meta.id}" - suffix = task.ext.suffix ?: 'html' + prefix = task.ext.prefix ?: "${meta.id}" """ touch ${prefix}.${suffix} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - wget: \$(wget --version | head -1 | cut -d ' ' -f 3) - END_VERSIONS """ } diff --git a/modules/nf-core/wget/meta.yml b/modules/nf-core/wget/meta.yml index 56df0af1..e383b614 100644 --- a/modules/nf-core/wget/meta.yml +++ b/modules/nf-core/wget/meta.yml @@ -1,4 +1,3 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json name: "wget" description: The non-interactive network downloader keywords: @@ -11,9 +10,9 @@ tools: the Web." homepage: "https://www.gnu.org/software/wget/" documentation: "https://www.gnu.org/software/wget/manual/wget.html" - licence: ["GPL"] + licence: + - "GPL" identifier: "" - input: - - meta: type: map @@ -24,7 +23,9 @@ input: type: string description: URL to download pattern: "^https?://*.*" - + - suffix: + type: string + description: Output suffix output: outfile: - - meta: @@ -36,16 +37,28 @@ output: type: file description: Downloaded file pattern: "*.*" - ontologies: [] + versions_wget: + - - ${task.process}: + type: string + description: The process the versions were collected from + - wget: + type: string + description: The name of the tool + - wget --version | head -1 | cut -d " " -f 3: + type: eval + description: The expression to obtain the version of the tool +topics: versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" - - ontologies: - - edam: http://edamontology.org/format_3750 # YAML + - - ${task.process}: + type: string + description: The process the versions were collected from + - wget: + type: string + description: The name of the tool + - wget --version | head -1 | cut -d " " -f 3: + type: eval + description: The expression to obtain the version of the tool authors: - "@itrujnara" maintainers: diff --git a/modules/nf-core/wget/tests/main.nf.test b/modules/nf-core/wget/tests/main.nf.test index e0942885..5e18b361 100644 --- a/modules/nf-core/wget/tests/main.nf.test +++ b/modules/nf-core/wget/tests/main.nf.test @@ -19,6 +19,7 @@ nextflow_process { input[0] = [ [ id:'test' ], // meta map "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/sarscov2/genome/genome.gff3", + "gff3" ] """ } @@ -27,7 +28,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } @@ -45,6 +46,7 @@ nextflow_process { input[0] = [ [ id:'test', single_end:false ], // meta map "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/genomics/sarscov2/genome/genome.gff3", + "gff3" ] """ } @@ -53,7 +55,7 @@ nextflow_process { then { assertAll( { assert process.success }, - { assert snapshot(process.out).match() } + { assert snapshot(sanitizeOutput(process.out)).match() } ) } diff --git a/modules/nf-core/wget/tests/main.nf.test.snap b/modules/nf-core/wget/tests/main.nf.test.snap index 6c051601..0bd9a0c7 100644 --- a/modules/nf-core/wget/tests/main.nf.test.snap +++ b/modules/nf-core/wget/tests/main.nf.test.snap @@ -2,7 +2,7 @@ "sarscov2 - gff": { "content": [ { - "0": [ + "outfile": [ [ { "id": "test" @@ -10,32 +10,25 @@ "test.gff3:md5,357435a81a9981a0128e840ebe11051e" ] ], - "1": [ - "versions.yml:md5,a747f72db5fc051f64676a0ba6f32f35" - ], - "outfile": [ + "versions_wget": [ [ - { - "id": "test" - }, - "test.gff3:md5,357435a81a9981a0128e840ebe11051e" + "WGET", + "wget", + "1.21.4" ] - ], - "versions": [ - "versions.yml:md5,a747f72db5fc051f64676a0ba6f32f35" ] } ], + "timestamp": "2026-05-18T21:10:33.370355828", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.4" - }, - "timestamp": "2025-03-26T12:27:32.67617" + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } }, "sarscov2 - gff - stub": { "content": [ { - "0": [ + "outfile": [ [ { "id": "test", @@ -44,27 +37,19 @@ "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" ] ], - "1": [ - "versions.yml:md5,a747f72db5fc051f64676a0ba6f32f35" - ], - "outfile": [ + "versions_wget": [ [ - { - "id": "test", - "single_end": false - }, - "test.gff3:md5,d41d8cd98f00b204e9800998ecf8427e" + "WGET", + "wget", + "1.21.4" ] - ], - "versions": [ - "versions.yml:md5,a747f72db5fc051f64676a0ba6f32f35" ] } ], + "timestamp": "2026-05-18T21:10:43.516581396", "meta": { - "nf-test": "0.9.0", - "nextflow": "24.10.4" - }, - "timestamp": "2025-03-26T12:21:06.414955" + "nf-test": "0.9.5", + "nextflow": "25.10.4" + } } } \ No newline at end of file diff --git a/modules/nf-core/wget/tests/nextflow.config b/modules/nf-core/wget/tests/nextflow.config index 236f4e17..ac956483 100644 --- a/modules/nf-core/wget/tests/nextflow.config +++ b/modules/nf-core/wget/tests/nextflow.config @@ -1,6 +1,5 @@ process { withName: "WGET" { ext.prefix = "test" - ext.suffix = "gff3" } } diff --git a/modules/nf-core/whatshap/stats/main.nf b/modules/nf-core/whatshap/stats/main.nf index 54abecd0..b89374d1 100644 --- a/modules/nf-core/whatshap/stats/main.nf +++ b/modules/nf-core/whatshap/stats/main.nf @@ -4,9 +4,9 @@ process WHATSHAP_STATS { label 'process_single' conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + container "${ workflow.containerEngine in ['singularity', 'apptainer'] && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/whatshap:2.8--py39h2de1943_0': - 'biocontainers/whatshap:2.8--py39h2de1943_0' }" + 'quay.io/biocontainers/whatshap:2.8--py39h2de1943_0' }" input: tuple val(meta), path(vcf) // channel: [ val(meta), path(vcf) ] diff --git a/subworkflows/local/paired/paired_smallvar_germline.nf b/subworkflows/local/paired/paired_smallvar_germline.nf index 3164e33b..f1ba424d 100644 --- a/subworkflows/local/paired/paired_smallvar_germline.nf +++ b/subworkflows/local/paired/paired_smallvar_germline.nf @@ -13,7 +13,7 @@ workflow PAIRED_SMALLVAR_GERMLINE { normal_bams // [meta, normal_bam, normal_bai] -- normal sample BAMs from T/N pairs fasta // [[:], fasta] fai // [[:], fai] - clair3_models // [meta(id=model_name), model_dir] -- downloaded Clair3 model directories + clair3_models // [meta(id=model_name), model_dir or []] -- [] = model bundled with the Clair3 image main: germline_vcf = channel.empty() @@ -22,7 +22,7 @@ workflow PAIRED_SMALLVAR_GERMLINE { deepvariant_ch = channel.empty() // COMBINE NORMAL BAMS WITH DOWNLOADED CLAIR3 MODELS - // Clair3 requires the model directory path; models are keyed by model name (meta.id) + // Models are keyed by model name (meta.id); an empty model_dir makes CLAIR3 use the bundled model if(germline_var_keep.contains('clair')) { // Extract model name from meta.id for combine-by key @@ -32,7 +32,7 @@ workflow PAIRED_SMALLVAR_GERMLINE { return [meta, clair3_model_name, file] } .set{clair3_models} - // clair3_models: [meta(id=model_name), model_name_str, model_dir] + // clair3_models: [meta(id=model_name), model_name_str, model_dir or []] // Emit [meta, clair3_model_name, bam, bai] to use model_name as the combine key normal_bams @@ -99,7 +99,7 @@ workflow PAIRED_SMALLVAR_GERMLINE { // SUBWORKFLOW: DEEPVARIANT (nf-core) // Input: [meta, bam, bai, []] -- [] is empty intervals (genome-wide) // fasta / fai - // [[:],[]] x2 -- empty PAR/GFF interval files (not used for WGS) + // [[:],[]] x2 -- no gzi, no PAR regions BED; with_phasing false // Output: .vcf -- [meta, vcf] // .vcf_index -- [meta, tbi] // @@ -124,8 +124,9 @@ workflow PAIRED_SMALLVAR_GERMLINE { deepvariant_input_ch, fasta, fai, - [[:],[]], // PAR regions (not used) - [[:],[]] // GFF annotation (not used) + [[:],[]], // gzi: the FASTA is not bgzipped + [[:],[]], // PAR regions BED (not used) + false // with_phasing: LongPhase phases the calls downstream ) // PASS-only copy for downstream steps; published VCFs are untouched. diff --git a/subworkflows/local/paired/paired_smallvar_somatic.nf b/subworkflows/local/paired/paired_smallvar_somatic.nf index ab296b99..5a499ec0 100644 --- a/subworkflows/local/paired/paired_smallvar_somatic.nf +++ b/subworkflows/local/paired/paired_smallvar_somatic.nf @@ -74,7 +74,7 @@ workflow PAIRED_SMALLVAR_SOMATIC { ) // PASS-only copy for downstream steps; published VCFs are untouched. - def clairs_vcf = BCFTOOLS_SORT.out.vcf.join(BCFTOOLS_SORT.out.tbi) + def clairs_vcf = BCFTOOLS_SORT.out.vcf.join(BCFTOOLS_SORT.out.index) if (params.smallvar_filter_pass) { CLAIRS_PASS_FILTER ( clairs_vcf, [], [], [] ) clairs_vcf = CLAIRS_PASS_FILTER.out.vcf diff --git a/subworkflows/local/phasing_haplotyping.nf b/subworkflows/local/phasing_haplotyping.nf index f268eb8f..8dbb4184 100644 --- a/subworkflows/local/phasing_haplotyping.nf +++ b/subworkflows/local/phasing_haplotyping.nf @@ -321,7 +321,7 @@ workflow PHASING_HAPLOTYPING { SORT_SOMATIC_PHASED ( CONCAT_SOMATIC_UNPHASED.out.vcf ) SORT_SOMATIC_PHASED.out.vcf - .join(SORT_SOMATIC_PHASED.out.tbi, failOnMismatch: true, failOnDuplicate: true) + .join(SORT_SOMATIC_PHASED.out.index, failOnMismatch: true, failOnDuplicate: true) .set{ phased_somatic_vcf } // phased_somatic_vcf: [meta, vcf.gz, tbi] -- phased somatic-only VCF (germline removed) @@ -444,13 +444,13 @@ workflow PHASING_HAPLOTYPING { // // MODULE: SAMTOOLS_INDEX (label: process_medium) // Input: [meta, bam] -- haplotagged BAM - // Output: .bai -- [meta, bai] + // Output: .index -- [meta, bai] // SAMTOOLS_INDEX ( tumor_normal_hapbams_ch ) tumor_normal_hapbams_ch - .join(SAMTOOLS_INDEX.out.bai) + .join(SAMTOOLS_INDEX.out.index) .set{ tumor_normal_hapbams_ch } // tumor_normal_hapbams_ch (final): [meta, bam, bai] -- haplotagged BAM with index diff --git a/subworkflows/local/prepare_annotation.nf b/subworkflows/local/prepare_annotation.nf index 1bcb0367..114199a3 100644 --- a/subworkflows/local/prepare_annotation.nf +++ b/subworkflows/local/prepare_annotation.nf @@ -28,11 +28,11 @@ workflow PREPARE_ANNOTATION { // vep_download_info: [[:], genome_str, species_str, cache_version_int] ENSEMBLVEP_DOWNLOAD ( - vep_download_info + vep_download_info, + false // preflight_check: skip the CHECKSUMS lookup ) ensemblvep_cache = ENSEMBLVEP_DOWNLOAD.out.cache - ch_versions = ch_versions.mix(ENSEMBLVEP_DOWNLOAD.out.versions) } else { diff --git a/subworkflows/local/prepare_reference_files.nf b/subworkflows/local/prepare_reference_files.nf index c2475c4f..3a105744 100644 --- a/subworkflows/local/prepare_reference_files.nf +++ b/subworkflows/local/prepare_reference_files.nf @@ -8,8 +8,7 @@ include { UNZIP as UNZIP_ALLELES } from '../../modules/nf-core/unzip/mai include { UNZIP as UNZIP_GC } from '../../modules/nf-core/unzip/main' include { UNZIP as UNZIP_LOCI } from '../../modules/nf-core/unzip/main' include { UNZIP as UNZIP_RT } from '../../modules/nf-core/unzip/main' -include { UNTAR } from '../../modules/nf-core/untar/main' -include { WGET } from '../../modules/nf-core/wget/main' +include { CLAIR3_MODEL } from '../../modules/local/clair3_model/main' workflow PREPARE_REFERENCE_FILES { take: @@ -20,7 +19,7 @@ workflow PREPARE_REFERENCE_FILES { ascat_loci_rt // str: path to ASCAT RT correction file (.zip or direct), or null clairsto_cna // bool: also unzip the loci/allele/GC set for ClairS-TO's Verdict module basecall_meta // [meta, basecall_model_str, kinetics_str] -- from METAEXTRACT per sample - clair3_modelMap // Map -- used to resolve download URLs + clair3_modelMap // Map -- header basecall model to Clair3 model main: ch_versions = channel.empty() @@ -40,46 +39,51 @@ workflow PREPARE_REFERENCE_FILES { UNZIP_FASTA( [ [:], fasta ]) ch_prepared_fasta = UNZIP_FASTA.out.file - ch_versions = ch_versions.mix(UNZIP_FASTA.out.versions) } else { ch_prepared_fasta = channel.value([ [:], fasta ]) } // ch_prepared_fasta: [[:], fasta_path] -- empty meta; uncompressed FASTA - // Clair3 model URLs: explicit clair3_model beats the BAM-header model; PacBio from HKU, ONT from the Nanopore CDN - basecall_meta.map { meta, basecall_model_meta, _kinetics_meta -> - def model = (!meta.clair3_model || meta.clair3_model.toString().trim() in ['', '[]']) ? clair3_modelMap.get(basecall_model_meta) : meta.clair3_model - // Key on the downloaded model; keying on the header name let an explicit clair3_model add a duplicate - def meta_new = [id: model] - def download_prefix = ( basecall_model_meta == 'hifi_revio' ? "https://www.bio8.cs.hku.hk/clair3/clair3_models/" : "https://cdn.oxfordnanoportal.com/software/analysis/models/clair3" ) - def url = "${download_prefix}/${model}.tar.gz" - return [ meta_new, url ] - } - .unique() // deduplicate: multiple samples with the same Clair3 model share one download - .set{ clair3_model_urls } - // clair3_model_urls: [meta(id=clair3_model_name), download_url_str] - // one item per unique Clair3 model needed across all samples - - // - // MODULE: WGET (label: process_single) - // Input: [meta, url_str] -- model name (id) + download URL - // Output: .outfile -- [meta, tarball] -- downloaded .tar.gz model archive - // - WGET ( clair3_model_urls ) - - ch_versions = ch_versions.mix(WGET.out.versions) + // Clair3 models: explicit clair3_model beats the BAM-header model. Clair3 v2 only reads PyTorch models; + // the image bundles HKU's models and ONT's recent R10.4.1 ones, anything else is downloaded from + // HKU's PyTorch conversions (ONT's Rerio catalogue for r9/r10 names) + def clair3_bundled = [ + 'hifi', 'hifi_revio', 'hifi_sequel2', 'ilmn', 'ont', 'ont_guppy5', + 'r1041_e82_400bps_hac_v410', 'r1041_e82_400bps_hac_v500', 'r1041_e82_400bps_hac_v520', + 'r1041_e82_400bps_hac_v520_with_mv', 'r1041_e82_400bps_hac_v600', 'r1041_e82_400bps_hac_v600_with_mv', + 'r1041_e82_400bps_hac_with_mv', 'r1041_e82_400bps_sup_v410', 'r1041_e82_400bps_sup_v430_bacteria_finetuned', + 'r1041_e82_400bps_sup_v500', 'r1041_e82_400bps_sup_v520', 'r1041_e82_400bps_sup_v520_with_mv', + 'r1041_e82_400bps_sup_with_mv', 'r941_prom_hac_g360+g422', 'r941_prom_sup_g5014' + ] + basecall_meta + .map { meta, basecall_model_meta, _kinetics_meta -> + def model = (!meta.clair3_model || meta.clair3_model.toString().trim() in ['', '[]']) ? clair3_modelMap.get(basecall_model_meta) : meta.clair3_model + // Key on the model itself; keying on the header name let an explicit clair3_model add a duplicate + return model + } + .unique() // one entry per Clair3 model needed across all samples + .branch { model -> + bundled: model in clair3_bundled + return [ [id: model], [] ] + download: true + def collection = model ==~ /^r(9|10).*/ ? 'clair3_models_rerio_pytorch' : 'clair3_models_pytorch' + return [ [id: model], "https://www.bio8.cs.hku.hk/clair3/${collection}/${model}" ] + } + .set { clair3_model_sources } + // clair3_model_sources.bundled: [meta(id=clair3_model_name), []] -- read from the image + // clair3_model_sources.download: [meta(id=clair3_model_name), url_str] -- model directory URL // - // MODULE: UNTAR (label: process_single) - // Input: WGET.out.outfile -- [meta, tarball] - // Output: .untar -- [meta, model_dir] -- extracted Clair3 model directory + // MODULE: CLAIR3_MODEL (label: process_single) + // Input: [meta, url_str] -- model name (id) + model directory URL + // Output: .model -- [meta, model_dir] -- pileup.pt and full_alignment.pt // - UNTAR ( - WGET.out.outfile - ) + CLAIR3_MODEL ( clair3_model_sources.download ) - UNTAR.out.untar.set { downloaded_clair3_models } - // downloaded_clair3_models: [meta(id=clair3_model_name), model_dir] + clair3_model_sources.bundled + .mix(CLAIR3_MODEL.out.model) + .set { clair3_models } + // clair3_models: [meta(id=clair3_model_name), model_dir or []] -- [] = bundled with the Clair3 image // // MODULE: SAMTOOLS_FAIDX (label: process_single) @@ -108,7 +112,6 @@ workflow PREPARE_REFERENCE_FILES { UNZIP_ALLELES(channel.fromPath(file(ascat_alleles)).collect().map{ it -> [ [ id:it[0].baseName ], it ] }) allele_files = UNZIP_ALLELES.out.unzipped_archive.flatMap { it -> it[1].listFiles() }.collect() // allele_files: [path, path, ...] -- all per-chromosome allele files collected - ch_versions = ch_versions.mix(UNZIP_ALLELES.out.versions) } else allele_files = channel.fromPath(ascat_alleles).collect() // Loci files: per-chromosome SNP loci positions @@ -118,7 +121,6 @@ workflow PREPARE_REFERENCE_FILES { UNZIP_LOCI(channel.fromPath(file(ascat_loci)).collect().map{ it -> [ [ id:it[0].baseName ], it ] }) loci_files = UNZIP_LOCI.out.unzipped_archive.flatMap { it -> it[1].listFiles() }.collect() // loci_files: [path, path, ...] -- all per-chromosome loci files collected - ch_versions = ch_versions.mix(UNZIP_LOCI.out.versions) } else loci_files = channel.fromPath(ascat_loci).collect() // GC correction file: genome-wide GC content per locus (optional) @@ -128,7 +130,6 @@ workflow PREPARE_REFERENCE_FILES { UNZIP_GC(channel.fromPath(file(ascat_loci_gc)).collect().map{ it -> [ [ id:it[0].baseName ], it ] }) gc_file = UNZIP_GC.out.unzipped_archive.flatMap { it -> it[1].listFiles() }.collect() // gc_file: [path, ...] -- GC correction file(s) collected - ch_versions = ch_versions.mix(UNZIP_GC.out.versions) } else gc_file = channel.fromPath(ascat_loci_gc).collect() } @@ -140,7 +141,6 @@ workflow PREPARE_REFERENCE_FILES { UNZIP_RT(channel.fromPath(file(ascat_loci_rt)).collect().map{ it -> [ [ id:it[0].baseName ], it ] }) rt_file = UNZIP_RT.out.unzipped_archive.flatMap { it -> it[1].listFiles() }.collect() // rt_file: [path, ...] -- RT correction file(s) collected - ch_versions = ch_versions.mix(UNZIP_RT.out.versions) } else rt_file = channel.fromPath(ascat_loci_rt).collect() } @@ -154,7 +154,7 @@ workflow PREPARE_REFERENCE_FILES { gc_file // [path, ...] -- GC correction file ([] if not provided) rt_file // [path, ...] -- replication timing correction file ([] if not provided) - downloaded_clair3_models // [meta(id=clair3_model_name), model_dir] + clair3_models // [meta(id=clair3_model_name), model_dir or []] -- [] = bundled with the Clair3 image versions = ch_versions } diff --git a/subworkflows/local/prepare_vep_plugins.nf b/subworkflows/local/prepare_vep_plugins.nf index bfa31096..0b8245d7 100644 --- a/subworkflows/local/prepare_vep_plugins.nf +++ b/subworkflows/local/prepare_vep_plugins.nf @@ -32,11 +32,10 @@ workflow PREPARE_VEP_PLUGINS { if (prepare.containsKey('vep_revel')) { if (prepare['vep_revel'].toString().contains('://')) { WGET_REVEL ( - channel.value([ [ id: 'revel' ], prepare['vep_revel'] ]) + channel.value([ [ id: 'revel' ], prepare['vep_revel'], 'zip' ]) ) ch_revel_zip = WGET_REVEL.out.outfile - ch_versions = ch_versions.mix(WGET_REVEL.out.versions) } else { ch_revel_zip = channel.value([ [ id: 'revel' ], file(prepare['vep_revel'], checkIfExists: true) ]) @@ -51,7 +50,6 @@ workflow PREPARE_VEP_PLUGINS { ) staged << VEPPLUGIN_REVEL.out.files - ch_versions = ch_versions.mix(UNZIP_REVEL.out.versions) } // @@ -62,11 +60,10 @@ workflow PREPARE_VEP_PLUGINS { if (prepare.containsKey('vep_eve')) { if (prepare['vep_eve'].toString().contains('://')) { WGET_EVE ( - channel.value([ [ id: 'eve' ], prepare['vep_eve'] ]) + channel.value([ [ id: 'eve' ], prepare['vep_eve'], 'zip' ]) ) ch_eve_zip = WGET_EVE.out.outfile - ch_versions = ch_versions.mix(WGET_EVE.out.versions) } else { ch_eve_zip = channel.value([ [ id: 'eve' ], file(prepare['vep_eve'], checkIfExists: true) ]) @@ -81,7 +78,6 @@ workflow PREPARE_VEP_PLUGINS { ) staged << VEPPLUGIN_EVE.out.files - ch_versions = ch_versions.mix(UNZIP_EVE.out.versions) } // diff --git a/subworkflows/local/small_variant_consensus.nf b/subworkflows/local/small_variant_consensus.nf index f7f619ae..773609fd 100644 --- a/subworkflows/local/small_variant_consensus.nf +++ b/subworkflows/local/small_variant_consensus.nf @@ -46,7 +46,7 @@ workflow SMALL_VARIANT_CONSENSUS { SORT_POST_NORM(BCFTOOLS_NORM.out.vcf) SORT_POST_NORM.out.vcf - .join(SORT_POST_NORM.out.tbi) + .join(SORT_POST_NORM.out.index) .set { normalized_vcfs } // normalized_vcfs: [meta(+caller), vcf.gz, tbi] -- normalised, sorted per-caller VCF @@ -74,8 +74,12 @@ workflow SMALL_VARIANT_CONSENSUS { def header_lines = [] // no extra header lines def rename_chrs = [] // no chromosome renaming // 'all' mode merges both callers, so unify the AF key; 'consensus' needs no rename. - def new_meta = combine_method == 'all' - ? meta + [rename_to: (prioritize_caller in ['deepvariant', 'deepsomatic'] ? 'VAF' : 'AF')] + // Rename only the other family's VCFs (Clair writes AF, DeepVariant/DeepSomatic VAF): + // bcftools >= 1.24 fails on a rename whose source tag is absent. + def rename_to = prioritize_caller in ['deepvariant', 'deepsomatic'] ? 'VAF' : 'AF' + def caller_tag = meta.caller in ['deepvariant', 'deepsomatic'] ? 'VAF' : 'AF' + def new_meta = combine_method == 'all' && caller_tag != rename_to + ? meta + [rename_to: rename_to] : meta return [ new_meta, vcf, tbi, annotations, annotations_index, columns, header_lines, rename_chrs ] } @@ -92,7 +96,7 @@ workflow SMALL_VARIANT_CONSENSUS { BCFTOOLS_ANNOTATE(annotate_input) BCFTOOLS_ANNOTATE.out.vcf - .join(BCFTOOLS_ANNOTATE.out.tbi, failOnMismatch: true, failOnDuplicate: true) + .join(BCFTOOLS_ANNOTATE.out.index, failOnMismatch: true, failOnDuplicate: true) .map { meta, vcf, tbi -> def clean_meta = meta.findAll { k, _v -> !(k in ['rename_to', 'split']) } return [clean_meta, vcf, tbi] @@ -201,11 +205,11 @@ workflow SMALL_VARIANT_CONSENSUS { // .tbi -- [meta, tbi] // BCFTOOLS_NORM_REJOIN( - BCFTOOLS_SORT_CONSENSUS.out.vcf.join(BCFTOOLS_SORT_CONSENSUS.out.tbi, failOnMismatch: true, failOnDuplicate: true), + BCFTOOLS_SORT_CONSENSUS.out.vcf.join(BCFTOOLS_SORT_CONSENSUS.out.index, failOnMismatch: true, failOnDuplicate: true), fasta ) BCFTOOLS_NORM_REJOIN.out.vcf.set{ vcf } - BCFTOOLS_NORM_REJOIN.out.tbi.set{ tbi } + BCFTOOLS_NORM_REJOIN.out.index.set{ tbi } // vcf/tbi: [meta, vcf/tbi] -- consensus calls from the priority caller, multi-allelics rejoined } else { diff --git a/subworkflows/local/tumor_only/tumoronly_smallvar.nf b/subworkflows/local/tumor_only/tumoronly_smallvar.nf index 923a4741..4e85610c 100644 --- a/subworkflows/local/tumor_only/tumoronly_smallvar.nf +++ b/subworkflows/local/tumor_only/tumoronly_smallvar.nf @@ -190,7 +190,7 @@ workflow TUMORONLY_SMALLVAR { // // SUBWORKFLOW: DEEPVARIANT (nf-core) // Input: [meta, bam, bai, []] -- [] = genome-wide (no interval list) - // fasta / fai / [[:],[]] x2 -- empty PAR/GFF + // fasta / fai / [[:],[]] x2 -- no gzi, no PAR regions BED; with_phasing false // Output: .vcf -- [meta, vcf] // .vcf_index -- [meta, tbi] // @@ -206,8 +206,9 @@ workflow TUMORONLY_SMALLVAR { deepvariant_input_ch, fasta, fai, - [[:],[]], // PAR regions (not used) - [[:],[]] // GFF annotation (not used) + [[:],[]], // gzi: the FASTA is not bgzipped + [[:],[]], // PAR regions BED (not used) + false // with_phasing: LongPhase phases the calls downstream ) // PASS-only copy for downstream steps; published VCFs are untouched. @@ -235,7 +236,7 @@ workflow TUMORONLY_SMALLVAR { // Output: .output/.index -- [meta, tsv.gz/tbi] -- CHROM POS REF ALT FILTER, non-PASS/RefCall rows only // DS_VERDICT_QUERY ( - DS_VERDICT_SPLIT_DS.out.vcf.join(DS_VERDICT_SPLIT_DS.out.tbi, failOnMismatch: true, failOnDuplicate: true), + DS_VERDICT_SPLIT_DS.out.vcf.join(DS_VERDICT_SPLIT_DS.out.index, failOnMismatch: true, failOnDuplicate: true), [], [], [] ) @@ -244,7 +245,7 @@ workflow TUMORONLY_SMALLVAR { // Stamps INFO/DS_VERDICT on each DeepVariant record from the DeepSomatic verdict table. // DS_VERDICT_SPLIT_DV.out.vcf - .join(DS_VERDICT_SPLIT_DV.out.tbi, failOnMismatch: true, failOnDuplicate: true) + .join(DS_VERDICT_SPLIT_DV.out.index, failOnMismatch: true, failOnDuplicate: true) .join(DS_VERDICT_QUERY.out.output, failOnMismatch: true, failOnDuplicate: true) .join(DS_VERDICT_QUERY.out.index, failOnMismatch: true, failOnDuplicate: true) .map { meta, vcf, tbi, annotations, annotations_index -> @@ -262,7 +263,7 @@ workflow TUMORONLY_SMALLVAR { // Keeps only the positively-adjudicated germline records (see ext.args in conf/modules.config). // DS_GERMLINE_SELECT ( - DS_VERDICT_ANNOTATE.out.vcf.join(DS_VERDICT_ANNOTATE.out.tbi, failOnMismatch: true, failOnDuplicate: true), + DS_VERDICT_ANNOTATE.out.vcf.join(DS_VERDICT_ANNOTATE.out.index, failOnMismatch: true, failOnDuplicate: true), [], [], [] ) @@ -276,7 +277,7 @@ workflow TUMORONLY_SMALLVAR { ) deepvariant_germline = DS_GERMLINE_REJOIN.out.vcf - .join(DS_GERMLINE_REJOIN.out.tbi, failOnMismatch: true, failOnDuplicate: true) + .join(DS_GERMLINE_REJOIN.out.index, failOnMismatch: true, failOnDuplicate: true) } deepvariant_germline diff --git a/subworkflows/nf-core/bam_stats_samtools/main.nf b/subworkflows/nf-core/bam_stats_samtools/main.nf index 34e8fe10..14545ba2 100644 --- a/subworkflows/nf-core/bam_stats_samtools/main.nf +++ b/subworkflows/nf-core/bam_stats_samtools/main.nf @@ -9,17 +9,17 @@ include { SAMTOOLS_FLAGSTAT } from '../../../modules/nf-core/samtools/flagstat/m workflow BAM_STATS_SAMTOOLS { take: ch_bam_bai // channel: [ val(meta), path(bam), path(bai) ] - ch_fasta // channel: [ val(meta), path(fasta) ] + ch_fasta_fai // channel: [ val(meta), path(fasta) ] main: - SAMTOOLS_STATS ( ch_bam_bai, ch_fasta ) + SAMTOOLS_STATS(ch_bam_bai, ch_fasta_fai) - SAMTOOLS_FLAGSTAT ( ch_bam_bai ) + SAMTOOLS_FLAGSTAT(ch_bam_bai) - SAMTOOLS_IDXSTATS ( ch_bam_bai ) + SAMTOOLS_IDXSTATS(ch_bam_bai) emit: - stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] + stats = SAMTOOLS_STATS.out.stats // channel: [ val(meta), path(stats) ] flagstat = SAMTOOLS_FLAGSTAT.out.flagstat // channel: [ val(meta), path(flagstat) ] idxstats = SAMTOOLS_IDXSTATS.out.idxstats // channel: [ val(meta), path(idxstats) ] } diff --git a/subworkflows/nf-core/bam_stats_samtools/meta.yml b/subworkflows/nf-core/bam_stats_samtools/meta.yml index 809bf736..fea06778 100644 --- a/subworkflows/nf-core/bam_stats_samtools/meta.yml +++ b/subworkflows/nf-core/bam_stats_samtools/meta.yml @@ -16,10 +16,10 @@ input: description: | The input channel containing the BAM/CRAM and it's index Structure: [ val(meta), path(bam), path(bai) ] - - ch_fasta: + - ch_fasta_fai: description: | - Reference genome fasta file - Structure: [ path(fasta) ] + Reference genome fasta file and its index + Structure: [ val(meta2), path(fasta), path(fai) ] output: - stats: description: | @@ -33,10 +33,6 @@ output: description: | File containing samtools idxstats output Structure: [ val(meta), path(idxstats)] - - versions: - description: | - Files containing software versions - Structure: [ path(versions.yml) ] authors: - "@drpatelh" maintainers: diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test index 2f329695..8ec544b9 100644 --- a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test @@ -24,7 +24,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -53,7 +54,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -82,7 +84,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -113,7 +116,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -141,7 +145,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/sarscov2/genome/genome.fasta.fai', checkIfExists: true) ]) """ } @@ -169,7 +174,8 @@ nextflow_workflow { ]) input[1] = Channel.of([ [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true), + file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) ]) """ } diff --git a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap index 9c8ff1b5..994ce9df 100644 --- a/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap +++ b/subworkflows/nf-core/bam_stats_samtools/tests/main.nf.test.snap @@ -58,11 +58,11 @@ ] } ], + "timestamp": "2026-02-03T11:10:30.076183827", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.3" - }, - "timestamp": "2026-02-03T11:10:30.076183827" + } }, "test_bam_stats_samtools_single_end - stub": { "content": [ @@ -123,11 +123,11 @@ ] } ], + "timestamp": "2026-02-03T11:10:24.379362883", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.3" - }, - "timestamp": "2026-02-03T11:10:24.379362883" + } }, "test_bam_stats_samtools_paired_end_cram - stub": { "content": [ @@ -188,11 +188,11 @@ ] } ], + "timestamp": "2026-02-03T11:10:35.91658956", "meta": { "nf-test": "0.9.3", "nextflow": "25.10.3" - }, - "timestamp": "2026-02-03T11:10:35.91658956" + } }, "test_bam_stats_samtools_single_end": { "content": [ @@ -220,15 +220,15 @@ "id": "test", "single_end": true }, - "test.stats:md5,7a05a22bdb17e8df6e8c2d100ff09a31" + "test.stats:md5,6583f1f142c27974ffc924b7fa734767" ] ] ], + "timestamp": "2026-07-10T08:13:24.390328", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-03T11:32:20.243663217" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, "test_bam_stats_samtools_paired_end": { "content": [ @@ -256,15 +256,15 @@ "id": "test", "single_end": true }, - "test.stats:md5,a391612b5ef5b181e854ccaad8c8a068" + "test.stats:md5,c4ca9c9d1415005c80481e6fe4c95f90" ] ] ], + "timestamp": "2026-07-10T08:13:29.123968", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-03T11:32:26.434187887" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } }, "test_bam_stats_samtools_paired_end_cram": { "content": [ @@ -292,14 +292,14 @@ "id": "test", "single_end": false }, - "test.stats:md5,2b0e31ab01b867a6ff312023ae03838d" + "test.stats:md5,a2a40d6e88c35aa33d4433355f47f217" ] ] ], + "timestamp": "2026-07-10T08:13:33.60771", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.3" - }, - "timestamp": "2026-02-03T11:32:32.441454186" + "nf-test": "0.9.5", + "nextflow": "26.04.6" + } } } \ No newline at end of file diff --git a/subworkflows/nf-core/deepvariant/deepvariant.diff b/subworkflows/nf-core/deepvariant/deepvariant.diff index cb98a20e..8d8214c2 100644 --- a/subworkflows/nf-core/deepvariant/deepvariant.diff +++ b/subworkflows/nf-core/deepvariant/deepvariant.diff @@ -1,19 +1,18 @@ Changes in component 'nf-core/deepvariant' -'subworkflows/nf-core/deepvariant/README.md' is unchanged 'subworkflows/nf-core/deepvariant/meta.yml' is unchanged Changes in 'deepvariant/main.nf': --- subworkflows/nf-core/deepvariant/main.nf +++ subworkflows/nf-core/deepvariant/main.nf @@ -6,7 +6,7 @@ take: - ch_input // channel: [ val(meta), path(input), path(index), path(intervals)] - ch_fasta // channel: [ val(meta2), path(fasta) ] -- ch_fai // channel: [ val(meta3), path(fail) ] -+ ch_fai // channel: [ val(meta3), path(fai) ] - ch_gzi // channel: [ val(meta4), path(gzi) ] - ch_par_bed // channel: [ val(meta5), path(par_bed) ] - -@@ -16,14 +16,19 @@ + ch_input // channel: [ val(meta), path(input), path(index), path(intervals)] + ch_fasta // channel: [ val(meta2), path(fasta) ] +- ch_fai // channel: [ val(meta3), path(fail) ] ++ ch_fai // channel: [ val(meta3), path(fai) ] + ch_gzi // channel: [ val(meta4), path(gzi) ] + ch_par_bed // channel: [ val(meta5), path(par_bed) ] + with_phasing // val: boolean +@@ -17,14 +17,19 @@ DEEPVARIANT_CALLVARIANTS(DEEPVARIANT_MAKEEXAMPLES.out.examples) @@ -40,10 +39,12 @@ Changes in 'deepvariant/main.nf': failOnMismatch: true ).join( -'subworkflows/nf-core/deepvariant/tests/main.nf.test' is unchanged +'subworkflows/nf-core/deepvariant/README.md' is unchanged +'subworkflows/nf-core/deepvariant/tests/pacbio_profile.config' is unchanged +'subworkflows/nf-core/deepvariant/tests/nextflow.config' is unchanged +'subworkflows/nf-core/deepvariant/tests/deepvariant-workflow-and-process-equality-tester.nf' is unchanged 'subworkflows/nf-core/deepvariant/tests/equality.nf.test' is unchanged +'subworkflows/nf-core/deepvariant/tests/main.nf.test' is unchanged 'subworkflows/nf-core/deepvariant/tests/disable-small-model.conf' is unchanged -'subworkflows/nf-core/deepvariant/tests/deepvariant-workflow-and-process-equality-tester.nf' is unchanged 'subworkflows/nf-core/deepvariant/tests/main.nf.test.snap' is unchanged -'subworkflows/nf-core/deepvariant/tests/nextflow.config' is unchanged ************************************************************ diff --git a/subworkflows/nf-core/deepvariant/main.nf b/subworkflows/nf-core/deepvariant/main.nf index d00ecc95..644f5d2c 100644 --- a/subworkflows/nf-core/deepvariant/main.nf +++ b/subworkflows/nf-core/deepvariant/main.nf @@ -4,15 +4,16 @@ include { DEEPVARIANT_POSTPROCESSVARIANTS } from '../../../modules/nf-core/deepv workflow DEEPVARIANT { take: - ch_input // channel: [ val(meta), path(input), path(index), path(intervals)] - ch_fasta // channel: [ val(meta2), path(fasta) ] - ch_fai // channel: [ val(meta3), path(fai) ] - ch_gzi // channel: [ val(meta4), path(gzi) ] - ch_par_bed // channel: [ val(meta5), path(par_bed) ] + ch_input // channel: [ val(meta), path(input), path(index), path(intervals)] + ch_fasta // channel: [ val(meta2), path(fasta) ] + ch_fai // channel: [ val(meta3), path(fai) ] + ch_gzi // channel: [ val(meta4), path(gzi) ] + ch_par_bed // channel: [ val(meta5), path(par_bed) ] + with_phasing // val: boolean main: - DEEPVARIANT_MAKEEXAMPLES(ch_input, ch_fasta, ch_fai, ch_gzi, ch_par_bed) + DEEPVARIANT_MAKEEXAMPLES(ch_input, ch_fasta, ch_fai, ch_gzi, ch_par_bed, with_phasing) DEEPVARIANT_CALLVARIANTS(DEEPVARIANT_MAKEEXAMPLES.out.examples) @@ -31,6 +32,9 @@ workflow DEEPVARIANT { ch_postproc_input = ch_call_and_gvcf.join( DEEPVARIANT_MAKEEXAMPLES.out.small_model_calls, failOnMismatch: true + ).join( + DEEPVARIANT_MAKEEXAMPLES.out.read_phase_inputs, + failOnMismatch: true ).join( ch_intervals, failOnMismatch: true diff --git a/subworkflows/nf-core/deepvariant/meta.yml b/subworkflows/nf-core/deepvariant/meta.yml index bd459a62..317b22c3 100644 --- a/subworkflows/nf-core/deepvariant/meta.yml +++ b/subworkflows/nf-core/deepvariant/meta.yml @@ -36,6 +36,10 @@ input: bed file of pseudoautosomal regions (optional) Structure: [ val(meta5), val(par_bed) ] pattern: "*.bed" + - with_phasing: + type: boolean + description: | + Whether to enable haplotype phasing of the variant calls output: - vcf: type: file @@ -43,11 +47,11 @@ output: Variant calls Structure: [ val(meta), path(vcf) ] pattern: "*.vcf.gz" - - vcf_tbi: + - vcf_index: type: file description: | Index for variant call file - Structure: [ val(meta), path(vcf_tbi) ] + Structure: [ val(meta), path(vcf_index) ] pattern: "*.tbi" - gvcf: type: file @@ -55,18 +59,12 @@ output: Variant call file with genomic coverage information Structure: [ val(meta), path(gvcf) ] pattern: "*.g.vcf.gz" - - gvcf_tbi: + - gvcf_index: type: file description: | Index for the GVCF. - Structure: [ val(meta), path(gvcf_tbi) ] + Structure: [ val(meta), path(gvcf_index) ] pattern: "*.tbi" - - versions: - type: file - description: | - File containing software versions - Structure: path(versions.yml) - pattern: "versions.yml" authors: - "@abhi18av" - "@ramprasadn" diff --git a/subworkflows/nf-core/deepvariant/tests/deepvariant-workflow-and-process-equality-tester.nf b/subworkflows/nf-core/deepvariant/tests/deepvariant-workflow-and-process-equality-tester.nf new file mode 100644 index 00000000..15cb45e3 --- /dev/null +++ b/subworkflows/nf-core/deepvariant/tests/deepvariant-workflow-and-process-equality-tester.nf @@ -0,0 +1,24 @@ +include { DEEPVARIANT_RUNDEEPVARIANT } from '../../../../modules/nf-core/deepvariant/rundeepvariant/main' +include { DEEPVARIANT } from '../main' + +workflow DEEPVARIANT_WORKFLOW_AND_PROCESS_EQUALITY_TESTER { + take: + ch_input // channel: [ val(meta), path(input), path(index), path(intervals)] + ch_fasta // channel: [ val(meta2), path(fasta) ] + ch_fai // channel: [ val(meta3), path(fail) ] + ch_gzi // channel: [ val(meta4), path(gzi) ] + ch_par_bed // channel: [ val(meta5), path(par_bed) ] + with_phasing // bool: run with phasing (only for long reads) + + main: + + // WGS model does not use read-phasing when doing rundeepvariant + DEEPVARIANT(ch_input, ch_fasta, ch_fai, ch_gzi, ch_par_bed, with_phasing) + DEEPVARIANT_RUNDEEPVARIANT(ch_input, ch_fasta, ch_fai, ch_gzi, ch_par_bed) + + emit: + wf_vcf = DEEPVARIANT.out.vcf + pc_vcf = DEEPVARIANT_RUNDEEPVARIANT.out.vcf + wf_gvcf = DEEPVARIANT.out.gvcf + pc_gvcf = DEEPVARIANT_RUNDEEPVARIANT.out.gvcf +} diff --git a/subworkflows/nf-core/deepvariant/tests/equality.nf.test b/subworkflows/nf-core/deepvariant/tests/equality.nf.test new file mode 100644 index 00000000..4ad89616 --- /dev/null +++ b/subworkflows/nf-core/deepvariant/tests/equality.nf.test @@ -0,0 +1,111 @@ + +nextflow_workflow { + + name "Compare subworkflow DEEPVARIANT to the process DEEPVARIANT_RUNDEEPVARIANT" + script "./deepvariant-workflow-and-process-equality-tester.nf" + config "./nextflow.config" + workflow "DEEPVARIANT_WORKFLOW_AND_PROCESS_EQUALITY_TESTER" + + tag "subworkflows" + tag "subworkflows_nfcore" + tag "subworkflows/deepvariant" + + tag "deepvariant" + tag "deepvariant/makeexamples" + tag "deepvariant/callvariants" + tag "deepvariant/postprocessvariants" + tag "deepvariant/rundeepvariant" + + test("ensure that the subworkflow and DEEPVARIANT_RUNDEEPVARIANT have the same output") { + when { + workflow { + """ + input[0] = Channel.of( + [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ], + [ + [ id:'test2', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + ) + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + input[5] = false + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert path(workflow.out.wf_vcf[0][1]).vcf.variantsMD5 == path(workflow.out.pc_vcf[0][1]).vcf.variantsMD5 }, + { assert path(workflow.out.wf_gvcf[0][1]).vcf.variantsMD5 == path(workflow.out.pc_gvcf[0][1]).vcf.variantsMD5 }, + ) + } + } + + test("ensure that the subworkflow and DEEPVARIANT_RUNDEEPVARIANT have the same output - phasing") { + config "./pacbio_profile.config" + when { + workflow { + """ + input[0] = Channel.of( + [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/cram/test.paired_end.sorted.cram.crai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ], + [ + [ id:'test2', single_end:false ], // meta map + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/illumina/bam/test2.paired_end.sorted.bam.bai', checkIfExists: true), + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.bed', checkIfExists: true) + ] + ) + input[1] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) + ] + input[2] = [ + [ id:'genome'], + file(params.modules_testdata_base_path + '/genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) + ] + input[3] = [ + [],[] + ] + input[4] = [ + [],[] + ] + input[5] = true + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert path(workflow.out.wf_vcf[0][1]).vcf.variantsMD5 == path(workflow.out.pc_vcf[0][1]).vcf.variantsMD5 }, + { assert path(workflow.out.wf_gvcf[0][1]).vcf.variantsMD5 == path(workflow.out.pc_gvcf[0][1]).vcf.variantsMD5 }, + ) + } + } +} diff --git a/subworkflows/nf-core/deepvariant/tests/main.nf.test b/subworkflows/nf-core/deepvariant/tests/main.nf.test index d2451980..97b2d3be 100644 --- a/subworkflows/nf-core/deepvariant/tests/main.nf.test +++ b/subworkflows/nf-core/deepvariant/tests/main.nf.test @@ -45,6 +45,7 @@ nextflow_workflow { input[4] = [ [],[] ] + input[5] = false """ } } @@ -90,6 +91,7 @@ nextflow_workflow { input[4] = [ [],[] ] + input[5] = false """ } } @@ -137,6 +139,7 @@ nextflow_workflow { input[4] = [ [],[] ] + input[5] = false """ } } diff --git a/subworkflows/nf-core/deepvariant/tests/main.nf.test.snap b/subworkflows/nf-core/deepvariant/tests/main.nf.test.snap index 2d14299a..3ea1b3f1 100644 --- a/subworkflows/nf-core/deepvariant/tests/main.nf.test.snap +++ b/subworkflows/nf-core/deepvariant/tests/main.nf.test.snap @@ -8,14 +8,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz:md5,0c57956b2f5a0cff8d09a19790ef94f6" + "test.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz:md5,5f3d98908d46297c7a658654d5bb3015" + "test2.vcf.gz:md5,cbbee60695d85a43650107d9d78be165" ] ], "1": [ @@ -24,14 +24,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz.tbi:md5,9ae649fed4de493a027697b339bfab36" + "test.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz.tbi:md5,d6a114149024aa8cd74dda2f1c559f5b" + "test2.vcf.gz.tbi:md5,a4eb00492150c0b99e590fc4c4c8d2db" ] ], "2": [ @@ -40,14 +40,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz:md5,021f94de713efa7c83d0547f81412dbf" + "test.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz:md5,86f9c844a90351483c715e7bcc604841" + "test2.g.vcf.gz:md5,d248ee148d1eed83234aa43721f7ccbf" ] ], "3": [ @@ -56,14 +56,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz.tbi:md5,3c690275c3d0b55bacb9469199b4d6d8" + "test.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz.tbi:md5,c65395b29f520cf2af04f211f9be2b36" + "test2.g.vcf.gz.tbi:md5,ae7fd13e5a8977fe487323f5ed8d0f20" ] ], "gvcf": [ @@ -72,14 +72,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz:md5,021f94de713efa7c83d0547f81412dbf" + "test.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz:md5,86f9c844a90351483c715e7bcc604841" + "test2.g.vcf.gz:md5,d248ee148d1eed83234aa43721f7ccbf" ] ], "gvcf_index": [ @@ -88,14 +88,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz.tbi:md5,3c690275c3d0b55bacb9469199b4d6d8" + "test.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz.tbi:md5,c65395b29f520cf2af04f211f9be2b36" + "test2.g.vcf.gz.tbi:md5,ae7fd13e5a8977fe487323f5ed8d0f20" ] ], "vcf": [ @@ -104,14 +104,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz:md5,0c57956b2f5a0cff8d09a19790ef94f6" + "test.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz:md5,5f3d98908d46297c7a658654d5bb3015" + "test2.vcf.gz:md5,cbbee60695d85a43650107d9d78be165" ] ], "vcf_index": [ @@ -120,14 +120,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz.tbi:md5,9ae649fed4de493a027697b339bfab36" + "test.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz.tbi:md5,d6a114149024aa8cd74dda2f1c559f5b" + "test2.vcf.gz.tbi:md5,a4eb00492150c0b99e590fc4c4c8d2db" ] ] } @@ -136,7 +136,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-29T00:09:09.621357638" + "timestamp": "2026-08-14T14:28:31.290914" }, "homo_sapiens - different samples and regions - cram - fasta - fai": { "content": [ @@ -147,14 +147,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz:md5,707212230030c8c3efbe5c2e0428da03" + "test.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz:md5,3176f86df96e50687db733c94d9c6689" + "test2.vcf.gz:md5,1369e9ba308906cf72eacd3e74fcf637" ] ], "1": [ @@ -163,14 +163,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz.tbi:md5,248648ca03f5fda904ebbef8821e0e37" + "test.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz.tbi:md5,ed7ca1a16bcff42bced0be77ee70662e" + "test2.vcf.gz.tbi:md5,40b1f062c0eda41728db7a52e04b3b06" ] ], "2": [ @@ -179,14 +179,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz:md5,89b2e47883a65bb9cae8f173e782bb17" + "test.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz:md5,875b521c835441277a527d41c950e4f5" + "test2.g.vcf.gz:md5,662cc9070dcf806fdbf02ac4d1df1519" ] ], "3": [ @@ -195,14 +195,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz.tbi:md5,1680c67fe988bc1d8220fbb4127c2c18" + "test.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz.tbi:md5,ca6f9ca8d50d339f5d65e4ec4e9a6ea6" + "test2.g.vcf.gz.tbi:md5,1a442dfe6d6f2060c5a7bbb580173949" ] ], "gvcf": [ @@ -211,14 +211,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz:md5,89b2e47883a65bb9cae8f173e782bb17" + "test.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz:md5,875b521c835441277a527d41c950e4f5" + "test2.g.vcf.gz:md5,662cc9070dcf806fdbf02ac4d1df1519" ] ], "gvcf_index": [ @@ -227,14 +227,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz.tbi:md5,1680c67fe988bc1d8220fbb4127c2c18" + "test.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz.tbi:md5,ca6f9ca8d50d339f5d65e4ec4e9a6ea6" + "test2.g.vcf.gz.tbi:md5,1a442dfe6d6f2060c5a7bbb580173949" ] ], "vcf": [ @@ -243,14 +243,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz:md5,707212230030c8c3efbe5c2e0428da03" + "test.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz:md5,3176f86df96e50687db733c94d9c6689" + "test2.vcf.gz:md5,1369e9ba308906cf72eacd3e74fcf637" ] ], "vcf_index": [ @@ -259,14 +259,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz.tbi:md5,248648ca03f5fda904ebbef8821e0e37" + "test.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz.tbi:md5,ed7ca1a16bcff42bced0be77ee70662e" + "test2.vcf.gz.tbi:md5,40b1f062c0eda41728db7a52e04b3b06" ] ] } @@ -275,7 +275,7 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-29T00:05:25.205895104" + "timestamp": "2026-08-14T14:27:26.025604" }, "homo_sapiens - two inputs - bam - fasta - fai": { "content": [ @@ -286,14 +286,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz:md5,707212230030c8c3efbe5c2e0428da03" + "test.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz:md5,707212230030c8c3efbe5c2e0428da03" + "test2.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ] ], "1": [ @@ -302,14 +302,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz.tbi:md5,248648ca03f5fda904ebbef8821e0e37" + "test.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz.tbi:md5,248648ca03f5fda904ebbef8821e0e37" + "test2.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ] ], "2": [ @@ -318,14 +318,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz:md5,89b2e47883a65bb9cae8f173e782bb17" + "test.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz:md5,89b2e47883a65bb9cae8f173e782bb17" + "test2.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ] ], "3": [ @@ -334,14 +334,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz.tbi:md5,1680c67fe988bc1d8220fbb4127c2c18" + "test.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz.tbi:md5,1680c67fe988bc1d8220fbb4127c2c18" + "test2.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ] ], "gvcf": [ @@ -350,14 +350,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz:md5,89b2e47883a65bb9cae8f173e782bb17" + "test.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz:md5,89b2e47883a65bb9cae8f173e782bb17" + "test2.g.vcf.gz:md5,71bf2757abd13abed78479887f9de8f6" ] ], "gvcf_index": [ @@ -366,14 +366,14 @@ "id": "test", "single_end": false }, - "test.g.vcf.gz.tbi:md5,1680c67fe988bc1d8220fbb4127c2c18" + "test.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ], [ { "id": "test2", "single_end": false }, - "test2.g.vcf.gz.tbi:md5,1680c67fe988bc1d8220fbb4127c2c18" + "test2.g.vcf.gz.tbi:md5,7a0dae7f0b14f5f62b00d5edf0f5d4f7" ] ], "vcf": [ @@ -382,14 +382,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz:md5,707212230030c8c3efbe5c2e0428da03" + "test.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz:md5,707212230030c8c3efbe5c2e0428da03" + "test2.vcf.gz:md5,d6ec6971b53fc10bf9ed23ddf6f544c1" ] ], "vcf_index": [ @@ -398,14 +398,14 @@ "id": "test", "single_end": false }, - "test.vcf.gz.tbi:md5,248648ca03f5fda904ebbef8821e0e37" + "test.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ], [ { "id": "test2", "single_end": false }, - "test2.vcf.gz.tbi:md5,248648ca03f5fda904ebbef8821e0e37" + "test2.vcf.gz.tbi:md5,efb861c33cf51739a4ae13a2e81126b6" ] ] } @@ -414,6 +414,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.2" }, - "timestamp": "2026-01-29T00:01:12.430387646" + "timestamp": "2026-08-14T14:26:18.722435" } } \ No newline at end of file diff --git a/subworkflows/nf-core/deepvariant/tests/nextflow.config b/subworkflows/nf-core/deepvariant/tests/nextflow.config index ad76d4ec..9a557919 100644 --- a/subworkflows/nf-core/deepvariant/tests/nextflow.config +++ b/subworkflows/nf-core/deepvariant/tests/nextflow.config @@ -1,6 +1,6 @@ process { withName: "DEEPVARIANT_MAKEEXAMPLES" { - ext.args = '--checkpoint "/opt/models/wgs" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/wgs"' + ext.args = '--checkpoint "/opt/models/wgs" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/wgs/model.keras"' } withName: "DEEPVARIANT_CALLVARIANTS" { ext.args = '--checkpoint "/opt/models/wgs"' diff --git a/subworkflows/nf-core/deepvariant/tests/pacbio_profile.config b/subworkflows/nf-core/deepvariant/tests/pacbio_profile.config new file mode 100644 index 00000000..c5af0a1d --- /dev/null +++ b/subworkflows/nf-core/deepvariant/tests/pacbio_profile.config @@ -0,0 +1,14 @@ +process { + withName: "DEEPVARIANT_MAKEEXAMPLES" { + ext.args = '--checkpoint "/opt/models/pacbio" --call_small_model_examples --small_model_indel_gq_threshold "30" --small_model_snp_gq_threshold "25" --small_model_vaf_context_window_size "51" --trained_small_model_path "/opt/smallmodels/pacbio/model.keras"' + } + withName: "DEEPVARIANT_CALLVARIANTS" { + ext.args = '--checkpoint "/opt/models/pacbio"' + } + + // This configures RUNDEEPVARIANT, which is used as a reference for the correct test output + withName: DEEPVARIANT_RUNDEEPVARIANT { + ext.args = '--model_type=PACBIO ' + ext.prefix = { "${meta.id}_out" } + } +} diff --git a/tests/chm13.nf.test.snap b/tests/chm13.nf.test.snap index c6dfc0a5..9a7b8f71 100644 --- a/tests/chm13.nf.test.snap +++ b/tests/chm13.nf.test.snap @@ -3,22 +3,22 @@ "content": [ { "BCFTOOLS_CONCAT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_SORT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_VIEW": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" }, "CLAIR3_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" @@ -27,24 +27,24 @@ "coreutils": 9.5 }, "CLAIRS_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CONCAT_SOMATIC_UNPHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CRAMINO_POST": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "CRAMINO_PRE": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "GERMLINE_ANCHORS": { "bcftools": 1.22 }, "GERMLINE_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "LONGPHASE_HAPLOTAG": { "longphase": "2.0.1" @@ -62,37 +62,38 @@ "longphase": "2.0.1" }, "LRSOMATICREPORT": { - "lrsomatic_report": "1.6.0" + "lrsomatic_report": "1.6.1" }, "METAEXTRACT": { - "samtools": 1.21 + "samtools": 1.24 }, "MINIMAP2_ALIGN": { - "minimap2": "2.29-r1283" + "minimap2": "2.30-r1287" }, "MOSDEPTH": { - "mosdepth": "0.3.11" + "gzip": 1.14, + "mosdepth": "0.3.14" }, "NANOPLOT_POST": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "NANOPLOT_PRE": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "SAMTOOLS_FAIDX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAVANA_CLASSIFY": { "savana": "1.3.8" @@ -101,26 +102,26 @@ "savana": "1.3.8" }, "SEVERUS": { - "severus": 1.6 + "severus": 1.7 }, "SOMATIC_ALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_NONALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "SORT_SOMATIC_PHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SV_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "TAG_GERMLINE": { "bcftools": 1.2 @@ -128,9 +129,6 @@ "TAG_SOMATIC": { "bcftools": 1.2 }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_ALLELES": { "7za": 16.02 }, @@ -144,15 +142,12 @@ "7za": 16.02 }, "VCFSPLIT": { - "bcftools": 1.2 + "bcftools": 1.24 }, "VEP_SAVANA": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 - }, - "WGET": { - "wget": "1.21.4" + "tabix": "1.23.1" }, "WHATSHAP_STATS": { "whatshap": 2.8 @@ -162,10 +157,10 @@ } } ], + "timestamp": "2026-10-02T14:18:35.962269271", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-09-29T14:27:45.948524511" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } } \ No newline at end of file diff --git a/tests/clair_only.nf.test.snap b/tests/clair_only.nf.test.snap index 08fdf6aa..fe86430b 100644 --- a/tests/clair_only.nf.test.snap +++ b/tests/clair_only.nf.test.snap @@ -3,55 +3,58 @@ "content": [ "88c8d3cf9cb49fdbc53372b2275d5f3e" ], + "timestamp": "2026-09-02T10:24:37.511974063", "meta": { "nf-test": "0.9.4", "nextflow": "26.04.3" - }, - "timestamp": "2026-09-02T10:24:37.511974063" + } }, "-profile test, clair only, extended samplesheet": { "content": [ { "BCFTOOLS_CONCAT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_SORT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_VIEW": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" + }, + "CLAIR3_MODEL": { + "wget": "1.21.4" }, "CLAIR3_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" }, "CLAIRS_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CONCAT_SOMATIC_UNPHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CRAMINO_POST": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "CRAMINO_PRE": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "GERMLINE_ANCHORS": { "bcftools": 1.22 }, "GERMLINE_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "LONGPHASE_HAPLOTAG": { "longphase": "2.0.1" @@ -69,43 +72,44 @@ "longphase": "2.0.1" }, "LRSOMATICREPORT": { - "lrsomatic_report": "1.6.0" + "lrsomatic_report": "1.6.1" }, "METAEXTRACT": { - "samtools": 1.21 + "samtools": 1.24 }, "MINIMAP2_ALIGN": { - "minimap2": "2.29-r1283" + "minimap2": "2.30-r1287" }, "MOSDEPTH": { - "mosdepth": "0.3.11" + "gzip": 1.14, + "mosdepth": "0.3.14" }, "NANOPLOT_POST": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "NANOPLOT_PRE": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "SAMTOOLS_FAIDX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_INDEX_MERGE": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_MERGE": { - "samtools": "1.23.1" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAVANA_CLASSIFY": { "savana": "1.3.8" @@ -114,26 +118,26 @@ "savana": "1.3.8" }, "SEVERUS": { - "severus": 1.6 + "severus": 1.7 }, "SOMATIC_ALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_NONALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "SORT_SOMATIC_PHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SV_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "TAG_GERMLINE": { "bcftools": 1.2 @@ -141,22 +145,16 @@ "TAG_SOMATIC": { "bcftools": 1.2 }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, "VCFSPLIT": { - "bcftools": 1.2 + "bcftools": 1.24 }, "VEP_SAVANA": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 - }, - "WGET": { - "wget": "1.21.4" + "tabix": "1.23.1" }, "WHATSHAP_STATS": { "whatshap": 2.8 @@ -285,6 +283,9 @@ "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_NanoStats.txt", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Yield_By_Length.html", @@ -316,6 +317,9 @@ "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_NanoStats.txt", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Yield_By_Length.html", @@ -413,6 +417,9 @@ "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_NanoStats.txt", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Yield_By_Length.html", @@ -444,6 +451,9 @@ "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_NanoStats.txt", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Yield_By_Length.html", @@ -538,6 +548,9 @@ "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_NanoStats.txt", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Yield_By_Length.html", @@ -625,6 +638,9 @@ "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_NanoStats.txt", "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample4/qc/tumor/nanoplot_ubam_rep1/sample4_tumor_rep1_ubam_Yield_By_Length.html", @@ -633,6 +649,9 @@ "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_NanoStats.txt", "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_Non_weightedHistogramReadlength.html", "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_WeightedHistogramReadlength.html", "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample4/qc/tumor/nanoplot_ubam_rep2/sample4_tumor_rep2_ubam_Yield_By_Length.html", @@ -718,6 +737,9 @@ "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_NanoStats.txt", "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample5/qc/tumor/nanoplot_ubam_rep1/sample5_tumor_rep1_ubam_Yield_By_Length.html", @@ -776,90 +798,90 @@ "sample5/vep/somatic/sample5_SOMATIC_VEP.vcf.gz_summary.html" ], [ - "sample1_normal.bam:md5,9a73c3f90bc4d9a140bcf8f652b0f269", - "sample1_normal.bam.bai:md5,37a866c569f24ed2b38f093f9475b9d6", - "sample1_tumor.bam:md5,dc15bf0e9ff1d401491347c15c408b6d", - "sample1_tumor.bam.bai:md5,fa57db4206692079d9b2084a866bf411", + "sample1_normal.bam:md5,9f778338336c41085b8d0f626f4ed3e3", + "sample1_normal.bam.bai:md5,51a07b9bb493578602f1db320fd9e778", + "sample1_tumor.bam:md5,8b74c0425ca53674a3f29b27d33f811a", + "sample1_tumor.bam.bai:md5,0e3fce541093eb470c1b0d98f44f120e", "sample1_normal.flagstat:md5,1c41ea9923945501eb7e41f83a90502d", "sample1_normal.idxstats:md5,902e503387799123ea59255e3fca172c", - "sample1_normal.stats:md5,a8b3fba9c54efbc0934d6eacc1807140", + "sample1_normal.stats:md5,d79e3c68505d39cf29641dfdf5849ef1", "sample1_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample1_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample1_tumor.stats:md5,1c60a1d249d2e503b0678c72e851ea93", + "sample1_tumor.stats:md5,fb77e8b2b144fe4c525e944a61757ef9", "sample1_whatshap_stats.gtf:md5,36bda647c08358df0eac0be321c24b20", "sample1_whatshap_stats.log:md5,938f792fd22bb658a2c7cb1b7653035f", "sample1_whatshap_stats.tsv:md5,cf8917be389dfef1344eeb6b7e99c7c5", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,47cb0e0bbe71abdbf4f40217dfda43f9", - "read_qual.txt:md5,78247dfa2ea336eac0e128eba5e9eef4", + "breakpoints_double.csv:md5,003e4e80ec4233315762233e5f1ec0d8", + "read_qual.txt:md5,92321a03aae1168fdce8ea921b635036", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample2_normal.bam:md5,c18bbb1bc05b0ec830fa1ac3c6ef542f", - "sample2_normal.bam.bai:md5,de77684ef264476b3e0531b61ca23740", - "sample2_tumor.bam:md5,8b8cb5ac7668b8ac2f4097f584481d35", - "sample2_tumor.bam.bai:md5,3b46456b0e7b00688519dfb25c8e3c88", + "sample2_normal.bam:md5,6e365c15fcf3e0364d84d2508fb6f011", + "sample2_normal.bam.bai:md5,50b28bcf99f53a752b98c6cace435346", + "sample2_tumor.bam:md5,748962c469b51be5a293d46ce035196c", + "sample2_tumor.bam.bai:md5,ff56a626f3a59fcf6235a973d2755a7d", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", - "sample2_normal.stats:md5,20c47cb94f9ac739d69c57be6daf82c5", + "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", - "sample2_tumor.stats:md5,8635df10132c85a13f2d9878b7cf90a2", - "sample2_whatshap_stats.gtf:md5,35cd28699c298d99d01cee1c24c6d61b", - "sample2_whatshap_stats.log:md5,75a69a8e651979e25467d6e3c84cdf90", - "sample2_whatshap_stats.tsv:md5,92d7234e355833b1ec6f54951c38c09d", + "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", + "sample2_whatshap_stats.gtf:md5,a6c8a814e6a959cefa93d228486e14f1", + "sample2_whatshap_stats.log:md5,3b0b688b6cc26640b56b7df6fd206135", + "sample2_whatshap_stats.tsv:md5,31f4d9c3228d60ac463695ca19d05f3a", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,48baac86492026a4a7947bc708c47e6e", - "read_qual.txt:md5,8b92ff7dc4536188be159b95525511cd", + "breakpoints_double.csv:md5,ab7ccd32508029426ca1365053fdc23b", + "read_qual.txt:md5,57aaac5f18f81b1cbde13e49c012651a", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample3_tumor.bam:md5,3c995151bdd974df5bf61d08606d54d3", - "sample3_tumor.bam.bai:md5,9d5964ef8f44127a7d9162d628e2407d", + "sample3_tumor.bam:md5,06eb979bcc58aac9dc9429f2c6a91b1c", + "sample3_tumor.bam.bai:md5,59c95f7b5733008f51de5f30bd902ff7", "sample3_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample3_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample3_tumor.stats:md5,ecd5ea4fee37379dd5c5ae3e89dfddda", + "sample3_tumor.stats:md5,9d2945cfd8813c828d702e86afbaa58b", "sample3_whatshap_stats.gtf:md5,46a97067376b06b476d180709bc9e3d8", "sample3_whatshap_stats.log:md5,376254ec9c98f9ba204895e7085516ed", "sample3_whatshap_stats.tsv:md5,f7cc79156f23e884ead18e50b8434dbf", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,56e899f85876cee082788927d0f89c5f", - "read_qual.txt:md5,b918430d35354dad1d7f02f21e4cd4ed", + "breakpoints_double.csv:md5,c18b66eebc1714279e685ab1c56d6cf3", + "read_qual.txt:md5,f6d803b54f3aa4a36f21af1a9a97923f", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "sample4_tumor.flagstat:md5,5710382ba31b23172ca19f9407f689b4", "sample4_tumor.idxstats:md5,3bf4793a1667f41f0b31d578f99e3955", - "sample4_tumor.stats:md5,b998982ea897721c529959e39b693ec6", + "sample4_tumor.stats:md5,b37e0b2b6d3defa1f738baa99af1848d", "sample4_whatshap_stats.gtf:md5,9ca85642243042d3580d14a1d54b3d6a", "sample4_whatshap_stats.log:md5,b453653f5d83c4aa408862e7141f0965", "sample4_whatshap_stats.tsv:md5,8830262298440c4bd8675d1ff3f601e8", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,e3beaa65b40a5093a7e74cecb0b2cfd2", - "read_qual.txt:md5,42eb25878cc6b823a562406db56b29d7", + "breakpoints_double.csv:md5,1b6b52f5a606d329dcf18226dc0babd0", + "read_qual.txt:md5,1efaf50beda973a8e6502566a212628c", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample5_tumor.bam:md5,e3b7a4c9d391e9ddda187d7d6bcd1403", - "sample5_tumor.bam.bai:md5,d3ba11453e0eefda8d602e7b4883e82c", + "sample5_tumor.bam:md5,72be268606a88f82cf1ea3e6c30057d3", + "sample5_tumor.bam.bai:md5,65371b799a98bae3fd1953bc83f49c8f", "sample5_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample5_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample5_tumor.stats:md5,3f1429e9b2379bf282299d71a8c5d22c", + "sample5_tumor.stats:md5,d757137207bc345e962cc3c9640252f2", "sample5_whatshap_stats.gtf:md5,d02a3be9b50b953b32b42e2fedabc0e5", "sample5_whatshap_stats.log:md5,a2e4ed9edca8609fc947041a9fead794", "sample5_whatshap_stats.tsv:md5,860ad30057b783e24dcb41ec581c8b68", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,cc06f0726375cc45f29875b5053831e9", - "read_qual.txt:md5,b918430d35354dad1d7f02f21e4cd4ed", + "breakpoints_double.csv:md5,8f023c63deb462ea4b55566babd365d0", + "read_qual.txt:md5,f6d803b54f3aa4a36f21af1a9a97923f", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], + "timestamp": "2026-10-02T14:23:07.653089124", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-09-29T13:57:41.300856488" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } } \ No newline at end of file diff --git a/tests/consensus.nf.test.snap b/tests/consensus.nf.test.snap index dd420331..f6bac70b 100644 --- a/tests/consensus.nf.test.snap +++ b/tests/consensus.nf.test.snap @@ -3,105 +3,105 @@ "content": [ { "BCFTOOLS_ANNOTATE": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_CONCAT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_ISEC": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_NORM": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_NORM_REJOIN": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_QUERY": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_SORT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_SORT_CONSENSUS": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_VIEW": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" }, "CLAIR3_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" }, "CLAIRS_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CONCAT_SOMATIC_UNPHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CRAMINO_POST": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "CRAMINO_PRE": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "DEEPSOMATIC_CALLVARIANTS": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPSOMATIC_MAKEEXAMPLES": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPSOMATIC_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DEEPSOMATIC_POSTPROCESSVARIANTS": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPVARIANT_CALLVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DEEPVARIANT_MAKEEXAMPLES": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DEEPVARIANT_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DEEPVARIANT_POSTPROCESSVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DS_GERMLINE_REJOIN": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_GERMLINE_SELECT": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DS_VERDICT_ANNOTATE": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_QUERY": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_SPLIT_DS": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_SPLIT_DV": { - "bcftools": 1.22 + "bcftools": 1.24 }, "GERMLINE_ANCHORS": { "bcftools": 1.22 }, "GERMLINE_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "LONGPHASE_HAPLOTAG": { "longphase": "2.0.1" @@ -119,37 +119,38 @@ "longphase": "2.0.1" }, "LRSOMATICREPORT": { - "lrsomatic_report": "1.6.0" + "lrsomatic_report": "1.6.1" }, "METAEXTRACT": { - "samtools": 1.21 + "samtools": 1.24 }, "MINIMAP2_ALIGN": { - "minimap2": "2.29-r1283" + "minimap2": "2.30-r1287" }, "MOSDEPTH": { - "mosdepth": "0.3.11" + "gzip": 1.14, + "mosdepth": "0.3.14" }, "NANOPLOT_POST": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "NANOPLOT_PRE": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "SAMTOOLS_FAIDX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAVANA_CLASSIFY": { "savana": "1.3.8" @@ -158,29 +159,29 @@ "savana": "1.3.8" }, "SEVERUS": { - "severus": 1.6 + "severus": 1.7 }, "SOMATIC_ALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_NONALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "SORT_POST_NORM": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SORT_SOMATIC_PHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SV_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "TAG_GERMLINE": { "bcftools": 1.2 @@ -188,22 +189,16 @@ "TAG_SOMATIC": { "bcftools": 1.2 }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, "VCFSPLIT": { - "bcftools": 1.2 + "bcftools": 1.24 }, "VEP_SAVANA": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 - }, - "WGET": { - "wget": "1.21.4" + "tabix": "1.23.1" }, "WHATSHAP_STATS": { "whatshap": 2.8 @@ -332,6 +327,9 @@ "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_NanoStats.txt", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Yield_By_Length.html", @@ -363,6 +361,9 @@ "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_NanoStats.txt", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Yield_By_Length.html", @@ -466,6 +467,9 @@ "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_NanoStats.txt", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Yield_By_Length.html", @@ -497,6 +501,9 @@ "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_NanoStats.txt", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Yield_By_Length.html", @@ -597,6 +604,9 @@ "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_NanoStats.txt", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Yield_By_Length.html", @@ -661,64 +671,64 @@ "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" ], [ - "sample1_normal.bam:md5,5d3f0615b0d8a9748e6b6bc7d76ab577", - "sample1_normal.bam.bai:md5,3ef784f2536c7506a50d0ed20c3d78fb", - "sample1_tumor.bam:md5,7317ffe61fe3c4f73961db60329adfa9", - "sample1_tumor.bam.bai:md5,6aaeaebe40c422358bb55296c508db2b", + "sample1_normal.bam:md5,529e96162af6f913be7e50a210365d8a", + "sample1_normal.bam.bai:md5,034f8853f7aa7907adb51a16b56a94f9", + "sample1_tumor.bam:md5,fe9c35bc653348f062189cd495ed5208", + "sample1_tumor.bam.bai:md5,cca02afab0659bd5aa8941a331ba87dd", "sample1_normal.flagstat:md5,1c41ea9923945501eb7e41f83a90502d", "sample1_normal.idxstats:md5,902e503387799123ea59255e3fca172c", - "sample1_normal.stats:md5,a8b3fba9c54efbc0934d6eacc1807140", + "sample1_normal.stats:md5,d79e3c68505d39cf29641dfdf5849ef1", "sample1_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample1_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample1_tumor.stats:md5,1c60a1d249d2e503b0678c72e851ea93", - "sample1_whatshap_stats.gtf:md5,30bde8f88b7d4e88b935e88e00997ce7", - "sample1_whatshap_stats.log:md5,a3cf683c728ce63a5c2be33edd20f9cc", - "sample1_whatshap_stats.tsv:md5,cca55ca6f99eb0857759a4007c10b346", + "sample1_tumor.stats:md5,fb77e8b2b144fe4c525e944a61757ef9", + "sample1_whatshap_stats.gtf:md5,ebc7facf20e55318eb84715b54c0e0b3", + "sample1_whatshap_stats.log:md5,75c5750e0f54d4e8ef1ad71ab5ae4951", + "sample1_whatshap_stats.tsv:md5,ec24f50578a481fcda2cea12dcfd1bae", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,47cb0e0bbe71abdbf4f40217dfda43f9", - "read_qual.txt:md5,78247dfa2ea336eac0e128eba5e9eef4", + "breakpoints_double.csv:md5,003e4e80ec4233315762233e5f1ec0d8", + "read_qual.txt:md5,92321a03aae1168fdce8ea921b635036", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample2_normal.bam:md5,ece242f245fc4e2210e13e6de93b8fdc", - "sample2_normal.bam.bai:md5,d96d0071ab25ca8dc2327acba4395515", - "sample2_tumor.bam:md5,0c538dc0e27566677313d1f9374fa2b1", - "sample2_tumor.bam.bai:md5,ab2fca59e6729e011c30310eaee2ef1c", + "sample2_normal.bam:md5,a273e94b638010aa908c86605a097c68", + "sample2_normal.bam.bai:md5,86be7d1574e266712ccb03331b49f627", + "sample2_tumor.bam:md5,3717c4d87888d4d19b8ab342e1cbb95c", + "sample2_tumor.bam.bai:md5,15c558961f97187a835cb8615b792210", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", - "sample2_normal.stats:md5,20c47cb94f9ac739d69c57be6daf82c5", + "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", - "sample2_tumor.stats:md5,8635df10132c85a13f2d9878b7cf90a2", - "sample2_whatshap_stats.gtf:md5,2e5ace4cac0b42bb6132513062781e47", - "sample2_whatshap_stats.log:md5,0979359e459a14037a704733f32d3b95", - "sample2_whatshap_stats.tsv:md5,8c974019af5c839c72604e7526ae8a3d", + "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", + "sample2_whatshap_stats.gtf:md5,69e86a7cd3659c91ae37e55c0535849f", + "sample2_whatshap_stats.log:md5,854d77b7711a53c418cf779ac45d5b60", + "sample2_whatshap_stats.tsv:md5,1b2e88694c1f14f946543c191e1f75b7", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,48baac86492026a4a7947bc708c47e6e", - "read_qual.txt:md5,8b92ff7dc4536188be159b95525511cd", + "breakpoints_double.csv:md5,ab7ccd32508029426ca1365053fdc23b", + "read_qual.txt:md5,57aaac5f18f81b1cbde13e49c012651a", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample3_tumor.bam:md5,3c995151bdd974df5bf61d08606d54d3", - "sample3_tumor.bam.bai:md5,9d5964ef8f44127a7d9162d628e2407d", + "sample3_tumor.bam:md5,06eb979bcc58aac9dc9429f2c6a91b1c", + "sample3_tumor.bam.bai:md5,59c95f7b5733008f51de5f30bd902ff7", "sample3_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample3_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample3_tumor.stats:md5,ecd5ea4fee37379dd5c5ae3e89dfddda", + "sample3_tumor.stats:md5,9d2945cfd8813c828d702e86afbaa58b", "sample3_whatshap_stats.gtf:md5,46a97067376b06b476d180709bc9e3d8", "sample3_whatshap_stats.log:md5,376254ec9c98f9ba204895e7085516ed", "sample3_whatshap_stats.tsv:md5,f7cc79156f23e884ead18e50b8434dbf", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,56e899f85876cee082788927d0f89c5f", - "read_qual.txt:md5,b918430d35354dad1d7f02f21e4cd4ed", + "breakpoints_double.csv:md5,c18b66eebc1714279e685ab1c56d6cf3", + "read_qual.txt:md5,f6d803b54f3aa4a36f21af1a9a97923f", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], + "timestamp": "2026-10-02T14:27:43.864109448", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-10-02T10:14:00.696785246" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } } \ No newline at end of file diff --git a/tests/deep_only.nf.test.snap b/tests/deep_only.nf.test.snap index 2f010a35..18904cbe 100644 --- a/tests/deep_only.nf.test.snap +++ b/tests/deep_only.nf.test.snap @@ -3,72 +3,72 @@ "content": [ { "BCFTOOLS_CONCAT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_SORT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_VIEW": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CONCAT_SOMATIC_UNPHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CRAMINO_POST": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "CRAMINO_PRE": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "DEEPSOMATIC_CALLVARIANTS": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPSOMATIC_MAKEEXAMPLES": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPSOMATIC_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DEEPSOMATIC_POSTPROCESSVARIANTS": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPVARIANT_CALLVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DEEPVARIANT_MAKEEXAMPLES": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DEEPVARIANT_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DEEPVARIANT_POSTPROCESSVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DS_GERMLINE_REJOIN": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_GERMLINE_SELECT": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DS_VERDICT_ANNOTATE": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_QUERY": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_SPLIT_DS": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_SPLIT_DV": { - "bcftools": 1.22 + "bcftools": 1.24 }, "GERMLINE_ANCHORS": { "bcftools": 1.22 }, "GERMLINE_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "LONGPHASE_HAPLOTAG": { "longphase": "2.0.1" @@ -86,37 +86,38 @@ "longphase": "2.0.1" }, "LRSOMATICREPORT": { - "lrsomatic_report": "1.6.0" + "lrsomatic_report": "1.6.1" }, "METAEXTRACT": { - "samtools": 1.21 + "samtools": 1.24 }, "MINIMAP2_ALIGN": { - "minimap2": "2.29-r1283" + "minimap2": "2.30-r1287" }, "MOSDEPTH": { - "mosdepth": "0.3.11" + "gzip": 1.14, + "mosdepth": "0.3.14" }, "NANOPLOT_POST": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "NANOPLOT_PRE": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "SAMTOOLS_FAIDX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAVANA_CLASSIFY": { "savana": "1.3.8" @@ -125,26 +126,26 @@ "savana": "1.3.8" }, "SEVERUS": { - "severus": 1.6 + "severus": 1.7 }, "SOMATIC_ALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_NONALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "SORT_SOMATIC_PHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SV_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "TAG_GERMLINE": { "bcftools": 1.2 @@ -152,19 +153,13 @@ "TAG_SOMATIC": { "bcftools": 1.2 }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, "VEP_SAVANA": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 - }, - "WGET": { - "wget": "1.21.4" + "tabix": "1.23.1" }, "WHATSHAP_STATS": { "whatshap": 2.8 @@ -293,6 +288,9 @@ "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_NanoStats.txt", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Yield_By_Length.html", @@ -324,6 +322,9 @@ "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_NanoStats.txt", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Yield_By_Length.html", @@ -419,6 +420,9 @@ "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_NanoStats.txt", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Yield_By_Length.html", @@ -450,6 +454,9 @@ "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_NanoStats.txt", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Yield_By_Length.html", @@ -542,6 +549,9 @@ "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_NanoStats.txt", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Yield_By_Length.html", @@ -597,64 +607,64 @@ "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" ], [ - "sample1_normal.bam:md5,c3eec48a64763f8a5cc7307c5fe00773", - "sample1_normal.bam.bai:md5,ddb44b5bfb0f798950d8872e9d60d784", - "sample1_tumor.bam:md5,8173a435625724d6192ff6a0e9e737bb", - "sample1_tumor.bam.bai:md5,1de9940795d293f650a22c6983b2a072", + "sample1_normal.bam:md5,bffc2444a70313bb24a6b52189bbb65a", + "sample1_normal.bam.bai:md5,c8162096af7955d5550bb01a9a870013", + "sample1_tumor.bam:md5,a04100696156c1d2c66f2b69e1119048", + "sample1_tumor.bam.bai:md5,3cbed78851ca9d34da2cca80a680bd4a", "sample1_normal.flagstat:md5,1c41ea9923945501eb7e41f83a90502d", "sample1_normal.idxstats:md5,902e503387799123ea59255e3fca172c", - "sample1_normal.stats:md5,a8b3fba9c54efbc0934d6eacc1807140", + "sample1_normal.stats:md5,d79e3c68505d39cf29641dfdf5849ef1", "sample1_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample1_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample1_tumor.stats:md5,1c60a1d249d2e503b0678c72e851ea93", - "sample1_whatshap_stats.gtf:md5,e1d0e87353a5f9aed8a9ac4bf7973427", - "sample1_whatshap_stats.log:md5,43811a1aa4726c2ef62646ff22d1fad0", - "sample1_whatshap_stats.tsv:md5,a821c5d0e3451f82327645fee89e68eb", + "sample1_tumor.stats:md5,fb77e8b2b144fe4c525e944a61757ef9", + "sample1_whatshap_stats.gtf:md5,0123cb1b2ef6d158600eac3a8e414b2f", + "sample1_whatshap_stats.log:md5,4301d77ccf3beaa112b6014b14dc6725", + "sample1_whatshap_stats.tsv:md5,46666007fed1d295aba347a9e7618e34", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,47cb0e0bbe71abdbf4f40217dfda43f9", - "read_qual.txt:md5,78247dfa2ea336eac0e128eba5e9eef4", + "breakpoints_double.csv:md5,003e4e80ec4233315762233e5f1ec0d8", + "read_qual.txt:md5,92321a03aae1168fdce8ea921b635036", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample2_normal.bam:md5,cfe03e8510475f54eceea0c0c80db501", - "sample2_normal.bam.bai:md5,02a12e347af31e04ffa589935f89e5ed", - "sample2_tumor.bam:md5,7380c09f2ee3ebe328f1a50671408209", - "sample2_tumor.bam.bai:md5,644083528fd153b24d97ef687417e089", + "sample2_normal.bam:md5,dc00cceeb05cf7d44720022376bee8cb", + "sample2_normal.bam.bai:md5,53126dd3667fcd9aeb8a06ac5de1bcb2", + "sample2_tumor.bam:md5,565c542d2786b5ec53950ffbf0ef89d7", + "sample2_tumor.bam.bai:md5,a9a7606e6c48f667b4f3cbe15ce33017", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", - "sample2_normal.stats:md5,20c47cb94f9ac739d69c57be6daf82c5", + "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", - "sample2_tumor.stats:md5,8635df10132c85a13f2d9878b7cf90a2", - "sample2_whatshap_stats.gtf:md5,af33281699a1d0da83fbe7eaff198d03", - "sample2_whatshap_stats.log:md5,0cd536df69e244a5271e9c5440ea0f3f", - "sample2_whatshap_stats.tsv:md5,c7cc47024ef622a72e7f4f0d5fa119eb", + "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", + "sample2_whatshap_stats.gtf:md5,e055e04aed7909a3281c3939f81425ea", + "sample2_whatshap_stats.log:md5,9e49b7246f7ea452e7dfe90d611395ea", + "sample2_whatshap_stats.tsv:md5,b887c4013730bdfa6474ba703dd1ca17", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,48baac86492026a4a7947bc708c47e6e", - "read_qual.txt:md5,8b92ff7dc4536188be159b95525511cd", + "breakpoints_double.csv:md5,ab7ccd32508029426ca1365053fdc23b", + "read_qual.txt:md5,57aaac5f18f81b1cbde13e49c012651a", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample3_tumor.bam:md5,9449340acf09825767e1f5b4a3f0e5c2", - "sample3_tumor.bam.bai:md5,3be46bae7402c3865f27881457b7a466", + "sample3_tumor.bam:md5,8a6d2472ecbcb90f849b12ee14bf3a47", + "sample3_tumor.bam.bai:md5,78eefad4ce39c3ae1ef672cf9a8417f5", "sample3_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample3_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample3_tumor.stats:md5,ecd5ea4fee37379dd5c5ae3e89dfddda", - "sample3_whatshap_stats.gtf:md5,5a9b20b6ed25ef2ede4271156a83ce88", - "sample3_whatshap_stats.log:md5,a62c149286176f863d4293d0748a6dec", - "sample3_whatshap_stats.tsv:md5,90c20ce05eef472d9f5bb77754636d31", + "sample3_tumor.stats:md5,9d2945cfd8813c828d702e86afbaa58b", + "sample3_whatshap_stats.gtf:md5,e5bf3cd208a6db9b66c2b29a637797ff", + "sample3_whatshap_stats.log:md5,8905429dcd10367f632430339363068f", + "sample3_whatshap_stats.tsv:md5,2dad37f19eea1a9cb75a1b07f584a5ed", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,56e899f85876cee082788927d0f89c5f", - "read_qual.txt:md5,b918430d35354dad1d7f02f21e4cd4ed", + "breakpoints_double.csv:md5,c18b66eebc1714279e685ab1c56d6cf3", + "read_qual.txt:md5,f6d803b54f3aa4a36f21af1a9a97923f", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], + "timestamp": "2026-10-02T14:24:05.801015427", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-10-02T10:11:49.172008724" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } } \ No newline at end of file diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index b36e5f38..8e0d0eef 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -3,45 +3,45 @@ "content": [ { "BCFTOOLS_CONCAT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_SORT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_VIEW": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" }, "CLAIR3_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" }, "CLAIRS_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CONCAT_SOMATIC_UNPHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CRAMINO_POST": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "CRAMINO_PRE": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "GERMLINE_ANCHORS": { "bcftools": 1.22 }, "GERMLINE_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "LONGPHASE_HAPLOTAG": { "longphase": "2.0.1" @@ -59,37 +59,38 @@ "longphase": "2.0.1" }, "LRSOMATICREPORT": { - "lrsomatic_report": "1.6.0" + "lrsomatic_report": "1.6.1" }, "METAEXTRACT": { - "samtools": 1.21 + "samtools": 1.24 }, "MINIMAP2_ALIGN": { - "minimap2": "2.29-r1283" + "minimap2": "2.30-r1287" }, "MOSDEPTH": { - "mosdepth": "0.3.11" + "gzip": 1.14, + "mosdepth": "0.3.14" }, "NANOPLOT_POST": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "NANOPLOT_PRE": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "SAMTOOLS_FAIDX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAVANA_CLASSIFY": { "savana": "1.3.8" @@ -98,26 +99,26 @@ "savana": "1.3.8" }, "SEVERUS": { - "severus": 1.6 + "severus": 1.7 }, "SOMATIC_ALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_NONALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "SORT_SOMATIC_PHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SV_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "TAG_GERMLINE": { "bcftools": 1.2 @@ -125,22 +126,16 @@ "TAG_SOMATIC": { "bcftools": 1.2 }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, "VCFSPLIT": { - "bcftools": 1.2 + "bcftools": 1.24 }, "VEP_SAVANA": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 - }, - "WGET": { - "wget": "1.21.4" + "tabix": "1.23.1" }, "WHATSHAP_STATS": { "whatshap": 2.8 @@ -269,6 +264,9 @@ "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_NanoStats.txt", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Yield_By_Length.html", @@ -300,6 +298,9 @@ "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_NanoStats.txt", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Yield_By_Length.html", @@ -397,6 +398,9 @@ "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_NanoStats.txt", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Yield_By_Length.html", @@ -428,6 +432,9 @@ "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_NanoStats.txt", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Yield_By_Length.html", @@ -522,6 +529,9 @@ "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_NanoStats.txt", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Yield_By_Length.html", @@ -580,64 +590,64 @@ "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" ], [ - "sample1_normal.bam:md5,9a73c3f90bc4d9a140bcf8f652b0f269", - "sample1_normal.bam.bai:md5,37a866c569f24ed2b38f093f9475b9d6", - "sample1_tumor.bam:md5,dc15bf0e9ff1d401491347c15c408b6d", - "sample1_tumor.bam.bai:md5,fa57db4206692079d9b2084a866bf411", + "sample1_normal.bam:md5,9f778338336c41085b8d0f626f4ed3e3", + "sample1_normal.bam.bai:md5,51a07b9bb493578602f1db320fd9e778", + "sample1_tumor.bam:md5,8b74c0425ca53674a3f29b27d33f811a", + "sample1_tumor.bam.bai:md5,0e3fce541093eb470c1b0d98f44f120e", "sample1_normal.flagstat:md5,1c41ea9923945501eb7e41f83a90502d", "sample1_normal.idxstats:md5,902e503387799123ea59255e3fca172c", - "sample1_normal.stats:md5,a8b3fba9c54efbc0934d6eacc1807140", + "sample1_normal.stats:md5,d79e3c68505d39cf29641dfdf5849ef1", "sample1_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample1_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample1_tumor.stats:md5,1c60a1d249d2e503b0678c72e851ea93", + "sample1_tumor.stats:md5,fb77e8b2b144fe4c525e944a61757ef9", "sample1_whatshap_stats.gtf:md5,36bda647c08358df0eac0be321c24b20", "sample1_whatshap_stats.log:md5,938f792fd22bb658a2c7cb1b7653035f", "sample1_whatshap_stats.tsv:md5,cf8917be389dfef1344eeb6b7e99c7c5", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,47cb0e0bbe71abdbf4f40217dfda43f9", - "read_qual.txt:md5,78247dfa2ea336eac0e128eba5e9eef4", + "breakpoints_double.csv:md5,003e4e80ec4233315762233e5f1ec0d8", + "read_qual.txt:md5,92321a03aae1168fdce8ea921b635036", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample2_normal.bam:md5,c18bbb1bc05b0ec830fa1ac3c6ef542f", - "sample2_normal.bam.bai:md5,de77684ef264476b3e0531b61ca23740", - "sample2_tumor.bam:md5,8b8cb5ac7668b8ac2f4097f584481d35", - "sample2_tumor.bam.bai:md5,3b46456b0e7b00688519dfb25c8e3c88", + "sample2_normal.bam:md5,6e365c15fcf3e0364d84d2508fb6f011", + "sample2_normal.bam.bai:md5,50b28bcf99f53a752b98c6cace435346", + "sample2_tumor.bam:md5,748962c469b51be5a293d46ce035196c", + "sample2_tumor.bam.bai:md5,ff56a626f3a59fcf6235a973d2755a7d", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", - "sample2_normal.stats:md5,20c47cb94f9ac739d69c57be6daf82c5", + "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", - "sample2_tumor.stats:md5,8635df10132c85a13f2d9878b7cf90a2", - "sample2_whatshap_stats.gtf:md5,35cd28699c298d99d01cee1c24c6d61b", - "sample2_whatshap_stats.log:md5,75a69a8e651979e25467d6e3c84cdf90", - "sample2_whatshap_stats.tsv:md5,92d7234e355833b1ec6f54951c38c09d", + "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", + "sample2_whatshap_stats.gtf:md5,a6c8a814e6a959cefa93d228486e14f1", + "sample2_whatshap_stats.log:md5,3b0b688b6cc26640b56b7df6fd206135", + "sample2_whatshap_stats.tsv:md5,31f4d9c3228d60ac463695ca19d05f3a", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,48baac86492026a4a7947bc708c47e6e", - "read_qual.txt:md5,8b92ff7dc4536188be159b95525511cd", + "breakpoints_double.csv:md5,ab7ccd32508029426ca1365053fdc23b", + "read_qual.txt:md5,57aaac5f18f81b1cbde13e49c012651a", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample3_tumor.bam:md5,3c995151bdd974df5bf61d08606d54d3", - "sample3_tumor.bam.bai:md5,9d5964ef8f44127a7d9162d628e2407d", + "sample3_tumor.bam:md5,06eb979bcc58aac9dc9429f2c6a91b1c", + "sample3_tumor.bam.bai:md5,59c95f7b5733008f51de5f30bd902ff7", "sample3_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample3_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample3_tumor.stats:md5,ecd5ea4fee37379dd5c5ae3e89dfddda", + "sample3_tumor.stats:md5,9d2945cfd8813c828d702e86afbaa58b", "sample3_whatshap_stats.gtf:md5,46a97067376b06b476d180709bc9e3d8", "sample3_whatshap_stats.log:md5,376254ec9c98f9ba204895e7085516ed", "sample3_whatshap_stats.tsv:md5,f7cc79156f23e884ead18e50b8434dbf", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,56e899f85876cee082788927d0f89c5f", - "read_qual.txt:md5,b918430d35354dad1d7f02f21e4cd4ed", + "breakpoints_double.csv:md5,c18b66eebc1714279e685ab1c56d6cf3", + "read_qual.txt:md5,f6d803b54f3aa4a36f21af1a9a97923f", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], + "timestamp": "2026-10-02T14:18:20.049462179", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-09-29T13:03:39.7913195" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } } \ No newline at end of file diff --git a/tests/union.nf.test.snap b/tests/union.nf.test.snap index 729d121c..01406ba4 100644 --- a/tests/union.nf.test.snap +++ b/tests/union.nf.test.snap @@ -3,99 +3,99 @@ "content": [ { "BCFTOOLS_ANNOTATE": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_CALLER_UNION": { "bcftools": 1.22 }, "BCFTOOLS_CONCAT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_NORM": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_QUERY": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_SORT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "BCFTOOLS_VIEW": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" }, "CLAIR3_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" }, "CLAIRS_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "CONCAT_SOMATIC_UNPHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "CRAMINO_POST": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "CRAMINO_PRE": { - "cramino": "1.3.0" + "cramino": "2.0.0" }, "DEEPSOMATIC_CALLVARIANTS": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPSOMATIC_MAKEEXAMPLES": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPSOMATIC_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DEEPSOMATIC_POSTPROCESSVARIANTS": { - "deepsomatic": "1.7.0" + "deepsomatic": "1.10.0" }, "DEEPVARIANT_CALLVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DEEPVARIANT_MAKEEXAMPLES": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DEEPVARIANT_PASS_FILTER": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DEEPVARIANT_POSTPROCESSVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "DS_GERMLINE_REJOIN": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_GERMLINE_SELECT": { - "bcftools": "1.23.1" + "bcftools": 1.24 }, "DS_VERDICT_ANNOTATE": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_QUERY": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_SPLIT_DS": { - "bcftools": 1.22 + "bcftools": 1.24 }, "DS_VERDICT_SPLIT_DV": { - "bcftools": 1.22 + "bcftools": 1.24 }, "GERMLINE_ANCHORS": { "bcftools": 1.22 }, "GERMLINE_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "LONGPHASE_HAPLOTAG": { "longphase": "2.0.1" @@ -113,37 +113,38 @@ "longphase": "2.0.1" }, "LRSOMATICREPORT": { - "lrsomatic_report": "1.6.0" + "lrsomatic_report": "1.6.1" }, "METAEXTRACT": { - "samtools": 1.21 + "samtools": 1.24 }, "MINIMAP2_ALIGN": { - "minimap2": "2.29-r1283" + "minimap2": "2.30-r1287" }, "MOSDEPTH": { - "mosdepth": "0.3.11" + "gzip": 1.14, + "mosdepth": "0.3.14" }, "NANOPLOT_POST": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "NANOPLOT_PRE": { - "nanoplot": "1.46.1" + "NanoPlot": "1.48.0" }, "SAMTOOLS_FAIDX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_FLAGSTAT": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_IDXSTATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_INDEX": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAMTOOLS_STATS": { - "samtools": "1.22.1" + "samtools": 1.24 }, "SAVANA_CLASSIFY": { "savana": "1.3.8" @@ -152,29 +153,29 @@ "savana": "1.3.8" }, "SEVERUS": { - "severus": 1.6 + "severus": 1.7 }, "SOMATIC_ALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_NONALT": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SOMATIC_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "SORT_POST_NORM": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SORT_SOMATIC_PHASED": { - "bcftools": 1.22 + "bcftools": 1.24 }, "SV_VEP": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 + "tabix": "1.23.1" }, "TAG_GERMLINE": { "bcftools": 1.2 @@ -182,22 +183,16 @@ "TAG_SOMATIC": { "bcftools": 1.2 }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, "VCFSPLIT": { - "bcftools": 1.2 + "bcftools": 1.24 }, "VEP_SAVANA": { - "ensemblvep": 115.2, + "ensemblvep": 116.1, "perl-math-cdf": 0.1, - "tabix": 1.21 - }, - "WGET": { - "wget": "1.21.4" + "tabix": "1.23.1" }, "WHATSHAP_STATS": { "whatshap": 2.8 @@ -326,6 +321,9 @@ "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_NanoStats.txt", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/normal/nanoplot_ubam_rep1/sample1_normal_rep1_ubam_Yield_By_Length.html", @@ -357,6 +355,9 @@ "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_NanoStats.txt", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample1/qc/tumor/nanoplot_ubam_rep1/sample1_tumor_rep1_ubam_Yield_By_Length.html", @@ -460,6 +461,9 @@ "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_NanoStats.txt", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/normal/nanoplot_ubam_rep1/sample2_normal_rep1_ubam_Yield_By_Length.html", @@ -491,6 +495,9 @@ "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_NanoStats.txt", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample2/qc/tumor/nanoplot_ubam_rep1/sample2_tumor_rep1_ubam_Yield_By_Length.html", @@ -591,6 +598,9 @@ "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_NanoStats.txt", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Non_weightedLogTransformed_HistogramReadlength.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityHistogramDynamic_Histogram_percent_identity.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_dot.html", + "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_PercentIdentityvsAlignedReadLength_kde.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedHistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_WeightedLogTransformed_HistogramReadlength.html", "sample3/qc/tumor/nanoplot_ubam_rep1/sample3_tumor_rep1_ubam_Yield_By_Length.html", @@ -655,64 +665,64 @@ "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" ], [ - "sample1_normal.bam:md5,969a2009965e03c84ca3ec46c2fbbd38", - "sample1_normal.bam.bai:md5,62da15ac99896f0e90a694bf52ba19d3", - "sample1_tumor.bam:md5,6267bf3e86a69536e45968b908d1cc6f", - "sample1_tumor.bam.bai:md5,1ec6d68c92182ff9051b8707c4975445", + "sample1_normal.bam:md5,157917470659ee56879fd5c8570149c3", + "sample1_normal.bam.bai:md5,affa80567bd26028f688cb5d3346fa44", + "sample1_tumor.bam:md5,be58d6ef251d2c044b0dfdc5b6f19c89", + "sample1_tumor.bam.bai:md5,84c74bdfe9cf7d9612d967b9aba95a4c", "sample1_normal.flagstat:md5,1c41ea9923945501eb7e41f83a90502d", "sample1_normal.idxstats:md5,902e503387799123ea59255e3fca172c", - "sample1_normal.stats:md5,a8b3fba9c54efbc0934d6eacc1807140", + "sample1_normal.stats:md5,d79e3c68505d39cf29641dfdf5849ef1", "sample1_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample1_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample1_tumor.stats:md5,1c60a1d249d2e503b0678c72e851ea93", - "sample1_whatshap_stats.gtf:md5,f5d331899db63b2ae21e51436bad2ddd", - "sample1_whatshap_stats.log:md5,0f455b7a59d41ee276844a1ac894971c", - "sample1_whatshap_stats.tsv:md5,41c0b3aeed7b8bc7770c7bce5d40cfcf", + "sample1_tumor.stats:md5,fb77e8b2b144fe4c525e944a61757ef9", + "sample1_whatshap_stats.gtf:md5,a34e801eff01e3d8ccebc2144cb495ef", + "sample1_whatshap_stats.log:md5,cb15487fbed59967768d95a199cd18a8", + "sample1_whatshap_stats.tsv:md5,905ca791c9087b1fbcd14794a6af8b5a", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,47cb0e0bbe71abdbf4f40217dfda43f9", - "read_qual.txt:md5,78247dfa2ea336eac0e128eba5e9eef4", + "breakpoints_double.csv:md5,003e4e80ec4233315762233e5f1ec0d8", + "read_qual.txt:md5,92321a03aae1168fdce8ea921b635036", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample2_normal.bam:md5,c18bbb1bc05b0ec830fa1ac3c6ef542f", - "sample2_normal.bam.bai:md5,de77684ef264476b3e0531b61ca23740", - "sample2_tumor.bam:md5,8b8cb5ac7668b8ac2f4097f584481d35", - "sample2_tumor.bam.bai:md5,3b46456b0e7b00688519dfb25c8e3c88", + "sample2_normal.bam:md5,4e05c7805c068361a0daaf8ad8328bc6", + "sample2_normal.bam.bai:md5,2c4edaa18985cf837a9cb08b31032936", + "sample2_tumor.bam:md5,748962c469b51be5a293d46ce035196c", + "sample2_tumor.bam.bai:md5,ff56a626f3a59fcf6235a973d2755a7d", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", - "sample2_normal.stats:md5,20c47cb94f9ac739d69c57be6daf82c5", + "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", - "sample2_tumor.stats:md5,8635df10132c85a13f2d9878b7cf90a2", - "sample2_whatshap_stats.gtf:md5,35cd28699c298d99d01cee1c24c6d61b", - "sample2_whatshap_stats.log:md5,e7293b22e0b3ac0798b31d897d781336", - "sample2_whatshap_stats.tsv:md5,1e9adab54274feead2597e09f558222c", + "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", + "sample2_whatshap_stats.gtf:md5,a6c8a814e6a959cefa93d228486e14f1", + "sample2_whatshap_stats.log:md5,f26825c71e9b9f227ac34cdd84824f2b", + "sample2_whatshap_stats.tsv:md5,138f333a6c09f4f51db218ed430ec26f", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,48baac86492026a4a7947bc708c47e6e", - "read_qual.txt:md5,8b92ff7dc4536188be159b95525511cd", + "breakpoints_double.csv:md5,ab7ccd32508029426ca1365053fdc23b", + "read_qual.txt:md5,57aaac5f18f81b1cbde13e49c012651a", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample3_tumor.bam:md5,94e7f18f0a22d16f0868780df7975447", - "sample3_tumor.bam.bai:md5,a2cc1013d6fde4fec50608fa9681a7a7", + "sample3_tumor.bam:md5,8a6d2472ecbcb90f849b12ee14bf3a47", + "sample3_tumor.bam.bai:md5,78eefad4ce39c3ae1ef672cf9a8417f5", "sample3_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample3_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", - "sample3_tumor.stats:md5,ecd5ea4fee37379dd5c5ae3e89dfddda", - "sample3_whatshap_stats.gtf:md5,5a9b20b6ed25ef2ede4271156a83ce88", - "sample3_whatshap_stats.log:md5,dc9a34518331417b7b5811462b722791", - "sample3_whatshap_stats.tsv:md5,26a07a6db5f1e5bf7844aa0a8c190cb7", + "sample3_tumor.stats:md5,9d2945cfd8813c828d702e86afbaa58b", + "sample3_whatshap_stats.gtf:md5,e5bf3cd208a6db9b66c2b29a637797ff", + "sample3_whatshap_stats.log:md5,8905429dcd10367f632430339363068f", + "sample3_whatshap_stats.tsv:md5,2dad37f19eea1a9cb75a1b07f584a5ed", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,56e899f85876cee082788927d0f89c5f", - "read_qual.txt:md5,b918430d35354dad1d7f02f21e4cd4ed", + "breakpoints_double.csv:md5,c18b66eebc1714279e685ab1c56d6cf3", + "read_qual.txt:md5,f6d803b54f3aa4a36f21af1a9a97923f", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], + "timestamp": "2026-10-02T14:28:09.372337092", "meta": { - "nf-test": "0.9.3", - "nextflow": "25.10.4" - }, - "timestamp": "2026-10-02T10:14:05.338322172" + "nf-test": "0.9.4", + "nextflow": "26.04.3" + } } } \ No newline at end of file diff --git a/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index 04898524..381abb01 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -248,7 +248,9 @@ workflow LRSOMATIC { ch_samplesheet .join(basecall_meta) .map { meta, bam, basecall_model_meta, kinetics_meta -> - def chosen_clair3_model = meta.clair3_model ?: clair3_modelMap.get(basecall_model_meta) + // Same unset test as PREPARE_REFERENCE_FILES, so both pick the same model and the combine keys agree + def clair3_model_unset = !meta.clair3_model || meta.clair3_model.toString().trim() in ['', '[]'] + def chosen_clair3_model = clair3_model_unset ? clair3_modelMap.get(basecall_model_meta) : meta.clair3_model def chosen_clairSTO_model = meta.clairSTO_model ?: clairs_modelMap.get(basecall_model_meta) def chosen_clairS_model = meta.clairS_model ?: clairs_modelMap.get(basecall_model_meta) def meta_new =[ id: meta.id, @@ -276,7 +278,7 @@ workflow LRSOMATIC { // Input: params.fasta, ASCAT file paths, basecall_meta, clair3_modelMap // Output: .prepped_fasta -- [[:], fasta] // .prepped_fai -- [[:], fai] - // .downloaded_clair3_models-- [meta(id=model_name), model_dir] + // .clair3_models -- [meta(id=model_name), model_dir or []] -- [] = bundled with the Clair3 image // .allele_files / .loci_files / .gc_file / .rt_file -- flat file collections // @@ -312,8 +314,8 @@ workflow LRSOMATIC { } // clairsto_cna_channel: [meta, cna_resource_dir] or [[:], []] -- [] uses the image's own set - downloaded_clair3_models = PREPARE_REFERENCE_FILES.out.downloaded_clair3_models - // downloaded_clair3_models: [meta(id=clair3_model_name), model_dir] + clair3_models = PREPARE_REFERENCE_FILES.out.clair3_models + // clair3_models: [meta(id=clair3_model_name), model_dir or []] -- [] = bundled with the Clair3 image ch_nanoplot_pre_txt = channel.empty() @@ -569,7 +571,8 @@ workflow LRSOMATIC { // SAMTOOLS_MERGE( ch_aligned_split.multiple, - [[],[],[],[]] + [[],[],[],[]], + '' // index_format: indexed separately by SAMTOOLS_INDEX_MERGE ) // Index the merged BAM to produce a BAI (SAMTOOLS_MERGE does not create BAI inline) @@ -579,7 +582,7 @@ workflow LRSOMATIC { ch_single_indexed .mix( SAMTOOLS_MERGE.out.bam - .join(SAMTOOLS_INDEX_MERGE.out.bai) + .join(SAMTOOLS_INDEX_MERGE.out.index) ) .set { ch_index_minimap } // ch_index_minimap: [meta, bam, bai] -- one aligned BAM + index per sample (all replicates merged) @@ -740,13 +743,13 @@ workflow LRSOMATIC { // SUBWORKFLOW: PAIRED_SMALLVAR_GERMLINE // Input: branched_paired_ch.normal -- [meta, bam, bai] -- normal sample BAMs only - // downloaded_clair3_models -- [meta(id=model_name), model_dir] + // clair3_models -- [meta(id=model_name), model_dir or []] // Output: .germline_vcf -- [meta, vcf, tbi] -- germline SNVs/indels (Clair3 and/or DeepVariant consensus) PAIRED_SMALLVAR_GERMLINE ( branched_paired_ch.normal, ch_fasta, ch_fai, - downloaded_clair3_models + clair3_models ) // Merge germline VCFs from paired and tumor-only paths into a single channel @@ -866,6 +869,7 @@ workflow LRSOMATIC { vep_cache, ch_fasta, ch_vep_extra_files, + [[], []], // gtf: annotate from the cache vep_plugins.args, vep_custom, vep_custom_tbi @@ -887,6 +891,7 @@ workflow LRSOMATIC { vep_cache, ch_fasta, ch_vep_extra_files, + [[], []], // gtf: annotate from the cache vep_plugins.args, vep_custom, vep_custom_tbi @@ -990,8 +995,6 @@ workflow LRSOMATIC { [[:], params.bed_file, params.pon_file] ) - ch_versions = ch_versions.mix(SEVERUS.out.versions) - SEVERUS.out.all_vcf .map { meta, vcf -> def extra = [] @@ -1017,6 +1020,7 @@ workflow LRSOMATIC { vep_cache, ch_fasta, [], + [[], []], // gtf: annotate from the cache '', vep_custom, vep_custom_tbi @@ -1083,7 +1087,8 @@ workflow LRSOMATIC { // MOSDEPTH ( ch_mosdepth_in, - ch_fasta + ch_fasta, + [] // quantize_labels: no --quantize ) ch_mosdepth_global = MOSDEPTH.out.global_txt @@ -1106,7 +1111,7 @@ workflow LRSOMATIC { BAM_STATS_SAMTOOLS ( ch_index_minimap, // [meta, bam, bai] - ch_fasta + ch_fasta.combine(ch_fai).map { meta, fasta, _meta_fai, fai -> [meta, fasta, fai] }.first() ) ch_bam_stats = BAM_STATS_SAMTOOLS.out.stats @@ -1229,6 +1234,7 @@ workflow LRSOMATIC { vep_cache, ch_fasta, [], + [[], []], // gtf: annotate from the cache '', vep_custom, vep_custom_tbi