From dc306316fa233e5970a88e6c8bfd8e6b2aa33d22 Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Wed, 19 Nov 2025 11:46:53 +0100 Subject: [PATCH 01/20] Template update for nf-core/tools version 3.2.0 --- .github/CONTRIBUTING.md | 16 +++---- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 8 ++-- .github/workflows/branch.yml | 4 +- .github/workflows/ci.yml | 4 +- .github/workflows/download_pipeline.yml | 28 ++++++----- .github/workflows/fix-linting.yml | 4 +- .github/workflows/linting_comment.yml | 2 +- .nf-core.yml | 46 +++++++++---------- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 4 +- CITATIONS.md | 2 +- LICENSE | 2 +- README.md | 20 ++++---- assets/adaptivecard.json | 2 +- assets/email_template.html | 14 +++--- assets/email_template.txt | 8 ++-- assets/methods_description_template.yml | 8 ++-- assets/multiqc_config.yml | 6 +-- assets/schema_input.json | 4 +- assets/sendmail_template.txt | 6 +-- assets/slackreport.json | 2 +- conf/base.config | 2 +- conf/test.config | 6 +-- conf/test_full.config | 2 +- docs/README.md | 4 +- docs/output.md | 6 ++- docs/usage.md | 10 ++-- main.nf | 22 ++++----- modules.json | 6 +-- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 24 +++++----- nextflow.config | 32 ++++++------- nextflow_schema.json | 4 +- ro-crate-metadata.json | 32 ++++++------- .../main.nf | 2 +- workflows/{lr_somatic.nf => lrsomatic.nf} | 6 +-- 39 files changed, 183 insertions(+), 177 deletions(-) rename subworkflows/local/{utils_nfcore_lr_somatic_pipeline => utils_nfcore_lrsomatic_pipeline}/main.nf (99%) rename workflows/{lr_somatic.nf => lrsomatic.nf} (96%) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 720724b7..03608b2f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,9 +1,9 @@ -# `IntGenomicsLab/lr_somatic`: Contributing Guidelines +# `IntGenomicsLab/lrsomatic`: Contributing Guidelines Hi there! -Many thanks for taking an interest in improving IntGenomicsLab/lr_somatic. +Many thanks for taking an interest in improving IntGenomicsLab/lrsomatic. -We try to manage the required tasks for IntGenomicsLab/lr_somatic using GitHub issues, you probably came to this page when creating one. +We try to manage the required tasks for IntGenomicsLab/lrsomatic using GitHub issues, you probably came to this page when creating one. Please use the pre-filled template to save time. However, don't be put off by this template - other more general issues and suggestions are welcome! @@ -11,10 +11,10 @@ Contributions to the code are even more welcome ;) ## Contribution workflow -If you'd like to write some code for IntGenomicsLab/lr_somatic, the standard workflow is as follows: +If you'd like to write some code for IntGenomicsLab/lrsomatic, the standard workflow is as follows: -1. Check that there isn't already an issue about your idea in the [IntGenomicsLab/lr_somatic issues](https://github.com/IntGenomicsLab/lr_somatic/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this -2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [IntGenomicsLab/lr_somatic repository](https://github.com/IntGenomicsLab/lr_somatic) to your GitHub account +1. Check that there isn't already an issue about your idea in the [IntGenomicsLab/lrsomatic issues](https://github.com/IntGenomicsLab/lrsomatic/issues) to avoid duplicating work. If there isn't one already, please create one so that others know you're working on this +2. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the [IntGenomicsLab/lrsomatic repository](https://github.com/IntGenomicsLab/lrsomatic) to your GitHub account 3. Make the necessary changes / additions within your forked repository following [Pipeline conventions](#pipeline-contribution-conventions) 4. Use `nf-core pipelines schema build` and add any new parameters to the pipeline JSON schema (requires [nf-core tools](https://github.com/nf-core/tools) >= 1.10). 5. Submit a Pull Request against the `dev` branch and wait for the code to be reviewed and merged @@ -58,7 +58,7 @@ These tests are run both with the latest available version of `Nextflow` and als ## Pipeline contribution conventions -To make the `IntGenomicsLab/lr_somatic` code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. +To make the `IntGenomicsLab/lrsomatic` code and processing logic more understandable for new contributors and to ensure quality, we semi-standardise the way the code and other contributions are written. ### Adding a new step @@ -108,7 +108,7 @@ This repo includes a devcontainer configuration which will create a GitHub Codes To get started: -- Open the repo in [Codespaces](https://github.com/IntGenomicsLab/lr_somatic/codespaces) +- Open the repo in [Codespaces](https://github.com/IntGenomicsLab/lrsomatic/codespaces) - Tools installed - nf-core - Nextflow diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 1cd94f85..458770e1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -39,4 +39,4 @@ body: * Executor _(eg. slurm, local, awsbatch)_ * Container engine: _(e.g. Docker, Singularity, Conda, Podman, Shifter, Charliecloud, or Apptainer)_ * OS _(eg. CentOS Linux, macOS, Linux Mint)_ - * Version of IntGenomicsLab/lr_somatic _(eg. 1.1, 1.5, 1.8.2)_ + * Version of IntGenomicsLab/lrsomatic _(eg. 1.1, 1.5, 1.8.2)_ diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 8a49b9b9..0e27f761 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,5 +1,5 @@ name: Feature request -description: Suggest an idea for the IntGenomicsLab/lr_somatic pipeline +description: Suggest an idea for the IntGenomicsLab/lrsomatic pipeline labels: enhancement body: - type: textarea diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d23d77b4..6d5a41ed 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,21 +1,21 @@ ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/IntGenomicsLab/lr_somatic/tree/main/.github/CONTRIBUTING.md) +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/IntGenomicsLab/lrsomatic/tree/master/.github/CONTRIBUTING.md) - [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). diff --git a/.github/workflows/branch.yml b/.github/workflows/branch.yml index 6b774892..0e125373 100644 --- a/.github/workflows/branch.yml +++ b/.github/workflows/branch.yml @@ -13,9 +13,9 @@ jobs: steps: # PRs to the nf-core repo main/master branch are only ok if coming from the nf-core repo `dev` or any `patch` branches - name: Check PRs - if: github.repository == 'IntGenomicsLab/lr_somatic' + if: github.repository == 'IntGenomicsLab/lrsomatic' run: | - { [[ ${{github.event.pull_request.head.repo.full_name }} == IntGenomicsLab/lr_somatic ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] + { [[ ${{github.event.pull_request.head.repo.full_name }} == IntGenomicsLab/lrsomatic ]] && [[ $GITHUB_HEAD_REF == "dev" ]]; } || [[ $GITHUB_HEAD_REF == "patch" ]] # If the above check failed, post a comment on the PR explaining the failure # NOTE - this doesn't currently work if the PR is coming from a fork, due to limitations in GitHub actions secrets diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1ad5fc3a..05e97821 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: test: name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" # Only run on push if this is the nf-core dev branch (merged PRs) - if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'IntGenomicsLab/lr_somatic') }}" + if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'IntGenomicsLab/lrsomatic') }}" runs-on: ubuntu-latest strategy: matrix: @@ -46,6 +46,8 @@ jobs: steps: - name: Check out pipeline code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + with: + fetch-depth: 0 - name: Set up Nextflow uses: nf-core/setup-nextflow@v2 diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 13b51e2c..ab06316e 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -34,6 +34,17 @@ jobs: REPO_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPO_LOWERCASE }} REPOTITLE_LOWERCASE: ${{ steps.get_repo_properties.outputs.REPOTITLE_LOWERCASE }} REPO_BRANCH: ${{ steps.get_repo_properties.outputs.REPO_BRANCH }} + steps: + - name: Get the repository name and current branch + id: get_repo_properties + run: | + echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" + echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" + echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" + + download: + runs-on: ubuntu-latest + needs: configure steps: - name: Install Nextflow uses: nf-core/setup-nextflow@v2 @@ -56,21 +67,10 @@ jobs: python -m pip install --upgrade pip pip install git+https://github.com/nf-core/tools.git@dev - - name: Get the repository name and current branch set as environment variable - id: get_repo_properties - run: | - echo "REPO_LOWERCASE=${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT" - echo "REPOTITLE_LOWERCASE=$(basename ${GITHUB_REPOSITORY,,})" >> "$GITHUB_OUTPUT" - echo "REPO_BRANCH=${{ github.event.inputs.testbranch || 'dev' }}" >> "$GITHUB_OUTPUT" - - name: Make a cache directory for the container images run: | mkdir -p ./singularity_container_images - download: - runs-on: ubuntu-latest - needs: configure - steps: - name: Download the pipeline env: NXF_SINGULARITY_CACHEDIR: ./singularity_container_images @@ -87,6 +87,9 @@ jobs: - name: Inspect download run: tree ./${{ needs.configure.outputs.REPOTITLE_LOWERCASE }} + - name: Inspect container images + run: tree ./singularity_container_images | tee ./container_initial + - name: Count the downloaded number of container images id: count_initial run: | @@ -123,7 +126,8 @@ jobs: final_count=${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }} difference=$((final_count - initial_count)) echo "$difference additional container images were \n downloaded at runtime . The pipeline has no support for offline runs!" - tree ./singularity_container_images + tree ./singularity_container_images > ./container_afterwards + diff ./container_initial ./container_afterwards exit 1 else echo "The pipeline can be downloaded successfully!" diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml index 0075e577..42190fc1 100644 --- a/.github/workflows/fix-linting.yml +++ b/.github/workflows/fix-linting.yml @@ -9,7 +9,7 @@ jobs: if: > contains(github.event.comment.html_url, '/pull/') && contains(github.event.comment.body, '@nf-core-bot fix linting') && - github.repository == 'IntGenomicsLab/lr_somatic' + github.repository == 'IntGenomicsLab/lrsomatic' runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later @@ -86,4 +86,4 @@ jobs: issue-number: ${{ github.event.issue.number }} body: | @${{ github.actor }} I tried to fix the linting errors, but it didn't work. Please fix them manually. - See [CI log](https://github.com/IntGenomicsLab/lr_somatic/actions/runs/${{ github.run_id }}) for more details. + See [CI log](https://github.com/IntGenomicsLab/lrsomatic/actions/runs/${{ github.run_id }}) for more details. diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 0bed96d3..95b6b6af 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@80620a5d27ce0ae443b965134db88467fc607b43 # v7 + uses: dawidd6/action-download-artifact@20319c5641d495c8a52e688b7dc5fada6c3a9fbc # v8 with: workflow: linting.yml workflow_conclusion: completed diff --git a/.nf-core.yml b/.nf-core.yml index 80948bbf..71b40212 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -1,18 +1,24 @@ -repository_type: pipeline - -nf_core_version: 3.1.1 - lint: + files_exist: + - CODE_OF_CONDUCT.md + - assets/nf-core-lrsomatic_logo_light.png + - docs/images/nf-core-lrsomatic_logo_light.png + - docs/images/nf-core-lrsomatic_logo_dark.png + - .github/ISSUE_TEMPLATE/config.yml + - .github/workflows/awstest.yml + - .github/workflows/awsfulltest.yml files_unchanged: - CODE_OF_CONDUCT.md - - assets/nf-core-lr_somatic_logo_light.png - - docs/images/nf-core-lr_somatic_logo_light.png - - docs/images/nf-core-lr_somatic_logo_dark.png + - assets/nf-core-lrsomatic_logo_light.png + - docs/images/nf-core-lrsomatic_logo_light.png + - docs/images/nf-core-lrsomatic_logo_dark.png - .github/ISSUE_TEMPLATE/bug_report.yml - .github/CONTRIBUTING.md - .github/PULL_REQUEST_TEMPLATE.md - assets/email_template.txt - docs/README.md + multiqc_config: + - report_comment nextflow_config: - manifest.name - manifest.homePage @@ -20,25 +26,17 @@ lint: - validation.help.afterText - validation.summary.beforeText - validation.summary.afterText - multiqc_config: - - report_comment - files_exist: - - CODE_OF_CONDUCT.md - - assets/nf-core-lr_somatic_logo_light.png - - docs/images/nf-core-lr_somatic_logo_light.png - - docs/images/nf-core-lr_somatic_logo_dark.png - - .github/ISSUE_TEMPLATE/config.yml - - .github/workflows/awstest.yml - - .github/workflows/awsfulltest.yml - + schema_params: false +nf_core_version: 3.2.0 +repository_type: pipeline template: - org: IntGenomicsLab - name: lr_somatic - description: Workflow for somatic variant calling of long read data author: Jonas Demeulemeester - version: 1.0.0dev - force: true + description: Workflow for somatic variant calling of long read data + force: false + is_nfcore: false + name: lrsomatic + org: IntGenomicsLab outdir: . skip_features: - fastqc - is_nfcore: false + version: 1.0.0dev diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9e9f0e1c..1dec8650 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,7 +7,7 @@ repos: - prettier@3.2.5 - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "3.0.3" + rev: "3.1.2" hooks: - id: editorconfig-checker alias: ec diff --git a/CHANGELOG.md b/CHANGELOG.md index ee035dca..5b2733d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,11 @@ -# IntGenomicsLab/lr_somatic: Changelog +# IntGenomicsLab/lrsomatic: Changelog The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## v1.0.0dev - [date] -Initial release of IntGenomicsLab/lr_somatic, created with the [nf-core](https://nf-co.re/) template. +Initial release of IntGenomicsLab/lrsomatic, created with the [nf-core](https://nf-co.re/) template. ### `Added` diff --git a/CITATIONS.md b/CITATIONS.md index 08105ad6..33c9f5f1 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -1,4 +1,4 @@ -# IntGenomicsLab/lr_somatic: Citations +# IntGenomicsLab/lrsomatic: Citations ## [nf-core](https://pubmed.ncbi.nlm.nih.gov/32055031/) diff --git a/LICENSE b/LICENSE index 21de0ec6..27d3cdc5 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) The IntGenomicsLab/lr_somatic team +Copyright (c) The IntGenomicsLab/lrsomatic team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 3b4672ea..d65adb7e 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ -# IntGenomicsLab/lr_somatic +# IntGenomicsLab/lrsomatic -[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lr_somatic/actions/workflows/ci.yml/badge.svg)](https://github.com/IntGenomicsLab/lr_somatic/actions/workflows/ci.yml) -[![GitHub Actions Linting Status](https://github.com/IntGenomicsLab/lr_somatic/actions/workflows/linting.yml/badge.svg)](https://github.com/IntGenomicsLab/lr_somatic/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) +[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml) +[![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/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/) [![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/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) -[![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/lr_somatic) +[![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) ## Introduction -**IntGenomicsLab/lr_somatic** is a bioinformatics pipeline that ... +**IntGenomicsLab/lrsomatic** is a bioinformatics pipeline that ... ```bash -nextflow run IntGenomicsLab/lr_somatic \ +nextflow run IntGenomicsLab/lrsomatic \ -profile \ --input samplesheet.csv \ --outdir @@ -61,7 +61,7 @@ nextflow run IntGenomicsLab/lr_somatic \ ## Credits -IntGenomicsLab/lr_somatic was originally written by Jonas Demeulemeester. +IntGenomicsLab/lrsomatic was originally written by Jonas Demeulemeester. We thank the following people for their extensive assistance in the development of this pipeline: @@ -74,7 +74,9 @@ If you would like to contribute to this pipeline, please see the [contributing g ## Citations - + + + An extensive list of references for the tools used by the pipeline can be found in the [`CITATIONS.md`](CITATIONS.md) file. diff --git a/assets/adaptivecard.json b/assets/adaptivecard.json index 12604f03..a7f7c25d 100644 --- a/assets/adaptivecard.json +++ b/assets/adaptivecard.json @@ -17,7 +17,7 @@ "size": "Large", "weight": "Bolder", "color": "<% if (success) { %>Good<% } else { %>Attention<%} %>", - "text": "IntGenomicsLab/lr_somatic v${version} - ${runName}", + "text": "IntGenomicsLab/lrsomatic v${version} - ${runName}", "wrap": true }, { diff --git a/assets/email_template.html b/assets/email_template.html index 43e12a3f..f1b77923 100644 --- a/assets/email_template.html +++ b/assets/email_template.html @@ -4,21 +4,21 @@ - - IntGenomicsLab/lr_somatic Pipeline Report + + IntGenomicsLab/lrsomatic Pipeline Report
-

IntGenomicsLab/lr_somatic ${version}

+

IntGenomicsLab/lrsomatic ${version}

Run Name: $runName

<% if (!success){ out << """
-

IntGenomicsLab/lr_somatic execution completed unsuccessfully!

+

IntGenomicsLab/lrsomatic execution completed unsuccessfully!

The exit status of the task that caused the workflow execution to fail was: $exitStatus.

The full error message was:

${errorReport}
@@ -27,7 +27,7 @@

IntGenomicsLab/lr_somatic execution co } else { out << """
- IntGenomicsLab/lr_somatic execution completed successfully! + IntGenomicsLab/lrsomatic execution completed successfully!
""" } @@ -44,8 +44,8 @@

Pipeline Configuration:

-

IntGenomicsLab/lr_somatic

-

https://github.com/IntGenomicsLab/lr_somatic

+

IntGenomicsLab/lrsomatic

+

https://github.com/IntGenomicsLab/lrsomatic

diff --git a/assets/email_template.txt b/assets/email_template.txt index 95bc07e2..ceaf72dd 100644 --- a/assets/email_template.txt +++ b/assets/email_template.txt @@ -1,10 +1,10 @@ Run Name: $runName <% if (success){ - out << "## IntGenomicsLab/lr_somatic execution completed successfully! ##" + out << "## IntGenomicsLab/lrsomatic execution completed successfully! ##" } else { out << """#################################################### -## IntGenomicsLab/lr_somatic execution completed unsuccessfully! ## +## IntGenomicsLab/lrsomatic execution completed unsuccessfully! ## #################################################### The exit status of the task that caused the workflow execution to fail was: $exitStatus. The full error message was: @@ -27,5 +27,5 @@ Pipeline Configuration: <% out << summary.collect{ k,v -> " - $k: $v" }.join("\n") %> -- -IntGenomicsLab/lr_somatic -https://github.com/IntGenomicsLab/lr_somatic +IntGenomicsLab/lrsomatic +https://github.com/IntGenomicsLab/lrsomatic diff --git a/assets/methods_description_template.yml b/assets/methods_description_template.yml index 2ec82a50..fca23d8a 100644 --- a/assets/methods_description_template.yml +++ b/assets/methods_description_template.yml @@ -1,13 +1,13 @@ -id: "IntGenomicsLab-lr_somatic-methods-description" +id: "IntGenomicsLab-lrsomatic-methods-description" description: "Suggested text and references to use when describing pipeline usage within the methods section of a publication." -section_name: "IntGenomicsLab/lr_somatic Methods Description" -section_href: "https://github.com/IntGenomicsLab/lr_somatic" +section_name: "IntGenomicsLab/lrsomatic Methods Description" +section_href: "https://github.com/IntGenomicsLab/lrsomatic" plot_type: "html" ## TODO nf-core: Update the HTML below to your preferred methods description, e.g. add publication citation for this pipeline ## You inject any metadata in the Nextflow '${workflow}' object data: |

Methods

-

Data was processed using IntGenomicsLab/lr_somatic v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020), utilising reproducible software environments from the Bioconda (Grüning et al., 2018) and Biocontainers (da Veiga Leprevost et al., 2017) projects.

+

Data was processed using IntGenomicsLab/lrsomatic v${workflow.manifest.version} ${doi_text} of the nf-core collection of workflows (Ewels et al., 2020), utilising reproducible software environments from the Bioconda (Grüning et al., 2018) and Biocontainers (da Veiga Leprevost et al., 2017) projects.

The pipeline was executed with Nextflow v${workflow.nextflow.version} (Di Tommaso et al., 2017) with the following command:

${workflow.commandLine}

${tool_citations}

diff --git a/assets/multiqc_config.yml b/assets/multiqc_config.yml index d1ad8766..1a75540e 100644 --- a/assets/multiqc_config.yml +++ b/assets/multiqc_config.yml @@ -1,12 +1,12 @@ report_comment: > - This report has been generated by the IntGenomicsLab/lr_somatic + This report has been generated by the IntGenomicsLab/lrsomatic analysis pipeline. report_section_order: - "IntGenomicsLab-lr_somatic-methods-description": + "IntGenomicsLab-lrsomatic-methods-description": order: -1000 software_versions: order: -1001 - "IntGenomicsLab-lr_somatic-summary": + "IntGenomicsLab-lrsomatic-summary": order: -1002 export_plots: true diff --git a/assets/schema_input.json b/assets/schema_input.json index fda49a3f..fb9a2466 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,7 +1,7 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/IntGenomicsLab/lr_somatic/main/assets/schema_input.json", - "title": "IntGenomicsLab/lr_somatic pipeline - params.input schema", + "$id": "https://raw.githubusercontent.com/IntGenomicsLab/lrsomatic/master/assets/schema_input.json", + "title": "IntGenomicsLab/lrsomatic pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", "items": { diff --git a/assets/sendmail_template.txt b/assets/sendmail_template.txt index 831121de..2e397d1b 100644 --- a/assets/sendmail_template.txt +++ b/assets/sendmail_template.txt @@ -9,12 +9,12 @@ Content-Type: text/html; charset=utf-8 $email_html --nfcoremimeboundary -Content-Type: image/png;name="IntGenomicsLab-lr_somatic_logo.png" +Content-Type: image/png;name="IntGenomicsLab-lrsomatic_logo.png" Content-Transfer-Encoding: base64 Content-ID: -Content-Disposition: inline; filename="IntGenomicsLab-lr_somatic_logo_light.png" +Content-Disposition: inline; filename="IntGenomicsLab-lrsomatic_logo_light.png" -<% out << new File("$projectDir/assets/IntGenomicsLab-lr_somatic_logo_light.png"). +<% out << new File("$projectDir/assets/IntGenomicsLab-lrsomatic_logo_light.png"). bytes. encodeBase64(). toString(). diff --git a/assets/slackreport.json b/assets/slackreport.json index c7f8d912..e8425ad8 100644 --- a/assets/slackreport.json +++ b/assets/slackreport.json @@ -3,7 +3,7 @@ { "fallback": "Plain-text summary of the attachment.", "color": "<% if (success) { %>good<% } else { %>danger<%} %>", - "author_name": "IntGenomicsLab/lr_somatic ${version} - ${runName}", + "author_name": "IntGenomicsLab/lrsomatic ${version} - ${runName}", "author_icon": "https://www.nextflow.io/docs/latest/_static/favicon.ico", "text": "<% if (success) { %>Pipeline completed successfully!<% } else { %>Pipeline completed with errors<% } %>", "fields": [ diff --git a/conf/base.config b/conf/base.config index 8bc8e250..4a012faa 100644 --- a/conf/base.config +++ b/conf/base.config @@ -1,6 +1,6 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IntGenomicsLab/lr_somatic Nextflow base config file + IntGenomicsLab/lrsomatic Nextflow base config file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A 'blank slate' config file, appropriate for general use on most high performance compute environments. Assumes that all software is installed and available on diff --git a/conf/test.config b/conf/test.config index ec9b4d95..117abf0c 100644 --- a/conf/test.config +++ b/conf/test.config @@ -5,7 +5,7 @@ Defines input files and everything required to run a fast and simple pipeline test. Use as follows: - nextflow run IntGenomicsLab/lr_somatic -profile test, --outdir + nextflow run IntGenomicsLab/lrsomatic -profile test, --outdir ---------------------------------------------------------------------------------------- */ @@ -25,8 +25,6 @@ params { // Input data // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets // 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_test_illumina_amplicon.csv' - - // Genome references + input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv'// Genome references genome = 'R64-1-1' } diff --git a/conf/test_full.config b/conf/test_full.config index 67045bb5..bc82ecba 100644 --- a/conf/test_full.config +++ b/conf/test_full.config @@ -5,7 +5,7 @@ Defines input files and everything required to run a full size pipeline test. Use as follows: - nextflow run IntGenomicsLab/lr_somatic -profile test_full, --outdir + nextflow run IntGenomicsLab/lrsomatic -profile test_full, --outdir ---------------------------------------------------------------------------------------- */ diff --git a/docs/README.md b/docs/README.md index 4d1ead62..14889bd3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ -# IntGenomicsLab/lr_somatic: Documentation +# IntGenomicsLab/lrsomatic: Documentation -The IntGenomicsLab/lr_somatic documentation is split into the following pages: +The IntGenomicsLab/lrsomatic documentation is split into the following pages: - [Usage](usage.md) - An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. diff --git a/docs/output.md b/docs/output.md index fc35fed4..b3f2ed82 100644 --- a/docs/output.md +++ b/docs/output.md @@ -1,4 +1,4 @@ -# IntGenomicsLab/lr_somatic: Output +# IntGenomicsLab/lrsomatic: Output ## Introduction @@ -29,7 +29,9 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. -Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see .### Pipeline information +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . + +### Pipeline information
Output files diff --git a/docs/usage.md b/docs/usage.md index 3881d3c1..e0528582 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -1,4 +1,4 @@ -# IntGenomicsLab/lr_somatic: Usage +# IntGenomicsLab/lrsomatic: Usage > _Documentation of pipeline parameters is generated automatically from the pipeline schema and can no longer be found in markdown files._ @@ -55,7 +55,7 @@ An [example samplesheet](../assets/samplesheet.csv) has been provided with the p The typical command for running the pipeline is as follows: ```bash -nextflow run IntGenomicsLab/lr_somatic --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker +nextflow run IntGenomicsLab/lrsomatic --input ./samplesheet.csv --outdir ./results --genome GRCh37 -profile docker ``` This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. @@ -79,7 +79,7 @@ Pipeline settings can be provided in a `yaml` or `json` file via `-params-file < The above pipeline run specified with a params file in yaml format: ```bash -nextflow run IntGenomicsLab/lr_somatic -profile docker -params-file params.yaml +nextflow run IntGenomicsLab/lrsomatic -profile docker -params-file params.yaml ``` with: @@ -98,14 +98,14 @@ You can also generate such `YAML`/`JSON` files via [nf-core/launch](https://nf-c When you run the above command, Nextflow automatically pulls the pipeline code from GitHub and stores it as a cached version. When running the pipeline after this, it will always use the cached version if available - even if the pipeline has been updated since. To make sure that you're running the latest version of the pipeline, make sure that you regularly update the cached version of the pipeline: ```bash -nextflow pull IntGenomicsLab/lr_somatic +nextflow pull IntGenomicsLab/lrsomatic ``` ### Reproducibility It is a good idea to specify the pipeline version when running the pipeline on your data. This ensures that a specific version of the pipeline code and software are used when you run your pipeline. If you keep using the same tag, you'll be running the same version of the pipeline, even if there have been changes to the code since. -First, go to the [IntGenomicsLab/lr_somatic releases page](https://github.com/IntGenomicsLab/lr_somatic/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. +First, go to the [IntGenomicsLab/lrsomatic releases page](https://github.com/IntGenomicsLab/lrsomatic/releases) and find the latest pipeline version - numeric only (eg. `1.3.1`). Then specify this when running the pipeline with `-r` (one hyphen) - eg. `-r 1.3.1`. Of course, you can switch to another version by changing the number after the `-r` flag. This version number will be logged in reports when you run the pipeline, so that you'll know what you used when you look back in the future. For example, at the bottom of the MultiQC reports. diff --git a/main.nf b/main.nf index 502dad5c..21003825 100644 --- a/main.nf +++ b/main.nf @@ -1,9 +1,9 @@ #!/usr/bin/env nextflow /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IntGenomicsLab/lr_somatic + IntGenomicsLab/lrsomatic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Github : https://github.com/IntGenomicsLab/lr_somatic + Github : https://github.com/IntGenomicsLab/lrsomatic ---------------------------------------------------------------------------------------- */ @@ -13,10 +13,10 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -include { LR_SOMATIC } from './workflows/lr_somatic' -include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_lr_somatic_pipeline' -include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_lr_somatic_pipeline' -include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_lr_somatic_pipeline' +include { LRSOMATIC } from './workflows/lrsomatic' +include { PIPELINE_INITIALISATION } from './subworkflows/local/utils_nfcore_lrsomatic_pipeline' +include { PIPELINE_COMPLETION } from './subworkflows/local/utils_nfcore_lrsomatic_pipeline' +include { getGenomeAttribute } from './subworkflows/local/utils_nfcore_lrsomatic_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -38,7 +38,7 @@ params.fasta = getGenomeAttribute('fasta') // // WORKFLOW: Run main analysis pipeline depending on type of input // -workflow INTGENOMICSLAB_LR_SOMATIC { +workflow INTGENOMICSLAB_LRSOMATIC { take: samplesheet // channel: samplesheet read in from --input @@ -48,11 +48,11 @@ workflow INTGENOMICSLAB_LR_SOMATIC { // // WORKFLOW: Run pipeline // - LR_SOMATIC ( + LRSOMATIC ( samplesheet ) emit: - multiqc_report = LR_SOMATIC.out.multiqc_report // channel: /path/to/multiqc_report.html + multiqc_report = LRSOMATIC.out.multiqc_report // channel: /path/to/multiqc_report.html } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -78,7 +78,7 @@ workflow { // // WORKFLOW: Run main workflow // - INTGENOMICSLAB_LR_SOMATIC ( + INTGENOMICSLAB_LRSOMATIC ( PIPELINE_INITIALISATION.out.samplesheet ) // @@ -91,7 +91,7 @@ workflow { params.outdir, params.monochrome_logs, params.hook_url, - INTGENOMICSLAB_LR_SOMATIC.out.multiqc_report + INTGENOMICSLAB_LRSOMATIC.out.multiqc_report ) } diff --git a/modules.json b/modules.json index 99f2f4e0..f194d41e 100644 --- a/modules.json +++ b/modules.json @@ -1,13 +1,13 @@ { - "name": "IntGenomicsLab/lr_somatic", - "homePage": "https://github.com/IntGenomicsLab/lr_somatic", + "name": "IntGenomicsLab/lrsomatic", + "homePage": "https://github.com/IntGenomicsLab/lrsomatic", "repos": { "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { "multiqc": { "branch": "master", - "git_sha": "cf17ca47590cc578dfb47db1c2a44ef86f89976d", + "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad", "installed_by": ["modules"] } } diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index 6f5b867b..a27122ce 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -2,4 +2,4 @@ channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.25.1 + - bioconda::multiqc=1.27 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index cc0643e1..58d9313c 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.25.1--pyhdfd78af_0' : - 'biocontainers/multiqc:1.25.1--pyhdfd78af_0' }" + 'https://depot.galaxyproject.org/singularity/multiqc:1.27--pyhdfd78af_0' : + 'biocontainers/multiqc:1.27--pyhdfd78af_0' }" 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 2fcbb5ff..7b7c1322 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,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:51:46.317523" + "timestamp": "2025-01-27T09:29:57.631982377" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:52:20.680978" + "timestamp": "2025-01-27T09:30:34.743726958" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,41f391dcedce7f93ca188f3a3ffa0916" + "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" ] ], "meta": { - "nf-test": "0.9.0", - "nextflow": "24.04.4" + "nf-test": "0.9.2", + "nextflow": "24.10.4" }, - "timestamp": "2024-10-02T17:52:09.185842" + "timestamp": "2025-01-27T09:30:21.44383553" } } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index bcf75c6f..3d9651f0 100644 --- a/nextflow.config +++ b/nextflow.config @@ -1,6 +1,6 @@ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - IntGenomicsLab/lr_somatic Nextflow config file + IntGenomicsLab/lrsomatic Nextflow config file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Default config options for all compute environments ---------------------------------------------------------------------------------------- @@ -167,9 +167,9 @@ profiles { // Load nf-core custom profiles from different Institutions includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" -// Load IntGenomicsLab/lr_somatic custom profiles from different institutions. +// Load IntGenomicsLab/lrsomatic custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs -// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/lr_somatic.config" : "/dev/null" +// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/lrsomatic.config" : "/dev/null" // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled @@ -195,14 +195,14 @@ env { } // Set bash options -process.shell = """\ -bash - -set -e # Exit if a tool returns a non-zero status/exit code -set -u # Treat unset variables and parameters as an error -set -o pipefail # Returns the status of the last command to exit with a non-zero status or zero if all successfully execute -set -C # No clobber - prevent output redirection from overwriting files. -""" +process.shell = [ + "bash", + "-C", // No clobber - prevent output redirection from overwriting files. + "-e", // Exit if a tool returns a non-zero status/exit code + "-u", // Treat unset variables and parameters as an error + "-o", // Returns the status of the last command to exit.. + "pipefail" // ..with a non-zero status or zero if all successfully execute +] // Disable process selector warnings by default. Use debug profile to enable warnings. nextflow.enable.configProcessNamesValidation = false @@ -225,7 +225,7 @@ dag { } manifest { - name = 'IntGenomicsLab/lr_somatic' + name = 'IntGenomicsLab/lrsomatic' author = """Jonas Demeulemeester""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead contributors = [ // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 @@ -238,10 +238,10 @@ manifest { orcid: '' ], ] - homePage = 'https://github.com/IntGenomicsLab/lr_somatic' + homePage = 'https://github.com/IntGenomicsLab/lrsomatic' description = """Workflow for somatic variant calling of long read data""" mainScript = 'main.nf' - defaultBranch = 'main' + defaultBranch = 'master' nextflowVersion = '!>=24.04.2' version = '1.0.0dev' doi = '' @@ -249,7 +249,7 @@ manifest { // Nextflow plugins plugins { - id 'nf-schema@2.1.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { @@ -257,7 +257,7 @@ validation { monochromeLogs = params.monochrome_logs help { enabled = true - command = "nextflow run IntGenomicsLab/lr_somatic -profile --input samplesheet.csv --outdir " + command = "nextflow run IntGenomicsLab/lrsomatic -profile --input samplesheet.csv --outdir " fullParameter = "help_full" showHiddenParameter = "show_hidden" } diff --git a/nextflow_schema.json b/nextflow_schema.json index a33030c5..1d3318a3 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,7 +1,7 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/IntGenomicsLab/lr_somatic/main/nextflow_schema.json", - "title": "IntGenomicsLab/lr_somatic pipeline parameters", + "$id": "https://raw.githubusercontent.com/IntGenomicsLab/lrsomatic/master/nextflow_schema.json", + "title": "IntGenomicsLab/lrsomatic pipeline parameters", "description": "Workflow for somatic variant calling of long read data", "type": "object", "$defs": { diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 792a7686..2a581778 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-02-04T09:18:13+00:00", - "description": "# IntGenomicsLab/lr_somatic\n\n[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lr_somatic/actions/workflows/ci.yml/badge.svg)](https://github.com/IntGenomicsLab/lr_somatic/actions/workflows/ci.yml)\n[![GitHub Actions Linting Status](https://github.com/IntGenomicsLab/lr_somatic/actions/workflows/linting.yml/badge.svg)](https://github.com/IntGenomicsLab/lr_somatic/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/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\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/lr_somatic)\n\n## Introduction\n\n**IntGenomicsLab/lr_somatic** is a bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\n\n```bash\nnextflow run IntGenomicsLab/lr_somatic \\\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 Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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\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-19T10:46:46+00:00", + "description": "# IntGenomicsLab/lrsomatic\n\n[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.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/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\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 bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\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/lrsomatic was originally written by Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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" @@ -86,17 +86,17 @@ "@id": ".prettierignore" } ], - "isBasedOn": "https://github.com/IntGenomicsLab/lr_somatic", + "isBasedOn": "https://github.com/IntGenomicsLab/lrsomatic", "license": "MIT", "mainEntity": { "@id": "main.nf" }, "mentions": [ { - "@id": "#a8b3165d-dbe4-4de1-8c6e-bf3699fba9b4" + "@id": "#2f44f760-b43e-4d7d-a433-9e0168809b65" } ], - "name": "IntGenomicsLab/lr_somatic" + "name": "IntGenomicsLab/lrsomatic" }, { "@id": "ro-crate-metadata.json", @@ -121,7 +121,7 @@ "ComputationalWorkflow" ], "dateCreated": "", - "dateModified": "2025-02-04T10:18:13Z", + "dateModified": "2025-11-19T11:46:46Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -131,7 +131,7 @@ "MIT" ], "name": [ - "IntGenomicsLab/lr_somatic" + "IntGenomicsLab/lrsomatic" ], "programmingLanguage": { "@id": "https://w3id.org/workflowhub/workflow-ro-crate#nextflow" @@ -140,11 +140,11 @@ "@id": "https://nf-co.re/" }, "url": [ - "https://github.com/IntGenomicsLab/lr_somatic", - "https://nf-co.re/IntGenomicsLab/lr_somatic/dev/" + "https://github.com/IntGenomicsLab/lrsomatic", + "https://nf-co.re/IntGenomicsLab/lrsomatic/dev/" ], "version": [ - "0.0.1dev" + "1.0.0dev" ] }, { @@ -160,23 +160,23 @@ "version": "!>=24.04.2" }, { - "@id": "#a8b3165d-dbe4-4de1-8c6e-bf3699fba9b4", + "@id": "#2f44f760-b43e-4d7d-a433-9e0168809b65", "@type": "TestSuite", "instance": [ { - "@id": "#50633232-76d9-47a1-a630-a13639384949" + "@id": "#38cd2023-c9c0-485d-8dc7-49258af762ab" } ], "mainEntity": { "@id": "main.nf" }, - "name": "Test suite for IntGenomicsLab/lr_somatic" + "name": "Test suite for IntGenomicsLab/lrsomatic" }, { - "@id": "#50633232-76d9-47a1-a630-a13639384949", + "@id": "#38cd2023-c9c0-485d-8dc7-49258af762ab", "@type": "TestInstance", - "name": "GitHub Actions workflow for testing IntGenomicsLab/lr_somatic", - "resource": "repos/IntGenomicsLab/lr_somatic/actions/workflows/ci.yml", + "name": "GitHub Actions workflow for testing IntGenomicsLab/lrsomatic", + "resource": "repos/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml", "runsOn": { "@id": "https://w3id.org/ro/terms/test#GithubService" }, diff --git a/subworkflows/local/utils_nfcore_lr_somatic_pipeline/main.nf b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf similarity index 99% rename from subworkflows/local/utils_nfcore_lr_somatic_pipeline/main.nf rename to subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf index d366b8f6..0b29b1cd 100644 --- a/subworkflows/local/utils_nfcore_lr_somatic_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf @@ -1,5 +1,5 @@ // -// Subworkflow with functionality specific to the IntGenomicsLab/lr_somatic pipeline +// Subworkflow with functionality specific to the IntGenomicsLab/lrsomatic pipeline // /* diff --git a/workflows/lr_somatic.nf b/workflows/lrsomatic.nf similarity index 96% rename from workflows/lr_somatic.nf rename to workflows/lrsomatic.nf index 922fbf25..f92e50c0 100644 --- a/workflows/lr_somatic.nf +++ b/workflows/lrsomatic.nf @@ -7,7 +7,7 @@ include { MULTIQC } from '../modules/nf-core/multiqc/main' include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' -include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_lr_somatic_pipeline' +include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_lrsomatic_pipeline' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -15,7 +15,7 @@ include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_lr_s ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -workflow LR_SOMATIC { +workflow LRSOMATIC { take: ch_samplesheet // channel: samplesheet read in from --input @@ -30,7 +30,7 @@ workflow LR_SOMATIC { softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", - name: 'lr_somatic_software_' + 'mqc_' + 'versions.yml', + name: 'lrsomatic_software_' + 'mqc_' + 'versions.yml', sort: true, newLine: true ).set { ch_collated_versions } From 28ffe69e8f094db64651991d3242cda98ddad318 Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Wed, 19 Nov 2025 12:00:05 +0100 Subject: [PATCH 02/20] Template update for nf-core/tools version 3.2.0 --- ro-crate-metadata.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 2a581778..b28e5186 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,7 +22,7 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-11-19T10:46:46+00:00", + "datePublished": "2025-11-19T11:00:03+00:00", "description": "# IntGenomicsLab/lrsomatic\n\n[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.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/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\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 bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\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/lrsomatic was originally written by Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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": [ { @@ -93,7 +93,7 @@ }, "mentions": [ { - "@id": "#2f44f760-b43e-4d7d-a433-9e0168809b65" + "@id": "#78cffc0e-19b3-4de4-b59f-d666870311de" } ], "name": "IntGenomicsLab/lrsomatic" @@ -121,7 +121,7 @@ "ComputationalWorkflow" ], "dateCreated": "", - "dateModified": "2025-11-19T11:46:46Z", + "dateModified": "2025-11-19T12:00:03Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -160,11 +160,11 @@ "version": "!>=24.04.2" }, { - "@id": "#2f44f760-b43e-4d7d-a433-9e0168809b65", + "@id": "#78cffc0e-19b3-4de4-b59f-d666870311de", "@type": "TestSuite", "instance": [ { - "@id": "#38cd2023-c9c0-485d-8dc7-49258af762ab" + "@id": "#4c70ccad-3a80-45df-9714-d7851e441e59" } ], "mainEntity": { @@ -173,7 +173,7 @@ "name": "Test suite for IntGenomicsLab/lrsomatic" }, { - "@id": "#38cd2023-c9c0-485d-8dc7-49258af762ab", + "@id": "#4c70ccad-3a80-45df-9714-d7851e441e59", "@type": "TestInstance", "name": "GitHub Actions workflow for testing IntGenomicsLab/lrsomatic", "resource": "repos/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml", From 09e76f5b500d9aa1e382592a5e1b1c4bd94f7a7c Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Wed, 19 Nov 2025 12:00:55 +0100 Subject: [PATCH 03/20] Template update for nf-core/tools version 3.2.0 --- ro-crate-metadata.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index b28e5186..666b78c7 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,7 +22,7 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-11-19T11:00:03+00:00", + "datePublished": "2025-11-19T11:00:53+00:00", "description": "# IntGenomicsLab/lrsomatic\n\n[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.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/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\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 bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\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/lrsomatic was originally written by Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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": [ { @@ -93,7 +93,7 @@ }, "mentions": [ { - "@id": "#78cffc0e-19b3-4de4-b59f-d666870311de" + "@id": "#ca2cacc1-0011-4c13-ac4d-341313a5533b" } ], "name": "IntGenomicsLab/lrsomatic" @@ -121,7 +121,7 @@ "ComputationalWorkflow" ], "dateCreated": "", - "dateModified": "2025-11-19T12:00:03Z", + "dateModified": "2025-11-19T12:00:53Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -160,11 +160,11 @@ "version": "!>=24.04.2" }, { - "@id": "#78cffc0e-19b3-4de4-b59f-d666870311de", + "@id": "#ca2cacc1-0011-4c13-ac4d-341313a5533b", "@type": "TestSuite", "instance": [ { - "@id": "#4c70ccad-3a80-45df-9714-d7851e441e59" + "@id": "#5fdb974f-cdce-4e2f-a2cd-cefba401b75b" } ], "mainEntity": { @@ -173,7 +173,7 @@ "name": "Test suite for IntGenomicsLab/lrsomatic" }, { - "@id": "#4c70ccad-3a80-45df-9714-d7851e441e59", + "@id": "#5fdb974f-cdce-4e2f-a2cd-cefba401b75b", "@type": "TestInstance", "name": "GitHub Actions workflow for testing IntGenomicsLab/lrsomatic", "resource": "repos/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml", From b57b036f1efe1a06e7692e05ff2b79cea93ac404 Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Wed, 19 Nov 2025 14:20:19 +0100 Subject: [PATCH 04/20] Template update for nf-core/tools version 3.4.1 --- .devcontainer/devcontainer.json | 28 ++-- .devcontainer/setup.sh | 13 ++ .editorconfig | 37 ----- .github/CONTRIBUTING.md | 2 +- .github/actions/get-shards/action.yml | 69 +++++++++ .github/actions/nf-test/action.yml | 111 ++++++++++++++ .github/workflows/ci.yml | 87 ----------- .github/workflows/clean-up.yml | 2 +- .github/workflows/download_pipeline.yml | 22 +-- .../{fix-linting.yml => fix_linting.yml} | 16 +- .github/workflows/linting.yml | 21 ++- .github/workflows/linting_comment.yml | 4 +- .github/workflows/nf-test.yml | 141 ++++++++++++++++++ ...mment.yml => template-version-comment.yml} | 4 +- .gitpod.yml | 10 -- .nf-core.yml | 2 +- .pre-commit-config.yaml | 26 +++- .prettierignore | 1 + .prettierrc.yml | 5 + README.md | 8 +- assets/schema_input.json | 4 +- conf/base.config | 6 +- docs/usage.md | 2 +- main.nf | 5 +- modules.json | 8 +- modules/nf-core/multiqc/environment.yml | 4 +- modules/nf-core/multiqc/main.nf | 4 +- modules/nf-core/multiqc/meta.yml | 110 ++++++++------ .../nf-core/multiqc/tests/main.nf.test.snap | 18 +-- modules/nf-core/multiqc/tests/tags.yml | 2 - nextflow.config | 57 +++---- nextflow_schema.json | 12 ++ nf-test.config | 24 +++ ro-crate-metadata.json | 18 +-- .../utils_nfcore_lrsomatic_pipeline/main.nf | 15 +- .../utils_nextflow_pipeline/tests/tags.yml | 2 - .../utils_nfcore_pipeline/tests/tags.yml | 2 - .../nf-core/utils_nfschema_plugin/main.nf | 40 ++++- .../utils_nfschema_plugin/tests/main.nf.test | 56 +++++++ .../tests/nextflow.config | 4 +- tests/.nftignore | 10 ++ tests/default.nf.test | 33 ++++ tests/nextflow.config | 14 ++ 43 files changed, 744 insertions(+), 315 deletions(-) create mode 100755 .devcontainer/setup.sh delete mode 100644 .editorconfig create mode 100644 .github/actions/get-shards/action.yml create mode 100644 .github/actions/nf-test/action.yml delete mode 100644 .github/workflows/ci.yml rename .github/workflows/{fix-linting.yml => fix_linting.yml} (80%) create mode 100644 .github/workflows/nf-test.yml rename .github/workflows/{template_version_comment.yml => template-version-comment.yml} (91%) delete mode 100644 .gitpod.yml delete mode 100644 modules/nf-core/multiqc/tests/tags.yml create mode 100644 nf-test.config delete mode 100644 subworkflows/nf-core/utils_nextflow_pipeline/tests/tags.yml delete mode 100644 subworkflows/nf-core/utils_nfcore_pipeline/tests/tags.yml create mode 100644 tests/.nftignore create mode 100644 tests/default.nf.test create mode 100644 tests/nextflow.config 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/.editorconfig b/.editorconfig deleted file mode 100644 index 6d9b74cc..00000000 --- a/.editorconfig +++ /dev/null @@ -1,37 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -indent_size = 4 -indent_style = space - -[*.{md,yml,yaml,html,css,scss,js}] -indent_size = 2 - -# These files are edited and tested upstream in nf-core/modules -[/modules/nf-core/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset -[/subworkflows/nf-core/**] -charset = unset -end_of_line = unset -insert_final_newline = unset -trim_trailing_whitespace = unset -indent_style = unset - -[/assets/email*] -indent_size = unset - -# ignore python and markdown -[*.{py,md}] -indent_style = unset - -# ignore ro-crate metadata files -[**/ro-crate-metadata.json] -insert_final_newline = unset diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 03608b2f..cefff7d3 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -71,7 +71,7 @@ If you wish to contribute a new step, please use the following coding standards: 5. Add any new parameters to `nextflow_schema.json` with help text (via the `nf-core pipelines schema build` tool). 6. Add sanity checks and validation for all relevant parameters. 7. Perform local tests to validate that the new code works as expected. -8. If applicable, add a new test command in `.github/workflow/ci.yml`. +8. If applicable, add a new test in the `tests` directory. 9. Update MultiQC config `assets/multiqc_config.yml` so relevant suffixes, file name clean up and module plots are in the appropriate order. If applicable, add a [MultiQC](https://https://multiqc.info/) module. 10. Add a description of the output files and if relevant any appropriate images from the MultiQC report to `docs/output.md`. diff --git a/.github/actions/get-shards/action.yml b/.github/actions/get-shards/action.yml new file mode 100644 index 00000000..34085279 --- /dev/null +++ b/.github/actions/get-shards/action.yml @@ -0,0 +1,69 @@ +name: "Get number of shards" +description: "Get the number of nf-test shards for the current CI job" +inputs: + max_shards: + description: "Maximum number of shards allowed" + required: true + paths: + description: "Component paths to test" + required: false + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +outputs: + shard: + description: "Array of shard numbers" + value: ${{ steps.shards.outputs.shard }} + total_shards: + description: "Total number of shards" + value: ${{ steps.shards.outputs.total_shards }} +runs: + using: "composite" + steps: + - name: Install nf-test + uses: nf-core/setup-nf-test@v1 + with: + version: ${{ env.NFT_VER }} + - name: Get number of shards + id: shards + shell: bash + run: | + # Run nf-test with dynamic parameter + nftest_output=$(nf-test test \ + --profile +docker \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --dry-run \ + --ci \ + --changed-since HEAD^) || { + echo "nf-test command failed with exit code $?" + echo "Full output: $nftest_output" + exit 1 + } + echo "nf-test dry-run output: $nftest_output" + + # Default values for shard and total_shards + shard="[]" + total_shards=0 + + # Check if there are related tests + if echo "$nftest_output" | grep -q 'No tests to execute'; then + echo "No related tests found." + else + # Extract the number of related tests + number_of_shards=$(echo "$nftest_output" | sed -n 's|.*Executed \([0-9]*\) tests.*|\1|p') + if [[ -n "$number_of_shards" && "$number_of_shards" -gt 0 ]]; then + shards_to_run=$(( $number_of_shards < ${{ inputs.max_shards }} ? $number_of_shards : ${{ inputs.max_shards }} )) + shard=$(seq 1 "$shards_to_run" | jq -R . | jq -c -s .) + total_shards="$shards_to_run" + else + echo "Unexpected output format. Falling back to default values." + fi + fi + + # Write to GitHub Actions outputs + echo "shard=$shard" >> $GITHUB_OUTPUT + echo "total_shards=$total_shards" >> $GITHUB_OUTPUT + + # Debugging output + echo "Final shard array: $shard" + echo "Total number of shards: $total_shards" diff --git a/.github/actions/nf-test/action.yml b/.github/actions/nf-test/action.yml new file mode 100644 index 00000000..3b9724c7 --- /dev/null +++ b/.github/actions/nf-test/action.yml @@ -0,0 +1,111 @@ +name: "nf-test Action" +description: "Runs nf-test with common setup steps" +inputs: + profile: + description: "Profile to use" + required: true + shard: + description: "Shard number for this CI job" + required: true + total_shards: + description: "Total number of test shards(NOT the total number of matrix jobs)" + required: true + paths: + description: "Test paths" + required: true + tags: + description: "Tags to pass as argument for nf-test --tag parameter" + required: false +runs: + using: "composite" + steps: + - name: Setup Nextflow + uses: nf-core/setup-nextflow@v2 + with: + version: "${{ env.NXF_VERSION }}" + + - name: Set up Python + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 + with: + python-version: "3.14" + + - name: Install nf-test + uses: nf-core/setup-nf-test@v1 + with: + version: "${{ env.NFT_VER }}" + install-pdiff: true + + - name: Setup apptainer + if: contains(inputs.profile, 'singularity') + uses: eWaterCycle/setup-apptainer@main + + - name: Set up Singularity + if: contains(inputs.profile, 'singularity') + shell: bash + run: | + mkdir -p $NXF_SINGULARITY_CACHEDIR + mkdir -p $NXF_SINGULARITY_LIBRARYDIR + + - name: Conda setup + if: contains(inputs.profile, 'conda') + uses: conda-incubator/setup-miniconda@505e6394dae86d6a5c7fbb6e3fb8938e3e863830 # v3 + with: + auto-update-conda: true + conda-solver: libmamba + channels: conda-forge + channel-priority: strict + conda-remove-defaults: true + + - name: Run nf-test + shell: bash + env: + NFT_WORKDIR: ${{ env.NFT_WORKDIR }} + run: | + nf-test test \ + --profile=+${{ inputs.profile }} \ + $(if [ -n "${{ inputs.tags }}" ]; then echo "--tag ${{ inputs.tags }}"; fi) \ + --ci \ + --changed-since HEAD^ \ + --verbose \ + --tap=test.tap \ + --shard ${{ inputs.shard }}/${{ inputs.total_shards }} + + # Save the absolute path of the test.tap file to the output + echo "tap_file_path=$(realpath test.tap)" >> $GITHUB_OUTPUT + + - name: Generate test summary + if: always() + shell: bash + run: | + # Add header if it doesn't exist (using a token file to track this) + if [ ! -f ".summary_header" ]; then + echo "# 🚀 nf-test results" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Status | Test Name | Profile | Shard |" >> $GITHUB_STEP_SUMMARY + echo "|:------:|-----------|---------|-------|" >> $GITHUB_STEP_SUMMARY + touch .summary_header + fi + + if [ -f test.tap ]; then + while IFS= read -r line; do + if [[ $line =~ ^ok ]]; then + test_name="${line#ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ✅ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + elif [[ $line =~ ^not\ ok ]]; then + test_name="${line#not ok }" + # Remove the test number from the beginning + test_name="${test_name#* }" + echo "| ❌ | ${test_name} | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + done < test.tap + else + echo "| ⚠️ | No test results found | ${{ inputs.profile }} | ${{ inputs.shard }}/${{ inputs.total_shards }} |" >> $GITHUB_STEP_SUMMARY + fi + + - name: Clean up + if: always() + shell: bash + run: | + sudo rm -rf /home/ubuntu/tests/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 05e97821..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,87 +0,0 @@ -name: nf-core CI -# This workflow runs the pipeline with the minimal test dataset to check that it completes without any syntax errors -on: - push: - branches: - - dev - pull_request: - release: - types: [published] - workflow_dispatch: - -env: - NXF_ANSI_LOG: false - NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity - NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity - -concurrency: - group: "${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}" - cancel-in-progress: true - -jobs: - test: - name: "Run pipeline with test data (${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }})" - # Only run on push if this is the nf-core dev branch (merged PRs) - if: "${{ github.event_name != 'push' || (github.event_name == 'push' && github.repository == 'IntGenomicsLab/lrsomatic') }}" - runs-on: ubuntu-latest - strategy: - matrix: - NXF_VER: - - "24.04.2" - - "latest-everything" - profile: - - "conda" - - "docker" - - "singularity" - test_name: - - "test" - isMaster: - - ${{ github.base_ref == 'master' }} - # Exclude conda and singularity on dev - exclude: - - isMaster: false - profile: "conda" - - isMaster: false - profile: "singularity" - steps: - - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - with: - fetch-depth: 0 - - - name: Set up Nextflow - uses: nf-core/setup-nextflow@v2 - with: - version: "${{ matrix.NXF_VER }}" - - - name: Set up Apptainer - if: matrix.profile == 'singularity' - uses: eWaterCycle/setup-apptainer@main - - - name: Set up Singularity - if: matrix.profile == 'singularity' - run: | - mkdir -p $NXF_SINGULARITY_CACHEDIR - mkdir -p $NXF_SINGULARITY_LIBRARYDIR - - - name: Set up Miniconda - if: matrix.profile == 'conda' - uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3 - with: - miniconda-version: "latest" - auto-update-conda: true - conda-solver: libmamba - channels: conda-forge,bioconda - - - name: Set up Conda - if: matrix.profile == 'conda' - run: | - echo $(realpath $CONDA)/condabin >> $GITHUB_PATH - echo $(realpath python) >> $GITHUB_PATH - - - name: Clean up Disk space - uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - - name: "Run pipeline with test data ${{ matrix.NXF_VER }} | ${{ matrix.test_name }} | ${{ matrix.profile }}" - run: | - nextflow run ${GITHUB_WORKSPACE} -profile ${{ matrix.test_name }},${{ matrix.profile }} --outdir ./results diff --git a/.github/workflows/clean-up.yml b/.github/workflows/clean-up.yml index 0b6b1f27..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@28ca1036281a5e5922ead5184a1bbf96e5fc984e # 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 ab06316e..6d94bcbf 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -12,14 +12,6 @@ on: required: true default: "dev" pull_request: - types: - - opened - - edited - - synchronize - branches: - - main - - master - pull_request_target: branches: - main - master @@ -52,9 +44,9 @@ jobs: - name: Disk space cleanup uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1 - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.12" + python-version: "3.14" architecture: "x64" - name: Setup Apptainer @@ -65,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: | @@ -120,6 +112,7 @@ jobs: echo "IMAGE_COUNT_AFTER=$image_count" >> "$GITHUB_OUTPUT" - name: Compare container image counts + id: count_comparison run: | if [ "${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }}" -ne "${{ steps.count_afterwards.outputs.IMAGE_COUNT_AFTER }}" ]; then initial_count=${{ steps.count_initial.outputs.IMAGE_COUNT_INITIAL }} @@ -132,3 +125,10 @@ jobs: else echo "The pipeline can be downloaded successfully!" fi + + - name: Upload Nextflow logfile for debugging purposes + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: nextflow_logfile.txt + path: .nextflow.log* + include-hidden-files: true diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix_linting.yml similarity index 80% rename from .github/workflows/fix-linting.yml rename to .github/workflows/fix_linting.yml index 42190fc1..dd821a9a 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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 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@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.12" + 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/linting.yml b/.github/workflows/linting.yml index dbd52d5a..30e66026 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -3,9 +3,6 @@ name: nf-core linting # It runs the `nf-core pipelines lint` and markdown lint tests to ensure # that the code meets the nf-core guidelines. on: - push: - branches: - - dev pull_request: release: types: [published] @@ -14,12 +11,12 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - - name: Set up Python 3.12 - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - name: Set up Python 3.14 + uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.12" + python-version: "3.14" - name: Install pre-commit run: pip install pre-commit @@ -31,18 +28,18 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Install Nextflow uses: nf-core/setup-nextflow@v2 - - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5 + - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 with: - python-version: "3.12" + python-version: "3.14" architecture: "x64" - name: read .nf-core.yml - uses: pietrobolcato/action-read-yaml@1.1.0 + uses: pietrobolcato/action-read-yaml@9f13718d61111b69f30ab4ac683e67a56d254e1d # 1.1.0 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml @@ -74,7 +71,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: linting-logs path: | diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml index 95b6b6af..e6e9bc26 100644 --- a/.github/workflows/linting_comment.yml +++ b/.github/workflows/linting_comment.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Download lint results - uses: dawidd6/action-download-artifact@20319c5641d495c8a52e688b7dc5fada6c3a9fbc # v8 + uses: dawidd6/action-download-artifact@ac66b43f0e6a346234dd65d4d0c8fbb31cb316e5 # v11 with: workflow: linting.yml workflow_conclusion: completed @@ -21,7 +21,7 @@ jobs: run: echo "pr_number=$(cat linting-logs/PR_number.txt)" >> $GITHUB_OUTPUT - name: Post PR comment - uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2 + uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} number: ${{ steps.pr_number.outputs.pr_number }} diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml new file mode 100644 index 00000000..c7448f3e --- /dev/null +++ b/.github/workflows/nf-test.yml @@ -0,0 +1,141 @@ +name: Run nf-test +on: + pull_request: + paths-ignore: + - "docs/**" + - "**/meta.yml" + - "**/*.md" + - "**/*.png" + - "**/*.svg" + release: + types: [published] + workflow_dispatch: + +# Cancel if a newer run is started +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NFT_VER: "0.9.3" + NFT_WORKDIR: "~" + NXF_ANSI_LOG: false + NXF_SINGULARITY_CACHEDIR: ${{ github.workspace }}/.singularity + NXF_SINGULARITY_LIBRARYDIR: ${{ github.workspace }}/.singularity + +jobs: + nf-test-changes: + name: nf-test-changes + runs-on: # use GitHub runners + - "ubuntu-latest" + outputs: + shard: ${{ steps.set-shards.outputs.shard }} + total_shards: ${{ steps.set-shards.outputs.total_shards }} + steps: + - name: Clean Workspace # Purge the workspace in case it's running on a self-hosted runner + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + with: + fetch-depth: 0 + + - name: get number of shards + id: set-shards + uses: ./.github/actions/get-shards + env: + NFT_VER: ${{ env.NFT_VER }} + with: + max_shards: 7 + + - name: debug + run: | + echo ${{ steps.set-shards.outputs.shard }} + echo ${{ steps.set-shards.outputs.total_shards }} + + nf-test: + name: "${{ matrix.profile }} | ${{ matrix.NXF_VER }} | ${{ matrix.shard }}/${{ needs.nf-test-changes.outputs.total_shards }}" + needs: [nf-test-changes] + if: ${{ needs.nf-test-changes.outputs.total_shards != '0' }} + runs-on: # use GitHub runners + - "ubuntu-latest" + strategy: + fail-fast: false + matrix: + shard: ${{ fromJson(needs.nf-test-changes.outputs.shard) }} + profile: [conda, docker, singularity] + isMain: + - ${{ github.base_ref == 'master' || github.base_ref == 'main' }} + # Exclude conda and singularity on dev + exclude: + - isMain: false + profile: "conda" + - isMain: false + profile: "singularity" + NXF_VER: + - "25.04.0" + - "latest-everything" + env: + NXF_ANSI_LOG: false + TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} + + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + with: + fetch-depth: 0 + + - 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 }} + total_shards: ${{ env.TOTAL_SHARDS }} + + - name: Report test status + if: ${{ always() }} + run: | + if [[ "${{ steps.run_nf_test.outcome }}" == "failure" ]]; then + echo "::error::Test with ${{ matrix.NXF_VER }} failed" + # Add to workflow summary + echo "## ❌ Test failed: ${{ matrix.profile }} | ${{ matrix.NXF_VER }} | Shard ${{ matrix.shard }}/${{ env.TOTAL_SHARDS }}" >> $GITHUB_STEP_SUMMARY + if [[ "${{ matrix.NXF_VER }}" == "latest-everything" ]]; then + echo "::warning::Test with latest-everything failed but will not cause workflow failure. Please check if the error is expected or if it needs fixing." + fi + if [[ "${{ matrix.NXF_VER }}" != "latest-everything" ]]; then + exit 1 + fi + fi + + confirm-pass: + needs: [nf-test] + if: always() + runs-on: # use GitHub runners + - "ubuntu-latest" + steps: + - name: One or more tests failed (excluding latest-everything) + if: ${{ contains(needs.*.result, 'failure') }} + run: exit 1 + + - name: One or more tests cancelled + if: ${{ contains(needs.*.result, 'cancelled') }} + run: exit 1 + + - name: All tests ok + if: ${{ contains(needs.*.result, 'success') }} + run: exit 0 + + - name: debug-print + if: always() + run: | + echo "::group::DEBUG: `needs` Contents" + echo "DEBUG: toJSON(needs) = ${{ toJSON(needs) }}" + echo "DEBUG: toJSON(needs.*.result) = ${{ toJSON(needs.*.result) }}" + echo "::endgroup::" diff --git a/.github/workflows/template_version_comment.yml b/.github/workflows/template-version-comment.yml similarity index 91% rename from .github/workflows/template_version_comment.yml rename to .github/workflows/template-version-comment.yml index 537529bc..c5988af9 100644 --- a/.github/workflows/template_version_comment.yml +++ b/.github/workflows/template-version-comment.yml @@ -9,12 +9,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 with: ref: ${{ github.event.pull_request.head.sha }} - name: Read template version from .nf-core.yml - uses: nichmor/minimal-read-yaml@v0.0.2 + uses: nichmor/minimal-read-yaml@1f7205277e25e156e1f63815781db80a6d490b8f # v0.0.2 id: read_yml with: config: ${{ github.workspace }}/.nf-core.yml 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 71b40212..359178c3 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -27,7 +27,7 @@ lint: - validation.summary.beforeText - validation.summary.afterText schema_params: false -nf_core_version: 3.2.0 +nf_core_version: 3.4.1 repository_type: pipeline template: author: Jonas Demeulemeester diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1dec8650..d06777a8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,10 +4,24 @@ repos: hooks: - id: prettier additional_dependencies: - - prettier@3.2.5 - - - repo: https://github.com/editorconfig-checker/editorconfig-checker.python - rev: "3.1.2" + - prettier@3.6.2 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 hooks: - - id: editorconfig-checker - alias: ec + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/nf-core/.*| + subworkflows/nf-core/.*| + .*\.snap$ + )$ + - id: end-of-file-fixer + exclude: | + (?x)^( + .*ro-crate-metadata.json$| + modules/nf-core/.*| + subworkflows/nf-core/.*| + .*\.snap$ + )$ diff --git a/.prettierignore b/.prettierignore index edd29f01..2255e3e3 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,4 +10,5 @@ testing/ testing* *.pyc bin/ +.nf-test/ ro-crate-metadata.json diff --git a/.prettierrc.yml b/.prettierrc.yml index c81f9a76..07dbd8bb 100644 --- a/.prettierrc.yml +++ b/.prettierrc.yml @@ -1 +1,6 @@ printWidth: 120 +tabWidth: 4 +overrides: + - files: "*.{md,yml,yaml,html,css,scss,js,cff}" + options: + tabWidth: 2 diff --git a/README.md b/README.md index d65adb7e..8e40e389 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ # IntGenomicsLab/lrsomatic -[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/IntGenomicsLab/lrsomatic) +[![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) [![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/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](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.4.1-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.4.1) [![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/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -21,7 +23,7 @@ --> + workflows use the "tube map" design for that. See https://nf-co.re/docs/guidelines/graphic_design/workflow_diagrams#examples for examples. --> 2. Present QC for raw reads ([`MultiQC`](http://multiqc.info/)) ## Usage diff --git a/assets/schema_input.json b/assets/schema_input.json index fb9a2466..04228241 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -17,14 +17,14 @@ "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" }, "fastq_2": { "type": "string", "format": "file-path", "exists": true, - "pattern": "^\\S+\\.f(ast)?q\\.gz$", + "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" } }, diff --git a/conf/base.config b/conf/base.config index 4a012faa..9cb82881 100644 --- a/conf/base.config +++ b/conf/base.config @@ -15,7 +15,7 @@ process { memory = { 6.GB * task.attempt } time = { 4.h * task.attempt } - errorStrategy = { task.exitStatus in ((130..145) + 104) ? 'retry' : 'finish' } + errorStrategy = { task.exitStatus in ((130..145) + 104 + 175) ? 'retry' : 'finish' } maxRetries = 1 maxErrors = '-1' @@ -59,4 +59,8 @@ process { errorStrategy = 'retry' maxRetries = 2 } + withLabel: process_gpu { + ext.use_gpu = { workflow.profile.contains('gpu') } + accelerator = { workflow.profile.contains('gpu') ? 1 : null } + } } diff --git a/docs/usage.md b/docs/usage.md index e0528582..190ad95f 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -147,7 +147,7 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `shifter` - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - `charliecloud` - - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) + - A generic configuration profile to be used with [Charliecloud](https://charliecloud.io/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `wave` diff --git a/main.nf b/main.nf index 21003825..14012f28 100644 --- a/main.nf +++ b/main.nf @@ -72,7 +72,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 f194d41e..9032f990 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "multiqc": { "branch": "master", - "git_sha": "f0719ae309075ae4a291533883847c3f7c441dad", + "git_sha": "e10b76ca0c66213581bec2833e30d31f239dec0b", "installed_by": ["modules"] } } @@ -16,17 +16,17 @@ "nf-core": { "utils_nextflow_pipeline": { "branch": "master", - "git_sha": "c2b22d85f30a706a3073387f30380704fcae013b", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "51ae5406a030d4da1e49e4dab49756844fdd6c7a", + "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { "branch": "master", - "git_sha": "2fd2cd6d0e7b273747f32e465fdc6bcc3ae0814e", + "git_sha": "4b406a74dc0449c0401ed87d5bfff4252fd277fd", "installed_by": ["subworkflows"] } } diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index a27122ce..dd513cbd 100644 --- a/modules/nf-core/multiqc/environment.yml +++ b/modules/nf-core/multiqc/environment.yml @@ -1,5 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json channels: - conda-forge - bioconda dependencies: - - bioconda::multiqc=1.27 + - bioconda::multiqc=1.31 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 58d9313c..5288f5cc 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.27--pyhdfd78af_0' : - 'biocontainers/multiqc:1.27--pyhdfd78af_0' }" + 'https://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ef/eff0eafe78d5f3b65a6639265a16b89fdca88d06d18894f90fcdb50142004329/data' : + 'community.wave.seqera.io/library/multiqc:1.31--1efbafd542a23882' }" input: path multiqc_files, stageAs: "?/*" diff --git a/modules/nf-core/multiqc/meta.yml b/modules/nf-core/multiqc/meta.yml index b16c1879..ce30eb73 100644 --- a/modules/nf-core/multiqc/meta.yml +++ b/modules/nf-core/multiqc/meta.yml @@ -15,57 +15,71 @@ tools: licence: ["GPL-3.0-or-later"] identifier: biotools:multiqc input: - - - multiqc_files: - type: file - description: | - List of reports / files recognised by MultiQC, for example the html and zip output of FastQC - - - multiqc_config: - type: file - description: Optional config yml for MultiQC - pattern: "*.{yml,yaml}" - - - extra_multiqc_config: - type: file - description: Second optional config yml for MultiQC. Will override common sections - in multiqc_config. - pattern: "*.{yml,yaml}" - - - multiqc_logo: + - multiqc_files: + type: file + description: | + List of reports / files recognised by MultiQC, for example the html and zip output of FastQC + ontologies: [] + - multiqc_config: + type: file + description: Optional config yml for MultiQC + pattern: "*.{yml,yaml}" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML + - extra_multiqc_config: + type: file + description: Second optional config yml for MultiQC. Will override common sections + in multiqc_config. + pattern: "*.{yml,yaml}" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML + - multiqc_logo: + type: file + description: Optional logo file for MultiQC + pattern: "*.{png}" + ontologies: [] + - replace_names: + type: file + description: | + Optional two-column sample renaming file. First column a set of + patterns, second column a set of corresponding replacements. Passed via + MultiQC's `--replace-names` option. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV + - sample_names: + type: file + description: | + Optional TSV file with headers, passed to the MultiQC --sample_names + argument. + pattern: "*.{tsv}" + ontologies: + - edam: http://edamontology.org/format_3475 # TSV +output: + report: + - "*multiqc_report.html": type: file - description: Optional logo file for MultiQC - pattern: "*.{png}" - - - replace_names: + description: MultiQC report file + pattern: "multiqc_report.html" + ontologies: [] + data: + - "*_data": + type: directory + description: MultiQC data dir + pattern: "multiqc_data" + plots: + - "*_plots": type: file - description: | - Optional two-column sample renaming file. First column a set of - patterns, second column a set of corresponding replacements. Passed via - MultiQC's `--replace-names` option. - pattern: "*.{tsv}" - - - sample_names: + description: Plots created by MultiQC + pattern: "*_data" + ontologies: [] + versions: + - versions.yml: type: file - description: | - Optional TSV file with headers, passed to the MultiQC --sample_names - argument. - pattern: "*.{tsv}" -output: - - report: - - "*multiqc_report.html": - type: file - description: MultiQC report file - pattern: "multiqc_report.html" - - data: - - "*_data": - type: directory - description: MultiQC data dir - pattern: "multiqc_data" - - plots: - - "*_plots": - type: file - description: Plots created by MultiQC - pattern: "*_data" - - versions: - - versions.yml: - type: file - description: File containing software versions - pattern: "versions.yml" + description: File containing software versions + pattern: "versions.yml" + ontologies: + - edam: http://edamontology.org/format_3750 # YAML authors: - "@abhi18av" - "@bunop" diff --git a/modules/nf-core/multiqc/tests/main.nf.test.snap b/modules/nf-core/multiqc/tests/main.nf.test.snap index 7b7c1322..17881d15 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,8f3b8c1cec5388cf2708be948c9fa42f" + "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nextflow": "25.04.6" }, - "timestamp": "2025-01-27T09:29:57.631982377" + "timestamp": "2025-09-08T20:57:36.139055243" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" + "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nextflow": "25.04.6" }, - "timestamp": "2025-01-27T09:30:34.743726958" + "timestamp": "2025-09-08T20:59:15.142230631" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8f3b8c1cec5388cf2708be948c9fa42f" + "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f" ] ], "meta": { "nf-test": "0.9.2", - "nextflow": "24.10.4" + "nextflow": "25.04.6" }, - "timestamp": "2025-01-27T09:30:21.44383553" + "timestamp": "2025-09-08T20:58:29.629087066" } } \ No newline at end of file diff --git a/modules/nf-core/multiqc/tests/tags.yml b/modules/nf-core/multiqc/tests/tags.yml deleted file mode 100644 index bea6c0d3..00000000 --- a/modules/nf-core/multiqc/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -multiqc: - - modules/nf-core/multiqc/** diff --git a/nextflow.config b/nextflow.config index 3d9651f0..2d6c41c6 100644 --- a/nextflow.config +++ b/nextflow.config @@ -32,13 +32,15 @@ params { email_on_fail = null plaintext_email = false monochrome_logs = false - hook_url = null + hook_url = System.getenv('HOOK_URL') help = false help_full = false show_hidden = false version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')// Config options + trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') + + // Config options config_profile_name = null config_profile_description = null @@ -91,7 +93,18 @@ profiles { apptainer.enabled = false docker.runOptions = '-u $(id -u):$(id -g)' } - arm { + arm64 { + process.arch = 'arm64' + // TODO https://github.com/nf-core/modules/issues/6694 + // For now if you're using arm64 you have to use wave for the sake of the maintainers + // wave profile + apptainer.ociAutoPull = true + singularity.ociAutoPull = true + wave.enabled = true + wave.freeze = true + wave.strategy = 'conda,container' + } + emulate_amd64 { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { @@ -148,28 +161,27 @@ profiles { wave.freeze = true wave.strategy = 'conda,container' } - gitpod { - executor.name = 'local' - executor.cpus = 4 - executor.memory = 8.GB - process { - resourceLimits = [ - memory: 8.GB, - cpus : 4, - time : 1.h - ] - } + gpu { + docker.runOptions = '-u $(id -u):$(id -g) --gpus all' + apptainer.runOptions = '--nv' + singularity.runOptions = '--nv' } test { includeConfig 'conf/test.config' } test_full { includeConfig 'conf/test_full.config' } } -// Load nf-core custom profiles from different Institutions -includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" +// Set AWS client to anonymous when using the default igenomes_base +aws.client.anonymous = !params.igenomes_ignore && params.igenomes_base?.startsWith('s3://ngi-igenomes/igenomes/') ?: false +// Load nf-core custom profiles from different institutions + +// If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included. +// Load IntGenomicsLab/lrsomatic custom profiles from different institutions. +includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/nfcore_custom.config" : "/dev/null" + // Load IntGenomicsLab/lrsomatic custom profiles from different institutions. // TODO nf-core: Optionally, you can add a pipeline-specific nf-core config at https://github.com/nf-core/configs -// includeConfig !System.getenv('NXF_OFFLINE') && params.custom_config_base ? "${params.custom_config_base}/pipeline/lrsomatic.config" : "/dev/null" +// includeConfig params.custom_config_base && (!System.getenv('NXF_OFFLINE') || !params.custom_config_base.startsWith('http')) ? "${params.custom_config_base}/pipeline/lrsomatic.config" : "/dev/null" // Set default registry for Apptainer, Docker, Podman, Charliecloud and Singularity independent of -profile // Will not be used unless Apptainer / Docker / Podman / Charliecloud / Singularity are enabled @@ -226,7 +238,6 @@ dag { manifest { name = 'IntGenomicsLab/lrsomatic' - author = """Jonas Demeulemeester""" // The author field is deprecated from Nextflow version 24.10.0, use contributors instead contributors = [ // TODO nf-core: Update the field with the details of the contributors to your pipeline. New with Nextflow version 24.10.0 [ @@ -242,25 +253,19 @@ manifest { description = """Workflow for somatic variant calling of long read data""" mainScript = 'main.nf' defaultBranch = 'master' - nextflowVersion = '!>=24.04.2' + nextflowVersion = '!>=25.04.0' version = '1.0.0dev' doi = '' } // Nextflow plugins plugins { - id 'nf-schema@2.3.0' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.5.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { defaultIgnoreParams = ["genomes"] monochromeLogs = params.monochrome_logs - help { - enabled = true - command = "nextflow run IntGenomicsLab/lrsomatic -profile --input samplesheet.csv --outdir " - fullParameter = "help_full" - showHiddenParameter = "show_hidden" - } } // Load modules.config for DSL2 module specific options diff --git a/nextflow_schema.json b/nextflow_schema.json index 1d3318a3..f33141b9 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -224,6 +224,18 @@ "fa_icon": "far calendar", "description": "Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss.", "hidden": true + }, + "help": { + "type": ["boolean", "string"], + "description": "Display the help message." + }, + "help_full": { + "type": "boolean", + "description": "Display the full detailed help message." + }, + "show_hidden": { + "type": "boolean", + "description": "Display hidden parameters in the help message (only works when --help or --help_full are provided)." } } } diff --git a/nf-test.config b/nf-test.config new file mode 100644 index 00000000..3a1fff59 --- /dev/null +++ b/nf-test.config @@ -0,0 +1,24 @@ +config { + // location for all nf-test tests + testsDir "." + + // nf-test directory including temporary files for each test + workDir System.getenv("NFT_WORKDIR") ?: ".nf-test" + + // location of an optional nextflow.config file specific for executing tests + configFile "tests/nextflow.config" + + // ignore tests coming from the nf-core/modules repo + ignore 'modules/nf-core/**/tests/*', 'subworkflows/nf-core/**/tests/*' + + // run all test with defined profile(s) from the main nextflow.config + profile "test" + + // list of filenames or patterns that should be trigger a full test run + triggers 'nextflow.config', 'nf-test.config', 'conf/test.config', 'tests/nextflow.config', 'tests/.nftignore' + + // load the necessary plugins + plugins { + load "nft-utils@0.0.3" + } +} diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 666b78c7..e09324c1 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-11-19T11:00:53+00:00", - "description": "# IntGenomicsLab/lrsomatic\n\n[![GitHub Actions CI Status](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml/badge.svg)](https://github.com/IntGenomicsLab/lrsomatic/actions/workflows/ci.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/nextflow%20DSL2-%E2%89%A524.04.2-23aa62.svg)](https://www.nextflow.io/)\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 bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\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/lrsomatic was originally written by Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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-19T13:20:15+00:00", + "description": "# IntGenomicsLab/lrsomatic\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/IntGenomicsLab/lrsomatic)\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.4.1-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.4.1)\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 bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\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/lrsomatic was originally written by Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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": "#ca2cacc1-0011-4c13-ac4d-341313a5533b" + "@id": "#fb093d1a-fc14-4d4f-93a6-e9a1dac85303" } ], "name": "IntGenomicsLab/lrsomatic" @@ -121,7 +121,7 @@ "ComputationalWorkflow" ], "dateCreated": "", - "dateModified": "2025-11-19T12:00:53Z", + "dateModified": "2025-11-19T14:20:15Z", "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.04.2" + "version": "!>=25.04.0" }, { - "@id": "#ca2cacc1-0011-4c13-ac4d-341313a5533b", + "@id": "#fb093d1a-fc14-4d4f-93a6-e9a1dac85303", "@type": "TestSuite", "instance": [ { - "@id": "#5fdb974f-cdce-4e2f-a2cd-cefba401b75b" + "@id": "#17c6952f-1a01-4a74-9901-44b9a60c6bef" } ], "mainEntity": { @@ -173,10 +173,10 @@ "name": "Test suite for IntGenomicsLab/lrsomatic" }, { - "@id": "#5fdb974f-cdce-4e2f-a2cd-cefba401b75b", + "@id": "#17c6952f-1a01-4a74-9901-44b9a60c6bef", "@type": "TestInstance", "name": "GitHub Actions workflow for testing IntGenomicsLab/lrsomatic", - "resource": "repos/IntGenomicsLab/lrsomatic/actions/workflows/ci.yml", + "resource": "repos/IntGenomicsLab/lrsomatic/actions/workflows/nf-test.yml", "runsOn": { "@id": "https://w3id.org/ro/terms/test#GithubService" }, diff --git a/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf index 0b29b1cd..4fc500c4 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,6 +33,9 @@ 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: @@ -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 ) // @@ -259,4 +271,3 @@ def methodsDescriptionText(mqc_methods_yaml) { return description_html.toString() } - 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/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 0907ac58..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.1.0" + 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 new file mode 100644 index 00000000..83f7a0a5 --- /dev/null +++ b/tests/.nftignore @@ -0,0 +1,10 @@ +.DS_Store +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 +pipeline_info/*.{html,json,txt,yml} diff --git a/tests/default.nf.test b/tests/default.nf.test new file mode 100644 index 00000000..d4daad19 --- /dev/null +++ b/tests/default.nf.test @@ -0,0 +1,33 @@ +nextflow_pipeline { + + name "Test pipeline" + script "../main.nf" + tag "pipeline" + + test("-profile test") { + + when { + params { + outdir = "$outputDir" + } + } + + then { + // stable_name: All files + folders in ${params.outdir}/ with a stable name + def stable_name = getAllFilesFromDir(params.outdir, relative: true, includeDir: true, ignore: ['pipeline_info/*.{html,json,txt}']) + // stable_path: All files in ${params.outdir}/ with stable content + def stable_path = getAllFilesFromDir(params.outdir, ignoreFile: 'tests/.nftignore') + assertAll( + { assert workflow.success}, + { assert snapshot( + // 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 + stable_name, + // All files with stable contents + stable_path + ).match() } + ) + } + } +} diff --git a/tests/nextflow.config b/tests/nextflow.config new file mode 100644 index 00000000..59f352c4 --- /dev/null +++ b/tests/nextflow.config @@ -0,0 +1,14 @@ +/* +======================================================================================== + Nextflow config file for running nf-test tests +======================================================================================== +*/ + +// TODO nf-core: Specify any additional parameters here +// Or any resources requirements +params { + modules_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/' + pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/lrsomatic' +} + +aws.client.anonymous = true // fixes S3 access issues on self-hosted runners From 8ad5e9d651b35c6f981dde314335dfd69969b8fa Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Thu, 20 Nov 2025 10:56:41 +0100 Subject: [PATCH 05/20] Template update for nf-core/tools version 3.5.1 --- .github/workflows/download_pipeline.yml | 2 +- .github/workflows/fix_linting.yml | 2 +- .github/workflows/linting.yml | 6 +-- .github/workflows/nf-test.yml | 4 +- .../workflows/template-version-comment.yml | 2 +- .nf-core.yml | 2 +- .prettierignore | 2 + README.md | 4 +- modules.json | 4 +- modules/nf-core/multiqc/environment.yml | 2 +- modules/nf-core/multiqc/main.nf | 4 +- .../nf-core/multiqc/tests/main.nf.test.snap | 24 ++++++------ nextflow.config | 2 - ro-crate-metadata.json | 14 +++---- .../utils_nfcore_lrsomatic_pipeline/main.nf | 4 +- .../nf-core/utils_nfcore_pipeline/main.nf | 2 +- workflows/lrsomatic.nf | 38 ++++++++++++++----- 17 files changed, 68 insertions(+), 50 deletions(-) diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml index 6d94bcbf..45884ff9 100644 --- a/.github/workflows/download_pipeline.yml +++ b/.github/workflows/download_pipeline.yml @@ -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 dd821a9a..b9b23241 100644 --- a/.github/workflows/fix_linting.yml +++ b/.github/workflows/fix_linting.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: # Use the @nf-core-bot token to check out so we can push later - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: token: ${{ secrets.nf_core_bot_auth_token }} diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 30e66026..7a527a34 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -11,7 +11,7 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - name: Set up Python 3.14 uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6 @@ -28,7 +28,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out pipeline code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - name: Install Nextflow uses: nf-core/setup-nextflow@v2 @@ -71,7 +71,7 @@ jobs: - name: Upload linting log file artifact if: ${{ always() }} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5 with: name: linting-logs path: | diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index c7448f3e..7fd88b52 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -39,7 +39,7 @@ jobs: rm -rf ./* || true rm -rf ./.??* || true ls -la ./ - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: fetch-depth: 0 @@ -83,7 +83,7 @@ jobs: TOTAL_SHARDS: ${{ needs.nf-test-changes.outputs.total_shards }} steps: - - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: fetch-depth: 0 diff --git a/.github/workflows/template-version-comment.yml b/.github/workflows/template-version-comment.yml index c5988af9..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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 + uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 with: ref: ${{ github.event.pull_request.head.sha }} diff --git a/.nf-core.yml b/.nf-core.yml index 359178c3..27d6da9b 100644 --- a/.nf-core.yml +++ b/.nf-core.yml @@ -27,7 +27,7 @@ lint: - validation.summary.beforeText - validation.summary.afterText schema_params: false -nf_core_version: 3.4.1 +nf_core_version: 3.5.1 repository_type: pipeline template: author: Jonas Demeulemeester diff --git a/.prettierignore b/.prettierignore index 2255e3e3..dd749d43 100644 --- a/.prettierignore +++ b/.prettierignore @@ -12,3 +12,5 @@ testing* bin/ .nf-test/ ro-crate-metadata.json +modules/nf-core/ +subworkflows/nf-core/ diff --git a/README.md b/README.md index 8e40e389..7281c292 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # IntGenomicsLab/lrsomatic -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/IntGenomicsLab/lrsomatic) +[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/IntGenomicsLab/lrsomatic) [![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) [![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%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.4.1-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.4.1) +[![nf-core template version](https://img.shields.io/badge/nf--core_template-3.5.1-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.5.1) [![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/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) diff --git a/modules.json b/modules.json index 9032f990..1abe8cc7 100644 --- a/modules.json +++ b/modules.json @@ -7,7 +7,7 @@ "nf-core": { "multiqc": { "branch": "master", - "git_sha": "e10b76ca0c66213581bec2833e30d31f239dec0b", + "git_sha": "af27af1be706e6a2bb8fe454175b0cdf77f47b49", "installed_by": ["modules"] } } @@ -21,7 +21,7 @@ }, "utils_nfcore_pipeline": { "branch": "master", - "git_sha": "05954dab2ff481bcb999f24455da29a5828af08d", + "git_sha": "271e7fc14eb1320364416d996fb077421f3faed2", "installed_by": ["subworkflows"] }, "utils_nfschema_plugin": { diff --git a/modules/nf-core/multiqc/environment.yml b/modules/nf-core/multiqc/environment.yml index dd513cbd..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.31 + - bioconda::multiqc=1.32 diff --git a/modules/nf-core/multiqc/main.nf b/modules/nf-core/multiqc/main.nf index 5288f5cc..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://community-cr-prod.seqera.io/docker/registry/v2/blobs/sha256/ef/eff0eafe78d5f3b65a6639265a16b89fdca88d06d18894f90fcdb50142004329/data' : - 'community.wave.seqera.io/library/multiqc:1.31--1efbafd542a23882' }" + '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 17881d15..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,8968b114a3e20756d8af2b80713bcc4f" + "versions.yml:md5,737bb2c7cad54ffc2ec020791dc48b8f" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "24.10.4" }, - "timestamp": "2025-09-08T20:57:36.139055243" + "timestamp": "2025-10-27T13:33:24.356715" }, "multiqc_stub": { "content": [ @@ -17,25 +17,25 @@ "multiqc_report.html", "multiqc_data", "multiqc_plots", - "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f" + "versions.yml:md5,737bb2c7cad54ffc2ec020791dc48b8f" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "24.10.4" }, - "timestamp": "2025-09-08T20:59:15.142230631" + "timestamp": "2025-10-27T13:34:11.103619" }, "multiqc_versions_config": { "content": [ [ - "versions.yml:md5,8968b114a3e20756d8af2b80713bcc4f" + "versions.yml:md5,737bb2c7cad54ffc2ec020791dc48b8f" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "24.10.4" }, - "timestamp": "2025-09-08T20:58:29.629087066" + "timestamp": "2025-10-27T13:34:04.615233" } } \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 2d6c41c6..26e20599 100644 --- a/nextflow.config +++ b/nextflow.config @@ -170,8 +170,6 @@ profiles { test_full { includeConfig 'conf/test_full.config' } } -// Set AWS client to anonymous when using the default igenomes_base -aws.client.anonymous = !params.igenomes_ignore && params.igenomes_base?.startsWith('s3://ngi-igenomes/igenomes/') ?: false // Load nf-core custom profiles from different institutions // If params.custom_config_base is set AND either the NXF_OFFLINE environment variable is not set or params.custom_config_base is a local path, the nfcore_custom.config file from the specified base path is included. diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index e09324c1..2d439fec 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -22,8 +22,8 @@ "@id": "./", "@type": "Dataset", "creativeWorkStatus": "InProgress", - "datePublished": "2025-11-19T13:20:15+00:00", - "description": "# IntGenomicsLab/lrsomatic\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new/IntGenomicsLab/lrsomatic)\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.4.1-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.4.1)\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 bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\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/lrsomatic was originally written by Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/IntGenomicsLab/lrsomatic)\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.5.1-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.5.1)\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 bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\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/lrsomatic was originally written by Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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": "#fb093d1a-fc14-4d4f-93a6-e9a1dac85303" + "@id": "#75fcd790-ddea-4e5f-ad8a-a3bcb0ee570b" } ], "name": "IntGenomicsLab/lrsomatic" @@ -121,7 +121,7 @@ "ComputationalWorkflow" ], "dateCreated": "", - "dateModified": "2025-11-19T14:20:15Z", + "dateModified": "2025-11-20T10:56:35Z", "dct:conformsTo": "https://bioschemas.org/profiles/ComputationalWorkflow/1.0-RELEASE/", "keywords": [ "nf-core", @@ -160,11 +160,11 @@ "version": "!>=25.04.0" }, { - "@id": "#fb093d1a-fc14-4d4f-93a6-e9a1dac85303", + "@id": "#75fcd790-ddea-4e5f-ad8a-a3bcb0ee570b", "@type": "TestSuite", "instance": [ { - "@id": "#17c6952f-1a01-4a74-9901-44b9a60c6bef" + "@id": "#96bff4ee-228f-4a92-b1d1-e4fc3c4656c5" } ], "mainEntity": { @@ -173,7 +173,7 @@ "name": "Test suite for IntGenomicsLab/lrsomatic" }, { - "@id": "#17c6952f-1a01-4a74-9901-44b9a60c6bef", + "@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 4fc500c4..0f35e34c 100644 --- a/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf @@ -39,7 +39,7 @@ workflow PIPELINE_INITIALISATION { main: - ch_versions = Channel.empty() + ch_versions = channel.empty() // // Print version and exit if required and dump pipeline parameters to JSON file @@ -84,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, fastq_1, fastq_2 -> 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/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index f92e50c0..9748f8a2 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -21,13 +21,31 @@ workflow LRSOMATIC { ch_samplesheet // channel: samplesheet read in from --input main: - ch_versions = Channel.empty() - ch_multiqc_files = Channel.empty() + ch_versions = channel.empty() + ch_multiqc_files = channel.empty() // // Collate and save software versions // - softwareVersionsToYAML(ch_versions) + def topic_versions = Channel.topic("versions") + .distinct() + .branch { entry -> + versions_file: entry instanceof Path + versions_tuple: true + } + + def topic_versions_string = topic_versions.versions_tuple + .map { process, tool, version -> + [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ] + } + .groupTuple(by:0) + .map { process, tool_versions -> + tool_versions.unique().sort() + "${process}:\n${tool_versions.join('\n')}" + } + + softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file)) + .mix(topic_versions_string) .collectFile( storeDir: "${params.outdir}/pipeline_info", name: 'lrsomatic_software_' + 'mqc_' + 'versions.yml', @@ -39,24 +57,24 @@ workflow LRSOMATIC { // // MODULE: MultiQC // - ch_multiqc_config = Channel.fromPath( + ch_multiqc_config = channel.fromPath( "$projectDir/assets/multiqc_config.yml", checkIfExists: true) ch_multiqc_custom_config = params.multiqc_config ? - Channel.fromPath(params.multiqc_config, checkIfExists: true) : - Channel.empty() + channel.fromPath(params.multiqc_config, checkIfExists: true) : + channel.empty() ch_multiqc_logo = params.multiqc_logo ? - Channel.fromPath(params.multiqc_logo, checkIfExists: true) : - Channel.empty() + channel.fromPath(params.multiqc_logo, checkIfExists: true) : + channel.empty() summary_params = paramsSummaryMap( workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params)) ch_multiqc_files = ch_multiqc_files.mix( ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = Channel.value( + ch_methods_description = channel.value( methodsDescriptionText(ch_multiqc_custom_methods_description)) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) From c23c9676409b995ae12ba863d2d7b8f28047d942 Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Thu, 20 Nov 2025 12:05:21 +0100 Subject: [PATCH 06/20] lint fix --- modules.json | 103 ++++ modules/nf-core/ascat/ascat.diff | 153 ------ .../ensemblvep/vep/ensemblvep-vep.diff | 103 +++- .../longphase/phase/longphase-phase.diff | 474 +++++++++++++++++- .../minimap2/align/minimap2-align.diff | 18 - .../samtools/stats/samtools-stats.diff | 18 - 6 files changed, 664 insertions(+), 205 deletions(-) delete mode 100644 modules/nf-core/ascat/ascat.diff delete mode 100644 modules/nf-core/minimap2/align/minimap2-align.diff delete mode 100644 modules/nf-core/samtools/stats/samtools-stats.diff diff --git a/modules.json b/modules.json index 1abe8cc7..66d82ef9 100644 --- a/modules.json +++ b/modules.json @@ -5,10 +5,113 @@ "https://github.com/nf-core/modules.git": { "modules": { "nf-core": { + "ascat": { + "branch": "master", + "git_sha": "98ffb090029d17a9fb8de75dadcfe6bc8b6377ec", + "installed_by": ["modules"] + }, + "ensemblvep/download": { + "branch": "master", + "git_sha": "2fcc53751152a999bfc9c24f75f494b9e5bb338f", + "installed_by": ["modules"] + }, + "ensemblvep/vep": { + "branch": "master", + "git_sha": "0567eee9276d4a358e5f9f01c810a149fbd241f8", + "installed_by": ["modules"], + "patch": "modules/nf-core/ensemblvep/vep/ensemblvep-vep.diff" + }, + "longphase/haplotag": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "longphase/phase": { + "branch": "master", + "git_sha": "47983538e45e539f783ed8ab0d1c96d39df2af8f", + "installed_by": ["modules"], + "patch": "modules/nf-core/longphase/phase/longphase-phase.diff" + }, + "minimap2/align": { + "branch": "master", + "git_sha": "1a5a9e7b4009dcf34e6867dd1a5a1d9a718b027b", + "installed_by": ["modules"] + }, + "minimap2/index": { + "branch": "master", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", + "installed_by": ["modules"] + }, + "modkit/pileup": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "mosdepth": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, "multiqc": { "branch": "master", "git_sha": "af27af1be706e6a2bb8fe454175b0cdf77f47b49", "installed_by": ["modules"] + }, + "pigz/uncompress": { + "branch": "master", + "git_sha": "e753770db613ce014b3c4bc94f6cba443427b726", + "installed_by": ["modules"] + }, + "samtools/cat": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "samtools/faidx": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "samtools/flagstat": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "samtools/idxstats": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "samtools/index": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "samtools/stats": { + "branch": "master", + "git_sha": "f4eab7945952dc4934224309701a49913ea05ae6", + "installed_by": ["modules"] + }, + "severus": { + "branch": "master", + "git_sha": "81880787133db07d9b4c1febd152c090eb8325dc", + "installed_by": ["modules"], + "patch": "modules/nf-core/severus/severus.diff" + }, + "untar": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "unzip": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] + }, + "wget": { + "branch": "master", + "git_sha": "41dfa3f7c0ffabb96a6a813fe321c6d1cc5b6e46", + "installed_by": ["modules"] } } }, 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/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 -************************************************************ From 1f610c44d01d2e6f763d6a5b2a15a83b4e27cc0f Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Thu, 20 Nov 2025 13:31:43 +0100 Subject: [PATCH 07/20] update snapshot, revert test changes --- assets/schema_input.json | 42 ++- conf/base.config | 2 +- conf/test.config | 27 +- conf/test_full.config | 35 +- docs/README.md | 2 +- docs/output.md | 112 ++++++- docs/usage.md | 4 +- nextflow.config | 145 +++++--- subworkflows/local/tumor_normal_happhase.nf | 1 - tests/default.nf.test.snap | 352 +------------------- 10 files changed, 295 insertions(+), 427 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index 04228241..ba9344a2 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/IntGenomicsLab/lrsomatic/master/assets/schema_input.json", + "$id": "https://raw.githubusercontent.com/IntGenomicsLab/lrsomatic/main/assets/schema_input.json", "title": "IntGenomicsLab/lrsomatic pipeline - params.input schema", "description": "Schema for the file provided with params.input", "type": "array", @@ -13,21 +13,45 @@ "errorMessage": "Sample name must be provided and cannot contain spaces", "meta": ["id"] }, - "fastq_1": { + "bam_tumor": { "type": "string", "format": "file-path", "exists": true, - "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 1 must be provided, cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^\\S+\\.bam$", + "errorMessage": "Bam file of tumor sample must be provided, cannot contain spaces and must have extension '.bam'" }, - "fastq_2": { + "bam_normal": { "type": "string", "format": "file-path", "exists": true, - "pattern": "^([\\S\\s]*\\/)?[^\\s\\/]+\\.f(ast)?q\\.gz$", - "errorMessage": "FastQ file for reads 2 cannot contain spaces and must have extension '.fq.gz' or '.fastq.gz'" + "pattern": "^\\S+\\.bam$", + "errorMessage": "Bam file of normal sample must be provided, cannot contain spaces and must have extension '.bam'" + }, + "platform": { + "type": "string", + "enum": ["pb", "ont"], + "errorMessage": "Method must be one of the following: 'pb' or 'ont'" + }, + "sex": { + "type": "string", + "enum": ["male", "female"], + "errorMessage": "Biological sex must be either 'male' or 'female'" + }, + "fiber": { + "type": "string", + "enum": ["y", "n"], + "errorMessage": "Specifiy (y/n) if sample has had fiberseq performed" + }, + "clair3_model": { + "type": "string" + }, + "clairSTO_model": { + "type": "string" + }, + "clairS_model": { + "type": "string" } }, - "required": ["sample", "fastq_1"] + "required": ["sample", "bam_tumor", "platform", "sex", "fiber"] } -} +} \ No newline at end of file diff --git a/conf/base.config b/conf/base.config index 84625158..da7020bf 100644 --- a/conf/base.config +++ b/conf/base.config @@ -68,4 +68,4 @@ process { ext.use_gpu = { workflow.profile.contains('gpu') } accelerator = { workflow.profile.contains('gpu') ? 1 : null } } -} +} \ No newline at end of file diff --git a/conf/test.config b/conf/test.config index 117abf0c..d376b95f 100644 --- a/conf/test.config +++ b/conf/test.config @@ -11,11 +11,13 @@ */ process { - resourceLimits = [ - cpus: 4, - memory: '15.GB', - time: '1.h' - ] + withName: '.*' { + resourceLimits = [ + cpus: 4, + memory: '15.GB', + time: '1.h' + ] + } } params { @@ -23,8 +25,13 @@ params { config_profile_description = 'Minimal test dataset to check pipeline function' // Input data - // TODO nf-core: Specify the paths to your test data on nf-core/test-datasets - // 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_test_illumina_amplicon.csv'// Genome references - genome = 'R64-1-1' -} + 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" + + // Additional params + genome = "GRCh38" + vep_genome = "WBcel235" + vep_species = "caenorhabditis_elegans" + skip_wakhan = true + skip_ascat = true +} \ No newline at end of file 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/docs/README.md b/docs/README.md index 14889bd3..936ae5c6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,4 +5,4 @@ The IntGenomicsLab/lrsomatic documentation is split into the following pages: - [Usage](usage.md) - An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. - [Output](output.md) - - An overview of the different results produced by the pipeline and how to interpret them. + - An overview of the different results produced by the pipeline and how to interpret them. \ No newline at end of file diff --git a/docs/output.md b/docs/output.md index b3f2ed82..2b2ee9c4 100644 --- a/docs/output.md +++ b/docs/output.md @@ -12,8 +12,104 @@ The directories listed below will be created in the results directory after the The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes data using the following steps: +- [samtools/cat](#samtools_cat) - Concatenate replicates from the same sample +- [minimap2/index](#minimap2) - Creating minimap2 index +- [minimap2/align](#minimap2) - Aligning long-read samples to the reference genome +- [Cramino](#cramino) - Quality check the aligned or unaligned lomg read bam files +- [Modkit](#modkit) - Tool to process methylation data +- [Mosdepth](#mosdepth) - Tool to check the sequencing depth +- [ClairS-TO](#clairsto) - Small Variant Calling for Tumour only samples +- [Severus](#severus) - Tool to call somatic and germline structural variants - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution +- [Longphase](#longphase) - Phase the variants into haplotype blocks + +### samtools + +### Minimap2 + +[ClairS-TO](https://github.com/HKU-BAL/ClairS-TO) ool in the Clair series to support long-read somatic small variant calling with only tumor samples available. For more information, see . + +### Cramino + +
+Output files + +- `cramino/` + - `*_cramino.txt`: text file containing the quality check results from Cramino + +
+ +[Cramino](https://github.com/wdecoster/cramino) is a tool for fast quality check of aligned or unaligned long read sequencing bam files. For more information, check . + +### Modkit + +
+Output files + +- `modkit/` + - `*.bed`: bed file with genomic positions with modified bases + - `*.bedgraph`: bedgraph file with genomic positions with modified bases + - `*log`: log file + +
+ +[Modkit](https://github.com/nanoporetech/modkit) is a tool to work with methylated bases from bam files. It allows you to update the bam file modification information, filter the information, or to extract it to other file formarts such as bed file. For more information, see . + +### Mosdepth + +
+Output files + +- `mosdepth` + - `*.summary.txt'`: summary text file + - `*.global.dist.txt`: global information on sequencing depth file + - optionally outputs other files by regions. + +
+ +[Mosdepth](https://github.com/brentp/mosdepth) is a tool to work with WGS/exome/targeted sequencing data to obtain sequecing depth information, For more information, see . + +### ClairS-TO + +
+Output files + +- `clairsto/` + - `germline.vcf.gz`: a VCF file containing germline SNP and indel calls + - `somatic.vcf.gz`: a VCF file containing somatic SNP and indel calls + - `logs`: directory containing log files for the ClairS-TO run + - `run_clairs_to.log`: a text file containing a summary of the ClairS-TO run + - `run_clairs_to.log.bak`: a text file containing the run command + +
+ +### Severus + +
+Output files + +- `severus` +- `severus.log`: severus log file +- `read_qual.txt`: the read quality +- `breakpoints_double.csv`: the breakpoint file + +
+ +[Severus](https://github.com/KolmogorovLab/Severus) is a tool to call not only somatic, but also germline structural variant calls. For mor information on the tool and its usage, check out . + +### Longphase + +
+Output files + +TODO - add description ot output file + +- `longphase/` + +
+ +[Longphase](https://github.com/twolinin/longphase) isa tool to phase your input variant calls and haplotag your bam. To see more, see . ### MultiQC @@ -31,6 +127,20 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . +
+Output files + +- `multiqc/` + - `multiqc_report.html`: a standalone HTML file that can be viewed in your web browser. + - `multiqc_data/`: directory containing parsed statistics from the different tools used in the pipeline. + - `multiqc_plots/`: directory containing static images from the report in various formats. + +
+ +[MultiQC](http://multiqc.info) is a visualization tool that generates a single HTML report summarising all samples in your project. Most of the pipeline QC results are visualised in the report and further statistics are available in the report data directory. + +Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQC. The pipeline has special steps which also allow the software versions to be reported in the MultiQC output for future traceability. For more information about how to use MultiQC reports, see . + ### Pipeline information
@@ -44,4 +154,4 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ
-[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. \ No newline at end of file diff --git a/docs/usage.md b/docs/usage.md index 190ad95f..3c496f77 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -147,7 +147,7 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof - `shifter` - A generic configuration profile to be used with [Shifter](https://nersc.gitlab.io/development/shifter/how-to-use/) - `charliecloud` - - A generic configuration profile to be used with [Charliecloud](https://charliecloud.io/) + - A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/) - `apptainer` - A generic configuration profile to be used with [Apptainer](https://apptainer.org/) - `wave` @@ -209,4 +209,4 @@ We recommend adding the following line to your environment to limit this (typica ```bash NXF_OPTS='-Xms1g -Xmx4g' -``` +``` \ No newline at end of file diff --git a/nextflow.config b/nextflow.config index 26e20599..14ecd9b8 100644 --- a/nextflow.config +++ b/nextflow.config @@ -11,46 +11,94 @@ params { // TODO nf-core: Specify your pipeline's command line flags // Input options - input = null + input = null // References - genome = null - igenomes_base = 's3://ngi-igenomes/igenomes/' - igenomes_ignore = false + genome = null + igenomes_base = 's3://ngi-igenomes/igenomes/' + igenomes_ignore = false + + // Annotation + vep_cache = 's3://annotation-cache/vep_cache/' + vep_cache_version = 113 + download_vep_cache = false + vep_args = "--everything --filter_common --per_gene --total_length --offline --format vcf" + vep_custom = null + vep_custom_tbi = null + + + normal_fiber = true + + // Skip options + skip_qc = false + skip_cramino = false + skip_mosdepth = false + skip_bamstats = false + skip_ascat = false + skip_wakhan = false + skip_fiber = false + skip_vep = false + + // minimap2 options + minimap2_ont_model = null + minimap2_pb_model = null + save_secondary_alignment = true + + // Fibertools options + params.autocorrelation = null + + // ASCAT options + ascat_ploidy = null + ascat_min_base_qual = 20 + ascat_min_counts = 10 + ascat_min_map_qual = 10 + ascat_penalty = 150 + ascat_purity = null + ascat_longread_bins = 2000 + ascat_allelecounter_flags = "-f 0" + ascat_chroms = null // Only use if running on a subset of chromosomes (c(1:22, 'X', 'Y')) + + // Wakhan options + wakhan_chroms = null + + //TODO: + // Once iGenomes is udpated we can update our iGenomes.config to automatically assign genome version + // and allele/loci(/gc/rt) files. For now they need to be specified for anything else but GRCh38 and CHM13 + ascat_gc_files = null + ascat_rt_files = null + // MultiQC options - multiqc_config = null - multiqc_title = null - multiqc_logo = null - max_multiqc_email_size = '25.MB' + multiqc_config = null + multiqc_title = null + multiqc_logo = null + max_multiqc_email_size = '25.MB' multiqc_methods_description = null // Boilerplate options - outdir = null - publish_dir_mode = 'copy' - email = null - email_on_fail = null - plaintext_email = false - monochrome_logs = false - hook_url = System.getenv('HOOK_URL') - help = false - help_full = false - show_hidden = false - version = false + outdir = null + publish_dir_mode = 'copy' + email = null + email_on_fail = null + plaintext_email = false + monochrome_logs = false + hook_url = null + help = false + help_full = false + show_hidden = false + version = false pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/' - trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss') + trace_report_suffix = new java.util.Date().format( 'yyyy-MM-dd_HH-mm-ss')// Config options + config_profile_name = null + config_profile_description = null - // Config options - config_profile_name = null - config_profile_description = null - - custom_config_version = 'master' - custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" - config_profile_contact = null - config_profile_url = null + custom_config_version = 'master' + custom_config_base = "https://raw.githubusercontent.com/nf-core/configs/${params.custom_config_version}" + config_profile_contact = null + config_profile_url = null // Schema validation default options - validate_params = true + validate_params = true } // Load base.config by default for all pipelines @@ -93,18 +141,7 @@ profiles { apptainer.enabled = false docker.runOptions = '-u $(id -u):$(id -g)' } - arm64 { - process.arch = 'arm64' - // TODO https://github.com/nf-core/modules/issues/6694 - // For now if you're using arm64 you have to use wave for the sake of the maintainers - // wave profile - apptainer.ociAutoPull = true - singularity.ociAutoPull = true - wave.enabled = true - wave.freeze = true - wave.strategy = 'conda,container' - } - emulate_amd64 { + arm { docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64' } singularity { @@ -161,6 +198,18 @@ profiles { wave.freeze = true wave.strategy = 'conda,container' } + gitpod { + executor.name = 'local' + executor.cpus = 4 + executor.memory = 8.GB + process { + resourceLimits = [ + memory: 8.GB, + cpus : 4, + time : 1.h + ] + } + } gpu { docker.runOptions = '-u $(id -u):$(id -g) --gpus all' apptainer.runOptions = '--nv' @@ -250,21 +299,27 @@ manifest { homePage = 'https://github.com/IntGenomicsLab/lrsomatic' description = """Workflow for somatic variant calling of long read data""" mainScript = 'main.nf' - defaultBranch = 'master' - nextflowVersion = '!>=25.04.0' + defaultBranch = 'main' + nextflowVersion = '!>=24.10.5' version = '1.0.0dev' doi = '' } // Nextflow plugins plugins { - id 'nf-schema@2.5.1' // Validation of pipeline parameters and creation of an input channel from a sample sheet + id 'nf-schema@2.4.2' // Validation of pipeline parameters and creation of an input channel from a sample sheet } validation { defaultIgnoreParams = ["genomes"] monochromeLogs = params.monochrome_logs + help { + enabled = true + command = "nextflow run IntGenomicsLab/lrsomatic -profile --input samplesheet.csv --outdir " + fullParameter = "help_full" + showHiddenParameter = "show_hidden" + } } // Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' +includeConfig 'conf/modules.config' \ No newline at end of file diff --git a/subworkflows/local/tumor_normal_happhase.nf b/subworkflows/local/tumor_normal_happhase.nf index 22e6714b..5ab83690 100644 --- a/subworkflows/local/tumor_normal_happhase.nf +++ b/subworkflows/local/tumor_normal_happhase.nf @@ -220,7 +220,6 @@ workflow TUMOR_NORMAL_HAPPHASE { // bais: indexes for bam files // Group everything back together in one channel - mixed_hapbams.view() mixed_hapbams .map { meta, bam, bai, vcf, snvs, mods, hapbam, hapbai -> diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 64647d66..cf34b7ac 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -1,81 +1,7 @@ { "-profile test": { "content": [ - 78, { - "CLAIR3": { - "clair3": "1.2.0" - }, - "CLAIRS": { - "clairs": "0.4.1" - }, - "CLAIRSTO": { - "clairsto": "0.4.0" - }, - "CRAMINO_POST": { - "cramino": "1.0.0" - }, - "CRAMINO_PRE": { - "cramino": "1.0.0" - }, - "GERMLINE_VEP": { - "ensemblvep": 114.2, - "tabix": 1.21 - }, - "LONGPHASE_HAPLOTAG": { - "longphase": "1.7.3" - }, - "LONGPHASE_PHASE": { - "longphase": "1.7.3" - }, - "METAEXTRACT": { - "samtools": 1.21 - }, - "MINIMAP2_ALIGN": { - "minimap2": "2.29-r1283", - "samtools": 1.21 - }, - "MOSDEPTH": { - "mosdepth": "0.3.10" - }, - "SAMTOOLS_FAIDX": { - "samtools": 1.21 - }, - "SAMTOOLS_FLAGSTAT": { - "samtools": 1.21 - }, - "SAMTOOLS_IDXSTATS": { - "samtools": 1.21 - }, - "SAMTOOLS_INDEX": { - "samtools": 1.21 - }, - "SAMTOOLS_STATS": { - "samtools": 1.21 - }, - "SEVERUS": { - "severus": 1.6 - }, - "SOMATIC_VEP": { - "ensemblvep": 114.2, - "tabix": 1.21 - }, - "SV_VEP": { - "ensemblvep": 114.2, - "tabix": 1.21 - }, - "UNTAR": { - "untar": 1.34 - }, - "UNZIP_FASTA": { - "pigz": 2.8 - }, - "VCFSPLIT": { - "vcfsplit": 1.2 - }, - "WGET": { - "wget": "1.21.4" - }, "Workflow": { "IntGenomicsLab/lrsomatic": "v1.0.0dev" } @@ -83,291 +9,25 @@ [ "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", - "multiqc/multiqc_data/mosdepth_cov_dist.txt", - "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", "multiqc/multiqc_data/multiqc_software_versions.txt", "multiqc/multiqc_data/multiqc_sources.txt", - "multiqc/multiqc_plots", - "multiqc/multiqc_plots/pdf", - "multiqc/multiqc_plots/pdf/mosdepth-coverage-per-contig-single-cnt.pdf", - "multiqc/multiqc_plots/pdf/mosdepth-coverage-per-contig-single-pct.pdf", - "multiqc/multiqc_plots/pdf/mosdepth-cumcoverage-dist-id.pdf", - "multiqc/multiqc_plots/png", - "multiqc/multiqc_plots/png/mosdepth-coverage-per-contig-single-cnt.png", - "multiqc/multiqc_plots/png/mosdepth-coverage-per-contig-single-pct.png", - "multiqc/multiqc_plots/png/mosdepth-cumcoverage-dist-id.png", - "multiqc/multiqc_plots/svg", - "multiqc/multiqc_plots/svg/mosdepth-coverage-per-contig-single-cnt.svg", - "multiqc/multiqc_plots/svg/mosdepth-coverage-per-contig-single-pct.svg", - "multiqc/multiqc_plots/svg/mosdepth-cumcoverage-dist-id.svg", "multiqc/multiqc_report.html", "pipeline_info", - "pipeline_info/lrsomatic_software_mqc_versions.yml", - "sample1", - "sample1/bamfiles", - "sample1/bamfiles/sample1_normal.bam", - "sample1/bamfiles/sample1_normal.bam.bai", - "sample1/bamfiles/sample1_tumor.bam", - "sample1/bamfiles/sample1_tumor.bam.bai", - "sample1/qc", - "sample1/qc/normal", - "sample1/qc/normal/cramino_aln", - "sample1/qc/normal/cramino_aln/sample1_cramino.txt", - "sample1/qc/normal/cramino_ubam", - "sample1/qc/normal/cramino_ubam/sample1_cramino.txt", - "sample1/qc/normal/mosdepth", - "sample1/qc/normal/mosdepth/sample1.mosdepth.global.dist.txt", - "sample1/qc/normal/mosdepth/sample1.mosdepth.summary.txt", - "sample1/qc/normal/samtools", - "sample1/qc/normal/samtools/sample1.flagstat", - "sample1/qc/normal/samtools/sample1.idxstats", - "sample1/qc/normal/samtools/sample1.stats", - "sample1/qc/tumor", - "sample1/qc/tumor/cramino_aln", - "sample1/qc/tumor/cramino_aln/sample1_cramino.txt", - "sample1/qc/tumor/cramino_ubam", - "sample1/qc/tumor/cramino_ubam/sample1_cramino.txt", - "sample1/qc/tumor/mosdepth", - "sample1/qc/tumor/mosdepth/sample1.mosdepth.global.dist.txt", - "sample1/qc/tumor/mosdepth/sample1.mosdepth.summary.txt", - "sample1/qc/tumor/samtools", - "sample1/qc/tumor/samtools/sample1.flagstat", - "sample1/qc/tumor/samtools/sample1.idxstats", - "sample1/qc/tumor/samtools/sample1.stats", - "sample1/variants", - "sample1/variants/clair3", - "sample1/variants/clair3/merge_output.vcf.gz", - "sample1/variants/clair3/merge_output.vcf.gz.tbi", - "sample1/variants/clairs", - "sample1/variants/clairs/indel.vcf.gz", - "sample1/variants/clairs/indel.vcf.gz.tbi", - "sample1/variants/clairs/sample1.vcf.gz", - "sample1/variants/clairs/sample1.vcf.gz.tbi", - "sample1/variants/clairs/snv.vcf.gz", - "sample1/variants/clairs/snv.vcf.gz.tbi", - "sample1/variants/severus", - "sample1/variants/severus/all_SVs", - "sample1/variants/severus/all_SVs/breakpoint_clusters.tsv", - "sample1/variants/severus/all_SVs/breakpoint_clusters_list.tsv", - "sample1/variants/severus/all_SVs/severus_all.vcf.gz", - "sample1/variants/severus/all_SVs/severus_all.vcf.gz.tbi", - "sample1/variants/severus/breakpoints_double.csv", - "sample1/variants/severus/read_ids.csv", - "sample1/variants/severus/read_qual.txt", - "sample1/variants/severus/severus.log", - "sample1/variants/severus/somatic_SVs", - "sample1/variants/severus/somatic_SVs/breakpoint_clusters.tsv", - "sample1/variants/severus/somatic_SVs/breakpoint_clusters_list.tsv", - "sample1/variants/severus/somatic_SVs/severus_somatic.vcf.gz", - "sample1/variants/severus/somatic_SVs/severus_somatic.vcf.gz.tbi", - "sample1/vep", - "sample1/vep/SVs", - "sample1/vep/SVs/sample1_SV_VEP.vcf.gz", - "sample1/vep/SVs/sample1_SV_VEP.vcf.gz.tbi", - "sample1/vep/SVs/sample1_SV_VEP.vcf.gz_summary.html", - "sample1/vep/germline", - "sample1/vep/germline/sample1_GERMLINE_VEP.vcf.gz", - "sample1/vep/germline/sample1_GERMLINE_VEP.vcf.gz.tbi", - "sample1/vep/germline/sample1_GERMLINE_VEP.vcf.gz_summary.html", - "sample1/vep/somatic", - "sample1/vep/somatic/sample1_SOMATIC_VEP.vcf.gz", - "sample1/vep/somatic/sample1_SOMATIC_VEP.vcf.gz.tbi", - "sample1/vep/somatic/sample1_SOMATIC_VEP.vcf.gz_summary.html", - "sample2", - "sample2/bamfiles", - "sample2/bamfiles/sample2_normal.bam", - "sample2/bamfiles/sample2_normal.bam.bai", - "sample2/bamfiles/sample2_tumor.bam", - "sample2/bamfiles/sample2_tumor.bam.bai", - "sample2/qc", - "sample2/qc/normal", - "sample2/qc/normal/cramino_aln", - "sample2/qc/normal/cramino_aln/sample2_cramino.txt", - "sample2/qc/normal/cramino_ubam", - "sample2/qc/normal/cramino_ubam/sample2_cramino.txt", - "sample2/qc/normal/mosdepth", - "sample2/qc/normal/mosdepth/sample2.mosdepth.global.dist.txt", - "sample2/qc/normal/mosdepth/sample2.mosdepth.summary.txt", - "sample2/qc/normal/samtools", - "sample2/qc/normal/samtools/sample2.flagstat", - "sample2/qc/normal/samtools/sample2.idxstats", - "sample2/qc/normal/samtools/sample2.stats", - "sample2/qc/tumor", - "sample2/qc/tumor/cramino_aln", - "sample2/qc/tumor/cramino_aln/sample2_cramino.txt", - "sample2/qc/tumor/cramino_ubam", - "sample2/qc/tumor/cramino_ubam/sample2_cramino.txt", - "sample2/qc/tumor/mosdepth", - "sample2/qc/tumor/mosdepth/sample2.mosdepth.global.dist.txt", - "sample2/qc/tumor/mosdepth/sample2.mosdepth.summary.txt", - "sample2/qc/tumor/samtools", - "sample2/qc/tumor/samtools/sample2.flagstat", - "sample2/qc/tumor/samtools/sample2.idxstats", - "sample2/qc/tumor/samtools/sample2.stats", - "sample2/variants", - "sample2/variants/clair3", - "sample2/variants/clair3/merge_output.vcf.gz", - "sample2/variants/clair3/merge_output.vcf.gz.tbi", - "sample2/variants/clairs", - "sample2/variants/clairs/indel.vcf.gz", - "sample2/variants/clairs/indel.vcf.gz.tbi", - "sample2/variants/clairs/sample2.vcf.gz", - "sample2/variants/clairs/sample2.vcf.gz.tbi", - "sample2/variants/clairs/snv.vcf.gz", - "sample2/variants/clairs/snv.vcf.gz.tbi", - "sample2/variants/severus", - "sample2/variants/severus/all_SVs", - "sample2/variants/severus/all_SVs/breakpoint_clusters.tsv", - "sample2/variants/severus/all_SVs/breakpoint_clusters_list.tsv", - "sample2/variants/severus/all_SVs/severus_all.vcf.gz", - "sample2/variants/severus/all_SVs/severus_all.vcf.gz.tbi", - "sample2/variants/severus/breakpoints_double.csv", - "sample2/variants/severus/read_ids.csv", - "sample2/variants/severus/read_qual.txt", - "sample2/variants/severus/severus.log", - "sample2/variants/severus/somatic_SVs", - "sample2/variants/severus/somatic_SVs/breakpoint_clusters.tsv", - "sample2/variants/severus/somatic_SVs/breakpoint_clusters_list.tsv", - "sample2/variants/severus/somatic_SVs/severus_somatic.vcf.gz", - "sample2/variants/severus/somatic_SVs/severus_somatic.vcf.gz.tbi", - "sample2/vep", - "sample2/vep/SVs", - "sample2/vep/SVs/sample2_SV_VEP.vcf.gz", - "sample2/vep/SVs/sample2_SV_VEP.vcf.gz.tbi", - "sample2/vep/SVs/sample2_SV_VEP.vcf.gz_summary.html", - "sample2/vep/germline", - "sample2/vep/germline/sample2_GERMLINE_VEP.vcf.gz", - "sample2/vep/germline/sample2_GERMLINE_VEP.vcf.gz.tbi", - "sample2/vep/germline/sample2_GERMLINE_VEP.vcf.gz_summary.html", - "sample2/vep/somatic", - "sample2/vep/somatic/sample2_SOMATIC_VEP.vcf.gz", - "sample2/vep/somatic/sample2_SOMATIC_VEP.vcf.gz.tbi", - "sample2/vep/somatic/sample2_SOMATIC_VEP.vcf.gz_summary.html", - "sample3", - "sample3/bamfiles", - "sample3/bamfiles/sample3_tumor.bam", - "sample3/bamfiles/sample3_tumor.bam.bai", - "sample3/qc", - "sample3/qc/tumor", - "sample3/qc/tumor/cramino_aln", - "sample3/qc/tumor/cramino_aln/sample3_cramino.txt", - "sample3/qc/tumor/cramino_ubam", - "sample3/qc/tumor/cramino_ubam/sample3_cramino.txt", - "sample3/qc/tumor/mosdepth", - "sample3/qc/tumor/mosdepth/sample3.mosdepth.global.dist.txt", - "sample3/qc/tumor/mosdepth/sample3.mosdepth.summary.txt", - "sample3/qc/tumor/samtools", - "sample3/qc/tumor/samtools/sample3.flagstat", - "sample3/qc/tumor/samtools/sample3.idxstats", - "sample3/qc/tumor/samtools/sample3.stats", - "sample3/variants", - "sample3/variants/clairsto", - "sample3/variants/clairsto/germline.vcf.gz", - "sample3/variants/clairsto/germline.vcf.gz.tbi", - "sample3/variants/clairsto/indel.vcf.gz", - "sample3/variants/clairsto/indel.vcf.gz.tbi", - "sample3/variants/clairsto/snv.vcf.gz", - "sample3/variants/clairsto/snv.vcf.gz.tbi", - "sample3/variants/clairsto/somatic.vcf.gz", - "sample3/variants/clairsto/somatic.vcf.gz.tbi", - "sample3/variants/severus", - "sample3/variants/severus/all_SVs", - "sample3/variants/severus/all_SVs/breakpoint_clusters.tsv", - "sample3/variants/severus/all_SVs/breakpoint_clusters_list.tsv", - "sample3/variants/severus/all_SVs/severus_all.vcf.gz", - "sample3/variants/severus/all_SVs/severus_all.vcf.gz.tbi", - "sample3/variants/severus/breakpoints_double.csv", - "sample3/variants/severus/read_ids.csv", - "sample3/variants/severus/read_qual.txt", - "sample3/variants/severus/severus.log", - "sample3/variants/severus/somatic_SVs", - "sample3/variants/severus/somatic_SVs/breakpoint_clusters.tsv", - "sample3/variants/severus/somatic_SVs/breakpoint_clusters_list.tsv", - "sample3/variants/severus/somatic_SVs/severus_somatic.vcf.gz", - "sample3/variants/severus/somatic_SVs/severus_somatic.vcf.gz.tbi", - "sample3/vep", - "sample3/vep/SVs", - "sample3/vep/SVs/sample3_SV_VEP.vcf.gz", - "sample3/vep/SVs/sample3_SV_VEP.vcf.gz.tbi", - "sample3/vep/SVs/sample3_SV_VEP.vcf.gz_summary.html", - "sample3/vep/germline", - "sample3/vep/germline/sample3_GERMLINE_VEP.vcf.gz", - "sample3/vep/germline/sample3_GERMLINE_VEP.vcf.gz.tbi", - "sample3/vep/germline/sample3_GERMLINE_VEP.vcf.gz_summary.html", - "sample3/vep/somatic", - "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz", - "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz.tbi", - "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" + "pipeline_info/lrsomatic_software_mqc_versions.yml" ], [ - "sample1_normal.bam:md5,7373f28eae1e18614bec4508e6647ff2", - "sample1_normal.bam.bai:md5,fc9dd46a2a04c098cee87650edec0f89", - "sample1_tumor.bam:md5,4aa78492fa890945efe2af47cbe76194", - "sample1_tumor.bam.bai:md5,75ed8b553427bbbd9bbc3c7b52982e85", - "sample1.mosdepth.global.dist.txt:md5,4e1c72f8465c18ffd854c42850eb7c5f", - "sample1.mosdepth.summary.txt:md5,cf13d4b24e5ebf31b629a1195a1fff41", - "sample1.flagstat:md5,815a5385bd57ef44847714130b80d630", - "sample1.idxstats:md5,19be02d7e966e4a291b66ab5b14742d3", - "sample1.stats:md5,f61e05f232d4b3174797d4b25bdd9457", - "sample1.mosdepth.global.dist.txt:md5,e04da37ef2b7cd587fa3158b9f36d2cb", - "sample1.mosdepth.summary.txt:md5,ef3aefa72ca2e9bbbe5acc91fc1ecde6", - "sample1.flagstat:md5,34e851b5504d961632f26991160ded5a", - "sample1.idxstats:md5,1d43b03114bcc9b70d4333e91498efbe", - "sample1.stats:md5,afdcefd9c5a69d5252fe0f9186d349fd", - "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", - "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,244b62ee8500ddccf63bf1a8eb19d7bf", - "read_qual.txt:md5,1ad9d1900f8dcb291c97adc65c9d341c", - "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", - "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample2_normal.bam:md5,c96d49ed1176c787752e7fcf23bd5ffb", - "sample2_normal.bam.bai:md5,87d97a08bdca08f6eaf2725dd114d3c3", - "sample2_tumor.bam:md5,4f375cb01fb7a7c8161474f2f789d8a4", - "sample2_tumor.bam.bai:md5,54967d76febdeb0abed1bd68d8aee337", - "sample2.mosdepth.global.dist.txt:md5,6cdc97a81a603db702cb5a113b8bc62a", - "sample2.mosdepth.summary.txt:md5,864370930ec1d695d942f4960bcf8fc6", - "sample2.flagstat:md5,cce0bb7ca79e14d8369ccc714adf4be3", - "sample2.idxstats:md5,e7de97b2362a8e944896dc4eca0b0bd8", - "sample2.stats:md5,9d98e3ec064b376880648a79c199b9b5", - "sample2.mosdepth.global.dist.txt:md5,eda3bf93b39e342e85e43931ce8b417e", - "sample2.mosdepth.summary.txt:md5,a68ca9504f5c9b73bf697d8ac22a1df0", - "sample2.flagstat:md5,83e7d7d922941691d2b023f0bd9655aa", - "sample2.idxstats:md5,fe8a5d1263481ea7902d575b4d95f655", - "sample2.stats:md5,2904de743414042e112d541ffc0f83ba", - "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", - "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,6a1d4530feae8258a925d1f0641a63ff", - "read_qual.txt:md5,27edf87814aec6fa18546c8606aae4ed", - "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", - "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "sample3_tumor.bam:md5,c80bbdcb0a6fcfe4164c6d96e6d9ad6a", - "sample3_tumor.bam.bai:md5,cdf45221635a6b03be6f28aa60b202bc", - "sample3.mosdepth.global.dist.txt:md5,e04da37ef2b7cd587fa3158b9f36d2cb", - "sample3.mosdepth.summary.txt:md5,ef3aefa72ca2e9bbbe5acc91fc1ecde6", - "sample3.flagstat:md5,34e851b5504d961632f26991160ded5a", - "sample3.idxstats:md5,1d43b03114bcc9b70d4333e91498efbe", - "sample3.stats:md5,48eb55e610bd2a6d13c5d38d3c61d29e", - "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", - "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", - "breakpoints_double.csv:md5,298a01c868eb493baaaa90ced9a9f17e", - "read_qual.txt:md5,1b4392f3b9071533e9ea77ff9df6c813", - "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", - "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" + "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" ] ], "meta": { - "nf-test": "0.9.2", - "nextflow": "25.04.6" + "nf-test": "0.9.3", + "nextflow": "25.10.0" }, - "timestamp": "2025-10-30T17:00:44.230935974" + "timestamp": "2025-11-20T13:31:18.762778941" } } \ No newline at end of file From c64acc863f04b56b825df6ce78dd2bcabd6caa8d Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Thu, 20 Nov 2025 13:46:01 +0100 Subject: [PATCH 08/20] linting fix --- nextflow.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nextflow.config b/nextflow.config index 14ecd9b8..3ef6e864 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 = '' } From 1eddb33deca7fcc3a071070b8ff2509a6e5a8301 Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Thu, 20 Nov 2025 13:48:16 +0100 Subject: [PATCH 09/20] precommit --- assets/schema_input.json | 2 +- conf/base.config | 2 +- conf/test.config | 2 +- docs/README.md | 2 +- docs/output.md | 2 +- docs/usage.md | 2 +- nextflow.config | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/assets/schema_input.json b/assets/schema_input.json index ba9344a2..89ccc0bb 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -54,4 +54,4 @@ }, "required": ["sample", "bam_tumor", "platform", "sex", "fiber"] } -} \ No newline at end of file +} diff --git a/conf/base.config b/conf/base.config index da7020bf..84625158 100644 --- a/conf/base.config +++ b/conf/base.config @@ -68,4 +68,4 @@ process { ext.use_gpu = { workflow.profile.contains('gpu') } accelerator = { workflow.profile.contains('gpu') ? 1 : null } } -} \ No newline at end of file +} diff --git a/conf/test.config b/conf/test.config index d376b95f..416ed610 100644 --- a/conf/test.config +++ b/conf/test.config @@ -34,4 +34,4 @@ params { vep_species = "caenorhabditis_elegans" skip_wakhan = true skip_ascat = true -} \ No newline at end of file +} diff --git a/docs/README.md b/docs/README.md index 936ae5c6..14889bd3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,4 +5,4 @@ The IntGenomicsLab/lrsomatic documentation is split into the following pages: - [Usage](usage.md) - An overview of how the pipeline works, how to run it and a description of all of the different command-line flags. - [Output](output.md) - - An overview of the different results produced by the pipeline and how to interpret them. \ No newline at end of file + - An overview of the different results produced by the pipeline and how to interpret them. diff --git a/docs/output.md b/docs/output.md index 2b2ee9c4..ba58d5e5 100644 --- a/docs/output.md +++ b/docs/output.md @@ -154,4 +154,4 @@ Results generated by MultiQC collate pipeline QC from supported tools e.g. FastQ
-[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. \ No newline at end of file +[Nextflow](https://www.nextflow.io/docs/latest/tracing.html) provides excellent functionality for generating various reports relevant to the running and execution of the pipeline. This will allow you to troubleshoot errors with the running of the pipeline, and also provide you with other information such as launch commands, run times and resource usage. diff --git a/docs/usage.md b/docs/usage.md index 3c496f77..e0528582 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -209,4 +209,4 @@ We recommend adding the following line to your environment to limit this (typica ```bash NXF_OPTS='-Xms1g -Xmx4g' -``` \ No newline at end of file +``` diff --git a/nextflow.config b/nextflow.config index 3ef6e864..a3eb8548 100644 --- a/nextflow.config +++ b/nextflow.config @@ -322,4 +322,4 @@ validation { } // Load modules.config for DSL2 module specific options -includeConfig 'conf/modules.config' \ No newline at end of file +includeConfig 'conf/modules.config' From a0b10e10229ebff6d7f2d27ae30b2aaf503c9f20 Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Thu, 20 Nov 2025 14:27:08 +0100 Subject: [PATCH 10/20] revert readme --- README.md | 107 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 7281c292..7dd67967 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,11 @@ # IntGenomicsLab/lrsomatic -[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/IntGenomicsLab/lrsomatic) [![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) [![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%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.5.1-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.5.1) +[![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/) +[![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/) [![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/) @@ -14,13 +13,45 @@ ## Introduction -**IntGenomicsLab/lrsomatic** is a bioinformatics pipeline that ... +**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**. - +This **end-to-end pipeline** handles the entire workflow — **from raw read processing and alignment, to comprehensive somatic variant calling**, including single nucleotide variants, indels, structural variants, copy number alterations, and modified bases. + +It can be run in both **matched tumour-normal** and **tumour-only mode**, offering flexibility depending on the users study design. + +Developed 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. + +## Pipeline summary + +**1) Pre-processing:** + +a. Raw read QC ([`cramino`](https://github.com/wdecoster/cramino)) + +b. Alignment to the reference genome ([`minimap2`](https://github.com/lh3/minimap2)) + +c. 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)) + +d. Specific for calling modified base calling ([`Modkit`](https://github.com/nanoporetech/modkit), [`Fibertools`](https://github.com/fiberseq/fibertools-rs)) + +**2i) Matched mode: small variant calling:** + +a. Calling Germline SNPs ([`Clair3`](https://github.com/HKU-BAL/Clair3)) + +b. Phasing and Haplotagging the SNPs in the normal and tumour BAM ([`LongPhase`](https://github.com/twolinin/longphase)) + +c. Calling somatic SNVs ([`ClairS`](https://github.com/HKU-BAL/ClairS)) + +**2ii) Tumour only mode: small variant calling:** + +a. Calling Germline SNPs and somatic SNVs ([`ClairS-TO`](https://github.com/HKU-BAL/ClairS-TO)) + +b. Phasing and Haplotagging germline SNPs in tumour BAM ([`LongPhase`](https://github.com/twolinin/longphase)) + +**3) Large variant calling:** + +a. Somatic structural variant calling ([`Severus`](https://github.com/KolmogorovLab/Severus)) + +b. Copy number alterion calling; long read version of ([`ASCAT`](https://github.com/VanLoo-lab/ascat)) @@ -31,26 +62,20 @@ > [!NOTE] > 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. - +Each 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. Now, you can run the pipeline using: - - ```bash nextflow run IntGenomicsLab/lrsomatic \ -profile \ @@ -63,11 +88,41 @@ nextflow run IntGenomicsLab/lrsomatic \ ## Credits -IntGenomicsLab/lrsomatic was originally written by Jonas Demeulemeester. +IntGenomicsLab/lr_somatic was originally written by Luuk Harbers, Robert Forsyth, Alexandra Pančíková, Marios Eftychiou, Ruben Cools, and Jonas Demeulemeester. + +## Pipeline output + +This 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. -We thank the following people for their extensive assistance in the development of this pipeline: +Besides 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. - +Example output directory structure: + +``` +results +| +├── multiqc +│ +├── sample1 +│ ├── bamfiles +│ ├── qc +│ │ ├── tumour +│ │ └── normal +│ ├── variants +│ │ ├── severus +│ │ └── clairs +│ └── ascat +│ +└── sample2 + ├── bamfiles + ├── qc + │ ├── tumour + │ └── normal + ├── variants + │ ├── severus + │ └── clairs + └── ascat +``` ## Contributions and Support @@ -88,4 +143,4 @@ This pipeline uses code and infrastructure developed and maintained by the [nf-c > > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > -> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). +> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). \ No newline at end of file From a5a343f76672b1194b37d997c75001b8074ae90e Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Thu, 20 Nov 2025 18:37:11 +0100 Subject: [PATCH 11/20] add disk clean up back in --- .github/workflows/nf-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/nf-test.yml b/.github/workflows/nf-test.yml index 7fd88b52..a22a97fc 100644 --- a/.github/workflows/nf-test.yml +++ b/.github/workflows/nf-test.yml @@ -87,6 +87,8 @@ jobs: 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 From 170e72bafef37da6cf28936bf4c6e12657796c3e Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Thu, 20 Nov 2025 18:39:07 +0100 Subject: [PATCH 12/20] or branch is still "main" so would keep it like it was --- .github/PULL_REQUEST_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6d5a41ed..41961fd1 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,14 +8,14 @@ These are the most common things requested on pull requests (PRs). Remember that PRs should be made against the dev branch, unless you're preparing a pipeline release. -Learn more about contributing: [CONTRIBUTING.md](https://github.com/IntGenomicsLab/lrsomatic/tree/master/.github/CONTRIBUTING.md) +Learn more about contributing: [CONTRIBUTING.md](https://github.com/IntGenomicsLab/lrsomatic/tree/main/.github/CONTRIBUTING.md) --> ## PR checklist - [ ] This comment contains a description of changes (with reason). - [ ] If you've fixed a bug or added code that should be tested, add tests! -- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/IntGenomicsLab/lrsomatic/tree/master/.github/CONTRIBUTING.md) +- [ ] If you've added a new tool - have you followed the pipeline conventions in the [contribution docs](https://github.com/IntGenomicsLab/lrsomatic/tree/main/.github/CONTRIBUTING.md) - [ ] Make sure your code lints (`nf-core pipelines lint`). - [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `). - [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `). From 815f25520c53b623a80057f0206fe758322b152e Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Thu, 20 Nov 2025 18:45:46 +0100 Subject: [PATCH 13/20] revert some changes --- .../local/utils_nfcore_lrsomatic_pipeline/main.nf | 1 - tests/.nftignore | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf index b0ef5f22..554f072f 100644 --- a/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf +++ b/subworkflows/local/utils_nfcore_lrsomatic_pipeline/main.nf @@ -112,7 +112,6 @@ workflow PIPELINE_INITIALISATION { } .set { ch_samplesheet } - // ch_samplesheet -> meta: [id, paired_data, platform, sex, type] // bam: unaligned bams diff --git a/tests/.nftignore b/tests/.nftignore index 83f7a0a5..9651e78a 100644 --- a/tests/.nftignore +++ b/tests/.nftignore @@ -7,4 +7,14 @@ 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 +multiqc/multiqc_plots/{pdf,svg,png}/*.{png,svg,pdf} pipeline_info/*.{html,json,txt,yml} +*/vep/{SVs,germline,somatic}/*.{vcf.gz,html,vcf.gz.tbi} +*/variants/clair3/merge_output.{vcf.gz,vcf.gz.tbi} +*/variants/clairs/*.{vcf.gz,vcf.gz.tbi} +*/variants/clairsto/*.{vcf.gz,vcf.gz.tbi} +*/variants/severus/read_ids.csv +*/variants/severus/severus.log +*/variants/severus/{all_SVs,somatic_SVs}/*.{vcf.gz,vcf.gz.tbi} +*/qc/{tumor,normal}/{cramino_ubam,cramino_aln}/*_cramino.txt From 14d4b7b72e288e5cdcdf8e778545aef57a1752ef Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Thu, 20 Nov 2025 18:53:24 +0100 Subject: [PATCH 14/20] revert more --- nextflow_schema.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index f33141b9..93909e90 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -53,7 +53,8 @@ "type": "string", "description": "Name of iGenomes reference.", "fa_icon": "fas fa-book", - "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details." + "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details.", + "enum": ["GRCh38", "CHM13"] }, "fasta": { "type": "string", @@ -62,7 +63,7 @@ "mimetype": "text/plain", "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", "description": "Path to FASTA genome file.", - "help_text": "This parameter is *mandatory* if `--genome` is not specified. If you don't have a BWA index available this will be generated for you automatically. Combine with `--save_reference` to save BWA index for future runs.", + "help_text": "This parameter is *mandatory* if `--genome` is not specified.", "fa_icon": "far fa-file-code" }, "igenomes_ignore": { From ccd84a1056fe017eb1f5666e7ec50db59183c036 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Thu, 20 Nov 2025 19:02:10 +0100 Subject: [PATCH 15/20] linting and nextflow badge --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7dd67967..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/) @@ -143,4 +143,4 @@ This pipeline uses code and infrastructure developed and maintained by the [nf-c > > Philip Ewels, Alexander Peltzer, Sven Fillinger, Harshil Patel, Johannes Alneberg, Andreas Wilm, Maxime Ulysse Garcia, Paolo Di Tommaso & Sven Nahnsen. > -> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). \ No newline at end of file +> _Nat Biotechnol._ 2020 Feb 13. doi: [10.1038/s41587-020-0439-x](https://dx.doi.org/10.1038/s41587-020-0439-x). From b60d5f4a91ed1771c0225cfd8b03a5ab0e386790 Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Mon, 24 Nov 2025 11:17:39 +0100 Subject: [PATCH 16/20] Update JSON schema --- nextflow_schema.json | 168 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 147 insertions(+), 21 deletions(-) diff --git a/nextflow_schema.json b/nextflow_schema.json index 93909e90..12dabb38 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "$id": "https://raw.githubusercontent.com/IntGenomicsLab/lrsomatic/master/nextflow_schema.json", + "$id": "https://raw.githubusercontent.com/IntGenomicsLab/lrsomatic/main/nextflow_schema.json", "title": "IntGenomicsLab/lrsomatic pipeline parameters", "description": "Workflow for somatic variant calling of long read data", "type": "object", @@ -56,16 +56,6 @@ "help_text": "If using a reference genome configured in the pipeline using iGenomes, use this parameter to give the ID for the reference. This is then used to build the full paths for all required reference genome files e.g. `--genome GRCh38`. \n\nSee the [nf-core website docs](https://nf-co.re/usage/reference_genomes) for more details.", "enum": ["GRCh38", "CHM13"] }, - "fasta": { - "type": "string", - "format": "file-path", - "exists": true, - "mimetype": "text/plain", - "pattern": "^\\S+\\.fn?a(sta)?(\\.gz)?$", - "description": "Path to FASTA genome file.", - "help_text": "This parameter is *mandatory* if `--genome` is not specified.", - "fa_icon": "far fa-file-code" - }, "igenomes_ignore": { "type": "boolean", "description": "Do not load the iGenomes reference config.", @@ -80,6 +70,138 @@ "fa_icon": "fas fa-ban", "hidden": true, "default": "s3://ngi-igenomes/igenomes/" + }, + "vep_cache": { + "type": "string", + "description": "Path to VEP cache directory.", + "fa_icon": "fas fa-database", + "help_text": "Path to the directory containing the VEP cache. If you are using an iGenomes reference, this will be set automatically. Otherwise, you will need to provide this path yourself." + }, + "vep_cache_version": { + "type": "integer", + "description": "Version of the VEP cache to use.", + "fa_icon": "fas fa-hashtag", + "help_text": "The version of the VEP cache to use. This should match the version of VEP being used." + }, + "vep_args": { + "type": "string", + "description": "Additional command line arguments to pass to VEP.", + "fa_icon": "fas fa-terminal" + } + } + }, + "minimap2_options": { + "title": "minimap2 options", + "type": "object", + "description": "", + "default": "", + "properties": { + "minimap2_ont_model": { + "type": "string", + "description": "Minimap ont model to use" + }, + "minimap2_pb_model": { + "type": "string", + "description": "Minimap Pacbio model to use" + }, + "save_secondary_alignment": { + "type": "boolean", + "default": true, + "description": "Whether to save secondary alignments" + } + } + }, + "ascat_parameters": { + "title": "ASCAT parameters", + "type": "object", + "description": "ASCAT specific parameters", + "default": "", + "properties": { + "ascat_ploidy": { + "type": "string", + "description": "Enforce a ploidy" + }, + "ascat_purity": { + "type": "string", + "description": "Enforce a purity" + }, + "ascat_penalty": { + "type": "integer", + "default": 150, + "description": "Penalty value" + }, + "ascat_min_base_qual": { + "type": "integer", + "default": 20, + "description": "Minimum base quality for allelecounter" + }, + "ascat_min_counts": { + "type": "integer", + "default": 10, + "description": "Minimum counts for allelecounter" + }, + "ascat_min_map_qual": { + "type": "integer", + "default": 10, + "description": "Minimum mapping quality for allelecounter" + }, + "ascat_longread_bins": { + "type": "integer", + "default": 2000, + "description": "Binsize for long-read" + }, + "ascat_allelecounter_flags": { + "type": "string", + "default": "-f 0", + "description": "Additional allelecounter flags to use" + }, + "ascat_chroms": { + "type": "string", + "description": "Chromosomes to process (automatically inferred, only use if you want to run on a subset)" + }, + "ascat_gc_files": { + "type": "string", + "description": "Path to (zip) of GC files" + }, + "ascat_rt_files": { + "type": "string", + "description": "path to (zip) of RT files" + } + } + }, + "skip_options": { + "title": "Skip options", + "type": "object", + "description": "Define whether to skip certain steps", + "default": "", + "properties": { + "skip_qc": { + "type": "boolean", + "description": "Skips all QC steps" + }, + "skip_cramino": { + "type": "boolean", + "description": "Skips Cramino" + }, + "skip_mosdepth": { + "type": "boolean", + "description": "Skips Mosdepth" + }, + "skip_bamstats": { + "type": "boolean", + "description": "Skips samtools flagstat, stats, and idxstats" + }, + "skip_wakhan": { + "type": "boolean", + "description": "Skips wakhan" + }, + "skip_fiber": { + "type": "boolean", + "description": "Skip Fibertools steps" + }, + "skip_ascat": { + "type": "boolean", + "description": "Skip ASCAT" } } }, @@ -226,17 +348,12 @@ "description": "Suffix to add to the trace report filename. Default is the date and time in the format yyyy-MM-dd_HH-mm-ss.", "hidden": true }, - "help": { - "type": ["boolean", "string"], - "description": "Display the help message." - }, - "help_full": { - "type": "boolean", - "description": "Display the full detailed help message." - }, - "show_hidden": { + "normal_fiber": { "type": "boolean", - "description": "Display hidden parameters in the help message (only works when --help or --help_full are provided)." + "default": true, + "description": "do fiber-seq on normal samples", + "fa_icon": "fas fa-fiber", + "hidden": true } } } @@ -248,6 +365,15 @@ { "$ref": "#/$defs/reference_genome_options" }, + { + "$ref": "#/$defs/minimap2_options" + }, + { + "$ref": "#/$defs/ascat_parameters" + }, + { + "$ref": "#/$defs/skip_options" + }, { "$ref": "#/$defs/institutional_config_options" }, From 67b6f9abcb49fabb07463e50c45ab550b0b0850f Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Tue, 25 Nov 2025 12:35:17 +0100 Subject: [PATCH 17/20] update test snap --- tests/default.nf.test.snap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index cf34b7ac..ab9930e7 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -21,13 +21,13 @@ "pipeline_info/lrsomatic_software_mqc_versions.yml" ], [ - "multiqc_citations.txt:md5,4c806e63a283ec1b7e78cdae3a923d4f" + ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-20T13:31:18.762778941" + "timestamp": "2025-11-25T12:33:14.698235309" } } \ No newline at end of file From cffc36f26e597da4867d1d91df5c07391810713e Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Tue, 25 Nov 2025 13:15:08 +0100 Subject: [PATCH 18/20] update snap --- tests/default.nf.test.snap | 345 ++++++++++++++++++++- workflows/lrsomatic.nf | 619 +++++++++++++++++++++++++++++++++++-- 2 files changed, 931 insertions(+), 33 deletions(-) diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index ab9930e7..f46ed4f1 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -2,6 +2,79 @@ "-profile test": { "content": [ { + "CLAIR3": { + "clair3": "1.2.0" + }, + "CLAIRS": { + "clairs": "0.4.1" + }, + "CLAIRSTO": { + "clairsto": "0.4.0" + }, + "CRAMINO_POST": { + "cramino": "1.0.0" + }, + "CRAMINO_PRE": { + "cramino": "1.0.0" + }, + "GERMLINE_VEP": { + "ensemblvep": 114.2, + "tabix": 1.21 + }, + "LONGPHASE_HAPLOTAG": { + "longphase": "1.7.3" + }, + "LONGPHASE_PHASE": { + "longphase": "1.7.3" + }, + "METAEXTRACT": { + "samtools": 1.21 + }, + "MINIMAP2_ALIGN": { + "minimap2": "2.29-r1283", + "samtools": 1.21 + }, + "MOSDEPTH": { + "mosdepth": "0.3.10" + }, + "SAMTOOLS_FAIDX": { + "samtools": 1.21 + }, + "SAMTOOLS_FLAGSTAT": { + "samtools": 1.21 + }, + "SAMTOOLS_IDXSTATS": { + "samtools": 1.21 + }, + "SAMTOOLS_INDEX": { + "samtools": 1.21 + }, + "SAMTOOLS_STATS": { + "samtools": 1.21 + }, + "SEVERUS": { + "severus": 1.6 + }, + "SOMATIC_VEP": { + "ensemblvep": 114.2, + "tabix": 1.21 + }, + "SV_VEP": { + "ensemblvep": 114.2, + "tabix": 1.21 + }, + "UNTAR": { + "untar": 1.34 + }, + "UNZIP_FASTA": { + "pigz": 2.8 + }, + "VCFSPLIT": { + "vcfsplit": 1.2 + }, + "WGET": { + "wget": "1.21.4" + }, "Workflow": { "IntGenomicsLab/lrsomatic": "v1.0.0dev" } @@ -10,24 +83,290 @@ "multiqc", "multiqc/multiqc_data", "multiqc/multiqc_data/llms-full.txt", + "multiqc/multiqc_data/mosdepth-coverage-per-contig-single.txt", + "multiqc/multiqc_data/mosdepth-cumcoverage-dist-id.txt", + "multiqc/multiqc_data/mosdepth_cov_dist.txt", + "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", "multiqc/multiqc_data/multiqc_software_versions.txt", "multiqc/multiqc_data/multiqc_sources.txt", + "multiqc/multiqc_plots", + "multiqc/multiqc_plots/pdf", + "multiqc/multiqc_plots/pdf/mosdepth-coverage-per-contig-single-cnt.pdf", + "multiqc/multiqc_plots/pdf/mosdepth-coverage-per-contig-single-pct.pdf", + "multiqc/multiqc_plots/pdf/mosdepth-cumcoverage-dist-id.pdf", + "multiqc/multiqc_plots/png", + "multiqc/multiqc_plots/png/mosdepth-coverage-per-contig-single-cnt.png", + "multiqc/multiqc_plots/png/mosdepth-coverage-per-contig-single-pct.png", + "multiqc/multiqc_plots/png/mosdepth-cumcoverage-dist-id.png", + "multiqc/multiqc_plots/svg", + "multiqc/multiqc_plots/svg/mosdepth-coverage-per-contig-single-cnt.svg", + "multiqc/multiqc_plots/svg/mosdepth-coverage-per-contig-single-pct.svg", + "multiqc/multiqc_plots/svg/mosdepth-cumcoverage-dist-id.svg", "multiqc/multiqc_report.html", "pipeline_info", - "pipeline_info/lrsomatic_software_mqc_versions.yml" + "pipeline_info/lrsomatic_software_mqc_versions.yml", + "sample1", + "sample1/bamfiles", + "sample1/bamfiles/sample1_normal.bam", + "sample1/bamfiles/sample1_normal.bam.bai", + "sample1/bamfiles/sample1_tumor.bam", + "sample1/bamfiles/sample1_tumor.bam.bai", + "sample1/qc", + "sample1/qc/normal", + "sample1/qc/normal/cramino_aln", + "sample1/qc/normal/cramino_aln/sample1_cramino.txt", + "sample1/qc/normal/cramino_ubam", + "sample1/qc/normal/cramino_ubam/sample1_cramino.txt", + "sample1/qc/normal/mosdepth", + "sample1/qc/normal/mosdepth/sample1.mosdepth.global.dist.txt", + "sample1/qc/normal/mosdepth/sample1.mosdepth.summary.txt", + "sample1/qc/normal/samtools", + "sample1/qc/normal/samtools/sample1.flagstat", + "sample1/qc/normal/samtools/sample1.idxstats", + "sample1/qc/normal/samtools/sample1.stats", + "sample1/qc/tumor", + "sample1/qc/tumor/cramino_aln", + "sample1/qc/tumor/cramino_aln/sample1_cramino.txt", + "sample1/qc/tumor/cramino_ubam", + "sample1/qc/tumor/cramino_ubam/sample1_cramino.txt", + "sample1/qc/tumor/mosdepth", + "sample1/qc/tumor/mosdepth/sample1.mosdepth.global.dist.txt", + "sample1/qc/tumor/mosdepth/sample1.mosdepth.summary.txt", + "sample1/qc/tumor/samtools", + "sample1/qc/tumor/samtools/sample1.flagstat", + "sample1/qc/tumor/samtools/sample1.idxstats", + "sample1/qc/tumor/samtools/sample1.stats", + "sample1/variants", + "sample1/variants/clair3", + "sample1/variants/clair3/merge_output.vcf.gz", + "sample1/variants/clair3/merge_output.vcf.gz.tbi", + "sample1/variants/clairs", + "sample1/variants/clairs/indel.vcf.gz", + "sample1/variants/clairs/indel.vcf.gz.tbi", + "sample1/variants/clairs/sample1.vcf.gz", + "sample1/variants/clairs/sample1.vcf.gz.tbi", + "sample1/variants/clairs/snv.vcf.gz", + "sample1/variants/clairs/snv.vcf.gz.tbi", + "sample1/variants/severus", + "sample1/variants/severus/all_SVs", + "sample1/variants/severus/all_SVs/breakpoint_clusters.tsv", + "sample1/variants/severus/all_SVs/breakpoint_clusters_list.tsv", + "sample1/variants/severus/all_SVs/severus_all.vcf.gz", + "sample1/variants/severus/all_SVs/severus_all.vcf.gz.tbi", + "sample1/variants/severus/breakpoints_double.csv", + "sample1/variants/severus/read_ids.csv", + "sample1/variants/severus/read_qual.txt", + "sample1/variants/severus/severus.log", + "sample1/variants/severus/somatic_SVs", + "sample1/variants/severus/somatic_SVs/breakpoint_clusters.tsv", + "sample1/variants/severus/somatic_SVs/breakpoint_clusters_list.tsv", + "sample1/variants/severus/somatic_SVs/severus_somatic.vcf.gz", + "sample1/variants/severus/somatic_SVs/severus_somatic.vcf.gz.tbi", + "sample1/vep", + "sample1/vep/SVs", + "sample1/vep/SVs/sample1_SV_VEP.vcf.gz", + "sample1/vep/SVs/sample1_SV_VEP.vcf.gz.tbi", + "sample1/vep/SVs/sample1_SV_VEP.vcf.gz_summary.html", + "sample1/vep/germline", + "sample1/vep/germline/sample1_GERMLINE_VEP.vcf.gz", + "sample1/vep/germline/sample1_GERMLINE_VEP.vcf.gz.tbi", + "sample1/vep/germline/sample1_GERMLINE_VEP.vcf.gz_summary.html", + "sample1/vep/somatic", + "sample1/vep/somatic/sample1_SOMATIC_VEP.vcf.gz", + "sample1/vep/somatic/sample1_SOMATIC_VEP.vcf.gz.tbi", + "sample1/vep/somatic/sample1_SOMATIC_VEP.vcf.gz_summary.html", + "sample2", + "sample2/bamfiles", + "sample2/bamfiles/sample2_normal.bam", + "sample2/bamfiles/sample2_normal.bam.bai", + "sample2/bamfiles/sample2_tumor.bam", + "sample2/bamfiles/sample2_tumor.bam.bai", + "sample2/qc", + "sample2/qc/normal", + "sample2/qc/normal/cramino_aln", + "sample2/qc/normal/cramino_aln/sample2_cramino.txt", + "sample2/qc/normal/cramino_ubam", + "sample2/qc/normal/cramino_ubam/sample2_cramino.txt", + "sample2/qc/normal/mosdepth", + "sample2/qc/normal/mosdepth/sample2.mosdepth.global.dist.txt", + "sample2/qc/normal/mosdepth/sample2.mosdepth.summary.txt", + "sample2/qc/normal/samtools", + "sample2/qc/normal/samtools/sample2.flagstat", + "sample2/qc/normal/samtools/sample2.idxstats", + "sample2/qc/normal/samtools/sample2.stats", + "sample2/qc/tumor", + "sample2/qc/tumor/cramino_aln", + "sample2/qc/tumor/cramino_aln/sample2_cramino.txt", + "sample2/qc/tumor/cramino_ubam", + "sample2/qc/tumor/cramino_ubam/sample2_cramino.txt", + "sample2/qc/tumor/mosdepth", + "sample2/qc/tumor/mosdepth/sample2.mosdepth.global.dist.txt", + "sample2/qc/tumor/mosdepth/sample2.mosdepth.summary.txt", + "sample2/qc/tumor/samtools", + "sample2/qc/tumor/samtools/sample2.flagstat", + "sample2/qc/tumor/samtools/sample2.idxstats", + "sample2/qc/tumor/samtools/sample2.stats", + "sample2/variants", + "sample2/variants/clair3", + "sample2/variants/clair3/merge_output.vcf.gz", + "sample2/variants/clair3/merge_output.vcf.gz.tbi", + "sample2/variants/clairs", + "sample2/variants/clairs/indel.vcf.gz", + "sample2/variants/clairs/indel.vcf.gz.tbi", + "sample2/variants/clairs/sample2.vcf.gz", + "sample2/variants/clairs/sample2.vcf.gz.tbi", + "sample2/variants/clairs/snv.vcf.gz", + "sample2/variants/clairs/snv.vcf.gz.tbi", + "sample2/variants/severus", + "sample2/variants/severus/all_SVs", + "sample2/variants/severus/all_SVs/breakpoint_clusters.tsv", + "sample2/variants/severus/all_SVs/breakpoint_clusters_list.tsv", + "sample2/variants/severus/all_SVs/severus_all.vcf.gz", + "sample2/variants/severus/all_SVs/severus_all.vcf.gz.tbi", + "sample2/variants/severus/breakpoints_double.csv", + "sample2/variants/severus/read_ids.csv", + "sample2/variants/severus/read_qual.txt", + "sample2/variants/severus/severus.log", + "sample2/variants/severus/somatic_SVs", + "sample2/variants/severus/somatic_SVs/breakpoint_clusters.tsv", + "sample2/variants/severus/somatic_SVs/breakpoint_clusters_list.tsv", + "sample2/variants/severus/somatic_SVs/severus_somatic.vcf.gz", + "sample2/variants/severus/somatic_SVs/severus_somatic.vcf.gz.tbi", + "sample2/vep", + "sample2/vep/SVs", + "sample2/vep/SVs/sample2_SV_VEP.vcf.gz", + "sample2/vep/SVs/sample2_SV_VEP.vcf.gz.tbi", + "sample2/vep/SVs/sample2_SV_VEP.vcf.gz_summary.html", + "sample2/vep/germline", + "sample2/vep/germline/sample2_GERMLINE_VEP.vcf.gz", + "sample2/vep/germline/sample2_GERMLINE_VEP.vcf.gz.tbi", + "sample2/vep/germline/sample2_GERMLINE_VEP.vcf.gz_summary.html", + "sample2/vep/somatic", + "sample2/vep/somatic/sample2_SOMATIC_VEP.vcf.gz", + "sample2/vep/somatic/sample2_SOMATIC_VEP.vcf.gz.tbi", + "sample2/vep/somatic/sample2_SOMATIC_VEP.vcf.gz_summary.html", + "sample3", + "sample3/bamfiles", + "sample3/bamfiles/sample3_tumor.bam", + "sample3/bamfiles/sample3_tumor.bam.bai", + "sample3/qc", + "sample3/qc/tumor", + "sample3/qc/tumor/cramino_aln", + "sample3/qc/tumor/cramino_aln/sample3_cramino.txt", + "sample3/qc/tumor/cramino_ubam", + "sample3/qc/tumor/cramino_ubam/sample3_cramino.txt", + "sample3/qc/tumor/mosdepth", + "sample3/qc/tumor/mosdepth/sample3.mosdepth.global.dist.txt", + "sample3/qc/tumor/mosdepth/sample3.mosdepth.summary.txt", + "sample3/qc/tumor/samtools", + "sample3/qc/tumor/samtools/sample3.flagstat", + "sample3/qc/tumor/samtools/sample3.idxstats", + "sample3/qc/tumor/samtools/sample3.stats", + "sample3/variants", + "sample3/variants/clairsto", + "sample3/variants/clairsto/germline.vcf.gz", + "sample3/variants/clairsto/germline.vcf.gz.tbi", + "sample3/variants/clairsto/indel.vcf.gz", + "sample3/variants/clairsto/indel.vcf.gz.tbi", + "sample3/variants/clairsto/snv.vcf.gz", + "sample3/variants/clairsto/snv.vcf.gz.tbi", + "sample3/variants/clairsto/somatic.vcf.gz", + "sample3/variants/clairsto/somatic.vcf.gz.tbi", + "sample3/variants/severus", + "sample3/variants/severus/all_SVs", + "sample3/variants/severus/all_SVs/breakpoint_clusters.tsv", + "sample3/variants/severus/all_SVs/breakpoint_clusters_list.tsv", + "sample3/variants/severus/all_SVs/severus_all.vcf.gz", + "sample3/variants/severus/all_SVs/severus_all.vcf.gz.tbi", + "sample3/variants/severus/breakpoints_double.csv", + "sample3/variants/severus/read_ids.csv", + "sample3/variants/severus/read_qual.txt", + "sample3/variants/severus/severus.log", + "sample3/variants/severus/somatic_SVs", + "sample3/variants/severus/somatic_SVs/breakpoint_clusters.tsv", + "sample3/variants/severus/somatic_SVs/breakpoint_clusters_list.tsv", + "sample3/variants/severus/somatic_SVs/severus_somatic.vcf.gz", + "sample3/variants/severus/somatic_SVs/severus_somatic.vcf.gz.tbi", + "sample3/vep", + "sample3/vep/SVs", + "sample3/vep/SVs/sample3_SV_VEP.vcf.gz", + "sample3/vep/SVs/sample3_SV_VEP.vcf.gz.tbi", + "sample3/vep/SVs/sample3_SV_VEP.vcf.gz_summary.html", + "sample3/vep/germline", + "sample3/vep/germline/sample3_GERMLINE_VEP.vcf.gz", + "sample3/vep/germline/sample3_GERMLINE_VEP.vcf.gz.tbi", + "sample3/vep/germline/sample3_GERMLINE_VEP.vcf.gz_summary.html", + "sample3/vep/somatic", + "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz", + "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz.tbi", + "sample3/vep/somatic/sample3_SOMATIC_VEP.vcf.gz_summary.html" ], [ - + "sample1_normal.bam:md5,7373f28eae1e18614bec4508e6647ff2", + "sample1_normal.bam.bai:md5,fc9dd46a2a04c098cee87650edec0f89", + "sample1_tumor.bam:md5,4aa78492fa890945efe2af47cbe76194", + "sample1_tumor.bam.bai:md5,75ed8b553427bbbd9bbc3c7b52982e85", + "sample1.mosdepth.global.dist.txt:md5,4e1c72f8465c18ffd854c42850eb7c5f", + "sample1.mosdepth.summary.txt:md5,cf13d4b24e5ebf31b629a1195a1fff41", + "sample1.flagstat:md5,815a5385bd57ef44847714130b80d630", + "sample1.idxstats:md5,19be02d7e966e4a291b66ab5b14742d3", + "sample1.stats:md5,f61e05f232d4b3174797d4b25bdd9457", + "sample1.mosdepth.global.dist.txt:md5,e04da37ef2b7cd587fa3158b9f36d2cb", + "sample1.mosdepth.summary.txt:md5,ef3aefa72ca2e9bbbe5acc91fc1ecde6", + "sample1.flagstat:md5,34e851b5504d961632f26991160ded5a", + "sample1.idxstats:md5,1d43b03114bcc9b70d4333e91498efbe", + "sample1.stats:md5,afdcefd9c5a69d5252fe0f9186d349fd", + "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", + "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", + "breakpoints_double.csv:md5,244b62ee8500ddccf63bf1a8eb19d7bf", + "read_qual.txt:md5,1ad9d1900f8dcb291c97adc65c9d341c", + "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", + "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", + "sample2_normal.bam:md5,c96d49ed1176c787752e7fcf23bd5ffb", + "sample2_normal.bam.bai:md5,87d97a08bdca08f6eaf2725dd114d3c3", + "sample2_tumor.bam:md5,4f375cb01fb7a7c8161474f2f789d8a4", + "sample2_tumor.bam.bai:md5,54967d76febdeb0abed1bd68d8aee337", + "sample2.mosdepth.global.dist.txt:md5,6cdc97a81a603db702cb5a113b8bc62a", + "sample2.mosdepth.summary.txt:md5,864370930ec1d695d942f4960bcf8fc6", + "sample2.flagstat:md5,cce0bb7ca79e14d8369ccc714adf4be3", + "sample2.idxstats:md5,e7de97b2362a8e944896dc4eca0b0bd8", + "sample2.stats:md5,9d98e3ec064b376880648a79c199b9b5", + "sample2.mosdepth.global.dist.txt:md5,eda3bf93b39e342e85e43931ce8b417e", + "sample2.mosdepth.summary.txt:md5,a68ca9504f5c9b73bf697d8ac22a1df0", + "sample2.flagstat:md5,83e7d7d922941691d2b023f0bd9655aa", + "sample2.idxstats:md5,fe8a5d1263481ea7902d575b4d95f655", + "sample2.stats:md5,2904de743414042e112d541ffc0f83ba", + "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", + "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", + "breakpoints_double.csv:md5,6a1d4530feae8258a925d1f0641a63ff", + "read_qual.txt:md5,27edf87814aec6fa18546c8606aae4ed", + "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", + "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", + "sample3_tumor.bam:md5,c80bbdcb0a6fcfe4164c6d96e6d9ad6a", + "sample3_tumor.bam.bai:md5,cdf45221635a6b03be6f28aa60b202bc", + "sample3.mosdepth.global.dist.txt:md5,e04da37ef2b7cd587fa3158b9f36d2cb", + "sample3.mosdepth.summary.txt:md5,ef3aefa72ca2e9bbbe5acc91fc1ecde6", + "sample3.flagstat:md5,34e851b5504d961632f26991160ded5a", + "sample3.idxstats:md5,1d43b03114bcc9b70d4333e91498efbe", + "sample3.stats:md5,48eb55e610bd2a6d13c5d38d3c61d29e", + "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", + "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50", + "breakpoints_double.csv:md5,298a01c868eb493baaaa90ced9a9f17e", + "read_qual.txt:md5,1b4392f3b9071533e9ea77ff9df6c813", + "breakpoint_clusters.tsv:md5,d36a70de292ee130ef30da4a58bced18", + "breakpoint_clusters_list.tsv:md5,0c0ce62e329f8de492487e8414c30a50" ] ], "meta": { "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-11-25T12:33:14.698235309" + "timestamp": "2025-11-25T13:09:28.07662315" } } \ No newline at end of file diff --git a/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index 9748f8a2..7b56a332 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -8,6 +8,40 @@ include { paramsSummaryMap } from 'plugin/nf-schema' include { paramsSummaryMultiqc } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { softwareVersionsToYAML } from '../subworkflows/nf-core/utils_nfcore_pipeline' include { methodsDescriptionText } from '../subworkflows/local/utils_nfcore_lrsomatic_pipeline' +include { getGenomeAttribute } from '../subworkflows/local/utils_nfcore_lrsomatic_pipeline' + +// +// IMPORT MODULES +// +include { SAMTOOLS_CAT } from '../modules/nf-core/samtools/cat/main' +include { MINIMAP2_INDEX } from '../modules/nf-core/minimap2/index/main' +include { MINIMAP2_ALIGN } from '../modules/nf-core/minimap2/align/main' +include { CRAMINO as CRAMINO_PRE } from '../modules/local/cramino/main' +include { CRAMINO as CRAMINO_POST } from '../modules/local/cramino/main' +include { MOSDEPTH } from '../modules/nf-core/mosdepth/main' +include { ASCAT } from '../modules/nf-core/ascat/main' +include { SEVERUS } from '../modules/nf-core/severus/main.nf' +include { METAEXTRACT } from '../modules/local/metaextract/main' +include { WAKHAN } from '../modules/local/wakhan/main' +include { FIBERTOOLSRS_PREDICTM6A } from '../modules/local/fibertoolsrs/predictm6a' +include { FIBERTOOLSRS_FIRE } from '../modules/local/fibertoolsrs/fire' +include { FIBERTOOLSRS_NUCLEOSOMES } from '../modules/local/fibertoolsrs/nucleosomes' +include { FIBERTOOLSRS_QC } from '../modules/local/fibertoolsrs/qc' +include { ENSEMBLVEP_VEP as SOMATIC_VEP } from '../modules/nf-core/ensemblvep/vep/main.nf' +include { ENSEMBLVEP_VEP as GERMLINE_VEP } from '../modules/nf-core/ensemblvep/vep/main.nf' +include { ENSEMBLVEP_VEP as SV_VEP } from '../modules/nf-core/ensemblvep/vep/main.nf' +// +// IMPORT SUBWORKFLOWS +// +include { PREPARE_REFERENCE_FILES } from '../subworkflows/local/prepare_reference_files' +include { PREPARE_ANNOTATION } from '../subworkflows/local/prepare_annotation' +include { BAM_STATS_SAMTOOLS } from '../subworkflows/nf-core/bam_stats_samtools/main' +include { TUMOR_NORMAL_HAPPHASE } from '../subworkflows/local/tumor_normal_happhase' +include { TUMOR_ONLY_HAPPHASE } from '../subworkflows/local/tumor_only_happhase' + + + + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -19,33 +53,546 @@ workflow LRSOMATIC { take: ch_samplesheet // channel: samplesheet read in from --input + // Channel format is [[meta], [bam]]. + // Where [meta] is [id, paired_data, method, specs, type] + main: - ch_versions = channel.empty() - ch_multiqc_files = channel.empty() + def clair3_modelMap = [ + 'dna_r10.4.1_e8.2_400bps_sup@v5.2.0': 'r1041_e82_400bps_sup_v520', + 'dna_r10.4.1_e8.2_400bps_sup@v5.0.0': 'r1041_e82_400bps_sup_v500', + 'dna_r10.4.1_e8.2_400bps_sup@v4.3.0': 'r1041_e82_400bps_sup_v430', + 'dna_r10.4.1_e8.2_400bps_sup@v4.2.0': 'r1041_e82_400bps_sup_v420', + 'dna_r10.4.1_e8.2_400bps_sup@v4.1.0': 'r1041_e82_400bps_sup_v410', + 'dna_r10.4.1_e8.2_260bps_sup@v4.0.0': 'r1041_e82_260bps_sup_v400', + 'hifi_revio' : 'hifi_revio' + ] + + def clairs_modelMap = [ + 'dna_r10.4.1_e8.2_260bps_sup@v4.0.0': 'ont_r10_dorado_sup_4khz', + 'dna_r10.4.1_e8.2_400bps_sup@v4.1.0': 'ont_r10_dorado_sup_4khz', + 'dna_r10.4.1_e8.2_400bps_sup@v4.2.0': 'ont_r10_dorado_sup_5khz_ssrs', + 'dna_r10.4.1_e8.2_400bps_sup@v4.3.0': 'ont_r10_dorado_sup_5khz_ssrs', + 'dna_r10.4.1_e8.2_400bps_sup@v5.0.0': 'ont_r10_dorado_sup_5khz_ssrs', + 'dna_r10.4.1_e8.2_400bps_sup@v5.2.0': 'ont_r10_dorado_sup_5khz_ssrs', + 'hifi_revio' : 'hifi_revio_ss' + + ] + + // Load in igenomes + params.fasta = getGenomeAttribute('fasta') + params.genome_name = getGenomeAttribute('genome_name') + params.ascat_allele_files = getGenomeAttribute('ascat_alleles') + params.ascat_loci_files = getGenomeAttribute('ascat_loci') + params.centromere_bed = getGenomeAttribute('centromere_bed') + params.pon_file = getGenomeAttribute('pon_file') + params.bed_file = getGenomeAttribute('bed_file') + params.vep_genome = getGenomeAttribute('vep_genome') + params.vep_species = getGenomeAttribute('vep_species') + params.dbsnp = getGenomeAttribute('dbsnp') + params.colors = getGenomeAttribute('colors') + params.onekgenomes = getGenomeAttribute('onekgenomes') + params.gnomad = getGenomeAttribute('gnomad') + + ch_versions = Channel.empty() + ch_multiqc_files = Channel.empty() // - // Collate and save software versions + // MODULE: METAEXTRACT + // + // extracts the base calling model from the bam files + + METAEXTRACT( ch_samplesheet ) + + ch_versions = ch_versions.mix(METAEXTRACT.out.versions) + basecall_meta = METAEXTRACT.out.meta_ext + // Adds the base calling model to meta.basecall_model + + ch_samplesheet + .join(basecall_meta) + .map { meta, bam, basecall_model_meta, kinetics_meta -> + def meta_new = meta + [ basecall_model: basecall_model_meta, kinetics: kinetics_meta] + return[ meta_new, bam ] + } + .groupTuple() + .map { meta, bam -> + [ meta, bam.flatten()] + } + .set{ch_samplesheet} + + + + // ch_samplesheet -> meta: [id, paired_data, platform, sex, type, fiber, basecall_model] + // bam: list of unaligned bams + + ch_split = ch_samplesheet + .branch { meta, bam -> + single: bam.size() == 1 + multiple: bam.size() > 1 + } + + // + // MODULE: SAMTOOLS_CAT + // + // concatenates bam files from single sample + + SAMTOOLS_CAT ( ch_split.multiple ) + .bam + .mix ( ch_split.single ) + .set { ch_cat_ubams } + + + // ch_cat_ubams -> meta: [id, paired_data, platform, sex, type, fiber, basecall_model] + // bam: list of concatenated unaligned bams + + ch_versions = ch_versions.mix(SAMTOOLS_CAT.out.versions) + + // + // MODULE: CRAMINO + // + // QC the unaligned bams + if (!params.skip_qc && !params.skip_cramino) { + + CRAMINO_PRE ( ch_cat_ubams ) + + ch_versions = ch_versions.mix(CRAMINO_PRE.out.versions) + } + + + // + // SUBWORKFLOW: PREPARE_REFERENCE_FILES + // + + PREPARE_REFERENCE_FILES ( + params.fasta, + params.ascat_allele_files, + params.ascat_loci_files, + params.ascat_gc_files, + params.ascat_rt_files, + basecall_meta, + clair3_modelMap + ) + + vep_cache = Channel.empty() + + if (!params.skip_vep) { + + Channel + .of([ + vep_cache: params.vep_cache, + vep_cache_version: params.vep_cache_version, + vep_genome: params.vep_genome, + vep_args: params.vep_args, + vep_species: params.vep_species, + download_vep_cache: params.download_vep_cache + ]) + + PREPARE_ANNOTATION ( + params.vep_cache, + params.vep_cache_version, + params.vep_genome, + params.vep_args, + params.vep_species, + params.download_vep_cache + ) + ch_versions = ch_versions.mix(PREPARE_ANNOTATION.out.versions) + vep_cache = PREPARE_ANNOTATION.out.vep_cache + + } + + ch_versions = ch_versions.mix(PREPARE_REFERENCE_FILES.out.versions) + ch_fasta = PREPARE_REFERENCE_FILES.out.prepped_fasta + ch_fai = PREPARE_REFERENCE_FILES.out.prepped_fai + + downloaded_model_files = PREPARE_REFERENCE_FILES.out.downloaded_model_files + + // ASCAT files + allele_files = PREPARE_REFERENCE_FILES.out.allele_files + loci_files = PREPARE_REFERENCE_FILES.out.loci_files + gc_file = PREPARE_REFERENCE_FILES.out.gc_file + rt_file = PREPARE_REFERENCE_FILES.out.rt_file + + // + // MODULE: FIBERTOOLSRS_PREDICTM6A // - def topic_versions = Channel.topic("versions") - .distinct() - .branch { entry -> - versions_file: entry instanceof Path - versions_tuple: true + // predict m6a in unaligned bam + + if (!params.skip_fiber) { + if(!params.normal_fiber){ + ch_cat_ubams + .branch { meta, bams -> + normal: meta.type == "normal" + tumor: meta.type == "tumor" + } + .set { ch_cat_ubams_normal_branching } + + normal_bams = ch_cat_ubams_normal_branching.normal + ubams = ch_cat_ubams_normal_branching.tumor + } + else { + ubams = ch_cat_ubams + } + ubams + .branch{ meta, bams -> + pacBio: meta.platform == "pb" + ont: meta.platform == "ont" + } + .set{ch_cat_ubams_pacbio_ont_branching} + + pacbio_bams = ch_cat_ubams_pacbio_ont_branching.pacBio + pacbio_bams + .branch{meta, bams -> + kinetics: meta.kinetics == "true" + noKinetics: meta.kinetics == "false" + } + .set{pacbio_bams} + + FIBERTOOLSRS_PREDICTM6A ( + pacbio_bams.kinetics + ) + pacbio_bams.noKinetics + .mix(FIBERTOOLSRS_PREDICTM6A.out.bam) + .set{predicted_bams} + + ch_versions = ch_versions.mix(FIBERTOOLSRS_PREDICTM6A.out.versions) + + ch_cat_ubams_pacbio_ont_branching.ont + .mix(predicted_bams) + .set{fiber_branch} + + fiber_branch + .branch{ meta, bams -> + fiber: meta.fiber == "y" + nonFiber: meta.fiber == "n" + } + .set{fiber_branch} + + // + // MODULE: FIBERTOOLSRS_NUCLEOSOMES + // + + FIBERTOOLSRS_NUCLEOSOMES ( + fiber_branch.fiber + ) + + ch_versions = ch_versions.mix(FIBERTOOLSRS_NUCLEOSOMES.out.versions) + + // + // MODULE: FIBERTOOLSRS_FIRE + // + + FIBERTOOLSRS_FIRE ( + FIBERTOOLSRS_NUCLEOSOMES.out.bam + ) + + ch_versions = ch_versions.mix(FIBERTOOLSRS_FIRE.out.versions) + + if(!params.normal_fiber){ + fiber_branch.nonFiber + .mix(normal_bams) + .mix(FIBERTOOLSRS_FIRE.out.bam) + .set{ch_cat_ubams} + } + else { + fiber_branch.nonFiber + .mix(FIBERTOOLSRS_FIRE.out.bam) + .set{ch_cat_ubams} - def topic_versions_string = topic_versions.versions_tuple - .map { process, tool, version -> - [ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ] } - .groupTuple(by:0) - .map { process, tool_versions -> - tool_versions.unique().sort() - "${process}:\n${tool_versions.join('\n')}" + + if(!params.skip_qc) { + // + // MODULE: FIBERTOOLSRS_QC + // + FIBERTOOLSRS_QC ( + FIBERTOOLSRS_FIRE.out.bam + ) + + ch_versions = ch_versions.mix(FIBERTOOLSRS_QC.out.versions) + } + + } + // + // MODULE: MINIMAP2_ALIGN + // + // Aligns ubams + + MINIMAP2_ALIGN ( + ch_cat_ubams, + ch_fasta, + true, + 'bai', + "", + "" + ) + MINIMAP2_ALIGN.out.bam + .set { ch_minimap_bam } + + + // ch_minimap_bams -> meta: [id, paired_data, platform, sex, type, fiber,basecall_model] + // bam: list of concatenated aligned bams + + ch_versions = ch_versions.mix(MINIMAP2_ALIGN.out.versions) + + + // ch_minimap_bams into tumor and paired to phase the paired ones on normal + // and add index + + ch_minimap_bam + .join(MINIMAP2_ALIGN.out.index) + .branch { meta, bams, bais -> + paired: meta.paired_data + tumor_only: !meta.paired_data } + .set { branched_minimap } + + + // branched_minimap -> meta: [id, paired_data, platform, sex, type, fiber, basecall_model] + // bam: list of concatenated aligned bams + // bais: indexes for bam files - softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file)) - .mix(topic_versions_string) + // + // SUBWORFKLOW: TUMOR_NORMAL_HAPPHASE + // + // Phasing/haplotaging/small germline variant calling for tumor-normal samples + + TUMOR_NORMAL_HAPPHASE ( + branched_minimap.paired, + ch_fasta, + ch_fai, + clair3_modelMap, + clairs_modelMap, + downloaded_model_files + ) + + ch_versions = ch_versions.mix(TUMOR_NORMAL_HAPPHASE.out.versions) + + // + // SUBWORKFLOW: TUMOR_ONLY_HAPPHASE + // + // Phasing/haplotagging for tumor only samples + + dbsnp = file(params.dbsnp) + colors = file(params.colors) + onekgenomes = file(params.onekgenomes) + gnomad = file(params.gnomad) + + + TUMOR_ONLY_HAPPHASE ( + branched_minimap.tumor_only, + ch_fasta, + ch_fai, + clairs_modelMap, + dbsnp, + colors, + onekgenomes, + gnomad + ) + + germline_vep = TUMOR_NORMAL_HAPPHASE.out.germline_vep.mix(TUMOR_ONLY_HAPPHASE.out.germline_vep) + somatic_vep = TUMOR_NORMAL_HAPPHASE.out.somatic_vep.mix(TUMOR_ONLY_HAPPHASE.out.somatic_vep) + + if (!params.skip_vep) { + // + // MODULE: GERMLINE_VEP + // + if (params.vep_custom != null) { + vep_custom = file(params.vep_custom) + } else { + vep_custom = [] + } + if (params.vep_custom_tbi != null) { + vep_custom_tbi = file(params.vep_custom_tbi) + } else { + vep_custom_tbi = [] + } + GERMLINE_VEP ( + germline_vep, + params.vep_genome, + params.vep_species, + params.vep_cache_version, + vep_cache, + ch_fasta, + [], + vep_custom, + vep_custom_tbi + ) + + ch_versions = ch_versions.mix(GERMLINE_VEP.out.versions) + + // + // MODULE: SOMATIC_VEP + // + + SOMATIC_VEP ( + somatic_vep, + params.vep_genome, + params.vep_species, + params.vep_cache_version, + vep_cache, + ch_fasta, + [], + vep_custom, + vep_custom_tbi + ) + + ch_versions = ch_versions.mix(SOMATIC_VEP.out.versions) + } + + + ch_versions = ch_versions.mix(TUMOR_ONLY_HAPPHASE.out.versions) + + // Get Severus input channel + TUMOR_NORMAL_HAPPHASE.out.tumor_normal_severus + .mix(TUMOR_ONLY_HAPPHASE.out.tumor_only_severus) + .set { severus_reformat } + // Format is [meta, tumor_hapbam, tumor_bai, normal_hapbam, normal_bai, vcf] + + // + // MODULE: SEVERUS + // + + SEVERUS ( + severus_reformat, + [[:], params.bed_file, params.pon_file] + ) + + + + ch_versions = ch_versions.mix(SEVERUS.out.versions) + + SEVERUS.out.all_vcf + .map { meta, vcf -> + def extra = [] + return [meta, vcf, extra] + } + .set { sv_vep } + + if(!params.skip_vep) { + SV_VEP ( + sv_vep, + params.vep_genome, + params.vep_species, + params.vep_cache_version, + vep_cache, + ch_fasta, + [], + vep_custom, + vep_custom_tbi + ) + + ch_versions = ch_versions.mix(SV_VEP.out.versions) + } + + // + // MODULE: CRAMINO + // + + if (!params.skip_qc && !params.skip_cramino) { + + CRAMINO_POST ( ch_minimap_bam ) + + ch_versions = ch_versions.mix(CRAMINO_POST.out.versions) + } + + // + // Module: MOSDEPTH + // + + ch_mosdepth_global = Channel.empty() + ch_mosdepth_summary = Channel.empty() + + if (!params.skip_qc && !params.skip_mosdepth) { + + // prepare mosdepth input channel: we need to specify compulsory path to bed as well + ch_minimap_bam.join(MINIMAP2_ALIGN.out.index) + .map { meta, bam, bai -> [meta, bam, bai, []] } + .set { ch_mosdepth_in } + + MOSDEPTH ( + ch_mosdepth_in, + ch_fasta + ) + + ch_mosdepth_global = MOSDEPTH.out.global_txt + ch_mosdepth_summary = MOSDEPTH.out.summary_txt + + ch_versions = ch_versions.mix(MOSDEPTH.out.versions) + } + + // + // SUBWORKFLOW: BAM_STATS_SAMTOOLS + // + ch_bam_stats = Channel.empty() + ch_bam_flagstat = Channel.empty() + ch_bam_idxstats = Channel.empty() + + if (!params.skip_qc && !params.skip_bamstats ) { + + BAM_STATS_SAMTOOLS ( + ch_minimap_bam.join(MINIMAP2_ALIGN.out.index), // Join bam channel with index channel + ch_fasta + ) + + bam_stats_ch = BAM_STATS_SAMTOOLS.out.stats + bam_flagstat_ch = BAM_STATS_SAMTOOLS.out.flagstat + bam_idxstats_ch = BAM_STATS_SAMTOOLS.out.idxstats + + ch_versions = ch_versions.mix(BAM_STATS_SAMTOOLS.out.versions) + } + + // + // MODULE: ASCAT + // + + if (!params.skip_ascat) { + severus_reformat + .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf, tbi -> + return [meta, normal_bam, normal_bai, tumor_bam, tumor_bai] + } + .set { ascat_ch } + + ASCAT ( + ascat_ch, + params.genome_name, + allele_files, + loci_files, + [], + [], + [], + [] + ) + + ch_versions = ch_versions.mix(ASCAT.out.versions) + } + + // + // MODULE: WAKHAN + // + + if (!params.skip_wakhan) { + + // Prepare input channel for WAKHAN + severus_reformat + .map { meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf, tbi -> + return [meta, tumor_bam, tumor_bai, normal_bam, normal_bai, vcf] + } + .join(SEVERUS.out.all_vcf) + .set { wakhan_input } + + WAKHAN ( + wakhan_input, + ch_fasta + ) + + ch_versions = ch_versions.mix(WAKHAN.out.versions) + } + + // + // Collate and save software versions + // + softwareVersionsToYAML(ch_versions) .collectFile( storeDir: "${params.outdir}/pipeline_info", name: 'lrsomatic_software_' + 'mqc_' + 'versions.yml', @@ -57,24 +604,24 @@ workflow LRSOMATIC { // // MODULE: MultiQC // - ch_multiqc_config = channel.fromPath( + ch_multiqc_config = Channel.fromPath( "$projectDir/assets/multiqc_config.yml", checkIfExists: true) ch_multiqc_custom_config = params.multiqc_config ? - channel.fromPath(params.multiqc_config, checkIfExists: true) : - channel.empty() + Channel.fromPath(params.multiqc_config, checkIfExists: true) : + Channel.empty() ch_multiqc_logo = params.multiqc_logo ? - channel.fromPath(params.multiqc_logo, checkIfExists: true) : - channel.empty() + Channel.fromPath(params.multiqc_logo, checkIfExists: true) : + Channel.empty() - summary_params = paramsSummaryMap( - workflow, parameters_schema: "nextflow_schema.json") - ch_workflow_summary = channel.value(paramsSummaryMultiqc(summary_params)) - ch_multiqc_files = ch_multiqc_files.mix( + summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json") + ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params)) + ch_multiqc_files = ch_multiqc_files.mix( ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml')) + ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true) - ch_methods_description = channel.value( + ch_methods_description = Channel.value( methodsDescriptionText(ch_multiqc_custom_methods_description)) ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions) @@ -85,6 +632,15 @@ workflow LRSOMATIC { ) ) + // Collect MultiQC files + ch_multiqc_files = ch_multiqc_files.mix(ch_bam_stats.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_bam_flagstat.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_bam_idxstats.collect{it[1]}.ifEmpty([])) + + ch_multiqc_files = ch_multiqc_files.mix(ch_mosdepth_global.collect{it[1]}.ifEmpty([])) + ch_multiqc_files = ch_multiqc_files.mix(ch_mosdepth_summary.collect{it[1]}.ifEmpty([])) + + MULTIQC ( ch_multiqc_files.collect(), ch_multiqc_config.toList(), @@ -94,8 +650,11 @@ workflow LRSOMATIC { [] ) - emit:multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html - versions = ch_versions // channel: [ path(versions.yml) ] + emit: + multiqc_report = MULTIQC.out.report.toList() // channel: /path/to/multiqc_report.html + versions = ch_versions // channel: [ path(versions.yml) ] + + } @@ -103,4 +662,4 @@ workflow LRSOMATIC { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ THE END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ +*/ \ No newline at end of file From e1d6fc76c192b198e93e8cbe94953598fb1abeb0 Mon Sep 17 00:00:00 2001 From: ljwharbers Date: Thu, 27 Nov 2025 16:34:30 +0100 Subject: [PATCH 19/20] pre-commit --- workflows/lrsomatic.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/lrsomatic.nf b/workflows/lrsomatic.nf index 7b56a332..2b84c973 100644 --- a/workflows/lrsomatic.nf +++ b/workflows/lrsomatic.nf @@ -662,4 +662,4 @@ workflow LRSOMATIC { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ THE END ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -*/ \ No newline at end of file +*/ From 129acab07589522245fe9a1302e47b6b18afff65 Mon Sep 17 00:00:00 2001 From: robert-a-forsyth Date: Fri, 28 Nov 2025 09:19:33 +0100 Subject: [PATCH 20/20] snap update --- ro-crate-metadata.json | 2 +- tests/default.nf.test.snap | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ro-crate-metadata.json b/ro-crate-metadata.json index 2d439fec..f772e522 100644 --- a/ro-crate-metadata.json +++ b/ro-crate-metadata.json @@ -23,7 +23,7 @@ "@type": "Dataset", "creativeWorkStatus": "InProgress", "datePublished": "2025-11-20T09:56:35+00:00", - "description": "# IntGenomicsLab/lrsomatic\n\n[![Open in GitHub Codespaces](https://img.shields.io/badge/Open_In_GitHub_Codespaces-black?labelColor=grey&logo=github)](https://github.com/codespaces/new/IntGenomicsLab/lrsomatic)\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.5.1-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.5.1)\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 bioinformatics pipeline that ...\n\n\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\n\n\nNow, you can run the pipeline using:\n\n\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/lrsomatic was originally written by Jonas Demeulemeester.\n\nWe thank the following people for their extensive assistance in the development of this pipeline:\n\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", + "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" diff --git a/tests/default.nf.test.snap b/tests/default.nf.test.snap index 94489ba0..ccd6e7a6 100644 --- a/tests/default.nf.test.snap +++ b/tests/default.nf.test.snap @@ -1,7 +1,6 @@ { "-profile test": { "content": [ - 78, { "BCFTOOLS_CONCAT": { "bcftools": 1.22 @@ -370,6 +369,6 @@ "nf-test": "0.9.3", "nextflow": "25.10.0" }, - "timestamp": "2025-10-30T17:00:44.230935974" + "timestamp": "2025-11-27T17:37:23.810503056" } } \ No newline at end of file