diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index b290e090..97c8c97f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,20 +1,20 @@ { "name": "nfcore", - "image": "nfcore/gitpod:latest", - "remoteUser": "gitpod", - "runArgs": ["--privileged"], + "image": "nfcore/devcontainer:latest", - // Configure tool-specific properties. - "customizations": { - // Configure properties specific to VS Code. - "vscode": { - // Set *default* container specific settings.json values on container create. - "settings": { - "python.defaultInterpreterPath": "/opt/conda/bin/python" - }, + "remoteUser": "root", + "privileged": true, - // Add the IDs of extensions you want installed when the container is created. - "extensions": ["ms-python.python", "ms-python.vscode-pylance", "nf-core.nf-core-extensionpack"] - } + "remoteEnv": { + // Workspace path on the host for mounting with docker-outside-of-docker + "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}" + }, + + "onCreateCommand": "./.devcontainer/setup.sh", + + "hostRequirements": { + "cpus": 4, + "memory": "16gb", + "storage": "32gb" } } diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100755 index 00000000..1ab19682 --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Customise the terminal command prompt +echo "export PROMPT_DIRTRIM=2" >> $HOME/.bashrc +echo "export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] '" >> $HOME/.bashrc +export PROMPT_DIRTRIM=2 +export PS1='\[\e[3;36m\]\w ->\[\e[0m\\] ' + +# Update Nextflow +nextflow self-update + +# Update welcome message +echo "Welcome to the IntGenomicsLab/lrsomatic devcontainer!" > /usr/local/etc/vscode-dev-containers/first-run-notice.txt diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml index bf44d961..3b9724c7 100644 --- a/.github/actions/nf-test/action.yml +++ b/.github/actions/nf-test/action.yml @@ -25,9 +25,9 @@ runs: version: "${{ env.NXF_VERSION }}" - name: Set up Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.13" + python-version: "3.14" - name: Install nf-test uses: nf-core/setup-nf-test@v1 @@ -52,6 +52,8 @@ runs: with: auto-update-conda: true conda-solver: libmamba + channels: conda-forge + channel-priority: strict conda-remove-defaults: true - name: Run nf-test diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index ac030fd5..6adb0fff 100644 --- a/.github/workflows/clean-up.yml +++ b/.github/workflows/clean-up.yml @@ -10,7 +10,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9 + - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10 with: stale-issue-message: "This issue has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment otherwise this issue will be closed in 20 days." stale-pr-message: "This PR has been tagged as awaiting-changes or awaiting-feedback by an nf-core contributor. Remove stale label or add a comment if it is still useful." diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 999bcc38..45884ff9 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -44,9 +44,9 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.13" + python-version: "3.14" architecture: "x64" - name: Setup Apptainer @@ -57,7 +57,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install git+https://github.com/nf-core/tools.git@dev + pip install git+https://github.com/nf-core/tools.git - name: Make a cache directory for the container images run: | @@ -127,7 +127,7 @@ jobs: fi - name: Upload Nextflow logfile for debugging purposes - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: name: nextflow_logfile.txt path: .nextflow.log* diff --git a/.github/workflows/fix_linting.yml b/.github/workflows/fix_linting.yml index b0cd0ed7..b9b23241 100644 --- a/.github/workflows/fix_linting.yml +++ b/.github/workflows/fix_linting.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: token: ${{ secrets.nf_core_bot_auth_token }} # indication that the linting is being fixed - name: React on comment - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: eyes @@ -32,9 +32,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }} # Install and run pre-commit - - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.13" + python-version: "3.14" - name: Install pre-commit run: pip install pre-commit @@ -47,7 +47,7 @@ jobs: # indication that the linting has finished - name: react if linting finished succesfully if: steps.pre-commit.outcome == 'success' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: "+1" @@ -67,21 +67,21 @@ jobs: - name: react if linting errors were fixed id: react-if-fixed if: steps.commit-and-push.outcome == 'success' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: hooray - name: react if linting errors were not fixed if: steps.commit-and-push.outcome == 'failure' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: comment-id: ${{ github.event.comment.id }} reactions: confused - name: react if linting errors were not fixed if: steps.commit-and-push.outcome == 'failure' - uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4 + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5 with: issue-number: ${{ github.event.issue.number }} body: | diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index e562c460..a22a97fc 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -18,7 +18,7 @@ concurrency: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NFT_VER: "0.9.2" + NFT_VER: "0.9.3" NFT_WORKDIR: "~" NXF_ANSI_LOG: false NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity @@ -39,7 +39,7 @@ jobs: rm -rf ./* || true rm -rf ./.??* || true ls -la ./ - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: fetch-depth: 0 @@ -76,26 +76,26 @@ jobs: - isMain: false profile: "singularity" NXF_VER: - - "24.10.5" + - "25.04.0" - "latest-everything" env: NXF_ANSI_LOG: false TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: fetch-depth: 0 - name: Clean up Disk space uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - name: Run nf-test id: run_nf_test uses: ./.github/actions/nf-test continue-on-error: ${{ matrix.NXF_VER == 'latest-everything' }} env: NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + NXF_VERSION: ${{ matrix.NXF_VER }} with: profile: ${{ matrix.profile }} shard: ${{ matrix.shard }} diff --git a/.github/workflows/template-version-comment.yml b/.github/workflows/template-version-comment.yml index beb5c77f..e8560fc7 100644 --- a/.github/workflows/template-version-comment.yml +++ b/.github/workflows/template-version-comment.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: ref: ${{ github.event.pull_request.head.sha }} diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 83599f63..00000000 --- a/.gitpod.yml +++ /dev/null @@ -1,10 +0,0 @@ -image: nfcore/gitpod:latest -tasks: - - name: Update Nextflow and setup pre-commit - command: | - pre-commit install --install-hooks - nextflow self-update - -vscode: - extensions: - - nf-core.nf-core-extensionpack # https://github.com/nf-core/vscode-extensionpack diff --git a/.nf-core.yml b/.nf-core.yml index d703c977..27d6da9b 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,5 +1,4 @@ lint: - schema_params: false files_exist: - CODE_OF_CONDUCT.md - assets/nf-core-lrsomatic_logo_light.png @@ -27,7 +26,8 @@ lint: - validation.help.afterText - validation.summary.beforeText - validation.summary.afterText -nf_core_version: 3.3.2 + schema_params: false +nf_core_version: 3.5.1 repository_type: pipeline template: author: Jonas Demeulemeester diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bb41beec..d06777a8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ repos: additional_dependencies: - prettier@3.6.2 - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: trailing-whitespace args: [--markdown-linebreak-ext=md] diff --git a/README.md b/README.md index 43d75447..c9addb8d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![GitHub Actions Linting Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/linting.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/linting.yml)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX) [![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com) -[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) +[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/) [![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2) [![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/) [![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/) diff --git a/conf/test_full.config b/conf/test_full.config index bc82ecba..416ed610 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -1,24 +1,37 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Nextflow config file for running full-size tests + Nextflow config file for running minimal tests ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Defines input files and everything required to run a full size pipeline test. + Defines input files and everything required to run a fast and simple pipeline test. Use as follows: - nextflow run IntGenomicsLab/lrsomatic -profile test_full, --outdir + nextflow run IntGenomicsLab/lrsomatic -profile test, --outdir ---------------------------------------------------------------------------------------- */ +process { + withName: '.*' { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] + } +} + params { - config_profile_name = 'Full test profile' - config_profile_description = 'Full test dataset to check pipeline function' + config_profile_name = 'Test profile' + config_profile_description = 'Minimal test dataset to check pipeline function' - // Input data for full size test - // TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA) - // TODO nf-core: Give any required params for the test so that command line flags are not needed - input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv' + // Input data + input = "https://raw.githubusercontent.com/IntGenomicsLab/test-datasets/main/samplesheets/samplesheet_lr-somatic.csv" + fasta = "https://raw.githubusercontent.com/IntGenomicsLab/test-datasets/main/references/GRCh38_chr19.fasta.gz" - // Genome references - genome = 'R64-1-1' + // Additional params + genome = "GRCh38" + vep_genome = "WBcel235" + vep_species = "caenorhabditis_elegans" + skip_wakhan = true + skip_ascat = true } diff --git a/main.nf b/main.nf index 973da2f3..3ae271c8 100644 --- a/main.nf +++ b/main.nf @@ -71,7 +71,10 @@ workflow { params.monochrome_logs, args, params.outdir, - params.input + params.input, + params.help, + params.help_full, + params.show_hidden ) // diff --git a/modules.json b/modules.json index 58f3aae4..7bc71b09 100644 --- a/modules.json +++ b/modules.json @@ -7,9 +7,8 @@ "nf-core": { "ascat": { "branch": "master", - "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", - "installed_by": ["modules"], - "patch": "modules/nf-core/ascat/ascat.diff" + "git_sha": "98ffb090029d17a9fb8de75dadcfe6bc8b6377ec", + "installed_by": ["modules"] }, "bcftools/concat": { "branch": "master", @@ -34,7 +33,7 @@ }, "ensemblvep/vep": { "branch": "master", - "git_sha": "48ca3de1737b0144aa9fe05bea2b681f0ae45a95", + "git_sha": "0567eee9276d4a358e5f9f01c810a149fbd241f8", "installed_by": ["modules"], "patch": "modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff" }, @@ -45,19 +44,18 @@ }, "longphase/phase": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "47983538e45e539f783ed8ab0d1c96d39df2af8f", "installed_by": ["modules"], "patch": "modules/nf-core/longphase/phase/longphase-phase.diff" }, "minimap2/align": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["modules"], - "patch": "modules/nf-core/minimap2/align/minimap2-align.diff" + "git_sha": "1a5a9e7b4009dcf34e6867dd1a5a1d9a718b027b", + "installed_by": ["modules"] }, "minimap2/index": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "modkit/pileup": { @@ -72,12 +70,12 @@ }, "multiqc": { "branch": "master", - "git_sha": "a4488d3d09244f29fb4606ba4eef85d59dcc6ad8", + "git_sha": "af27af1be706e6a2bb8fe454175b0cdf77f47b49", "installed_by": ["modules"] }, "pigz/uncompress": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", "installed_by": ["modules"] }, "samtools/cat": { @@ -93,12 +91,12 @@ "samtools/flagstat": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_stats_samtools"] + "installed_by": ["modules"] }, "samtools/idxstats": { "branch": "master", "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_stats_samtools"] + "installed_by": ["modules"] }, "samtools/index": { "branch": "master", @@ -107,9 +105,8 @@ }, "samtools/stats": { "branch": "master", - "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", - "installed_by": ["bam_stats_samtools"], - "patch": "modules/nf-core/samtools/stats/samtools-stats.diff" + "git_sha": "f4eab7945952dc4934224309701a49913ea05ae6", + "installed_by": ["modules"] }, "severus": { "branch": "master", @@ -136,24 +133,19 @@ }, "subworkflows": { "nf-core": { - "bam_stats_samtools": { - "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", - "installed_by": ["subworkflows"] - }, "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", + "git_sha": "271e7fc14eb1320364416d996fb077421f3faed2", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", + "git_sha": "4b406a74dc0449c0401ed87d5bfff4252fd277fd", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/ascat/ascat.diff b/modules/nf-core/ascat/ascat.diff deleted file mode 100644 index 67d68dbf..00000000 --- a/modules/nf-core/ascat/ascat.diff +++ /dev/null @@ -1,153 +0,0 @@ -Changes in component 'nf-core/ascat' -'modules/nf-core/ascat/meta.yml' is unchanged -Changes in 'ascat/main.nf': ---- modules/nf-core/ascat/main.nf -+++ modules/nf-core/ascat/main.nf -@@ -4,11 +4,12 @@ - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? -- 'https://depot.galaxyproject.org/singularity/mulled-v2-c278c7398beb73294d78639a864352abef2931ce:ba3e6d2157eac2d38d22e62ec87675e12adb1010-0': -- 'biocontainers/mulled-v2-c278c7398beb73294d78639a864352abef2931ce:ba3e6d2157eac2d38d22e62ec87675e12adb1010-0' }" -+ 'https://depot.galaxyproject.org/singularity/mulled-v2-c278c7398beb73294d78639a864352abef2931ce:03f4a075e359bb32a613b098d13dba7b4c8c967f-0': -+ 'biocontainers/mulled-v2-c278c7398beb73294d78639a864352abef2931ce:03f4a075e359bb32a613b098d13dba7b4c8c967f-0' }" - - input: - tuple val(meta), path(input_normal), path(index_normal), path(input_tumor), path(index_tumor) -+ val(genomeVersion) - path(allele_files) - path(loci_files) - path(bed_file) // optional -@@ -23,8 +24,10 @@ - tuple val(meta), path("*LogR.txt"), emit: logrs - tuple val(meta), path("*metrics.txt"), emit: metrics - tuple val(meta), path("*png"), emit: png -+ tuple val(meta), path("*pdf"), emit: pdf, optional: true - tuple val(meta), path("*purityploidy.txt"), emit: purityploidy - tuple val(meta), path("*segments.txt"), emit: segments -+ tuple val(meta), path("*segments_raw.txt"), emit: segments_raw - path "versions.yml", emit: versions - - when: -@@ -34,9 +37,9 @@ - def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" - def gender = args.gender ? "$args.gender" : "NULL" -- def genomeVersion = args.genomeVersion ? "$args.genomeVersion" : "NULL" - def purity = args.purity ? "$args.purity" : "NULL" - def ploidy = args.ploidy ? "$args.ploidy" : "NULL" -+ def penalty = args.penalty ? "$args.penalty" : "NULL" - def gc_input = gc_file ? "$gc_file" : "NULL" - def rt_input = rt_file ? "$rt_file" : "NULL" - -@@ -48,7 +51,12 @@ - def fasta_arg = fasta ? ",ref.fasta = '$fasta'" : "" - def skip_allele_counting_tumour_arg = args.skip_allele_counting_tumour ? ",skip_allele_counting_tumour = $args.skip_allele_counting_tumour" : "" - def skip_allele_counting_normal_arg = args.skip_allele_counting_normal ? ",skip_allele_counting_normal = $args.skip_allele_counting_normal" : "" -- -+ -+ def normal_exists = input_normal ? 'TRUE' : 'FALSE' -+ def normal_bam = input_normal ? ",normalseqfile = '$input_normal'" : "" -+ def normal_name = input_normal ? ",normalname = '${prefix}.normal'" : "" -+ def longread_bins = args.longread_bins ? ",loci_binsize = $args.longread_bins" : "" -+ def allele_counter_flags = args.allele_counter_flags ? ",additional_allelecounter_flags = '$args.allele_counter_flags'" : "" - """ - #!/usr/bin/env Rscript - library(RColorBrewer) -@@ -65,21 +73,23 @@ - #prepare from BAM files - ascat.prepareHTS( - tumourseqfile = "$input_tumor", -- normalseqfile = "$input_normal", - tumourname = paste0("$prefix", ".tumour"), -- normalname = paste0("$prefix", ".normal"), - allelecounter_exe = "alleleCounter", - alleles.prefix = allele_prefix, - loci.prefix = loci_prefix, - gender = "$gender", - genomeVersion = "$genomeVersion", - nthreads = $task.cpus -+ $normal_bam -+ $normal_name - $minCounts_arg - $bed_file_arg - $chrom_names_arg - $min_base_qual_arg - $min_map_qual_arg -+ $longread_bins - $fasta_arg -+ $allele_counter_flags - $skip_allele_counting_tumour_arg - $skip_allele_counting_normal_arg, - seed = 42 -@@ -87,37 +97,55 @@ - - - #Load the data -- ascat.bc = ascat.loadData( -- Tumor_LogR_file = paste0("$prefix", ".tumour_tumourLogR.txt"), -- Tumor_BAF_file = paste0("$prefix", ".tumour_tumourBAF.txt"), -- Germline_LogR_file = paste0("$prefix", ".tumour_normalLogR.txt"), -- Germline_BAF_file = paste0("$prefix", ".tumour_normalBAF.txt"), -- genomeVersion = "$genomeVersion", -- gender = "$gender" -- ) -+ if($normal_exists) { -+ print("normal exists") -+ ascat.bc = ascat.loadData( -+ Tumor_LogR_file = paste0("$prefix", ".tumour_tumourLogR.txt"), -+ Tumor_BAF_file = paste0("$prefix", ".tumour_tumourBAF.txt"), -+ Germline_LogR_file = paste0("$prefix", ".tumour_normalLogR.txt"), -+ Germline_BAF_file = paste0("$prefix", ".tumour_normalBAF.txt"), -+ genomeVersion = "$genomeVersion", -+ gender = "$gender" -+ ) -+ } else { -+ print("normal does not exist") -+ ascat.bc = ascat.loadData( -+ Tumor_LogR_file = paste0("$prefix", ".tumour_tumourLogR.txt"), -+ Tumor_BAF_file = paste0("$prefix", ".tumour_tumourBAF.txt"), -+ genomeVersion = "$genomeVersion", -+ gender = "$gender") -+ gg = ascat.predictGermlineGenotypes(ascat.bc, platform = "WGS_hg38_50X") -+ -+ } -+ print("printing ascat.bc") -+ print(ascat.bc) - - #Plot the raw data - ascat.plotRawData(ascat.bc, img.prefix = paste0("$prefix", ".before_correction.")) - - # optional LogRCorrection - if("$gc_input" != "NULL") { -- gc_input = paste0(normalizePath("$gc_input"), "/", "$gc_input", ".txt") -+ gc_input = paste0(normalizePath("$gc_input")) - - if("$rt_input" != "NULL"){ -- rt_input = paste0(normalizePath("$rt_input"), "/", "$rt_input", ".txt") -+ rt_input = paste0(normalizePath("$rt_input")) - ascat.bc = ascat.correctLogR(ascat.bc, GCcontentfile = gc_input, replictimingfile = rt_input) - #Plot raw data after correction - ascat.plotRawData(ascat.bc, img.prefix = paste0("$prefix", ".after_correction_gc_rt.")) - } - else { -- ascat.bc = ascat.correctLogR(ascat.bc, GCcontentfile = gc_input, replictimingfile = $rt_input) -+ ascat.bc = ascat.correctLogR(ascat.bc, GCcontentfile = gc_input) - #Plot raw data after correction - ascat.plotRawData(ascat.bc, img.prefix = paste0("$prefix", ".after_correction_gc.")) - } - } - - #Segment the data -- ascat.bc = ascat.aspcf(ascat.bc, seed=42) -+ if($normal_exists) { -+ ascat.bc = ascat.aspcf(ascat.bc, seed=42, penalty = $penalty) -+ } else { -+ ascat.bc = ascat.aspcf(ascat.bc, seed=42, penalty = $penalty, ascat.gg = gg) -+ } - - #Plot the segmented data - ascat.plotSegmentedData(ascat.bc) - -'modules/nf-core/ascat/environment.yml' is unchanged -************************************************************ diff --git a/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff b/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff index 71c05d4b..659e2264 100644 --- a/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff +++ b/modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff @@ -3,7 +3,7 @@ Changes in component 'nf-core/ensemblvep/vep' Changes in 'ensemblvep/vep/main.nf': --- modules/nf-core/ensemblvep/vep/main.nf +++ modules/nf-core/ensemblvep/vep/main.nf -@@ -1,6 +1,6 @@ +@@ -1,11 +1,11 @@ process ENSEMBLVEP_VEP { tag "${meta.id}" - label 'process_medium' @@ -11,6 +11,13 @@ Changes in 'ensemblvep/vep/main.nf': conda "${moduleDir}/environment.yml" container "${workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container +- ? 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/4b/4b5a8c173dc9beaa93effec76b99687fc926b1bd7be47df5d6ce19d7d6b4d6b7/data' +- : 'community.wave.seqera.io/library/ensembl-vep:115.2--90ec797ecb088e9a'}" ++ ? 'https://depot.galaxyproject.org/singularity/ensembl-vep:114.2--pl5321h2a3209d_0' ++ : 'biocontainers/ensembl-vep:114.2--pl5321h2a3209d_0'}" + + input: + tuple val(meta), path(vcf), path(custom_extra_files) @@ -15,6 +15,8 @@ path cache tuple val(meta2), path(fasta) @@ -29,10 +36,96 @@ Changes in 'ensemblvep/vep/main.nf': vep \\ -i ${vcf} \\ -'modules/nf-core/ensemblvep/vep/environment.yml' is unchanged -'modules/nf-core/ensemblvep/vep/tests/main.nf.test' is unchanged +Changes in 'ensemblvep/vep/environment.yml': +--- modules/nf-core/ensemblvep/vep/environment.yml ++++ modules/nf-core/ensemblvep/vep/environment.yml +@@ -4,5 +4,4 @@ + - conda-forge + - bioconda + dependencies: +- # renovate: datasource=conda depName=bioconda/ensembl-vep +- - bioconda::ensembl-vep=115.2=pl5321h2a3209d_1 ++ - bioconda::ensembl-vep=114.2 + +Changes in 'ensemblvep/vep/tests/main.nf.test': +--- modules/nf-core/ensemblvep/vep/tests/main.nf.test ++++ modules/nf-core/ensemblvep/vep/tests/main.nf.test +@@ -16,7 +16,7 @@ + when { + process { + """ +- vep_cache = Channel.of(file('s3://annotation-cache/vep_cache/115_WBcel235/')).collect() ++ vep_cache = Channel.of(file('s3://annotation-cache/vep_cache/113_WBcel235/')).collect() + + input[0] = Channel.of([ + [ id:'test' ], // meta map +@@ -55,7 +55,7 @@ + when { + process { + """ +- vep_cache = Channel.of(file('s3://annotation-cache/vep_cache/115_WBcel235/')).collect() ++ vep_cache = Channel.of(file('s3://annotation-cache/vep_cache/113_WBcel235/')).collect() + + input[0] = Channel.of([ + [ id:'test' ], // meta map +@@ -79,7 +79,7 @@ + assert process.success + assertAll( + { assert snapshot(process.out.versions).match() }, +- { assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v115.2") } ++ { assert path(process.out.tab.get(0).get(1)).linesGzip.contains("## ENSEMBL VARIANT EFFECT PREDICTOR v114.2") } + ) + } + } + 'modules/nf-core/ensemblvep/vep/tests/vcf.config' is unchanged 'modules/nf-core/ensemblvep/vep/tests/tab.gz.config' is unchanged -'modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap' is unchanged -'modules/nf-core/ensemblvep/vep/tests/nextflow.config' is unchanged +Changes in 'ensemblvep/vep/tests/main.nf.test.snap': +--- modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap ++++ modules/nf-core/ensemblvep/vep/tests/main.nf.test.snap +@@ -2,27 +2,27 @@ + "test_ensemblvep_vep_fasta_tab_gz": { + "content": [ + [ +- "versions.yml:md5,1e9ba958f2a6c180c064505b29f843ef" ++ "versions.yml:md5,01653f5a713b20d56ed2468a2dab959a" + ] + ], + "meta": { + "nf-test": "0.9.2", +- "nextflow": "25.04.7" ++ "nextflow": "25.04.6" + }, +- "timestamp": "2025-09-29T10:00:37.755173" ++ "timestamp": "2025-08-21T13:16:46.760065318" + }, + "test_ensemblvep_vep_fasta_vcf - stub (not really but linting complains otherwise)": { + "content": [ + [ +- "versions.yml:md5,1e9ba958f2a6c180c064505b29f843ef" ++ "versions.yml:md5,01653f5a713b20d56ed2468a2dab959a" + ], + "d41d8cd98f00b204e9800998ecf8427e", + "test.vcf.gz.tbi" + ], + "meta": { + "nf-test": "0.9.2", +- "nextflow": "25.04.7" ++ "nextflow": "25.04.6" + }, +- "timestamp": "2025-09-29T10:00:03.682447" ++ "timestamp": "2025-08-21T13:16:00.65871573" + } + } +Changes in 'ensemblvep/vep/tests/nextflow.config': +--- modules/nf-core/ensemblvep/vep/tests/nextflow.config ++++ modules/nf-core/ensemblvep/vep/tests/nextflow.config +@@ -1,5 +1,5 @@ + params { +- vep_cache_version = "115" ++ vep_cache_version = "113" + vep_genome = "WBcel235" + vep_species = "caenorhabditis_elegans" + } + ************************************************************ diff --git a/modules/nf-core/longphase/phase/longphase-phase.diff b/modules/nf-core/longphase/phase/longphase-phase.diff index 43a29b24..1e9d2652 100644 --- a/modules/nf-core/longphase/phase/longphase-phase.diff +++ b/modules/nf-core/longphase/phase/longphase-phase.diff @@ -1,40 +1,492 @@ Changes in component 'nf-core/longphase/phase' -'modules/nf-core/longphase/phase/meta.yml' is unchanged +Changes in 'longphase/phase/meta.yml': +--- modules/nf-core/longphase/phase/meta.yml ++++ modules/nf-core/longphase/phase/meta.yml +@@ -34,7 +34,7 @@ + description: Index of sorted BAM/CRAM file(s) + pattern: "*.{bai,crai,csi}" + ontologies: [] +- - snvs: ++ - snps: + type: file + description: VCF file with SNPs (and INDELs) + pattern: "*.{vcf,vcf.gz}" +@@ -70,39 +70,15 @@ + pattern: "*.fai" + ontologies: [] + output: +- snv_vcf: ++ vcf: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` +- - "${prefix}.vcf.gz": ++ - "*.vcf.gz": + type: file +- description: Compressed VCF file with phased SNVs and indels +- pattern: "*.vcf.gz" +- ontologies: +- - edam: http://edamontology.org/format_3989 # GZIP format +- sv_vcf: +- - - meta: +- type: map +- description: | +- Groovy Map containing sample information +- e.g. `[ id:'sample1', single_end:false ]` +- - "${prefix}_SV.vcf.gz": +- type: file +- description: Compressed VCF file with phased SVs +- pattern: "*_SV.vcf.gz" +- ontologies: +- - edam: http://edamontology.org/format_3989 # GZIP format +- mod_vcf: +- - - meta: +- type: map +- description: | +- Groovy Map containing sample information +- e.g. `[ id:'sample1', single_end:false ]` +- - "${prefix}_mod.vcf.gz": +- type: file +- description: Compressed VCF file with phased modifications ++ description: Compressed VCF file with phased variants + pattern: "*.vcf.gz" + ontologies: + - edam: http://edamontology.org/format_3989 # GZIP format + Changes in 'longphase/phase/main.nf': --- modules/nf-core/longphase/phase/main.nf +++ modules/nf-core/longphase/phase/main.nf -@@ -14,8 +14,9 @@ +@@ -4,20 +4,19 @@ + + conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? +- 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/b0/b0184a9a36d8612fbae38bbaad7b52f03b815ad17673740e107cf1f267a1f15d/data': +- 'community.wave.seqera.io/library/htslib_longphase:3071e61356fc25a4' }" ++ 'https://depot.galaxyproject.org/singularity/mulled-v2-d626bb8ec5a659accfbd8490bc1ac4a940722258:682e8c0cc0ceebf9bd38371a58249aabce93b1b3-0': ++ 'biocontainers/mulled-v2-d626bb8ec5a659accfbd8490bc1ac4a940722258:682e8c0cc0ceebf9bd38371a58249aabce93b1b3-0' }" + + input: +- tuple val(meta), path(bam), path(bai), path(snvs), path(svs), path(mods) ++ tuple val(meta), path(bam), path(bai), path(snps), path(svs), path(mods) + tuple val(meta2), path(fasta) + tuple val(meta3), path(fai) output: -- tuple val(meta), path("*.vcf.gz"), emit: vcf -- path "versions.yml" , emit: versions +- tuple val(meta), path("${prefix}.vcf.gz") , emit: snv_vcf +- tuple val(meta), path("${prefix}_SV.vcf.gz") , emit: sv_vcf , optional: true +- tuple val(meta), path("${prefix}_mod.vcf.gz"), emit: mod_vcf, optional: true +- path "versions.yml" , emit: versions + tuple val(meta), path("*.vcf.gz") , emit: vcf + tuple val(meta), path("*.vcf.gz.tbi") , emit: tbi + path "versions.yml" , emit: versions when: task.ext.when == null || task.ext.when -@@ -43,6 +44,8 @@ +@@ -25,7 +24,7 @@ + script: + def args = task.ext.args ?: '' + def args2 = task.ext.args2 ?: '' +- prefix = task.ext.prefix ?: "${meta.id}" ++ def prefix = task.ext.prefix ?: "${meta.id}" + def sv_file = svs ? "--sv-file ${svs}" : "" + def mod_file = mods ? "--mod-file ${mods}" : "" + def bams = bam.collectMany { file -> ["-b", file] }.join(" ") +@@ -36,7 +35,7 @@ + --threads $task.cpus \\ + -o ${prefix} \\ + --reference ${fasta} \\ +- --snp-file ${snvs} \\ ++ --snp-file ${snps} \\ + ${bams} \\ + ${sv_file} \\ + ${mod_file} \\ +@@ -44,7 +43,9 @@ + bgzip \\ --threads $task.cpus \\ $args2 \\ - ${prefix}.vcf +- ${prefix}*.vcf ++ ${prefix}.vcf + + tabix -p vcf ${prefix}.vcf.gz cat <<-END_VERSIONS > versions.yml "${task.process}": -@@ -55,6 +58,7 @@ - def prefix = task.ext.prefix ?: "${meta.id}" +@@ -54,15 +55,10 @@ + + stub: + def args = task.ext.args ?: '' +- prefix = task.ext.prefix ?: "${meta.id}" +- def sv_command = svs ? "echo '' | bgzip -c > ${prefix}_SV.vcf.gz" : "" +- def mod_command = mods ? "echo '' | bgzip -c > ${prefix}_mod.vcf.gz" : "" ++ def prefix = task.ext.prefix ?: "${meta.id}" """ +- echo $args echo "" | bgzip -c > ${prefix}.vcf.gz +- +- $sv_command +- $mod_command + echo "" > ${prefix}.vcf.gz.tbi cat <<-END_VERSIONS > versions.yml "${task.process}": -'modules/nf-core/longphase/phase/environment.yml' is unchanged -'modules/nf-core/longphase/phase/tests/main.nf.test' is unchanged -'modules/nf-core/longphase/phase/tests/main.nf.test.snap' is unchanged +Changes in 'longphase/phase/environment.yml': +--- modules/nf-core/longphase/phase/environment.yml ++++ modules/nf-core/longphase/phase/environment.yml +@@ -5,5 +5,5 @@ + - bioconda + + dependencies: +- - bioconda::htslib=1.22.1 +- - bioconda::longphase=2.0 ++ - bioconda::htslib=1.20 ++ - bioconda::longphase=1.7.3 + +Changes in 'longphase/phase/tests/main.nf.test': +--- modules/nf-core/longphase/phase/tests/main.nf.test ++++ modules/nf-core/longphase/phase/tests/main.nf.test +@@ -44,7 +44,7 @@ + + } + +- test("[ bam, bai, snps, svs, [] ], fasta, fai") { ++test("[ bam, bai, snps, svs, [] ], fasta, fai") { + + when { + process { +@@ -78,7 +78,7 @@ + + } + +- test("[ bam x2, bai x2, snps, svs, [] ], fasta, fai") { ++test("[ bam x2, bai x2, snps, svs, [] ], fasta, fai") { + + when { + process { +@@ -154,38 +154,4 @@ + + } + +- test("[ bam, bai, snps, svs, [] ], fasta, fai - stub") { +- options "-stub" +- +- when { +- process { +- """ +- input[0] = [ +- [ id:'test' ], +- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/nanopore/bam/test.sorted.bam', checkIfExists: true), +- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/nanopore/bam/test.sorted.bam.bai', checkIfExists: true), +- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/gvcf/test.genome.vcf.gz', checkIfExists: true), +- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/illumina/vcf/NA24385_sv.vcf.gz', checkIfExists: true), +- [] +- ] +- input[1] = [ +- [ id:'reference' ], +- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta', checkIfExists: true) +- ] +- input[2] = [ +- [ id:'reference' ], +- file(params.modules_testdata_base_path + 'genomics/homo_sapiens/genome/genome.fasta.fai', checkIfExists: true) +- ] +- """ +- } +- } +- +- then { +- assertAll( +- { assert process.success }, +- { assert snapshot(process.out).match() } +- ) +- } +- +- } + } + +Changes in 'longphase/phase/tests/main.nf.test.snap': +--- modules/nf-core/longphase/phase/tests/main.nf.test.snap ++++ modules/nf-core/longphase/phase/tests/main.nf.test.snap +@@ -1,59 +1,4 @@ + { +- "[ bam, bai, snps, svs, [] ], fasta, fai - stub": { +- "content": [ +- { +- "0": [ +- [ +- { +- "id": "test" +- }, +- "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" +- ] +- ], +- "1": [ +- [ +- { +- "id": "test" +- }, +- "test_SV.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" +- ] +- ], +- "2": [ +- +- ], +- "3": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" +- ], +- "mod_vcf": [ +- +- ], +- "snv_vcf": [ +- [ +- { +- "id": "test" +- }, +- "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" +- ] +- ], +- "sv_vcf": [ +- [ +- { +- "id": "test" +- }, +- "test_SV.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" +- ] +- ], +- "versions": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" +- ] +- } +- ], +- "meta": { +- "nf-test": "0.9.2", +- "nextflow": "25.04.5" +- }, +- "timestamp": "2025-11-06T16:06:24.025191062" +- }, + "[ bam, bai, snps, [], [] ], fasta, fai": { + "content": [ + { +@@ -62,42 +7,30 @@ + { + "id": "test" + }, +- "test.vcf.gz:md5,77d7ca7d16c841d3f552681abef984dc" ++ "test.vcf.gz:md5,fd2d21056b2de4722f12d5e883d9cb0a" + ] + ], + "1": [ +- ++ "versions.yml:md5,8d8d82510dd1fbe01a91c575c472897f" + ], +- "2": [ +- +- ], +- "3": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" +- ], +- "mod_vcf": [ +- +- ], +- "snv_vcf": [ ++ "vcf": [ + [ + { + "id": "test" + }, +- "test.vcf.gz:md5,77d7ca7d16c841d3f552681abef984dc" ++ "test.vcf.gz:md5,fd2d21056b2de4722f12d5e883d9cb0a" + ] + ], +- "sv_vcf": [ +- +- ], + "versions": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" ++ "versions.yml:md5,8d8d82510dd1fbe01a91c575c472897f" + ] + } + ], + "meta": { +- "nf-test": "0.9.2", +- "nextflow": "25.04.5" ++ "nf-test": "0.8.4", ++ "nextflow": "24.04.2" + }, +- "timestamp": "2025-11-06T16:05:57.029934447" ++ "timestamp": "2024-07-22T12:14:04.269956432" + }, + "[ bam, bai, snps, svs, [] ], fasta, fai": { + "content": [ +@@ -107,52 +40,30 @@ + { + "id": "test" + }, +- "test.vcf.gz:md5,f26bc442f6a1645bcfaabf989ab9483c" ++ "test.vcf.gz:md5,b0a3effd6e076edbe7e2f1f7cfff547c" + ] + ], + "1": [ ++ "versions.yml:md5,8d8d82510dd1fbe01a91c575c472897f" ++ ], ++ "vcf": [ + [ + { + "id": "test" + }, +- "test_SV.vcf.gz:md5,e1b83c15a21bab57f2b228cc7c7d8be8" +- ] +- ], +- "2": [ +- +- ], +- "3": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" +- ], +- "mod_vcf": [ +- +- ], +- "snv_vcf": [ +- [ +- { +- "id": "test" +- }, +- "test.vcf.gz:md5,f26bc442f6a1645bcfaabf989ab9483c" +- ] +- ], +- "sv_vcf": [ +- [ +- { +- "id": "test" +- }, +- "test_SV.vcf.gz:md5,e1b83c15a21bab57f2b228cc7c7d8be8" ++ "test.vcf.gz:md5,b0a3effd6e076edbe7e2f1f7cfff547c" + ] + ], + "versions": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" ++ "versions.yml:md5,8d8d82510dd1fbe01a91c575c472897f" + ] + } + ], + "meta": { +- "nf-test": "0.9.2", +- "nextflow": "25.04.5" ++ "nf-test": "0.9.0", ++ "nextflow": "24.04.4" + }, +- "timestamp": "2025-11-06T16:06:03.319855838" ++ "timestamp": "2024-10-04T13:37:16.921910004" + }, + "[ bam x2, bai x2, snps, svs, [] ], fasta, fai": { + "content": [ +@@ -162,52 +73,30 @@ + { + "id": "test" + }, +- "test.vcf.gz:md5,5333ba9fa14233d3fdbd8b9e1786b998" ++ "test.vcf.gz:md5,04905b6042998e592c9f3b887ae9e09c" + ] + ], + "1": [ ++ "versions.yml:md5,8d8d82510dd1fbe01a91c575c472897f" ++ ], ++ "vcf": [ + [ + { + "id": "test" + }, +- "test_SV.vcf.gz:md5,434fd35ae3de2a9187e43932686bfd19" +- ] +- ], +- "2": [ +- +- ], +- "3": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" +- ], +- "mod_vcf": [ +- +- ], +- "snv_vcf": [ +- [ +- { +- "id": "test" +- }, +- "test.vcf.gz:md5,5333ba9fa14233d3fdbd8b9e1786b998" +- ] +- ], +- "sv_vcf": [ +- [ +- { +- "id": "test" +- }, +- "test_SV.vcf.gz:md5,434fd35ae3de2a9187e43932686bfd19" ++ "test.vcf.gz:md5,04905b6042998e592c9f3b887ae9e09c" + ] + ], + "versions": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" ++ "versions.yml:md5,8d8d82510dd1fbe01a91c575c472897f" + ] + } + ], + "meta": { +- "nf-test": "0.9.2", +- "nextflow": "25.04.5" ++ "nf-test": "0.9.0", ++ "nextflow": "24.04.4" + }, +- "timestamp": "2025-11-06T16:06:10.867281359" ++ "timestamp": "2024-10-04T13:37:23.41768963" + }, + "[ bam, bai, snps, [], [] ], fasta, fai - stub": { + "content": [ +@@ -221,18 +110,9 @@ + ] + ], + "1": [ +- ++ "versions.yml:md5,8d8d82510dd1fbe01a91c575c472897f" + ], +- "2": [ +- +- ], +- "3": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" +- ], +- "mod_vcf": [ +- +- ], +- "snv_vcf": [ ++ "vcf": [ + [ + { + "id": "test" +@@ -240,18 +120,15 @@ + "test.vcf.gz:md5,68b329da9893e34099c7d8ad5cb9c940" + ] + ], +- "sv_vcf": [ +- +- ], + "versions": [ +- "versions.yml:md5,1bc54f97e2b06e354a655d1066245fb4" ++ "versions.yml:md5,8d8d82510dd1fbe01a91c575c472897f" + ] + } + ], + "meta": { +- "nf-test": "0.9.2", +- "nextflow": "25.04.5" ++ "nf-test": "0.8.4", ++ "nextflow": "24.04.2" + }, +- "timestamp": "2025-11-06T16:06:17.992733472" ++ "timestamp": "2024-07-22T12:15:40.296227382" + } + } 'modules/nf-core/longphase/phase/tests/nextflow.config' is unchanged ************************************************************ diff --git a/modules/nf-core/minimap2/align/minimap2-align.diff b/modules/nf-core/minimap2/align/minimap2-align.diff deleted file mode 100644 index 967bb654..00000000 --- a/modules/nf-core/minimap2/align/minimap2-align.diff +++ /dev/null @@ -1,18 +0,0 @@ -Changes in component 'nf-core/minimap2/align' -'modules/nf-core/minimap2/align/meta.yml' is unchanged -Changes in 'minimap2/align/main.nf': ---- modules/nf-core/minimap2/align/main.nf -+++ modules/nf-core/minimap2/align/main.nf -@@ -1,6 +1,6 @@ - process MINIMAP2_ALIGN { - tag "$meta.id" -- label 'process_high' -+ label 'process_very_high' - - // Note: the versions here need to match the versions used in the mulled container below and minimap2/index - conda "${moduleDir}/environment.yml" - -'modules/nf-core/minimap2/align/environment.yml' is unchanged -'modules/nf-core/minimap2/align/tests/main.nf.test' is unchanged -'modules/nf-core/minimap2/align/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index f8937048..d02016a0 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -4,4 +4,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.30 + - bioconda::multiqc=1.32 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 67460de9..c1158fb0 100644 --- a/modules/nf-core/multiqc/main.nf +++ b/modules/nf-core/multiqc/main.nf @@ -3,8 +3,8 @@ process MULTIQC { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'https://depot.galaxyproject.org/singularity/multiqc:1.30--pyhdfd78af_1' : - 'biocontainers/multiqc:1.30--pyhdfd78af_1' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/8c/8c6c120d559d7ee04c7442b61ad7cf5a9e8970be5feefb37d68eeaa60c1034eb/data' : + 'community.wave.seqera.io/library/multiqc:1.32--d58f60e4deb769bf' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 0d3f288b..a88bafd6 100644 --- a/modules/nf-core/multiqc/tests/main.nf.test.snap +++ b/modules/nf-core/multiqc/tests/main.nf.test.snap @@ -2,14 +2,14 @@ "multiqc_versions_single": { "content": [ [ - "versions.yml:md5,e65ce731db2128b8e4dd43d6e880fc1c" + "versions.yml:md5,737bb2c7cad54ffc2ec020791dc48b8f" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.9.3", + "nextflow": "24.10.4" }, - "timestamp": "2025-07-10T08:06:23.563041241" + "timestamp": "2025-10-27T13:33:24.356715" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,e65ce731db2128b8e4dd43d6e880fc1c" + "versions.yml:md5,737bb2c7cad54ffc2ec020791dc48b8f" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.9.3", + "nextflow": "24.10.4" }, - "timestamp": "2025-07-10T08:06:48.96226832" + "timestamp": "2025-10-27T13:34:11.103619" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,e65ce731db2128b8e4dd43d6e880fc1c" + "versions.yml:md5,737bb2c7cad54ffc2ec020791dc48b8f" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.3" + "nf-test": "0.9.3", + "nextflow": "24.10.4" }, - "timestamp": "2025-07-10T08:06:40.627008706" + "timestamp": "2025-10-27T13:34:04.615233" } -} +} \ No newline at end of file diff --git a/modules/nf-core/samtools/stats/samtools-stats.diff b/modules/nf-core/samtools/stats/samtools-stats.diff deleted file mode 100644 index f6a5b76c..00000000 --- a/modules/nf-core/samtools/stats/samtools-stats.diff +++ /dev/null @@ -1,18 +0,0 @@ -Changes in component 'nf-core/samtools/stats' -'modules/nf-core/samtools/stats/meta.yml' is unchanged -Changes in 'samtools/stats/main.nf': ---- modules/nf-core/samtools/stats/main.nf -+++ modules/nf-core/samtools/stats/main.nf -@@ -1,6 +1,6 @@ - process SAMTOOLS_STATS { - tag "$meta.id" -- label 'process_single' -+ label 'process_medium' - - conda "${moduleDir}/environment.yml" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - -'modules/nf-core/samtools/stats/environment.yml' is unchanged -'modules/nf-core/samtools/stats/tests/main.nf.test' is unchanged -'modules/nf-core/samtools/stats/tests/main.nf.test.snap' is unchanged -************************************************************ diff --git a/nextflow.config b/nextflow.config index 78de4dc1..a3eb8548 100644 --- a/nextflow.config +++ b/nextflow.config @@ -300,7 +300,7 @@ manifest { description = """Workflow for somatic variant calling of long read data""" mainScript = 'main.nf' defaultBranch = 'main' - nextflowVersion = '!>=24.10.5' + nextflowVersion = '!>=25.04.0' version = '1.0.0dev' doi = '' } diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 81a1843a..f772e522 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-09-17T12:26:04+00:00", - "description": "# IntGenomicsLab/lrsomatic\n\n[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/nf-test.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/linting.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/linting.yml)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A524.10.5-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/IntGenomicsLab/lrsomatic)\n\n## Introduction\n\n**IntGenomicsLab/lrsomatic** is a robust bioinformatics pipeline designed for processing and analyzing **somatic DNA sequencing** data for long-read sequencing technologies from **Oxford Nanopore** and **PacBio**. It supports both canonical base DNA and modified base calling, including specialized applications such as **Fiber-seq**.\n\nThis **end-to-end pipeline** handles the entire workflow \u2014 **from raw read processing and alignment, to comprehensive somatic variant calling**, including single nucleotide variants, indels, structural variants, copy number alterations, and modified bases.\n\nIt can be run in both **matched tumour-normal** and **tumour-only mode**, offering flexibility depending on the users study design.\n\nDeveloped using **Nextflow DSL2**, it offers high portability and scalability across diverse computing environments. By leveraging Docker or Singularity containers, installation is streamlined and results are highly reproducible. Each process runs in an isolated container, simplifying dependency management and updates. Where applicable, pipeline components are sourced from **nf-core/modules**, promoting reuse, interoperability, and consistency within the broader Nextflow and nf-core ecosystems.\n\n## Pipeline summary\n\n**1) Pre-processing:**\n\na. Raw read QC ([`cramino`](https://github.com/wdecoster/cramino))\n\nb. Alignment to the reference genome ([`minimap2`](https://github.com/lh3/minimap2))\n\nc. Post alignment QC ([`cramino`](https://github.com/wdecoster/cramino), [`samtools idxstats`](https://github.com/samtools/samtools), [`samtools flagstats`](https://github.com/samtools/samtools), [`samtools stats`](https://github.com/samtools/samtools))\n\nd. Specific for calling modified base calling ([`Modkit`](https://github.com/nanoporetech/modkit), [`Fibertools`](https://github.com/fiberseq/fibertools-rs))\n\n**2i) Matched mode: small variant calling:**\n\na. Calling Germline SNPs ([`Clair3`](https://github.com/HKU-BAL/Clair3))\n\nb. Phasing and Haplotagging the SNPs in the normal and tumour BAM ([`LongPhase`](https://github.com/twolinin/longphase))\n\nc. Calling somatic SNVs ([`ClairS`](https://github.com/HKU-BAL/ClairS))\n\n**2ii) Tumour only mode: small variant calling:**\n\na. Calling Germline SNPs and somatic SNVs ([`ClairS-TO`](https://github.com/HKU-BAL/ClairS-TO))\n\nb. Phasing and Haplotagging germline SNPs in tumour BAM ([`LongPhase`](https://github.com/twolinin/longphase))\n\n**3) Large variant calling:**\n\na. Somatic structural variant calling ([`Severus`](https://github.com/KolmogorovLab/Severus))\n\nb. Copy number alterion calling; long read version of ([`ASCAT`](https://github.com/VanLoo-lab/ascat))\n\n\n2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nFirst prepare a samplesheet with your input data that looks as follows:\n\n```csv\nsample,bam_tumor,bam_normal,platform,sex,fiber\nsample1,tumour.bam,normal.bam,ont,female,n\nsample2,tumour.bam,,ont,female,y\nsample3,tumour.bam,,pb,male,n\nsample4,tumour.bam,normal.bam,pb,male,y\n```\n\nEach row represents a sample. The bam files should always be unaligned bam files. All fields except for `bam_normal` are required. If `bam_normal` is empty, the pipeline will run in tumour only mode. `platform` should be either `ont` or `pb` for Oxford Nanopore Sequencing or PacBio sequencing, respectively. `sex` refers to the biological sex of the sample and should be either `female` or `male`. Finally, `fiber` specifies whether your sample is Fiber-seq data or not and should have either `y` for Yes or `n` for No.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run IntGenomicsLab/lrsomatic \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n## Credits\n\nIntGenomicsLab/lr_somatic was originally written by Luuk Harbers, Robert Forsyth, Alexandra Pan\u010d\u00edkov\u00e1, Marios Eftychiou, Ruben Cools, and Jonas Demeulemeester.\n\n## Pipeline output\n\nThis pipeline produces a series of different output files. The main output is an aligned and phased tumour bam file. This bam file can be used by any typical downstream tool that uses bam files as input. Furthermore, we have sample-specific QC outputs from `cramino` (fastq), `cramino` (bam), `mosdepth`, `samtools` (stats/flagstat/idxstats), and optionally `fibertools`. Finally, we have a `multiqc` report from that combines the output from `mosdepth` and `samtools` into one html report.\n\nBesides QC and the aligned and phased bam file, we have output from (structural) variant and copy number callers, of which some are optional. The output from these variant callers can be found in their respective folders. For small and structural variant callers (`clairS`, `clairS-TO`, and `severus`) these will contain, among others, `vcf` files with called variants. For `ascat` these contain files with final copy number information and plots of the copy number profiles.\n\nExample output directory structure:\n\n```\nresults\n|\n\u251c\u2500\u2500 multiqc\n\u2502\n\u251c\u2500\u2500 sample1\n\u2502 \u251c\u2500\u2500 bamfiles\n\u2502 \u251c\u2500\u2500 qc\n\u2502 \u2502 \u251c\u2500\u2500 tumour\n\u2502 \u2502 \u2514\u2500\u2500 normal\n\u2502 \u251c\u2500\u2500 variants\n\u2502 \u2502 \u251c\u2500\u2500 severus\n\u2502 \u2502 \u2514\u2500\u2500 clairs\n\u2502 \u2514\u2500\u2500 ascat\n\u2502\n\u2514\u2500\u2500 sample2\n \u251c\u2500\u2500 bamfiles\n \u251c\u2500\u2500 qc\n \u2502 \u251c\u2500\u2500 tumour\n \u2502 \u2514\u2500\u2500 normal\n \u251c\u2500\u2500 variants\n \u2502 \u251c\u2500\u2500 severus\n \u2502 \u2514\u2500\u2500 clairs\n \u2514\u2500\u2500 ascat\n```\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nThis pipeline uses code and infrastructure developed and maintained by the [nf-core](https://nf-co.re) community, reused here under the [MIT license](https://github.com/nf-core/tools/blob/main/LICENSE).\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", + "datePublished": "2025-11-20T09:56:35+00:00", + "description": "# IntGenomicsLab/lrsomatic\n\n[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/nf-test.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/nf-test.yml)\n[![GitHub Actions Linting Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/linting.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/linting.yml)[![Cite with Zenodo](http://img.shields.io/badge/DOI-10.5281/zenodo.XXXXXXX-1073c8?labelColor=000000)](https://doi.org/10.5281/zenodo.XXXXXXX)\n[![nf-test](https://img.shields.io/badge/unit_tests-nf--test-337ab7.svg)](https://www.nf-test.com)\n\n[![Nextflow](https://img.shields.io/badge/version-%E2%89%A525.04.0-green?style=flat&logo=nextflow&logoColor=white&color=%230DC09D&link=https%3A%2F%2Fnextflow.io)](https://www.nextflow.io/)\n[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.3.2-green?style=flat&logo=nfcore&logoColor=white&color=%2324B064&link=https%3A%2F%2Fnf-co.re)](https://github.com/nf-core/tools/releases/tag/3.3.2)\n[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)\n[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)\n[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)\n[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/IntGenomicsLab/lrsomatic)\n\n## Introduction\n\n**IntGenomicsLab/lrsomatic** is a robust bioinformatics pipeline designed for processing and analyzing **somatic DNA sequencing** data for long-read sequencing technologies from **Oxford Nanopore** and **PacBio**. It supports both canonical base DNA and modified base calling, including specialized applications such as **Fiber-seq**.\n\nThis **end-to-end pipeline** handles the entire workflow \u2014 **from raw read processing and alignment, to comprehensive somatic variant calling**, including single nucleotide variants, indels, structural variants, copy number alterations, and modified bases.\n\nIt can be run in both **matched tumour-normal** and **tumour-only mode**, offering flexibility depending on the users study design.\n\nDeveloped using **Nextflow DSL2**, it offers high portability and scalability across diverse computing environments. By leveraging Docker or Singularity containers, installation is streamlined and results are highly reproducible. Each process runs in an isolated container, simplifying dependency management and updates. Where applicable, pipeline components are sourced from **nf-core/modules**, promoting reuse, interoperability, and consistency within the broader Nextflow and nf-core ecosystems.\n\n## Pipeline summary\n\n**1) Pre-processing:**\n\na. Raw read QC ([`cramino`](https://github.com/wdecoster/cramino))\n\nb. Alignment to the reference genome ([`minimap2`](https://github.com/lh3/minimap2))\n\nc. Post alignment QC ([`cramino`](https://github.com/wdecoster/cramino), [`samtools idxstats`](https://github.com/samtools/samtools), [`samtools flagstats`](https://github.com/samtools/samtools), [`samtools stats`](https://github.com/samtools/samtools))\n\nd. Specific for calling modified base calling ([`Modkit`](https://github.com/nanoporetech/modkit), [`Fibertools`](https://github.com/fiberseq/fibertools-rs))\n\n**2i) Matched mode: small variant calling:**\n\na. Calling Germline SNPs ([`Clair3`](https://github.com/HKU-BAL/Clair3))\n\nb. Phasing and Haplotagging the SNPs in the normal and tumour BAM ([`LongPhase`](https://github.com/twolinin/longphase))\n\nc. Calling somatic SNVs ([`ClairS`](https://github.com/HKU-BAL/ClairS))\n\n**2ii) Tumour only mode: small variant calling:**\n\na. Calling Germline SNPs and somatic SNVs ([`ClairS-TO`](https://github.com/HKU-BAL/ClairS-TO))\n\nb. Phasing and Haplotagging germline SNPs in tumour BAM ([`LongPhase`](https://github.com/twolinin/longphase))\n\n**3) Large variant calling:**\n\na. Somatic structural variant calling ([`Severus`](https://github.com/KolmogorovLab/Severus))\n\nb. Copy number alterion calling; long read version of ([`ASCAT`](https://github.com/VanLoo-lab/ascat))\n\n\n2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/))\n\n## Usage\n\n> [!NOTE]\n> If you are new to Nextflow and nf-core, please refer to [this page](https://nf-co.re/docs/usage/installation) on how to set-up Nextflow. Make sure to [test your setup](https://nf-co.re/docs/usage/introduction#how-to-run-a-pipeline) with `-profile test` before running the workflow on actual data.\n\nFirst prepare a samplesheet with your input data that looks as follows:\n\n```csv\nsample,bam_tumor,bam_normal,platform,sex,fiber\nsample1,tumour.bam,normal.bam,ont,female,n\nsample2,tumour.bam,,ont,female,y\nsample3,tumour.bam,,pb,male,n\nsample4,tumour.bam,normal.bam,pb,male,y\n```\n\nEach row represents a sample. The bam files should always be unaligned bam files. All fields except for `bam_normal` are required. If `bam_normal` is empty, the pipeline will run in tumour only mode. `platform` should be either `ont` or `pb` for Oxford Nanopore Sequencing or PacBio sequencing, respectively. `sex` refers to the biological sex of the sample and should be either `female` or `male`. Finally, `fiber` specifies whether your sample is Fiber-seq data or not and should have either `y` for Yes or `n` for No.\n\nNow, you can run the pipeline using:\n\n```bash\nnextflow run IntGenomicsLab/lrsomatic \\\n -profile \\\n --input samplesheet.csv \\\n --outdir \n```\n\n> [!WARNING]\n> Please provide pipeline parameters via the CLI or Nextflow `-params-file` option. Custom config files including those provided by the `-c` Nextflow option can be used to provide any configuration _**except for parameters**_; see [docs](https://nf-co.re/docs/usage/getting_started/configuration#custom-configuration-files).\n\n## Credits\n\nIntGenomicsLab/lr_somatic was originally written by Luuk Harbers, Robert Forsyth, Alexandra Pan\u010d\u00edkov\u00e1, Marios Eftychiou, Ruben Cools, and Jonas Demeulemeester.\n\n## Pipeline output\n\nThis pipeline produces a series of different output files. The main output is an aligned and phased tumour bam file. This bam file can be used by any typical downstream tool that uses bam files as input. Furthermore, we have sample-specific QC outputs from `cramino` (fastq), `cramino` (bam), `mosdepth`, `samtools` (stats/flagstat/idxstats), and optionally `fibertools`. Finally, we have a `multiqc` report from that combines the output from `mosdepth` and `samtools` into one html report.\n\nBesides QC and the aligned and phased bam file, we have output from (structural) variant and copy number callers, of which some are optional. The output from these variant callers can be found in their respective folders. For small and structural variant callers (`clairS`, `clairS-TO`, and `severus`) these will contain, among others, `vcf` files with called variants. For `ascat` these contain files with final copy number information and plots of the copy number profiles.\n\nExample output directory structure:\n\n```\nresults\n|\n\u251c\u2500\u2500 multiqc\n\u2502\n\u251c\u2500\u2500 sample1\n\u2502 \u251c\u2500\u2500 bamfiles\n\u2502 \u251c\u2500\u2500 qc\n\u2502 \u2502 \u251c\u2500\u2500 tumour\n\u2502 \u2502 \u2514\u2500\u2500 normal\n\u2502 \u251c\u2500\u2500 variants\n\u2502 \u2502 \u251c\u2500\u2500 severus\n\u2502 \u2502 \u2514\u2500\u2500 clairs\n\u2502 \u2514\u2500\u2500 ascat\n\u2502\n\u2514\u2500\u2500 sample2\n \u251c\u2500\u2500 bamfiles\n \u251c\u2500\u2500 qc\n \u2502 \u251c\u2500\u2500 tumour\n \u2502 \u2514\u2500\u2500 normal\n \u251c\u2500\u2500 variants\n \u2502 \u251c\u2500\u2500 severus\n \u2502 \u2514\u2500\u2500 clairs\n \u2514\u2500\u2500 ascat\n```\n\n## Contributions and Support\n\nIf you would like to contribute to this pipeline, please see the [contributing guidelines](.github/CONTRIBUTING.md).\n\n## Citations\n\n\n\n\n\n\nAn extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file.\n\nThis pipeline uses code and infrastructure developed and maintained by the [nf-core](https://nf-co.re) community, reused here under the [MIT license](https://github.com/nf-core/tools/blob/main/LICENSE).\n\n> **The nf-core framework for community-curated bioinformatics pipelines.**\n>\n> Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen.\n>\n> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x).\n", "hasPart": [ { "@id": "main.nf" @@ -93,7 +93,7 @@ }, "mentions": [ { - "@id": "#f4372c5c-a777-432b-87e8-dcf239c9c331" + "@id": "#75fcd790-ddea-4e5f-ad8a-a3bcb0ee570b" } ], "name": "IntGenomicsLab/lrsomatic" @@ -121,7 +121,7 @@ "ComputationalWorkflow" ], "dateCreated": "", - "dateModified": "2025-09-17T14:26:04Z", + "dateModified": "2025-11-20T10:56:35Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -157,14 +157,14 @@ "url": { "@id": "https://www.nextflow.io/" }, - "version": "!>=24.10.5" + "version": "!>=25.04.0" }, { - "@id": "#f4372c5c-a777-432b-87e8-dcf239c9c331", + "@id": "#75fcd790-ddea-4e5f-ad8a-a3bcb0ee570b", "@type": "TestSuite", "instance": [ { - "@id": "#d45cd938-4370-4c70-8435-dca43e0a0a87" + "@id": "#96bff4ee-228f-4a92-b1d1-e4fc3c4656c5" } ], "mainEntity": { @@ -173,7 +173,7 @@ "name": "Test suite for IntGenomicsLab/lrsomatic" }, { - "@id": "#d45cd938-4370-4c70-8435-dca43e0a0a87", + "@id": "#96bff4ee-228f-4a92-b1d1-e4fc3c4656c5", "@type": "TestInstance", "name": "GitHub Actions workflow for testing IntGenomicsLab/lrsomatic", "resource": "repos/IntGenomicsLab/lrsomatic/actions/workflows/nf-test.yml", diff --git a/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf index a58dc77d..9b63cb13 100644 --- a/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf @@ -11,6 +11,7 @@ include { UTILS_NFSCHEMA_PLUGIN } from '../../nf-core/utils_nfschema_plugin' include { paramsSummaryMap } from 'plugin/nf-schema' include { samplesheetToList } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' include { completionEmail } from '../../nf-core/utils_nfcore_pipeline' include { completionSummary } from '../../nf-core/utils_nfcore_pipeline' include { imNotification } from '../../nf-core/utils_nfcore_pipeline' @@ -32,10 +33,13 @@ workflow PIPELINE_INITIALISATION { nextflow_cli_args // array: List of positional nextflow CLI args outdir // string: The output directory where the results will be saved input // string: Path to input samplesheet + help // boolean: Display help message and exit + help_full // boolean: Show the full help message + show_hidden // boolean: Show hidden parameters in the help message main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // // Print version and exit if required and dump pipeline parameters to JSON file @@ -50,10 +54,18 @@ workflow PIPELINE_INITIALISATION { // // Validate parameters and generate parameter summary to stdout // + command = "nextflow run ${workflow.manifest.name} -profile --input samplesheet.csv --outdir " + UTILS_NFSCHEMA_PLUGIN ( workflow, validate_params, - null + null, + help, + help_full, + show_hidden, + "", + "", + command ) // @@ -72,7 +84,7 @@ workflow PIPELINE_INITIALISATION { // Create channel from input file provided through params.input // - Channel + channel .fromList(samplesheetToList(params.input, "${projectDir}/assets/schema_input.json")) .map { meta, bam_tumor, bam_normal, method, sex, fiber, clair3_model, clairSTO_model, clairS_model -> def real_clair3_model = (clair3_model == null ) ? null : clair3_model diff --git a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml deleted file mode 100644 index f8476112..00000000 --- a/subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nextflow_pipeline: - - subworkflows/nf-core/utils_nextflow_pipeline/** diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf index bfd25876..2f30e9a4 100644 --- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf +++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf @@ -98,7 +98,7 @@ def workflowVersionToYAML() { // Get channel of software versions used in pipeline in YAML format // def softwareVersionsToYAML(ch_versions) { - return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(Channel.of(workflowVersionToYAML())) + return ch_versions.unique().map { version -> processVersionsFromYAML(version) }.unique().mix(channel.of(workflowVersionToYAML())) } // diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml b/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml deleted file mode 100644 index ac8523c9..00000000 --- a/subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -subworkflows/utils_nfcore_pipeline: - - subworkflows/nf-core/utils_nfcore_pipeline/** diff --git a/subworkflows/nf-core/utils_nfschema_plugin/main.nf b/subworkflows/nf-core/utils_nfschema_plugin/main.nf index 4994303e..ee4738c8 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/main.nf +++ b/subworkflows/nf-core/utils_nfschema_plugin/main.nf @@ -4,6 +4,7 @@ include { paramsSummaryLog } from 'plugin/nf-schema' include { validateParameters } from 'plugin/nf-schema' +include { paramsHelp } from 'plugin/nf-schema' workflow UTILS_NFSCHEMA_PLUGIN { @@ -15,29 +16,56 @@ workflow UTILS_NFSCHEMA_PLUGIN { // when this input is empty it will automatically use the configured schema or // "${projectDir}/nextflow_schema.json" as default. This input should not be empty // for meta pipelines + help // boolean: show help message + help_full // boolean: show full help message + show_hidden // boolean: show hidden parameters in help message + before_text // string: text to show before the help message and parameters summary + after_text // string: text to show after the help message and parameters summary + command // string: an example command of the pipeline main: + if(help || help_full) { + help_options = [ + beforeText: before_text, + afterText: after_text, + command: command, + showHidden: show_hidden, + fullHelp: help_full, + ] + if(parameters_schema) { + help_options << [parametersSchema: parameters_schema] + } + log.info paramsHelp( + help_options, + params.help instanceof String ? params.help : "", + ) + exit 0 + } + // // Print parameter summary to stdout. This will display the parameters // that differ from the default given in the JSON schema // + + summary_options = [:] if(parameters_schema) { - log.info paramsSummaryLog(input_workflow, parameters_schema:parameters_schema) - } else { - log.info paramsSummaryLog(input_workflow) + summary_options << [parametersSchema: parameters_schema] } + log.info before_text + log.info paramsSummaryLog(summary_options, input_workflow) + log.info after_text // // Validate the parameters using nextflow_schema.json or the schema // given via the validation.parametersSchema configuration option // if(validate_params) { + validateOptions = [:] if(parameters_schema) { - validateParameters(parameters_schema:parameters_schema) - } else { - validateParameters() + validateOptions << [parametersSchema: parameters_schema] } + validateParameters(validateOptions) } emit: diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test index 8fb30164..c977917a 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/main.nf.test @@ -25,6 +25,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -51,6 +57,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -77,6 +89,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -103,6 +121,12 @@ nextflow_workflow { input[0] = workflow input[1] = validate_params input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = false + input[4] = false + input[5] = false + input[6] = "" + input[7] = "" + input[8] = "" """ } } @@ -114,4 +138,36 @@ nextflow_workflow { ) } } + + test("Should create a help message") { + + when { + + params { + test_data = '' + outdir = null + } + + workflow { + """ + validate_params = true + input[0] = workflow + input[1] = validate_params + input[2] = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" + input[3] = true + input[4] = false + input[5] = false + input[6] = "Before" + input[7] = "After" + input[8] = "nextflow run test/test" + """ + } + } + + then { + assertAll( + { assert workflow.success } + ) + } + } } diff --git a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config index 09ef842a..8d8c7371 100644 --- a/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config +++ b/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow.config @@ -1,8 +1,8 @@ plugins { - id "nf-schema@2.4.2" + id "nf-schema@2.5.1" } validation { parametersSchema = "${projectDir}/subworkflows/nf-core/utils_nfschema_plugin/tests/nextflow_schema.json" monochromeLogs = true -} \ No newline at end of file +} diff --git a/tests/.nftignore b/tests/.nftignore index 2c22303c..9651e78a 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -1,9 +1,10 @@ .DS_Store -multiqc/multiqc_data/BETA-multiqc.parquet +multiqc/multiqc_data/multiqc.parquet multiqc/multiqc_data/multiqc.log multiqc/multiqc_data/multiqc_data.json multiqc/multiqc_data/multiqc_sources.txt multiqc/multiqc_data/multiqc_software_versions.txt +multiqc/multiqc_data/llms-full.txt multiqc/multiqc_plots/{svg,pdf,png}/*.{svg,pdf,png} multiqc/multiqc_report.html multiqc/multiqc_data/*.txt diff --git a/tests/default.nf.test b/tests/default.nf.test index 1d3a963a..d4daad19 100644 --- a/tests/default.nf.test +++ b/tests/default.nf.test @@ -20,8 +20,6 @@ nextflow_pipeline { assertAll( { assert workflow.success}, { assert snapshot( - // Number of successful tasks - workflow.trace.succeeded().size(), // pipeline versions.yml file for multiqc from which Nextflow version is removed because we test pipelines on multiple Nextflow versions removeNextflowVersion("$outputDir/pipeline_info/lrsomatic_software_mqc_versions.yml"), // All stable path name, with a relative path diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index dde7be33..ccd6e7a6 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -1,7 +1,6 @@ { "-profile test": { "content": [ - 82, { "BCFTOOLS_CONCAT": { "bcftools": 1.22 @@ -89,7 +88,6 @@ [ "multiqc", "multiqc/multiqc_data", - "multiqc/multiqc_data/BETA-multiqc.parquet", "multiqc/multiqc_data/llms-full.txt", "multiqc/multiqc_data/mosdepth-coverage-per-contig-single.txt", "multiqc/multiqc_data/mosdepth-cumcoverage-dist-id.txt", @@ -97,6 +95,7 @@ "multiqc/multiqc_data/mosdepth_cumcov_dist.txt", "multiqc/multiqc_data/mosdepth_perchrom.txt", "multiqc/multiqc_data/multiqc.log", + "multiqc/multiqc_data/multiqc.parquet", "multiqc/multiqc_data/multiqc_citations.txt", "multiqc/multiqc_data/multiqc_data.json", "multiqc/multiqc_data/multiqc_general_stats.txt", @@ -370,6 +369,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-27T15:31:19.623058622" + "timestamp": "2025-11-27T17:37:23.810503056" } } \ No newline at end of file