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 260695e5..542d2ffa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | `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`. 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 | + ## v1.1.0 - [2026-04-28] ### `Added` diff --git a/conf/modules.config b/conf/modules.config index 44531dc7..ef812d4c 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -171,12 +171,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 ] @@ -204,12 +202,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 ] @@ -231,15 +229,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 ] @@ -646,7 +636,7 @@ process { ] } - withName : '.*:WGET' { + withName : '.*:CLAIR3_MODEL' { ext.args = { [ "--no-check-certificate" @@ -656,12 +646,6 @@ process { ] } - withName : '.*:UNTAR' { - publishDir = [ - enabled: false - ] - } - withName : '.*:WGET_(REVEL|EVE)' { publishDir = [ enabled: false diff --git a/docs/usage.md b/docs/usage.md index 7d822ecb..520817aa 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 fdfe95f7..f313de04 100644 --- a/modules.json +++ b/modules.json @@ -61,19 +61,19 @@ }, "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" }, @@ -202,11 +202,6 @@ "installed_by": ["modules"], "patch": "modules/nf-core/severus/severus.diff" }, - "untar": { - "branch": "master", - "git_sha": "6d46786420b4d7bc88eba026eb389c0c5535d120", - "installed_by": ["modules"] - }, "unzip": { "branch": "master", "git_sha": "1c43a7e22f04cf19c9f9d3de7e7e5a3addd9382a", @@ -233,7 +228,7 @@ }, "deepvariant": { "branch": "master", - "git_sha": "f2b138ee1d91f67d31c187317d7e83e429bf0309", + "git_sha": "6ef220fd9252b42fb3c50348bbdbcb6246730686", "installed_by": ["subworkflows"], "patch": "subworkflows/nf-core/deepvariant/deepvariant.diff" }, 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..49938725 --- /dev/null +++ b/modules/local/clair3_model/main.nf @@ -0,0 +1,35 @@ +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 + """ + mkdir ${meta.id} + for checkpoint in pileup.pt full_alignment.pt; do + wget ${args} -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/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/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/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/untar/main.nf b/modules/nf-core/untar/main.nf deleted file mode 100644 index bf2c056c..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 in ['singularity', 'apptainer'] && !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/subworkflows/local/paired/paired_smallvar_germline.nf b/subworkflows/local/paired/paired_smallvar_germline.nf index 3b473006..f97548f4 100644 --- a/subworkflows/local/paired/paired_smallvar_germline.nf +++ b/subworkflows/local/paired/paired_smallvar_germline.nf @@ -11,7 +11,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() @@ -20,7 +20,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 @@ -90,7 +90,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] // @@ -115,8 +115,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 ) DEEPVARIANT.out.vcf diff --git a/subworkflows/local/prepare_reference_files.nf b/subworkflows/local/prepare_reference_files.nf index e5066705..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() @@ -45,39 +44,46 @@ workflow PREPARE_REFERENCE_FILES { } // 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, 'tar.gz' ] - } - .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, suffix_str] - // one item per unique Clair3 model needed across all samples - - // - // MODULE: WGET (label: process_single) - // Input: [meta, url_str, suffix_str] -- model name (id) + download URL + output extension - // Output: .outfile -- [meta, tarball] -- downloaded .tar.gz model archive - // - WGET ( clair3_model_urls ) - + // 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) @@ -148,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/tumor_only/tumoronly_smallvar.nf b/subworkflows/local/tumor_only/tumoronly_smallvar.nf index b37beaf2..ec08f1e6 100644 --- a/subworkflows/local/tumor_only/tumoronly_smallvar.nf +++ b/subworkflows/local/tumor_only/tumoronly_smallvar.nf @@ -136,7 +136,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] // @@ -152,8 +152,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 ) DEEPVARIANT.out.vcf 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 9c9ed8ce..4327cb72 100644 --- a/tests/chm13.nf.test.snap +++ b/tests/chm13.nf.test.snap @@ -12,10 +12,10 @@ "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" @@ -102,9 +102,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_ALLELES": { "7za": 16.02 }, @@ -125,9 +122,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "WGET": { - "wget": "1.21.4" - }, "WHATSHAP_STATS": { "whatshap": 2.8 }, @@ -136,7 +130,7 @@ } } ], - "timestamp": "2026-10-01T12:09:21.969543344", + "timestamp": "2026-10-01T12:30:55.360918966", "meta": { "nf-test": "0.9.4", "nextflow": "26.04.3" diff --git a/tests/clair_only.nf.test.snap b/tests/clair_only.nf.test.snap index 068b64bd..5a1b8866 100644 --- a/tests/clair_only.nf.test.snap +++ b/tests/clair_only.nf.test.snap @@ -22,10 +22,13 @@ "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" + }, + "CLAIR3_MODEL": { + "wget": "1.21.4" }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" @@ -115,9 +118,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, @@ -129,9 +129,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "WGET": { - "wget": "1.21.4" - }, "WHATSHAP_STATS": { "whatshap": 2.8 }, @@ -793,19 +790,19 @@ "read_qual.txt:md5,92321a03aae1168fdce8ea921b635036", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample2_normal.bam:md5,7c5efbb307139217561251ba50d2236f", - "sample2_normal.bam.bai:md5,5ae017cbc5077aa7b6b8874bb971e504", - "sample2_tumor.bam:md5,f867fc53d538b44d2ac4f8f30cfc7de6", - "sample2_tumor.bam.bai:md5,3d8988d6282824c2a7a7fbda72b4e246", + "sample2_normal.bam:md5,52ad7baf2b6a51050e44a833e34887b1", + "sample2_normal.bam.bai:md5,7837d6f36b290325a2bfb734bf43d4f9", + "sample2_tumor.bam:md5,270970f65fa2f864ac58a3930468e8e6", + "sample2_tumor.bam.bai:md5,2d0b660cbd45a8b10a1387c0550ff28a", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", - "sample2_whatshap_stats.gtf:md5,4d8f4393e3aebe4e945c0b8236cf3b3e", - "sample2_whatshap_stats.log:md5,10bba7bae6dd99b989ece5e5dac7a8f9", - "sample2_whatshap_stats.tsv:md5,bb46226e486af9026ab76e014624e903", + "sample2_whatshap_stats.gtf:md5,0fd298e41db3761772e7526d8b7362bc", + "sample2_whatshap_stats.log:md5,a45e24194baf1cf124d0594900ae31dc", + "sample2_whatshap_stats.tsv:md5,a35b75635f6437df936dc1307b542f94", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "breakpoints_double.csv:md5,ab7ccd32508029426ca1365053fdc23b", @@ -854,7 +851,7 @@ "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], - "timestamp": "2026-10-01T12:13:13.557731505", + "timestamp": "2026-10-01T12:34:17.873449666", "meta": { "nf-test": "0.9.4", "nextflow": "26.04.3" diff --git a/tests/consensus.nf.test.snap b/tests/consensus.nf.test.snap index 2e92d0ca..d8b7d765 100644 --- a/tests/consensus.nf.test.snap +++ b/tests/consensus.nf.test.snap @@ -27,10 +27,10 @@ "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" @@ -42,22 +42,22 @@ "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_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_POSTPROCESSVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "GERMLINE_VEP": { "ensemblvep": 116.1, @@ -135,9 +135,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, @@ -149,9 +146,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "WGET": { - "wget": "1.21.4" - }, "WHATSHAP_STATS": { "whatshap": 2.8 }, @@ -623,38 +617,38 @@ "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" ], [ - "sample1_normal.bam:md5,dda2e29faa03b796170a3330aa056872", - "sample1_normal.bam.bai:md5,f32d59502209ebdb88131319c7feba97", - "sample1_tumor.bam:md5,6defcc1fc9836ebebc8bbf181a669ec7", - "sample1_tumor.bam.bai:md5,79e19a2d64a7b9c351877093f64fe460", + "sample1_normal.bam:md5,7f279432bea50c69dc5c3eb09027b1c7", + "sample1_normal.bam.bai:md5,427eed7e27482d7400b48dded7a2eae4", + "sample1_tumor.bam:md5,be82b184486dc54b7585fd8c20151703", + "sample1_tumor.bam.bai:md5,d2f46d2ac2df6a76d654e2cfa3fb82cd", "sample1_normal.flagstat:md5,1c41ea9923945501eb7e41f83a90502d", "sample1_normal.idxstats:md5,902e503387799123ea59255e3fca172c", "sample1_normal.stats:md5,d79e3c68505d39cf29641dfdf5849ef1", "sample1_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample1_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", "sample1_tumor.stats:md5,fb77e8b2b144fe4c525e944a61757ef9", - "sample1_whatshap_stats.gtf:md5,9f09f9ad1a788384cb8e46a933f77b3b", - "sample1_whatshap_stats.log:md5,20135b4e9965a31d3f9bb0df7d2cec90", - "sample1_whatshap_stats.tsv:md5,264d2d76a9b8d34ea4933aee325ce36e", + "sample1_whatshap_stats.gtf:md5,fbe3c088a7b1bd4c478b41b10bbbed7f", + "sample1_whatshap_stats.log:md5,4c40d10cec80a004755a3f818f17cc32", + "sample1_whatshap_stats.tsv:md5,d10fe3c8da43ba06ba0dcaa14d628bcc", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "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,f6b16a8147a9576181768deafdf9cddf", - "sample2_normal.bam.bai:md5,f4fd82fee701218a2ebde0226f29cc42", - "sample2_tumor.bam:md5,52d15cbce593b471431ebba7de994782", - "sample2_tumor.bam.bai:md5,7cd65d3d85aa17ce925adcf6dca3a515", + "sample2_normal.bam:md5,7f6922406854f583aaf1bcdf72cb0d41", + "sample2_normal.bam.bai:md5,621957b6122131f805c693d4e6ea224c", + "sample2_tumor.bam:md5,a50e8831ca5f4aabe1f43854ec9e2584", + "sample2_tumor.bam.bai:md5,4bd23cbd7a945a3e6853aa391b203c76", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", - "sample2_whatshap_stats.gtf:md5,f15fb43f0af73d02fc73b66fdc12d5d8", - "sample2_whatshap_stats.log:md5,ca87088fc2f11665eca3fb9c80489085", - "sample2_whatshap_stats.tsv:md5,ca53f81e39bf5d46aa4f604216add1f6", + "sample2_whatshap_stats.gtf:md5,b3ec97b8ab652a510194540785f77b56", + "sample2_whatshap_stats.log:md5,ec56cdc826186c517fd19d49876c2c66", + "sample2_whatshap_stats.tsv:md5,d464e1703e7d44b3758ec07c255ac533", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "breakpoints_double.csv:md5,ab7ccd32508029426ca1365053fdc23b", @@ -677,7 +671,7 @@ "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], - "timestamp": "2026-10-01T12:14:51.919892901", + "timestamp": "2026-10-01T12:57:25.869512752", "meta": { "nf-test": "0.9.4", "nextflow": "26.04.3" diff --git a/tests/deep_only.nf.test.snap b/tests/deep_only.nf.test.snap index 2f886598..a0c453c1 100644 --- a/tests/deep_only.nf.test.snap +++ b/tests/deep_only.nf.test.snap @@ -18,22 +18,22 @@ "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_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_POSTPROCESSVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "GERMLINE_VEP": { "ensemblvep": 116.1, @@ -108,9 +108,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, @@ -119,9 +116,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "WGET": { - "wget": "1.21.4" - }, "WHATSHAP_STATS": { "whatshap": 2.8 }, @@ -568,52 +562,52 @@ "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" ], [ - "sample1_normal.bam:md5,6aae4ac3343f2e06f558909c9f4769ef", - "sample1_normal.bam.bai:md5,a4b8132b2b4d84add5882be422d6b7f6", - "sample1_tumor.bam:md5,4725e780b322591c704a899cc86d12b4", - "sample1_tumor.bam.bai:md5,e64f05d13b3695c6cdcd6e34318f0c15", + "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,d79e3c68505d39cf29641dfdf5849ef1", "sample1_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample1_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", "sample1_tumor.stats:md5,fb77e8b2b144fe4c525e944a61757ef9", - "sample1_whatshap_stats.gtf:md5,e1d0e87353a5f9aed8a9ac4bf7973427", - "sample1_whatshap_stats.log:md5,bd6b83a062e22cd3201523dc4c2c13e7", - "sample1_whatshap_stats.tsv:md5,7a1508751cb1daa841a577ae25f55586", + "sample1_whatshap_stats.gtf:md5,0123cb1b2ef6d158600eac3a8e414b2f", + "sample1_whatshap_stats.log:md5,404f2e8ae5be85eecec64a105edb6698", + "sample1_whatshap_stats.tsv:md5,27ad8c797b836a4d236684c2cf12a64f", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "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,26d174cf03bb3d73cc61b9c335b86942", - "sample2_normal.bam.bai:md5,840547883fb5695f76f20e6c47c977ed", - "sample2_tumor.bam:md5,f4c17023c0285df61d5cc3c21eb9c3a8", - "sample2_tumor.bam.bai:md5,1435b5f0e01212ba2a5b5ccbbc259f64", + "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,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", - "sample2_whatshap_stats.gtf:md5,af33281699a1d0da83fbe7eaff198d03", - "sample2_whatshap_stats.log:md5,bbd9ab2ce07a009d9348a1d78bc6fc70", - "sample2_whatshap_stats.tsv:md5,c65436f930c23ddbfd568532d07dce70", + "sample2_whatshap_stats.gtf:md5,e055e04aed7909a3281c3939f81425ea", + "sample2_whatshap_stats.log:md5,262e751b2f5b0408ebb72ce55b7776a3", + "sample2_whatshap_stats.tsv:md5,567b71d75b74f0953a1757e5cf6a0c08", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "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,8dd2ac2e8eb14722ea6d4878c3a1f3f0", - "sample3_tumor.bam.bai:md5,0032a7d30b494694a31f6033235c8303", + "sample3_tumor.bam:md5,86ed5e8df5e85fc1d31ad3e07b2d533c", + "sample3_tumor.bam.bai:md5,0f7687c3ff32fc163dfc9c96e3dd589a", "sample3_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample3_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", "sample3_tumor.stats:md5,9d2945cfd8813c828d702e86afbaa58b", - "sample3_whatshap_stats.gtf:md5,f47156e18c490ff9a4e6efd04d43acc5", - "sample3_whatshap_stats.log:md5,4f7648e763004ab764143cb4f8b6499e", - "sample3_whatshap_stats.tsv:md5,4cb58bb3b663aaba23da004d69adab3e", + "sample3_whatshap_stats.gtf:md5,5a4585aaf9dd5831fccaf53156239e79", + "sample3_whatshap_stats.log:md5,0a308efbd98acee98fd876d719e49203", + "sample3_whatshap_stats.tsv:md5,939ac4d90b4274ff53cb804a9dbd4500", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "breakpoints_double.csv:md5,c18b66eebc1714279e685ab1c56d6cf3", @@ -622,7 +616,7 @@ "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], - "timestamp": "2026-10-01T12:11:05.193419885", + "timestamp": "2026-10-01T12:53:51.646596481", "meta": { "nf-test": "0.9.4", "nextflow": "26.04.3" diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 50f59560..e7e6b434 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -12,10 +12,10 @@ "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" @@ -99,9 +99,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, @@ -113,9 +110,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "WGET": { - "wget": "1.21.4" - }, "WHATSHAP_STATS": { "whatshap": 2.8 }, @@ -588,19 +582,19 @@ "read_qual.txt:md5,92321a03aae1168fdce8ea921b635036", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample2_normal.bam:md5,7c5efbb307139217561251ba50d2236f", - "sample2_normal.bam.bai:md5,5ae017cbc5077aa7b6b8874bb971e504", - "sample2_tumor.bam:md5,f867fc53d538b44d2ac4f8f30cfc7de6", - "sample2_tumor.bam.bai:md5,3d8988d6282824c2a7a7fbda72b4e246", + "sample2_normal.bam:md5,52ad7baf2b6a51050e44a833e34887b1", + "sample2_normal.bam.bai:md5,7837d6f36b290325a2bfb734bf43d4f9", + "sample2_tumor.bam:md5,270970f65fa2f864ac58a3930468e8e6", + "sample2_tumor.bam.bai:md5,2d0b660cbd45a8b10a1387c0550ff28a", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", - "sample2_whatshap_stats.gtf:md5,4d8f4393e3aebe4e945c0b8236cf3b3e", - "sample2_whatshap_stats.log:md5,10bba7bae6dd99b989ece5e5dac7a8f9", - "sample2_whatshap_stats.tsv:md5,bb46226e486af9026ab76e014624e903", + "sample2_whatshap_stats.gtf:md5,0fd298e41db3761772e7526d8b7362bc", + "sample2_whatshap_stats.log:md5,a45e24194baf1cf124d0594900ae31dc", + "sample2_whatshap_stats.tsv:md5,a35b75635f6437df936dc1307b542f94", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "breakpoints_double.csv:md5,ab7ccd32508029426ca1365053fdc23b", @@ -623,7 +617,7 @@ "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], - "timestamp": "2026-10-01T12:08:14.311632599", + "timestamp": "2026-10-01T12:29:14.143316046", "meta": { "nf-test": "0.9.4", "nextflow": "26.04.3" diff --git a/tests/union.nf.test.snap b/tests/union.nf.test.snap index 2529c80f..9bd00070 100644 --- a/tests/union.nf.test.snap +++ b/tests/union.nf.test.snap @@ -24,10 +24,10 @@ "bcftools": 1.24 }, "CLAIR3": { - "clair3": "1.2.0" + "clair3": "2.0.3" }, "CLAIRS": { - "clairs": "0.4.4" + "clairs": "0.5.1" }, "CLAIRSTO": { "clairsto": "0.5.1" @@ -39,22 +39,22 @@ "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_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_POSTPROCESSVARIANTS": { - "deepvariant": "1.9.0" + "deepvariant": "1.10.0" }, "GERMLINE_VEP": { "ensemblvep": 116.1, @@ -135,9 +135,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "UNTAR": { - "untar": 1.34 - }, "UNZIP_FASTA": { "pigz": 2.8 }, @@ -149,9 +146,6 @@ "perl-math-cdf": 0.1, "tabix": "1.23.1" }, - "WGET": { - "wget": "1.21.4" - }, "WHATSHAP_STATS": { "whatshap": 2.8 }, @@ -623,52 +617,52 @@ "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" ], [ - "sample1_normal.bam:md5,5ba2c41b3317b8d168b49ce1c77e5da4", - "sample1_normal.bam.bai:md5,7849c6c3c0b35dd52071d8c43df81680", - "sample1_tumor.bam:md5,f9dfc7cf98bd7174f87a087e149afa1f", - "sample1_tumor.bam.bai:md5,ff7fe14beeffd231581f74e393635cce", + "sample1_normal.bam:md5,3877fae4de442add30c430d66b215656", + "sample1_normal.bam.bai:md5,ff43e54e659a21303ad31a92c1de4915", + "sample1_tumor.bam:md5,7e29aaba1c9becbd8ca1a2727a6b4782", + "sample1_tumor.bam.bai:md5,09194817cf4570a9ffe8146010441b2f", "sample1_normal.flagstat:md5,1c41ea9923945501eb7e41f83a90502d", "sample1_normal.idxstats:md5,902e503387799123ea59255e3fca172c", "sample1_normal.stats:md5,d79e3c68505d39cf29641dfdf5849ef1", "sample1_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample1_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", "sample1_tumor.stats:md5,fb77e8b2b144fe4c525e944a61757ef9", - "sample1_whatshap_stats.gtf:md5,9ae556e13516dd47d4108acf2104bddb", - "sample1_whatshap_stats.log:md5,eaddcf6a1666d4a3c1ad3316dac24139", - "sample1_whatshap_stats.tsv:md5,c2773e011c2781160fd9a7741b10546b", + "sample1_whatshap_stats.gtf:md5,e52202ca1d638ebb05a0e434a31d4388", + "sample1_whatshap_stats.log:md5,490822a24982f5714990a2ac45ed02ae", + "sample1_whatshap_stats.tsv:md5,83bf795f1ac837a9e55e9e3e8f89b5a7", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "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,f6b16a8147a9576181768deafdf9cddf", - "sample2_normal.bam.bai:md5,f4fd82fee701218a2ebde0226f29cc42", - "sample2_tumor.bam:md5,52d15cbce593b471431ebba7de994782", - "sample2_tumor.bam.bai:md5,7cd65d3d85aa17ce925adcf6dca3a515", + "sample2_normal.bam:md5,e8e4988c72a16baa79ec33c447baacb0", + "sample2_normal.bam.bai:md5,4d68642e4454156320b417cdab58f20d", + "sample2_tumor.bam:md5,805f6dbefa594e53be16ad3f5787045c", + "sample2_tumor.bam.bai:md5,682afc7a643a462502685fea327ce6c5", "sample2_normal.flagstat:md5,714d0cc0c213e2640e54a16f3d0e6e7e", "sample2_normal.idxstats:md5,72eb83bb11748dc863fef1a0a5497e4b", "sample2_normal.stats:md5,1aeade21dc682b0c5ca284214e6fc4d0", "sample2_tumor.flagstat:md5,4344a8745efef9cc2a017024218d61c6", "sample2_tumor.idxstats:md5,69467fc02c83a30084736aeea8b785fb", "sample2_tumor.stats:md5,a156fe81f4c6a120357f9e32afcc00ef", - "sample2_whatshap_stats.gtf:md5,f15fb43f0af73d02fc73b66fdc12d5d8", - "sample2_whatshap_stats.log:md5,a6767b3490cafdcbaf3b7114644028de", - "sample2_whatshap_stats.tsv:md5,570796e5e291229e8872733425e0b133", + "sample2_whatshap_stats.gtf:md5,68c71c5c3e838e66fc395d383ca00ccb", + "sample2_whatshap_stats.log:md5,a0a86acc5e07b48b5a678613249fbf0b", + "sample2_whatshap_stats.tsv:md5,56db506d4309d9feee26680aab19c206", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "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,57846a21c5536cff48385100614fdb17", - "sample3_tumor.bam.bai:md5,7cb4773e8cd2a066f939f866eef255d1", + "sample3_tumor.bam:md5,86ed5e8df5e85fc1d31ad3e07b2d533c", + "sample3_tumor.bam.bai:md5,0f7687c3ff32fc163dfc9c96e3dd589a", "sample3_tumor.flagstat:md5,8ff32d733c62c4910bf185ef24bf27cf", "sample3_tumor.idxstats:md5,2de140e61f9e86c9c10af20dd565cc93", "sample3_tumor.stats:md5,9d2945cfd8813c828d702e86afbaa58b", - "sample3_whatshap_stats.gtf:md5,f47156e18c490ff9a4e6efd04d43acc5", - "sample3_whatshap_stats.log:md5,679dcfa209888a9e69a07e4c4e4b049e", - "sample3_whatshap_stats.tsv:md5,035d5aa0425ba3fc32d65268b793b424", + "sample3_whatshap_stats.gtf:md5,5a4585aaf9dd5831fccaf53156239e79", + "sample3_whatshap_stats.log:md5,0a308efbd98acee98fd876d719e49203", + "sample3_whatshap_stats.tsv:md5,939ac4d90b4274ff53cb804a9dbd4500", "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", "breakpoints_double.csv:md5,c18b66eebc1714279e685ab1c56d6cf3", @@ -677,7 +671,7 @@ "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], - "timestamp": "2026-10-01T12:34:06.559752074", + "timestamp": "2026-10-01T12:57:42.263660402", "meta": { "nf-test": "0.9.4", "nextflow": "26.04.3" diff --git a/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index 2c13d781..7f15bcb0 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -267,7 +267,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] // .allele_files / .loci_files / .gc_file / .rt_file -- flat file collections // @@ -303,8 +303,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] ch_nanoplot_pre_txt = channel.empty() @@ -731,13 +731,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] // 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